From bf61de01a75c67e2003405c3a07f948ba4799751 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 31 Aug 2020 13:36:48 -0400 Subject: [PATCH 001/177] Start documenting battle factory screen --- common_syms/battle_factory_screen.txt | 2 +- .../scripts.inc | 2 +- .../factory_screen/action_box_left.png | Bin 0 -> 156 bytes .../factory_screen/action_box_right.png | Bin 0 -> 134 bytes .../factory_screen/action_highlight_left.png | Bin 0 -> 165 bytes .../action_highlight_middle.png | Bin 0 -> 139 bytes .../factory_screen/action_highlight_right.png | Bin 0 -> 139 bytes .../battle_frontier/factory_screen/arrow.png | Bin 0 -> 167 bytes .../factory_screen/interface.pal} | 0 .../factory_screen/menu_highlight_left.png | Bin 0 -> 135 bytes .../factory_screen/menu_highlight_right.png | Bin 0 -> 132 bytes .../factory_screen/mon_pic_bg.bin} | Bin .../factory_screen/mon_pic_bg.png | Bin 0 -> 138 bytes .../factory_screen/mon_pic_bg_anim.png | Bin 0 -> 158 bytes .../factory_screen/pokeball.png | Bin 0 -> 263 bytes .../factory_screen/pokeball_gray.pal} | 0 .../factory_screen/pokeball_selected.pal} | 0 .../factory_screen/text.pal} | 0 graphics/unknown/unknown_60F1BC.png | Bin 211 -> 0 bytes graphics/unknown/unknown_60F3BC.png | Bin 115 -> 0 bytes graphics/unknown/unknown_60F43C.png | Bin 75 -> 0 bytes graphics/unknown/unknown_60F53C.png | Bin 72 -> 0 bytes graphics/unknown/unknown_60F63C.png | Bin 99 -> 0 bytes graphics/unknown/unknown_60F6BC.png | Bin 77 -> 0 bytes graphics/unknown/unknown_60F7BC.png | Bin 110 -> 0 bytes graphics/unknown/unknown_60F83C.png | Bin 82 -> 0 bytes graphics/unknown/unknown_60F93C.png | Bin 82 -> 0 bytes graphics/unknown/unknown_60FA3C.png | Bin 98 -> 0 bytes graphics/unknown/unknown_61033C.png | Bin 78 -> 0 bytes graphics/unknown/unknown_61039C.pal | 19 - src/battle_factory.c | 42 +- src/battle_factory_screen.c | 674 +++++++++--------- 32 files changed, 367 insertions(+), 372 deletions(-) create mode 100644 graphics/battle_frontier/factory_screen/action_box_left.png create mode 100644 graphics/battle_frontier/factory_screen/action_box_right.png create mode 100644 graphics/battle_frontier/factory_screen/action_highlight_left.png create mode 100644 graphics/battle_frontier/factory_screen/action_highlight_middle.png create mode 100644 graphics/battle_frontier/factory_screen/action_highlight_right.png create mode 100644 graphics/battle_frontier/factory_screen/arrow.png rename graphics/{unknown/unknown_60F17C.pal => battle_frontier/factory_screen/interface.pal} (100%) create mode 100644 graphics/battle_frontier/factory_screen/menu_highlight_left.png create mode 100644 graphics/battle_frontier/factory_screen/menu_highlight_right.png rename graphics/{unknown/unknown_61023C.bin => battle_frontier/factory_screen/mon_pic_bg.bin} (100%) create mode 100644 graphics/battle_frontier/factory_screen/mon_pic_bg.png create mode 100644 graphics/battle_frontier/factory_screen/mon_pic_bg_anim.png create mode 100644 graphics/battle_frontier/factory_screen/pokeball.png rename graphics/{unknown/unknown_60F13C.pal => battle_frontier/factory_screen/pokeball_gray.pal} (100%) rename graphics/{unknown/unknown_60F15C.pal => battle_frontier/factory_screen/pokeball_selected.pal} (100%) rename graphics/{unknown/unknown_61046C.pal => battle_frontier/factory_screen/text.pal} (100%) delete mode 100644 graphics/unknown/unknown_60F1BC.png delete mode 100644 graphics/unknown/unknown_60F3BC.png delete mode 100644 graphics/unknown/unknown_60F43C.png delete mode 100644 graphics/unknown/unknown_60F53C.png delete mode 100644 graphics/unknown/unknown_60F63C.png delete mode 100644 graphics/unknown/unknown_60F6BC.png delete mode 100644 graphics/unknown/unknown_60F7BC.png delete mode 100644 graphics/unknown/unknown_60F83C.png delete mode 100644 graphics/unknown/unknown_60F93C.png delete mode 100644 graphics/unknown/unknown_60FA3C.png delete mode 100644 graphics/unknown/unknown_61033C.png delete mode 100644 graphics/unknown/unknown_61039C.pal diff --git a/common_syms/battle_factory_screen.txt b/common_syms/battle_factory_screen.txt index 9f68681399..3ddeb6d3b1 100644 --- a/common_syms/battle_factory_screen.txt +++ b/common_syms/battle_factory_screen.txt @@ -1 +1 @@ -gUnknown_030062E8 +gFactorySelect_CurrentOptionFunc diff --git a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc index 48d2bcc3ad..e856971467 100644 --- a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc @@ -168,7 +168,7 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_SwapMons:: @ 8259DF2 fadescreen FADE_TO_BLACK factory_swapmons waitstate - compare VAR_RESULT, 1 + compare VAR_RESULT, TRUE @ Did player keep current pokemon goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_EnterBattleRoom factory_setswapped msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_YourSwapIsComplete, MSGBOX_DEFAULT diff --git a/graphics/battle_frontier/factory_screen/action_box_left.png b/graphics/battle_frontier/factory_screen/action_box_left.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c943a15a9ef5ab494b26ac28e4aa64aabce955 GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=2w9pMhaX@wa#H-T_I7 z2rhE%C%+#+IdxAL#}JO0wZ}H{GAJ+{-r!-``M*9{QTAiXx#rfRhmsOEZitA`sTW_L V&ciO{Wnm67&ePS;Wt~$(699B alfIa(b0#*S8$&w`uq758|jS^e|j1vTeTNVPjnJ$b4 dnm%lK3=F|c>_6){SZhEgd%F6$taD0e0swIgCCUH* literal 0 HcmV?d00001 diff --git a/graphics/unknown/unknown_60F17C.pal b/graphics/battle_frontier/factory_screen/interface.pal similarity index 100% rename from graphics/unknown/unknown_60F17C.pal rename to graphics/battle_frontier/factory_screen/interface.pal diff --git a/graphics/battle_frontier/factory_screen/menu_highlight_left.png b/graphics/battle_frontier/factory_screen/menu_highlight_left.png new file mode 100644 index 0000000000000000000000000000000000000000..1c39f725010c1fb35d64e5f64fb047c3551b1ef4 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!VDx^^%AmxltF+`h%1l=g8vK*ONzg}d-o1V zLPT(pYd`t@0Llq@x;TbNOifNmNC=Nu7_a~U literal 0 HcmV?d00001 diff --git a/graphics/unknown/unknown_61023C.bin b/graphics/battle_frontier/factory_screen/mon_pic_bg.bin similarity index 100% rename from graphics/unknown/unknown_61023C.bin rename to graphics/battle_frontier/factory_screen/mon_pic_bg.bin diff --git a/graphics/battle_frontier/factory_screen/mon_pic_bg.png b/graphics/battle_frontier/factory_screen/mon_pic_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..b72da6f44b535b91f10381a76541bac282e22ad4 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^57?|7~IT$udvSc1&WH`5j#js03Aq=R1!PC{xWt~$(699q#JVyWk literal 0 HcmV?d00001 diff --git a/graphics/battle_frontier/factory_screen/mon_pic_bg_anim.png b/graphics/battle_frontier/factory_screen/mon_pic_bg_anim.png new file mode 100644 index 0000000000000000000000000000000000000000..324063d0deb5d012b29d1f8260ffc970749a24cb GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ipS0H`$|2yK*%vYCGfqFDO zT^vI^I+Gt%w~N~(9MJ#&?(T}FK-R@vZlXO}5}^jG5_V`lIIRDlfq`EuuP;*8%>k&1 N!PC{xWt~$(696H8Ng)6L literal 0 HcmV?d00001 diff --git a/graphics/battle_frontier/factory_screen/pokeball.png b/graphics/battle_frontier/factory_screen/pokeball.png new file mode 100644 index 0000000000000000000000000000000000000000..b3426fc727e3fd1da1747093956d381bff9dbc52 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvg8-ipS0FuQ%97&Z<|R>4j*dZB zuU7BfdlVva_3AyKNOkp^IdjeemHq$!-_gnRS2XoOTmXx%lO4%cUsil8N!!iZ*PXE7_AK+NGt4t1s~NXw`R^Ex;A- z!2jUdL)-Ta?;G|t{P|+qbi$*h`S%B#z@v%HZ(i~9U%hNvn&2XHVFVdQ&MBb@ E08Q|1UjP6A literal 0 HcmV?d00001 diff --git a/graphics/unknown/unknown_60F13C.pal b/graphics/battle_frontier/factory_screen/pokeball_gray.pal similarity index 100% rename from graphics/unknown/unknown_60F13C.pal rename to graphics/battle_frontier/factory_screen/pokeball_gray.pal diff --git a/graphics/unknown/unknown_60F15C.pal b/graphics/battle_frontier/factory_screen/pokeball_selected.pal similarity index 100% rename from graphics/unknown/unknown_60F15C.pal rename to graphics/battle_frontier/factory_screen/pokeball_selected.pal diff --git a/graphics/unknown/unknown_61046C.pal b/graphics/battle_frontier/factory_screen/text.pal similarity index 100% rename from graphics/unknown/unknown_61046C.pal rename to graphics/battle_frontier/factory_screen/text.pal diff --git a/graphics/unknown/unknown_60F1BC.png b/graphics/unknown/unknown_60F1BC.png deleted file mode 100644 index 185b93d57c58335da10ec86bc3c7457b8b9ea933..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk^Bp4pd2o=l-?H!QE1>tCIo{ptXROhgcK_t!|V zM$Z~1AEsZ|9)?SJaqUU56`U^P#bvlc>50Z;+0+|0?lbFt%HGS6+j+)tcR~WlwVtki JF6*2UngDXdPj~V|9@=C0fSAf Y41YQvCtm*kd^t#!r>mdKI;Vst0Iy6JN&o-= diff --git a/graphics/unknown/unknown_60F53C.png b/graphics/unknown/unknown_60F53C.png deleted file mode 100644 index 65450c7b33878b2eb300b83f301e5e5b870ea32d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et0wfrw&pzJ*r1(8u9780gChzEGlW^O{z>xp? UE@P2j(;bi!Pgg&ebxsLQ00v(XeEp+6kfg4*I3_Bg-r+hoeJo`vVwR!3%kO2&yu6{1- HoD!MAs(H{KQubTPZ&R#E-oSy uYOpFHZ diff --git a/graphics/unknown/unknown_61039C.pal b/graphics/unknown/unknown_61039C.pal deleted file mode 100644 index 89f527ce4d..0000000000 --- a/graphics/unknown/unknown_61039C.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -0 0 0 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 diff --git a/src/battle_factory.c b/src/battle_factory.c index 940e71f7da..8a94dff0c7 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -26,8 +26,8 @@ static void InitFactoryChallenge(void); static void GetBattleFactoryData(void); static void SetBattleFactoryData(void); static void SaveFactoryChallenge(void); -static void nullsub_75(void); -static void nullsub_123(void); +static void FactoryDummy1(void); +static void FactoryDummy2(void); static void SelectInitialRentalMons(void); static void SwapRentalMons(void); static void SetPerformedRentalSwap(void); @@ -42,8 +42,16 @@ static void RestorePlayerPartyHeldItems(void); static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 arg2); static u8 GetMoveBattleStyle(u16 move); -// Const rom data. -static const u8 sRequiredMoveCounts[] = {3, 3, 3, 2, 2, 2, 2}; +// Number of moves needed on the team to be considered using a certain battle style +static const u8 sRequiredMoveCounts[FACTORY_NUM_STYLES - 1] = { + [FACTORY_STYLE_PREPARATION - 1] = 3, + [FACTORY_STYLE_SLOW_STEADY - 1] = 3, + [FACTORY_STYLE_ENDURANCE - 1] = 3, + [FACTORY_STYLE_HIGH_RISK - 1] = 2, + [FACTORY_STYLE_WEAKENING - 1] = 2, + [FACTORY_STYLE_UNPREDICTABLE - 1] = 2, + [FACTORY_STYLE_WEATHER - 1] = 2 +}; static const u16 sMoves_TotalPreparation[] = { @@ -120,8 +128,8 @@ static void (* const sBattleFactoryFunctions[])(void) = [BATTLE_FACTORY_FUNC_GET_DATA] = GetBattleFactoryData, [BATTLE_FACTORY_FUNC_SET_DATA] = SetBattleFactoryData, [BATTLE_FACTORY_FUNC_SAVE] = SaveFactoryChallenge, - [BATTLE_FACTORY_FUNC_NULL] = nullsub_75, - [BATTLE_FACTORY_FUNC_NULL2] = nullsub_123, + [BATTLE_FACTORY_FUNC_NULL] = FactoryDummy1, + [BATTLE_FACTORY_FUNC_NULL2] = FactoryDummy2, [BATTLE_FACTORY_FUNC_SELECT_RENT_MONS] = SelectInitialRentalMons, [BATTLE_FACTORY_FUNC_SWAP_RENT_MONS] = SwapRentalMons, [BATTLE_FACTORY_FUNC_SET_SWAPPED] = SetPerformedRentalSwap, @@ -267,12 +275,12 @@ static void SaveFactoryChallenge(void) SaveGameFrontier(); } -static void nullsub_75(void) +static void FactoryDummy1(void) { } -static void nullsub_123(void) +static void FactoryDummy2(void) { } @@ -377,10 +385,10 @@ static void SetRentalsToOpponentParty(void) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId = gUnknown_03006298[i]; - gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL); - gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality = GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY, NULL); - gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityNum = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ABILITY_NUM, NULL); + gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].monId = gUnknown_03006298[i]; + gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL); + gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].personality = GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY, NULL); + gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].abilityNum = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ABILITY_NUM, NULL); SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[gUnknown_03006298[i]].itemTableId]); } } @@ -456,13 +464,13 @@ static void SetPlayerAndOpponentParties(void) case 2: for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - monId = gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId; - ivs = gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs; + monId = gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].monId; + ivs = gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].ivs; CreateMon(&gEnemyParty[i], gFacilityTrainerMons[monId].species, monLevel, ivs, - TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality, + TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].personality, OT_ID_PLAYER_ID, 0); count = 0; @@ -485,7 +493,7 @@ static void SetPlayerAndOpponentParties(void) for (k = 0; k < MAX_MON_MOVES; k++) SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monId].moves[k], k); SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]); - SetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityNum); + SetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].abilityNum); } break; } @@ -640,7 +648,7 @@ static void GetOpponentBattleStyle(void) } } - gSpecialVar_Result = 0; + gSpecialVar_Result = FACTORY_STYLE_NONE; for (i = 1; i < FACTORY_NUM_STYLES; i++) { if (stylePoints[i] >= sRequiredMoveCounts[i - 1]) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 388881a1c4..379c036135 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -30,33 +30,41 @@ #include "constants/rgb.h" // Select_ refers to the first Pokemon selection screen where you choose 3 Pokemon. -// Swap_ refers to the consecutive selection screen where you can keep your Pokemon or swap one with beaten trainer's. +// Swap_ refers to the subsequent selection screens where you can swap a Pokemon with one from the beaten trainer -#define MENU_SUMMARY 0 -#define MENU_RENT 1 -#define MENU_DESELECT 1 -#define MENU_OTHERS 2 -#define MENU_OPTIONS_COUNT 3 +// 'Action' refers to the 3 Selectable mons, Cancel, Pknm for swap windows. +#define ACTIONS_PLAYER_SCREEN 0 +#define ACTIONS_ENEMY_SCREEN 1 + +#define SELECTMENU_SUMMARY 0 +#define SELECTMENU_RENT 1 +#define SELECTMENU_OTHERS 2 +#define SELECTMENU_OPTIONS_COUNT 3 + +#define SWAPMENU_SUMMARY 0 +#define SWAPMENU_SWAP 1 +#define SWAPMENU_RECHOOSE 2 +#define SWAPMENU_OPTIONS_COUNT 3 #define SELECTABLE_MONS_COUNT 6 -#define TAG_PAL_BALL_GREY 0x64 -#define TAG_PAL_BALL_SELECTED 0x65 -#define TAG_PAL_66 0x66 -#define TAG_PAL_67 0x67 +#define PALTAG_BALL_GRAY 0x64 +#define PALTAG_BALL_SELECTED 0x65 +#define PALTAG_INTERFACE 0x66 +#define PALTAG_MON_PIC_BG 0x67 -#define TAG_TILE_64 0x64 -#define TAG_TILE_65 0x65 -#define TAG_TILE_66 0x66 -#define TAG_TILE_67 0x67 -#define TAG_TILE_68 0x68 -#define TAG_TILE_69 0x69 -#define TAG_TILE_6A 0x6A -#define TAG_TILE_6B 0x6B -#define TAG_TILE_6C 0x6C -#define TAG_TILE_6D 0x6D +#define GFXTAG_BALL 0x64 +#define GFXTAG_ARROW 0x65 +#define GFXTAG_MENU_HIGHLIGHT_LEFT 0x66 +#define GFXTAG_MENU_HIGHLIGHT_RIGHT 0x67 +#define GFXTAG_ACTION_BOX_LEFT 0x68 +#define GFXTAG_ACTION_BOX_RIGHT 0x69 +#define GFXTAG_ACTION_HIGHLIGHT_LEFT 0x6A +#define GFXTAG_ACTION_HIGHLIGHT_MIDDLE 0x6B +#define GFXTAG_ACTION_HIGHLIGHT_RIGHT 0x6C +#define GFXTAG_MON_PIC_BG_ANIM 0x6D -struct FactorySelecteableMon +struct FactorySelectableMon { u16 monId; u16 spriteId; @@ -70,7 +78,7 @@ struct UnkFactoryStruct u8 field1; }; -struct FactorySelectMonsStruct +struct FactorySelectScreen { u8 menuCursorPos; u8 menuCursor1SpriteId; @@ -81,36 +89,32 @@ struct FactorySelectMonsStruct bool8 fromSummaryScreen; u8 yesNoCursorPos; u8 unused8; - struct FactorySelecteableMon mons[SELECTABLE_MONS_COUNT]; - struct UnkFactoryStruct unk294[3]; + struct FactorySelectableMon mons[SELECTABLE_MONS_COUNT]; + struct UnkFactoryStruct unk294[FRONTIER_PARTY_SIZE]; bool8 unk2A0; u8 fadeSpeciesNameTaskId; bool8 unk2A2; - u16 unk2A4; + u16 speciesNameColorBackup; bool8 unk2A6; u8 unk2A7; u8 unk2A8; u8 unk2A9; }; -// 'Action' refers to the 3 Selectable mons, Cancel, Pknm for swap windows. -#define ACTIONS_PLAYER_SCREEN 0 -#define ACTIONS_ENEMY_SCREEN 1 - -struct SwapActionIdAndFunc +struct SwapScreenAction { u8 id; void (*func)(u8 taskId); }; -struct FactorySwapMonsStruct +struct FactorySwapScreen { u8 menuCursorPos; u8 menuCursor1SpriteId; u8 menuCursor2SpriteId; u8 cursorPos; u8 cursorSpriteId; - u8 ballSpriteIds[3]; + u8 ballSpriteIds[FRONTIER_PARTY_SIZE]; u8 unk8[2][3]; u8 unkE[2][2]; u8 playerMonId; @@ -119,7 +123,7 @@ struct FactorySwapMonsStruct bool8 fromSummaryScreen; u8 yesNoCursorPos; u8 actionsCount; - const struct SwapActionIdAndFunc *actionsData; + const struct SwapScreenAction *actionsData; u8 unused1C[4]; bool8 monSwapped; u8 fadeSpeciesNameTaskId; @@ -134,12 +138,12 @@ struct FactorySwapMonsStruct }; // This file's functions. -static void sub_819A44C(struct Sprite *sprite); +static void SpriteCB_Pokeball(struct Sprite *sprite); static void CB2_InitSelectScreen(void); static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V); static void Select_InitMonsData(void); static void Select_InitAllSprites(void); -static void Select_ShowSummaryMonSprite(void); +static void Select_ReshowMonSprite(void); static void Select_PrintSelectMonString(void); static void Select_PrintMonSpecies(void); static void Select_PrintMonCategory(void); @@ -196,9 +200,9 @@ static void Swap_ShowSummaryMonSprite(void); static void Swap_UpdateActionCursorPosition(s8 direction); static void Swap_UpdateBallCursorPosition(s8 direction); static void Swap_RunMenuOptionFunc(u8 taskId); -static void sub_819F0CC(u8 taskId); -static void sub_819F114(u8 taskId); -static void sub_819F134(u8 taskId); +static void Swap_OptionSwap(u8 taskId); +static void Swap_OptionSummary(u8 taskId); +static void Swap_OptionRechoose(u8 taskId); static void Swap_RunActionFunc(u8 taskId); static void sub_819F69C(u8 taskId); static void Task_SwapCantHaveSameMons(u8 taskId); @@ -216,70 +220,67 @@ static void Swap_ActionPkmnForSwap(u8 taskId); // Ewram variables static EWRAM_DATA u8 *sSelectMenuTilesetBuffer = NULL; -static EWRAM_DATA u8 *sSelectMonCardBgTilesetBuffer = NULL; +static EWRAM_DATA u8 *sSelectMonPicBgTilesetBuffer = NULL; static EWRAM_DATA u8 *sSelectMenuTilemapBuffer = NULL; -static EWRAM_DATA u8 *sSelectMonCardBgTilemapBuffer = NULL; +static EWRAM_DATA u8 *sSelectMonPicBgTilemapBuffer = NULL; static EWRAM_DATA struct Pokemon *sFactorySelectMons = NULL; static EWRAM_DATA u8 *sSwapMenuTilesetBuffer = NULL; -static EWRAM_DATA u8 *sSwapMonCardBgTilesetBuffer = NULL; +static EWRAM_DATA u8 *sSwapMonPicBgTilesetBuffer = NULL; static EWRAM_DATA u8 *sSwapMenuTilemapBuffer = NULL; -static EWRAM_DATA u8 *sSwapMonCardBgTilemapBuffer = NULL; +static EWRAM_DATA u8 *sSwapMonPicBgTilemapBuffer = NULL; -// IWRAM bss -static struct FactorySelectMonsStruct *sFactorySelectScreen; -static void (*sSwap_CurrentTableFunc)(u8 taskId); -static struct FactorySwapMonsStruct *sFactorySwapScreen; +static struct FactorySelectScreen *sFactorySelectScreen; +static void (*sSwap_CurrentOptionFunc)(u8 taskId); +static struct FactorySwapScreen *sFactorySwapScreen; -// IWRAM common -u8 (*gUnknown_030062E8)(void); +u8 (*gFactorySelect_CurrentOptionFunc)(void); -// Const rom data. -static const u16 gUnknown_0860F13C[] = INCBIN_U16("graphics/unknown/unknown_60F13C.gbapal"); -static const u16 gUnknown_0860F15C[] = INCBIN_U16("graphics/unknown/unknown_60F15C.gbapal"); -static const u16 gUnknown_0860F17C[] = INCBIN_U16("graphics/unknown/unknown_60F17C.gbapal"); -static const u8 gUnknown_0860F1BC[] = INCBIN_U8("graphics/unknown/unknown_60F1BC.4bpp"); -static const u8 gUnknown_0860F3BC[] = INCBIN_U8("graphics/unknown/unknown_60F3BC.4bpp"); -static const u8 gUnknown_0860F43C[] = INCBIN_U8("graphics/unknown/unknown_60F43C.4bpp"); -static const u8 gUnknown_0860F53C[] = INCBIN_U8("graphics/unknown/unknown_60F53C.4bpp"); -static const u8 gUnknown_0860F63C[] = INCBIN_U8("graphics/unknown/unknown_60F63C.4bpp"); -static const u8 gUnknown_0860F6BC[] = INCBIN_U8("graphics/unknown/unknown_60F6BC.4bpp"); -static const u8 gUnknown_0860F7BC[] = INCBIN_U8("graphics/unknown/unknown_60F7BC.4bpp"); -static const u8 gUnknown_0860F83C[] = INCBIN_U8("graphics/unknown/unknown_60F83C.4bpp"); -static const u8 gUnknown_0860F93C[] = INCBIN_U8("graphics/unknown/unknown_60F93C.4bpp"); -static const u8 gUnknown_0860FA3C[] = INCBIN_U8("graphics/unknown/unknown_60FA3C.4bpp"); -static const u8 gUnknown_0861023C[] = INCBIN_U8("graphics/unknown/unknown_61023C.bin"); -static const u8 gUnknown_0861033C[] = INCBIN_U8("graphics/unknown/unknown_61033C.4bpp"); -static const u16 gUnknown_0861039C[] = INCBIN_U16("graphics/unknown/unknown_61039C.gbapal"); +static const u16 sPokeballGray_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/pokeball_gray.gbapal"); +static const u16 sPokeballSelected_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/pokeball_selected.gbapal"); +static const u16 sInterface_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/interface.gbapal"); // Arrow, menu/action highlights, action box, etc +static const u8 sPokeball_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/pokeball.4bpp"); // Unused, gPokeballSelection_Gfx used instead +static const u8 sArrow_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/arrow.4bpp"); +static const u8 sMenuHighlightLeft_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/menu_highlight_left.4bpp"); +static const u8 sMenuHighlightRight_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/menu_highlight_right.4bpp"); +static const u8 sActionBoxLeft_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_box_left.4bpp"); +static const u8 sActionBoxRight_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_box_right.4bpp"); +static const u8 sActionHighlightLeft_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_highlight_left.4bpp"); +static const u8 sActionHighlightMiddle_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_highlight_middle.4bpp"); +static const u8 sActionHighlightRight_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_highlight_right.4bpp"); +static const u8 sMonPicBgAnim_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg_anim.4bpp"); +static const u8 sMonPicBg_Tilemap[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg.bin"); +static const u8 sMonPicBg_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg.4bpp"); +static const u16 sMonPicBg_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/mon_pic_bg.gbapal"); -static const struct SpriteSheet gUnknown_086103BC[] = +static const struct SpriteSheet sSelect_SpriteSheets[] = { - {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), TAG_TILE_65}, - {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), TAG_TILE_66}, - {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), TAG_TILE_67}, - {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), TAG_TILE_6D}, + {sArrow_Gfx, sizeof(sArrow_Gfx), GFXTAG_ARROW}, + {sMenuHighlightLeft_Gfx, sizeof(sMenuHighlightLeft_Gfx), GFXTAG_MENU_HIGHLIGHT_LEFT}, + {sMenuHighlightRight_Gfx, sizeof(sMenuHighlightRight_Gfx), GFXTAG_MENU_HIGHLIGHT_RIGHT}, + {sMonPicBgAnim_Gfx, sizeof(sMonPicBgAnim_Gfx), GFXTAG_MON_PIC_BG_ANIM}, {}, }; -static const struct CompressedSpriteSheet gUnknown_086103E4[] = +static const struct CompressedSpriteSheet sSelect_BallGfx[] = { - {gPokeballSelection_Gfx, 0x800, TAG_TILE_64}, + {gPokeballSelection_Gfx, 0x800, GFXTAG_BALL}, {}, }; -static const struct SpritePalette gUnknown_086103F4[] = +static const struct SpritePalette sSelect_SpritePalettes[] = { - {gUnknown_0860F13C, TAG_PAL_BALL_GREY}, - {gUnknown_0860F15C, TAG_PAL_BALL_SELECTED}, - {gUnknown_0860F17C, TAG_PAL_66}, - {gUnknown_0861039C, TAG_PAL_67}, + {sPokeballGray_Pal, PALTAG_BALL_GRAY}, + {sPokeballSelected_Pal, PALTAG_BALL_SELECTED}, + {sInterface_Pal, PALTAG_INTERFACE}, + {sMonPicBg_Pal, PALTAG_MON_PIC_BG}, {}, }; -u8 static (* const sSelect_MenuOptionFuncs[])(void) = +u8 static (* const sSelect_MenuOptionFuncs[SELECTMENU_OPTIONS_COUNT])(void) = { - [MENU_SUMMARY] = Select_OptionSummary, - [MENU_RENT] /*Or Deselect*/ = Select_OptionRentDeselect, - [MENU_OTHERS] = Select_OptionOthers + Select_OptionSummary, + Select_OptionRentDeselect, + Select_OptionOthers }; static const struct BgTemplate sSelect_BgTemplates[] = @@ -372,12 +373,11 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = DUMMY_WIN_TEMPLATE, }; -static const u16 gUnknown_0861046C[] = INCBIN_U16("graphics/unknown/unknown_61046C.gbapal"); - +static const u16 sSelectText_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/text.gbapal"); static const u8 sMenuOptionTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_TRANSPARENT}; static const u8 sSpeciesNameTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_TRANSPARENT}; -static const struct OamData gUnknown_0861047C = +static const struct OamData sOam_Select_Pokeball = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -394,7 +394,7 @@ static const struct OamData gUnknown_0861047C = .affineParam = 0, }; -static const struct OamData gUnknown_08610484 = +static const struct OamData sOam_Select_Arrow = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -411,7 +411,7 @@ static const struct OamData gUnknown_08610484 = .affineParam = 0, }; -static const struct OamData gUnknown_0861048C = +static const struct OamData sOam_Select_MenuHighlight = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -428,7 +428,7 @@ static const struct OamData gUnknown_0861048C = .affineParam = 0, }; -static const struct OamData gUnknown_08610494 = +static const struct OamData sOam_Select_MonPicBgAnim = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -445,25 +445,25 @@ static const struct OamData gUnknown_08610494 = .affineParam = 1, }; -static const union AnimCmd gUnknown_0861049C[] = +static const union AnimCmd sAnim_Select_Interface[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd gUnknown_086104A4[] = +static const union AnimCmd sAnim_Select_MonPicBgAnim[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd gUnknown_086104AC[] = +static const union AnimCmd sAnim_Select_Pokeball_Still[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_END, }; -static const union AnimCmd gUnknown_086104B4[] = +static const union AnimCmd sAnim_Select_Pokeball_Moving[] = { ANIMCMD_FRAME(16, 4), ANIMCMD_FRAME(0, 4), @@ -485,20 +485,20 @@ static const union AnimCmd gUnknown_086104B4[] = ANIMCMD_END, }; -static const union AnimCmd * const gUnknown_086104FC[] = +static const union AnimCmd * const sAnims_Select_Interface[] = { - gUnknown_0861049C, + sAnim_Select_Interface, }; -static const union AnimCmd * const gUnknown_08610500[] = +static const union AnimCmd * const sAnims_Select_MonPicBgAnim[] = { - gUnknown_086104A4, + sAnim_Select_MonPicBgAnim, }; -static const union AnimCmd * const gUnknown_08610504[] = +static const union AnimCmd * const sAnims_Select_Pokeball[] = { - gUnknown_086104AC, - gUnknown_086104B4, + sAnim_Select_Pokeball_Still, + sAnim_Select_Pokeball_Moving, }; static const union AffineAnimCmd gUnknown_0861050C[] = @@ -537,98 +537,98 @@ static const union AffineAnimCmd gUnknown_086105BC[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd * const gUnknown_086105CC[] = +static const union AffineAnimCmd * const sAffineAnims_Select_MonPicBgAnim[] = { gUnknown_0861050C, gUnknown_0861056C, gUnknown_086105BC, }; -static const struct SpriteTemplate gUnknown_086105D8 = +static const struct SpriteTemplate sSpriteTemplate_Select_Pokeball = { - .tileTag = TAG_TILE_64, - .paletteTag = TAG_PAL_BALL_GREY, - .oam = &gUnknown_0861047C, - .anims = gUnknown_08610504, + .tileTag = GFXTAG_BALL, + .paletteTag = PALTAG_BALL_GRAY, + .oam = &sOam_Select_Pokeball, + .anims = sAnims_Select_Pokeball, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_819A44C + .callback = SpriteCB_Pokeball }; -static const struct SpriteTemplate gUnknown_086105F0 = +static const struct SpriteTemplate sSpriteTemplate_Select_Arrow = { - .tileTag = TAG_TILE_65, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_08610484, - .anims = gUnknown_086104FC, + .tileTag = GFXTAG_ARROW, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Select_Arrow, + .anims = sAnims_Select_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_08610608 = +static const struct SpriteTemplate sSpriteTemplate_Select_MenuHighlightLeft = { - .tileTag = TAG_TILE_66, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_0861048C, - .anims = gUnknown_086104FC, + .tileTag = GFXTAG_MENU_HIGHLIGHT_LEFT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Select_MenuHighlight, + .anims = sAnims_Select_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_08610620 = +static const struct SpriteTemplate sSpriteTemplate_Select_MenuHighlightRight = { - .tileTag = TAG_TILE_67, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_0861048C, - .anims = gUnknown_086104FC, + .tileTag = GFXTAG_MENU_HIGHLIGHT_RIGHT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Select_MenuHighlight, + .anims = sAnims_Select_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_08610638 = +static const struct SpriteTemplate sSpriteTemplate_Select_MonPicBgAnim = { - .tileTag = TAG_TILE_6D, - .paletteTag = TAG_PAL_67, - .oam = &gUnknown_08610494, - .anims = gUnknown_08610500, + .tileTag = GFXTAG_MON_PIC_BG_ANIM, + .paletteTag = PALTAG_MON_PIC_BG, + .oam = &sOam_Select_MonPicBgAnim, + .anims = sAnims_Select_MonPicBgAnim, .images = NULL, - .affineAnims = gUnknown_086105CC, + .affineAnims = sAffineAnims_Select_MonPicBgAnim, .callback = SpriteCallbackDummy }; -static const struct SpriteSheet gUnknown_08610650[] = +static const struct SpriteSheet sSwap_SpriteSheets[] = { - {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), TAG_TILE_65}, - {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), TAG_TILE_66}, - {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), TAG_TILE_67}, - {gUnknown_0860F63C, sizeof(gUnknown_0860F63C), TAG_TILE_68}, - {gUnknown_0860F6BC, sizeof(gUnknown_0860F6BC), TAG_TILE_69}, - {gUnknown_0860F7BC, 0x100, TAG_TILE_6A}, - {gUnknown_0860F83C, sizeof(gUnknown_0860F83C), TAG_TILE_6B}, - {gUnknown_0860F93C, sizeof(gUnknown_0860F93C), TAG_TILE_6C}, - {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), TAG_TILE_6D}, + {sArrow_Gfx, sizeof(sArrow_Gfx), GFXTAG_ARROW}, + {sMenuHighlightLeft_Gfx, sizeof(sMenuHighlightLeft_Gfx), GFXTAG_MENU_HIGHLIGHT_LEFT}, + {sMenuHighlightRight_Gfx, sizeof(sMenuHighlightRight_Gfx), GFXTAG_MENU_HIGHLIGHT_RIGHT}, + {sActionBoxLeft_Gfx, sizeof(sActionBoxLeft_Gfx), GFXTAG_ACTION_BOX_LEFT}, + {sActionBoxRight_Gfx, sizeof(sActionBoxRight_Gfx), GFXTAG_ACTION_BOX_RIGHT}, + {sActionHighlightLeft_Gfx, 0x100, GFXTAG_ACTION_HIGHLIGHT_LEFT}, + {sActionHighlightMiddle_Gfx, sizeof(sActionHighlightMiddle_Gfx), GFXTAG_ACTION_HIGHLIGHT_MIDDLE}, + {sActionHighlightRight_Gfx, sizeof(sActionHighlightRight_Gfx), GFXTAG_ACTION_HIGHLIGHT_RIGHT}, + {sMonPicBgAnim_Gfx, sizeof(sMonPicBgAnim_Gfx), GFXTAG_MON_PIC_BG_ANIM}, {}, }; -static const struct CompressedSpriteSheet gUnknown_086106A0[] = +static const struct CompressedSpriteSheet sSwap_BallGfx[] = { - {gPokeballSelection_Gfx, 0x800, TAG_TILE_64}, + {gPokeballSelection_Gfx, 0x800, GFXTAG_BALL}, {}, }; -static const struct SpritePalette gUnknown_086106B0[] = +static const struct SpritePalette sSwap_SpritePalettes[] = { - {gUnknown_0860F13C, TAG_PAL_BALL_GREY}, - {gUnknown_0860F15C, TAG_PAL_BALL_SELECTED}, - {gUnknown_0860F17C, TAG_PAL_66}, - {gUnknown_0861039C, TAG_PAL_67}, + {sPokeballGray_Pal, PALTAG_BALL_GRAY}, + {sPokeballSelected_Pal, PALTAG_BALL_SELECTED}, + {sInterface_Pal, PALTAG_INTERFACE}, + {sMonPicBg_Pal, PALTAG_MON_PIC_BG}, {}, }; -static const struct OamData gUnknown_086106D8 = +static const struct OamData sOam_Swap_Pokeball = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -645,7 +645,7 @@ static const struct OamData gUnknown_086106D8 = .affineParam = 0, }; -static const struct OamData gUnknown_086106E0 = +static const struct OamData sOam_Swap_Arrow = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -662,7 +662,7 @@ static const struct OamData gUnknown_086106E0 = .affineParam = 0, }; -static const struct OamData gUnknown_086106E8 = +static const struct OamData sOam_Swap_MenuHighlight = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -696,7 +696,7 @@ static const struct OamData gUnknown_086106F0 = .affineParam = 1, }; -static const union AnimCmd gUnknown_086106F8[] = +static const union AnimCmd sAnim_Swap_Interface[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -708,13 +708,13 @@ static const union AnimCmd gUnknown_08610700[] = ANIMCMD_END, }; -static const union AnimCmd gUnknown_08610708[] = +static const union AnimCmd sAnim_Swap_Pokeball_Still[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_END, }; -static const union AnimCmd gUnknown_08610710[] = +static const union AnimCmd sAnim_Swap_Pokeball_Moving[] = { ANIMCMD_FRAME(16, 4), ANIMCMD_FRAME(0, 4), @@ -736,9 +736,9 @@ static const union AnimCmd gUnknown_08610710[] = ANIMCMD_END, }; -static const union AnimCmd * const gUnknown_08610758[] = +static const union AnimCmd * const sAnims_Swap_Interface[] = { - gUnknown_086106F8, + sAnim_Swap_Interface, }; static const union AnimCmd * const gUnknown_0861075C[] = @@ -746,10 +746,10 @@ static const union AnimCmd * const gUnknown_0861075C[] = gUnknown_08610700, }; -static const union AnimCmd * const gUnknown_08610760[] = +static const union AnimCmd * const sAnims_Swap_Pokeball[] = { - gUnknown_08610708, - gUnknown_08610710, + sAnim_Swap_Pokeball_Still, + sAnim_Swap_Pokeball_Moving, }; static const union AffineAnimCmd gUnknown_08610768[] = @@ -795,54 +795,54 @@ static const union AffineAnimCmd * const gUnknown_08610828[] = gUnknown_08610818, }; -static const struct SpriteTemplate gUnknown_08610834 = +static const struct SpriteTemplate sSpriteTemplate_Swap_Pokeball = { - .tileTag = TAG_TILE_64, - .paletteTag = TAG_PAL_BALL_GREY, - .oam = &gUnknown_086106D8, - .anims = gUnknown_08610760, + .tileTag = GFXTAG_BALL, + .paletteTag = PALTAG_BALL_GRAY, + .oam = &sOam_Swap_Pokeball, + .anims = sAnims_Swap_Pokeball, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_819A44C + .callback = SpriteCB_Pokeball }; -static const struct SpriteTemplate gUnknown_0861084C = +static const struct SpriteTemplate sSpriteTemplate_Swap_Arrow = { - .tileTag = TAG_TILE_65, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_086106E0, - .anims = gUnknown_08610758, + .tileTag = GFXTAG_ARROW, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Swap_Arrow, + .anims = sAnims_Swap_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_08610864 = +static const struct SpriteTemplate sSpriteTemplate_Swap_MenuHighlightLeft = { - .tileTag = TAG_TILE_66, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_086106E8, - .anims = gUnknown_08610758, + .tileTag = GFXTAG_MENU_HIGHLIGHT_LEFT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Swap_MenuHighlight, + .anims = sAnims_Swap_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_0861087C = +static const struct SpriteTemplate sSpriteTemplate_Swap_MenuHighlightRight = { - .tileTag = TAG_TILE_67, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_086106E8, - .anims = gUnknown_08610758, + .tileTag = GFXTAG_MENU_HIGHLIGHT_RIGHT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Swap_MenuHighlight, + .anims = sAnims_Swap_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_08610894 = +static const struct SpriteTemplate sSpriteTemplate_Swap_MonPicBgAnim = { - .tileTag = TAG_TILE_6D, - .paletteTag = TAG_PAL_67, + .tileTag = GFXTAG_MON_PIC_BG_ANIM, + .paletteTag = PALTAG_MON_PIC_BG, .oam = &gUnknown_086106F0, .anims = gUnknown_0861075C, .images = NULL, @@ -850,11 +850,11 @@ static const struct SpriteTemplate gUnknown_08610894 = .callback = SpriteCallbackDummy }; -void static (* const sSwap_MenuOptionFuncs[])(u8 taskId) = +void static (* const sSwap_MenuOptionFuncs[SWAPMENU_OPTIONS_COUNT])(u8 taskId) = { - sub_819F114, - sub_819F0CC, - sub_819F134, + Swap_OptionSummary, + Swap_OptionSwap, + Swap_OptionRechoose, }; static const struct BgTemplate sSwap_BgTemplates[4] = @@ -983,25 +983,25 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = DUMMY_WIN_TEMPLATE, }; -static const u16 gUnknown_08610918[] = {RGB_BLACK, RGB_BLACK, RGB_WHITE, RGB_BLACK, RGB_RED}; // Palette. +static const u16 sSwapText_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/text.gbapal"); // Identical to sSelectText_Pal static const u8 sSwapMenuOptionsTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_TRANSPARENT}; static const u8 sSwapSpeciesNameTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_TRANSPARENT}; -static const struct SwapActionIdAndFunc sSwap_PlayerScreenActions[] = +static const struct SwapScreenAction sSwap_PlayerScreenActions[] = { - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {3, Swap_ActionCancel}, + {.id = 1, .func = Swap_ActionMon}, + {.id = 1, .func = Swap_ActionMon}, + {.id = 1, .func = Swap_ActionMon}, + {.id = 3, .func = Swap_ActionCancel}, }; -static const struct SwapActionIdAndFunc sSwap_EnemyScreenActions[] = +static const struct SwapScreenAction sSwap_EnemyScreenActions[] = { - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {2, Swap_ActionPkmnForSwap}, - {3, Swap_ActionCancel}, + {.id = 1, .func = Swap_ActionMon}, + {.id = 1, .func = Swap_ActionMon}, + {.id = 1, .func = Swap_ActionMon}, + {.id = 2, .func = Swap_ActionPkmnForSwap}, + {.id = 3, .func = Swap_ActionCancel}, }; // gfx @@ -1036,11 +1036,11 @@ extern const u8 gText_PkmnForSwap[]; extern const u8 gText_SamePkmnInPartyAlready[]; extern const u8 gText_Cancel3[]; -// code -static void sub_819A44C(struct Sprite *sprite) +static void SpriteCB_Pokeball(struct Sprite *sprite) { - if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED)) + if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED)) { + // Pokeball selected, do rocking animation if (sprite->animEnded) { if (sprite->data[0] != 0) @@ -1064,11 +1064,12 @@ static void sub_819A44C(struct Sprite *sprite) } else { + // Pokeball not selected, remain still StartSpriteAnimIfDifferent(sprite, 0); } } -static void Select_CB2(void) +static void CB2_SelectScreen(void) { AnimateSprites(); BuildOamBuffer(); @@ -1077,7 +1078,7 @@ static void Select_CB2(void) RunTasks(); } -static void Select_VblankCb(void) +static void VBlankCB_SelectScreen(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -1110,9 +1111,9 @@ static void CB2_InitSelectScreen(void) break; case 1: sSelectMenuTilesetBuffer = Alloc(0x440); - sSelectMonCardBgTilesetBuffer = AllocZeroed(0x440); - sSelectMenuTilemapBuffer = Alloc(0x800); - sSelectMonCardBgTilemapBuffer = AllocZeroed(0x800); + sSelectMonPicBgTilesetBuffer = AllocZeroed(0x440); + sSelectMenuTilemapBuffer = Alloc(BG_SCREEN_SIZE); + sSelectMonPicBgTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -1137,34 +1138,34 @@ static void CB2_InitSelectScreen(void) ResetTasks(); FreeAllSpritePalettes(); CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSelectMenuTilesetBuffer, 0x440); - CpuCopy16(gUnknown_0861033C, sSelectMonCardBgTilesetBuffer, 0x60); + CpuCopy16(sMonPicBg_Gfx, sSelectMonPicBgTilesetBuffer, 0x60); LoadBgTiles(1, sSelectMenuTilesetBuffer, 0x440, 0); - LoadBgTiles(3, sSelectMonCardBgTilesetBuffer, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSelectMenuTilemapBuffer, 0x800); - LoadBgTilemap(1, sSelectMenuTilemapBuffer, 0x800, 0); + LoadBgTiles(3, sSelectMonPicBgTilesetBuffer, 0x60, 0); + CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE); + LoadBgTilemap(1, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE, 0); LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); - LoadPalette(gUnknown_0861046C, 0xF0, 8); - LoadPalette(gUnknown_0861046C, 0xE0, 10); + LoadPalette(sSelectText_Pal, 0xF0, 8); + LoadPalette(sSelectText_Pal, 0xE0, 10); if (sFactorySelectScreen->fromSummaryScreen == TRUE) - gPlttBufferUnfaded[228] = sFactorySelectScreen->unk2A4; - LoadPalette(gUnknown_0861039C, 0x20, 4); + gPlttBufferUnfaded[228] = sFactorySelectScreen->speciesNameColorBackup; + LoadPalette(sMonPicBg_Pal, 0x20, 4); gMain.state++; break; case 3: - SetBgTilemapBuffer(3, sSelectMonCardBgTilemapBuffer); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 2, 4, 8, 8); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 20, 4, 8, 8); + SetBgTilemapBuffer(3, sSelectMonPicBgTilemapBuffer); + CopyToBgTilemapBufferRect(3, sMonPicBg_Tilemap, 11, 4, 8, 8); + CopyToBgTilemapBufferRect(3, sMonPicBg_Tilemap, 2, 4, 8, 8); + CopyToBgTilemapBufferRect(3, sMonPicBg_Tilemap, 20, 4, 8, 8); CopyBgTilemapBufferToVram(3); gMain.state++; break; case 4: - LoadSpritePalettes(gUnknown_086103F4); - LoadSpriteSheets(gUnknown_086103BC); - LoadCompressedSpriteSheet(gUnknown_086103E4); + LoadSpritePalettes(sSelect_SpritePalettes); + LoadSpriteSheets(sSelect_SpriteSheets); + LoadCompressedSpriteSheet(sSelect_BallGfx); ShowBg(0); ShowBg(1); - SetVBlankCallback(Select_VblankCb); + SetVBlankCallback(VBlankCB_SelectScreen); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); if (sFactorySelectScreen->fromSummaryScreen == TRUE) @@ -1186,7 +1187,7 @@ static void CB2_InitSelectScreen(void) Select_InitMonsData(); Select_InitAllSprites(); if (sFactorySelectScreen->fromSummaryScreen == TRUE) - Select_ShowSummaryMonSprite(); + Select_ReshowMonSprite(); gMain.state++; break; case 6: @@ -1224,7 +1225,7 @@ static void CB2_InitSelectScreen(void) taskId = CreateTask(Task_HandleSelectionScreenMenu, 0); gTasks[taskId].data[0] = 13; } - SetMainCallback2(Select_CB2); + SetMainCallback2(CB2_SelectScreen); break; } } @@ -1256,15 +1257,15 @@ static void Select_InitAllSprites(void) for (i = 0; i < SELECTABLE_MONS_COUNT; i++) { - sFactorySelectScreen->mons[i].spriteId = CreateSprite(&gUnknown_086105D8, (35 * i) + 32, 64, 1); + sFactorySelectScreen->mons[i].spriteId = CreateSprite(&sSpriteTemplate_Select_Pokeball, (35 * i) + 32, 64, 1); gSprites[sFactorySelectScreen->mons[i].spriteId].data[0] = 0; Select_SetBallSpritePaletteNum(i); } cursorPos = sFactorySelectScreen->cursorPos; x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; - sFactorySelectScreen->cursorSpriteId = CreateSprite(&gUnknown_086105F0, x, 88, 0); - sFactorySelectScreen->menuCursor1SpriteId = CreateSprite(&gUnknown_08610608, 176, 112, 0); - sFactorySelectScreen->menuCursor2SpriteId = CreateSprite(&gUnknown_08610620, 176, 144, 0); + sFactorySelectScreen->cursorSpriteId = CreateSprite(&sSpriteTemplate_Select_Arrow, x, 88, 0); + sFactorySelectScreen->menuCursor1SpriteId = CreateSprite(&sSpriteTemplate_Select_MenuHighlightLeft, 176, 112, 0); + sFactorySelectScreen->menuCursor2SpriteId = CreateSprite(&sSpriteTemplate_Select_MenuHighlightRight, 176, 144, 0); gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = TRUE; gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = TRUE; @@ -1313,7 +1314,7 @@ static void Select_UpdateMenuCursorPosition(s8 direction) { if (direction > 0) // Move cursor down. { - if (sFactorySelectScreen->menuCursorPos != MENU_OPTIONS_COUNT - 1) + if (sFactorySelectScreen->menuCursorPos != SELECTMENU_OPTIONS_COUNT - 1) sFactorySelectScreen->menuCursorPos++; else sFactorySelectScreen->menuCursorPos = 0; @@ -1323,7 +1324,7 @@ static void Select_UpdateMenuCursorPosition(s8 direction) if (sFactorySelectScreen->menuCursorPos != 0) sFactorySelectScreen->menuCursorPos--; else - sFactorySelectScreen->menuCursorPos = MENU_OPTIONS_COUNT - 1; + sFactorySelectScreen->menuCursorPos = SELECTMENU_OPTIONS_COUNT - 1; } gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; @@ -1357,7 +1358,7 @@ static void Select_HandleMonSelectionChange(void) u8 cursorPos = sFactorySelectScreen->cursorPos; if (sFactorySelectScreen->mons[cursorPos].selectedId) // Deselect a mon. { - paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY); if (sFactorySelectScreen->selectingMonsState == 3 && sFactorySelectScreen->mons[cursorPos].selectedId == 1) { for (i = 0; i < SELECTABLE_MONS_COUNT; i++) @@ -1375,7 +1376,7 @@ static void Select_HandleMonSelectionChange(void) } else // Select a mon. { - paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED); sFactorySelectScreen->mons[cursorPos].selectedId = sFactorySelectScreen->selectingMonsState; sFactorySelectScreen->selectingMonsState++; } @@ -1388,9 +1389,9 @@ static void Select_SetBallSpritePaletteNum(u8 id) u8 palNum; if (sFactorySelectScreen->mons[id].selectedId) - palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + palNum = IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED); else - palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + palNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY); gSprites[sFactorySelectScreen->mons[id].spriteId].oam.paletteNum = palNum; } @@ -1414,22 +1415,22 @@ static void Task_FromSelectScreenToSummaryScreen(u8 taskId) sub_819F444(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0); Select_DestroyAllSprites(); FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); - FREE_AND_SET_NULL(sSelectMonCardBgTilesetBuffer); + FREE_AND_SET_NULL(sSelectMonPicBgTilesetBuffer); FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); - FREE_AND_SET_NULL(sSelectMonCardBgTilemapBuffer); + FREE_AND_SET_NULL(sSelectMonPicBgTilemapBuffer); FreeAllWindowBuffers(); gTasks[taskId].data[0] = 8; } break; case 8: - sFactorySelectScreen->unk2A4 = gPlttBufferUnfaded[228]; + sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[228]; DestroyTask(taskId); sFactorySelectScreen->fromSummaryScreen = TRUE; currMonId = sFactorySelectScreen->cursorPos; sFactorySelectMons = AllocZeroed(sizeof(struct Pokemon) * SELECTABLE_MONS_COUNT); for (i = 0; i < SELECTABLE_MONS_COUNT; i++) sFactorySelectMons[i] = sFactorySelectScreen->mons[i].monData; - ShowPokemonSummaryScreen(1, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, CB2_InitSelectScreen); + ShowPokemonSummaryScreen(PSS_MODE_LOCK_MOVES, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, CB2_InitSelectScreen); break; } } @@ -1452,7 +1453,7 @@ static void Task_CloseSelectionScreen(u8 taskId) Select_DestroyAllSprites(); FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); - FREE_AND_SET_NULL(sSelectMonCardBgTilemapBuffer); + FREE_AND_SET_NULL(sSelectMonPicBgTilemapBuffer); FREE_AND_SET_NULL(sFactorySelectScreen); FreeAllWindowBuffers(); SetMainCallback2(CB2_ReturnToFieldContinueScript); @@ -1590,7 +1591,7 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) { if (sFactorySelectScreen->fromSummaryScreen == TRUE) { - gPlttBufferFaded[228] = sFactorySelectScreen->unk2A4; + gPlttBufferFaded[228] = sFactorySelectScreen->speciesNameColorBackup; gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; } sFactorySelectScreen->fromSummaryScreen = FALSE; @@ -1659,7 +1660,7 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId) u8 i, j = 0; u8 ivs = 0; u8 level = 0; - u8 happiness = 0; + u8 friendship = 0; u32 otId = 0; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; @@ -1690,10 +1691,10 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId) ivs, gFacilityTrainerMons[monId].evSpread, otId); - happiness = 0; + friendship = 0; for (j = 0; j < MAX_MON_MOVES; j++) SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j); - SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &friendship); SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]); } } @@ -1703,7 +1704,7 @@ static void CreateTentFactorySelectableMons(u8 firstMonId) u8 i, j; u8 ivs = 0; u8 level = 30; - u8 happiness = 0; + u8 friendship = 0; u32 otId = 0; gFacilityTrainerMons = gSlateportBattleTentMons; @@ -1720,10 +1721,10 @@ static void CreateTentFactorySelectableMons(u8 firstMonId) ivs, gFacilityTrainerMons[monId].evSpread, otId); - happiness = 0; + friendship = 0; for (j = 0; j < MAX_MON_MOVES; j++) SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j); - SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &friendship); SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]); } } @@ -1732,7 +1733,7 @@ static void Select_CopyMonsToPlayerParty(void) { u8 i, j; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { for (j = 0; j < SELECTABLE_MONS_COUNT; j++) { @@ -1863,8 +1864,8 @@ static void Select_PrintYesNoOptions(void) static u8 Select_RunMenuOptionFunc(void) { - gUnknown_030062E8 = sSelect_MenuOptionFuncs[sFactorySelectScreen->menuCursorPos]; - return gUnknown_030062E8(); + gFactorySelect_CurrentOptionFunc = sSelect_MenuOptionFuncs[sFactorySelectScreen->menuCursorPos]; + return gFactorySelect_CurrentOptionFunc(); } static u8 Select_OptionRentDeselect(void) @@ -1952,13 +1953,13 @@ static void sub_819BE20(bool8 arg0) sFactorySelectScreen->unk2A0 = arg0; } -static void Select_ShowSummaryMonSprite(void) +static void Select_ReshowMonSprite(void) { struct Pokemon *mon; u16 species; u32 personality, otId; - sFactorySelectScreen->unk294[1].field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); + sFactorySelectScreen->unk294[1].field1 = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 120, 64, 1); StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 2); mon = &sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monData; @@ -1977,7 +1978,7 @@ static void Select_ShowChosenMonsSprites(void) { u8 i, j; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { for (j = 0; j < SELECTABLE_MONS_COUNT; j++) { @@ -2125,9 +2126,9 @@ static void sub_819C2D4(u8 taskId) static void sub_819C4B4(void) { - sFactorySelectScreen->unk294[1].field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); - sFactorySelectScreen->unk294[0].field1 = CreateSprite(&gUnknown_08610638, 44, 64, 1); - sFactorySelectScreen->unk294[2].field1 = CreateSprite(&gUnknown_08610638, 196, 64, 1); + sFactorySelectScreen->unk294[1].field1 = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 120, 64, 1); + sFactorySelectScreen->unk294[0].field1 = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 44, 64, 1); + sFactorySelectScreen->unk294[2].field1 = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 196, 64, 1); gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C040; gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; @@ -2257,13 +2258,13 @@ static void Swap_VblankCb(void) static void CopySwappedMonData(void) { - u8 happiness; + u8 friendship; gPlayerParty[sFactorySwapScreen->playerMonId] = gEnemyParty[sFactorySwapScreen->enemyMonId]; - happiness = 0; - SetMonData(&gPlayerParty[sFactorySwapScreen->playerMonId], MON_DATA_FRIENDSHIP, &happiness); - gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].monId = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + 3].monId; - gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].ivs = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + 3].ivs; + friendship = 0; + SetMonData(&gPlayerParty[sFactorySwapScreen->playerMonId], MON_DATA_FRIENDSHIP, &friendship); + gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].monId = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + FRONTIER_PARTY_SIZE].monId; + gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].ivs = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + FRONTIER_PARTY_SIZE].ivs; gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].personality = GetMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId], MON_DATA_PERSONALITY, NULL); gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].abilityNum = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId].box, MON_DATA_ABILITY_NUM, NULL); } @@ -2283,9 +2284,9 @@ static void Task_FromSwapScreenToSummaryScreen(u8 taskId) sub_819F444(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30); Swap_DestroyAllSprites(); FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilesetBuffer); + FREE_AND_SET_NULL(sSwapMonPicBgTilesetBuffer); FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilemapBuffer); + FREE_AND_SET_NULL(sSwapMonPicBgTilemapBuffer); FreeAllWindowBuffers(); gTasks[taskId].data[0] = 8; } @@ -2294,7 +2295,7 @@ static void Task_FromSwapScreenToSummaryScreen(u8 taskId) DestroyTask(taskId); sFactorySwapScreen->fromSummaryScreen = TRUE; sFactorySwapScreen->unk24 = gPlttBufferUnfaded[244]; - ShowPokemonSummaryScreen(0, gPlayerParty, sFactorySwapScreen->cursorPos, 3 - 1, CB2_InitSwapScreen); + ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, sFactorySwapScreen->cursorPos, FRONTIER_PARTY_SIZE - 1, CB2_InitSwapScreen); break; } } @@ -2306,15 +2307,17 @@ static void Task_CloseSwapScreen(u8 taskId) switch (gTasks[taskId].data[0]) { case 0: + // Set return value for script + // TRUE if player kept their current pokemon if (sFactorySwapScreen->monSwapped == TRUE) { gTasks[taskId].data[0]++; - gSpecialVar_Result = 0; + gSpecialVar_Result = FALSE; } else { gTasks[taskId].data[0] = 2; - gSpecialVar_Result = 1; + gSpecialVar_Result = TRUE; } break; case 1: @@ -2335,9 +2338,9 @@ static void Task_CloseSwapScreen(u8 taskId) DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); Swap_DestroyAllSprites(); FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilesetBuffer); + FREE_AND_SET_NULL(sSwapMonPicBgTilesetBuffer); FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilemapBuffer); + FREE_AND_SET_NULL(sSwapMonPicBgTilemapBuffer); FREE_AND_SET_NULL(sFactorySwapScreen); FreeAllWindowBuffers(); SetMainCallback2(CB2_ReturnToFieldContinueScript); @@ -2676,9 +2679,9 @@ static void sub_819D12C(u8 taskId) break; case 1: var_2C = 0; - for (i = 2; i >= 0; i--) + for (i = FRONTIER_PARTY_SIZE - 1; i >= 0; i--) { - if (i != 2) + if (i != FRONTIER_PARTY_SIZE - 1) { u8 posX = var_2C - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; if (posX == 16 || gTasks[taskId].data[i + 2] == 1) @@ -2723,9 +2726,9 @@ static void sub_819D12C(u8 taskId) var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = -16; if (sFactorySwapScreen->inEnemyScreen == TRUE) - gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED); else - gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY); gTasks[taskId].data[i + 1] = 1; } @@ -2856,7 +2859,7 @@ static void sub_819D588(u8 taskId) switch (gTasks[taskId].data[0]) { case 0: - LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); + LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); Swap_PrintActionStrings(); PutWindowTilemap(5); gTasks[taskId].data[0]++; @@ -2866,7 +2869,7 @@ static void sub_819D588(u8 taskId) gTasks[taskId].data[0]++; break; case 2: - BeginNormalPaletteFade(0x4000, 0, 0, 0x10, gUnknown_0860F13C[37]); + BeginNormalPaletteFade(0x4000, 0, 0, 0x10, sPokeballGray_Pal[37]); gTasks[taskId].data[0]++; break; case 3: @@ -2978,14 +2981,14 @@ static void sub_819D770(u8 taskId) case 2: if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) { - gPlttBufferFaded[226] = gUnknown_0860F13C[37]; + gPlttBufferFaded[226] = sPokeballGray_Pal[37]; Swap_PrintActionStrings(); PutWindowTilemap(5); gTasks[taskId].data[0]++; } break; case 3: - BeginNormalPaletteFade(0x4000, 0, 0x10, 0, gUnknown_0860F13C[37]); + BeginNormalPaletteFade(0x4000, 0, 0x10, 0, sPokeballGray_Pal[37]); gTasks[taskId].data[0]++; break; case 4: @@ -3010,7 +3013,7 @@ static void sub_819D770(u8 taskId) Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); else Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); - if (sFactorySwapScreen->cursorPos < 3) + if (sFactorySwapScreen->cursorPos < FRONTIER_PARTY_SIZE) gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; Swap_PrintMonCategory(); gTasks[taskId].data[0]++; @@ -3117,9 +3120,9 @@ static void CB2_InitSwapScreen(void) break; case 1: sSwapMenuTilesetBuffer = Alloc(0x440); - sSwapMonCardBgTilesetBuffer = AllocZeroed(0x440); - sSwapMenuTilemapBuffer = Alloc(0x800); - sSwapMonCardBgTilemapBuffer = AllocZeroed(0x800); + sSwapMonPicBgTilesetBuffer = AllocZeroed(0x440); + sSwapMenuTilemapBuffer = Alloc(BG_SCREEN_SIZE); + sSwapMonPicBgTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -3145,27 +3148,27 @@ static void CB2_InitSwapScreen(void) FreeAllSpritePalettes(); ResetAllPicSprites(); CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSwapMenuTilesetBuffer, 0x440); - CpuCopy16(gUnknown_0861033C, sSwapMonCardBgTilesetBuffer, 0x60); + CpuCopy16(sMonPicBg_Gfx, sSwapMonPicBgTilesetBuffer, 0x60); LoadBgTiles(1, sSwapMenuTilesetBuffer, 0x440, 0); - LoadBgTiles(3, sSwapMonCardBgTilesetBuffer, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSwapMenuTilemapBuffer, 0x800); - LoadBgTilemap(1, sSwapMenuTilemapBuffer, 0x800, 0); + LoadBgTiles(3, sSwapMonPicBgTilesetBuffer, 0x60, 0); + CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE); + LoadBgTilemap(1, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE, 0); LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); - LoadPalette(gUnknown_08610918, 0xF0, sizeof(gUnknown_08610918)); - LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); - LoadPalette(gUnknown_0861039C, 0x20, 4); + LoadPalette(sSwapText_Pal, 0xF0, sizeof(sSwapText_Pal)); + LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); + LoadPalette(sMonPicBg_Pal, 0x20, 4); gMain.state++; break; case 3: - SetBgTilemapBuffer(3, sSwapMonCardBgTilemapBuffer); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); + SetBgTilemapBuffer(3, sSwapMonPicBgTilemapBuffer); + CopyToBgTilemapBufferRect(3, sMonPicBg_Tilemap, 11, 4, 8, 8); CopyBgTilemapBufferToVram(3); gMain.state++; break; case 4: - LoadSpritePalettes(gUnknown_086106B0); - LoadSpriteSheets(gUnknown_08610650); - LoadCompressedSpriteSheet(gUnknown_086106A0); + LoadSpritePalettes(sSwap_SpritePalettes); + LoadSpriteSheets(sSwap_SpriteSheets); + LoadCompressedSpriteSheet(sSwap_BallGfx); SetVBlankCallback(Swap_VblankCb); gMain.state++; break; @@ -3261,17 +3264,17 @@ static void Swap_InitAllSprites(void) u8 x; struct SpriteTemplate spriteTemplate; - spriteTemplate = gUnknown_08610834; - spriteTemplate.paletteTag = TAG_PAL_BALL_SELECTED; + spriteTemplate = sSpriteTemplate_Swap_Pokeball; + spriteTemplate.paletteTag = PALTAG_BALL_SELECTED; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { sFactorySwapScreen->ballSpriteIds[i] = CreateSprite(&spriteTemplate, (48 * i) + 72, 64, 1); gSprites[sFactorySwapScreen->ballSpriteIds[i]].data[0] = 0; } - sFactorySwapScreen->cursorSpriteId = CreateSprite(&gUnknown_0861084C, gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x, 88, 0); - sFactorySwapScreen->menuCursor1SpriteId = CreateSprite(&gUnknown_08610864, 176, 112, 0); - sFactorySwapScreen->menuCursor2SpriteId = CreateSprite(&gUnknown_0861087C, 176, 144, 0); + sFactorySwapScreen->cursorSpriteId = CreateSprite(&sSpriteTemplate_Swap_Arrow, gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x, 88, 0); + sFactorySwapScreen->menuCursor1SpriteId = CreateSprite(&sSpriteTemplate_Swap_MenuHighlightLeft, 176, 112, 0); + sFactorySwapScreen->menuCursor2SpriteId = CreateSprite(&sSpriteTemplate_Swap_MenuHighlightRight, 176, 144, 0); gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = TRUE; gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = TRUE; gSprites[sFactorySwapScreen->menuCursor1SpriteId].centerToCornerVecX = 0; @@ -3284,39 +3287,42 @@ static void Swap_InitAllSprites(void) else x = 192; - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_68; + // Unusual way to create sprites + // The sprite template for the selector arrow is re-used + // with the tiles swapped out + spriteTemplate = sSpriteTemplate_Swap_Arrow; + spriteTemplate.tileTag = GFXTAG_ACTION_BOX_LEFT; sFactorySwapScreen->unk8[0][0] = CreateSprite(&spriteTemplate, 240, 120, 10); - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_69; + spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; + spriteTemplate.tileTag = GFXTAG_ACTION_BOX_RIGHT; sFactorySwapScreen->unk8[0][1] = CreateSprite(&spriteTemplate, 256, 120, 10); sFactorySwapScreen->unk8[0][2] = CreateSprite(&spriteTemplate, 288, 120, 10); - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_6A; + spriteTemplate = sSpriteTemplate_Swap_Arrow; + spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_LEFT; sFactorySwapScreen->unk8[1][0] = CreateSprite(&spriteTemplate, 240, 120, 1); - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_6B; + spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; + spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_MIDDLE; sFactorySwapScreen->unk8[1][1] = CreateSprite(&spriteTemplate, 256, 120, 1); - spriteTemplate.tileTag = TAG_TILE_6C; + spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_RIGHT; sFactorySwapScreen->unk8[1][2] = CreateSprite(&spriteTemplate, 288, 120, 1); - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_68; + spriteTemplate = sSpriteTemplate_Swap_Arrow; + spriteTemplate.tileTag = GFXTAG_ACTION_BOX_LEFT; sFactorySwapScreen->unkE[0][0] = CreateSprite(&spriteTemplate, x, 144, 10); - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_69; + spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; + spriteTemplate.tileTag = GFXTAG_ACTION_BOX_RIGHT; sFactorySwapScreen->unkE[0][1] = CreateSprite(&spriteTemplate, x + 16, 144, 10); - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_6A; + spriteTemplate = sSpriteTemplate_Swap_Arrow; + spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_LEFT; sFactorySwapScreen->unkE[1][0] = CreateSprite(&spriteTemplate, x, 144, 1); - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_6C; + spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; + spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_RIGHT; sFactorySwapScreen->unkE[1][1] = CreateSprite(&spriteTemplate, x + 16, 144, 1); for (i = 0; i < 2; i++) @@ -3350,7 +3356,7 @@ static void Swap_DestroyAllSprites(void) { u8 i, j; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) DestroySprite(&gSprites[sFactorySwapScreen->ballSpriteIds[i]]); DestroySprite(&gSprites[sFactorySwapScreen->cursorSpriteId]); DestroySprite(&gSprites[sFactorySwapScreen->menuCursor1SpriteId]); @@ -3369,7 +3375,7 @@ static void Swap_DestroyAllSprites(void) static void Swap_HandleActionCursorChange(u8 cursorId) { - if (cursorId < 3) + if (cursorId < FRONTIER_PARTY_SIZE) { gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; sub_819E8EC(); @@ -3411,8 +3417,8 @@ static void Swap_UpdateActionCursorPosition(s8 direction) PlaySE(SE_SELECT); if (direction > 0) // Move cursor down. { - if (sFactorySwapScreen->cursorPos < 3) - sFactorySwapScreen->cursorPos = 3; + if (sFactorySwapScreen->cursorPos < FRONTIER_PARTY_SIZE) + sFactorySwapScreen->cursorPos = FRONTIER_PARTY_SIZE; else if (sFactorySwapScreen->cursorPos + 1 != sFactorySwapScreen->actionsCount) sFactorySwapScreen->cursorPos++; else @@ -3420,7 +3426,7 @@ static void Swap_UpdateActionCursorPosition(s8 direction) } else // Move cursor up. { - if (sFactorySwapScreen->cursorPos < 3) + if (sFactorySwapScreen->cursorPos < FRONTIER_PARTY_SIZE) sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; else if (sFactorySwapScreen->cursorPos != 0) sFactorySwapScreen->cursorPos--; @@ -3458,7 +3464,7 @@ static void Swap_UpdateMenuCursorPosition(s8 direction) PlaySE(SE_SELECT); if (direction > 0) // Move cursor down. { - if (sFactorySwapScreen->menuCursorPos != MENU_OPTIONS_COUNT - 1) + if (sFactorySwapScreen->menuCursorPos != SWAPMENU_OPTIONS_COUNT - 1) sFactorySwapScreen->menuCursorPos++; else sFactorySwapScreen->menuCursorPos = 0; @@ -3468,7 +3474,7 @@ static void Swap_UpdateMenuCursorPosition(s8 direction) if (sFactorySwapScreen->menuCursorPos != 0) sFactorySwapScreen->menuCursorPos--; else - sFactorySwapScreen->menuCursorPos = MENU_OPTIONS_COUNT - 1; + sFactorySwapScreen->menuCursorPos = SWAPMENU_OPTIONS_COUNT - 1; } gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; @@ -3585,7 +3591,7 @@ static void Swap_PrintMonSpecies(void) u8 x; FillWindowPixelBuffer(1, PIXEL_FILL(0)); - if (sFactorySwapScreen->cursorPos > 2) + if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { CopyWindowToVram(1, 2); } @@ -3684,16 +3690,16 @@ static void Swap_PrintMonSpecies2(void) u8 x; u16 pal[5]; - CpuCopy16(gUnknown_08610918, pal, 8); + CpuCopy16(sSwapText_Pal, pal, 8); if (!sFactorySwapScreen->fromSummaryScreen) pal[4] = gPlttBufferFaded[228]; else pal[4] = sFactorySwapScreen->unk24; - LoadPalette(pal, 0xF0, 0xA); + LoadPalette(pal, 0xF0, sizeof(sSwapText_Pal)); PutWindowTilemap(7); FillWindowPixelBuffer(7, PIXEL_FILL(0)); - if (sFactorySwapScreen->cursorPos > 2) + if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { CopyWindowToVram(7, 3); } @@ -3716,10 +3722,10 @@ static void Swap_PrintMonSpecies3(void) u16 species; u8 x; - LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); + LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); CpuCopy16(gPlttBufferUnfaded + 240, gPlttBufferFaded + 224, 10); - if (sFactorySwapScreen->cursorPos > 2) + if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { CopyWindowToVram(1, 2); } @@ -3745,7 +3751,7 @@ static void Swap_PrintMonCategory(void) u8 monId = sFactorySwapScreen->cursorPos; FillWindowPixelBuffer(8, PIXEL_FILL(0)); - if (monId > 2) + if (monId >= FRONTIER_PARTY_SIZE) { CopyWindowToVram(8, 2); } @@ -3787,11 +3793,11 @@ static void Swap_InitActions(u8 id) static void Swap_RunMenuOptionFunc(u8 taskId) { - sSwap_CurrentTableFunc = sSwap_MenuOptionFuncs[sFactorySwapScreen->menuCursorPos]; - sSwap_CurrentTableFunc(taskId); + sSwap_CurrentOptionFunc = sSwap_MenuOptionFuncs[sFactorySwapScreen->menuCursorPos]; + sSwap_CurrentOptionFunc(taskId); } -static void sub_819F0CC(u8 taskId) +static void Swap_OptionSwap(u8 taskId) { sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); sFactorySwapScreen->playerMonId = sFactorySwapScreen->cursorPos; @@ -3800,13 +3806,13 @@ static void sub_819F0CC(u8 taskId) gTasks[taskId].func = sub_819D9EC; } -static void sub_819F114(u8 taskId) +static void Swap_OptionSummary(u8 taskId) { gTasks[taskId].data[0] = 6; gTasks[taskId].func = Task_FromSwapScreenToSummaryScreen; } -static void sub_819F134(u8 taskId) +static void Swap_OptionRechoose(u8 taskId) { sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); sub_819EA64(3); @@ -3819,8 +3825,8 @@ static void sub_819F134(u8 taskId) static void Swap_RunActionFunc(u8 taskId) { - sSwap_CurrentTableFunc = sFactorySwapScreen->actionsData[sFactorySwapScreen->cursorPos].func; - sSwap_CurrentTableFunc(taskId); + sSwap_CurrentOptionFunc = sFactorySwapScreen->actionsData[sFactorySwapScreen->cursorPos].func; + sSwap_CurrentOptionFunc(taskId); } static void Swap_ActionCancel(u8 taskId) @@ -3869,7 +3875,7 @@ static void Swap_ActionMon(u8 taskId) static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen) { - *arg0 = CreateSprite(&gUnknown_08610894, 120, 64, 1); + *arg0 = CreateSprite(&sSpriteTemplate_Swap_MonPicBgAnim, 120, 64, 1); gSprites[*arg0].callback = sub_819F600; gSprites[*arg0].data[7] = swapScreen; *arg1 = TRUE; @@ -3881,7 +3887,7 @@ static void Swap_ShowSummaryMonSprite(void) u16 species; u32 personality, otId; - sFactorySwapScreen->unk2C.field1 = CreateSprite(&gUnknown_08610894, 120, 64, 1); + sFactorySwapScreen->unk2C.field1 = CreateSprite(&sSpriteTemplate_Swap_MonPicBgAnim, 120, 64, 1); StartSpriteAffineAnim(&gSprites[sFactorySwapScreen->unk2C.field1], 2); mon = &gPlayerParty[sFactorySwapScreen->cursorPos]; @@ -3963,7 +3969,7 @@ static bool8 Swap_AlreadyHasSameSpecies(u8 monId) u8 i; u16 species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { if (i != sFactorySwapScreen->playerMonId && (u16)(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL)) == species) return TRUE; From adcffd3f0e8e9fd5192bc257ac44cd94e40afb1c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 3 Sep 2020 01:19:08 -0400 Subject: [PATCH 002/177] WIP More factory screen doc --- src/battle_factory_screen.c | 79 ++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 36 deletions(-) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 379c036135..46e2fa28c5 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -165,7 +165,7 @@ static void Select_SetBallSpritePaletteNum(u8 id); static void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1); static void sub_819B958(u8 windowId); static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen); -static void sub_819F3F8(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen); +static void CloseMonPic(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen); static u8 Select_RunMenuOptionFunc(void); static u8 sub_819BC9C(void); static u8 Select_OptionSummary(void); @@ -182,7 +182,7 @@ static void sub_819EA64(u8 windowId); static void sub_819D770(u8 taskId); static void Task_HandleSwapScreenChooseMons(u8 taskId); static void sub_819D588(u8 taskId); -static void sub_819F7B4(u8 taskId); +static void Task_CloseMonPic(u8 taskId); static void Swap_PrintOnInfoWindow(const u8 *str); static void Swap_ShowMenuOptions(void); static void Swap_PrintMenuOptions(void); @@ -204,16 +204,16 @@ static void Swap_OptionSwap(u8 taskId); static void Swap_OptionSummary(u8 taskId); static void Swap_OptionRechoose(u8 taskId); static void Swap_RunActionFunc(u8 taskId); -static void sub_819F69C(u8 taskId); +static void Task_OpenMonPic(u8 taskId); static void Task_SwapCantHaveSameMons(u8 taskId); -static void Swap_ShowMonSprite(void); +static void Swap_CreateMonSprite(void); static void Swap_PrintActionStrings(void); static void Swap_PrintActionStrings2(void); static void Swap_PrintOneActionString(u8 which); static void Swap_InitActions(u8 id); static void sub_819E838(u8 arg0); static bool8 Swap_AlreadyHasSameSpecies(u8 monId); -static void sub_819F600(struct Sprite *sprite); +static void SpriteCB_OpenMonPic(struct Sprite *sprite); static void Swap_ActionMon(u8 taskId); static void Swap_ActionCancel(u8 taskId); static void Swap_ActionPkmnForSwap(u8 taskId); @@ -1569,7 +1569,7 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); + CloseMonPic(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); sub_819B958(3); sFactorySelectScreen->unk2A2 = TRUE; gTasks[taskId].data[0] = 1; @@ -1645,7 +1645,7 @@ static void Task_HandleSelectionScreenChooseMons(u8 taskId) if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); + CloseMonPic(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); Select_PrintSelectMonString(); sFactorySelectScreen->unk2A2 = TRUE; gTasks[taskId].data[0] = 1; @@ -1880,7 +1880,7 @@ static u8 Select_OptionRentDeselect(void) } else { - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); + CloseMonPic(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); Select_HandleMonSelectionChange(); Select_PrintSelectMonString(); sub_819B958(3); @@ -1910,7 +1910,7 @@ static u8 Select_OptionSummary(void) static u8 Select_OptionOthers(void) { - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); + CloseMonPic(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); sub_819B958(3); return 1; } @@ -1933,7 +1933,7 @@ static void Select_PrintMonCategory(void) } } -static void Summary_ShowMonSprite(void) +static void Summary_CreateMonSprite(void) { u8 monId = sFactorySelectScreen->cursorPos; struct Pokemon *mon = &sFactorySelectScreen->mons[monId].monData; @@ -2439,7 +2439,7 @@ static void sub_819CC24(u8 taskId) static void sub_819CC74(u8 taskId) { - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + CloseMonPic(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); if (gTasks[taskId].data[1] == 1) { gTasks[taskId].data[0] = 0; @@ -2496,7 +2496,7 @@ static void Task_HandleSwapScreenMenu(u8 taskId) else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + CloseMonPic(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); sub_819EA64(3); gTasks[taskId].data[0] = 0; gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; @@ -3799,7 +3799,7 @@ static void Swap_RunMenuOptionFunc(u8 taskId) static void Swap_OptionSwap(u8 taskId) { - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + CloseMonPic(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); sFactorySwapScreen->playerMonId = sFactorySwapScreen->cursorPos; sub_819EA64(3); gTasks[taskId].data[0] = 0; @@ -3814,7 +3814,7 @@ static void Swap_OptionSummary(u8 taskId) static void Swap_OptionRechoose(u8 taskId) { - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + CloseMonPic(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); sub_819EA64(3); gTasks[taskId].data[0] = 0; gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; @@ -3876,7 +3876,7 @@ static void Swap_ActionMon(u8 taskId) static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen) { *arg0 = CreateSprite(&sSpriteTemplate_Swap_MonPicBgAnim, 120, 64, 1); - gSprites[*arg0].callback = sub_819F600; + gSprites[*arg0].callback = SpriteCB_OpenMonPic; gSprites[*arg0].data[7] = swapScreen; *arg1 = TRUE; } @@ -3902,13 +3902,20 @@ static void Swap_ShowSummaryMonSprite(void) gSprites[sFactorySwapScreen->unk2C.field1].invisible = TRUE; } -static void sub_819F3F8(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen) +#define tState data[0] +#define tWinLeft data[3] +#define tWinRight data[24] // UB: Copied typo? Should be data[4], 24 is out of bounds +#define tWinTop data[5] +#define tWinBottom data[8] +#define tIsSwapScreen data[7] + +static void CloseMonPic(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen) { u8 taskId; FreeAndDestroyMonPicSprite(arg0.field0); - taskId = CreateTask(sub_819F7B4, 1); - gTasks[taskId].data[7] = swapScreen; + taskId = CreateTask(Task_CloseMonPic, 1); + gTasks[taskId].tIsSwapScreen = swapScreen; gTasks[taskId].data[6] = arg0.field1; gTasks[taskId].func(taskId); *arg1 = TRUE; @@ -3938,7 +3945,7 @@ static void Task_SwapCantHaveSameMons(u8 taskId) if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + CloseMonPic(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); gTasks[taskId].data[0]++; } break; @@ -3977,15 +3984,15 @@ static bool8 Swap_AlreadyHasSameSpecies(u8 monId) return FALSE; } -static void sub_819F600(struct Sprite *sprite) +static void SpriteCB_OpenMonPic(struct Sprite *sprite) { u8 taskId; if (sprite->affineAnimEnded) { sprite->invisible = TRUE; - taskId = CreateTask(sub_819F69C, 1); - gTasks[taskId].data[7] = sprite->data[7]; + taskId = CreateTask(Task_OpenMonPic, 1); + gTasks[taskId].tIsSwapScreen = sprite->data[7]; gTasks[taskId].func(taskId); sprite->callback = SpriteCallbackDummy; } @@ -4004,18 +4011,18 @@ static void sub_819F654(struct Sprite *sprite) } } -static void sub_819F69C(u8 taskId) +static void Task_OpenMonPic(u8 taskId) { struct Task *task = &gTasks[taskId]; switch (task->data[0]) { case 0: - task->data[3] = 88; - task->data[24] = 152; // BUG: writing outside the array's bounds. + task->tWinLeft = 88; + task->tWinRight = 152; // BUG: writing outside the array's bounds. task->data[5] = 64; task->data[8] = 65; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); @@ -4040,23 +4047,23 @@ static void sub_819F69C(u8 taskId) default: DestroyTask(taskId); // UB: Should not use the task after it has been deleted. - if (gTasks[taskId].data[7] == TRUE) - Swap_ShowMonSprite(); + if (gTasks[taskId].tIsSwapScreen == TRUE) + Swap_CreateMonSprite(); else - Summary_ShowMonSprite(); + Summary_CreateMonSprite(); return; } task->data[0]++; } -static void sub_819F7B4(u8 taskId) +static void Task_CloseMonPic(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { default: HideBg(3); - gSprites[task->data[6]].data[7] = task->data[7]; + gSprites[task->data[6]].data[7] = task->tIsSwapScreen; gSprites[task->data[6]].invisible = FALSE; gSprites[task->data[6]].callback = sub_819F654; StartSpriteAffineAnim(&gSprites[task->data[6]], 1); @@ -4064,12 +4071,12 @@ static void sub_819F7B4(u8 taskId) DestroyTask(taskId); break; case 0: - task->data[3] = 88; - task->data[24] = 152; // BUG: writing outside the array's bounds. + task->tWinLeft = 88; + task->tWinRight = 152; task->data[5] = 32; task->data[8] = 96; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); @@ -4090,7 +4097,7 @@ static void sub_819F7B4(u8 taskId) } } -static void Swap_ShowMonSprite(void) +static void Swap_CreateMonSprite(void) { struct Pokemon *mon; u16 species; From d0fcb9168bc36dff9c9da0d36baefd4fbf3a1c55 Mon Sep 17 00:00:00 2001 From: Kaz Date: Sat, 12 Sep 2020 21:51:16 -0400 Subject: [PATCH 003/177] Match two minor functions in battle_tent and berry_crush --- src/battle_tent.c | 9 +++------ src/berry_crush.c | 17 +++++------------ 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/battle_tent.c b/src/battle_tent.c index 0a03fc1675..250e2d8ee2 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -355,11 +355,7 @@ static void GenerateOpponentMons(void) { u16 trainerId; s32 i, j, k; - #ifndef NONMATCHING - register const u16 *monSet asm("r9"); // Fix me. Compiler insists on moving that variable into stack. - #else - const u16 *monSet; - #endif + const u16 *monSet; u16 species[FRONTIER_PARTY_SIZE]; u16 heldItems[FRONTIER_PARTY_SIZE]; s32 monId = 0; @@ -380,7 +376,8 @@ static void GenerateOpponentMons(void) } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); gTrainerBattleOpponent_A = trainerId; - while (gFacilityTrainers[gTrainerBattleOpponent_A].monSet[monId] != 0xFFFF) + monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet; + while (monSet[monId] != 0xFFFF) monId++; if (monId > 8) break; diff --git a/src/berry_crush.c b/src/berry_crush.c index 2175d2abbb..bc972fec7a 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1779,22 +1779,15 @@ void sub_8022600(struct BerryCrushGame *r6) void sub_80226D0(struct BerryCrushGame *r6) { u8 r5 = 0; - const u32 *r0 = gUnknown_08DE3FD4; -#ifndef NONMATCHING // r4, r5, r6 register roulette - register u8 *r4 asm("r4") = gDecompressionBuffer; - register u32 r0_ asm("r0"); -#else - u8 *r4 = gDecompressionBuffer; - u32 r0_; -#endif + u8 * r4; - LZ77UnCompWram(r0, r4); - for (; r5 < r6->unk9; ++r5) + LZ77UnCompWram(gUnknown_08DE3FD4, gDecompressionBuffer); // required for matching + + for (r4 = gDecompressionBuffer; r5 < r6->unk9; ++r5) { - r0_ = r6->unk138.unkC[r5]->unk0; CopyToBgTilemapBufferRect( 3, - &r4[r0_ * 40], + &r4[r6->unk138.unkC[r5]->unk0 * 40], r6->unk138.unkC[r5]->unk1, r6->unk138.unkC[r5]->unk2, 10, From 449df5860d91570a2b14caf58a51af45c7bbf8d0 Mon Sep 17 00:00:00 2001 From: Kaz Date: Sun, 13 Sep 2020 00:26:01 -0400 Subject: [PATCH 004/177] Begin documenting berry_crush --- src/berry_crush.c | 180 +++++++++++++++++++++++----------------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/src/berry_crush.c b/src/berry_crush.c index bc972fec7a..744389ba70 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -149,7 +149,7 @@ struct BerryCrushGame u8 unk8; u8 unk9; - u8 unkA; + u8 mainTask; u8 unkB; u8 unkC; @@ -199,10 +199,10 @@ struct BerryCrushGame u8 unk31C0[0x1000]; }; -static void sub_8020F74(void); -static void sub_8020F88(void); -static void sub_8020FA0(u8); -void sub_8020FC4(struct BerryCrushGame *); +static void VBlankCB(void); +static void MainCB(void); +static void MainTask(u8); +static void InitGame(struct BerryCrushGame *); void sub_8022BEC(u16, u8, u8 *); static void BerryCrush_SetPaletteFadeParams(u8 *, bool8, u32, s8, u8, u8, u16); static int sub_8021450(struct BerryCrushGame *); @@ -243,7 +243,7 @@ static u32 sub_8024444(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1 static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1); static u32 sub_8024568(__attribute__((unused)) struct BerryCrushGame *r0, __attribute__((unused)) u8 *r1); -static EWRAM_DATA struct BerryCrushGame *gUnknown_02022C90 = NULL; +static EWRAM_DATA struct BerryCrushGame *gBerryCrushGame = NULL; static const u8 gUnknown_082F325C[] = { 1, 2, 4, 8, 16, 32, 64, 128 }; static const u8 gUnknown_082F3264[] = { 0, 1, 2, 3, 5, 0, 0, 0 }; @@ -816,22 +816,21 @@ static const u8 gUnknown_082F4434[][4] = static const u8 gUnknown_082F4444[] = {5, 7, 9, 12}; static const u8 gUnknown_082F4448[] = {3, 7, 15, 31}; - -struct BerryCrushGame *sub_8020C00(void) +struct BerryCrushGame * GetBerryCrushGame(void) { - return gUnknown_02022C90; + return gBerryCrushGame; } -u32 sub_8020C0C(MainCallback callback) +u32 QuitBerryCrush(MainCallback callback) { - if (!gUnknown_02022C90) + if (!gBerryCrushGame) return 2; if (!callback) - callback = gUnknown_02022C90->unk0; + callback = gBerryCrushGame->unk0; - DestroyTask(gUnknown_02022C90->unkA); - FREE_AND_SET_NULL(gUnknown_02022C90); + DestroyTask(gBerryCrushGame->mainTask); + FREE_AND_SET_NULL(gBerryCrushGame); SetMainCallback2(callback); if (callback == CB2_ReturnToField) { @@ -868,8 +867,8 @@ void StartBerryCrush(MainCallback callback) return; } - gUnknown_02022C90 = AllocZeroed(sizeof(*gUnknown_02022C90)); - if (!gUnknown_02022C90) + gBerryCrushGame = AllocZeroed(sizeof(*gBerryCrushGame)); + if (!gBerryCrushGame) { SetMainCallback2(callback); Rfu.unk_10 = 0; @@ -878,110 +877,110 @@ void StartBerryCrush(MainCallback callback) return; } - gUnknown_02022C90->unk0 = callback; - gUnknown_02022C90->unk8 = multiplayerId; - gUnknown_02022C90->unk9 = playerCount; - sub_8020FC4(gUnknown_02022C90); - gUnknown_02022C90->unk12 = 1; - gUnknown_02022C90->unkE = 1; - gUnknown_02022C90->unkF = 6; - BerryCrush_SetPaletteFadeParams(gUnknown_02022C90->unk36, 1, -1, 0, 16, 0, 0); - sub_8022BEC(4, 1, gUnknown_02022C90->unk36); - SetMainCallback2(sub_8020F88); - gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8); + gBerryCrushGame->unk0 = callback; + gBerryCrushGame->unk8 = multiplayerId; + gBerryCrushGame->unk9 = playerCount; + InitGame(gBerryCrushGame); + gBerryCrushGame->unk12 = 1; + gBerryCrushGame->unkE = 1; + gBerryCrushGame->unkF = 6; + BerryCrush_SetPaletteFadeParams(gBerryCrushGame->unk36, 1, -1, 0, 16, 0, 0); + sub_8022BEC(4, 1, gBerryCrushGame->unk36); + SetMainCallback2(MainCB); + gBerryCrushGame->mainTask = CreateTask(MainTask, 8); gTextFlags.autoScroll = 0; } -static void sub_8020D8C(void) +static void GetBerryFromBag(void) { if (gSpecialVar_ItemId < FIRST_BERRY_INDEX || gSpecialVar_ItemId > LAST_BERRY_INDEX + 1) gSpecialVar_ItemId = ITEM_CHERI_BERRY; else RemoveBagItem(gSpecialVar_ItemId, 1); - gUnknown_02022C90->unk68.as_four_players.others[gUnknown_02022C90->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX; - gUnknown_02022C90->unkE = 1; - gUnknown_02022C90->unkF = 9; - BerryCrush_SetPaletteFadeParams(gUnknown_02022C90->unk36, 0, -1, 0, 16, 0, 0); - sub_8022BEC(4, 1, gUnknown_02022C90->unk36); - gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8); - SetMainCallback2(sub_8020F88); + gBerryCrushGame->unk68.as_four_players.others[gBerryCrushGame->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX; + gBerryCrushGame->unkE = 1; + gBerryCrushGame->unkF = 9; + BerryCrush_SetPaletteFadeParams(gBerryCrushGame->unk36, 0, -1, 0, 16, 0, 0); + sub_8022BEC(4, 1, gBerryCrushGame->unk36); + gBerryCrushGame->mainTask = CreateTask(MainTask, 8); + SetMainCallback2(MainCB); } -void sub_8020E1C(void) +static void InitMainTask(void) { - DestroyTask(gUnknown_02022C90->unkA); - ChooseBerryForMachine(sub_8020D8C); + DestroyTask(gBerryCrushGame->mainTask); + ChooseBerryForMachine(GetBerryFromBag); } -static void sub_8020E3C(void) +static void SetVBlankCB(void) { - SetVBlankCallback(sub_8020F74); + SetVBlankCallback(VBlankCB); } -void sub_8020E4C(void) +static void InitVBlankCB(void) { SetVBlankCallback(NULL); } -void sub_8020E58(void) +static void SaveResults(void) { u32 var0, var1; - var0 = gUnknown_02022C90->unk68.as_four_players.unk00.unk04; + var0 = gBerryCrushGame->unk68.as_four_players.unk00.unk04; var0 = Q_24_8(var0); var0 = MathUtil_Div32(var0, Q_24_8(60)); - var1 = gUnknown_02022C90->unk68.as_four_players.unk00.unk0A; + var1 = gBerryCrushGame->unk68.as_four_players.unk00.unk0A; var1 = Q_24_8(var1); var1 = MathUtil_Div32(var1, var0) & 0xFFFF; - gUnknown_02022C90->unk16 = var1; - switch (gUnknown_02022C90->unk9) + gBerryCrushGame->unk16 = var1; + switch (gBerryCrushGame->unk9) { case 2: - if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[0]) + if (gBerryCrushGame->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[0]) { - gUnknown_02022C90->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[0] = gUnknown_02022C90->unk16; + gBerryCrushGame->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[0] = gBerryCrushGame->unk16; } break; case 3: - if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[1]) + if (gBerryCrushGame->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[1]) { - gUnknown_02022C90->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[1] = gUnknown_02022C90->unk16; + gBerryCrushGame->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[1] = gBerryCrushGame->unk16; } break; case 4: - if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[2]) + if (gBerryCrushGame->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[2]) { - gUnknown_02022C90->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[2] = gUnknown_02022C90->unk16; + gBerryCrushGame->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[2] = gBerryCrushGame->unk16; } break; case 5: - if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[3]) + if (gBerryCrushGame->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[3]) { - gUnknown_02022C90->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[3] = gUnknown_02022C90->unk16; + gBerryCrushGame->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[3] = gBerryCrushGame->unk16; } break; } - gUnknown_02022C90->unk1C = gUnknown_02022C90->unk68.as_four_players.unk00.unk00; - if (GiveBerryPowder(gUnknown_02022C90->unk1C)) + gBerryCrushGame->unk1C = gBerryCrushGame->unk68.as_four_players.unk00.unk00; + if (GiveBerryPowder(gBerryCrushGame->unk1C)) return; - gUnknown_02022C90->unk25_0 = 1; + gBerryCrushGame->unk25_0 = 1; } -static void sub_8020F74(void) +static void VBlankCB(void) { TransferPlttBuffer(); LoadOam(); ProcessSpriteCopyRequests(); } -static void sub_8020F88(void) +static void MainCB(void) { RunTasks(); RunTextPrinters(); @@ -989,12 +988,12 @@ static void sub_8020F88(void) BuildOamBuffer(); } -static void sub_8020FA0(u8 taskId) +static void MainTask(u8 taskId) { - if (gUnknown_02022C90->unk4) - gUnknown_02022C90->unk4(gUnknown_02022C90, gUnknown_02022C90->unk36); + if (gBerryCrushGame->unk4) + gBerryCrushGame->unk4(gBerryCrushGame, gBerryCrushGame->unk36); - sub_8021450(gUnknown_02022C90); + sub_8021450(gBerryCrushGame); } #define PLAYER_UNK14(game, i) \ @@ -1003,11 +1002,11 @@ static void sub_8020FA0(u8 taskId) + offsetof(struct BerryCrushGame_68_x, unk30) \ + sizeof(struct BerryCrushGame_Player) * (i)) -void sub_8020FC4(struct BerryCrushGame *arg0) +static void InitGame(struct BerryCrushGame *arg0) { - u8 i; + u8 i = 0; - for (i = 0; i < arg0->unk9; i++) + for (; i < arg0->unk9; i++) StringCopy(PLAYER_UNK14(arg0, i), gLinkPlayers[i].name); for (; i < 5; i++) { @@ -1029,13 +1028,14 @@ void sub_8020FC4(struct BerryCrushGame *arg0) } } -int sub_802104C(void) +// TODO: Everything from here on is likely in a separate file. +s32 InitBerryCrushDisplay(void) { - struct BerryCrushGame *var0 = sub_8020C00(); - if (!var0) + struct BerryCrushGame *game = GetBerryCrushGame(); + if (!game) return -1; - switch (var0->unkC) + switch (game->unkC) { case 0: SetVBlankCallback(NULL); @@ -1057,9 +1057,9 @@ int sub_802104C(void) case 3: ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_082F32C8, ARRAY_COUNT(gUnknown_082F32C8)); - SetBgTilemapBuffer(1, var0->unk1C0); - SetBgTilemapBuffer(2, var0->unk21C0); - SetBgTilemapBuffer(3, var0->unk31C0); + SetBgTilemapBuffer(1, game->unk1C0); + SetBgTilemapBuffer(2, game->unk21C0); + SetBgTilemapBuffer(3, game->unk31C0); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(2, 0, 0); @@ -1088,8 +1088,8 @@ int sub_802104C(void) InitStandardTextBoxWindows(); InitTextBoxGfxAndPrinters(); - sub_8022588(var0); - sub_8022600(var0); + sub_8022588(game); + sub_8022600(game); gPaletteFade.bufferTransferDisabled = TRUE; break; case 7: @@ -1097,7 +1097,7 @@ int sub_802104C(void) CopyToBgTilemapBuffer(1, gBerryCrushGrinderTopTilemap, 0, 0); CopyToBgTilemapBuffer(2, gBerryCrushContainerCapTilemap, 0, 0); CopyToBgTilemapBuffer(3, gBerryCrushBackgroundTilemap, 0, 0); - sub_80226D0(var0); + sub_80226D0(game); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); @@ -1105,7 +1105,7 @@ int sub_802104C(void) case 8: LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - sub_8022730(var0); + sub_8022730(game); SetGpuReg(REG_OFFSET_BG1VOFS, -gSpriteCoordOffsetY); ChangeBgX(1, 0, 0); ChangeBgY(1, 0, 0); @@ -1118,18 +1118,18 @@ int sub_802104C(void) ShowBg(2); ShowBg(3); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); - sub_8020E3C(); - var0->unkC = 0; + SetVBlankCB(); + game->unkC = 0; return 1; } - var0->unkC++; + game->unkC++; return 0; } int sub_802130C(void) { - struct BerryCrushGame *var0 = sub_8020C00(); + struct BerryCrushGame *var0 = GetBerryCrushGame(); if (!var0) return -1; @@ -1960,7 +1960,7 @@ void sub_8022B28(struct Sprite *sprite) void sub_8022BEC(u16 r5, u8 r4, u8 *r7) { - struct BerryCrushGame *r6 = sub_8020C00(); + struct BerryCrushGame *r6 = GetBerryCrushGame(); if (r5 > 25) r5 = 0; @@ -2097,7 +2097,7 @@ static u32 sub_8022D14(struct BerryCrushGame *r7, u8 *r5) static u32 sub_8022E1C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1) { - if (sub_802104C() != 0) + if (InitBerryCrushDisplay() != 0) sub_8022BEC(r4->unkE, 0, r4->unk36); return 0; } @@ -2155,7 +2155,7 @@ static u32 sub_8022EAC(struct BerryCrushGame *r4, u8 *r5) static u32 sub_8022F04(struct BerryCrushGame *r0, __attribute__((unused)) u8 *r1) { r0->unk4 = NULL; - SetMainCallback2(sub_8020E1C); + SetMainCallback2(InitMainTask); return 0; } @@ -2942,7 +2942,7 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 r7->unk10 = 0; break; case 7: - sub_8020E58(); + SaveResults(); sub_8022BEC(18, 1, NULL); r7->unk12 = 11; r7->unkC = 0; @@ -3210,7 +3210,7 @@ static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1 static u32 sub_8024568(__attribute__((unused)) struct BerryCrushGame *r0, __attribute__((unused)) u8 *r1) { - sub_8020C0C(NULL); + QuitBerryCrush(NULL); return 0; } From f952144922b23d258c6b98ce3da79276d5c1e643 Mon Sep 17 00:00:00 2001 From: Kaz Date: Sun, 13 Sep 2020 03:02:41 -0400 Subject: [PATCH 005/177] party_menu fakematch fix --- src/party_menu.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index e509ef6e09..39f74e58d3 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1964,19 +1964,17 @@ static u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor) if (item >= ITEM_TM01_FOCUS_PUNCH) { - if (CanMonLearnTMHM(mon, item - ITEM_TM01_FOCUS_PUNCH)) - move = ItemIdToBattleMoveId(item); - else + if (!CanMonLearnTMHM(mon, item - ITEM_TM01_FOCUS_PUNCH)) return CANNOT_LEARN_MOVE; - do {} while (0); // :morphon: - } - else if (CanLearnTutorMove(GetMonData(mon, MON_DATA_SPECIES), tutor) == FALSE) - { - return CANNOT_LEARN_MOVE; + else + move = ItemIdToBattleMoveId(item); } else { - move = GetTutorMove(tutor); + if (!CanLearnTutorMove(GetMonData(mon, MON_DATA_SPECIES), tutor)) + return CANNOT_LEARN_MOVE; + else + move = GetTutorMove(tutor); } if (MonKnowsMove(mon, move) == TRUE) From 327dd877b5b9cd76fcd4747dea755395aacc6157 Mon Sep 17 00:00:00 2001 From: Kaz Date: Sun, 13 Sep 2020 03:47:12 -0400 Subject: [PATCH 006/177] use_pokeblock: fakematch fix. I am beginning to suspect that we should be using the gflib DMA macros everywhere wherever possible. --- src/use_pokeblock.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index ebb237d544..4a70e9b44d 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -1,5 +1,6 @@ #include "global.h" #include "main.h" +#include "dma3.h" #include "pokeblock.h" #include "malloc.h" #include "decompress.h" @@ -1240,8 +1241,7 @@ static void UpdateMonPic(u8 loadId) } else { - do {} while(0); // Only needed to match, feel free to remove. - DmaCopy16Defvars(3, sMenu->partySheets[loadId], sMenu->curMonTileStart, 0x800); + Dma3CopyLarge16_(sMenu->partySheets[loadId], sMenu->curMonTileStart, 0x800); LoadPalette(sMenu->partyPalettes[loadId], sMenu->curMonPalette, 32); } } From 7dc95a0103af08c95c9093b6efa6c77af77a2538 Mon Sep 17 00:00:00 2001 From: aaaaaa123456789 Date: Sun, 13 Sep 2020 04:22:50 -0300 Subject: [PATCH 007/177] Undo PokeCodec's PRs This commit undoes most of PokeCodec's PRs after the debate in chat. Some harmless or completely superseded PRs have been left alone, as there is not much benefit in attempting to undo them. Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136, #1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179, #1180, #1181, #1182 and #1183. --- Makefile | 2 +- berry_fix/asm/loader.s | 2 +- berry_fix/payload/include/gba/m4a_internal.h | 34 +- berry_fix/payload/src/flash.c | 2 +- constants/gba_constants.inc | 6 +- gflib/bg.c | 118 +-- gflib/text.c | 926 ++++++++++++++++--- gflib/text.h | 21 +- gflib/window.c | 38 +- include/AgbRfu_LinkManager.h | 4 +- include/battle.h | 22 +- include/battle_main.h | 3 +- include/battle_message.h | 2 +- include/battle_util.h | 13 - include/constants/battle.h | 2 +- include/constants/battle_pyramid.h | 10 + include/constants/rgb.h | 4 - include/gba/m4a_internal.h | 92 +- include/global.h | 2 +- include/list_menu.h | 4 +- include/pokemon.h | 12 +- include/pokenav.h | 2 +- libagbsyscall/libagbsyscall.s | 19 +- src/AgbRfu_LinkManager.c | 6 +- src/agb_flash.c | 26 +- src/apprentice.c | 4 +- src/battle_ai_script_commands.c | 2 +- src/battle_anim_bug.c | 38 +- src/battle_anim_dark.c | 2 + src/battle_anim_effects_1.c | 9 +- src/battle_anim_effects_3.c | 61 +- src/battle_anim_flying.c | 572 ++++++------ src/battle_anim_psychic.c | 2 +- src/battle_anim_utility_funcs.c | 2 +- src/battle_anim_water.c | 765 +++++++++++++-- src/battle_bg.c | 2 +- src/battle_controller_player.c | 74 +- src/battle_controller_safari.c | 10 +- src/battle_dome.c | 311 ++++++- src/battle_factory_screen.c | 54 +- src/battle_gfx_sfx_util.c | 15 +- src/battle_main.c | 866 +++++++++++++++-- src/battle_message.c | 2 +- src/battle_pyramid.c | 13 - src/battle_pyramid_bag.c | 26 +- src/battle_records.c | 4 +- src/battle_script_commands.c | 388 +++++++- src/battle_tower.c | 8 +- src/battle_transition.c | 7 +- src/battle_tv.c | 347 ++++++- src/battle_util.c | 623 +------------ src/berry.c | 2 +- src/berry_blender.c | 10 +- src/berry_crush.c | 71 +- src/berry_fix_program.c | 8 +- src/berry_tag_screen.c | 4 +- src/cable_club.c | 10 +- src/confetti_util.c | 6 +- src/contest.c | 44 +- src/contest_painting.c | 138 ++- src/contest_util.c | 373 +++++++- src/credits.c | 4 +- src/daycare.c | 6 +- src/decoration.c | 27 +- src/dewford_trend.c | 58 +- src/digit_obj_util.c | 2 +- src/diploma.c | 2 +- src/dodrio_berry_picking.c | 20 +- src/easy_chat.c | 82 +- src/ereader_screen.c | 10 +- src/event_object_movement.c | 102 +- src/evolution_scene.c | 8 +- src/faraway_island.c | 23 +- src/field_effect.c | 2 +- src/field_player_avatar.c | 10 +- src/field_special_scene.c | 2 +- src/fldeff_cut.c | 13 +- src/frontier_pass.c | 62 +- src/frontier_util.c | 245 ++++- src/hall_of_fame.c | 12 +- src/intro_credits_graphics.c | 4 +- src/item.c | 229 ++++- src/item_menu.c | 43 +- src/item_use.c | 6 +- src/link.c | 16 +- src/link_rfu_2.c | 83 +- src/link_rfu_3.c | 94 +- src/list_menu.c | 32 +- src/m4a.c | 111 ++- src/m4a_1.s | 466 +++++----- src/m4a_tables.c | 6 +- src/mail.c | 2 +- src/main.c | 20 +- src/main_menu.c | 16 +- src/match_call.c | 8 +- src/menu.c | 100 +- src/menu_helpers.c | 16 +- src/menu_specialized.c | 121 +-- src/mirage_tower.c | 161 +++- src/mon_markings.c | 8 +- src/move_relearner.c | 4 +- src/mystery_event_menu.c | 10 +- src/mystery_gift.c | 10 +- src/option_menu.c | 26 +- src/overworld.c | 19 +- src/party_menu.c | 26 +- src/player_pc.c | 28 +- src/pokeblock.c | 10 +- src/pokedex.c | 268 +++--- src/pokedex_area_screen.c | 4 +- src/pokemon.c | 61 +- src/pokemon_animation.c | 9 +- src/pokemon_jump.c | 8 +- src/pokemon_storage_system.c | 167 ++-- src/pokemon_summary_screen.c | 50 +- src/pokenav.c | 4 +- src/pokenav_conditions_1.c | 8 +- src/pokenav_conditions_3.c | 15 +- src/pokenav_main_menu.c | 181 +++- src/pokenav_match_call_1.c | 28 +- src/pokenav_match_call_2.c | 2 +- src/pokenav_menu_handler_1.c | 26 +- src/pokenav_region_map.c | 2 +- src/pokenav_ribbons_1.c | 12 +- src/pokenav_ribbons_2.c | 18 +- src/record_mixing.c | 46 +- src/region_map.c | 24 +- src/reset_rtc_screen.c | 16 +- src/save.c | 8 +- src/save_failed_screen.c | 6 +- src/scrcmd.c | 8 +- src/script.c | 6 +- src/script_menu.c | 2 +- src/secret_base.c | 8 +- src/shop.c | 8 +- src/slot_machine.c | 85 +- src/start_menu.c | 16 +- src/title_screen.c | 8 +- src/trade.c | 20 +- src/trainer_card.c | 8 +- src/trainer_hill.c | 68 +- src/trainer_see.c | 4 +- src/union_room.c | 24 +- src/union_room_chat.c | 26 +- src/unk_text_util_2.c | 10 +- src/walda_phrase.c | 4 +- src/wallclock.c | 8 +- src/wireless_communication_status_screen.c | 6 +- tools/gbagfx/gfx.c | 2 +- 149 files changed, 6786 insertions(+), 3108 deletions(-) diff --git a/Makefile b/Makefile index ca282d07e6..99a93718bd 100644 --- a/Makefile +++ b/Makefile @@ -69,7 +69,7 @@ OBJ_DIR := build/emerald LIBPATH := -L ../../tools/agbcc/lib else CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet -override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mcpu=arm7tdmi -fno-toplevel-reorder -Wno-pointer-to-int-cast +override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast ROM := pokeemerald_modern.gba OBJ_DIR := build/modern LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" diff --git a/berry_fix/asm/loader.s b/berry_fix/asm/loader.s index 24eb2df558..a780140785 100644 --- a/berry_fix/asm/loader.s +++ b/berry_fix/asm/loader.s @@ -109,7 +109,7 @@ _1a0: strh r1, [r0, 0xa] @ SIOMLT_SEND ldr r0, =_data_2f0 ldr r1, =gCode - svc 0x11 << 16 + swi 0x11 << 16 ldr lr, =gCode bx lr .pool diff --git a/berry_fix/payload/include/gba/m4a_internal.h b/berry_fix/payload/include/gba/m4a_internal.h index 494d31f935..339a0774ed 100644 --- a/berry_fix/payload/include/gba/m4a_internal.h +++ b/berry_fix/payload/include/gba/m4a_internal.h @@ -100,12 +100,12 @@ struct CgbChannel u8 le; u8 sw; u32 fr; - u32 *wp; - u32 *cp; - void *tp; - void *pp; - void *np; - u32 d4[2]; + u32 wp; + u32 cp; + u32 tp; + u32 pp; + u32 np; + u8 d4[8]; }; struct MusicPlayerTrack; @@ -138,10 +138,10 @@ struct SoundChannel u32 fw; u32 freq; struct WaveData *wav; - s8 *cp; + u32 cp; struct MusicPlayerTrack *track; - void *pp; - void *np; + u32 pp; + u32 np; u32 d4; u16 xpi; u16 xpc; @@ -172,11 +172,11 @@ struct SoundInfo u8 pcmDmaPeriod; // number of V-blanks per PCM DMA u8 maxLines; u8 gap[3]; - u32 pcmSamplesPerVBlank; - u32 pcmFreq; - u32 divFreq; + s32 pcmSamplesPerVBlank; + s32 pcmFreq; + s32 divFreq; struct CgbChannel *cgbChans; - void (*func)(); + u32 func; u32 intp; void (*CgbSound)(void); void (*CgbOscOff)(u8); @@ -184,7 +184,7 @@ struct SoundInfo u32 MPlayJumpTable; u32 plynote; u32 ExtVolPit; - u32 gap2[4]; + u8 gap2[16]; struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; }; @@ -248,7 +248,7 @@ struct MusicPlayerTrack u8 key; u8 velocity; u8 runningStatus; - s8 keyM; + u8 keyM; u8 pitM; s8 keyShift; s8 keyShiftX; @@ -312,7 +312,7 @@ struct MusicPlayerInfo struct MusicPlayerTrack *tracks; struct ToneData *tone; u32 ident; - void (*func)(); + u32 func; u32 intp; }; @@ -447,7 +447,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_note(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *); // extended sound command handler functions void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); diff --git a/berry_fix/payload/src/flash.c b/berry_fix/payload/src/flash.c index 499a1f9710..1f09d0b8f7 100644 --- a/berry_fix/payload/src/flash.c +++ b/berry_fix/payload/src/flash.c @@ -296,7 +296,7 @@ u8 HandleWriteSectorNBytes(u8 sectorNum, u8 *data, u16 size) u8 TryWriteSector(u8 sectorNum, u8 *data) { - if (ProgramFlashSectorAndVerify(sectorNum, data)) // is damaged? + if (ProgramFlashSectorAndVerify(sectorNum, data) != 0) // is damaged? { SetSectorDamagedStatus(SECTOR_DAMAGED, sectorNum); // set damaged sector bits. return SAVE_STATUS_ERROR; diff --git a/constants/gba_constants.inc b/constants/gba_constants.inc index 13cbadf802..3ff857ee8d 100644 --- a/constants/gba_constants.inc +++ b/constants/gba_constants.inc @@ -26,9 +26,9 @@ .set OAM, 0x7000000 - .set SOUND_INFO_PTR, IWRAM_END - 0x10 - .set INTR_CHECK, IWRAM_END - 0x8 - .set INTR_VECTOR, IWRAM_END - 0x4 + .set SOUND_INFO_PTR, 0x3007FF0 + .set INTR_CHECK, 0x3007FF8 + .set INTR_VECTOR, 0x3007FFC .set INTR_FLAG_VBLANK, 1 << 0 .set INTR_FLAG_HBLANK, 1 << 1 diff --git a/gflib/bg.c b/gflib/bg.c index 12c42d1248..66dd81a25e 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -34,8 +34,8 @@ struct BgConfig2 u32 unk_3:18; void* tilemap; - s32 bg_x; // Maybe unsigned, but game treats it as if it is signed a LOT. - s32 bg_y; // Same for this variable. + s32 bg_x; + s32 bg_y; }; static struct BgControl sGpuBgConfigs; @@ -621,15 +621,17 @@ s32 GetBgX(u8 bg) { if (IsInvalidBg32(bg)) return -1; - if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) + else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) return -1; - return sGpuBgConfigs2[bg].bg_x; + else + return sGpuBgConfigs2[bg].bg_x; } s32 ChangeBgY(u8 bg, s32 value, u8 op) { u8 mode; - u16 temp1, temp2; + u16 temp1; + u16 temp2; if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) { @@ -698,7 +700,8 @@ s32 ChangeBgY(u8 bg, s32 value, u8 op) s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op) { u8 mode; - u16 temp1, temp2; + u16 temp1; + u16 temp2; if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) { @@ -769,9 +772,10 @@ s32 GetBgY(u8 bg) { if (IsInvalidBg32(bg)) return -1; - if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) + else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) return -1; - return sGpuBgConfigs2[bg].bg_y; + else + return sGpuBgConfigs2[bg].bg_y; } void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) @@ -870,77 +874,81 @@ void* GetBgTilemapBuffer(u8 bg) { if (IsInvalidBg32(bg)) return NULL; - if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) + else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) return NULL; - return sGpuBgConfigs2[bg].tilemap; + else + return sGpuBgConfigs2[bg].tilemap; } void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset) { - if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) - return; - if (mode != 0) - CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode); - else - LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2))); + if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) + { + if (mode != 0) + CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode); + else + LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2))); + } } void CopyBgTilemapBufferToVram(u8 bg) { u16 sizeToLoad; - if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) - return; - - switch (GetBgType(bg)) + if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) { - case 0: - sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800; - break; - case 1: - sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100; - break; - default: - sizeToLoad = 0; - break; + switch (GetBgType(bg)) + { + case 0: + sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800; + break; + case 1: + sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100; + break; + default: + sizeToLoad = 0; + break; + } + LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2); } - LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2); } -void CopyToBgTilemapBufferRect(u8 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height) +void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height) { - u16 destX16, destY16; + u16 destX16; + u16 destY16; u16 mode; - if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) - return; - switch (GetBgType(bg)) + if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) { - case 0: - { - const u16 *srcCopy = src; - for (destY16 = destY; destY16 < (destY + height); destY16++) + switch (GetBgType(bg)) { - for (destX16 = destX; destX16 < (destX + width); destX16++) - { - ((u16 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; - } - } - break; - } - case 1: - { - const u8 *srcCopy = src; - mode = GetBgMetricAffineMode(bg, 0x1); - for (destY16 = destY; destY16 < (destY + height); destY16++) + case 0: { - for (destX16 = destX; destX16 < (destX + width); destX16++) + const u16 * srcCopy = src; + for (destY16 = destY; destY16 < (destY + height); destY16++) { - ((u8 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; + for (destX16 = destX; destX16 < (destX + width); destX16++) + { + ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; + } } + break; + } + case 1: + { + const u8 * srcCopy = src; + mode = GetBgMetricAffineMode(bg, 0x1); + for (destY16 = destY; destY16 < (destY + height); destY16++) + { + for (destX16 = destX; destX16 < (destX + width); destX16++) + { + ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; + } + } + break; + } } - break; - } } } diff --git a/gflib/text.c b/gflib/text.c index 89b47ca219..5d407e5e4c 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -21,7 +21,7 @@ static u16 gLastTextFgColor; static u16 gLastTextShadowColor; const struct FontInfo *gFonts; -bool8 gUnknown_03002F84; +u8 gUnknown_03002F84; struct Struct_03002F90 gUnknown_03002F90; TextFlags gTextFlags; @@ -154,7 +154,7 @@ u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 printerTemplate.currentY = y; printerTemplate.letterSpacing = gFonts[fontId].letterSpacing; printerTemplate.lineSpacing = gFonts[fontId].lineSpacing; - printerTemplate.style = gFonts[fontId].style; + printerTemplate.unk = gFonts[fontId].unk; printerTemplate.fgColor = gFonts[fontId].fgColor; printerTemplate.bgColor = gFonts[fontId].bgColor; printerTemplate.shadowColor = gFonts[fontId].shadowColor; @@ -205,7 +205,7 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi CopyWindowToVram(gTempTextPrinter.printerTemplate.windowId, 2); gTextPrinters[printerTemplate->windowId].active = 0; } - gUnknown_03002F84 = FALSE; + gUnknown_03002F84 = 0; return TRUE; } @@ -213,7 +213,7 @@ void RunTextPrinters(void) { int i; - if (!gUnknown_03002F84) + if (gUnknown_03002F84 == 0) { for (i = 0; i < NUM_TEXT_PRINTERS; ++i) { @@ -451,52 +451,54 @@ u8 GetLastTextColor(u8 colorType) { switch (colorType) { - case COLOR_FOREGROUND: + case 0: return gLastTextFgColor; - case COLOR_BACKGROUND: + case 2: return gLastTextBgColor; - case COLOR_SHADOW: + case 1: return gLastTextShadowColor; default: return 0; } } -#define GLYPH_COPY(fromY_, toY_, fromX_, toX_, unk) \ - { \ - u32 i, j, *ptr, toY, fromX, toX, r5, bits; \ - u8 *dst; \ - j = fromX_; \ - i = fromY_; \ - ptr = unk; \ - toX = toX_; \ - toY = toY_; \ - fromX = fromX_; \ - \ - for (; i < toY; i++) \ - { \ - asm("":::"sl"); /* NONMATCHING */ \ - r5 = *(ptr++); \ - for (j = fromX; j < toX; j++) \ - { \ - const u32 toOrr = r5 & 0xF; \ - if (toOrr) \ - { \ - dst = windowTiles + ((j / 8) * 32) + ((j % 8) / 2) + ((i / 8) * widthOffset) + ((i % 8) * 4); \ - bits = ((j & 1) * 4); \ - *dst = (toOrr << bits) | (*dst & (0xF0 >> bits)); \ - } \ - r5 >>= 4; \ - } \ - } \ - } +#ifdef NONMATCHING + +#define GLYPH_COPY(fromY_, toY_, fromX_, toX_, unk) \ +{ \ + u32 i, j, *ptr, toY, fromX, toX, r5, toOrr, bits; \ + u8 *dst; \ + \ + j = fromX_; \ + i = fromY_; \ + ptr = unk; \ + toX = toX_; \ + toY = toY_; \ + fromX = fromX_; \ + \ + for (; i < toY; i++) \ + { \ + r5 = *(ptr++); \ + for (j = fromX; j < toX; j++) \ + { \ + toOrr = r5 & 0xF; \ + if (toOrr) \ + { \ + dst = windowTiles + ((j / 8) * 32) + ((j & 7) / 2) + ((i / 8) * widthOffset) + ((i & 7) * 4); \ + bits = ((j & 1) << 2); \ + *dst = ((toOrr << bits) | (*dst & (0xF0 >> bits))); \ + } \ + r5 >>= 4; \ + } \ + } \ +} void CopyGlyphToWindow(struct TextPrinter *textPrinter) { struct Window *win; struct WindowTemplate *winTempl; struct Struct_03002F90 *unkStruct; - u32 currX, currY, widthOffset; + u32 currX, widthOffset, currY; s32 r4, r0; u8 *windowTiles; @@ -504,12 +506,12 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) winTempl = &win->window; r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX; - if (r4 > gUnknown_03002F90.width) - r4 = gUnknown_03002F90.width; + if (r4 > gUnknown_03002F90.unk80) + r4 = gUnknown_03002F90.unk80; r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY; - if (r0 > gUnknown_03002F90.height) - r0 = gUnknown_03002F90.height; + if (r0 > gUnknown_03002F90.unk81) + r0 = gUnknown_03002F90.unk81; currX = textPrinter->printerTemplate.currentX; currY = textPrinter->printerTemplate.currentY; @@ -517,9 +519,9 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) windowTiles = win->tileData; widthOffset = winTempl->width * 32; - if (r4 < 9) + if (r4 <= 8) { - if (r0 < 9) + if (r0 <= 8) { GLYPH_COPY(currY, currY + r0, currX, currX + r4, unkStruct->unk0); } @@ -534,9 +536,9 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) } else { - u32 temp; - if (r0 < 9) + if (r0 <= 8) { + u32 temp; GLYPH_COPY(currY, currY + r0, currX, currX + 8, unkStruct->unk0); temp = currX + 8; @@ -544,6 +546,7 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) } else { + u32 temp; GLYPH_COPY(currY, currY + 8, currX, currX + 8, unkStruct->unk0); temp = currX + 8; @@ -560,6 +563,711 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) } } } +#else +NAKED +void CopyGlyphToWindow(struct TextPrinter *x) +{ + asm("push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, #0x8C\n\ + add r3, r0, #0\n\ + ldrb r1, [r3, #0x4]\n\ + lsl r0, r1, #1\n\ + add r0, r1\n\ + lsl r0, #2\n\ + ldr r1, =gWindows\n\ + add r1, r0, r1\n\ + add r2, r1, #0\n\ + ldrb r7, [r1, #0x3]\n\ + lsl r0, r7, #3\n\ + ldrb r6, [r3, #0x8]\n\ + sub r4, r0, r6\n\ + ldr r5, =gUnknown_03002F90\n\ + add r0, r5, #0\n\ + add r0, #0x80\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + ble _08004DD2\n\ + add r4, r0, #0\n\ +_08004DD2:\n\ + ldrb r0, [r1, #0x4]\n\ + lsl r0, #3\n\ + ldrb r3, [r3, #0x9]\n\ + sub r0, r3\n\ + add r1, r5, #0\n\ + add r1, #0x81\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + ble _08004DE6\n\ + add r0, r1, #0\n\ +_08004DE6:\n\ + str r6, [sp]\n\ + mov r8, r3\n\ + add r3, r5, #0\n\ + ldr r2, [r2, #0x8]\n\ + mov r9, r2\n\ + lsl r1, r7, #5\n\ + str r1, [sp, #0x4]\n\ + cmp r4, #0x8\n\ + ble _08004DFA\n\ + b _08004F94\n\ +_08004DFA:\n\ + cmp r0, #0x8\n\ + bgt _08004E84\n\ + mov r1, r8\n\ + str r3, [sp, #0x8]\n\ + add r2, r6, #0\n\ + add r2, r4\n\ + mov r8, r2\n\ + add r0, r1, r0\n\ + str r0, [sp, #0xC]\n\ + str r6, [sp, #0x10]\n\ + cmp r1, r0\n\ + bcc _08004E14\n\ + b _080052AA\n\ +_08004E14:\n\ + ldr r3, [sp, #0x8]\n\ + ldm r3!, {r5}\n\ + str r3, [sp, #0x8]\n\ + ldr r4, [sp, #0x10]\n\ + add r0, r1, #0x1\n\ + mov r10, r0\n\ + cmp r4, r8\n\ + bcs _08004E72\n\ + mov r2, #0x7\n\ + mov r12, r2\n\ + lsr r0, r1, #3\n\ + ldr r2, [sp, #0x4]\n\ + add r3, r0, #0\n\ + mul r3, r2\n\ + add r7, r3, #0\n\ + mov r3, r12\n\ + and r1, r3\n\ + lsl r6, r1, #2\n\ +_08004E38:\n\ + add r3, r5, #0\n\ + mov r0, #0xF\n\ + and r3, r0\n\ + cmp r3, #0\n\ + beq _08004E6A\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ +_08004E6A:\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _08004E38\n\ +_08004E72:\n\ + mov r1, r10\n\ + ldr r2, [sp, #0xC]\n\ + cmp r1, r2\n\ + bcc _08004E14\n\ + b _080052AA\n\ + .pool\n\ +_08004E84:\n\ + mov r1, r8\n\ + str r3, [sp, #0x14]\n\ + ldr r3, [sp]\n\ + add r3, r4\n\ + mov r12, r3\n\ + add r2, r1, #0\n\ + add r2, #0x8\n\ + str r2, [sp, #0x18]\n\ + ldr r3, [sp]\n\ + str r3, [sp, #0x1C]\n\ + mov r2, r12\n\ + str r2, [sp, #0x74]\n\ + ldr r3, [sp, #0x18]\n\ + str r3, [sp, #0x88]\n\ + sub r0, #0x8\n\ + str r0, [sp, #0x80]\n\ + cmp r1, r3\n\ + bcs _08004F0E\n\ +_08004EA8:\n\ + ldr r0, [sp, #0x14]\n\ + ldm r0!, {r5}\n\ + str r0, [sp, #0x14]\n\ + ldr r4, [sp, #0x1C]\n\ + add r2, r1, #0x1\n\ + mov r8, r2\n\ + cmp r4, r12\n\ + bcs _08004F06\n\ + mov r3, #0x7\n\ + mov r10, r3\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, r10\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ +_08004ECC:\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _08004EFE\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r10\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ +_08004EFE:\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r12\n\ + bcc _08004ECC\n\ +_08004F06:\n\ + mov r1, r8\n\ + ldr r2, [sp, #0x18]\n\ + cmp r1, r2\n\ + bcc _08004EA8\n\ +_08004F0E:\n\ + ldr r1, [sp, #0x88]\n\ + ldr r3, =gUnknown_03002F90 + 0x40\n\ + str r3, [sp, #0x20]\n\ + ldr r0, [sp, #0x74]\n\ + mov r8, r0\n\ + ldr r2, [sp, #0x80]\n\ + add r2, r1, r2\n\ + str r2, [sp, #0x24]\n\ + ldr r3, [sp]\n\ + str r3, [sp, #0x28]\n\ + cmp r1, r2\n\ + bcc _08004F28\n\ + b _080052AA\n\ +_08004F28:\n\ + ldr r0, [sp, #0x20]\n\ + ldm r0!, {r5}\n\ + str r0, [sp, #0x20]\n\ + ldr r4, [sp, #0x28]\n\ + add r2, r1, #0x1\n\ + mov r10, r2\n\ + cmp r4, r8\n\ + bcs _08004F86\n\ + mov r3, #0x7\n\ + mov r12, r3\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, r12\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ +_08004F4C:\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _08004F7E\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ +_08004F7E:\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _08004F4C\n\ +_08004F86:\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x24]\n\ + cmp r1, r2\n\ + bcc _08004F28\n\ + b _080052AA\n\ + .pool\n\ +_08004F94:\n\ + cmp r0, #0x8\n\ + ble _08004F9A\n\ + b _080050A4\n\ +_08004F9A:\n\ + mov r1, r8\n\ + str r3, [sp, #0x2C]\n\ + ldr r3, [sp]\n\ + add r3, #0x8\n\ + mov r12, r3\n\ + add r0, r8\n\ + str r0, [sp, #0x30]\n\ + ldr r0, [sp]\n\ + str r0, [sp, #0x34]\n\ + ldr r2, [sp, #0x30]\n\ + str r2, [sp, #0x78]\n\ + str r3, [sp, #0x84]\n\ + sub r4, #0x8\n\ + str r4, [sp, #0x7C]\n\ + cmp r8, r2\n\ + bcs _0800501C\n\ +_08004FBA:\n\ + ldr r0, [sp, #0x2C]\n\ + ldm r0!, {r5}\n\ + str r0, [sp, #0x2C]\n\ + ldr r4, [sp, #0x34]\n\ + add r2, r1, #0x1\n\ + mov r10, r2\n\ + cmp r4, r12\n\ + bcs _08005014\n\ + lsr r0, r1, #3\n\ + ldr r2, [sp, #0x4]\n\ + add r3, r0, #0\n\ + mul r3, r2\n\ + add r7, r3, #0\n\ + mov r3, #0x7\n\ + and r1, r3\n\ + lsl r6, r1, #2\n\ +_08004FDA:\n\ + add r3, r5, #0\n\ + mov r0, #0xF\n\ + and r3, r0\n\ + cmp r3, #0\n\ + beq _0800500C\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, #0x7\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ +_0800500C:\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r12\n\ + bcc _08004FDA\n\ +_08005014:\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x30]\n\ + cmp r1, r2\n\ + bcc _08004FBA\n\ +_0800501C:\n\ + mov r1, r8\n\ + ldr r3, =gUnknown_03002F90 + 0x20\n\ + str r3, [sp, #0x38]\n\ + ldr r0, [sp, #0x84]\n\ + ldr r2, [sp, #0x7C]\n\ + add r0, r2\n\ + mov r8, r0\n\ + ldr r3, [sp, #0x78]\n\ + str r3, [sp, #0x3C]\n\ + ldr r0, [sp, #0x84]\n\ + str r0, [sp, #0x40]\n\ + cmp r1, r3\n\ + bcc _08005038\n\ + b _080052AA\n\ +_08005038:\n\ + ldr r2, [sp, #0x38]\n\ + ldm r2!, {r5}\n\ + str r2, [sp, #0x38]\n\ + ldr r4, [sp, #0x40]\n\ + add r3, r1, #0x1\n\ + mov r10, r3\n\ + cmp r4, r8\n\ + bcs _08005096\n\ + mov r0, #0x7\n\ + mov r12, r0\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, r12\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ +_0800505C:\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _0800508E\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ +_0800508E:\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _0800505C\n\ +_08005096:\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x3C]\n\ + cmp r1, r2\n\ + bcc _08005038\n\ + b _080052AA\n\ + .pool\n\ +_080050A4:\n\ + mov r1, r8\n\ + str r5, [sp, #0x44]\n\ + ldr r3, [sp]\n\ + add r3, #0x8\n\ + mov r12, r3\n\ + mov r2, r8\n\ + add r2, #0x8\n\ + str r2, [sp, #0x48]\n\ + ldr r3, [sp]\n\ + str r3, [sp, #0x4C]\n\ + str r2, [sp, #0x88]\n\ + sub r0, #0x8\n\ + str r0, [sp, #0x80]\n\ + mov r0, r12\n\ + str r0, [sp, #0x84]\n\ + sub r4, #0x8\n\ + str r4, [sp, #0x7C]\n\ + cmp r8, r2\n\ + bcs _0800512C\n\ +_080050CA:\n\ + ldr r2, [sp, #0x44]\n\ + ldm r2!, {r5}\n\ + str r2, [sp, #0x44]\n\ + ldr r4, [sp, #0x4C]\n\ + add r3, r1, #0x1\n\ + mov r10, r3\n\ + cmp r4, r12\n\ + bcs _08005124\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, #0x7\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ +_080050EA:\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _0800511C\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, #0x7\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ +_0800511C:\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r12\n\ + bcc _080050EA\n\ +_08005124:\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x48]\n\ + cmp r1, r2\n\ + bcc _080050CA\n\ +_0800512C:\n\ + mov r1, r8\n\ + ldr r3, =gUnknown_03002F90 + 0x20\n\ + str r3, [sp, #0x50]\n\ + ldr r0, [sp, #0x84]\n\ + ldr r2, [sp, #0x7C]\n\ + add r0, r2\n\ + mov r8, r0\n\ + ldr r3, [sp, #0x88]\n\ + str r3, [sp, #0x54]\n\ + ldr r0, [sp, #0x84]\n\ + str r0, [sp, #0x58]\n\ + cmp r1, r3\n\ + bcs _080051AC\n\ +_08005146:\n\ + ldr r2, [sp, #0x50]\n\ + ldm r2!, {r5}\n\ + str r2, [sp, #0x50]\n\ + ldr r4, [sp, #0x58]\n\ + add r3, r1, #0x1\n\ + mov r10, r3\n\ + cmp r4, r8\n\ + bcs _080051A4\n\ + mov r0, #0x7\n\ + mov r12, r0\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, r12\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ +_0800516A:\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _0800519C\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ +_0800519C:\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _0800516A\n\ +_080051A4:\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x54]\n\ + cmp r1, r2\n\ + bcc _08005146\n\ +_080051AC:\n\ + ldr r1, [sp, #0x88]\n\ + ldr r3, =gUnknown_03002F90 + 0x40\n\ + str r3, [sp, #0x5C]\n\ + ldr r0, [sp, #0x84]\n\ + mov r8, r0\n\ + ldr r2, [sp, #0x80]\n\ + add r2, r1, r2\n\ + str r2, [sp, #0x60]\n\ + ldr r3, [sp]\n\ + str r3, [sp, #0x64]\n\ + cmp r1, r2\n\ + bcs _0800522A\n\ +_080051C4:\n\ + ldr r0, [sp, #0x5C]\n\ + ldm r0!, {r5}\n\ + str r0, [sp, #0x5C]\n\ + ldr r4, [sp, #0x64]\n\ + add r2, r1, #0x1\n\ + mov r10, r2\n\ + cmp r4, r8\n\ + bcs _08005222\n\ + mov r3, #0x7\n\ + mov r12, r3\n\ + lsr r0, r1, #3\n\ + ldr r3, [sp, #0x4]\n\ + add r2, r0, #0\n\ + mul r2, r3\n\ + add r7, r2, #0\n\ + mov r0, r12\n\ + and r1, r0\n\ + lsl r6, r1, #2\n\ +_080051E8:\n\ + add r3, r5, #0\n\ + mov r1, #0xF\n\ + and r3, r1\n\ + cmp r3, #0\n\ + beq _0800521A\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ +_0800521A:\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _080051E8\n\ +_08005222:\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x60]\n\ + cmp r1, r2\n\ + bcc _080051C4\n\ +_0800522A:\n\ + ldr r4, [sp, #0x84]\n\ + ldr r1, [sp, #0x88]\n\ + ldr r3, =gUnknown_03002F90 + 0x60\n\ + str r3, [sp, #0x68]\n\ + ldr r0, [sp, #0x7C]\n\ + add r0, r4\n\ + mov r8, r0\n\ + ldr r2, [sp, #0x80]\n\ + add r2, r1, r2\n\ + str r2, [sp, #0x6C]\n\ + str r4, [sp, #0x70]\n\ + cmp r1, r2\n\ + bcs _080052AA\n\ +_08005244:\n\ + ldr r3, [sp, #0x68]\n\ + ldm r3!, {r5}\n\ + str r3, [sp, #0x68]\n\ + ldr r4, [sp, #0x70]\n\ + add r0, r1, #0x1\n\ + mov r10, r0\n\ + cmp r4, r8\n\ + bcs _080052A2\n\ + mov r2, #0x7\n\ + mov r12, r2\n\ + lsr r0, r1, #3\n\ + ldr r2, [sp, #0x4]\n\ + add r3, r0, #0\n\ + mul r3, r2\n\ + add r7, r3, #0\n\ + mov r3, r12\n\ + and r1, r3\n\ + lsl r6, r1, #2\n\ +_08005268:\n\ + add r3, r5, #0\n\ + mov r0, #0xF\n\ + and r3, r0\n\ + cmp r3, #0\n\ + beq _0800529A\n\ + lsr r2, r4, #3\n\ + lsl r2, #5\n\ + add r2, r9\n\ + add r0, r4, #0\n\ + mov r1, r12\n\ + and r0, r1\n\ + lsr r0, #1\n\ + add r2, r0\n\ + add r2, r7\n\ + add r2, r6\n\ + mov r1, #0x1\n\ + and r1, r4\n\ + lsl r1, #2\n\ + lsl r3, r1\n\ + mov r0, #0xF0\n\ + asr r0, r1\n\ + ldrb r1, [r2]\n\ + and r0, r1\n\ + orr r3, r0\n\ + strb r3, [r2]\n\ +_0800529A:\n\ + lsr r5, #4\n\ + add r4, #0x1\n\ + cmp r4, r8\n\ + bcc _08005268\n\ +_080052A2:\n\ + mov r1, r10\n\ + ldr r2, [sp, #0x6C]\n\ + cmp r1, r2\n\ + bcc _08005244\n\ +_080052AA:\n\ + add sp, #0x8C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); +} +#endif // NONMATCHING + void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) { struct Window *window; @@ -575,7 +1283,7 @@ void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) pixels_data.height = window->window.height << 3; gUnk = &gUnknown_03002F90; - glyphHeight = &gUnk->height; + glyphHeight = &gUnk->unk81; FillBitmapRect4Bit( &pixels_data, @@ -591,7 +1299,7 @@ u16 Font0Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 0; subStruct->hasGlyphIdBeenSet = TRUE; @@ -603,7 +1311,7 @@ u16 Font1Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 1; subStruct->hasGlyphIdBeenSet = TRUE; @@ -615,7 +1323,7 @@ u16 Font2Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 2; subStruct->hasGlyphIdBeenSet = TRUE; @@ -627,7 +1335,7 @@ u16 Font3Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 3; subStruct->hasGlyphIdBeenSet = TRUE; @@ -639,7 +1347,7 @@ u16 Font4Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 4; subStruct->hasGlyphIdBeenSet = TRUE; @@ -651,7 +1359,7 @@ u16 Font5Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 5; subStruct->hasGlyphIdBeenSet = TRUE; @@ -663,7 +1371,7 @@ u16 Font7Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 7; subStruct->hasGlyphIdBeenSet = TRUE; @@ -675,7 +1383,7 @@ u16 Font8Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 8; subStruct->hasGlyphIdBeenSet = TRUE; @@ -687,7 +1395,7 @@ void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (gTextFlags.autoScroll == TRUE) + if (gTextFlags.autoScroll == 1) { subStruct->autoScrollDelay = 0; } @@ -703,7 +1411,7 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter) struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); const u8 *arrowTiles; - if (!gTextFlags.autoScroll) + if (gTextFlags.autoScroll == 0) { if (subStruct->downArrowDelay != 0) { @@ -779,14 +1487,14 @@ bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) { bool8 result = FALSE; - if (gTextFlags.autoScroll) + if (gTextFlags.autoScroll != 0) { result = TextPrinterWaitAutoMode(textPrinter); } else { TextPrinterDrawDownArrow(textPrinter); - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { result = TRUE; PlaySE(SE_SELECT); @@ -798,14 +1506,17 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) bool16 TextPrinterWait(struct TextPrinter *textPrinter) { bool16 result = FALSE; - if (gTextFlags.autoScroll) + if (gTextFlags.autoScroll != 0) { result = TextPrinterWaitAutoMode(textPrinter); } - else if (JOY_NEW(A_BUTTON | B_BUTTON)) + else { - result = TRUE; - PlaySE(SE_SELECT); + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + result = TRUE; + PlaySE(SE_SELECT); + } } return result; } @@ -821,7 +1532,7 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c else { FillWindowPixelRect(windowId, (bgColor << 4) | bgColor, x, y, 0x8, 0x10); - if (!drawArrow) + if (drawArrow == 0) { switch (gTextFlags.useAlternateDownArrow) { @@ -862,13 +1573,13 @@ u16 RenderText(struct TextPrinter *textPrinter) switch (textPrinter->state) { case 0: - if ((JOY_HELD(A_BUTTON | B_BUTTON)) && subStruct->hasPrintBeenSpedUp) + if ((gMain.heldKeys & (A_BUTTON | B_BUTTON)) && subStruct->hasPrintBeenSpedUp) textPrinter->delayCounter = 0; if (textPrinter->delayCounter && textPrinter->textSpeed) { textPrinter->delayCounter--; - if (gTextFlags.canABSpeedUpPrint && (JOY_NEW(A_BUTTON | B_BUTTON))) + if (gTextFlags.canABSpeedUpPrint && (gMain.newKeys & (A_BUTTON | B_BUTTON))) { subStruct->hasPrintBeenSpedUp = TRUE; textPrinter->delayCounter = 0; @@ -1013,10 +1724,10 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++; return 2; case EXT_CTRL_CODE_JPN: - textPrinter->japanese = TRUE; + textPrinter->japanese = 1; return 2; case EXT_CTRL_CODE_ENG: - textPrinter->japanese = FALSE; + textPrinter->japanese = 0; return 2; } break; @@ -1034,8 +1745,8 @@ u16 RenderText(struct TextPrinter *textPrinter) break; case CHAR_KEYPAD_ICON: currChar = *textPrinter->printerTemplate.currentChar++; - gUnknown_03002F90.width = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY); - textPrinter->printerTemplate.currentX += gUnknown_03002F90.width + textPrinter->printerTemplate.letterSpacing; + gUnknown_03002F90.unk80 = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY); + textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing; return 0; case EOS: return 1; @@ -1069,18 +1780,21 @@ u16 RenderText(struct TextPrinter *textPrinter) if (textPrinter->minLetterSpacing) { - textPrinter->printerTemplate.currentX += gUnknown_03002F90.width; - width = textPrinter->minLetterSpacing - gUnknown_03002F90.width; + textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80; + width = textPrinter->minLetterSpacing - gUnknown_03002F90.unk80; if (width > 0) { ClearTextSpan(textPrinter, width); textPrinter->printerTemplate.currentX += width; } } - else if (textPrinter->japanese) - textPrinter->printerTemplate.currentX += (gUnknown_03002F90.width + textPrinter->printerTemplate.letterSpacing); else - textPrinter->printerTemplate.currentX += gUnknown_03002F90.width; + { + if (textPrinter->japanese) + textPrinter->printerTemplate.currentX += (gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing); + else + textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80; + } return 0; case 1: if (TextPrinterWait(textPrinter)) @@ -1566,7 +2280,7 @@ void SetDefaultFontsPointer(void) u8 GetFontAttribute(u8 fontId, u8 attributeId) { - u8 result = 0; + int result = 0; switch (attributeId) { case FONTATTR_MAX_LETTER_WIDTH: @@ -1581,8 +2295,8 @@ u8 GetFontAttribute(u8 fontId, u8 attributeId) case FONTATTR_LINE_SPACING: result = gFontInfos[fontId].lineSpacing; break; - case FONTATTR_STYLE: - result = gFontInfos[fontId].style; + case FONTATTR_UNKNOWN: + result = gFontInfos[fontId].unk; break; case FONTATTR_COLOR_FOREGROUND: result = gFontInfos[fontId].fgColor; @@ -1611,15 +2325,15 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.width = 8; // gGlyphWidth - gUnknown_03002F90.height = 12; // gGlyphHeight + gUnknown_03002F90.unk80 = 8; // gGlyphWidth + gUnknown_03002F90.unk81 = 12; // gGlyphHeight } else { glyphs = gFont0LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.width = gFont0LatinGlyphWidths[glyphId]; + gUnknown_03002F90.unk80 = gFont0LatinGlyphWidths[glyphId]; - if (gUnknown_03002F90.width <= 8) + if (gUnknown_03002F90.unk80 <= 8) { DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); @@ -1632,7 +2346,7 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); } - gUnknown_03002F90.height = 13; + gUnknown_03002F90.unk81 = 13; } } @@ -1654,15 +2368,15 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese) glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.width = 8; // gGlyphWidth - gUnknown_03002F90.height = 15; // gGlyphHeight + gUnknown_03002F90.unk80 = 8; // gGlyphWidth + gUnknown_03002F90.unk81 = 15; // gGlyphHeight } else { glyphs = gFont7LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.width = gFont7LatinGlyphWidths[glyphId]; + gUnknown_03002F90.unk80 = gFont7LatinGlyphWidths[glyphId]; - if (gUnknown_03002F90.width <= 8) + if (gUnknown_03002F90.unk80 <= 8) { DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); @@ -1675,7 +2389,7 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); } - gUnknown_03002F90.height = 15; + gUnknown_03002F90.unk81 = 15; } } @@ -1696,15 +2410,15 @@ void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese) glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.width = 8; // gGlyphWidth - gUnknown_03002F90.height = 12; // gGlyphHeight + gUnknown_03002F90.unk80 = 8; // gGlyphWidth + gUnknown_03002F90.unk81 = 12; // gGlyphHeight } else { glyphs = gFont8LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.width = gFont8LatinGlyphWidths[glyphId]; + gUnknown_03002F90.unk80 = gFont8LatinGlyphWidths[glyphId]; - if (gUnknown_03002F90.width <= 8) + if (gUnknown_03002F90.unk80 <= 8) { DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); @@ -1717,7 +2431,7 @@ void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); } - gUnknown_03002F90.height = 12; + gUnknown_03002F90.unk81 = 12; } } @@ -1737,18 +2451,18 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) { glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); - DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); - DecompressGlyphTile(glyphs + 0x88, gUnknown_03002F90.unk60); - gUnknown_03002F90.width = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth - gUnknown_03002F90.height = 14; // gGlyphHeight + DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); // gUnknown_03002F90 + 0x40 + DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x20 + DecompressGlyphTile(glyphs + 0x88, gUnknown_03002F90.unk60); // gUnknown_03002F90 + 0x60 + gUnknown_03002F90.unk80 = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth + gUnknown_03002F90.unk81 = 14; // gGlyphHeight } else { glyphs = gFont2LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.width = gFont2LatinGlyphWidths[glyphId]; + gUnknown_03002F90.unk80 = gFont2LatinGlyphWidths[glyphId]; - if (gUnknown_03002F90.width <= 8) + if (gUnknown_03002F90.unk80 <= 8) { DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); @@ -1761,7 +2475,7 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); } - gUnknown_03002F90.height = 14; + gUnknown_03002F90.unk81 = 14; } } @@ -1783,15 +2497,15 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.width = 8; // gGlyphWidth - gUnknown_03002F90.height = 15; // gGlyphHeight + gUnknown_03002F90.unk80 = 8; // gGlyphWidth + gUnknown_03002F90.unk81 = 15; // gGlyphHeight } else { glyphs = gFont1LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.width = gFont1LatinGlyphWidths[glyphId]; + gUnknown_03002F90.unk80 = gFont1LatinGlyphWidths[glyphId]; - if (gUnknown_03002F90.width <= 8) + if (gUnknown_03002F90.unk80 <= 8) { DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); @@ -1804,7 +2518,7 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); } - gUnknown_03002F90.height = 15; + gUnknown_03002F90.unk81 = 15; } } @@ -1823,6 +2537,6 @@ void DecompressGlyphFont9(u16 glyphId) glyphs = gFont9JapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); - gUnknown_03002F90.width = 8; - gUnknown_03002F90.height = 12; + gUnknown_03002F90.unk80 = 8; + gUnknown_03002F90.unk81 = 12; } diff --git a/gflib/text.h b/gflib/text.h index 4cf5bc20b9..ba74cde6e1 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -269,20 +269,13 @@ #define TEXT_SPEED_FF 0xFF -enum -{ - COLOR_FOREGROUND, - COLOR_SHADOW, - COLOR_BACKGROUND -}; - enum { FONTATTR_MAX_LETTER_WIDTH, FONTATTR_MAX_LETTER_HEIGHT, FONTATTR_LETTER_SPACING, FONTATTR_LINE_SPACING, - FONTATTR_STYLE, + FONTATTR_UNKNOWN, // dunno what this is yet FONTATTR_COLOR_FOREGROUND, FONTATTR_COLOR_BACKGROUND, FONTATTR_COLOR_SHADOW @@ -310,7 +303,7 @@ struct TextPrinterTemplate u8 currentY; u8 letterSpacing; u8 lineSpacing; - u8 style:4; // 0xC + u8 unk:4; // 0xC u8 fgColor:4; u8 bgColor:4; u8 shadowColor:4; @@ -329,7 +322,7 @@ struct TextPrinter u8 delayCounter; u8 scrollDistance; u8 minLetterSpacing; // 0x20 - bool8 japanese; + u8 japanese; }; struct FontInfo @@ -339,7 +332,7 @@ struct FontInfo u8 maxLetterHeight; u8 letterSpacing; u8 lineSpacing; - u8 style:4; //unused + u8 unk:4; u8 fgColor:4; u8 bgColor:4; u8 shadowColor:4; @@ -373,13 +366,13 @@ struct Struct_03002F90 u32 unk20[8]; u32 unk40[8]; u32 unk60[8]; - u8 width; - u8 height; + u8 unk80; + u8 unk81; }; extern TextFlags gTextFlags; -extern bool8 gUnknown_03002F84; +extern u8 gUnknown_03002F84; extern struct Struct_03002F90 gUnknown_03002F90; void SetFontsPointer(const struct FontInfo *fonts); diff --git a/gflib/window.c b/gflib/window.c index 0be59773c1..7c87ea86dc 100644 --- a/gflib/window.c +++ b/gflib/window.c @@ -30,18 +30,21 @@ static void nullsub_8(void) bool16 InitWindows(const struct WindowTemplate *templates) { - int i, j; - u8* allocatedTilemapBuffer; - u16 attrib; - int allocatedBaseBlock; + int i; + void *bgTilemapBuffer; + int j; u8 bgLayer; + u16 attrib; + u8* allocatedTilemapBuffer; + int allocatedBaseBlock; for (i = 0; i < 0x4; ++i) { - if (GetBgTilemapBuffer(i) != NULL) + bgTilemapBuffer = GetBgTilemapBuffer(i); + if (bgTilemapBuffer != NULL) gUnknown_03002F70[i] = nullsub_8; else - gUnknown_03002F70[i] = NULL; + gUnknown_03002F70[i] = bgTilemapBuffer; } for (i = 0; i < 0x20; ++i) @@ -564,19 +567,19 @@ u32 GetWindowAttribute(u8 windowId, u8 attributeId) switch (attributeId) { case WINDOW_BG: - return (u32)gWindows[windowId].window.bg; + return gWindows[windowId].window.bg; case WINDOW_TILEMAP_LEFT: - return (u32)gWindows[windowId].window.tilemapLeft; + return gWindows[windowId].window.tilemapLeft; case WINDOW_TILEMAP_TOP: - return (u32)gWindows[windowId].window.tilemapTop; + return gWindows[windowId].window.tilemapTop; case WINDOW_WIDTH: - return (u32)gWindows[windowId].window.width; + return gWindows[windowId].window.width; case WINDOW_HEIGHT: - return (u32)gWindows[windowId].window.height; + return gWindows[windowId].window.height; case WINDOW_PALETTE_NUM: - return (u32)gWindows[windowId].window.paletteNum; + return gWindows[windowId].window.paletteNum; case WINDOW_BASE_BLOCK: - return (u32)gWindows[windowId].window.baseBlock; + return gWindows[windowId].window.baseBlock; case WINDOW_TILE_DATA: return (u32)(gWindows[windowId].tileData); default: @@ -640,9 +643,12 @@ u16 AddWindow8Bit(const struct WindowTemplate *template) } return 0xFF; } - gWindows[windowId].tileData = memAddress; - gWindows[windowId].window = *template; - return windowId; + else + { + gWindows[windowId].tileData = memAddress; + gWindows[windowId].window = *template; + return windowId; + } } void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue) diff --git a/include/AgbRfu_LinkManager.h b/include/AgbRfu_LinkManager.h index 4e1a879c22..d4ef13183e 100644 --- a/include/AgbRfu_LinkManager.h +++ b/include/AgbRfu_LinkManager.h @@ -176,8 +176,8 @@ typedef struct linkManagerTag /* 0x024 */ VBL_TIMER nameAcceptTimer; /* 0x030 */ VBL_TIMER linkRecoveryTimer; /* 0x03c */ INIT_PARAM *init_param; - /* 0x040 */ void (*LMAN_callback)(u8 msg, u8 paramCount); - /* 0x044 */ void (*MSC_callback)(u16 REQ_commandID); + /* 0x040 */ void (*LMAN_callback)(u8, u8); + /* 0x044 */ void (*MSC_callback)(u16); } LINK_MANAGER; extern struct linkManagerTag lman; diff --git a/include/battle.h b/include/battle.h index 5a04c1eec6..6dddfd197a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -124,22 +124,22 @@ struct ProtectStruct u32 flinchImmobility:1; u32 notFirstStrike:1; u32 palaceUnableToUseMove:1; - s32 physicalDmg; - s32 specialDmg; + u32 physicalDmg; + u32 specialDmg; u8 physicalBattlerId; u8 specialBattlerId; }; struct SpecialStatus { - u32 statLowered:1; - u32 lightningRodRedirected:1; - u32 restoredBattlerSprite: 1; - u32 intimidatedMon:1; - u32 traced:1; - u32 ppNotAffectedByPressure:1; - u32 flag40:1; - u32 focusBanded:1; + u8 statLowered:1; + u8 lightningRodRedirected:1; + u8 restoredBattlerSprite: 1; + u8 intimidatedMon:1; + u8 traced:1; + u8 ppNotAffectedByPressure:1; + u8 flag40:1; + u8 focusBanded:1; s32 dmg; s32 physicalDmg; s32 specialDmg; @@ -254,7 +254,7 @@ struct BattleResults u16 playerMon2Species; // 0x26 u16 caughtMonSpecies; // 0x28 u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A - u8 filler35; // 0x35 + u8 filler35[1]; // 0x35 u8 catchAttempts[11]; // 0x36 }; diff --git a/include/battle_main.h b/include/battle_main.h index 0176f7f244..890e47f399 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -73,6 +73,8 @@ void nullsub_20(void); void BeginBattleIntro(void); void SwitchInClearSetData(void); void FaintClearSetData(void); +void sub_803B3AC(void); // unused +void sub_803B598(void); // unused void BattleTurnPassed(void); u8 IsRunningFromBattleImpossible(void); void SwitchPartyOrder(u8 battlerId); @@ -81,7 +83,6 @@ u8 GetWhoStrikesFirst(u8 battlerId1, u8 battlerId2, bool8 ignoreChosenMoves); void RunBattleScriptCommands_PopCallbacksStack(void); void RunBattleScriptCommands(void); bool8 TryRunFromBattle(u8 battlerId); -void SpecialStatusesClear(void); extern struct UnknownPokemonStruct4 gMultiPartnerParty[MULTI_PARTY_SIZE]; diff --git a/include/battle_message.h b/include/battle_message.h index af090a06cf..011a1cb0c7 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -145,7 +145,7 @@ { \ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ textVar[1] = B_BUFF_STRING; \ - textVar[2] = (stringId & 0xFF); \ + textVar[2] = stringId; \ textVar[3] = (stringId & 0xFF00) >> 8; \ textVar[4] = B_BUFF_EOS; \ } diff --git a/include/battle_util.h b/include/battle_util.h index 81443f4631..157ba8eb6d 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -41,19 +41,6 @@ #define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK))) #define WEATHER_HAS_EFFECT2 ((!ABILITY_ON_FIELD2(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD2(ABILITY_AIR_LOCK))) -void HandleAction_UseMove(void); -void HandleAction_Switch(void); -void HandleAction_UseItem(void); -void HandleAction_Run(void); -void HandleAction_WatchesCarefully(void); -void HandleAction_SafariZoneBallThrow(void); -void HandleAction_ThrowPokeblock(void); -void HandleAction_GoNear(void); -void HandleAction_SafariZoneRun(void); -void HandleAction_WallyBallThrow(void); -void HandleAction_TryFinish(void); -void HandleAction_NothingIsFainted(void); -void HandleAction_ActionFinished(void); u8 GetBattlerForBattleScript(u8 caseId); void PressurePPLose(u8 target, u8 attacker, u16 move); void PressurePPLoseOnUsingPerishSong(u8 attacker); diff --git a/include/constants/battle.h b/include/constants/battle.h index fa8f422c4b..8b860e3848 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -186,7 +186,7 @@ #define HITMARKER_x4000000 (1 << 26) #define HITMARKER_CHARGING (1 << 27) #define HITMARKER_FAINTED(battler) (gBitTable[battler] << 28) -#define HITMARKER_FAINTED2(battler) ((1 << 28) << battler) +#define HITMARKER_FAINTED2(battler) (1 << (28 + battler)) // Per-side statuses that affect an entire party #define SIDE_STATUS_REFLECT (1 << 0) diff --git a/include/constants/battle_pyramid.h b/include/constants/battle_pyramid.h index 378197a4df..004df71552 100644 --- a/include/constants/battle_pyramid.h +++ b/include/constants/battle_pyramid.h @@ -7,6 +7,16 @@ #define FLOOR_WALKABLE_METATILE 0x28D #define FLOOR_EXIT_METATILE 0x28E +#define HINT_EXIT_DIRECTION 0 +#define HINT_REMAINING_ITEMS 1 +#define HINT_REMAINING_TRAINERS 2 +#define HINT_EXIT_SHORT_REMAINING_TRAINERS 3 +#define HINT_EXIT_SHORT_REMAINING_ITEMS 4 +#define HINT_EXIT_MEDIUM_REMAINING_TRAINERS 5 +#define HINT_EXIT_MEDIUM_REMAINING_ITEMS 6 +#define HINT_EXIT_FAR_REMAINING_TRAINERS 7 +#define HINT_EXIT_FAR_REMAINING_ITEMS 8 + #define OBJ_TRAINERS 0 #define OBJ_ITEMS 1 diff --git a/include/constants/rgb.h b/include/constants/rgb.h index 1896250d20..80d951f4bd 100644 --- a/include/constants/rgb.h +++ b/include/constants/rgb.h @@ -1,10 +1,6 @@ #ifndef GUARD_RGB_H #define GUARD_RGB_H -#define GET_R(color) ((color) & 0x1F) -#define GET_G(color) (((color) >> 5) & 0x1F) -#define GET_B(color) (((color) >> 10) & 0x1F) - #define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10)) #define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r)) #define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F)) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index bdff1b8651..e2836c6f6b 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -140,13 +140,55 @@ struct SoundChannel struct WaveData *wav; u32 cp; struct MusicPlayerTrack *track; - void *pp; - void *np; - void *d4; + u32 pp; + u32 np; + u32 d4; u16 xpi; u16 xpc; }; +#define MAX_DIRECTSOUND_CHANNELS 12 + +#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer + +struct SoundInfo +{ + // This field is normally equal to ID_NUMBER but it is set to other + // values during sensitive operations for locking purposes. + // This field should be volatile but isn't. This could potentially cause + // race conditions. + u32 ident; + + vu8 pcmDmaCounter; + + // Direct Sound + u8 reverb; + u8 maxChans; + u8 masterVolume; + u8 freq; + + u8 mode; + u8 c15; + u8 pcmDmaPeriod; // number of V-blanks per PCM DMA + u8 maxLines; + u8 gap[3]; + s32 pcmSamplesPerVBlank; + s32 pcmFreq; + s32 divFreq; + struct CgbChannel *cgbChans; + u32 func; + u32 intp; + void (*CgbSound)(void); + void (*CgbOscOff)(u8); + u32 (*MidiKeyToCgbFreq)(u8, u8, u8); + u32 MPlayJumpTable; + u32 plynote; + u32 ExtVolPit; + u8 gap2[16]; + struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; + s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; +}; + struct SongHeader { u8 trackCount; @@ -270,7 +312,7 @@ struct MusicPlayerInfo struct MusicPlayerTrack *tracks; struct ToneData *tone; u32 ident; - void (*func)(); + u32 func; u32 intp; }; @@ -292,47 +334,7 @@ struct Song extern const struct MusicPlayer gMPlayTable[]; extern const struct Song gSongTable[]; -#define MAX_DIRECTSOUND_CHANNELS 12 -#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer - -struct SoundInfo -{ - // This field is normally equal to ID_NUMBER but it is set to other - // values during sensitive operations for locking purposes. - // This field should be volatile but isn't. This could potentially cause - // race conditions. - u32 ident; - - vu8 pcmDmaCounter; - - // Direct Sound - u8 reverb; - u8 maxChans; - u8 masterVolume; - u8 freq; - - u8 mode; - u8 c15; - u8 pcmDmaPeriod; // number of V-blanks per PCM DMA - u8 maxLines; - u8 gap[3]; - s32 pcmSamplesPerVBlank; - s32 pcmFreq; - s32 divFreq; - struct CgbChannel *cgbChans; - void (*func)(); - u32 intp; - void (*CgbSound)(); - void (*CgbOscOff)(u8); - u32 (*MidiKeyToCgbFreq)(u8, u8, u8); - void (**MPlayJumpTable)(); - void (*plynote)(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); - void (*ExtVolPit)(struct MusicPlayerInfo *, struct MusicPlayerTrack *); - u32 gap2[4]; - struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; - s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; -}; extern u8 gMPlayMemAccArea[]; @@ -446,7 +448,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_note(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *); // extended sound command handler functions void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); diff --git a/include/global.h b/include/global.h index 8c51670410..08988eac77 100644 --- a/include/global.h +++ b/include/global.h @@ -99,7 +99,7 @@ #define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr) // Macros for checking the joypad -#define TEST_BUTTON(field, button) ((field) & (button)) +#define TEST_BUTTON(field, button) ({(field) & (button);}) #define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button) #define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button) #define JOY_HELD_RAW(button) TEST_BUTTON(gMain.heldKeysRaw, button) diff --git a/include/list_menu.h b/include/list_menu.h index 4697ba5aa6..0a54a069ad 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -24,7 +24,7 @@ struct ListMenu; struct ListMenuItem { const u8 *name; - u32 id; + s32 id; }; struct ListMenuTemplate @@ -98,7 +98,7 @@ struct CursorStruct extern struct ScrollArrowsTemplate gTempScrollArrowTemplate; extern struct ListMenuTemplate gMultiuseListMenuTemplate; -u32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *arg1, u16 scrollOffset, u16 selectedRow); s32 ListMenu_ProcessInput(u8 listTaskId); diff --git a/include/pokemon.h b/include/pokemon.h index 81c17f545b..d75ec94f30 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -123,12 +123,12 @@ struct Pokemon struct Unknown_806F160_Struct { - u32 field_0_0:4; - u32 field_0_1:4; - u32 field_1:8; - u16 magic:8; - u32 size:4; - u16 field_3_1:4; + u8 field_0_0:4; + u8 field_0_1:4; + u8 field_1; + u8 magic; + u8 field_3_0:4; + u8 field_3_1:4; void *bytes; u8 **byteArrays; struct SpriteTemplate *templates; diff --git a/include/pokenav.h b/include/pokenav.h index ed4e5a9061..ac916f3ba8 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -313,7 +313,7 @@ bool32 WaitForHelpBar(void); void sub_81C78A0(void); bool32 MainMenuLoopedTaskIsBusy(void); void sub_81C7FDC(void); -void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette); +void sub_81C79BC(const u16 *a0, const u16 *a1, u32 a2, u32 a3, u32 a4, u16 *a5); void sub_81C7B40(void); struct Sprite *PauseSpinningPokenavSprite(void); void ResumeSpinningPokenavSprite(void); diff --git a/libagbsyscall/libagbsyscall.s b/libagbsyscall/libagbsyscall.s index 0c90da9ed0..00c40d08e0 100644 --- a/libagbsyscall/libagbsyscall.s +++ b/libagbsyscall/libagbsyscall.s @@ -1,12 +1,9 @@ .include "../constants/gba_constants.inc" .include "../asm/macros/function.inc" - - .syntax unified .text .set SOFT_RESET_DIRECT_BUF, 0x03007FFA - .set USER_STACK, 0x03007F00 .set RESET_EX_WRAM_FLAG, 0x1 .ifdef NO_GRANULAR_AGBSYSCALL @@ -109,7 +106,7 @@ SoundDriverVSyncOn: thumb_func_start Mod Mod: svc #6 - adds r0, r1, #0 + mov r0, r1 bx lr thumb_func_end Mod .endif @@ -148,7 +145,7 @@ HuffUnComp: .endif .ifdef L_SoftResetExram - thumb_func_start SoftResetExram + arm_func_start SoftResetExram SoftResetExram: ldr r3, =REG_IME movs r2, #0 @@ -156,14 +153,14 @@ SoftResetExram: ldr r3, =SOFT_RESET_DIRECT_BUF movs r2, #1 strb r2, [r3, #0] - subs r3, #SOFT_RESET_DIRECT_BUF - USER_STACK + subs r3, #SOFT_RESET_DIRECT_BUF - 0x3007f00 mov sp, r3 movs r2, #RESET_EX_WRAM_FLAG bics r0, r2 svc #1 svc #0 .pool - thumb_func_end SoftResetExram + arm_func_end SoftResetExram .endif .ifdef L_MusicPlayerFadeOut @@ -234,7 +231,7 @@ DivArm: thumb_func_start ModArm ModArm: svc #7 - adds r0, r1, #0 + mov r0, r1 bx lr thumb_func_end ModArm .endif @@ -274,7 +271,7 @@ Diff8bitUnFilterWram: .ifdef L_MultiBoot thumb_func_start MultiBoot MultiBoot: - movs r1, #1 + mov r1, #1 svc #37 bx lr thumb_func_end MultiBoot @@ -329,7 +326,7 @@ SoftResetRom: ldr r3, =SOFT_RESET_DIRECT_BUF movs r2, #0 strb r2, [r3, #0] - subs r3, #SOFT_RESET_DIRECT_BUF - USER_STACK + sub r3, #SOFT_RESET_DIRECT_BUF - 0x3007f00 mov sp, r3 svc #1 svc #0 @@ -416,7 +413,7 @@ SoftReset: ldr r3, =REG_IME movs r2, #0 strb r2, [r3, #0] - ldr r1, =USER_STACK + ldr r1, =0x3007f00 mov sp, r1 svc #1 svc #0 diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c index 42cc9aea3a..e4127ee090 100644 --- a/src/AgbRfu_LinkManager.c +++ b/src/AgbRfu_LinkManager.c @@ -352,7 +352,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID) { for (i = 0; i < RFU_CHILD_MAX; i++) { - if (bm_linkLossSlot & (1 << i)) + if ((bm_linkLossSlot >> i) & 1) { lman.linkRecoveryTimer.active |= (1 << i); lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max; @@ -396,7 +396,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID) bm_disconnectSlot = 0; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((lman.linkRecoveryTimer.active) & (1 << i) && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0) + if ((lman.linkRecoveryTimer.active >> i) & 1 && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0) { lman.linkRecoveryTimer.active &= ~(1 << i); bm_disconnectSlot |= (1 << i); @@ -918,7 +918,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) { lman.reserveDisconnectSlot_flag = 0; lman.acceptCount = 0; - lman.acceptSlot_flag = 0; + lman.acceptSlot_flag = 0;; lman.parent_child = MODE_NEUTRAL; rfu_LMAN_managerChangeAgbClockMaster(); if (reqCommandId == ID_STOP_MODE_REQ) diff --git a/src/agb_flash.c b/src/agb_flash.c index f63f84509e..6b9381c704 100644 --- a/src/agb_flash.c +++ b/src/agb_flash.c @@ -41,7 +41,7 @@ u16 ReadFlashId(void) u8 (*readFlash1)(u8 *); SetReadFlash1(readFlash1Buffer); - readFlash1 = (u8 (*)(u8 *))((uintptr_t)readFlash1Buffer + 1); + readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1); // Enter ID mode. FLASH_WRITE(0x5555, 0xAA); @@ -113,12 +113,12 @@ void SetReadFlash1(u16 *dest) u16 *src; u16 i; - PollFlashStatus = (u8 (*)(u8 *))((uintptr_t)dest + 1); + PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1); src = (u16 *)ReadFlash1; - src = (u16 *)((uintptr_t)src ^ 1); + src = (u16 *)((s32)src ^ 1); - i = ((uintptr_t)SetReadFlash1 - (uintptr_t)ReadFlash1) >> 1; + i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1; while (i != 0) { @@ -154,10 +154,10 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) } funcSrc = (vu16 *)ReadFlash_Core; - funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1); + funcSrc = (vu16 *)((s32)funcSrc ^ 1); funcDest = readFlash_Core_Buffer; - i = ((uintptr_t)ReadFlash - (uintptr_t)ReadFlash_Core) >> 1; + i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1; while (i != 0) { @@ -165,7 +165,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) i--; } - readFlash_Core = (void (*)(vu8 *, u8 *, u32))((uintptr_t)readFlash_Core_Buffer + 1); + readFlash_Core = (void (*)(vu8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1); src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; @@ -202,10 +202,10 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src) } funcSrc = (vu16 *)VerifyFlashSector_Core; - funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1); + funcSrc = (vu16 *)((s32)funcSrc ^ 1); funcDest = verifyFlashSector_Core_Buffer; - i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1); + i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; while (i != 0) { @@ -213,7 +213,7 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src) i--; } - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1); + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); size = gFlash->sector.size; @@ -239,10 +239,10 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; funcSrc = (vu16 *)VerifyFlashSector_Core; - funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1); + funcSrc = (vu16 *)((s32)funcSrc ^ 1); funcDest = verifyFlashSector_Core_Buffer; - i = ((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1; + i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; while (i != 0) { @@ -250,7 +250,7 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) i--; } - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1); + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); diff --git a/src/apprentice.c b/src/apprentice.c index 3dc33cad49..7f493a1363 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -1297,13 +1297,13 @@ const u8 *GetApprenticeNameInLanguage(u32 apprenticeId, s32 language) // Functionally unused static void Task_SwitchToFollowupFuncAfterButtonPress(u8 taskId) { - if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) SwitchTaskToFollowupFunc(taskId); } static void Task_ExecuteFuncAfterButtonPress(u8 taskId) { - if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) { gApprenticeFunc = (void*)(u32)(((u16)gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 16))); gApprenticeFunc(); diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 032e5f407f..748e4729ae 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1299,7 +1299,7 @@ static void Cmd_count_usable_party_mons(void) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - u8 position; + u32 position; battlerOnField1 = gBattlerPartyIndexes[battlerId]; position = GetBattlerPosition(battlerId) ^ BIT_FLANK; battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)]; diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index 5e8a8b2a76..ea3df80986 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -372,11 +372,14 @@ static void AnimTranslateStinger(struct Sprite *sprite) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } - else if (GetBattlerSide(gBattleAnimAttacker)) + else { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + if (GetBattlerSide(gBattleAnimAttacker)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } } if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) @@ -384,8 +387,13 @@ static void AnimTranslateStinger(struct Sprite *sprite) if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT) { - gBattleAnimArgs[2] *= -1; - gBattleAnimArgs[0] *= -1; + s16 temp1, temp2; + + temp1 = gBattleAnimArgs[2]; + gBattleAnimArgs[2] = -temp1; + + temp2 = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -temp2; } } @@ -440,24 +448,28 @@ static void AnimMissileArc_Step(struct Sprite *sprite) else { s16 tempData[8]; - s16 xpos, ypos; + u16 *data = sprite->data; + u16 x1 = sprite->pos1.x; + s16 x2 = sprite->pos2.x; + u16 y1 = sprite->pos1.y; + s16 y2 = sprite->pos2.y; int i; for (i = 0; i < 8; i++) - tempData[i] = sprite->data[i]; + tempData[i] = data[i]; - xpos = sprite->pos1.x + sprite->pos2.x; - ypos = sprite->pos1.y + sprite->pos2.y; + x2 += x1; + y2 += y1; if (!TranslateAnimHorizontalArc(sprite)) { - u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - xpos, //Isn't this zero lol - sprite->pos1.y + sprite->pos2.y - ypos); + u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2, + sprite->pos1.y + sprite->pos2.y - y2); rotation += 0xC000; TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); for (i = 0; i < 8; i++) - sprite->data[i] = tempData[i]; + data[i] = tempData[i]; } } } diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c index 7253b52472..faa5884a59 100644 --- a/src/battle_anim_dark.c +++ b/src/battle_anim_dark.c @@ -635,6 +635,8 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId) static void AnimTask_MoveTargetMementoShadow_Step(u8 taskId) { + u8 pos; + u16 i; struct Task *task = &gTasks[taskId]; switch (task->data[0]) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index c8d43e12e0..04bab2f851 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3967,25 +3967,24 @@ static void AnimProtect(struct Sprite* sprite) static void AnimProtect_Step(struct Sprite *sprite) { - int i, savedPal; + int i, id, savedPal; sprite->data[5] += 96; sprite->pos2.x = -(sprite->data[5] >> 8); if (++sprite->data[1] > 1) { - int id; sprite->data[1] = 0; savedPal = gPlttBufferFaded[sprite->data[2] + 1]; i = 0; - do + while (i < 6) { id = sprite->data[2] + ++i; gPlttBufferFaded[id] = gPlttBufferFaded[id + 1]; - } while (i < 6); + } gPlttBufferFaded[sprite->data[2] + 7] = savedPal; } - if (sprite->data[7] > 6 && sprite->data[0] > 0 && ++sprite->data[6] > 1) + if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1) { sprite->data[6] = 0; sprite->data[7] -= 1; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 58d3351975..bad46f1445 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -5003,11 +5003,11 @@ void AnimTask_GetReturnPowerLevel(u8 taskId) void AnimTask_SnatchOpposingMonMove(u8 taskId) { u8 spriteId, spriteId2; - u32 personality; - u32 otId; + int personality; + int otId; u16 species; u8 subpriority; - bool8 isBackPic; + u8 isBackPic; s16 x; switch (gTasks[taskId].data[0]) @@ -5035,34 +5035,37 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) otId = gContestResources->moveAnim->otId; species = gContestResources->moveAnim->species; subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker); - isBackPic = FALSE; + isBackPic = 0; x = -32; } - else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) - { - personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); - otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); - if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - else - species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; - - subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1; - isBackPic = FALSE; - x = 272; - } else { - personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); - otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); - if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - else - species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); + if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + else + species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; - subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1; - isBackPic = TRUE; - x = -32; + subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1; + isBackPic = 0; + x = 272; + } + else + { + personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); + if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + else + species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; + + subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1; + isBackPic = 1; + x = -32; + } } spriteId2 = sub_80A8394(species, isBackPic, 0, x, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, 0); @@ -5089,7 +5092,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) if (x < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X)) { gTasks[taskId].data[14]++; - gBattleAnimArgs[7] = -1; + gBattleAnimArgs[7] = 0xFFFF; } } else @@ -5097,7 +5100,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) if (x > GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X)) { gTasks[taskId].data[14]++; - gBattleAnimArgs[7] = -1; + gBattleAnimArgs[7] = 0xFFFF; } } } @@ -5135,7 +5138,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) gSprites[spriteId].pos2.x = 0; } - gTasks[taskId].data[1] &= 0xFF; + gTasks[taskId].data[1] = (u8)gTasks[taskId].data[1]; if (gSprites[spriteId].pos2.x == 0) DestroyAnimVisualTask(taskId); break; diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index fe94dc9a21..5179c13648 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -380,18 +380,21 @@ static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId) { u8 data2; u16 temp; + int i, base; if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1]) { - int i, base; gTasks[taskId].data[10] = 0; data2 = gTasks[taskId].data[2]; temp = gPlttBufferFaded[16 * data2 + 0x108]; i = 7; base = data2 * 16; - for (; i > 0; --i) + do + { gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i]; + i--; + } while (i > 0); gPlttBufferFaded[base + 0x101] = temp; } @@ -533,16 +536,17 @@ static void AnimFlyBallAttack_Step(struct Sprite *sprite) void DestroyAnimSpriteAfterTimer(struct Sprite *sprite) { - if (sprite->data[0]-- > 0) - return; - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) + if (sprite->data[0]-- <= 0) { - FreeOamMatrix(sprite->oam.matrixNum); - sprite->oam.affineMode = ST_OAM_AFFINE_OFF; - } + if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + } - DestroySprite(sprite); - gAnimVisualTaskCount--; + DestroySprite(sprite); + gAnimVisualTaskCount--; + } } struct FeatherDanceData @@ -563,41 +567,35 @@ struct FeatherDanceData u16 unkE_1:15; }; -#define ANIM_SWITCH(sprite) \ - { \ - (sprite)->hFlip ^= 1; \ - (sprite)->animNum = (sprite)->hFlip; \ - (sprite)->animBeginning = TRUE; \ - (sprite)->animEnded = FALSE; \ - } - static void AnimFallingFeather(struct Sprite *sprite) { - u8 battler, sinIndex; - u32 matrixNum; - s16 sinVal; + u8 battler, matrixNum, sinIndex; + s16 spriteCoord, sinVal; struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; - battler = (gBattleAnimArgs[7] & 0x100) ? gBattleAnimAttacker : gBattleAnimTarget; + if (gBattleAnimArgs[7] & 0x100) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; if (GetBattlerSide(battler) == B_SIDE_PLAYER) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_HEIGHT) + gBattleAnimArgs[0]; - sinVal = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH); - sprite->pos1.y = sinVal + gBattleAnimArgs[1]; + spriteCoord = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH); + sprite->pos1.y = spriteCoord + gBattleAnimArgs[1]; - data->unk8 = (u16)(sprite->pos1.y) << 8; - data->unkE_1 = (u16)(sinVal + gBattleAnimArgs[6]); + data->unk8 = sprite->pos1.y << 8; + data->unkE_1 = spriteCoord + gBattleAnimArgs[6]; data->unk0_0c = 1; - data->unk2 = (u16)(gBattleAnimArgs[2] & 0xFF); - data->unkA = (u16)gBattleAnimArgs[2] >> 8; + data->unk2 = gBattleAnimArgs[2] & 0xFF; + data->unkA = (gBattleAnimArgs[2] >> 8) & 0xFF; data->unk4 = gBattleAnimArgs[3]; - data->unk6 = (u16)gBattleAnimArgs[4]; - *(u16 *)(data->unkC) = (u16)gBattleAnimArgs[5]; + data->unk6 = gBattleAnimArgs[4]; + *(u16*)(data->unkC) = gBattleAnimArgs[5]; - if (data->unk2 >= 64 && data->unk2 < 192) + if (data->unk2 >= 64 && data->unk2 <= 191) { if (!IsContest()) sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; @@ -608,7 +606,11 @@ static void AnimFallingFeather(struct Sprite *sprite) if (!(data->unk4 & 0x8000)) { - ANIM_SWITCH(sprite); + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + + sprite->animBeginning = 1; + sprite->animEnded = 0; } } else @@ -618,28 +620,42 @@ static void AnimFallingFeather(struct Sprite *sprite) if (data->unk4 & 0x8000) { - ANIM_SWITCH(sprite); + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + + sprite->animBeginning = 1; + sprite->animEnded = 0; } } - data->unk0_1 = data->unk2 / 64; - sprite->pos2.x = (gSineTable[data->unk2] * (s32)data->unkC[0]) >> 8; + data->unk0_1 = data->unk2 >> 6; + sprite->pos2.x = (gSineTable[data->unk2] * data->unkC[0]) >> 8; matrixNum = sprite->oam.matrixNum; sinIndex = (-sprite->pos2.x >> 1) + data->unkA; sinVal = gSineTable[sinIndex]; gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; - gOamMatrices[matrixNum].b = sinVal; - gOamMatrices[matrixNum].c = -sinVal; + // The comparison below is completely pointless. 'sprite' is sure to be a valid pointer and + // both the 'if' and 'else' parts are exactly the same. + // The only reason for this is making sure the compiler generates the exact ASM. + if (sprite) + { + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; + } + else + { + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; + } sprite->callback = sub_810E520; } static void sub_810E520(struct Sprite *sprite) { - u8 sinIndex; - u32 matrixNum; + u8 matrixNum, sinIndex; s16 sinVal = 0; struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; if (data->unk0_0a) @@ -649,226 +665,242 @@ static void sub_810E520(struct Sprite *sprite) data->unk0_0a = 0; data->unk1 = 0; } - return; } - - switch (data->unk2 / 64) - { - case 0: - if ((u8)data->unk0_1 == 1) // this must be cast to u8 - { - data->unk0_0d = 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if ((u8)data->unk0_1 == 3) - { - data->unk0_0b ^= 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - ANIM_SWITCH(sprite); - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 0; - break; - case 1: - if ((u8)data->unk0_1 == 0) - { - data->unk0_0d = 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if ((u8)data->unk0_1 == 2) - { - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - ANIM_SWITCH(sprite); - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 1; - break; - case 2: - if ((u8)data->unk0_1 == 3) - { - data->unk0_0d = 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if ((u8)data->unk0_1 == 1) - { - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - ANIM_SWITCH(sprite); - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 2; - break; - case 3: - if ((u8)data->unk0_1 == 2) - { - data->unk0_0d = 1; - } - else if ((u8)data->unk0_1 == 0) - { - data->unk0_0b ^= 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - ANIM_SWITCH(sprite); - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 3; - break; - } - - sprite->pos2.x = ((s32)(data->unkC[data->unk0_0b]) * gSineTable[data->unk2]) >> 8; - matrixNum = sprite->oam.matrixNum; - - sinIndex = ((-sprite->pos2.x >> 1) + data->unkA); - sinVal = gSineTable[sinIndex]; - - gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; - gOamMatrices[matrixNum].b = sinVal; - gOamMatrices[matrixNum].c = -sinVal; - - data->unk8 += data->unk6; - sprite->pos1.y = (s16)(data->unk8 >> 8); - if (data->unk4 & 0x8000) - data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF; else - data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF; - - if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1) { - sprite->data[0] = 0; - sprite->callback = DestroyAnimSpriteAfterTimer; + switch (data->unk2 / 64) + { + case 0: + if (data->unk0_1 << 24 >> 24 == 1) // the shifts have to be here + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_1 << 24 >> 24 == 3) + { + data->unk0_0b ^= 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + data->unk2; + } + data->unk0_1 = 0; + break; + case 1: + if (data->unk0_1 << 24 >> 24 == 0) + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_1 << 24 >> 24 == 2) + { + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 1; + break; + case 2: + if (data->unk0_1 << 24 >> 24 == 3) + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_1 << 24 >> 24 == 1) + { + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 2; + break; + case 3: + if (data->unk0_1 << 24 >> 24 == 2) + { + data->unk0_0d = 1; + } + else if (data->unk0_1 << 24 >> 24 == 0) + { + data->unk0_0b ^= 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 3; + break; + } + #ifndef NONMATCHING + asm("":::"r8"); + #endif + sprite->pos2.x = (data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8; + matrixNum = sprite->oam.matrixNum; + + sinIndex = (-sprite->pos2.x >> 1) + data->unkA; + sinVal = gSineTable[sinIndex]; + + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; + + data->unk8 += data->unk6; + sprite->pos1.y = data->unk8 >> 8; + if (data->unk4 & 0x8000) + data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF; + else + data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF; + + if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1) + { + sprite->data[0] = 0; + sprite->callback = DestroyAnimSpriteAfterTimer; + } } } @@ -912,20 +944,20 @@ static void sub_810EB40(struct Sprite *sprite) { sprite->pos2.x += sprite->data[1] >> 8; - if (sprite->data[0]++ == 5) + if (++sprite->data[0] == 6) { sprite->data[0] = 0; sprite->pos2.x = 0; StartSpriteAnim(sprite, 0); } - if (sprite->data[7]-- == 0) + if (--sprite->data[7] == -1) DestroyAnimSprite(sprite); } void AnimTask_DrillPeckHitSplats(u8 task) { - if ((gTasks[task].data[0] % 32) == 0) + if (!(gTasks[task].data[0] % 32)) { gAnimVisualTaskCount++; @@ -1028,8 +1060,8 @@ static void AnimDiveBall_Step2(struct Sprite *sprite) static void AnimDiveWaterSplash(struct Sprite *sprite) { - u8 matrixNum; - s32 t1, t2; + u32 matrixNum; + int t1, t2; switch (sprite->data[0]) { @@ -1051,7 +1083,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) sprite->data[0]++; break; case 1: - if (sprite->data[2] < 12) + if (sprite->data[2] <= 11) sprite->data[1] -= 40; else sprite->data[1] += 40; @@ -1059,7 +1091,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) sprite->data[2]++; TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0); - + matrixNum = sprite->oam.matrixNum; t1 = 15616; @@ -1083,8 +1115,8 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) // Launches a water droplet away from the specified battler. Used by Astonish and Dive static void AnimSprayWaterDroplet(struct Sprite *sprite) { - const u16 v1 = Random2() & 0x1ff; - const u16 v2 = Random2() & 0x07f; + int v1 = 0x1ff & Random2(); + int v2 = 0x7f & Random2(); if (v1 % 2) sprite->data[0] = 736 + v1; @@ -1128,13 +1160,13 @@ static void AnimSprayWaterDroplet_Step(struct Sprite *sprite) sprite->pos2.y -= sprite->data[1] >> 8; } - sprite->data[0] -= 0; // Needed to Match + sprite->data[0] = sprite->data[0]; sprite->data[1] -= 32; if (sprite->data[0] < 0) sprite->data[0] = 0; - if (sprite->data[3]++ == 30) + if (++sprite->data[3] == 31) DestroyAnimSprite(sprite); } @@ -1180,7 +1212,7 @@ static void AnimSkyAttackBird(struct Sprite *sprite) sprite->data[7] = ((posy - sprite->pos1.y) << 4) / 12; rotation = ArcTan2Neg(posx - sprite->pos1.x, posy - sprite->pos1.y); - rotation -= 16384; + rotation += 49152; TrySetSpriteRotScale(sprite, 1, 0x100, 0x100, rotation); @@ -1204,12 +1236,12 @@ void unref_sub_810F184(u8 taskId) { if (gBattleAnimArgs[0] == 0) { - const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); gSprites[spriteId].invisible = TRUE; } else { - const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); gSprites[spriteId].invisible = FALSE; } DestroyAnimVisualTask(taskId); diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index 3f451998c4..0a07b9070b 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -1101,7 +1101,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId) break; case 1: task->data[1] -= 4; - task->data[2] = 256 - (gSineTable[task->data[1]] >> 1); + task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);; SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0); SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]); if (task->data[1] == 0) diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 9790cf9eac..af48ac3b9c 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -569,7 +569,7 @@ static void sub_81172EC(u8 taskId) if (gTasks[taskId].data[12] == 0) { sub_80A477C(0); - gTasks[taskId].data[15]++; + gTasks[taskId].data[15]++;; } } break; diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 12f37dbba2..5810b6bdc9 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -52,7 +52,7 @@ static void CreateWaterSpoutLaunchDroplets(struct Task*, u8); static void CreateWaterSpoutRainDroplet(struct Task*, u8); static void AnimTask_WaterSport_Step(u8); static void CreateWaterSportDroplet(struct Task*); -static void CreateWaterPulseRingBubbles(struct Sprite*, s32, s32); +static void CreateWaterPulseRingBubbles(struct Sprite*, int, int); // Both unused const u8 gUnknown_8593C80[] = INCBIN_U8("graphics/unknown/unknown_593C80.4bpp"); @@ -624,24 +624,98 @@ void AnimTask_RotateAuroraRingColors(u8 taskId) gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step; } +#ifdef NONMATCHING static void AnimTask_RotateAuroraRingColors_Step(u8 taskId) { int i; u16 palIndex; + u16 *palPtr1; + u16 *palPtr2; + u16 rgbBuffer; if (++gTasks[taskId].data[10] == 3) { - u16 tempPlt; gTasks[taskId].data[10] = 0; palIndex = gTasks[taskId].data[2] + 1; - tempPlt = gPlttBufferFaded[palIndex]; - for (i = 1; i < 8; i++) - gPlttBufferFaded[palIndex + i - 1] = gPlttBufferFaded[palIndex + i]; - gPlttBufferFaded[palIndex + 7] = tempPlt; + palPtr1 = &gPlttBufferFaded[palIndex]; + rgbBuffer = *palPtr1; + palPtr2 = &palPtr1[1]; + for (i = 0; i < 7; i++) + palPtr1[i] = palPtr2[i]; + gPlttBufferFaded[palIndex + 7] = rgbBuffer; } if (++gTasks[taskId].data[11] == gTasks[taskId].data[0]) DestroyAnimVisualTask(taskId); } +#else +NAKED +static void AnimTask_RotateAuroraRingColors_Step(u8 taskId) +{ + asm_unified("push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldr r1, =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r2, r0, r1\n\ + ldrh r0, [r2, 0x1C]\n\ + adds r0, 0x1\n\ + strh r0, [r2, 0x1C]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + mov r12, r1\n\ + cmp r0, 0x3\n\ + bne _081075BE\n\ + movs r0, 0\n\ + strh r0, [r2, 0x1C]\n\ + ldrh r0, [r2, 0xC]\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + ldr r1, =gPlttBufferFaded\n\ + lsls r0, r5, 1\n\ + adds r0, r1\n\ + ldrh r6, [r0]\n\ + adds r7, r1, 0\n\ + adds r3, r0, 0x2\n\ + movs r1, 0x6\n\ + adds r2, r0, 0\n\ +_081075A8:\n\ + ldrh r0, [r3]\n\ + strh r0, [r2]\n\ + adds r3, 0x2\n\ + adds r2, 0x2\n\ + subs r1, 0x1\n\ + cmp r1, 0\n\ + bge _081075A8\n\ + adds r0, r5, 0x7\n\ + lsls r0, 1\n\ + adds r0, r7\n\ + strh r6, [r0]\n\ +_081075BE:\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + add r0, r12\n\ + ldrh r1, [r0, 0x1E]\n\ + adds r1, 0x1\n\ + strh r1, [r0, 0x1E]\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + movs r2, 0x8\n\ + ldrsh r0, [r0, r2]\n\ + cmp r1, r0\n\ + bne _081075DE\n\ + adds r0, r4, 0\n\ + bl DestroyAnimVisualTask\n\ +_081075DE:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n"); +} +#endif // For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam) static void AnimToTargetInSinWave(struct Sprite *sprite) @@ -748,7 +822,6 @@ static void AnimHydroCannonBeam(struct Sprite *sprite) if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT) gBattleAnimArgs[0] *= -1; } - if ((gBattleAnimArgs[5] & 0xFF00) == 0) animType = TRUE; else @@ -794,25 +867,21 @@ static void AnimSmallBubblePair_Step(struct Sprite *sprite) sprite->pos2.x = Sin(sprite->data[0], 4); sprite->data[1] += 48; sprite->pos2.y = -(sprite->data[1] >> 8); - if (sprite->data[7]-- == 0) + if (--sprite->data[7] == -1) DestroyAnimSprite(sprite); } +#ifdef NONMATCHING void AnimTask_CreateSurfWave(u8 taskId) { struct BattleAnimBgData animBg; u8 taskId2; - u16 *x, *y; //These pointers are needed to match - x = &gBattle_BG1_X; - y = &gBattle_BG1_Y; - - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1); - SetGpuReg(REG_OFFSET_BLDALPHA, (16 << 8)); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1); sub_80A6B30(&animBg); - if (!IsContest()) { SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); @@ -837,30 +906,30 @@ void AnimTask_CreateSurfWave(u8 taskId) gTasks[taskId2].data[2] = 0x1000; if (IsContest()) { - *x = -80; - *y = -48; + gBattle_BG1_X = -80; + gBattle_BG1_Y = -48; gTasks[taskId].data[0] = 2; gTasks[taskId].data[1] = 1; gTasks[taskId2].data[3] = 0; } else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) { - *x = -224; - *y = 256; + gBattle_BG1_X = -224; + gBattle_BG1_Y = 256; gTasks[taskId].data[0] = 2; gTasks[taskId].data[1] = -1; gTasks[taskId2].data[3] = 1; } else { - *x = 0; - *y = -48; + gBattle_BG1_X = 0; + gBattle_BG1_Y = -48; gTasks[taskId].data[0] = -2; gTasks[taskId].data[1] = 1; gTasks[taskId2].data[3] = 0; } - SetGpuReg(REG_OFFSET_BG1HOFS, *x); - SetGpuReg(REG_OFFSET_BG1VOFS, *y); + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); if (gTasks[taskId2].data[3] == 0) { gTasks[taskId2].data[4] = 48; @@ -874,16 +943,245 @@ void AnimTask_CreateSurfWave(u8 taskId) gTasks[taskId].data[6] = 1; gTasks[taskId].func = AnimTask_CreateSurfWave_Step1; } +#else +NAKED +void AnimTask_CreateSurfWave(u8 taskId) +{ + asm_unified("push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x10\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + ldr r1, =0x00003f42\n\ + movs r0, 0x50\n\ + bl SetGpuReg\n\ + movs r1, 0x80\n\ + lsls r1, 5\n\ + movs r0, 0x52\n\ + bl SetGpuReg\n\ + movs r0, 0x1\n\ + movs r1, 0x4\n\ + movs r2, 0x1\n\ + bl SetAnimBgAttribute\n\ + movs r0, 0x1\n\ + movs r1, 0\n\ + movs r2, 0x1\n\ + bl SetAnimBgAttribute\n\ + mov r0, sp\n\ + bl sub_80A6B30\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _081079E0\n\ + movs r0, 0x1\n\ + movs r1, 0x3\n\ + movs r2, 0x1\n\ + bl SetAnimBgAttribute\n\ + ldr r0, =gBattleAnimAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _081079D0\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x9]\n\ + ldr r1, =gBattleAnimBgTilemap_SurfOpponent\n\ + bl AnimLoadCompressedBgTilemap\n\ + b _081079EA\n\ + .pool\n\ +_081079D0:\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x9]\n\ + ldr r1, =gBattleAnimBgTilemap_SurfPlayer\n\ + bl AnimLoadCompressedBgTilemap\n\ + b _081079EA\n\ + .pool\n\ +_081079E0:\n\ + ldr r1, =gBattleAnimBgTilemap_SurfContest\n\ + mov r0, sp\n\ + movs r2, 0x1\n\ + bl AnimLoadCompressedBgTilemapHandleContest\n\ +_081079EA:\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x9]\n\ + ldr r1, =gBattleAnimBgImage_Surf\n\ + mov r2, sp\n\ + ldrh r2, [r2, 0xA]\n\ + bl AnimLoadCompressedBgGfx\n\ + ldr r0, =gBattleAnimArgs\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + cmp r0, 0\n\ + bne _08107A24\n\ + ldr r0, =gBattleAnimBgPalette_Surf\n\ + mov r1, sp\n\ + ldrb r1, [r1, 0x8]\n\ + lsls r1, 4\n\ + movs r2, 0x20\n\ + bl LoadCompressedPalette\n\ + b _08107A32\n\ + .pool\n\ +_08107A24:\n\ + ldr r0, =gBattleAnimBackgroundImageMuddyWater_Pal\n\ + mov r1, sp\n\ + ldrb r1, [r1, 0x8]\n\ + lsls r1, 4\n\ + movs r2, 0x20\n\ + bl LoadCompressedPalette\n\ +_08107A32:\n\ + ldr r0, =AnimTask_SurfWaveScanlineEffect\n\ + ldr r4, =gTasks\n\ + mov r2, r10\n\ + lsls r5, r2, 2\n\ + adds r1, r5, r2\n\ + lsls r1, 3\n\ + adds r6, r1, r4\n\ + ldrb r1, [r6, 0x7]\n\ + adds r1, 0x1\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + bl CreateTask\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + movs r0, 0\n\ + mov r9, r0\n\ + mov r1, r8\n\ + strh r1, [r6, 0x26]\n\ + mov r2, r8\n\ + lsls r0, r2, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r7, r0, r4\n\ + mov r0, r9\n\ + strh r0, [r7, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + strh r0, [r7, 0xA]\n\ + strh r0, [r7, 0xC]\n\ + bl IsContest\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + beq _08107AB4\n\ + ldr r1, =0x0000ffb0\n\ + adds r0, r1, 0\n\ + ldr r2, =gBattle_BG1_X\n\ + strh r0, [r2]\n\ + adds r1, 0x20\n\ + adds r0, r1, 0\n\ + ldr r2, =gBattle_BG1_Y\n\ + strh r0, [r2]\n\ + movs r0, 0x2\n\ + strh r0, [r6, 0x8]\n\ + movs r0, 0x1\n\ + strh r0, [r6, 0xA]\n\ + mov r0, r9\n\ + strh r0, [r7, 0xE]\n\ + b _08107B0E\n\ + .pool\n\ +_08107AB4:\n\ + ldr r0, =gBattleAnimAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSide\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x1\n\ + bne _08107AF8\n\ + ldr r2, =0x0000ff20\n\ + adds r0, r2, 0\n\ + ldr r2, =gBattle_BG1_X\n\ + strh r0, [r2]\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + adds r0, r2, 0\n\ + ldr r2, =gBattle_BG1_Y\n\ + strh r0, [r2]\n\ + movs r0, 0x2\n\ + strh r0, [r6, 0x8]\n\ + ldr r0, =0x0000ffff\n\ + strh r0, [r6, 0xA]\n\ + strh r1, [r7, 0xE]\n\ + b _08107B0E\n\ + .pool\n\ +_08107AF8:\n\ + ldr r0, =gBattle_BG1_X\n\ + strh r4, [r0]\n\ + ldr r1, =0x0000ffd0\n\ + adds r0, r1, 0\n\ + ldr r2, =gBattle_BG1_Y\n\ + strh r0, [r2]\n\ + ldr r0, =0x0000fffe\n\ + strh r0, [r6, 0x8]\n\ + movs r0, 0x1\n\ + strh r0, [r6, 0xA]\n\ + strh r4, [r7, 0xE]\n\ +_08107B0E:\n\ + ldr r0, =gBattle_BG1_X\n\ + ldrh r1, [r0]\n\ + movs r0, 0x14\n\ + bl SetGpuReg\n\ + ldr r2, =gBattle_BG1_Y\n\ + ldrh r1, [r2]\n\ + movs r0, 0x16\n\ + bl SetGpuReg\n\ + ldr r1, =gTasks\n\ + mov r2, r8\n\ + lsls r0, r2, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r1, r0, r1\n\ + movs r2, 0xE\n\ + ldrsh r0, [r1, r2]\n\ + cmp r0, 0\n\ + bne _08107B54\n\ + movs r0, 0x30\n\ + strh r0, [r1, 0x10]\n\ + movs r0, 0x70\n\ + b _08107B58\n\ + .pool\n\ +_08107B54:\n\ + movs r0, 0\n\ + strh r0, [r1, 0x10]\n\ +_08107B58:\n\ + strh r0, [r1, 0x12]\n\ + ldr r1, =gTasks\n\ + mov r2, r10\n\ + adds r0, r5, r2\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x14]\n\ + ldr r1, =AnimTask_CreateSurfWave_Step1\n\ + str r1, [r0]\n\ + add sp, 0x10\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n"); +} +#endif +#ifdef NONMATCHING static void AnimTask_CreateSurfWave_Step1(u8 taskId) { - u16 rgbBuffer; - u8 i; - u16 *BGptrX, *BGptrY; struct BattleAnimBgData animBg; - - BGptrX = &gBattle_BG1_X; - BGptrY = &gBattle_BG1_Y; + u8 i; + u16 rgbBuffer; + u16 *BGptrX = &gBattle_BG1_X; + u16 *BGptrY = &gBattle_BG1_Y; + s16 unkUse; + u32 palOffset; + u16 palNum; *BGptrX += gTasks[taskId].data[0]; *BGptrY += gTasks[taskId].data[1]; @@ -891,26 +1189,29 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) gTasks[taskId].data[2] += gTasks[taskId].data[1]; if (++gTasks[taskId].data[5] == 4) { - rgbBuffer = gPlttBufferFaded[16 * animBg.paletteId + 7]; - for (i = 6; i != 0; i--) // i > 0 generates the exact same code in this context + rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7]; + for (i = 6; i != 0; i--) { - gPlttBufferFaded[16 * animBg.paletteId + 1 + i] = gPlttBufferFaded[16 * animBg.paletteId + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason + palNum = animBg.paletteId * 16; + palOffset = 1 + i; + gPlttBufferFaded[palNum + palOffset] = gPlttBufferFaded[palNum + palOffset - 1]; } - gPlttBufferFaded[16 * animBg.paletteId + 1] = rgbBuffer; + gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer; gTasks[taskId].data[5] = 0; } if (++gTasks[taskId].data[6] > 1) { gTasks[taskId].data[6] = 0; - if (++gTasks[taskId].data[3] < 14) + unkUse = ++gTasks[taskId].data[3]; + if (unkUse <= 13) { - gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[3]) | ((16 - gTasks[taskId].data[3]) << 8)); + gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256); gTasks[taskId].data[4]++; } if (gTasks[taskId].data[3] > 54) { - gTasks[taskId].data[4]--; - gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[4]) | ((16 - gTasks[taskId].data[4]) << 8)); + unkUse = --gTasks[taskId].data[4]; + gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256); } } if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F)) @@ -919,7 +1220,167 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) gTasks[taskId].func = AnimTask_CreateSurfWave_Step2; } } - +#else +NAKED +static void AnimTask_CreateSurfWave_Step1(u8 taskId) +{ + asm_unified("push {r4-r7,lr}\n\ + sub sp, 0x10\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r1, =gBattle_BG1_X\n\ + ldr r2, =gBattle_BG1_Y\n\ + ldr r0, =gTasks\n\ + lsls r4, r5, 2\n\ + adds r4, r5\n\ + lsls r4, 3\n\ + adds r4, r0\n\ + ldrh r0, [r4, 0x8]\n\ + ldrh r3, [r1]\n\ + adds r0, r3\n\ + strh r0, [r1]\n\ + ldrh r0, [r4, 0xA]\n\ + ldrh r1, [r2]\n\ + adds r0, r1\n\ + strh r0, [r2]\n\ + mov r0, sp\n\ + bl sub_80A6B30\n\ + ldrh r0, [r4, 0xA]\n\ + ldrh r3, [r4, 0xC]\n\ + adds r0, r3\n\ + strh r0, [r4, 0xC]\n\ + ldrh r0, [r4, 0x12]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x12]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x4\n\ + bne _08107C18\n\ + ldr r1, =gPlttBufferFaded\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 4\n\ + adds r0, 0x7\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r6, [r0]\n\ + movs r2, 0x6\n\ + adds r7, r1, 0\n\ + adds r3, r7, 0\n\ + mov r4, sp\n\ +_08107BDE:\n\ + ldrb r0, [r4, 0x8]\n\ + lsls r0, 4\n\ + adds r1, r2, 0x1\n\ + adds r0, r1\n\ + lsls r1, r0, 1\n\ + adds r1, r3\n\ + subs r0, 0x1\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + subs r0, r2, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r2, 0\n\ + bne _08107BDE\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 4\n\ + adds r0, 0x1\n\ + lsls r0, 1\n\ + adds r0, r7\n\ + strh r6, [r0]\n\ + ldr r1, =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + strh r2, [r0, 0x12]\n\ +_08107C18:\n\ + ldr r1, =gTasks\n\ + lsls r2, r5, 2\n\ + adds r0, r2, r5\n\ + lsls r0, 3\n\ + adds r3, r0, r1\n\ + ldrh r0, [r3, 0x14]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x14]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + adds r4, r1, 0\n\ + adds r6, r2, 0\n\ + cmp r0, 0x1\n\ + ble _08107C86\n\ + movs r0, 0\n\ + strh r0, [r3, 0x14]\n\ + ldrh r0, [r3, 0xE]\n\ + adds r2, r0, 0x1\n\ + strh r2, [r3, 0xE]\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xD\n\ + bgt _08107C62\n\ + movs r1, 0x26\n\ + ldrsh r0, [r3, r1]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + adds r1, r4\n\ + movs r0, 0x10\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + orrs r2, r0\n\ + strh r2, [r1, 0xA]\n\ + ldrh r0, [r3, 0x10]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x10]\n\ +_08107C62:\n\ + movs r1, 0xE\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0x36\n\ + ble _08107C86\n\ + ldrh r2, [r3, 0x10]\n\ + subs r2, 0x1\n\ + strh r2, [r3, 0x10]\n\ + movs r1, 0x26\n\ + ldrsh r0, [r3, r1]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + adds r1, r4\n\ + movs r0, 0x10\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + orrs r2, r0\n\ + strh r2, [r1, 0xA]\n\ +_08107C86:\n\ + adds r0, r6, r5\n\ + lsls r0, 3\n\ + adds r2, r0, r4\n\ + movs r3, 0x26\n\ + ldrsh r1, [r2, r3]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r4\n\ + ldrh r0, [r0, 0xA]\n\ + movs r3, 0x1F\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + bne _08107CA8\n\ + strh r3, [r2, 0x8]\n\ + ldr r0, =AnimTask_CreateSurfWave_Step2\n\ + str r0, [r2]\n\ +_08107CA8:\n\ + add sp, 0x10\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n"); +} +#endif static void AnimTask_CreateSurfWave_Step2(u8 taskId) { @@ -1543,50 +2004,216 @@ static void AnimWaterPulseRing_Step(struct Sprite *sprite) sprite->data[0]++; } -static void CreateWaterPulseRingBubbles(struct Sprite *sprite, s32 xDiff, s32 yDiff) +#ifdef NONMATCHING +static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff) { - s16 combinedX, combinedY; - s16 i, something; - s16 unusedVar = 1; //unusedVar is needed to match - s16 somethingRandomX, somethingRandomY; + s16 something = sprite->data[0] / 2; + s16 combinedX = sprite->pos1.x + sprite->pos2.x; + s16 combinedY = sprite->pos1.y + sprite->pos2.y; + s16 randomSomethingY = yDiff + (Random2() % 10) - 5; + s16 randomSomethingX = -xDiff + (Random2() % 10) - 5; + s16 i; u8 spriteId; - something = sprite->data[0] / 2; - combinedX = sprite->pos1.x + sprite->pos2.x; - combinedY = sprite->pos1.y + sprite->pos2.y; - if (yDiff < 0) - unusedVar *= -1; //Needed to Match - somethingRandomY = yDiff + (Random2() % 10) - 5; - somethingRandomX = -xDiff + (Random2() % 10) - 5; - - for (i = 0; i < 1; i++) + for (i = 0; i <= 0; i++) { spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130); gSprites[spriteId].data[0] = 20; - gSprites[spriteId].data[1] = somethingRandomY; + gSprites[spriteId].data[1] = randomSomethingY; gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; - if (somethingRandomX < 0) - { - gSprites[spriteId].data[2] = -somethingRandomX; - } + if (randomSomethingX < 0) + gSprites[spriteId].data[2] = -randomSomethingX; else - { - gSprites[spriteId].data[2] = somethingRandomX; - } + gSprites[spriteId].data[2] = randomSomethingX; } - for (i = 0; i < 1; i++) + for (i = 0; i <= 0; i++) { spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130); gSprites[spriteId].data[0] = 20; - gSprites[spriteId].data[1] = somethingRandomY; + gSprites[spriteId].data[1] = randomSomethingY; gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; - if (somethingRandomX > 0) - { - gSprites[spriteId].data[2] = -somethingRandomX; - } + if (randomSomethingX > 0) + gSprites[spriteId].data[2] = -randomSomethingX; else - { - gSprites[spriteId].data[2] = somethingRandomX; - } + gSprites[spriteId].data[2] = randomSomethingX; } } +#else +NAKED +static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff) +{ + asm_unified("push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x18\n\ + adds r4, r1, 0\n\ + adds r5, r2, 0\n\ + movs r2, 0x2E\n\ + ldrsh r1, [r0, r2]\n\ + lsrs r2, r1, 31\n\ + adds r1, r2\n\ + lsls r1, 15\n\ + lsrs r1, 16\n\ + str r1, [sp]\n\ + ldrh r1, [r0, 0x24]\n\ + ldrh r3, [r0, 0x20]\n\ + adds r1, r3\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r8, r1\n\ + ldrh r1, [r0, 0x26]\n\ + ldrh r0, [r0, 0x22]\n\ + adds r1, r0\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r10, r1\n\ + bl Random2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + adds r0, r5, r0\n\ + subs r0, 0x5\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + bl Random2\n\ + negs r4, r4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + adds r4, r0\n\ + subs r4, 0x5\n\ + lsls r4, 16\n\ + lsrs r7, r4, 16\n\ + movs r6, 0\n\ + mov r0, r8\n\ + lsls r0, 16\n\ + mov r8, r0\n\ + mov r1, r10\n\ + lsls r1, 16\n\ + str r1, [sp, 0xC]\n\ + ldr r2, [sp]\n\ + lsls r2, 16\n\ + str r2, [sp, 0x10]\n\ + asrs r1, 16\n\ + lsls r0, r7, 16\n\ + asrs r5, r0, 16\n\ + str r0, [sp, 0x14]\n\ + negs r3, r5\n\ + str r3, [sp, 0x4]\n\ + asrs r0, r2, 16\n\ + adds r1, r0\n\ + lsls r1, 16\n\ + mov r10, r1\n\ +_08108DE2:\n\ + ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\ + mov r2, r8\n\ + asrs r1, r2, 16\n\ + mov r3, r10\n\ + asrs r2, r3, 16\n\ + movs r3, 0x82\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r1, =gSprites\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r4, r0, r1\n\ + movs r0, 0x14\n\ + strh r0, [r4, 0x2E]\n\ + mov r0, r9\n\ + strh r0, [r4, 0x30]\n\ + ldr r0, =gBattleAnimAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSpriteSubpriority\n\ + subs r0, 0x1\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + strb r0, [r1]\n\ + cmp r5, 0\n\ + bge _08108E30\n\ + mov r1, sp\n\ + ldrh r1, [r1, 0x4]\n\ + strh r1, [r4, 0x32]\n\ + b _08108E32\n\ + .pool\n\ +_08108E30:\n\ + strh r7, [r4, 0x32]\n\ +_08108E32:\n\ + lsls r0, r6, 16\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r0, r2\n\ + lsrs r6, r0, 16\n\ + cmp r0, 0\n\ + ble _08108DE2\n\ + movs r6, 0\n\ + ldr r3, [sp, 0xC]\n\ + asrs r1, r3, 16\n\ + ldr r0, [sp, 0x14]\n\ + asrs r5, r0, 16\n\ + negs r2, r5\n\ + str r2, [sp, 0x8]\n\ + ldr r3, [sp, 0x10]\n\ + asrs r0, r3, 16\n\ + subs r1, r0\n\ + lsls r1, 16\n\ + mov r10, r1\n\ +_08108E58:\n\ + ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\ + mov r2, r8\n\ + asrs r1, r2, 16\n\ + mov r3, r10\n\ + asrs r2, r3, 16\n\ + movs r3, 0x82\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r1, =gSprites\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r4, r0, r1\n\ + movs r0, 0x14\n\ + strh r0, [r4, 0x2E]\n\ + mov r0, r9\n\ + strh r0, [r4, 0x30]\n\ + ldr r0, =gBattleAnimAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSpriteSubpriority\n\ + subs r0, 0x1\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + strb r0, [r1]\n\ + cmp r5, 0\n\ + ble _08108EA8\n\ + mov r1, sp\n\ + ldrh r1, [r1, 0x8]\n\ + strh r1, [r4, 0x32]\n\ + b _08108EAA\n\ + .pool\n\ +_08108EA8:\n\ + strh r7, [r4, 0x32]\n\ +_08108EAA:\n\ + lsls r0, r6, 16\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r0, r2\n\ + lsrs r6, r0, 16\n\ + cmp r0, 0\n\ + ble _08108E58\n\ + add sp, 0x18\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n"); +} +#endif diff --git a/src/battle_bg.c b/src/battle_bg.c index 6a0e4c10cf..7c9b05b25c 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -1126,7 +1126,7 @@ void DrawBattleEntryBackground(void) if (gBattleTypeFlags & BATTLE_TYPE_LINK) { LZDecompressVram(gUnknown_08D778F0, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gVsLettersGfx, (void*)(OBJ_VRAM0)); + LZDecompressVram(gVsLettersGfx, (void*)(VRAM + 0x10000)); LoadCompressedPalette(gUnknown_08D77AE4, 0x60, 0x20); SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1); SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 7c34efd443..d8005e808c 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -240,12 +240,12 @@ static void HandleInputChooseAction(void) DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); - if (JOY_REPEAT(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + if (gMain.newAndRepeatedKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; else gPlayerDpadHoldFrames = 0; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); @@ -266,7 +266,7 @@ static void HandleInputChooseAction(void) } PlayerBufferExecCompleted(); } - else if (JOY_NEW(DPAD_LEFT)) + else if (gMain.newKeys & DPAD_LEFT) { if (gActionSelectionCursor[gActiveBattler] & 1) // if is B_ACTION_USE_ITEM or B_ACTION_RUN { @@ -276,7 +276,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (JOY_NEW(DPAD_RIGHT)) + else if (gMain.newKeys & DPAD_RIGHT) { if (!(gActionSelectionCursor[gActiveBattler] & 1)) // if is B_ACTION_USE_MOVE or B_ACTION_SWITCH { @@ -286,7 +286,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { if (gActionSelectionCursor[gActiveBattler] & 2) // if is B_ACTION_SWITCH or B_ACTION_RUN { @@ -296,7 +296,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (!(gActionSelectionCursor[gActiveBattler] & 2)) // if is B_ACTION_USE_MOVE or B_ACTION_USE_ITEM { @@ -306,7 +306,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) + else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT @@ -326,7 +326,7 @@ static void HandleInputChooseAction(void) PlayerBufferExecCompleted(); } } - else if (JOY_NEW(START_BUTTON)) + else if (gMain.newKeys & START_BUTTON) { SwapHpBarsWithHpText(); } @@ -359,12 +359,12 @@ static void HandleInputChooseTarget(void) } while (i < gBattlersCount); } - if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; else gPlayerDpadHoldFrames = 0; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; @@ -372,7 +372,7 @@ static void HandleInputChooseTarget(void) EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); PlayerBufferExecCompleted(); } - else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) + else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; @@ -381,7 +381,7 @@ static void HandleInputChooseTarget(void) DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); } - else if (JOY_NEW(DPAD_LEFT | DPAD_UP)) + else if (gMain.newKeys & (DPAD_LEFT | DPAD_UP)) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; @@ -423,7 +423,7 @@ static void HandleInputChooseTarget(void) } while (i == 0); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget; } - else if (JOY_NEW(DPAD_RIGHT | DPAD_DOWN)) + else if (gMain.newKeys & (DPAD_RIGHT | DPAD_DOWN)) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; @@ -472,12 +472,12 @@ static void HandleInputChooseMove(void) bool32 canSelectTarget = FALSE; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); - if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; else gPlayerDpadHoldFrames = 0; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { u8 moveTarget; @@ -539,13 +539,13 @@ static void HandleInputChooseMove(void) gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget; } } - else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) + else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(1, 10, 0xFFFF); PlayerBufferExecCompleted(); } - else if (JOY_NEW(DPAD_LEFT)) + else if (gMain.newKeys & DPAD_LEFT) { if (gMoveSelectionCursor[gActiveBattler] & 1) { @@ -557,7 +557,7 @@ static void HandleInputChooseMove(void) MoveSelectionDisplayMoveType(); } } - else if (JOY_NEW(DPAD_RIGHT)) + else if (gMain.newKeys & DPAD_RIGHT) { if (!(gMoveSelectionCursor[gActiveBattler] & 1) && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose) @@ -570,7 +570,7 @@ static void HandleInputChooseMove(void) MoveSelectionDisplayMoveType(); } } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { if (gMoveSelectionCursor[gActiveBattler] & 2) { @@ -582,7 +582,7 @@ static void HandleInputChooseMove(void) MoveSelectionDisplayMoveType(); } } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (!(gMoveSelectionCursor[gActiveBattler] & 2) && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose) @@ -595,7 +595,7 @@ static void HandleInputChooseMove(void) MoveSelectionDisplayMoveType(); } } - else if (JOY_NEW(SELECT_BUTTON)) + else if (gMain.newKeys & SELECT_BUTTON) { if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -617,26 +617,26 @@ u32 sub_8057FBC(void) // unused { u32 var = 0; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); var = 1; } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); gBattle_BG0_X = 0; gBattle_BG0_Y = 0x140; var = 0xFF; } - if (JOY_NEW(DPAD_LEFT) && gMoveSelectionCursor[gActiveBattler] & 1) + if (gMain.newKeys & DPAD_LEFT && gMoveSelectionCursor[gActiveBattler] & 1) { MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); gMoveSelectionCursor[gActiveBattler] ^= 1; PlaySE(SE_SELECT); MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); } - if (JOY_NEW(DPAD_RIGHT) && !(gMoveSelectionCursor[gActiveBattler] & 1) + if (gMain.newKeys & DPAD_RIGHT && !(gMoveSelectionCursor[gActiveBattler] & 1) && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose) { MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); @@ -644,14 +644,14 @@ u32 sub_8057FBC(void) // unused PlaySE(SE_SELECT); MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); } - if (JOY_NEW(DPAD_UP) && gMoveSelectionCursor[gActiveBattler] & 2) + if (gMain.newKeys & DPAD_UP && gMoveSelectionCursor[gActiveBattler] & 2) { MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); gMoveSelectionCursor[gActiveBattler] ^= 2; PlaySE(SE_SELECT); MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); } - if (JOY_NEW(DPAD_DOWN) && !(gMoveSelectionCursor[gActiveBattler] & 2) + if (gMain.newKeys & DPAD_DOWN && !(gMoveSelectionCursor[gActiveBattler] & 2) && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose) { MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); @@ -669,7 +669,7 @@ static void HandleMoveSwitching(void) struct ChooseMoveStruct moveStruct; u8 totalPPBonuses; - if (JOY_NEW(A_BUTTON | SELECT_BUTTON)) + if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON)) { PlaySE(SE_SELECT); @@ -763,7 +763,7 @@ static void HandleMoveSwitching(void) MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); } - else if (JOY_NEW(B_BUTTON | SELECT_BUTTON)) + else if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) { PlaySE(SE_SELECT); MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor); @@ -773,7 +773,7 @@ static void HandleMoveSwitching(void) MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); } - else if (JOY_NEW(DPAD_LEFT)) + else if (gMain.newKeys & DPAD_LEFT) { if (gMultiUsePlayerCursor & 1) { @@ -791,7 +791,7 @@ static void HandleMoveSwitching(void) MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); } } - else if (JOY_NEW(DPAD_RIGHT)) + else if (gMain.newKeys & DPAD_RIGHT) { if (!(gMultiUsePlayerCursor & 1) && (gMultiUsePlayerCursor ^ 1) < gNumberOfMovesToChoose) { @@ -809,7 +809,7 @@ static void HandleMoveSwitching(void) MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); } } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { if (gMultiUsePlayerCursor & 2) { @@ -827,7 +827,7 @@ static void HandleMoveSwitching(void) MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); } } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (!(gMultiUsePlayerCursor & 2) && (gMultiUsePlayerCursor ^ 2) < gNumberOfMovesToChoose) { @@ -1402,21 +1402,21 @@ static void DoHitAnimBlinkSpriteEffect(void) static void PlayerHandleUnknownYesNoInput(void) { - if (JOY_NEW(DPAD_UP) && gMultiUsePlayerCursor != 0) + if (gMain.newKeys & DPAD_UP && gMultiUsePlayerCursor != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gMultiUsePlayerCursor); gMultiUsePlayerCursor = 0; BattleCreateYesNoCursorAt(0); } - if (JOY_NEW(DPAD_DOWN) && gMultiUsePlayerCursor == 0) + if (gMain.newKeys & DPAD_DOWN && gMultiUsePlayerCursor == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gMultiUsePlayerCursor); gMultiUsePlayerCursor = 1; BattleCreateYesNoCursorAt(1); } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); PlaySE(SE_SELECT); @@ -1428,7 +1428,7 @@ static void PlayerHandleUnknownYesNoInput(void) PlayerBufferExecCompleted(); } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); PlaySE(SE_SELECT); diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 9cb427e129..70e41cf8d2 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -170,7 +170,7 @@ static void SafariBufferRunCommand(void) static void HandleInputChooseAction(void) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); @@ -191,7 +191,7 @@ static void HandleInputChooseAction(void) } SafariBufferExecCompleted(); } - else if (JOY_NEW(DPAD_LEFT)) + else if (gMain.newKeys & DPAD_LEFT) { if (gActionSelectionCursor[gActiveBattler] & 1) { @@ -201,7 +201,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (JOY_NEW(DPAD_RIGHT)) + else if (gMain.newKeys & DPAD_RIGHT) { if (!(gActionSelectionCursor[gActiveBattler] & 1)) { @@ -211,7 +211,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { if (gActionSelectionCursor[gActiveBattler] & 2) { @@ -221,7 +221,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (!(gActionSelectionCursor[gActiveBattler] & 2)) { diff --git a/src/battle_dome.c b/src/battle_dome.c index 2f6df5dcaf..f2abe39d2f 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2731,6 +2731,9 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom) #define TYPE_x2 40 #define TYPE_x4 80 +// Functionally equivalent, while loop is impossible to match. +// arg2 is either 2, a personality, or an OTID +#ifdef NONMATCHING static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) { int defType1, defType2, defAbility, moveType; @@ -2759,15 +2762,13 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) i += 3; continue; } - if (TYPE_EFFECT_ATK_TYPE(i) == moveType) + else if (TYPE_EFFECT_ATK_TYPE(i) == moveType) { - // BUG: TYPE_x2 is not necessary and makes the condition always false if the ability is wonder guard. - if (TYPE_EFFECT_DEF_TYPE(i) == defType1) - if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) - typePower = typePower * TYPE_EFFECT_MULTIPLIER(i) / 10; - if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) - if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) - typePower = typePower * TYPE_EFFECT_MULTIPLIER(i) / 10; + // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard. + if (TYPE_EFFECT_DEF_TYPE(i) == defType1 && (defAbility != ABILITY_WONDER_GUARD || TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE * 2)) + typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; + if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2 && (defAbility != ABILITY_WONDER_GUARD || TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE * 2)) + typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; } i += 3; } @@ -2778,10 +2779,10 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) case 0: switch (typePower) { - default: - case TYPE_x0: - case TYPE_x0_25: case TYPE_x0_50: + case TYPE_x0_25: + case TYPE_x0: + default: typePower = 0; break; case TYPE_x1: @@ -2798,19 +2799,19 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) case 1: switch (typePower) { - case TYPE_x0: - typePower = 8; + default: + case TYPE_x1: + typePower = 0; break; case TYPE_x0_25: typePower = 4; break; + case TYPE_x0: + typePower = 8; + break; case TYPE_x0_50: typePower = 2; break; - default: - case TYPE_x1: - typePower = 0; - break; case TYPE_x2: typePower = -2; break; @@ -2828,8 +2829,8 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) case TYPE_x0_25: typePower = -8; break; - default: case TYPE_x0_50: + default: typePower = 0; break; case TYPE_x1: @@ -2847,6 +2848,246 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) return typePower; } +#else +NAKED +static int GetTypeEffectivenessPoints(int move, int species, int arg2) +{ + asm_unified( + "push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + adds r3, r0, 0\n\ + adds r4, r1, 0\n\ + str r2, [sp]\n\ + movs r6, 0\n\ + movs r2, 0x14\n\ + cmp r3, 0\n\ + beq _0818FFF0\n\ + ldr r0, =0x0000ffff\n\ + cmp r3, r0\n\ + beq _0818FFF0\n\ + ldr r0, =gBattleMoves\n\ + lsls r1, r3, 1\n\ + adds r1, r3\n\ + lsls r1, 2\n\ + adds r3, r1, r0\n\ + ldrb r0, [r3, 0x1]\n\ + cmp r0, 0\n\ + bne _0818FFFC\n\ +_0818FFF0:\n\ + movs r0, 0\n\ + b _08190156\n\ + .pool\n\ +_0818FFFC:\n\ + ldr r1, =gBaseStats\n\ + lsls r0, r4, 3\n\ + subs r0, r4\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x6]\n\ + mov r10, r1\n\ + ldrb r1, [r0, 0x7]\n\ + mov r9, r1\n\ + ldrb r0, [r0, 0x16]\n\ + mov r8, r0\n\ + ldrb r3, [r3, 0x2]\n\ + str r3, [sp, 0x4]\n\ + cmp r0, 0x1A\n\ + bne _0819002C\n\ + cmp r3, 0x4\n\ + bne _0819002C\n\ + ldr r0, [sp]\n\ + cmp r0, 0x1\n\ + bne _081900AA\n\ + movs r2, 0x8\n\ + b _081900A4\n\ + .pool\n\ +_0819002C:\n\ + ldr r0, =gTypeEffectiveness\n\ + adds r1, r6, r0\n\ + ldrb r0, [r1]\n\ + ldr r7, =gTypeEffectiveness\n\ + cmp r0, 0xFF\n\ + beq _081900A4\n\ + adds r4, r1, 0\n\ +_0819003A:\n\ + ldrb r0, [r4]\n\ + cmp r0, 0xFE\n\ + beq _08190096\n\ + ldrb r0, [r4]\n\ + ldr r1, [sp, 0x4]\n\ + cmp r0, r1\n\ + bne _08190096\n\ + ldrb r0, [r4, 0x1]\n\ + adds r5, r6, 0x1\n\ + cmp r0, r10\n\ + bne _0819006C\n\ + adds r1, r6, 0x2\n\ + mov r0, r8\n\ + cmp r0, 0x19\n\ + bne _0819005E\n\ + ldrb r0, [r4, 0x2]\n\ + cmp r0, 0x28\n\ + bne _0819006C\n\ +_0819005E:\n\ + adds r0, r1, r7\n\ + ldrb r0, [r0]\n\ + muls r0, r2\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + adds r2, r0, 0\n\ +_0819006C:\n\ + adds r0, r5, r7\n\ + ldrb r0, [r0]\n\ + cmp r0, r9\n\ + bne _08190096\n\ + cmp r10, r9\n\ + beq _08190096\n\ + adds r1, r6, 0x2\n\ + mov r0, r8\n\ + cmp r0, 0x19\n\ + bne _08190088\n\ + adds r0, r1, r7\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x28\n\ + bne _08190096\n\ +_08190088:\n\ + adds r0, r1, r7\n\ + ldrb r0, [r0]\n\ + muls r0, r2\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + adds r2, r0, 0\n\ +_08190096:\n\ + adds r4, 0x3\n\ + adds r6, 0x3\n\ + ldr r1, =gTypeEffectiveness\n\ + adds r0, r6, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xFF\n\ + bne _0819003A\n\ +_081900A4:\n\ + ldr r0, [sp]\n\ + cmp r0, 0x1\n\ + beq _081900E0\n\ +_081900AA:\n\ + ldr r1, [sp]\n\ + cmp r1, 0x1\n\ + bgt _081900BC\n\ + cmp r1, 0\n\ + beq _081900C4\n\ + b _08190154\n\ + .pool\n\ +_081900BC:\n\ + ldr r0, [sp]\n\ + cmp r0, 0x2\n\ + beq _08190114\n\ + b _08190154\n\ +_081900C4:\n\ + cmp r2, 0xA\n\ + beq _08190146\n\ + cmp r2, 0xA\n\ + ble _08190146\n\ + cmp r2, 0x28\n\ + beq _0819014A\n\ + cmp r2, 0x28\n\ + bgt _081900DA\n\ + cmp r2, 0x14\n\ + beq _08190104\n\ + b _08190146\n\ +_081900DA:\n\ + cmp r2, 0x50\n\ + bne _08190146\n\ + b _08190100\n\ +_081900E0:\n\ + cmp r2, 0xA\n\ + beq _08190104\n\ + cmp r2, 0xA\n\ + bgt _081900F2\n\ + cmp r2, 0\n\ + beq _08190100\n\ + cmp r2, 0x5\n\ + beq _0819014A\n\ + b _08190146\n\ +_081900F2:\n\ + cmp r2, 0x28\n\ + beq _08190108\n\ + cmp r2, 0x28\n\ + ble _08190146\n\ + cmp r2, 0x50\n\ + beq _0819010E\n\ + b _08190146\n\ +_08190100:\n\ + movs r2, 0x8\n\ + b _08190154\n\ +_08190104:\n\ + movs r2, 0x2\n\ + b _08190154\n\ +_08190108:\n\ + movs r2, 0x2\n\ + negs r2, r2\n\ + b _08190154\n\ +_0819010E:\n\ + movs r2, 0x4\n\ + negs r2, r2\n\ + b _08190154\n\ +_08190114:\n\ + cmp r2, 0xA\n\ + beq _08190146\n\ + cmp r2, 0xA\n\ + bgt _08190126\n\ + cmp r2, 0\n\ + beq _0819013A\n\ + cmp r2, 0x5\n\ + beq _08190140\n\ + b _08190146\n\ +_08190126:\n\ + cmp r2, 0x28\n\ + beq _0819014E\n\ + cmp r2, 0x28\n\ + bgt _08190134\n\ + cmp r2, 0x14\n\ + beq _0819014A\n\ + b _08190146\n\ +_08190134:\n\ + cmp r2, 0x50\n\ + beq _08190152\n\ + b _08190146\n\ +_0819013A:\n\ + movs r2, 0x10\n\ + negs r2, r2\n\ + b _08190154\n\ +_08190140:\n\ + movs r2, 0x8\n\ + negs r2, r2\n\ + b _08190154\n\ +_08190146:\n\ + movs r2, 0\n\ + b _08190154\n\ +_0819014A:\n\ + movs r2, 0x4\n\ + b _08190154\n\ +_0819014E:\n\ + movs r2, 0xC\n\ + b _08190154\n\ +_08190152:\n\ + movs r2, 0x14\n\ +_08190154:\n\ + adds r0, r2, 0\n\ +_08190156:\n\ + add sp, 0x8\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1"); +} +#endif // NONMATCHING // Duplicate of GetFrontierTrainerFixedIvs // NOTE: In CreateDomeOpponentMon a tournament trainer ID (0-15) is passed instead, resulting in all IVs of 3 @@ -4111,7 +4352,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) u8 tourneyId = sTourneyTreeTrainerIds[position]; u16 roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) input = INFOCARD_INPUT_AB; // Next opponent card cant scroll @@ -4122,7 +4363,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) { // For trainer info cards, pos is 0 when on a trainer info card (not viewing that trainer's match progression) // Scrolling up/down from a trainer info card goes to other trainer info cards - if (JOY_NEW(DPAD_UP) && sInfoCard->pos == 0) + if (gMain.newKeys & DPAD_UP && sInfoCard->pos == 0) { if (position == 0) position = DOME_TOURNAMENT_TRAINERS_COUNT - 1; @@ -4130,7 +4371,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) position--; input = TRAINERCARD_INPUT_UP; } - else if (JOY_NEW(DPAD_DOWN) && sInfoCard->pos == 0) + else if (gMain.newKeys & DPAD_DOWN && sInfoCard->pos == 0) { if (position == DOME_TOURNAMENT_TRAINERS_COUNT - 1) position = 0; @@ -4139,13 +4380,13 @@ static u8 Task_GetInfoCardInput(u8 taskId) input = TRAINERCARD_INPUT_DOWN; } // Scrolling left can only be done after scrolling right - else if (JOY_NEW(DPAD_LEFT) && sInfoCard->pos != 0) + else if (gMain.newKeys & DPAD_LEFT && sInfoCard->pos != 0) { sInfoCard->pos--; input = TRAINERCARD_INPUT_LEFT; } // Scrolling right from a trainer info card shows their match progression - else if (JOY_NEW(DPAD_RIGHT)) + else if (gMain.newKeys & DPAD_RIGHT) { // Can only scroll right from a trainer card until the round they were eliminated if (DOME_TRAINERS[tourneyId].isEliminated && sInfoCard->pos - 1 < DOME_TRAINERS[tourneyId].eliminatedAt) @@ -4173,7 +4414,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) { // For match info cards, pos is 1 when on the match card, 0 when on the left trainer, and 1 when on the right trainer // Scrolling up/down from a match info card goes to the next/previous match - if (JOY_NEW(DPAD_UP) && sInfoCard->pos == 1) + if (gMain.newKeys & DPAD_UP && sInfoCard->pos == 1) { if (position == DOME_TOURNAMENT_TRAINERS_COUNT) position = sLastMatchCardNum[roundId]; @@ -4181,7 +4422,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) position--; input = MATCHCARD_INPUT_UP; } - else if (JOY_NEW(DPAD_DOWN) && sInfoCard->pos == 1) + else if (gMain.newKeys & DPAD_DOWN && sInfoCard->pos == 1) { if (position == sLastMatchCardNum[roundId]) position = DOME_TOURNAMENT_TRAINERS_COUNT; @@ -4190,12 +4431,12 @@ static u8 Task_GetInfoCardInput(u8 taskId) input = MATCHCARD_INPUT_DOWN; } // Scrolling left/right from a match info card shows the trainer info card of the competitors for that match - else if (JOY_NEW(DPAD_LEFT) && sInfoCard->pos != 0) + else if (gMain.newKeys & DPAD_LEFT && sInfoCard->pos != 0) { input = MATCHCARD_INPUT_LEFT; sInfoCard->pos--; } - else if (JOY_NEW(DPAD_RIGHT) && (sInfoCard->pos == 0 || sInfoCard->pos == 1)) + else if (gMain.newKeys & DPAD_RIGHT && (sInfoCard->pos == 0 || sInfoCard->pos == 1)) { input = MATCHCARD_INPUT_RIGHT; sInfoCard->pos++; @@ -4305,7 +4546,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) textPrinter.currentY = textPrinter.y; textPrinter.letterSpacing = 2; textPrinter.lineSpacing = 0; - textPrinter.style = 0; + textPrinter.unk = 0; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; @@ -4838,7 +5079,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) textPrinter.currentY = textPrinter.y; textPrinter.letterSpacing = 0; textPrinter.lineSpacing = 0; - textPrinter.style = 0; + textPrinter.unk = 0; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; @@ -5043,12 +5284,12 @@ static u8 UpdateTourneyTreeCursor(u8 taskId) int tourneyTreeCursorSpriteId = gTasks[taskId].data[1]; int roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - if (gMain.newKeys == B_BUTTON || (JOY_NEW(A_BUTTON) && tourneyTreeCursorSpriteId == TOURNEY_TREE_CLOSE_BUTTON)) + if (gMain.newKeys == B_BUTTON || (gMain.newKeys & A_BUTTON && tourneyTreeCursorSpriteId == TOURNEY_TREE_CLOSE_BUTTON)) { PlaySE(SE_SELECT); selection = TOURNEY_TREE_SELECTED_CLOSE; } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { if (tourneyTreeCursorSpriteId < DOME_TOURNAMENT_TRAINERS_COUNT) { @@ -5292,7 +5533,7 @@ static void Task_ShowTourneyTree(u8 taskId) gTasks[taskId].tState++; break; case 2: - sTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); + sTilemapBuffer = AllocZeroed(0x800); LZDecompressWram(gDomeTourneyLineMask_Tilemap, sTilemapBuffer); SetBgTilemapBuffer(1, sTilemapBuffer); CopyBgTilemapBufferToVram(1); @@ -5336,7 +5577,7 @@ static void Task_ShowTourneyTree(u8 taskId) textPrinter.lineSpacing = 0; textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x70, textPrinter.letterSpacing); textPrinter.currentY = 1; - textPrinter.style = 0; + textPrinter.unk = 0; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; @@ -5517,7 +5758,7 @@ static void Task_HandleStaticTourneyTreeInput(u8 taskId) textPrinter.y = 0; textPrinter.letterSpacing = 2; textPrinter.lineSpacing = 0; - textPrinter.style = 0; + textPrinter.unk = 0; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_2; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; @@ -5552,7 +5793,7 @@ static void Task_HandleStaticTourneyTreeInput(u8 taskId) gTasks[taskId].tState = STATE_WAIT_FOR_INPUT; break; case STATE_WAIT_FOR_INPUT: - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].tState = STATE_CLOSE_TOURNEY_TREE; diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index a3fa275c5c..388881a1c4 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1478,7 +1478,7 @@ static void Task_HandleSelectionScreenYesNo(u8 taskId) gTasks[taskId].data[0] = 5; break; case 5: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); if (sFactorySelectScreen->yesNoCursorPos == 0) @@ -1496,7 +1496,7 @@ static void Task_HandleSelectionScreenYesNo(u8 taskId) gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); sub_819B958(4); @@ -1505,12 +1505,12 @@ static void Task_HandleSelectionScreenYesNo(u8 taskId) gTasks[taskId].data[0] = 1; gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } - else if (JOY_REPEAT(DPAD_UP)) + else if (gMain.newAndRepeatedKeys & DPAD_UP) { PlaySE(SE_SELECT); Select_UpdateYesNoCursorPosition(-1); } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { PlaySE(SE_SELECT); Select_UpdateYesNoCursorPosition(1); @@ -1538,7 +1538,7 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) } break; case 3: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { u8 retVal; PlaySE(SE_SELECT); @@ -1565,7 +1565,7 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) gTasks[taskId].func = Task_FromSelectScreenToSummaryScreen; } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); @@ -1574,12 +1574,12 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) gTasks[taskId].data[0] = 1; gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } - else if (JOY_REPEAT(DPAD_UP)) + else if (gMain.newAndRepeatedKeys & DPAD_UP) { PlaySE(SE_SELECT); Select_UpdateMenuCursorPosition(-1); } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { PlaySE(SE_SELECT); Select_UpdateMenuCursorPosition(1); @@ -1618,21 +1618,21 @@ static void Task_HandleSelectionScreenChooseMons(u8 taskId) } break; case 1: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); sFactorySelectScreen->unk2A2 = FALSE; gTasks[taskId].data[0] = 2; gTasks[taskId].func = Task_HandleSelectionScreenMenu; } - else if (JOY_REPEAT(DPAD_LEFT)) + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { PlaySE(SE_SELECT); Select_UpdateBallCursorPosition(-1); Select_PrintMonCategory(); Select_PrintMonSpecies(); } - else if (JOY_REPEAT(DPAD_RIGHT)) + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { PlaySE(SE_SELECT); Select_UpdateBallCursorPosition(1); @@ -1641,7 +1641,7 @@ static void Task_HandleSelectionScreenChooseMons(u8 taskId) } break; case 11: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); @@ -2361,7 +2361,7 @@ static void Task_HandleSwapScreenYesNo(u8 taskId) gTasks[taskId].data[0] = 5; break; case 5: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); if (sFactorySwapScreen->yesNoCursorPos == 0) @@ -2380,7 +2380,7 @@ static void Task_HandleSwapScreenYesNo(u8 taskId) gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); gTasks[taskId].data[1] = 0; @@ -2389,12 +2389,12 @@ static void Task_HandleSwapScreenYesNo(u8 taskId) loPtr = gTasks[taskId].data[7]; gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); } - else if (JOY_REPEAT(DPAD_UP)) + else if (gMain.newAndRepeatedKeys & DPAD_UP) { PlaySE(SE_SELECT); Swap_UpdateYesNoCursorPosition(-1); } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { PlaySE(SE_SELECT); Swap_UpdateYesNoCursorPosition(1); @@ -2485,12 +2485,12 @@ static void Task_HandleSwapScreenMenu(u8 taskId) case 3: if (sFactorySwapScreen->unk30 != TRUE) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); Swap_RunMenuOptionFunc(taskId); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); @@ -2501,11 +2501,11 @@ static void Task_HandleSwapScreenMenu(u8 taskId) gTasks[taskId].data[5] = 1; gTasks[taskId].func = sub_819D770; } - else if (JOY_REPEAT(DPAD_UP)) + else if (gMain.newAndRepeatedKeys & DPAD_UP) { Swap_UpdateMenuCursorPosition(-1); } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { Swap_UpdateMenuCursorPosition(1); } @@ -2526,7 +2526,7 @@ static void Task_HandleSwapScreenChooseMons(u8 taskId) } break; case 1: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); sFactorySwapScreen->unk22 = FALSE; @@ -2534,7 +2534,7 @@ static void Task_HandleSwapScreenChooseMons(u8 taskId) sub_819EAC0(); Swap_RunActionFunc(taskId); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); sFactorySwapScreen->unk22 = FALSE; @@ -2546,25 +2546,25 @@ static void Task_HandleSwapScreenChooseMons(u8 taskId) gTasks[taskId].data[5] = 0; gTasks[taskId].func = sub_819D588; } - else if (JOY_REPEAT(DPAD_LEFT)) + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { Swap_UpdateBallCursorPosition(-1); Swap_PrintMonCategory(); Swap_PrintMonSpecies(); } - else if (JOY_REPEAT(DPAD_RIGHT)) + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { Swap_UpdateBallCursorPosition(1); Swap_PrintMonCategory(); Swap_PrintMonSpecies(); } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { Swap_UpdateActionCursorPosition(1); Swap_PrintMonCategory(); Swap_PrintMonSpecies(); } - else if (JOY_REPEAT(DPAD_UP)) + else if (gMain.newAndRepeatedKeys & DPAD_UP) { Swap_UpdateActionCursorPosition(-1); Swap_PrintMonCategory(); @@ -3929,7 +3929,7 @@ static void Task_SwapCantHaveSameMons(u8 taskId) gTasks[taskId].data[0]++; break; case 1: - if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index e3e63f0e84..83818798a2 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -957,7 +957,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform } src = gMonSpritesGfxPtr->sprites[position]; - dst = (void *)(OBJ_VRAM0 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32); + dst = (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32); DmaCopy32(3, src, dst, 0x800); paletteOffset = 0x100 + battlerAtk * 16; lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue); @@ -1014,12 +1014,15 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) palOffset = (battlerId * 16) + 0x100; LoadCompressedPalette(gSubstituteDollPal, palOffset, 32); } - else if (!IsContest()) + else { - if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); - else - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId); + if (!IsContest()) + { + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); + else + BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId); + } } } diff --git a/src/battle_main.c b/src/battle_main.c index bf0fdc1aad..0c3e84c1ea 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -11,7 +11,6 @@ #include "battle_scripts.h" #include "battle_setup.h" #include "battle_tower.h" -#include "battle_util.h" #include "berry.h" #include "bg.h" #include "data.h" @@ -67,6 +66,11 @@ extern struct MusicPlayerInfo gMPlayInfo_SE2; extern const struct BgTemplate gBattleBgTemplates[]; extern const struct WindowTemplate *const gBattleWindowTemplates[]; +extern const u8 *const gBattleScriptsForMoveEffects[]; +extern const u8 *const gBattlescriptsForBallThrow[]; +extern const u8 *const gBattlescriptsForRunningByItem[]; +extern const u8 *const gBattlescriptsForUsingItem[]; +extern const u8 *const gBattlescriptsForSafariActions[]; // this file's functions #if !defined(NONMATCHING) && MODERN @@ -95,6 +99,7 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite); static void SpriteCb_BlinkVisible(struct Sprite *sprite); static void SpriteCallbackDummy_3(struct Sprite *sprite); static void oac_poke_ally_(struct Sprite *sprite); +static void SpecialStatusesClear(void); static void TurnValuesCleanUp(bool8 var0); static void SpriteCB_BounceEffect(struct Sprite *sprite); static void BattleStartClearSetData(void); @@ -127,7 +132,19 @@ static void HandleEndTurn_BattleLost(void); static void HandleEndTurn_RanFromBattle(void); static void HandleEndTurn_MonFled(void); static void HandleEndTurn_FinishBattle(void); - +static void HandleAction_UseMove(void); +static void HandleAction_Switch(void); +static void HandleAction_UseItem(void); +static void HandleAction_Run(void); +static void HandleAction_WatchesCarefully(void); +static void HandleAction_SafariZoneBallThrow(void); +static void HandleAction_ThrowPokeblock(void); +static void HandleAction_GoNear(void); +static void HandleAction_SafariZoneRun(void); +static void HandleAction_WallyBallThrow(void); +static void HandleAction_TryFinish(void); +static void HandleAction_NothingIsFainted(void); +static void HandleAction_ActionFinished(void); // EWRAM vars EWRAM_DATA u16 gBattle_BG0_X = 0; @@ -574,6 +591,10 @@ const u8 * const gStatusConditionStringsTable[7][2] = {gStatusConditionString_LoveJpn, gText_Love} }; +static const u8 sPkblToEscapeFactor[][3] = {{0, 0, 0}, {3, 5, 0}, {2, 3, 0}, {1, 2, 0}, {1, 1, 0}}; +static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1}; +static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4}; + // code void CB2_InitBattle(void) { @@ -634,16 +655,19 @@ static void CB2_InitBattleInternal(void) gBattle_WIN0V = 0x5051; ScanlineEffect_Clear(); - for (i = 0; i < 80; i++) + i = 0; + while (i < 80) { gScanlineEffectRegBuffers[0][i] = 0xF0; gScanlineEffectRegBuffers[1][i] = 0xF0; + i++; } - for (; i < 160; i++) + while (i < 160) { gScanlineEffectRegBuffers[0][i] = 0xFF10; gScanlineEffectRegBuffers[1][i] = 0xFF10; + i++; } ScanlineEffect_SetParams(sIntroScanlineParams16Bit); @@ -770,7 +794,8 @@ static void SetPlayerBerryDataInBattleStruct(void) static void SetAllPlayersBerryData(void) { - s32 i, j; + s32 i; + s32 j; if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -1829,7 +1854,7 @@ void BattleMainCB2(void) UpdatePaletteFade(); RunTasks(); - if (JOY_HELD(B_BUTTON) && gBattleTypeFlags & BATTLE_TYPE_RECORDED && sub_8186450()) + if (gMain.heldKeys & B_BUTTON && gBattleTypeFlags & BATTLE_TYPE_RECORDED && sub_8186450()) { gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; ResetPaletteFadeControl(); @@ -2485,7 +2510,7 @@ static void sub_803939C(void) } break; case 5: - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { if (gBattleCommunication[CURSOR_POSITION] != 0) { @@ -2495,7 +2520,7 @@ static void sub_803939C(void) BattleCreateYesNoCursorAt(0); } } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (gBattleCommunication[CURSOR_POSITION] == 0) { @@ -2505,7 +2530,7 @@ static void sub_803939C(void) BattleCreateYesNoCursorAt(1); } } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); if (gBattleCommunication[CURSOR_POSITION] == 0) @@ -2519,7 +2544,7 @@ static void sub_803939C(void) gBattleCommunication[MULTIUSE_STATE]++; } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); gBattleCommunication[MULTIUSE_STATE]++; @@ -2686,7 +2711,8 @@ static void sub_80398BC(struct Sprite *sprite) // unused? static void sub_80398D0(struct Sprite *sprite) { - if (--sprite->data[4] == 0) + sprite->data[4]--; + if (sprite->data[4] == 0) { sprite->data[4] = 8; sprite->invisible ^= 1; @@ -3417,13 +3443,17 @@ static void BattleIntroDrawTrainersOrMonsSprites(void) } } - if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT || GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - BtlController_EmitDrawTrainerPic(0); - MarkBattlerForControllerExec(gActiveBattler); + if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT + || GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT) + { + BtlController_EmitDrawTrainerPic(0); + MarkBattlerForControllerExec(gActiveBattler); + } } - if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)) + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT) { BtlController_EmitDrawTrainerPic(0); MarkBattlerForControllerExec(gActiveBattler); @@ -3530,7 +3560,7 @@ static void BattleIntroPrintWildMonAttacked(void) static void BattleIntroPrintOpponentSendsOut(void) { - u8 position; + u32 position; if (gBattleControllerExecFlags) return; @@ -3553,7 +3583,7 @@ static void BattleIntroPrintOpponentSendsOut(void) static void BattleIntroOpponent2SendsOutMonAnimation(void) { - u8 position; + u32 position; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) position = B_POSITION_OPPONENT_RIGHT; @@ -3579,26 +3609,22 @@ static void BattleIntroOpponent2SendsOutMonAnimation(void) gBattleMainFunc = BattleIntroRecordMonsToDex; } +#ifdef NONMATCHING static void BattleIntroOpponent1SendsOutMonAnimation(void) { - u8 position; + u32 position; - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) + position = B_POSITION_OPPONENT_LEFT; + else if (gBattleTypeFlags & BATTLE_TYPE_x2000000) { - if (gBattleTypeFlags & BATTLE_TYPE_x2000000) - { - if (gBattleTypeFlags & BATTLE_TYPE_x80000000) - position = B_POSITION_OPPONENT_LEFT; - else - position = B_POSITION_PLAYER_LEFT; - } - else + if (gBattleTypeFlags & BATTLE_TYPE_x80000000) position = B_POSITION_OPPONENT_LEFT; + else + position = B_POSITION_PLAYER_LEFT; } else - { position = B_POSITION_OPPONENT_LEFT; - } if (gBattleControllerExecFlags) return; @@ -3619,6 +3645,92 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void) gBattleMainFunc = BattleIntroRecordMonsToDex; } +#else +NAKED +static void BattleIntroOpponent1SendsOutMonAnimation(void) +{ + asm_unified( + "push {r4-r6,lr}\n\ + ldr r0, =gBattleTypeFlags\n\ + ldr r2, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 17\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _0803B298\n\ + movs r0, 0x80\n\ + lsls r0, 18\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _0803B298\n\ + movs r1, 0x80\n\ + lsls r1, 24\n\ + ands r1, r2\n\ + negs r0, r1\n\ + orrs r0, r1\n\ + lsrs r5, r0, 31\n\ + b _0803B29A\n\ + .pool\n\ +_0803B288:\n\ + ldr r1, =gBattleMainFunc\n\ + ldr r0, =BattleIntroOpponent2SendsOutMonAnimation\n\ + b _0803B2F0\n\ + .pool\n\ +_0803B298:\n\ + movs r5, 0x1\n\ +_0803B29A:\n\ + ldr r0, =gBattleControllerExecFlags\n\ + ldr r2, [r0]\n\ + cmp r2, 0\n\ + bne _0803B2F2\n\ + ldr r0, =gActiveBattler\n\ + strb r2, [r0]\n\ + ldr r1, =gBattlersCount\n\ + adds r4, r0, 0\n\ + ldrb r1, [r1]\n\ + cmp r2, r1\n\ + bcs _0803B2EC\n\ + adds r6, r4, 0\n\ +_0803B2B2:\n\ + ldrb r0, [r4]\n\ + bl GetBattlerPosition\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, r5\n\ + bne _0803B2D8\n\ + movs r0, 0\n\ + bl BtlController_EmitIntroTrainerBallThrow\n\ + ldrb r0, [r4]\n\ + bl MarkBattlerForControllerExec\n\ + ldr r0, =gBattleTypeFlags\n\ + ldr r0, [r0]\n\ + ldr r1, =0x00008040\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0803B288\n\ +_0803B2D8:\n\ + ldrb r0, [r6]\n\ + adds r0, 0x1\n\ + strb r0, [r6]\n\ + ldr r1, =gBattlersCount\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldr r4, =gActiveBattler\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc _0803B2B2\n\ +_0803B2EC:\n\ + ldr r1, =gBattleMainFunc\n\ + ldr r0, =BattleIntroRecordMonsToDex\n\ +_0803B2F0:\n\ + str r0, [r1]\n\ +_0803B2F2:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); +} +#endif // NONMATCHING static void BattleIntroRecordMonsToDex(void) { @@ -3640,7 +3752,7 @@ static void BattleIntroRecordMonsToDex(void) } } -static void sub_803B3AC(void) // unused +void sub_803B3AC(void) // unused { if (gBattleControllerExecFlags == 0) gBattleMainFunc = BattleIntroPrintPlayerSendsOut; @@ -3673,7 +3785,7 @@ static void BattleIntroPrintPlayerSendsOut(void) static void BattleIntroPlayer2SendsOutMonAnimation(void) { - u8 position; + u32 position; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) position = B_POSITION_PLAYER_RIGHT; @@ -3705,7 +3817,7 @@ static void BattleIntroPlayer2SendsOutMonAnimation(void) static void BattleIntroPlayer1SendsOutMonAnimation(void) { - u8 position; + u32 position; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) position = B_POSITION_PLAYER_LEFT; @@ -3743,7 +3855,7 @@ static void BattleIntroPlayer1SendsOutMonAnimation(void) gBattleMainFunc = TryDoEventsBeforeFirstTurn; } -static void sub_803B598(void) // unused +void sub_803B598(void) // unused { if (gBattleControllerExecFlags == 0) { @@ -3766,7 +3878,8 @@ static void sub_803B598(void) // unused static void TryDoEventsBeforeFirstTurn(void) { - s32 i, j; + s32 i; + s32 j; u8 effect = 0; if (gBattleControllerExecFlags) @@ -3956,7 +4069,11 @@ u8 IsRunningFromBattleImpossible(void) gPotentialItemEffectBattler = gActiveBattler; - if ((holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) || (gBattleTypeFlags & BATTLE_TYPE_LINK) || (gBattleMons[gActiveBattler].ability == ABILITY_RUN_AWAY)) + if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) + return 0; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + return 0; + if (gBattleMons[gActiveBattler].ability == ABILITY_RUN_AWAY) return 0; side = GetBattlerSide(gActiveBattler); @@ -4733,38 +4850,40 @@ static void SetActionsAndBattlersTurnOrder(void) gBattleStruct->focusPunchBattlerId = 0; return; } - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + else { - if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH) + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { - gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; - gBattlerByTurnOrder[turnOrderId] = gActiveBattler; - turnOrderId++; - } - } - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH) - { - gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; - gBattlerByTurnOrder[turnOrderId] = gActiveBattler; - turnOrderId++; - } - } - for (i = 0; i < gBattlersCount - 1; i++) - { - for (j = i + 1; j < gBattlersCount; j++) - { - u8 battler1 = gBattlerByTurnOrder[i]; - u8 battler2 = gBattlerByTurnOrder[j]; - - if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM - && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM - && gActionsByTurnOrder[i] != B_ACTION_SWITCH - && gActionsByTurnOrder[j] != B_ACTION_SWITCH) + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH) { - if (GetWhoStrikesFirst(battler1, battler2, FALSE)) - SwapTurnOrder(i, j); + gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; + gBattlerByTurnOrder[turnOrderId] = gActiveBattler; + turnOrderId++; + } + } + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + { + if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH) + { + gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; + gBattlerByTurnOrder[turnOrderId] = gActiveBattler; + turnOrderId++; + } + } + for (i = 0; i < gBattlersCount - 1; i++) + { + for (j = i + 1; j < gBattlersCount; j++) + { + u8 battler1 = gBattlerByTurnOrder[i]; + u8 battler2 = gBattlerByTurnOrder[j]; + if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM + && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM + && gActionsByTurnOrder[i] != B_ACTION_SWITCH + && gActionsByTurnOrder[j] != B_ACTION_SWITCH) + { + if (GetWhoStrikesFirst(battler1, battler2, FALSE)) + SwapTurnOrder(i, j); + } } } } @@ -4810,7 +4929,7 @@ static void TurnValuesCleanUp(bool8 var0) gSideTimers[1].followmeTimer = 0; } -void SpecialStatusesClear(void) +static void SpecialStatusesClear(void) { for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { @@ -4842,8 +4961,12 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) } TryClearRageStatuses(); - gCurrentTurnActionNumber = 0; //See comment underneath - gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; //Should be gActionsByTurnOrder[(gCurrentTurnActionNumber = 0)], but that doesn't match + gCurrentTurnActionNumber = 0; +{ + // something stupid needed to match + u8 zero; + gCurrentActionFuncId = gActionsByTurnOrder[(zero = 0)]; +} gDynamicBasePower = 0; gBattleStruct->dynamicMoveType = 0; gBattleMainFunc = RunTurnActionsFunctions; @@ -4866,10 +4989,13 @@ static void RunTurnActionsFunctions(void) gHitMarker &= ~(HITMARKER_x100000); gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F]; } - else if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId + else { - gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); - gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); + if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId + { + gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); + gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); + } } } @@ -4986,15 +5112,15 @@ static void HandleEndTurn_RanFromBattle(void) { switch (gProtectStructs[gBattlerAttacker].fleeFlag) { + default: + gBattlescriptCurrInstr = BattleScript_GotAwaySafely; + break; case 1: gBattlescriptCurrInstr = BattleScript_SmokeBallEscape; break; case 2: gBattlescriptCurrInstr = BattleScript_RanAwayUsingMonAbility; break; - default: - gBattlescriptCurrInstr = BattleScript_GotAwaySafely; - break; } } @@ -5078,7 +5204,10 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void) gBattleMainFunc = ReturnFromBattleToOverworld; return; } - gBattleMainFunc = TryEvolvePokemon; + else + { + gBattleMainFunc = TryEvolvePokemon; + } } FreeAllWindowBuffers(); @@ -5174,3 +5303,592 @@ void RunBattleScriptCommands(void) gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } +static void HandleAction_UseMove(void) +{ + u8 side; + u8 var = 4; + + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + + if (*(&gBattleStruct->field_91) & gBitTable[gBattlerAttacker]) + { + gCurrentActionFuncId = B_ACTION_FINISHED; + return; + } + + gCritMultiplier = 1; + gBattleScripting.dmgMultiplier = 1; + gBattleStruct->atkCancellerTracker = 0; + gMoveResultFlags = 0; + gMultiHitCounter = 0; + gBattleCommunication[6] = 0; + gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker); + + // choose move + if (gProtectStructs[gBattlerAttacker].noValidMoves) + { + gProtectStructs[gBattlerAttacker].noValidMoves = 0; + gCurrentMove = gChosenMove = MOVE_STRUGGLE; + gHitMarker |= HITMARKER_NO_PPDEDUCT; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0); + } + else if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE) + { + gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker]; + } + // encore forces you to use the same move + else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) + { + gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove; + gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + } + // check if the encored move wasn't overwritten + else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) + { + gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; + gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + gDisableStructs[gBattlerAttacker].encoredMove = MOVE_NONE; + gDisableStructs[gBattlerAttacker].encoredMovePos = 0; + gDisableStructs[gBattlerAttacker].encoreTimer = 0; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else if (gBattleMons[gBattlerAttacker].moves[gCurrMovePos] != gChosenMoveByBattler[gBattlerAttacker]) + { + gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else + { + gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + } + + if (gBattleMons[gBattlerAttacker].hp != 0) + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + gBattleResults.lastUsedMovePlayer = gCurrentMove; + else + gBattleResults.lastUsedMoveOpponent = gCurrentMove; + } + + // choose target + side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; + if (gSideTimers[side].followmeTimer != 0 + && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED + && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget) + && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) + { + gBattlerTarget = gSideTimers[side].followmeTarget; + } + else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && gSideTimers[side].followmeTimer == 0 + && (gBattleMoves[gCurrentMove].power != 0 + || gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER) + && gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD + && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + { + side = GetBattlerSide(gBattlerAttacker); + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + { + if (side != GetBattlerSide(gActiveBattler) + && *(gBattleStruct->moveTarget + gBattlerAttacker) != gActiveBattler + && gBattleMons[gActiveBattler].ability == ABILITY_LIGHTNING_ROD + && GetBattlerTurnOrderNum(gActiveBattler) < var) + { + var = GetBattlerTurnOrderNum(gActiveBattler); + } + } + if (var == 4) + { + if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + } + else + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + } + } + else + { + gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); + } + + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + { + if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + else + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + } + } + else + { + gActiveBattler = gBattlerByTurnOrder[var]; + RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability); + gSpecialStatuses[gActiveBattler].lightningRodRedirected = 1; + gBattlerTarget = gActiveBattler; + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + } + else + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + } + + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget] + && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + } + else + { + gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + { + if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + else + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + } + } + + // choose battlescript + if (gBattleTypeFlags & BATTLE_TYPE_PALACE + && gProtectStructs[gBattlerAttacker].palaceUnableToUseMove) + { + if (gBattleMons[gBattlerAttacker].hp == 0) + { + gCurrentActionFuncId = B_ACTION_FINISHED; + return; + } + else if (gPalaceSelectionBattleScripts[gBattlerAttacker] != NULL) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr = gPalaceSelectionBattleScripts[gBattlerAttacker]; + gPalaceSelectionBattleScripts[gBattlerAttacker] = NULL; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; + } + } + else + { + gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; + } + + if (gBattleTypeFlags & BATTLE_TYPE_ARENA) + BattleArena_AddMindPoints(gBattlerAttacker); + + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +static void HandleAction_Switch(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gActionSelectionCursor[gBattlerAttacker] = 0; + gMoveSelectionCursor[gBattlerAttacker] = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->field_58 + gBattlerAttacker)) + + gBattleScripting.battler = gBattlerAttacker; + gBattlescriptCurrInstr = BattleScript_ActionSwitch; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + + if (gBattleResults.playerSwitchesCounter < 255) + gBattleResults.playerSwitchesCounter++; +} + +static void HandleAction_UseItem(void) +{ + gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); + gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8); + + if (gLastUsedItem <= LAST_BALL) // is ball + { + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem]; + } + else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL) + { + gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; + } + else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; + } + else + { + gBattleScripting.battler = gBattlerAttacker; + + switch (*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))) + { + case AI_ITEM_FULL_RESTORE: + case AI_ITEM_HEAL_HP: + break; + case AI_ITEM_CURE_CONDITION: + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1) + { + if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E) + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + while (!(*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1)) + { + *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; + gBattleCommunication[MULTISTRING_CHOOSER]++; + } + } + break; + case AI_ITEM_X_STAT: + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 0x80) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK) + PREPARE_STRING_BUFFER(gBattleTextBuff2, CHAR_X) + + while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1)) + { + *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; + gBattleTextBuff1[2]++; + } + + gBattleScripting.animArg1 = gBattleTextBuff1[2] + 14; + gBattleScripting.animArg2 = 0; + } + break; + case AI_ITEM_GUARD_SPECS: + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + break; + } + + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + gBattlerAttacker / 2)]; + } + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +bool8 TryRunFromBattle(u8 battler) +{ + bool8 effect = FALSE; + u8 holdEffect; + u8 pyramidMultiplier; + u8 speedVar; + + if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY) + holdEffect = gEnigmaBerries[battler].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(gBattleMons[battler].item); + + gPotentialItemEffectBattler = battler; + + if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) + { + gLastUsedItem = gBattleMons[battler].item; + gProtectStructs[battler].fleeFlag = 1; + effect++; + } + else if (gBattleMons[battler].ability == ABILITY_RUN_AWAY) + { + if (InBattlePyramid()) + { + gBattleStruct->runTries++; + pyramidMultiplier = GetPyramidRunMultiplier(); + speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); + if (speedVar > (Random() & 0xFF)) + { + gLastUsedAbility = ABILITY_RUN_AWAY; + gProtectStructs[battler].fleeFlag = 2; + effect++; + } + } + else + { + gLastUsedAbility = ABILITY_RUN_AWAY; + gProtectStructs[battler].fleeFlag = 2; + effect++; + } + } + else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_TRAINER_HILL) && gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + effect++; + } + else + { + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + if (InBattlePyramid()) + { + pyramidMultiplier = GetPyramidRunMultiplier(); + speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); + if (speedVar > (Random() & 0xFF)) + effect++; + } + else if (gBattleMons[battler].speed < gBattleMons[BATTLE_OPPOSITE(battler)].speed) + { + speedVar = (gBattleMons[battler].speed * 128) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); + if (speedVar > (Random() & 0xFF)) + effect++; + } + else // same speed or faster + { + effect++; + } + } + + gBattleStruct->runTries++; + } + + if (effect) + { + gCurrentTurnActionNumber = gBattlersCount; + gBattleOutcome = B_OUTCOME_RAN; + } + + return effect; +} + +static void HandleAction_Run(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + + if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) + { + gCurrentTurnActionNumber = gBattlersCount; + + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + { + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) + gBattleOutcome |= B_OUTCOME_LOST; + } + else + { + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) + gBattleOutcome |= B_OUTCOME_WON; + } + } + + gBattleOutcome |= B_OUTCOME_LINK_BATTLE_RAN; + gSaveBlock2Ptr->frontier.disableRecordBattle = TRUE; + } + else + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + if (!TryRunFromBattle(gBattlerAttacker)) // failed to run away + { + ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + } + } + else + { + if (gBattleMons[gBattlerAttacker].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + } + else + { + gCurrentTurnActionNumber = gBattlersCount; + gBattleOutcome = B_OUTCOME_MON_FLED; + } + } + } +} + +static void HandleAction_WatchesCarefully(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +static void HandleAction_SafariZoneBallThrow(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gNumSafariBalls--; + gLastUsedItem = ITEM_SAFARI_BALL; + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[ITEM_SAFARI_BALL]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +static void HandleAction_ThrowPokeblock(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBattlerAttacker][1] - 1; + gLastUsedItem = gBattleBufferB[gBattlerAttacker][2]; + + if (gBattleResults.pokeblockThrows < 0xFF) + gBattleResults.pokeblockThrows++; + if (gBattleStruct->safariPkblThrowCounter < 3) + gBattleStruct->safariPkblThrowCounter++; + if (gBattleStruct->safariEscapeFactor > 1) + { + if (gBattleStruct->safariEscapeFactor < sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]) + gBattleStruct->safariEscapeFactor = 1; + else + gBattleStruct->safariEscapeFactor -= sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]; + } + + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +static void HandleAction_GoNear(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + + gBattleStruct->safariCatchFactor += sGoNearCounterToCatchFactor[gBattleStruct->safariGoNearCounter]; + if (gBattleStruct->safariCatchFactor > 20) + gBattleStruct->safariCatchFactor = 20; + + gBattleStruct->safariEscapeFactor += sGoNearCounterToEscapeFactor[gBattleStruct->safariGoNearCounter]; + if (gBattleStruct->safariEscapeFactor > 20) + gBattleStruct->safariEscapeFactor = 20; + + if (gBattleStruct->safariGoNearCounter < 3) + { + gBattleStruct->safariGoNearCounter++; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; // Can't get closer. + } + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[1]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +static void HandleAction_SafariZoneRun(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + PlaySE(SE_FLEE); + gCurrentTurnActionNumber = gBattlersCount; + gBattleOutcome = B_OUTCOME_RAN; +} + +static void HandleAction_WallyBallThrow(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]) + + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[3]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + gActionsByTurnOrder[1] = B_ACTION_FINISHED; +} + +static void HandleAction_TryFinish(void) +{ + if (!HandleFaintedMonActions()) + { + gBattleStruct->faintedActionsState = 0; + gCurrentActionFuncId = B_ACTION_FINISHED; + } +} + +static void HandleAction_NothingIsFainted(void) +{ + gCurrentTurnActionNumber++; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; + gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 + | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_CHARGING | HITMARKER_x4000000); +} + +static void HandleAction_ActionFinished(void) +{ + *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = 6; + gCurrentTurnActionNumber++; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; + SpecialStatusesClear(); + gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 + | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_CHARGING | HITMARKER_x4000000); + + gCurrentMove = 0; + gBattleMoveDamage = 0; + gMoveResultFlags = 0; + gBattleScripting.animTurn = 0; + gBattleScripting.animTargetsHit = 0; + gLastLandedMoves[gBattlerAttacker] = 0; + gLastHitByType[gBattlerAttacker] = 0; + gBattleStruct->dynamicMoveType = 0; + gDynamicBasePower = 0; + gBattleScripting.moveendState = 0; + gBattleCommunication[3] = 0; + gBattleCommunication[4] = 0; + gBattleScripting.multihitMoveEffect = 0; + gBattleResources->battleScriptsStack->size = 0; +} + + diff --git a/src/battle_message.c b/src/battle_message.c index c004665d75..59ad0cee4d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2995,7 +2995,7 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId) printerTemplate.currentY = printerTemplate.y; printerTemplate.letterSpacing = textInfo[windowId].letterSpacing; printerTemplate.lineSpacing = textInfo[windowId].lineSpacing; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = textInfo[windowId].fgColor; printerTemplate.bgColor = textInfo[windowId].bgColor; printerTemplate.shadowColor = textInfo[windowId].shadowColor; diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 9e881d3a3f..b015f3e0e3 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -523,19 +523,6 @@ static const u8 sTrainerTextGroups[50][2] = {FACILITY_CLASS_HIKER, 4}, }; -enum -{ - HINT_EXIT_DIRECTION, - HINT_REMAINING_ITEMS, - HINT_REMAINING_TRAINERS, - HINT_EXIT_SHORT_REMAINING_TRAINERS, - HINT_EXIT_SHORT_REMAINING_ITEMS, - HINT_EXIT_MEDIUM_REMAINING_TRAINERS, - HINT_EXIT_MEDIUM_REMAINING_ITEMS, - HINT_EXIT_FAR_REMAINING_TRAINERS, - HINT_EXIT_FAR_REMAINING_ITEMS, -}; - static const u8 *const sExitDirectionHintTexts1[] = { BattlePyramid_Text_ExitHintUp1, diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 8fee578554..e038e71e18 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -839,7 +839,7 @@ static void Task_HandlePyramidBagInput(u8 taskId) s16 *data = gTasks[taskId].data; if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active) { - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { if (gPyramidBagCursorData.unk4 != 2) { @@ -965,7 +965,7 @@ static void HandleMenuActionInput(u8 taskId) if (MenuHelpers_CallLinkSomething() != TRUE) { s8 id = Menu_GetCursorPos(); - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { if (id > 0 && IsValidMenuAction(id - 2)) { @@ -973,7 +973,7 @@ static void HandleMenuActionInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); } } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (id < gPyramidBagResources->menuActionsCount - 2 && IsValidMenuAction(id + 2)) { @@ -981,7 +981,7 @@ static void HandleMenuActionInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); } } - else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) { if (id & 1 && IsValidMenuAction(id - 1)) { @@ -989,7 +989,7 @@ static void HandleMenuActionInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); } } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) { if (!(id & 1) && IsValidMenuAction(id + 1)) { @@ -997,13 +997,13 @@ static void HandleMenuActionInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); } } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); if (sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8 != NULL) sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8(taskId); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); sMenuActions[ACTION_CANCEL].func.void_u8(taskId); @@ -1143,7 +1143,7 @@ static void sub_81C64B4(u8 taskId) { sub_81C645C(data[8]); } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); ClearStdWindowAndFrameToTransparent(3, 0); @@ -1151,7 +1151,7 @@ static void sub_81C64B4(u8 taskId) ScheduleBgCopyTilemapToVram(1); sub_81C6350(taskId); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); ClearStdWindowAndFrameToTransparent(3, 0); @@ -1179,7 +1179,7 @@ static void sub_81C65CC(u8 taskId) u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition; u16 *selectedRow = &gPyramidBagCursorData.cursorPosition; - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); RemovePyramidBagItem(gSpecialVar_ItemId, data[8]); @@ -1220,7 +1220,7 @@ static void sub_81C66AC(u8 taskId) static void sub_81C66EC(u8 taskId) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); Task_CloseBattlePyramidBagMessage(taskId); @@ -1277,7 +1277,7 @@ static void Task_ItemSwapHandleInput(u8 taskId) s16 *data = gTasks[taskId].data; if (MenuHelpers_CallLinkSomething() != TRUE) { - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { PlaySE(SE_SELECT); ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition); @@ -1295,7 +1295,7 @@ static void Task_ItemSwapHandleInput(u8 taskId) break; case LIST_CANCEL: PlaySE(SE_SELECT); - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) PerformItemSwap(taskId); else sub_81C6A14(taskId); diff --git a/src/battle_records.c b/src/battle_records.c index a8b9ead14b..c6363a6eda 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -356,7 +356,7 @@ static void Task_CloseTrainerHillRecordsOnButton(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); task->func = Task_BeginPaletteFade; @@ -485,7 +485,7 @@ static void CB2_ShowTrainerHillRecords(void) gMain.state++; break; case 2: - sTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); + sTilemapBuffer = AllocZeroed(0x800); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sTrainerHillRecordsBgTemplates, ARRAY_COUNT(sTrainerHillRecordsBgTemplates)); SetBgTilemapBuffer(3, sTilemapBuffer); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fca2b38796..9cff332cab 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3489,6 +3489,7 @@ static void Cmd_getexp(void) } } +#ifdef NONMATCHING static void Cmd_unknown_24(void) { u16 HP_count = 0; @@ -3520,9 +3521,7 @@ static void Cmd_unknown_24(void) if (HP_count == 0) gBattleOutcome |= B_OUTCOME_LOST; - HP_count = 0; - - for (i = 0; i < PARTY_SIZE; i++) + for (HP_count = 0, i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & gBitTable[i]))) @@ -3536,31 +3535,33 @@ static void Cmd_unknown_24(void) if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))) { - s32 foundPlayer = 0, foundOpponent; - for (i = 0; i < gBattlersCount; i += 2) + s32 foundPlayer; + s32 foundOpponent; + + // Impossible to decompile loops. + for (foundPlayer = 0, i = 0; i < gBattlersCount; i += 2) { - if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) + if (HITMARKER_FAINTED2(i) & gHitMarker && !gSpecialStatuses[i].flag40) foundPlayer++; } - foundOpponent = 0; - for (i = 1; i < gBattlersCount; i += 2) + for (foundOpponent = 0, i = 1; i < gBattlersCount; i += 2) { - if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) + if (HITMARKER_FAINTED2(i) & gHitMarker && !gSpecialStatuses[i].flag40) foundOpponent++; } if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (foundOpponent + foundPlayer > 1) - gBattlescriptCurrInstr = (u8*) T2_READ_32(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } else { if (foundOpponent != 0 && foundPlayer != 0) - gBattlescriptCurrInstr = (u8*) T2_READ_32(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } @@ -3570,6 +3571,301 @@ static void Cmd_unknown_24(void) gBattlescriptCurrInstr += 5; } } +#else +NAKED +static void Cmd_unknown_24(void) +{ + asm("\n\ + .syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + movs r6, 0\n\ + ldr r0, =gBattleControllerExecFlags\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + beq _0804ACE2\n\ + b _0804AF22\n\ + _0804ACE2:\n\ + ldr r0, =gBattleTypeFlags\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 15\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0804AD48\n\ + ldr r0, =gPartnerTrainerId\n\ + ldrh r1, [r0]\n\ + ldr r0, =0x00000c03\n\ + cmp r1, r0\n\ + bne _0804AD48\n\ + movs r5, 0\n\ + _0804ACFC:\n\ + movs r0, 0x64\n\ + adds r1, r5, 0\n\ + muls r1, r0\n\ + ldr r0, =gPlayerParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0804AD2C\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0804AD2C\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + adds r0, r6, r0\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + _0804AD2C:\n\ + adds r5, 0x1\n\ + cmp r5, 0x2\n\ + ble _0804ACFC\n\ + b _0804ADA8\n\ + .pool\n\ + _0804AD48:\n\ + movs r5, 0\n\ + _0804AD4A:\n\ + movs r0, 0x64\n\ + adds r1, r5, 0\n\ + muls r1, r0\n\ + ldr r0, =gPlayerParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0804ADA2\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0804ADA2\n\ + ldr r0, =gBattleTypeFlags\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 11\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0804AD94\n\ + ldr r0, =gBattleStruct\n\ + ldr r0, [r0]\n\ + movs r1, 0xA8\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + ldr r2, =gBitTable\n\ + lsls r0, r5, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _0804ADA2\n\ + _0804AD94:\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + adds r0, r6, r0\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + _0804ADA2:\n\ + adds r5, 0x1\n\ + cmp r5, 0x5\n\ + ble _0804AD4A\n\ + _0804ADA8:\n\ + cmp r6, 0\n\ + bne _0804ADB6\n\ + ldr r0, =gBattleOutcome\n\ + ldrb r1, [r0]\n\ + movs r2, 0x2\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ + _0804ADB6:\n\ + movs r6, 0\n\ + movs r5, 0\n\ + _0804ADBA:\n\ + movs r0, 0x64\n\ + adds r1, r5, 0\n\ + muls r1, r0\n\ + ldr r0, =gEnemyParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0804AE10\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0804AE10\n\ + ldr r0, =gBattleTypeFlags\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 11\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0804AE02\n\ + ldr r0, =gBattleStruct\n\ + ldr r0, [r0]\n\ + ldr r1, =0x000002a1\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + ldr r2, =gBitTable\n\ + lsls r0, r5, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _0804AE10\n\ + _0804AE02:\n\ + adds r0, r4, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + adds r0, r6, r0\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + _0804AE10:\n\ + adds r5, 0x1\n\ + cmp r5, 0x5\n\ + ble _0804ADBA\n\ + ldr r2, =gBattleOutcome\n\ + cmp r6, 0\n\ + bne _0804AE24\n\ + ldrb r0, [r2]\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + _0804AE24:\n\ + ldrb r0, [r2]\n\ + cmp r0, 0\n\ + bne _0804AF1A\n\ + ldr r0, =gBattleTypeFlags\n\ + ldr r1, [r0]\n\ + ldr r2, =0x02000002\n\ + ands r1, r2\n\ + mov r8, r0\n\ + cmp r1, 0\n\ + beq _0804AF1A\n\ + movs r3, 0\n\ + movs r5, 0\n\ + ldr r0, =gBattlersCount\n\ + ldrb r1, [r0]\n\ + mov r12, r0\n\ + ldr r7, =gBattlescriptCurrInstr\n\ + cmp r3, r1\n\ + bge _0804AE70\n\ + ldr r0, =gHitMarker\n\ + movs r6, 0x80\n\ + lsls r6, 21\n\ + ldr r4, [r0]\n\ + adds r2, r1, 0\n\ + ldr r1, =gSpecialStatuses\n\ + _0804AE54:\n\ + adds r0, r6, 0\n\ + lsls r0, r5\n\ + ands r0, r4\n\ + cmp r0, 0\n\ + beq _0804AE68\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _0804AE68\n\ + adds r3, 0x1\n\ + _0804AE68:\n\ + adds r1, 0x28\n\ + adds r5, 0x2\n\ + cmp r5, r2\n\ + blt _0804AE54\n\ + _0804AE70:\n\ + movs r2, 0\n\ + movs r5, 0x1\n\ + mov r4, r12\n\ + ldrb r1, [r4]\n\ + cmp r5, r1\n\ + bge _0804AEAA\n\ + ldr r0, =gHitMarker\n\ + movs r4, 0x80\n\ + lsls r4, 21\n\ + mov r12, r4\n\ + ldr r6, [r0]\n\ + ldr r0, =gSpecialStatuses\n\ + adds r4, r1, 0\n\ + adds r1, r0, 0\n\ + adds r1, 0x14\n\ + _0804AE8E:\n\ + mov r0, r12\n\ + lsls r0, r5\n\ + ands r0, r6\n\ + cmp r0, 0\n\ + beq _0804AEA2\n\ + ldrb r0, [r1]\n\ + lsls r0, 25\n\ + cmp r0, 0\n\ + blt _0804AEA2\n\ + adds r2, 0x1\n\ + _0804AEA2:\n\ + adds r1, 0x28\n\ + adds r5, 0x2\n\ + cmp r5, r4\n\ + blt _0804AE8E\n\ + _0804AEAA:\n\ + mov r1, r8\n\ + ldr r0, [r1]\n\ + movs r1, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0804AEF0\n\ + adds r0, r2, r3\n\ + cmp r0, 0x1\n\ + bgt _0804AEF8\n\ + b _0804AF12\n\ + .pool\n\ + _0804AEF0:\n\ + cmp r2, 0\n\ + beq _0804AF12\n\ + cmp r3, 0\n\ + beq _0804AF12\n\ + _0804AEF8:\n\ + ldr r2, [r7]\n\ + ldrb r1, [r2, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + lsls r0, 8\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x3]\n\ + lsls r0, 16\n\ + adds r1, r0\n\ + ldrb r0, [r2, 0x4]\n\ + lsls r0, 24\n\ + adds r1, r0\n\ + str r1, [r7]\n\ + b _0804AF22\n\ + _0804AF12:\n\ + ldr r0, [r7]\n\ + adds r0, 0x5\n\ + str r0, [r7]\n\ + b _0804AF22\n\ + _0804AF1A:\n\ + ldr r1, =gBattlescriptCurrInstr\n\ + ldr r0, [r1]\n\ + adds r0, 0x5\n\ + str r0, [r1]\n\ + _0804AF22:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +} + +#endif // NONMATCHING static void MoveValuesCleanUp(void) { @@ -4661,10 +4957,8 @@ static void Cmd_jumpifcantswitch(void) || (gStatuses3[gActiveBattler] & STATUS3_ROOTED))) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); - return; } - - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { #ifndef NONMATCHING asm("":::"r5"); @@ -5362,21 +5656,21 @@ static void Cmd_yesnoboxlearnmove(void) BattleCreateYesNoCursorAt(0); break; case 1: - if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); } - if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 1; BattleCreateYesNoCursorAt(1); } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); if (gBattleCommunication[1] == 0) @@ -5390,7 +5684,7 @@ static void Cmd_yesnoboxlearnmove(void) gBattleScripting.learnMoveState = 5; } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); gBattleScripting.learnMoveState = 5; @@ -5479,21 +5773,21 @@ static void Cmd_yesnoboxstoplearningmove(void) BattleCreateYesNoCursorAt(0); break; case 1: - if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); } - if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 1; BattleCreateYesNoCursorAt(1); } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); @@ -5504,7 +5798,7 @@ static void Cmd_yesnoboxstoplearningmove(void) HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); @@ -5537,8 +5831,8 @@ static void Cmd_hitanimation(void) static u32 GetTrainerMoneyToGive(u16 trainerId) { u32 i = 0; - u32 moneyReward; - u8 lastMonLevel = 0; + u32 lastMonLevel = 0; + u32 moneyReward = 0; if (trainerId == TRAINER_SECRET_BASE) { @@ -5774,28 +6068,28 @@ static void Cmd_yesnobox(void) BattleCreateYesNoCursorAt(0); break; case 1: - if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); } - if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 1; BattleCreateYesNoCursorAt(1); } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { gBattleCommunication[CURSOR_POSITION] = 1; PlaySE(SE_SELECT); HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); gBattlescriptCurrInstr++; } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); @@ -6038,7 +6332,7 @@ static void PutLevelAndGenderOnLvlUpBox(void) printerTemplate.currentY = 0; printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = TEXT_COLOR_WHITE; printerTemplate.bgColor = TEXT_COLOR_TRANSPARENT; printerTemplate.shadowColor = TEXT_COLOR_DARK_GREY; @@ -7129,12 +7423,18 @@ static void Cmd_forcerandomswitch(void) s32 i; s32 battler1PartyId = 0; s32 battler2PartyId = 0; - s32 firstMonId; - s32 lastMonId = 0; // + 1 - s32 monsCount; + + #ifdef NONMATCHING + s32 lastMonId = 0; // + 1 + #else + register s32 lastMonId asm("r8") = 0; // + 1 + #endif // NONMATCHING + + s32 firstMonId = 0; + s32 monsCount = 0; struct Pokemon* party = NULL; s32 validMons = 0; - s32 minNeeded; + s32 minNeeded = 0; if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)) { @@ -7246,14 +7546,14 @@ static void Cmd_forcerandomswitch(void) { do { - do - { - i = Random() % monsCount; - i += firstMonId; - } while (i == battler2PartyId || i == battler1PartyId); - } while (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE + i = Random() % monsCount; + i += firstMonId; + } + while (i == battler2PartyId + || i == battler1PartyId + || GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE - || GetMonData(&party[i], MON_DATA_HP) == 0); // Should be one while loop, conjoined by an ||, but that doesn't match. Equivalent logic though + || GetMonData(&party[i], MON_DATA_HP) == 0); } *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i; @@ -10072,21 +10372,21 @@ static void Cmd_trygivecaughtmonnick(void) BattleCreateYesNoCursorAt(0); break; case 1: - if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); } - if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 1; BattleCreateYesNoCursorAt(1); } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); if (gBattleCommunication[CURSOR_POSITION] == 0) @@ -10099,7 +10399,7 @@ static void Cmd_trygivecaughtmonnick(void) gBattleCommunication[MULTIUSE_STATE] = 4; } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); gBattleCommunication[MULTIUSE_STATE] = 4; diff --git a/src/battle_tower.c b/src/battle_tower.c index e0ff3fe26a..0333c4397d 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1447,7 +1447,7 @@ u8 GetFrontierOpponentClass(u16 trainerId) } else if (trainerId == TRAINER_FRONTIER_BRAIN) { - return GetFrontierBrainTrainerClass(); // This sticks out like a sore thumb, but this is the only other way that matches. Maybe it SHOULD be assigned to ret, or all early returns. I don't know. + trainerClass = GetFrontierBrainTrainerClass(); } else if (trainerId == TRAINER_STEVEN_PARTNER) { @@ -1466,6 +1466,9 @@ u8 GetFrontierOpponentClass(u16 trainerId) else { trainerClass = gFacilityClassToTrainerClass[gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].facilityClass]; + #ifndef NONMATCHING + asm(""); + #endif } } else @@ -1477,6 +1480,9 @@ u8 GetFrontierOpponentClass(u16 trainerId) else { trainerClass = gFacilityClassToTrainerClass[gApprentices[gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id].facilityClass]; + #ifndef NONMATCHING + asm(""); + #endif } } diff --git a/src/battle_transition.c b/src/battle_transition.c index 4a9d263031..559279e740 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -3973,8 +3973,11 @@ static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task) for (i = 0; i < 160; i++, var6 += var8) { - const u16 index = var6 >> 8; - gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index & 0xff, amplitude); + s16 index = var6 / 256; + #ifndef NONMATCHING + asm(""); + #endif + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index, amplitude); } if (++task->tData3 == 101) diff --git a/src/battle_tv.c b/src/battle_tv.c index e3dec9a6cf..c84ae827b0 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -713,18 +713,20 @@ void BattleTv_SetDataBasedOnAnimation(u8 animationId) } } +#ifdef NONMATCHING +// for loop has an unused stack variable void TryPutLinkBattleTvShowOnAir(void) { - u16 playerBestSpecies = 0, opponentBestSpecies = 0, moveId = 0; - s16 sum = 0, playerBestSum = 0, opponentBestSum = SHRT_MAX; + u16 playerBestSpecies = 0, opponentBestSpecies = 0; + s16 playerBestSum = 0, opponentBestSum = SHRT_MAX; u8 playerBestMonId = 0, opponentBestMonId = 0; struct BattleTvMovePoints *movePoints = NULL; u8 countPlayer = 0, countOpponent = 0; - u16 species; + s16 sum = 0; + u16 species = 0; + u16 moveId = 0; s32 i, j; - int zero = 0, one = 1; // stupid variables needed to match. Feel free to get rid of them. - if (gBattleStruct->anyMonHasTransformed) return; @@ -746,7 +748,7 @@ void TryPutLinkBattleTvShowOnAir(void) if (species != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG, NULL)) { for (sum = 0, j = 0; j < MAX_MON_MOVES; j++) - sum += movePoints->points[zero][i * 4 + j]; + sum += movePoints->points[0][i * 4 + j]; if (playerBestSum < sum) { @@ -760,7 +762,7 @@ void TryPutLinkBattleTvShowOnAir(void) if (species != SPECIES_NONE && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG, NULL)) { for (sum = 0, j = 0; j < MAX_MON_MOVES; j++) - sum += movePoints->points[one][i * 4 + j]; + sum += movePoints->points[1][i * 4 + j]; if (opponentBestSum == sum) { @@ -782,9 +784,9 @@ void TryPutLinkBattleTvShowOnAir(void) for (sum = 0, i = 0, j = 0; j < MAX_MON_MOVES; j++) { - if (sum < movePoints->points[zero][playerBestMonId * 4 + j]) + if (sum < movePoints->points[0][playerBestMonId * 4 + j]) { - sum = movePoints->points[zero][playerBestMonId * 4 + j]; + sum = movePoints->points[0][playerBestMonId * 4 + j]; i = j; } } @@ -808,6 +810,333 @@ void TryPutLinkBattleTvShowOnAir(void) } } +#else +NAKED +void TryPutLinkBattleTvShowOnAir(void) +{ + asm_unified( + "push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r1, 0\n\ + str r1, [sp, 0x4]\n\ + movs r2, 0\n\ + str r2, [sp, 0x8]\n\ + ldr r3, =0x00007fff\n\ + str r3, [sp, 0xC]\n\ + movs r4, 0\n\ + str r4, [sp, 0x10]\n\ + movs r7, 0\n\ + str r7, [sp, 0x14]\n\ + mov r8, r0\n\ + ldr r0, =gBattleStruct\n\ + ldr r1, [r0]\n\ + adds r0, r1, 0\n\ + adds r0, 0xB3\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _0817E42A\n\ + b _0817E670\n\ +_0817E42A:\n\ + movs r2, 0xD2\n\ + lsls r2, 1\n\ + adds r2, r1\n\ + mov r10, r2\n\ + movs r6, 0\n\ +_0817E434:\n\ + movs r0, 0x64\n\ + adds r4, r6, 0\n\ + muls r4, r0\n\ + ldr r0, =gPlayerParty\n\ + adds r0, r4, r0\n\ + movs r1, 0xB\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0817E454\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ +_0817E454:\n\ + ldr r5, =gEnemyParty\n\ + adds r0, r4, r5\n\ + movs r1, 0xB\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0817E46A\n\ + adds r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ +_0817E46A:\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _0817E434\n\ + ldr r0, =gBattleTypeFlags\n\ + ldr r0, [r0]\n\ + movs r1, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0817E47E\n\ + b _0817E670\n\ +_0817E47E:\n\ + cmp r8, r7\n\ + beq _0817E484\n\ + b _0817E670\n\ +_0817E484:\n\ + movs r6, 0\n\ + lsls r3, r6, 1\n\ + str r3, [sp, 0x18]\n\ + movs r4, 0x64\n\ + mov r8, r4\n\ +_0817E48E:\n\ + mov r1, r8\n\ + muls r1, r6\n\ + ldr r0, =gPlayerParty\n\ + adds r4, r1, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + movs r2, 0\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + adds r0, r6, 0x1\n\ + mov r9, r0\n\ + cmp r7, 0\n\ + beq _0817E4EE\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0817E4EE\n\ + movs r4, 0\n\ + lsls r0, r6, 3\n\ + mov r2, r10\n\ + adds r1, r0, r2\n\ + movs r3, 0x3\n\ +_0817E4C4:\n\ + lsls r0, r4, 16\n\ + asrs r0, 16\n\ + ldrh r4, [r1]\n\ + adds r0, r4\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + adds r1, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _0817E4C4\n\ + ldr r1, [sp, 0x8]\n\ + lsls r0, r1, 16\n\ + lsls r1, r4, 16\n\ + cmp r0, r1\n\ + bge _0817E4EE\n\ + lsls r0, r6, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x10]\n\ + lsrs r1, 16\n\ + str r1, [sp, 0x8]\n\ + str r7, [sp]\n\ +_0817E4EE:\n\ + mov r0, r8\n\ + muls r0, r6\n\ + ldr r2, =gEnemyParty\n\ + adds r4, r0, r2\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + movs r2, 0\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + ldr r3, [sp, 0x8]\n\ + lsls r3, 16\n\ + str r3, [sp, 0x1C]\n\ + cmp r7, 0\n\ + beq _0817E5A0\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0817E5A0\n\ + movs r4, 0\n\ + ldr r0, [sp, 0xC]\n\ + lsls r2, r0, 16\n\ + movs r3, 0x1\n\ + lsls r1, r3, 1\n\ + adds r1, 0x1\n\ + lsls r1, 4\n\ + lsls r0, r6, 3\n\ + adds r0, r1\n\ + mov r3, r10\n\ + adds r1, r0, r3\n\ + movs r3, 0x3\n\ +_0817E534:\n\ + lsls r0, r4, 16\n\ + asrs r0, 16\n\ + ldrh r4, [r1]\n\ + adds r0, r4\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + adds r1, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _0817E534\n\ + asrs r1, r2, 16\n\ + lsls r5, r4, 16\n\ + asrs r0, r5, 16\n\ + cmp r1, r0\n\ + bne _0817E590\n\ + mov r0, r8\n\ + muls r0, r6\n\ + ldr r1, =gEnemyParty\n\ + adds r0, r1\n\ + movs r1, 0x19\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + ldr r2, [sp, 0x14]\n\ + mov r0, r8\n\ + muls r0, r2\n\ + ldr r3, =gEnemyParty\n\ + adds r0, r3\n\ + movs r1, 0x19\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r4, r0\n\ + bls _0817E5A0\n\ + b _0817E594\n\ + .pool\n\ +_0817E590:\n\ + cmp r1, r0\n\ + ble _0817E5A0\n\ +_0817E594:\n\ + lsls r0, r6, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x14]\n\ + lsrs r5, 16\n\ + str r5, [sp, 0xC]\n\ + str r7, [sp, 0x4]\n\ +_0817E5A0:\n\ + mov r6, r9\n\ + cmp r6, 0x5\n\ + bgt _0817E5A8\n\ + b _0817E48E\n\ +_0817E5A8:\n\ + movs r4, 0\n\ + movs r6, 0\n\ + movs r3, 0\n\ + ldr r5, =gPlayerParty\n\ + ldr r7, [sp, 0x10]\n\ + lsls r0, r7, 3\n\ + mov r1, r10\n\ + adds r2, r0, r1\n\ +_0817E5B8:\n\ + lsls r0, r4, 16\n\ + asrs r0, 16\n\ + movs r7, 0\n\ + ldrsh r1, [r2, r7]\n\ + cmp r0, r1\n\ + bge _0817E5C8\n\ + ldrh r4, [r2]\n\ + adds r6, r3, 0\n\ +_0817E5C8:\n\ + adds r2, 0x2\n\ + adds r3, 0x1\n\ + cmp r3, 0x3\n\ + ble _0817E5B8\n\ + movs r0, 0x64\n\ + ldr r1, [sp, 0x10]\n\ + muls r0, r1\n\ + adds r0, r5\n\ + adds r1, r6, 0\n\ + adds r1, 0xD\n\ + movs r2, 0\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + ldr r2, [sp, 0x1C]\n\ + cmp r2, 0\n\ + beq _0817E670\n\ + cmp r4, 0\n\ + beq _0817E670\n\ + ldr r0, =gBattleTypeFlags\n\ + ldr r0, [r0]\n\ + movs r1, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0817E65C\n\ + ldr r3, [sp, 0x10]\n\ + cmp r3, 0x2\n\ + bhi _0817E620\n\ + ldr r0, =gBattleScripting\n\ + adds r0, 0x25\n\ + ldrb r0, [r0]\n\ + bl GetLinkTrainerFlankId\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + beq _0817E630\n\ + b _0817E670\n\ + .pool\n\ +_0817E620:\n\ + ldr r0, =gBattleScripting\n\ + adds r0, 0x25\n\ + ldrb r0, [r0]\n\ + bl GetLinkTrainerFlankId\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + beq _0817E670\n\ +_0817E630:\n\ + movs r3, 0\n\ + ldr r7, [sp, 0x14]\n\ + cmp r7, 0x2\n\ + bls _0817E63A\n\ + movs r3, 0x1\n\ +_0817E63A:\n\ + lsls r0, r3, 24\n\ + lsrs r0, 24\n\ + ldr r1, =gBattleScripting\n\ + adds r1, 0x25\n\ + ldrb r1, [r1]\n\ + bl sub_806EF84\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r1, r4, 0\n\ + ldr r2, [sp]\n\ + ldr r3, [sp, 0x4]\n\ + bl PutBattleUpdateOnTheAir\n\ + b _0817E670\n\ + .pool\n\ +_0817E65C:\n\ + ldr r0, =gBattleScripting\n\ + adds r0, 0x25\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + eors r0, r1\n\ + adds r1, r4, 0\n\ + ldr r2, [sp]\n\ + ldr r3, [sp, 0x4]\n\ + bl PutBattleUpdateOnTheAir\n\ +_0817E670:\n\ + add sp, 0x20\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); +} +#endif + static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) { struct BattleTvMovePoints *movePoints = &gBattleStruct->tvMovePoints; diff --git a/src/battle_util.c b/src/battle_util.c index eb3907157a..699fd05bc8 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1,19 +1,21 @@ #include "global.h" #include "battle.h" -#include "battle_util.h" #include "battle_anim.h" #include "pokemon.h" #include "item.h" #include "util.h" #include "battle_scripts.h" #include "random.h" +#include "text.h" #include "string_util.h" +#include "battle_message.h" #include "battle_ai_script_commands.h" #include "battle_controllers.h" #include "event_data.h" #include "link.h" #include "field_weather.h" #include "constants/abilities.h" +#include "constants/battle_anim.h" #include "constants/battle_move_effects.h" #include "constants/battle_script_commands.h" #include "constants/battle_string_ids.h" @@ -23,615 +25,6 @@ #include "constants/moves.h" #include "constants/species.h" #include "constants/weather.h" -#include "battle_arena.h" -#include "battle_pyramid.h" -#include "international_string_util.h" -#include "safari_zone.h" -#include "sound.h" -#include "task.h" -#include "trig.h" -#include "window.h" -#include "constants/songs.h" - -extern const u8 *const gBattleScriptsForMoveEffects[]; -extern const u8 *const gBattlescriptsForBallThrow[]; -extern const u8 *const gBattlescriptsForRunningByItem[]; -extern const u8 *const gBattlescriptsForUsingItem[]; -extern const u8 *const gBattlescriptsForSafariActions[]; - -static const u8 sPkblToEscapeFactor[][3] = {{0, 0, 0}, {3, 5, 0}, {2, 3, 0}, {1, 2, 0}, {1, 1, 0}}; -static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1}; -static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4}; - -void HandleAction_UseMove(void) -{ - u8 side; - u8 var = 4; - - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - - if (*(&gBattleStruct->field_91) & gBitTable[gBattlerAttacker]) - { - gCurrentActionFuncId = B_ACTION_FINISHED; - return; - } - - gCritMultiplier = 1; - gBattleScripting.dmgMultiplier = 1; - gBattleStruct->atkCancellerTracker = 0; - gMoveResultFlags = 0; - gMultiHitCounter = 0; - gBattleCommunication[6] = 0; - gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker); - - // choose move - if (gProtectStructs[gBattlerAttacker].noValidMoves) - { - gProtectStructs[gBattlerAttacker].noValidMoves = 0; - gCurrentMove = gChosenMove = MOVE_STRUGGLE; - gHitMarker |= HITMARKER_NO_PPDEDUCT; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0); - } - else if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE) - { - gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker]; - } - // encore forces you to use the same move - else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE - && gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) - { - gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove; - gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); - } - // check if the encored move wasn't overwritten - else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE - && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) - { - gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; - gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; - gDisableStructs[gBattlerAttacker].encoredMove = MOVE_NONE; - gDisableStructs[gBattlerAttacker].encoredMovePos = 0; - gDisableStructs[gBattlerAttacker].encoreTimer = 0; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); - } - else if (gBattleMons[gBattlerAttacker].moves[gCurrMovePos] != gChosenMoveByBattler[gBattlerAttacker]) - { - gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); - } - else - { - gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; - } - - if (gBattleMons[gBattlerAttacker].hp != 0) - { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - gBattleResults.lastUsedMovePlayer = gCurrentMove; - else - gBattleResults.lastUsedMoveOpponent = gCurrentMove; - } - - // choose target - side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; - if (gSideTimers[side].followmeTimer != 0 - && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED - && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget) - && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) - { - gBattlerTarget = gSideTimers[side].followmeTarget; - } - else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && gSideTimers[side].followmeTimer == 0 - && (gBattleMoves[gCurrentMove].power != 0 - || gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER) - && gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD - && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) - { - side = GetBattlerSide(gBattlerAttacker); - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (side != GetBattlerSide(gActiveBattler) - && *(gBattleStruct->moveTarget + gBattlerAttacker) != gActiveBattler - && gBattleMons[gActiveBattler].ability == ABILITY_LIGHTNING_ROD - && GetBattlerTurnOrderNum(gActiveBattler) < var) - { - var = GetBattlerTurnOrderNum(gActiveBattler); - } - } - if (var == 4) - { - if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) - { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - } - else - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - } - } - else - { - gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); - } - - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - { - if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) - { - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); - } - else - { - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); - } - } - } - else - { - gActiveBattler = gBattlerByTurnOrder[var]; - RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability); - gSpecialStatuses[gActiveBattler].lightningRodRedirected = 1; - gBattlerTarget = gActiveBattler; - } - } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) - { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - } - else - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - } - - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget] - && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) - { - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); - } - } - else - { - gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - { - if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) - { - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); - } - else - { - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); - } - } - } - - // choose battlescript - if (gBattleTypeFlags & BATTLE_TYPE_PALACE - && gProtectStructs[gBattlerAttacker].palaceUnableToUseMove) - { - if (gBattleMons[gBattlerAttacker].hp == 0) - { - gCurrentActionFuncId = B_ACTION_FINISHED; - return; - } - else if (gPalaceSelectionBattleScripts[gBattlerAttacker] != NULL) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - gBattlescriptCurrInstr = gPalaceSelectionBattleScripts[gBattlerAttacker]; - gPalaceSelectionBattleScripts[gBattlerAttacker] = NULL; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; - } - } - else - { - gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; - } - - if (gBattleTypeFlags & BATTLE_TYPE_ARENA) - BattleArena_AddMindPoints(gBattlerAttacker); - - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -void HandleAction_Switch(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gActionSelectionCursor[gBattlerAttacker] = 0; - gMoveSelectionCursor[gBattlerAttacker] = 0; - - PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->field_58 + gBattlerAttacker)) - - gBattleScripting.battler = gBattlerAttacker; - gBattlescriptCurrInstr = BattleScript_ActionSwitch; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; - - if (gBattleResults.playerSwitchesCounter < 255) - gBattleResults.playerSwitchesCounter++; -} - -void HandleAction_UseItem(void) -{ - gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - - ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); - - gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8); - - if (gLastUsedItem <= LAST_BALL) // is ball - { - gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem]; - } - else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL) - { - gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; - } - else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; - } - else - { - gBattleScripting.battler = gBattlerAttacker; - - switch (*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))) - { - case AI_ITEM_FULL_RESTORE: - case AI_ITEM_HEAL_HP: - break; - case AI_ITEM_CURE_CONDITION: - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 1) - { - if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 0x3E) - gBattleCommunication[MULTISTRING_CHOOSER] = 5; - } - else - { - do - { - *(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) >>= 1; - gBattleCommunication[MULTISTRING_CHOOSER]++; - } while (!(*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 1)); - } - break; - case AI_ITEM_X_STAT: - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 0x80) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 5; - } - else - { - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK) - PREPARE_STRING_BUFFER(gBattleTextBuff2, CHAR_X) - - while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1)) - { - *(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) >>= 1; - gBattleTextBuff1[2]++; - } - - gBattleScripting.animArg1 = gBattleTextBuff1[2] + 14; - gBattleScripting.animArg2 = 0; - } - break; - case AI_ITEM_GUARD_SPECS: - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - break; - } - - gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))]; - } - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -bool8 TryRunFromBattle(u8 battler) -{ - bool8 effect = FALSE; - u8 holdEffect; - u8 pyramidMultiplier; - u8 speedVar; - - if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY) - holdEffect = gEnigmaBerries[battler].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(gBattleMons[battler].item); - - gPotentialItemEffectBattler = battler; - - if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) - { - gLastUsedItem = gBattleMons[battler].item; - gProtectStructs[battler].fleeFlag = 1; - effect++; - } - else if (gBattleMons[battler].ability == ABILITY_RUN_AWAY) - { - if (InBattlePyramid()) - { - gBattleStruct->runTries++; - pyramidMultiplier = GetPyramidRunMultiplier(); - speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); - if (speedVar > (Random() & 0xFF)) - { - gLastUsedAbility = ABILITY_RUN_AWAY; - gProtectStructs[battler].fleeFlag = 2; - effect++; - } - } - else - { - gLastUsedAbility = ABILITY_RUN_AWAY; - gProtectStructs[battler].fleeFlag = 2; - effect++; - } - } - else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_TRAINER_HILL) && gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - effect++; - } - else - { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - if (InBattlePyramid()) - { - pyramidMultiplier = GetPyramidRunMultiplier(); - speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); - if (speedVar > (Random() & 0xFF)) - effect++; - } - else if (gBattleMons[battler].speed < gBattleMons[BATTLE_OPPOSITE(battler)].speed) - { - speedVar = (gBattleMons[battler].speed * 128) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); - if (speedVar > (Random() & 0xFF)) - effect++; - } - else // same speed or faster - { - effect++; - } - } - - gBattleStruct->runTries++; - } - - if (effect) - { - gCurrentTurnActionNumber = gBattlersCount; - gBattleOutcome = B_OUTCOME_RAN; - } - - return effect; -} - -void HandleAction_Run(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - - if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) - { - gCurrentTurnActionNumber = gBattlersCount; - - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) - gBattleOutcome |= B_OUTCOME_LOST; - } - else - { - if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) - gBattleOutcome |= B_OUTCOME_WON; - } - } - - gBattleOutcome |= B_OUTCOME_LINK_BATTLE_RAN; - gSaveBlock2Ptr->frontier.disableRecordBattle = TRUE; - } - else - { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - if (!TryRunFromBattle(gBattlerAttacker)) // failed to run away - { - ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; - } - } - else - { - if (gBattleMons[gBattlerAttacker].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; - } - else - { - gCurrentTurnActionNumber = gBattlersCount; - gBattleOutcome = B_OUTCOME_MON_FLED; - } - } - } -} - -void HandleAction_WatchesCarefully(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0]; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -void HandleAction_SafariZoneBallThrow(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gNumSafariBalls--; - gLastUsedItem = ITEM_SAFARI_BALL; - gBattlescriptCurrInstr = gBattlescriptsForBallThrow[ITEM_SAFARI_BALL]; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -void HandleAction_ThrowPokeblock(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBattlerAttacker][1] - 1; - gLastUsedItem = gBattleBufferB[gBattlerAttacker][2]; - - if (gBattleResults.pokeblockThrows < 0xFF) - gBattleResults.pokeblockThrows++; - if (gBattleStruct->safariPkblThrowCounter < 3) - gBattleStruct->safariPkblThrowCounter++; - if (gBattleStruct->safariEscapeFactor > 1) - { - if (gBattleStruct->safariEscapeFactor < sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]) - gBattleStruct->safariEscapeFactor = 1; - else - gBattleStruct->safariEscapeFactor -= sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]; - } - - gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2]; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -void HandleAction_GoNear(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - - gBattleStruct->safariCatchFactor += sGoNearCounterToCatchFactor[gBattleStruct->safariGoNearCounter]; - if (gBattleStruct->safariCatchFactor > 20) - gBattleStruct->safariCatchFactor = 20; - - gBattleStruct->safariEscapeFactor += sGoNearCounterToEscapeFactor[gBattleStruct->safariGoNearCounter]; - if (gBattleStruct->safariEscapeFactor > 20) - gBattleStruct->safariEscapeFactor = 20; - - if (gBattleStruct->safariGoNearCounter < 3) - { - gBattleStruct->safariGoNearCounter++; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = 1; // Can't get closer. - } - gBattlescriptCurrInstr = gBattlescriptsForSafariActions[1]; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -void HandleAction_SafariZoneRun(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - PlaySE(SE_FLEE); - gCurrentTurnActionNumber = gBattlersCount; - gBattleOutcome = B_OUTCOME_RAN; -} - -void HandleAction_WallyBallThrow(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - - PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]) - - gBattlescriptCurrInstr = gBattlescriptsForSafariActions[3]; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; - gActionsByTurnOrder[1] = B_ACTION_FINISHED; -} - -void HandleAction_TryFinish(void) -{ - if (!HandleFaintedMonActions()) - { - gBattleStruct->faintedActionsState = 0; - gCurrentActionFuncId = B_ACTION_FINISHED; - } -} - -void HandleAction_NothingIsFainted(void) -{ - gCurrentTurnActionNumber++; - gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; - gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR - | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 - | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT - | HITMARKER_CHARGING | HITMARKER_x4000000); -} - -void HandleAction_ActionFinished(void) -{ - *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = 6; - gCurrentTurnActionNumber++; - gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; - SpecialStatusesClear(); - gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR - | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 - | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT - | HITMARKER_CHARGING | HITMARKER_x4000000); - - gCurrentMove = 0; - gBattleMoveDamage = 0; - gMoveResultFlags = 0; - gBattleScripting.animTurn = 0; - gBattleScripting.animTargetsHit = 0; - gLastLandedMoves[gBattlerAttacker] = 0; - gLastHitByType[gBattlerAttacker] = 0; - gBattleStruct->dynamicMoveType = 0; - gDynamicBasePower = 0; - gBattleScripting.moveendState = 0; - gBattleCommunication[3] = 0; - gBattleCommunication[4] = 0; - gBattleScripting.multihitMoveEffect = 0; - gBattleResources->battleScriptsStack->size = 0; -} // rom const data static const u16 sSoundMovesTable[] = @@ -2241,8 +1634,16 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) } else { + // FIXME: Compiler insists on moving r4 into r1 before doing the eor. + #ifndef NONMATCHING + register u32 var asm("r1"); + #else + u32 var; + #endif // NONMATCHING + party = gEnemyParty; - if (battler == 1) + var = battler ^ BIT_SIDE; + if (var == 0) id1 = 0; else id1 = 1; diff --git a/src/berry.c b/src/berry.c index d70e8c3537..98264f37b8 100644 --- a/src/berry.c +++ b/src/berry.c @@ -1331,7 +1331,7 @@ void ResetBerryTreeSparkleFlags(void) s16 bottom; int i; - GetCameraCoords((u16*)&cam_left, (u16*)&cam_top); + GetCameraCoords(&cam_left, &cam_top); left = cam_left; top = cam_top + 3; right = cam_left + 14; diff --git a/src/berry_blender.c b/src/berry_blender.c index 2cdb841ee1..16ba42bd72 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -168,8 +168,8 @@ struct BerryBlender u16 progressBarValue; u16 maxProgressBarValue; u16 centerScale; - s16 bg_X; - s16 bg_Y; + u16 bg_X; + u16 bg_Y; u8 opponentTaskIds[BLENDER_MAX_PLAYERS - 1]; u8 perfectOpponents; // for debugging, NPCs will always hit Best u16 scores[BLENDER_MAX_PLAYERS][NUM_SCORE_TYPES]; @@ -3387,13 +3387,13 @@ static void RestoreBgCoord(s16* coord) // For "unshaking" the screen after ShakeBgCoordForHit is called static void RestoreBgCoords(void) { - RestoreBgCoord((s16 *)&sBerryBlender->bg_X); - RestoreBgCoord((s16 *)&sBerryBlender->bg_Y); + RestoreBgCoord(&sBerryBlender->bg_X); + RestoreBgCoord(&sBerryBlender->bg_Y); } static void BlenderLandShakeBgCoord(s16* coord, u16 timer) { - u8 strength; + s32 strength; if (timer < 10) strength = 16; diff --git a/src/berry_crush.c b/src/berry_crush.c index 2175d2abbb..96b00ba2bf 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -146,49 +146,38 @@ struct BerryCrushGame { MainCallback unk0; u32 (* unk4)(struct BerryCrushGame *, u8 *); - u8 unk8; u8 unk9; u8 unkA; u8 unkB; - u8 unkC; u8 unkD; - u8 unkE; u8 unkF; - u16 unk10; u16 unk12; u16 unk14; - u16 unk16; s16 unk18; s16 unk1A; - s32 unk1C; + int unk1C; s32 unk20; u8 unk24; - u8 unk25_0:1; u8 unk25_1:1; u8 unk25_2:1; u8 unk25_3:1; u8 unk25_4:1; u8 unk25_5:3; - u16 unk26; - u16 unk28; s16 unk2A; s16 unk2C; - s16 unk2E; s16 unk30; s16 unk32; s16 unk34; - u8 unk36[0xA]; - struct BerryCrushGame_40 unk40; struct BerryCrushGame_5C unk5C; union BerryCrushGame_68 unk68; @@ -215,7 +204,7 @@ void sub_8022524(struct BerryCrushGame_138 *, u16); void sub_8022B28(struct Sprite *); void sub_8022554(struct BerryCrushGame_138 *r0); void sub_8024578(struct BerryCrushGame *); -void sub_8024644(u8 *, u8, u8, u16, u8); +void sub_8024644(u8 *, u32, u32, u32, u32); static void sub_8022A20(struct Sprite *sprite); static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame *r6, u8 *r1); static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5); @@ -1676,7 +1665,7 @@ static void Task_ShowBerryCrushRankings(u8 taskId) CopyWindowToVram(data[1], 3); break; case 2: - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) break; else return; @@ -1997,29 +1986,29 @@ static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame *game, // byte 9: if TRUE, communicate on fade complete u16 color; - u32 selectedPals[2]; + u32 selectedPals; + selectedPals = ({ +#ifndef NONMATCHING + register u32 value asm("r2"); + register u32 b asm("r3"); +#else + u32 value; + u32 b; +#endif //NONMATCHING + value = params[0] << 0; + value |= (b = params[1] << 8); + value |= (b = params[2] << 16); + value |= (b = params[3] << 24); + value; + }); - selectedPals[0] = (u32)params[0]; - selectedPals[1] = (u32)params[1]; - selectedPals[1] <<= 8; - - selectedPals[0] |= selectedPals[1]; - selectedPals[1] = (u32)params[2]; - selectedPals[1] <<= 16; - - selectedPals[0] |= selectedPals[1]; - selectedPals[1] = (u32)params[3]; - selectedPals[1] <<= 24; - - selectedPals[0] |= selectedPals[1]; params[0] = params[9]; - color = params[8]; - color <<= 8; - color |= params[7]; + color = params[8] << 8; + color |= params[7] << 0; gPaletteFade.bufferTransferDisabled = FALSE; - BeginNormalPaletteFade(selectedPals[0], params[4], params[5], params[6], color); + BeginNormalPaletteFade(selectedPals, params[4], params[5], params[6], color); UpdatePaletteFade(); game->unkE = 2; return 0; @@ -2401,7 +2390,7 @@ void sub_802339C(struct BerryCrushGame *r4) } } } - if (r8 >= 2) + if (r8 > 1) { for (r7 = 0; r7 < r4->unk9; ++r7) { @@ -2509,9 +2498,9 @@ void sub_8023558(struct BerryCrushGame *r3) void sub_80236B8(struct BerryCrushGame *r5) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) r5->unk5C.unk02_2 = 1; - if (JOY_HELD(A_BUTTON)) + if (gMain.heldKeys & A_BUTTON) { if (r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5] < r5->unk28) ++r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5]; @@ -2591,7 +2580,6 @@ void sub_802385C(struct BerryCrushGame *r5) for (r4 = 0; r4 < r5->unk9; ++r4) r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0; #endif - if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET || gRecvCmds[0][1] != 2) { @@ -2978,7 +2966,7 @@ static u32 sub_8024048(struct BerryCrushGame *r5, u8 *r6) --r5->unk138.unk0; return 0; } - if (!(JOY_NEW(A_BUTTON))) + if (!(gMain.newKeys & A_BUTTON)) return 0; PlaySE(SE_SELECT); sub_802222C(r5); @@ -3281,11 +3269,14 @@ static void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter, params[9] = communicateAfter; } -void sub_8024644(u8 *r0, u8 r1, u8 r2, u16 r3, u8 r5) +void sub_8024644(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5) { + u8 sp[4]; + + 0[(u16 *)sp] = r3; r0[0] = r1; r0[1] = r2; - r0[2] = ((u8 *)&r3)[0]; - r0[3] = ((u8 *)&r3)[1]; + r0[2] = sp[0]; + r0[3] = sp[1]; r0[4] = r5; } diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index 4c4a010b22..dcc21d0368 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -190,13 +190,13 @@ static void berry_fix_main(void) berry_fix_mb_manager->state = 1; break; case 1: - if (berry_fix_text_update(5) == 5 && (JOY_NEW(A_BUTTON))) + if (berry_fix_text_update(5) == 5 && (gMain.newKeys & A_BUTTON)) { berry_fix_mb_manager->state = 2; } break; case 2: - if (berry_fix_text_update(0) == 0 && (JOY_NEW(A_BUTTON))) + if (berry_fix_text_update(0) == 0 && (gMain.newKeys & A_BUTTON)) { berry_fix_mb_manager->state = 3; } @@ -235,13 +235,13 @@ static void berry_fix_main(void) } break; case 6: - if (berry_fix_text_update(3) == 3 && JOY_NEW(A_BUTTON)) + if (berry_fix_text_update(3) == 3 && gMain.newKeys & A_BUTTON) { DoSoftReset(); } break; case 7: - if (berry_fix_text_update(4) == 4 && JOY_NEW(A_BUTTON)) + if (berry_fix_text_update(4) == 4 && gMain.newKeys & A_BUTTON) { berry_fix_mb_manager->state = 1; } diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 089228b17b..e5c89bdb71 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -536,12 +536,12 @@ static void Task_HandleInput(u8 taskId) { if (!gPaletteFade.active) { - u16 arrowKeys = JOY_REPEAT(DPAD_ANY); + u16 arrowKeys = gMain.newAndRepeatedKeys & DPAD_ANY; if (arrowKeys == DPAD_UP) TryChangeDisplayedBerry(taskId, -1); else if (arrowKeys == DPAD_DOWN) TryChangeDisplayedBerry(taskId, 1); - else if (JOY_NEW(A_BUTTON | B_BUTTON)) + else if (gMain.newKeys & (A_BUTTON | B_BUTTON)) PrepareToCloseBerryTagScreen(taskId); } } diff --git a/src/cable_club.c b/src/cable_club.c index f02683c9d1..93f87ec9bd 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -163,7 +163,7 @@ static bool32 CheckLinkErrored(u8 taskId) static bool32 CheckLinkCanceledBeforeConnection(u8 taskId) { - if ((JOY_NEW(B_BUTTON)) + if ((gMain.newKeys & B_BUTTON) && IsLinkConnectionEstablished() == FALSE) { gLinkType = 0; @@ -178,7 +178,7 @@ static bool32 CheckLinkCanceled(u8 taskId) if (IsLinkConnectionEstablished()) SetSuppressLinkErrorMessage(TRUE); - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { gLinkType = 0; gTasks[taskId].func = Task_LinkupFailed; @@ -277,7 +277,7 @@ static void Task_LinkupAwaitConfirmation(u8 taskId) UpdateLinkPlayerCountDisplay(taskId, linkPlayerCount); - if (!(JOY_NEW(A_BUTTON))) + if (!(gMain.newKeys & A_BUTTON)) return; if (linkPlayerCount < tMinPlayers) @@ -304,12 +304,12 @@ static void Task_LinkupTryConfirmation(u8 taskId) ShowFieldAutoScrollMessage(gText_ConfirmLinkWhenPlayersReady); gTasks[taskId].func = Task_LinkupConfirmWhenReady; } - else if (JOY_HELD(B_BUTTON)) + else if (gMain.heldKeys & B_BUTTON) { ShowFieldAutoScrollMessage(gText_ConfirmLinkWhenPlayersReady); gTasks[taskId].func = Task_LinkupConfirmWhenReady; } - else if (JOY_HELD(A_BUTTON)) + else if (gMain.heldKeys & A_BUTTON) { PlaySE(SE_SELECT); CheckShouldAdvanceLinkState(); diff --git a/src/confetti_util.c b/src/confetti_util.c index 6d47700567..3bda3ab539 100644 --- a/src/confetti_util.c +++ b/src/confetti_util.c @@ -30,8 +30,10 @@ static void sub_81520A8(void *dest, u16 value, u8 left, u8 top, u8 width, u8 hei static void sub_8152134(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height) // Unused. { - u8 i, j; - u8 x, y; + u8 i; + u8 j; + u8 x; + u8 y; const u16 *_src; for (i = 0, _src = src, y = top; i < height; i++) diff --git a/src/contest.c b/src/contest.c index 612d79562d..b509c896a2 100644 --- a/src/contest.c +++ b/src/contest.c @@ -999,6 +999,8 @@ void ResetLinkContestBoolean(void) static void SetupContestGpuRegs(void) { + u16 savedIme; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); @@ -1493,7 +1495,7 @@ static void Task_DisplayAppealNumberText(u8 taskId) static void Task_TryShowMoveSelectScreen(u8 taskId) { // Wait for button press to show move select screen - if ((JOY_NEW(A_BUTTON)) || (gMain.newKeys == B_BUTTON)) + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON)) { PlaySE(SE_SELECT); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) @@ -1559,7 +1561,7 @@ static void Task_HandleMoveSelectInput(u8 taskId) numMoves++; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); gTasks[taskId].func = Task_SelectedMove; @@ -3408,7 +3410,8 @@ static void GetAllChosenMoves(void) static void RankContestants(void) { - s32 i, j; + s32 i; + s32 j; s16 arr[CONTESTANT_COUNT]; for (i = 0; i < CONTESTANT_COUNT; i++) @@ -3483,7 +3486,8 @@ static bool8 ContestantCanUseTurn(u8 contestant) { if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) return FALSE; - return TRUE; + else + return TRUE; } static void SetContestantStatusesForNextRound(void) @@ -3537,7 +3541,8 @@ bool8 Contest_IsMonsTurnDisabled(u8 contestant) { if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) return TRUE; - return FALSE; + else + return FALSE; } static void CalculateTotalPointsForContestant(u8 contestant) @@ -4137,12 +4142,12 @@ static u8 CreateContestantBoxBlinkSprites(u8 contestant) CpuFill32(0, gContestResources->boxBlinkTiles2 + 0x500, 0x300); RequestDma3Copy(gContestResources->boxBlinkTiles1, - (u8 *)(OBJ_VRAM0 + gSprites[spriteId1].oam.tileNum * 32), + (u8 *)(VRAM + 0x10000 + gSprites[spriteId1].oam.tileNum * 32), 0x800, 1); RequestDma3Copy(gContestResources->boxBlinkTiles2, - (u8 *)(OBJ_VRAM0 + gSprites[spriteId2].oam.tileNum * 32), + (u8 *)(VRAM + 0x10000 + gSprites[spriteId2].oam.tileNum * 32), 0x800, 1); @@ -4480,14 +4485,17 @@ static void CalculateAppealMoveImpact(u8 contestant) eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo; eContestantStatus[contestant].completedComboFlag = TRUE; // Redundant with completedCombo, used by AI } - else if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0) - { - eContestantStatus[contestant].hasJudgesAttention = TRUE; - eContestantStatus[contestant].usedComboMove = TRUE; - } else { - eContestantStatus[contestant].hasJudgesAttention = FALSE; + if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0) + { + eContestantStatus[contestant].hasJudgesAttention = TRUE; + eContestantStatus[contestant].usedComboMove = TRUE; + } + else + { + eContestantStatus[contestant].hasJudgesAttention = FALSE; + } } } if (eContestantStatus[contestant].repeatedMove) @@ -4728,8 +4736,8 @@ static void UpdateApplauseMeter(void) src = &gContestApplauseMeterGfx[64]; else src = gContestApplauseMeterGfx; - CpuCopy32(src, (void *)(OBJ_VRAM0 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32); - CpuCopy32(src + 32, (void *)(OBJ_VRAM0 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32); + CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32); + CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32); if (eContest.applauseLevel > 4) StartApplauseOverflowAnimation(); @@ -5411,7 +5419,7 @@ static void Contest_PrintTextToBg0WindowStd(u32 windowId, const u8 *b) printerTemplate.currentY = 1; printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = 15; printerTemplate.bgColor = 0; printerTemplate.shadowColor = 8; @@ -5434,7 +5442,7 @@ void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s3 printerTemplate.currentY = y; printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = 15; printerTemplate.bgColor = 0; printerTemplate.shadowColor = 8; @@ -5458,7 +5466,7 @@ static void Contest_StartTextPrinter(const u8 *currChar, bool32 b) printerTemplate.currentY = 1; printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = 1; printerTemplate.bgColor = 0; printerTemplate.shadowColor = 8; diff --git a/src/contest_painting.c b/src/contest_painting.c index ceef8a9021..5dd4a70a53 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -248,7 +248,7 @@ static void HoldContestPainting(void) gContestPaintingFadeCounter--; break; case 1: - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { gContestPaintingState++; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); @@ -384,6 +384,8 @@ static void InitContestMonPixels(u16 species, u8 whichSprite) } } +#ifdef NONMATCHING +// functionally equivalent. static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]) { u16 tileY, tileX, pixelY, pixelX; @@ -397,21 +399,125 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels) { for (pixelX = 0; pixelX < 8; pixelX++) { - colorIndex = spriteGfx[((tileY * 8) + tileX) * 32 + (pixelY << 2) + (pixelX >> 1)]; + int offset = 32 * (8 * tileY + tileX) + (pixelY * 4 + pixelX / 2); + colorIndex = spriteGfx[offset]; if (pixelX & 1) colorIndex >>= 4; else - colorIndex &= 0xF; // %=16 works here too. Both match + colorIndex &= 0xF; - if (colorIndex == 0) // transparent pixel - (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = 0x8000; + if (colorIndex == 0) // transparent pixel + (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000; else - (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = palette[colorIndex]; + (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex]; } } } } } +#else +NAKED +static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + mov r10, r0\n\ + mov r9, r1\n\ + str r2, [sp]\n\ + movs r0, 0\n\ +_08130394:\n\ + movs r3, 0\n\ + adds r1, r0, 0x1\n\ + str r1, [sp, 0x4]\n\ + lsls r0, 3\n\ + str r0, [sp, 0x8]\n\ +_0813039E:\n\ + movs r1, 0\n\ + adds r2, r3, 0x1\n\ + mov r8, r2\n\ + ldr r7, [sp, 0x8]\n\ + adds r0, r7, r3\n\ + lsls r0, 5\n\ + mov r12, r0\n\ + lsls r4, r3, 3\n\ +_081303AE:\n\ + movs r3, 0\n\ + lsls r0, r1, 2\n\ + adds r6, r1, 0x1\n\ + mov r2, r12\n\ + adds r5, r2, r0\n\ + ldr r7, [sp, 0x8]\n\ + adds r0, r7, r1\n\ + lsls r0, 7\n\ + ldr r1, [sp]\n\ + adds r2, r0, r1\n\ +_081303C2:\n\ + lsrs r0, r3, 1\n\ + adds r0, r5, r0\n\ + add r0, r10\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r3\n\ + cmp r0, 0\n\ + beq _081303D6\n\ + lsrs r1, 4\n\ + b _081303DA\n\ +_081303D6:\n\ + movs r0, 0xF\n\ + ands r1, r0\n\ +_081303DA:\n\ + cmp r1, 0\n\ + bne _081303EC\n\ + adds r0, r4, r3\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + movs r7, 0x80\n\ + lsls r7, 8\n\ + adds r1, r7, 0\n\ + b _081303F8\n\ +_081303EC:\n\ + adds r0, r4, r3\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + lsls r1, 1\n\ + add r1, r9\n\ + ldrh r1, [r1]\n\ +_081303F8:\n\ + strh r1, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x7\n\ + bls _081303C2\n\ + lsls r0, r6, 16\n\ + lsrs r1, r0, 16\n\ + cmp r1, 0x7\n\ + bls _081303AE\n\ + mov r1, r8\n\ + lsls r0, r1, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x7\n\ + bls _0813039E\n\ + ldr r2, [sp, 0x4]\n\ + lsls r0, r2, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x7\n\ + bls _08130394\n\ + add sp, 0xC\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0"); +} +#endif #define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)]) @@ -501,20 +607,20 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 arg1) static void InitPaintingMonOamData(u8 contestWinnerId) { + //Some hacks just to get the asm to match +#ifndef NONMATCHING + asm(""::"r"(contestWinnerId)); +#endif gMain.oamBuffer[0] = sContestPaintingMonOamData; gMain.oamBuffer[0].tileNum = 0; - if (contestWinnerId > 1) - { - gMain.oamBuffer[0].x = 88; - gMain.oamBuffer[0].y = 24; - } - else - { - gMain.oamBuffer[0].x = 88; // Duplicated Code - gMain.oamBuffer[0].y = 24; - } +#ifndef NONMATCHING + if (contestWinnerId) contestWinnerId = gMain.oamBuffer[0].tileNum; +#endif + + gMain.oamBuffer[0].x = 88; + gMain.oamBuffer[0].y = 24; } static u8 GetImageEffectForContestWinner(u8 contestWinnerId) diff --git a/src/contest_util.c b/src/contest_util.c index ae76eda6b4..5b4e0a70ab 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -1148,71 +1148,350 @@ static void TryCreateWirelessSprites(void) } } +// Functionally equivalent, the same except compiler generated variables from +// src are placed on different stack positions. + +#ifdef NONMATCHING static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) { + u8 *windowTilesPtr; u16 windowId; - s32 origWidth, strWidth; + int origWidth; + struct WindowTemplate windowTemplate; + int strWidth; u8 *spriteTilePtrs[4]; u8 *dst; + int i; + struct Sprite *sprite; + const u8 *src; // The culprit. - { - struct WindowTemplate windowTemplate; //It's important the lifetime of this struct ends after the clear - memset(&windowTemplate, 0, sizeof(windowTemplate)); - windowTemplate.width = 30; - windowTemplate.height = 2; - windowId = AddWindow(&windowTemplate); - FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - } + memset(&windowTemplate, 0, sizeof(windowTemplate)); + windowTemplate.width = 30; + windowTemplate.height = 2; + windowId = AddWindow(&windowTemplate); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); origWidth = GetStringWidth(1, text, 0); - if ((strWidth = (origWidth + 9) / 8) > 30) - strWidth = 30; + strWidth = (origWidth + 9) / 8; + if (strWidth > 30) + strWidth = 30; AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, -1, text); + windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA)); + src = (u8 *)(sUnknown_0858D6D0); + sprite = &gSprites[spriteId]; + spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + VRAM + 0x10000); + + for (i = 1; i < 4; i++) + spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + VRAM + 0x10000); + + for (i = 0; i < 4; i++) + CpuFill32(0, spriteTilePtrs[i], 0x400); + + dst = spriteTilePtrs[0]; + CpuCopy32(src, dst, 0x20); + CpuCopy32(src + 128, dst + 0x100, 0x20); + CpuCopy32(src + 128, dst + 0x200, 0x20); + CpuCopy32(src + 64, dst + 0x300, 0x20); + + for (i = 0; i < strWidth; i++) { - s32 i; - struct Sprite *sprite; - const u8 *src, *windowTilesPtr; - windowTilesPtr = (const u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA)); - src = sUnknown_0858D6D0; - - sprite = &gSprites[spriteId]; - spriteTilePtrs[0] = (u8 *)((OBJ_VRAM0) + sprite->oam.tileNum * 32); - - for (i = 1; i < 4; i++) - spriteTilePtrs[i] = (u8 *)((OBJ_VRAM0) + gSprites[sprite->data[i - 1]].oam.tileNum * 32); - - for (i = 0; i < 4; i++) - CpuFill32(0, spriteTilePtrs[i], 0x400); - - dst = spriteTilePtrs[0]; - CpuCopy32(src, dst, 0x20); - CpuCopy32(src + 128, dst + 0x100, 0x20); - CpuCopy32(src + 128, dst + 0x200, 0x20); - CpuCopy32(src + 64, dst + 0x300, 0x20); - - for (i = 0; i < strWidth; i++) - { - dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; - CpuCopy32(src + 192, dst, 0x20); - CpuCopy32(windowTilesPtr, dst + 0x100, 0x20); - CpuCopy32(windowTilesPtr + 960, dst + 0x200, 0x20); - CpuCopy32(src + 224, dst + 0x300, 0x20); - windowTilesPtr += 0x20; - } - dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; - CpuCopy32(src + 32, dst, 0x20); - CpuCopy32(src + 160, dst + 0x100, 0x20); - CpuCopy32(src + 160, dst + 0x200, 0x20); - CpuCopy32(src + 96, dst + 0x300, 0x20); + CpuCopy32(src + 192, dst, 0x20); + CpuCopy32(windowTilesPtr, dst + 0x100, 0x20); + CpuCopy32(windowTilesPtr + 960, dst + 0x200, 0x20); + CpuCopy32(src + 224, dst + 0x300, 0x20); + windowTilesPtr += 0x20; } + + dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; + CpuCopy32(src + 32, dst, 0x20); + CpuCopy32(src + 160, dst + 0x100, 0x20); + CpuCopy32(src + 160, dst + 0x200, 0x20); + CpuCopy32(src + 96, dst + 0x300, 0x20); RemoveWindow(windowId); return (240 - (strWidth + 2) * 8) / 2; } +#else +NAKED +static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) +{ + asm_unified( + "push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x44\n\ + adds r5, r0, 0\n\ + lsls r1, 24\n\ + lsrs r7, r1, 24\n\ + add r4, sp, 0x20\n\ + adds r0, r4, 0\n\ + movs r1, 0\n\ + movs r2, 0x8\n\ + bl memset\n\ + movs r0, 0x1E\n\ + strb r0, [r4, 0x3]\n\ + movs r0, 0x2\n\ + strb r0, [r4, 0x4]\n\ + adds r0, r4, 0\n\ + bl AddWindow\n\ + lsls r6, r0, 24\n\ + lsrs r4, r6, 24\n\ + adds r0, r4, 0\n\ + movs r1, 0x11\n\ + bl FillWindowPixelBuffer\n\ + movs r0, 0x1\n\ + adds r1, r5, 0\n\ + movs r2, 0\n\ + bl GetStringWidth\n\ + adds r2, r0, 0\n\ + adds r2, 0x9\n\ + cmp r2, 0\n\ + bge _080F6BC4\n\ + adds r2, 0x7\n\ +_080F6BC4:\n\ + asrs r2, 3\n\ + mov r10, r2\n\ + cmp r2, 0x1E\n\ + ble _080F6BD0\n\ + movs r1, 0x1E\n\ + mov r10, r1\n\ +_080F6BD0:\n\ + mov r1, r10\n\ + lsls r2, r1, 3\n\ + subs r2, r0\n\ + lsrs r0, r2, 31\n\ + adds r2, r0\n\ + asrs r2, 1\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + ldr r0, =sContestLinkTextColors\n\ + str r0, [sp]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + str r0, [sp, 0x4]\n\ + str r5, [sp, 0x8]\n\ + adds r0, r4, 0\n\ + movs r1, 0x1\n\ + movs r3, 0x1\n\ + bl AddTextPrinterParameterized3\n\ + adds r0, r4, 0\n\ + movs r1, 0x7\n\ + bl GetWindowAttribute\n\ + mov r9, r0\n\ + ldr r2, =sUnknown_0858D6D0\n\ + mov r8, r2\n\ + lsls r1, r7, 4\n\ + adds r1, r7\n\ + lsls r1, 2\n\ + ldr r3, =gSprites\n\ + adds r1, r3\n\ + ldrh r0, [r1, 0x4]\n\ + lsls r0, 22\n\ + lsrs r0, 17\n\ + ldr r2, =0x06010000\n\ + adds r0, r2\n\ + str r0, [sp, 0xC]\n\ + str r6, [sp, 0x38]\n\ + mov r7, sp\n\ + adds r7, 0x1C\n\ + str r7, [sp, 0x2C]\n\ + mov r0, r10\n\ + adds r0, 0x2\n\ + str r0, [sp, 0x30]\n\ + movs r5, 0\n\ + add r7, sp, 0x10\n\ + mov r12, r7\n\ + adds r6, r1, 0\n\ + adds r6, 0x2E\n\ + movs r4, 0x2\n\ +_080F6C34:\n\ + adds r0, r6, r5\n\ + movs r7, 0\n\ + ldrsh r1, [r0, r7]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + ldrh r0, [r0, 0x4]\n\ + lsls r0, 22\n\ + lsrs r0, 17\n\ + adds r0, r2\n\ + mov r1, r12\n\ + adds r1, 0x4\n\ + mov r12, r1\n\ + subs r1, 0x4\n\ + stm r1!, {r0}\n\ + adds r5, 0x2\n\ + subs r4, 0x1\n\ + cmp r4, 0\n\ + bge _080F6C34\n\ + mov r7, r8\n\ + adds r7, 0x80\n\ + mov r2, r8\n\ + adds r2, 0x40\n\ + str r2, [sp, 0x28]\n\ + mov r0, r8\n\ + adds r0, 0x20\n\ + str r0, [sp, 0x3C]\n\ + mov r1, r8\n\ + adds r1, 0xA0\n\ + str r1, [sp, 0x40]\n\ + adds r2, 0x20\n\ + str r2, [sp, 0x34]\n\ + add r5, sp, 0xC\n\ + movs r6, 0\n\ + movs r4, 0x3\n\ +_080F6C7C:\n\ + str r6, [sp, 0x1C]\n\ + ldm r5!, {r1}\n\ + ldr r0, [sp, 0x2C]\n\ + ldr r2, =0x05000100\n\ + bl CpuSet\n\ + subs r4, 0x1\n\ + cmp r4, 0\n\ + bge _080F6C7C\n\ + ldr r5, [sp, 0xC]\n\ + ldr r6, =0x04000008\n\ + mov r0, r8\n\ + adds r1, r5, 0\n\ + adds r2, r6, 0\n\ + bl CpuSet\n\ + movs r0, 0x80\n\ + lsls r0, 1\n\ + adds r1, r5, r0\n\ + adds r0, r7, 0\n\ + adds r2, r6, 0\n\ + bl CpuSet\n\ + movs r2, 0x80\n\ + lsls r2, 2\n\ + adds r1, r5, r2\n\ + adds r0, r7, 0\n\ + adds r2, r6, 0\n\ + bl CpuSet\n\ + movs r7, 0xC0\n\ + lsls r7, 2\n\ + adds r1, r5, r7\n\ + ldr r0, [sp, 0x28]\n\ + adds r2, r6, 0\n\ + bl CpuSet\n\ + movs r4, 0\n\ + cmp r4, r10\n\ + bge _080F6D32\n\ + adds r7, r6, 0\n\ +_080F6CCE:\n\ + adds r6, r4, 0x1\n\ + adds r0, r6, 0\n\ + cmp r6, 0\n\ + bge _080F6CDA\n\ + adds r0, r4, 0\n\ + adds r0, 0x8\n\ +_080F6CDA:\n\ + asrs r0, 3\n\ + lsls r1, r0, 2\n\ + add r1, sp\n\ + adds r1, 0xC\n\ + lsls r0, 3\n\ + subs r0, r6, r0\n\ + lsls r0, 5\n\ + ldr r1, [r1]\n\ + adds r5, r1, r0\n\ + mov r0, r8\n\ + adds r0, 0xC0\n\ + adds r1, r5, 0\n\ + adds r2, r7, 0\n\ + bl CpuSet\n\ + movs r0, 0x80\n\ + lsls r0, 1\n\ + adds r1, r5, r0\n\ + mov r0, r9\n\ + adds r2, r7, 0\n\ + bl CpuSet\n\ + movs r0, 0xF0\n\ + lsls r0, 2\n\ + add r0, r9\n\ + movs r2, 0x80\n\ + lsls r2, 2\n\ + adds r1, r5, r2\n\ + adds r2, r7, 0\n\ + bl CpuSet\n\ + movs r0, 0xC0\n\ + lsls r0, 2\n\ + adds r1, r5, r0\n\ + mov r0, r8\n\ + adds r0, 0xE0\n\ + adds r2, r7, 0\n\ + bl CpuSet\n\ + movs r1, 0x20\n\ + add r9, r1\n\ + adds r4, r6, 0\n\ + cmp r4, r10\n\ + blt _080F6CCE\n\ +_080F6D32:\n\ + adds r2, r4, 0x1\n\ + adds r0, r2, 0\n\ + cmp r2, 0\n\ + bge _080F6D3E\n\ + adds r0, r4, 0\n\ + adds r0, 0x8\n\ +_080F6D3E:\n\ + asrs r0, 3\n\ + lsls r1, r0, 2\n\ + add r1, sp\n\ + adds r1, 0xC\n\ + lsls r0, 3\n\ + subs r0, r2, r0\n\ + lsls r0, 5\n\ + ldr r1, [r1]\n\ + adds r5, r1, r0\n\ + ldr r4, =0x04000008\n\ + ldr r0, [sp, 0x3C]\n\ + adds r1, r5, 0\n\ + adds r2, r4, 0\n\ + bl CpuSet\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + adds r1, r5, r2\n\ + ldr r0, [sp, 0x40]\n\ + adds r2, r4, 0\n\ + bl CpuSet\n\ + movs r7, 0x80\n\ + lsls r7, 2\n\ + adds r1, r5, r7\n\ + ldr r0, [sp, 0x40]\n\ + adds r2, r4, 0\n\ + bl CpuSet\n\ + movs r0, 0xC0\n\ + lsls r0, 2\n\ + adds r1, r5, r0\n\ + ldr r0, [sp, 0x34]\n\ + adds r2, r4, 0\n\ + bl CpuSet\n\ + ldr r1, [sp, 0x38]\n\ + lsrs r0, r1, 24\n\ + bl RemoveWindow\n\ + ldr r2, [sp, 0x30]\n\ + lsls r1, r2, 3\n\ + movs r0, 0xF0\n\ + subs r0, r1\n\ + asrs r0, 1\n\ + add sp, 0x44\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .pool"); +} +#endif // NONMATCHING + static void LoadContestResultSprites(void) { int i; @@ -1922,7 +2201,7 @@ static void AddContestTextPrinter(int windowId, u8 *str, int x) textPrinter.currentY = 2; textPrinter.letterSpacing = 0; textPrinter.lineSpacing = 0; - textPrinter.style = 0; + textPrinter.unk = 0; textPrinter.fgColor = 1; textPrinter.bgColor = 0; textPrinter.shadowColor = 8; diff --git a/src/credits.c b/src/credits.c index 86a659d5a7..020221f305 100644 --- a/src/credits.c +++ b/src/credits.c @@ -1143,7 +1143,7 @@ static void CB2_RunCreditsSequence(void) RunTasks(); AnimateSprites(); - if ((JOY_HELD(B_BUTTON)) + if ((gMain.heldKeys & B_BUTTON) && gHasHallOfFameRecords != 0 && gTasks[gUnknown_0203BCE2].func == Task_ProgressCreditTasks) { @@ -1160,7 +1160,7 @@ static void sub_8175548(void) { ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBackgroundTemplates, 1); - SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(0, AllocZeroed(0x800)); LoadPalette(gUnknown_085E56F0, 0x80, 0x40); InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); diff --git a/src/daycare.c b/src/daycare.c index 69043a5139..5d44804039 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1186,7 +1186,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y) printer.y = y; printer.currentX = x; printer.currentY = y; - printer.style = 0; + printer.unk = 0; gTextFlags.useAlternateDownArrow = 0; printer.letterSpacing = 0; printer.lineSpacing = 1; @@ -1237,7 +1237,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) { u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuListTaskId); - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { switch (input) { @@ -1255,7 +1255,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) DestroyTask(taskId); EnableBothScriptContexts(); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU; DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); diff --git a/src/decoration.c b/src/decoration.c index 22ae327f9e..40cccbe5ef 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1147,7 +1147,7 @@ static void DontTossDecoration(u8 taskId) static void ReturnToDecorationItemsAfterInvalidSelection(u8 taskId) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, 0); AddDecorationWindow(WINDOW_DECORATION_CATEGORIES); @@ -1803,7 +1803,7 @@ static bool8 ApplyCursorMovement_IsInvalid(u8 taskId) static bool8 IsHoldingDirection(void) { - u16 heldKeys = JOY_HELD(DPAD_ANY); + u16 heldKeys = gMain.heldKeys & DPAD_ANY; if (heldKeys != DPAD_UP && heldKeys != DPAD_DOWN && heldKeys != DPAD_LEFT && heldKeys != DPAD_RIGHT) return FALSE; @@ -1827,14 +1827,13 @@ static void Task_SelectLocation(u8 taskId) sPlacePutAwayYesNoFunctions[tDecorationItemsMenuCommand].yesFunc(taskId); return; } - - if (tButton == B_BUTTON) + else if (tButton == B_BUTTON) { sPlacePutAwayYesNoFunctions[tDecorationItemsMenuCommand].noFunc(taskId); return; } - if ((JOY_HELD(DPAD_ANY)) == DPAD_UP) + if ((gMain.heldKeys & DPAD_ANY) == DPAD_UP) { sDecorationLastDirectionMoved = DIR_SOUTH; gSprites[sDecor_CameraSpriteObjectIdx1].data[2] = 0; @@ -1842,7 +1841,7 @@ static void Task_SelectLocation(u8 taskId) tCursorY--; } - if ((JOY_HELD(DPAD_ANY)) == DPAD_DOWN) + if ((gMain.heldKeys & DPAD_ANY) == DPAD_DOWN) { sDecorationLastDirectionMoved = DIR_NORTH; gSprites[sDecor_CameraSpriteObjectIdx1].data[2] = 0; @@ -1850,7 +1849,7 @@ static void Task_SelectLocation(u8 taskId) tCursorY++; } - if ((JOY_HELD(DPAD_ANY)) == DPAD_LEFT) + if ((gMain.heldKeys & DPAD_ANY) == DPAD_LEFT) { sDecorationLastDirectionMoved = DIR_WEST; gSprites[sDecor_CameraSpriteObjectIdx1].data[2] = -2; @@ -1858,7 +1857,7 @@ static void Task_SelectLocation(u8 taskId) tCursorX--; } - if ((JOY_HELD(DPAD_ANY)) == DPAD_RIGHT) + if ((gMain.heldKeys & DPAD_ANY) == DPAD_RIGHT) { sDecorationLastDirectionMoved = DIR_EAST; gSprites[sDecor_CameraSpriteObjectIdx1].data[2] = 2; @@ -1878,10 +1877,10 @@ static void Task_SelectLocation(u8 taskId) if (!tButton) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) tButton = A_BUTTON; - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) tButton = B_BUTTON; } } @@ -1896,7 +1895,7 @@ static void ContinueDecorating(u8 taskId) static void CantPlaceDecorationPrompt(u8 taskId) { - if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) ContinueDecorating(taskId); } @@ -1929,7 +1928,7 @@ static void CopyTile(u8 *dest, u16 tile) case BG_TILE_H_FLIP(0) >> 10: for (i = 0; i < 8; i++) { - dest[4 * i + 0] = (buffer[4 * (i + 1) - 1] >> 4) + ((buffer[4 * (i + 1) - 1] & 0x0F) << 4); + dest[4 * i] = (buffer[4 * (i + 1) - 1] >> 4) + ((buffer[4 * (i + 1) - 1] & 0x0F) << 4); dest[4 * i + 1] = (buffer[4 * (i + 1) - 2] >> 4) + ((buffer[4 * (i + 1) - 2] & 0x0F) << 4); dest[4 * i + 2] = (buffer[4 * (i + 1) - 3] >> 4) + ((buffer[4 * (i + 1) - 3] & 0x0F) << 4); dest[4 * i + 3] = (buffer[4 * (i + 1) - 4] >> 4) + ((buffer[4 * (i + 1) - 4] & 0x0F) << 4); @@ -1938,7 +1937,7 @@ static void CopyTile(u8 *dest, u16 tile) case BG_TILE_V_FLIP(0) >> 10: for (i = 0; i < 8; i++) { - dest[4 * i + 0] = buffer[4 * (7 - i) + 0]; + dest[4 * i] = buffer[4 * (7 - i)]; dest[4 * i + 1] = buffer[4 * (7 - i) + 1]; dest[4 * i + 2] = buffer[4 * (7 - i) + 2]; dest[4 * i + 3] = buffer[4 * (7 - i) + 3]; @@ -2387,7 +2386,7 @@ static void AttemptPutAwayDecoration_(u8 taskId) static void ContinuePuttingAwayDecorationsPrompt(u8 taskId) { - if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) ContinuePuttingAwayDecorations(taskId); } diff --git a/src/dewford_trend.c b/src/dewford_trend.c index e0063ec1b2..e3b98859ce 100644 --- a/src/dewford_trend.c +++ b/src/dewford_trend.c @@ -219,22 +219,18 @@ void BufferTrendyPhraseString(void) ConvertEasyChatWordsToString(gStringVar1, s->words, 2, 1); } - void TrendyPhraseIsOld(void) { - u8 result = 0; + u16 result = 0; - do + if (gSaveBlock1Ptr->easyChatPairs[0].unk0_0 - gSaveBlock1Ptr->easyChatPairs[1].unk0_0 < 2) { - if (gSaveBlock1Ptr->easyChatPairs[0].unk0_0 - gSaveBlock1Ptr->easyChatPairs[1].unk0_0 > 1) - break; - if (gSaveBlock1Ptr->easyChatPairs[0].unk1_6) - break; - if (!gSaveBlock1Ptr->easyChatPairs[1].unk1_6) - break; - result = 1; - } while (0); - + #ifndef NONMATCHING + asm("":::"r2"); //Force the compiler to store address of gSaveBlock1 in r3 instead of r2 + #endif + if (!gSaveBlock1Ptr->easyChatPairs[0].unk1_6 && gSaveBlock1Ptr->easyChatPairs[1].unk1_6) + result = 1; + } gSpecialVar_Result = result; } @@ -249,46 +245,46 @@ static bool8 sub_8122A58(struct EasyChatPair *a, struct EasyChatPair *b, u8 c) { case 0: if (a->unk0_0 > b->unk0_0) - return TRUE; + return 1; if (a->unk0_0 < b->unk0_0) - return FALSE; + return 0; if (a->unk0_7 > b->unk0_7) - return TRUE; + return 1; if (a->unk0_7 < b->unk0_7) - return FALSE; + return 0; break; case 1: if (a->unk0_7 > b->unk0_7) - return TRUE; + return 1; if (a->unk0_7 < b->unk0_7) - return FALSE; + return 0; if (a->unk0_0 > b->unk0_0) - return TRUE; + return 1; if (a->unk0_0 < b->unk0_0) - return FALSE; + return 0; break; case 2: if (a->unk0_0 > b->unk0_0) - return TRUE; + return 1; if (a->unk0_0 < b->unk0_0) - return FALSE; + return 0; if (a->unk0_7 > b->unk0_7) - return TRUE; + return 1; if (a->unk0_7 < b->unk0_7) - return FALSE; + return 0; if (a->unk2 > b->unk2) - return TRUE; + return 1; if (a->unk2 < b->unk2) - return FALSE; + return 0; if (a->words[0] > b->words[0]) - return TRUE; + return 1; if (a->words[0] < b->words[0]) - return FALSE; + return 0; if (a->words[1] > b->words[1]) - return TRUE; + return 1; if (a->words[1] < b->words[1]) - return FALSE; - return TRUE; + return 0; + return 1; } return Random() & 1; } diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c index f887dafb95..fe5d49e69d 100644 --- a/src/digit_obj_util.c +++ b/src/digit_obj_util.c @@ -33,7 +33,7 @@ struct DigitPrinterAlloc }; // this file's functions -static u8 GetFirstOamId(u8 oamCount); +static u8 GetFirstOamId(u8 oamCount);; static void CopyWorkToOam(struct DigitPrinter *objWork); static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign); static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign); diff --git a/src/diploma.c b/src/diploma.c index f243d09f96..7eb3b0e81d 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -107,7 +107,7 @@ static void Task_DiplomaFadeIn(u8 taskId) static void Task_DiplomaWaitForKeyPress(u8 taskId) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = Task_DiplomaFadeOut; diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 9cbc73c73e..34f73126be 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -2355,19 +2355,19 @@ static void sub_8027554(void) { if (gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] == 0) { - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 2; gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; PlaySE(SE_M_CHARM); } - else if (JOY_NEW(DPAD_LEFT)) + else if (gMain.newKeys & DPAD_LEFT) { gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 3; gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; PlaySE(SE_M_CHARM); } - else if (JOY_NEW(DPAD_RIGHT)) + else if (gMain.newKeys & DPAD_RIGHT) { gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 1; gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; @@ -2653,7 +2653,7 @@ static void Task_ShowDodrioBerryPickingRecords(u8 taskId) data[0]++; break; case 2: - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { rbox_fill_rectangle(data[1]); CopyWindowToVram(data[1], 1); @@ -4266,7 +4266,7 @@ static void sub_802988C(void) gUnknown_02022CF8->state++; break; case 4: - if (++gUnknown_02022CF8->unk301C >= 30 && JOY_NEW(A_BUTTON)) + if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) { gUnknown_02022CF8->unk301C = 0; PlaySE(SE_SELECT); @@ -4298,7 +4298,7 @@ static void sub_802988C(void) gUnknown_02022CF8->state++; break; case 8: - if (++gUnknown_02022CF8->unk301C >= 30 && JOY_NEW(A_BUTTON)) + if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) { gUnknown_02022CF8->unk301C = 0; PlaySE(SE_SELECT); @@ -4358,7 +4358,7 @@ static void sub_802988C(void) gUnknown_02022CF8->state++; break; case 11: - if (++gUnknown_02022CF8->unk301C >= 30 && JOY_NEW(A_BUTTON)) + if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) { gUnknown_02022CF8->unk301C = 0; PlaySE(SE_SELECT); @@ -4424,14 +4424,14 @@ static void sub_802A010(void) AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_SelectorArrow2, 0, ((y - 1) * 16) + 1, -1, NULL); CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 3); // Increment state only if A or B button have been pressed. - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); if (gUnknown_02022CF8->unk3020 == 0) gUnknown_02022CF8->unk3020 = 1; gUnknown_02022CF8->state++; } - else if (JOY_NEW(DPAD_UP | DPAD_DOWN)) + else if (gMain.newKeys & (DPAD_UP | DPAD_DOWN)) { PlaySE(SE_SELECT); switch (gUnknown_02022CF8->unk3020) @@ -4447,7 +4447,7 @@ static void sub_802A010(void) break; } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); gUnknown_02022CF8->unk3020 = 2; diff --git a/src/easy_chat.c b/src/easy_chat.c index e08f0bb75c..534215ecd1 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -1523,7 +1523,7 @@ static u16 sub_811AB68(void) { do { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { sub_811BF78(); sEasyChatScreen->state = 2; @@ -1532,30 +1532,30 @@ static u16 sub_811AB68(void) sEasyChatScreen->unk_0c = 0; return 9; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return sub_811B150(); } - else if (JOY_NEW(START_BUTTON)) + else if (gMain.newKeys & START_BUTTON) { return sub_811B1B4(); } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { sEasyChatScreen->mainCursorRow--; break; } - else if (JOY_NEW(DPAD_LEFT)) + else if (gMain.newKeys & DPAD_LEFT) { sEasyChatScreen->mainCursorColumn--; break; } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { sEasyChatScreen->mainCursorRow++; break; } - else if (JOY_NEW(DPAD_RIGHT)) + else if (gMain.newKeys & DPAD_RIGHT) { sEasyChatScreen->mainCursorColumn++; break; @@ -1595,7 +1595,7 @@ static u16 sub_811ACDC(void) { do { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { switch (sEasyChatScreen->mainCursorColumn) { @@ -1610,30 +1610,30 @@ static u16 sub_811ACDC(void) } } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { return sub_811B150(); } - if (JOY_NEW(START_BUTTON)) + else if (gMain.newKeys & START_BUTTON) { return sub_811B1B4(); } - if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { sEasyChatScreen->mainCursorRow--; break; } - if (JOY_NEW(DPAD_LEFT)) + else if (gMain.newKeys & DPAD_LEFT) { sEasyChatScreen->mainCursorColumn--; break; } - if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { sEasyChatScreen->mainCursorRow = 0; break; } - if (JOY_NEW(DPAD_RIGHT)) + else if (gMain.newKeys & DPAD_RIGHT) { sEasyChatScreen->mainCursorColumn++; break; @@ -1666,10 +1666,10 @@ static u16 sub_811ACDC(void) static u16 sub_811AE44(void) { - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) return sub_811B32C(); - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (sEasyChatScreen->unk_0a != -1) return sub_811B2B0(); @@ -1685,19 +1685,19 @@ static u16 sub_811AE44(void) } } - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) return sub_811B33C(); - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) return sub_811B528(2); - if (JOY_REPEAT(DPAD_DOWN)) + if (gMain.newAndRepeatedKeys & DPAD_DOWN) return sub_811B528(3); - if (JOY_REPEAT(DPAD_LEFT)) + if (gMain.newAndRepeatedKeys & DPAD_LEFT) return sub_811B528(1); - if (JOY_REPEAT(DPAD_RIGHT)) + if (gMain.newAndRepeatedKeys & DPAD_RIGHT) return sub_811B528(0); return 0; @@ -1705,31 +1705,31 @@ static u16 sub_811AE44(void) static u16 sub_811AF00(void) { - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { sEasyChatScreen->state = 2; return 14; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) return sub_811B394(); - if (JOY_NEW(START_BUTTON)) + if (gMain.newKeys & START_BUTTON) return sub_811B794(4); - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) return sub_811B794(5); - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) return sub_811B794(2); - if (JOY_REPEAT(DPAD_DOWN)) + if (gMain.newAndRepeatedKeys & DPAD_DOWN) return sub_811B794(3); - if (JOY_REPEAT(DPAD_LEFT)) + if (gMain.newAndRepeatedKeys & DPAD_LEFT) return sub_811B794(1); - if (JOY_REPEAT(DPAD_RIGHT)) + if (gMain.newAndRepeatedKeys & DPAD_RIGHT) return sub_811B794(0); return 0; @@ -1794,10 +1794,10 @@ static u16 sub_811B040(void) static u16 sub_811B08C(void) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) return 26; - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) return sub_811B150(); return 0; @@ -1805,7 +1805,7 @@ static u16 sub_811B08C(void) static u16 sub_811B0BC(void) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { sEasyChatScreen->state = sub_811B2A4(); return 7; @@ -2537,7 +2537,7 @@ u8 sub_811BBBC(void) return sEasyChatScreen->unk_0c; } -static void sub_811BBC8(s8 *arg0, s8 *arg1) +void sub_811BBC8(u8 *arg0, u8 *arg1) { *arg0 = sEasyChatScreen->unk_10; *arg1 = sEasyChatScreen->unk_11; @@ -4529,18 +4529,18 @@ static void sub_811E30C(void) x = var0 * 13; x = x * 8 + 28; y = var1 * 16 + 96; - sub_811E34C((u8)x, (u8)y); + sub_811E34C(x, y); } static void sub_811E34C(u8 x, u8 y) { - if (!sUnknown_0203A11C->unk2E4) - return; - - sUnknown_0203A11C->unk2E4->pos1.x = (s16)x; - sUnknown_0203A11C->unk2E4->pos1.y = (s16)y; - sUnknown_0203A11C->unk2E4->pos2.x = 0; - sUnknown_0203A11C->unk2E4->data[0] = 0; + if (sUnknown_0203A11C->unk2E4) + { + sUnknown_0203A11C->unk2E4->pos1.x = x; + sUnknown_0203A11C->unk2E4->pos1.y = y; + sUnknown_0203A11C->unk2E4->pos2.x = 0; + sUnknown_0203A11C->unk2E4->data[0] = 0; + } } static void sub_811E380(void) diff --git a/src/ereader_screen.c b/src/ereader_screen.c index 3f2cf3217f..b4a9164b32 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -137,7 +137,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1) { *arg0 = 1; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { *arg0 = 0; return 1; @@ -158,7 +158,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1) *arg1 = 0; *arg0 = 3; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { *arg0 = 0; return 1; @@ -288,7 +288,7 @@ static void sub_81D5084(u8 taskId) OpenEReaderLink(); data->unk8 = 6; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { sub_81D505C(&data->unk0); PlaySE(SE_SELECT); @@ -296,7 +296,7 @@ static void sub_81D5084(u8 taskId) } break; case 6: - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); CloseLink(); @@ -436,7 +436,7 @@ static void sub_81D5084(u8 taskId) } break; case 19: - if (IsFanfareTaskInactive() && (JOY_NEW(A_BUTTON | B_BUTTON))) + if (IsFanfareTaskInactive() && (gMain.newKeys & (A_BUTTON | B_BUTTON))) data->unk8 = 26; break; case 23: diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 68f873446c..29a9f6d0a1 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1223,6 +1223,7 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, objectEvent->movementType = template->movementType; objectEvent->localId = template->localId; objectEvent->mapNum = mapNum; + objectEvent++; objectEvent--; objectEvent->mapGroup = mapGroup; objectEvent->initialCoords.x = x; objectEvent->initialCoords.y = y; @@ -1235,11 +1236,13 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, objectEvent->range.as_nybbles.x = template->movementRangeX; objectEvent->range.as_nybbles.y = template->movementRangeY; objectEvent->trainerType = template->trainerType; - objectEvent->mapNum = mapNum; //redundant, but needed to match objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId; objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType]; SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection); SetObjectEventDynamicGraphicsId(objectEvent); +#ifndef NONMATCHING + asm("":::"r5", "r6"); +#endif if (gRangedMovementTypes[objectEvent->movementType]) { if (objectEvent->range.as_nybbles.x == 0) @@ -8216,13 +8219,15 @@ bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent) { return TRUE; } - - objectEvent->frozen = 1; - objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused; - objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused; - gSprites[objectEvent->spriteId].animPaused = 1; - gSprites[objectEvent->spriteId].affineAnimPaused = 1; - return FALSE; + else + { + objectEvent->frozen = 1; + objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused; + objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused; + gSprites[objectEvent->spriteId].animPaused = 1; + gSprites[objectEvent->spriteId].affineAnimPaused = 1; + return FALSE; + } } void FreezeObjectEvents(void) @@ -8395,8 +8400,8 @@ bool8 sub_80976EC(struct Sprite *sprite) if (sprite->data[5] > 15) return TRUE; - - return FALSE; + else + return FALSE; } static const s8 sFigure8XOffsets[FIGURE_8_LENGTH] = { @@ -8476,15 +8481,15 @@ static bool8 AnimateSpriteInFigure8(struct Sprite *sprite) return finished; } -static const s8 gUnknown_0850E802[16] = { +static const s8 gUnknown_0850E802[] = { -4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0 }; -static const s8 gUnknown_0850E812[16] = { +static const s8 gUnknown_0850E812[] = { 0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0 }; -static const s8 gUnknown_0850E822[16] = { +static const s8 gUnknown_0850E822[] = { -2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0 }; @@ -8507,11 +8512,23 @@ void sub_809783C(struct Sprite *sprite, u8 a2, u8 a3, u8 a4) sprite->data[6] = 0; } +static const s16 gUnknown_0850E840[] = { + 16, 16, 32, +}; + +static const u8 gUnknown_0850E846[] = { + 0, 0, 1, +}; + u8 sub_809785C(struct Sprite *sprite) { - s16 v5[] = {16, 16, 32}; - u8 v6[] = {0, 0, 1}; - u8 v2 = 0; + s16 v5[3]; + u8 v6[3]; + u8 v2; + + memcpy(v5, gUnknown_0850E840, 6); // TODO: get rid of memcpy + memcpy(v6, gUnknown_0850E846, 3); + v2 = 0; if (sprite->data[4]) Step1(sprite, sprite->data[3]); @@ -8532,11 +8549,23 @@ u8 sub_809785C(struct Sprite *sprite) return v2; } +static const s16 gUnknown_0850E84A[] = { + 32, 32, 64, +}; + +static const u8 gUnknown_0850E850[] = { + 1, 1, 2, +}; + u8 sub_80978E4(struct Sprite *sprite) { - s16 v5[] = {32, 32, 64}; - u8 v6[] = {1, 1, 2}; - u8 v2 = 0; + s16 v5[3]; + u8 v6[3]; + u8 v2; + + memcpy(v5, gUnknown_0850E84A, 6); + memcpy(v6, gUnknown_0850E850, 3); + v2 = 0; if (sprite->data[4] && !(sprite->data[6] & 1)) Step1(sprite, sprite->data[3]); @@ -8564,9 +8593,12 @@ static void SetMovementDelay(struct Sprite *sprite, s16 timer) static bool8 WaitForMovementDelay(struct Sprite *sprite) { - if (--sprite->data[3] == 0) + sprite->data[3]--; + + if (sprite->data[3] == 0) return TRUE; - return FALSE; + else + return FALSE; } void SetAndStartSpriteAnim(struct Sprite *sprite, u8 animNum, u8 animCmdIndex) @@ -8580,7 +8612,8 @@ bool8 SpriteAnimEnded(struct Sprite *sprite) { if (sprite->animEnded) return TRUE; - return FALSE; + else + return FALSE; } void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible) @@ -8759,14 +8792,14 @@ static void UpdateObjectEventSpritePosition(struct Sprite *sprite) { switch(sprite->tAnimNum) { - case 0: - break; case UNION_ROOM_SPAWN_IN: MoveUnionRoomObjectDown(sprite); break; case UNION_ROOM_SPAWN_OUT: MoveUnionRoomObjectUp(sprite); break; + case 0: + break; default: sprite->tAnimNum = 0; break; @@ -8835,18 +8868,21 @@ u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite * u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - bool8 ableToStore = FALSE; + u32 one; + bool32 ableToStore = FALSE; if (gLockedAnimObjectEvents == NULL) { gLockedAnimObjectEvents = AllocZeroed(sizeof(struct LockedAnimObjectEvents)); gLockedAnimObjectEvents->objectEventIds[0] = objectEvent->localId; - gLockedAnimObjectEvents->count = 1; - ableToStore = TRUE; + // needed to match + gLockedAnimObjectEvents->count = (one = 1); + ableToStore = one; } else { - u8 i, firstFreeSlot; - bool8 found; + u8 i; + u8 firstFreeSlot; + bool32 found; for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++) { if (firstFreeSlot == 16 && gLockedAnimObjectEvents->objectEventIds[i] == 0) @@ -8879,7 +8915,7 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - bool8 ableToStore; + bool32 ableToStore; u8 index; sprite->data[2] = 1; @@ -8923,7 +8959,7 @@ void CreateLevitateMovementTask(struct ObjectEvent *objectEvent) u8 taskId = CreateTask(ApplyLevitateMovement, 0xFF); struct Task *task = &gTasks[taskId]; - StoreWordInTwoHalfwords((u16 *)&task->data[0], (u32)objectEvent); + StoreWordInTwoHalfwords(&task->data[0], (u32)objectEvent); objectEvent->warpArrowSpriteId = taskId; task->data[3] = 0xFFFF; } @@ -8934,7 +8970,7 @@ static void ApplyLevitateMovement(u8 taskId) struct Sprite *sprite; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // load the map object pointer. + LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // load the map object pointer. sprite = &gSprites[objectEvent->spriteId]; if(!(task->data[2] & 0x3)) @@ -8951,7 +8987,7 @@ void DestroyExtraMovementTask(u8 taskId) struct ObjectEvent *objectEvent; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // unused objectEvent + LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // unused objectEvent DestroyTask(taskId); } diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 61065367cc..41d4900f7e 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -859,21 +859,21 @@ static void Task_EvolutionScene(u8 taskID) } break; case 4: - if (JOY_NEW(DPAD_UP) && sEvoCursorPos != 0) + if (gMain.newKeys & DPAD_UP && sEvoCursorPos != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(sEvoCursorPos); sEvoCursorPos = 0; BattleCreateYesNoCursorAt(0); } - if (JOY_NEW(DPAD_DOWN) && sEvoCursorPos == 0) + if (gMain.newKeys & DPAD_DOWN && sEvoCursorPos == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(sEvoCursorPos); sEvoCursorPos = 1; BattleCreateYesNoCursorAt(1); } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); PlaySE(SE_SELECT); @@ -889,7 +889,7 @@ static void Task_EvolutionScene(u8 taskID) BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); } } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); PlaySE(SE_SELECT); diff --git a/src/faraway_island.c b/src/faraway_island.c index 6bfa066c28..e3d8444c98 100755 --- a/src/faraway_island.c +++ b/src/faraway_island.c @@ -181,36 +181,40 @@ u32 GetMewMoveDirection(void) { if (ShouldMewMoveEast(mew, 1)) return GetRandomMewDirectionCandidate(2); - if (ShouldMewMoveWest(mew, 1)) + else if (ShouldMewMoveWest(mew, 1)) return GetRandomMewDirectionCandidate(2); - return DIR_NORTH; + else + return DIR_NORTH; } if (ShouldMewMoveSouth(mew, 0)) { if (ShouldMewMoveEast(mew, 1)) return GetRandomMewDirectionCandidate(2); - if (ShouldMewMoveWest(mew, 1)) + else if (ShouldMewMoveWest(mew, 1)) return GetRandomMewDirectionCandidate(2); - return DIR_SOUTH; + else + return DIR_SOUTH; } if (ShouldMewMoveEast(mew, 0)) { if (ShouldMewMoveNorth(mew, 1)) return GetRandomMewDirectionCandidate(2); - if (ShouldMewMoveSouth(mew, 1)) + else if (ShouldMewMoveSouth(mew, 1)) return GetRandomMewDirectionCandidate(2); - return DIR_EAST; + else + return DIR_EAST; } if (ShouldMewMoveWest(mew, 0)) { if (ShouldMewMoveNorth(mew, 1)) return GetRandomMewDirectionCandidate(2); - if (ShouldMewMoveSouth(mew, 1)) + else if (ShouldMewMoveSouth(mew, 1)) return GetRandomMewDirectionCandidate(2); - return DIR_WEST; + else + return DIR_WEST; } // If this point is reached, Mew cannot move without getting closer to the player @@ -311,7 +315,8 @@ static u8 GetValidMewMoveDirection(u8 ignoredDir) if (count > 1) return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % count]; - return sMewDirectionCandidates[0]; + else + return sMewDirectionCandidates[0]; } void UpdateFarawayIslandStepCounter(void) diff --git a/src/field_effect.c b/src/field_effect.c index b64902c0ec..41f1a899ce 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2597,7 +2597,7 @@ static void FieldMoveShowMonOutdoorsEffect_Init(struct Task *task) { task->data[11] = REG_WININ; task->data[12] = REG_WINOUT; - StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); + StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); task->tWinHoriz = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); task->tWinVert = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); task->tWinIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index e907af5b9e..3d916e9d09 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -101,9 +101,9 @@ static void sub_808C280(struct ObjectEvent *); static void StartStrengthAnim(u8, u8); static void Task_PushBoulder(u8 taskId); -static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); -static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); -static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static u8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static u8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static u8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); static void DoPlayerMatJump(void); static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); @@ -1789,7 +1789,7 @@ static bool8 Fishing_ShowDots(struct Task *task) AlignFishingAnimationFrames(); task->tFrameCounter++; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { task->tStep = FISHING_NO_BITE; if (task->tRoundsPlayed != 0) @@ -1878,7 +1878,7 @@ static bool8 Fishing_WaitForA(struct Task *task) task->tFrameCounter++; if (task->tFrameCounter >= reelTimeouts[task->tFishingRod]) task->tStep = FISHING_GOT_AWAY; - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) task->tStep++; return FALSE; } diff --git a/src/field_special_scene.c b/src/field_special_scene.c index 6b41c54237..bd6c833afb 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -280,7 +280,7 @@ void Task_HandlePorthole(u8 taskId) } break; case IDLE_CHECK: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) data[1] = 1; if (!ScriptMovement_IsObjectMovementFinished(OBJ_EVENT_ID_PLAYER, location->mapNum, location->mapGroup)) return; diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 9916177131..785f7b426f 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -227,7 +227,9 @@ bool8 SetUpFieldMove_Cut(void) y = gPlayerFacingPosition.y + sHyperCutStruct[i].y; tileCuttable = TRUE; - for (j = 0; j < 2; ++j) { + j = 0; + do + { if (sHyperCutStruct[i].unk2[j] == 0) break; if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE) @@ -235,7 +237,7 @@ bool8 SetUpFieldMove_Cut(void) tileCuttable = FALSE; break; } - } + } while (++j <= 1); if (tileCuttable == TRUE) { @@ -251,8 +253,11 @@ bool8 SetUpFieldMove_Cut(void) sHyperCutTiles[tileArrayId] = TRUE; ret = TRUE; } - else if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) - sHyperCutTiles[tileArrayId] = TRUE; + else + { + if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) + sHyperCutTiles[tileArrayId] = TRUE; + } } } } diff --git a/src/frontier_pass.c b/src/frontier_pass.c index ac81c51e07..702f6c0987 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -937,14 +937,14 @@ static void Task_HandleFrontierPassInput(u8 taskId) { u8 var = FALSE; // Reused, first informs whether the cursor moves, then used as the new cursor area. - if (JOY_HELD(DPAD_UP) && sPassGfx->cursorSprite->pos1.y >= 9) + if (gMain.heldKeys & DPAD_UP && sPassGfx->cursorSprite->pos1.y >= 9) { sPassGfx->cursorSprite->pos1.y -= 2; if (sPassGfx->cursorSprite->pos1.y <= 7) sPassGfx->cursorSprite->pos1.y = 2; var = TRUE; } - if (JOY_HELD(DPAD_DOWN) && sPassGfx->cursorSprite->pos1.y <= 135) + if (gMain.heldKeys & DPAD_DOWN && sPassGfx->cursorSprite->pos1.y <= 135) { sPassGfx->cursorSprite->pos1.y += 2; if (sPassGfx->cursorSprite->pos1.y >= 137) @@ -952,14 +952,14 @@ static void Task_HandleFrontierPassInput(u8 taskId) var = TRUE; } - if (JOY_HELD(DPAD_LEFT) && sPassGfx->cursorSprite->pos1.x >= 6) + if (gMain.heldKeys & DPAD_LEFT && sPassGfx->cursorSprite->pos1.x >= 6) { sPassGfx->cursorSprite->pos1.x -= 2; if (sPassGfx->cursorSprite->pos1.x <= 4) sPassGfx->cursorSprite->pos1.x = 5; var = TRUE; } - if (JOY_HELD(DPAD_RIGHT) && sPassGfx->cursorSprite->pos1.x <= 231) + if (gMain.heldKeys & DPAD_RIGHT && sPassGfx->cursorSprite->pos1.x <= 231) { sPassGfx->cursorSprite->pos1.x += 2; if (sPassGfx->cursorSprite->pos1.x >= 233) @@ -969,7 +969,7 @@ static void Task_HandleFrontierPassInput(u8 taskId) if (!var) // Cursor did not change. { - if (sPassData->cursorArea != CURSOR_AREA_NOTHING && JOY_NEW(A_BUTTON)) + if (sPassData->cursorArea != CURSOR_AREA_NOTHING && gMain.newKeys & A_BUTTON) { if (sPassData->cursorArea <= CURSOR_AREA_RECORD) // Map, Card, Record { @@ -986,7 +986,7 @@ static void Task_HandleFrontierPassInput(u8 taskId) } } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_PC_OFF); SetMainCallback2(CB2_HideFrontierPass); @@ -1173,47 +1173,75 @@ static void sub_80C5F58(bool8 arg0, bool8 arg1) static void sub_80C6104(u8 cursorArea, u8 previousCursorArea) { + bool32 var; + switch (previousCursorArea) { case CURSOR_AREA_MAP: CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24, 16, 3, 12, 7, 17); + var = TRUE; break; case CURSOR_AREA_CARD: CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 336, 16, 10, 12, 7, 17); + var = TRUE; break; case CURSOR_AREA_RECORD: - if (sPassData->hasBattleRecord) + if (!sPassData->hasBattleRecord) + { + var = FALSE; + } + else + { CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28, 2, 10, 12, 3, 17); - else if (cursorArea == CURSOR_AREA_NOTHING || cursorArea > CURSOR_AREA_CANCEL) - return; + var = TRUE; + } break; case CURSOR_AREA_CANCEL: CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3350, 21, 0, 9, 2, 17); + var = TRUE; break; default: + var = FALSE; + break; + } + + if (!var) + { if (cursorArea == CURSOR_AREA_NOTHING || cursorArea > CURSOR_AREA_CANCEL) return; - break; } switch (cursorArea) { case CURSOR_AREA_MAP: CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 168, 16, 3, 12, 7, 17); + var = TRUE; break; case CURSOR_AREA_CARD: CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 504, 16, 10, 12, 7, 17); + var = TRUE; break; case CURSOR_AREA_RECORD: - if (sPassData->hasBattleRecord) - CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28 + 72, 2, 10, 12, 3, 17); - else + if (!sPassData->hasBattleRecord) return; - break; // needed + + CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28 + 72, 2, 10, 12, 3, 17); + var = TRUE; + break; case CURSOR_AREA_CANCEL: CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3374, 21, 0, 9, 2, 17); + var = TRUE; break; default: + var = FALSE; + break; + } + + if (!var) + { + #ifndef NONMATCHING + asm("":::"r4"); + #endif if (previousCursorArea == CURSOR_AREA_NOTHING || previousCursorArea > CURSOR_AREA_CANCEL) return; } @@ -1443,19 +1471,19 @@ static void Task_HandleFrontierMap(u8 taskId) break; return; case 1: - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_PC_OFF); data[0] = 4; } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (sMapData->cursorPos >= NUM_FRONTIER_FACILITIES - 1) HandleFrontierMapCursorMove(0); else data[0] = 2; } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { if (sMapData->cursorPos == 0) HandleFrontierMapCursorMove(1); diff --git a/src/frontier_util.c b/src/frontier_util.c index a36e2ec9f4..3e7fecb480 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -2486,6 +2486,7 @@ void SetFrontierBrainObjEventGfx_2(void) #define FRONTIER_BRAIN_OTID 61226 +#ifdef NONMATCHING void CreateFrontierBrainPokemon(void) { s32 i, j; @@ -2508,13 +2509,11 @@ void CreateFrontierBrainPokemon(void) { if (!(selectedMonBits & 1)) continue; + do { - do - { - j = Random32(); //Should be one while loop, but that doesn't match - } while (IsShinyOtIdPersonality(FRONTIER_BRAIN_OTID, j)); - } while (sFrontierBrainsMons[facility][symbol][i].nature != GetNatureFromPersonality(j)); + j = Random32(); + } while (IsShinyOtIdPersonality(FRONTIER_BRAIN_OTID, j) || sFrontierBrainsMons[facility][symbol][i].nature != GetNatureFromPersonality(j)); CreateMon(&gEnemyParty[monPartyId], sFrontierBrainsMons[facility][symbol][i].species, monLevel, @@ -2536,6 +2535,242 @@ void CreateFrontierBrainPokemon(void) monPartyId++; } } +#else +NAKED +void CreateFrontierBrainPokemon(void) +{ + asm_unified( + "push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x44\n\ + ldr r0, =0x000040cf\n\ + bl VarGet\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x20]\n\ + bl GetFronterBrainSymbol\n\ + str r0, [sp, 0x24]\n\ + ldr r0, [sp, 0x20]\n\ + cmp r0, 0x1\n\ + bne _081A4E44\n\ + ldr r0, =0x000003fe\n\ + bl TrainerIdToDomeTournamentId\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl GetDomeTrainerSelectedMons\n\ + adds r4, r0, 0\n\ + b _081A4E46\n\ + .pool\n\ +_081A4E44:\n\ + movs r4, 0x7\n\ +_081A4E46:\n\ + bl ZeroEnemyPartyMons\n\ + movs r1, 0\n\ + str r1, [sp, 0x18]\n\ + bl SetFacilityPtrsGetLevel\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x1C]\n\ + movs r2, 0\n\ + str r2, [sp, 0x14]\n\ +_081A4E5C:\n\ + movs r0, 0x1\n\ + ands r0, r4\n\ + asrs r4, 1\n\ + str r4, [sp, 0x30]\n\ + ldr r3, [sp, 0x14]\n\ + adds r3, 0x1\n\ + str r3, [sp, 0x28]\n\ + cmp r0, 0\n\ + bne _081A4E70\n\ + b _081A4FC4\n\ +_081A4E70:\n\ + ldr r4, [sp, 0x14]\n\ + lsls r4, 2\n\ + mov r9, r4\n\ + ldr r0, [sp, 0x24]\n\ + lsls r0, 4\n\ + str r0, [sp, 0x38]\n\ + ldr r1, [sp, 0x20]\n\ + lsls r1, 4\n\ + str r1, [sp, 0x34]\n\ + ldr r2, [sp, 0x1C]\n\ + lsls r2, 24\n\ + str r2, [sp, 0x3C]\n\ + ldr r3, [sp, 0x18]\n\ + adds r3, 0x1\n\ + str r3, [sp, 0x2C]\n\ + ldr r0, [sp, 0x14]\n\ + add r0, r9\n\ + lsls r0, 2\n\ + mov r8, r0\n\ +_081A4E96:\n\ + bl Random\n\ + adds r4, r0, 0\n\ + bl Random\n\ + lsls r4, 16\n\ + lsrs r7, r4, 16\n\ + lsls r0, 16\n\ + orrs r7, r0\n\ + ldr r0, =0x0000ef2a\n\ + adds r1, r7, 0\n\ + bl IsShinyOtIdPersonality\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _081A4E96\n\ + ldr r4, [sp, 0x38]\n\ + ldr r1, [sp, 0x24]\n\ + subs r0, r4, r1\n\ + lsls r5, r0, 2\n\ + mov r2, r8\n\ + adds r4, r2, r5\n\ + ldr r3, [sp, 0x34]\n\ + ldr r1, [sp, 0x20]\n\ + subs r0, r3, r1\n\ + lsls r6, r0, 3\n\ + adds r4, r6\n\ + ldr r2, =sFrontierBrainsMons\n\ + adds r4, r2\n\ + adds r0, r7, 0\n\ + bl GetNatureFromPersonality\n\ + ldrb r1, [r4, 0x5]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r1, r0\n\ + bne _081A4E96\n\ + ldr r4, [sp, 0x18]\n\ + movs r0, 0x64\n\ + adds r3, r4, 0\n\ + muls r3, r0\n\ + mov r8, r3\n\ + ldr r1, =gEnemyParty\n\ + add r1, r8\n\ + mov r10, r1\n\ + ldr r4, [sp, 0x14]\n\ + add r4, r9\n\ + lsls r4, 2\n\ + adds r0, r4, r5\n\ + adds r0, r6\n\ + ldr r2, =sFrontierBrainsMons\n\ + adds r0, r2\n\ + ldrh r1, [r0]\n\ + ldr r3, [sp, 0x3C]\n\ + lsrs r2, r3, 24\n\ + ldrb r3, [r0, 0x4]\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + str r7, [sp, 0x4]\n\ + str r0, [sp, 0x8]\n\ + ldr r0, =0x0000ef2a\n\ + str r0, [sp, 0xC]\n\ + mov r0, r10\n\ + bl CreateMon\n\ + ldr r0, =sFrontierBrainsMons\n\ + adds r5, r0\n\ + adds r5, r6, r5\n\ + adds r4, r5, r4\n\ + adds r4, 0x2\n\ + mov r0, r10\n\ + movs r1, 0xC\n\ + adds r2, r4, 0\n\ + bl SetMonData\n\ + movs r7, 0\n\ + mov r6, r8\n\ + ldr r3, =gEnemyParty\n\ +_081A4F32:\n\ + adds r1, r7, 0\n\ + adds r1, 0x1A\n\ + ldr r0, [sp, 0x14]\n\ + add r0, r9\n\ + lsls r4, r0, 2\n\ + adds r2, r5, r4\n\ + adds r0, r7, 0x6\n\ + adds r2, r0\n\ + adds r0, r6, r3\n\ + str r3, [sp, 0x40]\n\ + bl SetMonData\n\ + adds r7, 0x1\n\ + ldr r3, [sp, 0x40]\n\ + cmp r7, 0x5\n\ + ble _081A4F32\n\ + movs r1, 0xFF\n\ + add r0, sp, 0x10\n\ + strb r1, [r0]\n\ + movs r7, 0\n\ + ldr r1, [sp, 0x18]\n\ + movs r2, 0x64\n\ + adds r6, r1, 0\n\ + muls r6, r2\n\ + ldr r3, =sFrontierBrainsMons + 0xC\n\ + mov r8, r3\n\ + ldr r3, =gEnemyParty\n\ + adds r5, r4, 0\n\ +_081A4F6A:\n\ + ldr r4, [sp, 0x38]\n\ + ldr r0, [sp, 0x24]\n\ + subs r1, r4, r0\n\ + lsls r1, 2\n\ + adds r1, r5, r1\n\ + ldr r2, [sp, 0x34]\n\ + ldr r4, [sp, 0x20]\n\ + subs r0, r2, r4\n\ + lsls r0, 3\n\ + adds r1, r0\n\ + add r1, r8\n\ + ldrh r4, [r1]\n\ + lsls r2, r7, 24\n\ + lsrs r2, 24\n\ + adds r0, r6, r3\n\ + adds r1, r4, 0\n\ + str r3, [sp, 0x40]\n\ + bl SetMonMoveSlot\n\ + ldr r3, [sp, 0x40]\n\ + cmp r4, 0xDA\n\ + bne _081A4F9C\n\ + movs r1, 0\n\ + add r0, sp, 0x10\n\ + strb r1, [r0]\n\ +_081A4F9C:\n\ + adds r5, 0x2\n\ + adds r7, 0x1\n\ + cmp r7, 0x3\n\ + ble _081A4F6A\n\ + ldr r0, [sp, 0x18]\n\ + movs r1, 0x64\n\ + adds r4, r0, 0\n\ + muls r4, r1\n\ + ldr r0, =gEnemyParty\n\ + adds r4, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0x20\n\ + add r2, sp, 0x10\n\ + bl SetMonData\n\ + adds r0, r4, 0\n\ + bl CalculateMonStats\n\ + ldr r2, [sp, 0x2C]\n\ + str r2, [sp, 0x18]\n\ +_081A4FC4:\n\ + ldr r4, [sp, 0x30]\n\ + ldr r3, [sp, 0x28]\n\ + str r3, [sp, 0x14]\n\ + cmp r3, 0x2\n\ + bgt _081A4FD0\n\ + b _081A4E5C\n\ +_081A4FD0:\n\ + add sp, 0x44\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); +} +#endif u16 GetFrontierBrainMonSpecies(u8 monId) { diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index a13543d6a0..2b548dea26 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -730,7 +730,7 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId) static void Task_Hof_ExitOnKeyPressed(u8 taskId) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { FadeOutBGM(4); gTasks[taskId].func = Task_Hof_HandlePaletteOnExit; @@ -992,7 +992,7 @@ static void Task_HofPC_HandleInput(u8 taskId) { u16 i; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (gTasks[taskId].tCurrTeamNo != 0) // prepare another team to view { @@ -1020,7 +1020,7 @@ static void Task_HofPC_HandleInput(u8 taskId) gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } } - else if (JOY_NEW(B_BUTTON)) // turn off hall of fame PC + else if (gMain.newKeys & B_BUTTON) // turn off hall of fame PC { if (IsCryPlayingOrClearCrySongs()) { @@ -1029,12 +1029,12 @@ static void Task_HofPC_HandleInput(u8 taskId) } gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } - else if (JOY_NEW(DPAD_UP) && gTasks[taskId].tCurrMonId != 0) // change mon -1 + else if (gMain.newKeys & DPAD_UP && gTasks[taskId].tCurrMonId != 0) // change mon -1 { gTasks[taskId].tCurrMonId--; gTasks[taskId].func = Task_HofPC_PrintMonInfo; } - else if (JOY_NEW(DPAD_DOWN) && gTasks[taskId].tCurrMonId < gTasks[taskId].tMonNo - 1) // change mon +1 + else if (gMain.newKeys & DPAD_DOWN && gTasks[taskId].tCurrMonId < gTasks[taskId].tMonNo - 1) // change mon +1 { gTasks[taskId].tCurrMonId++; gTasks[taskId].func = Task_HofPC_PrintMonInfo; @@ -1098,7 +1098,7 @@ static void Task_HofPC_PrintDataIsCorrupted(u8 taskId) static void Task_HofPC_ExitOnButtonPress(u8 taskId) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 45cc24e5c8..04e2216f64 100644 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -824,7 +824,7 @@ void sub_817B1C8(u8 a) LZ77UnCompVram(gUnknown_085F1398, (void *)(BG_SCREEN_ADDR(6))); LoadPalette(&gUnknown_085F0CFC, 0, 96); LoadCompressedSpriteSheet(gUnknown_085F5064); - LZ77UnCompVram(gUnknown_085F16A8, (void *)(OBJ_VRAM0)); + LZ77UnCompVram(gUnknown_085F16A8, (void *)(VRAM + 0x10000)); LoadPalette(&gUnknown_085F1668, 256, 32); sub_817B76C(); break; @@ -834,7 +834,7 @@ void sub_817B1C8(u8 a) LZ77UnCompVram(gUnknown_085F1398, (void *)(BG_SCREEN_ADDR(6))); LoadPalette(&gUnknown_085F0D5C, 0, 96); LoadCompressedSpriteSheet(gUnknown_085F5064); - LZ77UnCompVram(gUnknown_085F16A8, (void *)(OBJ_VRAM0)); + LZ77UnCompVram(gUnknown_085F16A8, (void *)(VRAM + 0x10000)); LoadPalette(&gUnknown_085F1688, 256, 32); sub_817B76C(); break; diff --git a/src/item.c b/src/item.c index 290e7177c4..5a77d363ec 100644 --- a/src/item.c +++ b/src/item.c @@ -181,67 +181,222 @@ bool8 HasAtLeastOneBerry(void) return FALSE; } +#ifdef NONMATCHING +// Refuses to match. bool8 CheckBagHasSpace(u16 itemId, u16 count) { - u8 i, pocket; - u16 slotCapacity, ownedCount; + u8 i; if (ItemId_GetPocket(itemId) == POCKET_NONE) return FALSE; - if (InBattlePyramid() || (FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE)) + if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) { return CheckPyramidBagHasSpace(itemId, count); } - - pocket = ItemId_GetPocket(itemId) - 1; - if (pocket != BERRIES_POCKET) - slotCapacity = MAX_BAG_ITEM_CAPACITY; else - slotCapacity = MAX_BERRY_CAPACITY; - - // Check space in any existing item slots that already contain this item - for (i = 0; i < gBagPockets[pocket].capacity; i++) { - if (gBagPockets[pocket].itemSlots[i].itemId == itemId) - { - ownedCount = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity); - if (ownedCount + count <= slotCapacity) - return TRUE; - if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET) - return FALSE; - count -= (slotCapacity - ownedCount); - if (count == 0) - break; //Should just be "return TRUE", since setting count to 0 means all the remaining checks until return will be false anyway, but that doesn't match - } - } + u8 pocket; + u16 slotCapacity; + u16 ownedCount; - // Check space in empty item slots - if (count > 0) //if (count !=0) also works here; both match - { + pocket = ItemId_GetPocket(itemId) - 1; + if (pocket != BERRIES_POCKET) + slotCapacity = MAX_BAG_ITEM_CAPACITY; + else + slotCapacity = MAX_BERRY_CAPACITY; + + // Check space in any existing item slots that already contain this item for (i = 0; i < gBagPockets[pocket].capacity; i++) { - if (gBagPockets[pocket].itemSlots[i].itemId == 0) + if (gBagPockets[pocket].itemSlots[i].itemId == itemId) { - if (count > slotCapacity) + ownedCount = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity); + if (ownedCount + count <= slotCapacity) + return TRUE; + if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET) + return FALSE; + count -= slotCapacity - ownedCount; + if (count == 0) + return TRUE; + } + } + + // Check space in empty item slots + if (count > 0) + { + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == 0) { + if (count <= slotCapacity) + return TRUE; if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET) return FALSE; count -= slotCapacity; } - else - { - count = 0; //Should just be "return TRUE", since setting count to 0 means all the remaining checks until return will be false anyway, but that doesn't match - break; - } } + if (count > 0) + return FALSE; // No more item slots. The bag is full } - if (count > 0) //if (count !=0) also works here; both match - return FALSE; // No more item slots. The bag is full - } - return TRUE; + return TRUE; + } } +#else +NAKED +bool8 CheckBagHasSpace(u16 itemId, u16 count) +{ + asm_unified( + "push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + lsls r1, 16\n\ + lsrs r5, r1, 16\n\ + bl ItemId_GetPocket\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080D6906\n\ + bl InBattlePyramid\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080D6838\n\ + ldr r0, =0x00004004\n\ + bl FlagGet\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _080D684C\n\ +_080D6838:\n\ + mov r0, r8\n\ + adds r1, r5, 0\n\ + bl CheckPyramidBagHasSpace\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + b _080D6916\n\ + .pool\n\ +_080D684C:\n\ + mov r0, r8\n\ + bl ItemId_GetPocket\n\ + subs r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r7, =0x000003e7\n\ + cmp r2, 0x3\n\ + beq _080D6860\n\ + movs r7, 0x63\n\ +_080D6860:\n\ + movs r6, 0\n\ + ldr r1, =gBagPockets\n\ + lsls r4, r2, 3\n\ + adds r0, r4, r1\n\ + mov r9, r4\n\ + ldrb r0, [r0, 0x4]\n\ + cmp r6, r0\n\ + bcs _080D68BC\n\ + subs r0, r2, 0x2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ +_080D6878:\n\ + adds r0, r4, r1\n\ + ldr r1, [r0]\n\ + lsls r0, r6, 2\n\ + adds r1, r0, r1\n\ + ldrh r0, [r1]\n\ + cmp r0, r8\n\ + bne _080D68AC\n\ + adds r0, r1, 0x2\n\ + str r2, [sp]\n\ + bl GetBagItemQuantity\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + adds r0, r1, r5\n\ + ldr r2, [sp]\n\ + cmp r0, r7\n\ + ble _080D6914\n\ + mov r0, r10\n\ + cmp r0, 0x1\n\ + bls _080D6906\n\ + subs r0, r7, r1\n\ + subs r0, r5, r0\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0\n\ + beq _080D6914\n\ +_080D68AC:\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + ldr r1, =gBagPockets\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0, 0x4]\n\ + cmp r6, r0\n\ + bcc _080D6878\n\ +_080D68BC:\n\ + cmp r5, 0\n\ + beq _080D6914\n\ + movs r6, 0\n\ + ldr r3, =gBagPockets\n\ + mov r1, r9\n\ + adds r0, r1, r3\n\ + ldrb r0, [r0, 0x4]\n\ + cmp r6, r0\n\ + bcs _080D6902\n\ + adds r4, r3, 0\n\ + subs r0, r2, 0x2\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ +_080D68D6:\n\ + adds r0, r1, r4\n\ + ldr r1, [r0]\n\ + lsls r0, r6, 2\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + bne _080D68F2\n\ + cmp r5, r7\n\ + bls _080D6914\n\ + cmp r2, 0x1\n\ + bls _080D6906\n\ + subs r0, r5, r7\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ +_080D68F2:\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + mov r1, r9\n\ + adds r0, r1, r3\n\ + ldrb r0, [r0, 0x4]\n\ + cmp r6, r0\n\ + bcc _080D68D6\n\ +_080D6902:\n\ + cmp r5, 0\n\ + beq _080D6914\n\ +_080D6906:\n\ + movs r0, 0\n\ + b _080D6916\n\ + .pool\n\ +_080D6914:\n\ + movs r0, 0x1\n\ +_080D6916:\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1"); +} +#endif // NONMATCHING bool8 AddBagItem(u16 itemId, u16 count) { diff --git a/src/item_menu.c b/src/item_menu.c index d40c3a12c7..ace2fd11e1 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -628,6 +628,7 @@ void CB2_Bag(void) bool8 SetupBagMenu(void) { + u32 index; u8 taskId; switch (gMain.state) @@ -1166,7 +1167,7 @@ void Task_BagMenu_HandleInput(u8 taskId) SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 0); return; default: - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { if (CanSwapItems() == TRUE) { @@ -1228,12 +1229,12 @@ static u8 GetSwitchBagPocketDirection(void) if (gBagMenu->pocketSwitchDisabled) return SWITCH_POCKET_NONE; LRKeys = GetLRKeysPressed(); - if (JOY_NEW(DPAD_LEFT) || LRKeys == MENU_L_PRESSED) + if ((gMain.newKeys & DPAD_LEFT) || LRKeys == MENU_L_PRESSED) { PlaySE(SE_SELECT); return SWITCH_POCKET_LEFT; } - if (JOY_NEW(DPAD_RIGHT) || LRKeys == MENU_R_PRESSED) + if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == MENU_R_PRESSED) { PlaySE(SE_SELECT); return SWITCH_POCKET_RIGHT; @@ -1387,7 +1388,7 @@ static void Task_HandleSwappingItemsInput(u8 taskId) if (MenuHelpers_CallLinkSomething() != TRUE) { - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { PlaySE(SE_SELECT); ListMenuGetScrollAndRow(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); @@ -1405,7 +1406,7 @@ static void Task_HandleSwappingItemsInput(u8 taskId) break; case LIST_CANCEL: PlaySE(SE_SELECT); - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) sub_81AC498(taskId); else sub_81AC590(taskId); @@ -1644,7 +1645,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) if (MenuHelpers_CallLinkSomething() != TRUE) { s8 cursorPos = Menu_GetCursorPos(); - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { if (cursorPos > 0 && sub_81ACDFC(cursorPos - 2)) { @@ -1652,7 +1653,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); } } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (cursorPos < (gBagMenu->contextMenuNumItems - 2) && sub_81ACDFC(cursorPos + 2)) { @@ -1660,7 +1661,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); } } - else if ((JOY_NEW(DPAD_LEFT)) || GetLRKeysPressed() == MENU_L_PRESSED) + else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { if ((cursorPos & 1) && sub_81ACDFC(cursorPos - 1)) { @@ -1668,7 +1669,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); } } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1)) { @@ -1676,12 +1677,12 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); } } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); sItemMenuActions[gBagMenu->contextMenuItemsPtr[cursorPos]].func.void_u8(taskId); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); sItemMenuActions[ITEMMENUACTION_CANCEL].func.void_u8(taskId); @@ -1785,13 +1786,13 @@ void Task_ChooseHowManyToToss(u8 taskId) { PrintItemDepositAmount(gBagMenu->windowPointers[7], tItemCount); } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); BagMenu_RemoveWindow(7); BagMenu_TossItems(taskId); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); BagMenu_RemoveWindow(7); @@ -1817,7 +1818,7 @@ void Task_ActuallyToss(u8 taskId) u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); RemoveBagItem(gSpecialVar_ItemId, tItemCount); @@ -1885,7 +1886,7 @@ static void BagMenu_PrintItemCantBeHeld(u8 taskId) void sub_81AD350(u8 taskId) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); BagMenu_InitListsMenu(taskId); @@ -2059,13 +2060,13 @@ static void Task_SellHowManyDialogueHandleInput(u8 taskId) { PrintItemSoldAmount(gBagMenu->windowPointers[8], tItemCount, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount); } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); BagMenu_RemoveWindow(8); DisplaySellItemPriceAndConfirm(taskId); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); BagMenu_PrintCursor_(data[0], 0); @@ -2107,7 +2108,7 @@ static void BagMenu_Sell_UpdateItemListAndMoney(u8 taskId) static void BagMenu_Sell_WaitForABPress(u8 taskId) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); RemoveMoneyWindow(); @@ -2143,13 +2144,13 @@ static void Task_ChooseHowManyToDeposit(u8 taskId) { PrintItemDepositAmount(gBagMenu->windowPointers[7], tItemCount); } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); BagMenu_RemoveWindow(7); BagMenu_TryDepositItem(taskId); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); BagMenu_PrintDescription(data[1]); @@ -2188,7 +2189,7 @@ static void BagMenu_Deposit_WaitForABPress(u8 taskId) { s16* data = gTasks[taskId].data; - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); BagMenu_PrintDescription(data[1]); diff --git a/src/item_use.c b/src/item_use.c index f9d1ff824b..b1b90f3d5b 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -721,7 +721,7 @@ static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId) static bool8 TryToWaterSudowoodo(void) { - s16 x, y; + u16 x, y; u8 z; u8 objId; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); @@ -792,7 +792,7 @@ static void BootUpSoundTMHM(u8 taskId) static void Task_ShowTMHMContainedMessage(u8 taskId) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]); StringExpandPlaceholders(gStringVar4, gText_TMHMContainedVar1); @@ -956,7 +956,7 @@ void ItemUseInBattle_PokeBall(u8 taskId) static void Task_CloseStatIncreaseMessage(u8 taskId) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { if (!InBattlePyramid()) Task_FadeAndCloseBagMenu(taskId); diff --git a/src/link.c b/src/link.c index 9fd35a10b6..cdaf58469f 100644 --- a/src/link.c +++ b/src/link.c @@ -445,27 +445,27 @@ static void TestBlockTransfer(u8 nothing, u8 is, u8 used) static void LinkTestProcessKeyInput(void) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { gShouldAdvanceLinkState = 1; } - if (JOY_HELD(B_BUTTON)) + if (gMain.heldKeys & B_BUTTON) { InitBlockSend(gHeap + 0x4000, 0x00002004); } - if (JOY_NEW(L_BUTTON)) + if (gMain.newKeys & L_BUTTON) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(2, 0, 0)); } - if (JOY_NEW(START_BUTTON)) + if (gMain.newKeys & START_BUTTON) { SetSuppressLinkErrorMessage(TRUE); } - if (JOY_NEW(R_BUTTON)) + if (gMain.newKeys & R_BUTTON) { TrySavingData(SAVE_LINK); } - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { SetCloseLinkCallback(); } @@ -1754,7 +1754,7 @@ static void CB2_PrintErrorMessage(void) { if (gWirelessCommType == 1) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_PIN); gWirelessCommType = 0; @@ -1764,7 +1764,7 @@ static void CB2_PrintErrorMessage(void) } else if (gWirelessCommType == 2) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { rfu_REQ_stopMode(); rfu_waitREQComplete(); diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 41b28ec5f3..6a2605c96e 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -876,7 +876,8 @@ static void sub_800F498(u16 *a0, u8 *a1) static bool32 RfuProcessEnqueuedRecvBlock(void) { - u8 i, j; + u8 i; + u8 j; u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))]; u8 sp48[2 * (CMD_LENGTH - 1)]; u8 status; @@ -922,7 +923,7 @@ static bool32 RfuProcessEnqueuedRecvBlock(void) static void HandleSendFailure(u8 unused, u32 flags) { - s32 i, j, temp; + s32 i, j; const u8 *r10 = Rfu.sendBlock.payload; for (i = 0; i < Rfu.sendBlock.count; i++) @@ -932,15 +933,14 @@ static void HandleSendFailure(u8 unused, u32 flags) sResendBlock16[0] = RFUCMD_0x8900 | i; for (j = 0; j < 7; j++) { - temp = j << 1; - sResendBlock16[j + 1] = (r10[i * 12 + temp + 1] << 8) | r10[i * 12 + temp]; + sResendBlock16[j + 1] = (r10[12 * i + (j << 1) + 1] << 8) | r10[12 * i + (j << 1) + 0]; } - for (j = 0; j < 7; j++) { - temp = j << 1; - sResendBlock8[temp + 1] = sResendBlock16[j] >> 8; - sResendBlock8[temp + 0] = sResendBlock16[j] & 0xff; + sResendBlock8[2 * j + 1] = sResendBlock16[j] >> 8; + sResendBlock8[2 * j + 0] = sResendBlock16[j]; + + j++;j--; // Needed to match; } RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8); Rfu.sendBlock.failedFlags |= (1 << i); @@ -1024,7 +1024,8 @@ void Rfu_SetBerryBlenderLinkCallback(void) static void RfuHandleReceiveCommand(u8 unused) { - u16 i, j; + u16 i; + u16 j; for (i = 0; i < MAX_RFU_PLAYERS; i++) { @@ -1038,7 +1039,7 @@ static void RfuHandleReceiveCommand(u8 unused) if (gRfuLinkStatus->parentChild == MODE_CHILD) { Rfu.playerCount = gRecvCmds[i][1]; - Rfu.multiplayerId = sub_800F74C((u8 *)(&gRecvCmds[i][2])); + Rfu.multiplayerId = sub_800F74C((u8 *)(gRecvCmds[i] + 2)); } break; case RFUCMD_0x8800: @@ -1237,9 +1238,10 @@ void Rfu_SendPacket(void *data) bool32 Rfu_InitBlockSend(const u8 *src, size_t size) { bool8 r4; - if (Rfu.callback != NULL || gSendCmd[0] != 0) + if (Rfu.callback != NULL) + return FALSE; + if (gSendCmd[0] != 0) return FALSE; - if (Rfu.sendBlock.sending) { sRfuDebug.unk_83++; @@ -1417,12 +1419,16 @@ void Rfu_SetCloseLinkCallback(void) static void SendReadyExitStandbyUntilAllReady(void) { - u8 i, playerCount; + u8 playerCount; + u8 i; - if (GetMultiplayerId() != 0 && Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60) + if (GetMultiplayerId() != 0) { - RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); - Rfu.resendExitStandbyTimer = 0; + if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60) + { + RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); + Rfu.resendExitStandbyTimer = 0; + } } playerCount = GetLinkPlayerCount(); for (i = 0; i < playerCount; i++) @@ -1452,7 +1458,8 @@ static void LinkLeaderReadyToExitStandby(void) // RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll static void Rfu_LinkStandby(void) { - u8 i, playerCount; + u8 i; + u8 playerCount; if (GetMultiplayerId() != 0) { @@ -1548,27 +1555,27 @@ static bool8 CheckForLeavingGroupMembers(void) bool8 memberLeft = FALSE; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_OK - || Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_NO) + if (Rfu.partnerSendStatuses[i] < RFU_STATUS_JOIN_GROUP_OK + || Rfu.partnerSendStatuses[i] > RFU_STATUS_JOIN_GROUP_NO) { - continue; - } - - if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS - || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) - { - if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE) + if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS + || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) { - Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP; - Rfu.partnerRecvStatuses[i] = RFU_STATUS_10; - rfu_clearSlot(TYPE_NI_RECV, i); - rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1); - memberLeft = TRUE; + if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE) + { + Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP; + Rfu.partnerRecvStatuses[i] = RFU_STATUS_10; + rfu_clearSlot(TYPE_NI_RECV, i); + rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1); + memberLeft = TRUE; + } + + } + else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) + rfu_clearSlot(TYPE_NI_RECV, i); + { + } - } - else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) - { - rfu_clearSlot(TYPE_NI_RECV, i); } } return memberLeft; @@ -2044,7 +2051,8 @@ void sub_80110B8(u32 a0) if ((r8 >> i) & 1) { child_sprite_genders |= ((0x80 | ((gLinkPlayers[Rfu.linkPlayerIdx[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.linkPlayerIdx[i]].trainerId & 7)) << (numConnectedChildren << 3)); - if (++numConnectedChildren == a0 - 1) + numConnectedChildren++; + if (numConnectedChildren == a0 - 1) break; } } @@ -2089,7 +2097,8 @@ static void sub_80111FC(void) static void sub_801120C(u8 msg, u8 paramCount) { - u8 i, disconnectFlag = 0; + u8 i; + u8 disconnectFlag = 0; switch (msg) { case LMAN_MSG_INITIALIZE_COMPLETED: diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 821b2d1185..db1ba8b43c 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -309,7 +309,8 @@ static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = { void RfuRecvQueue_Reset(struct RfuRecvQueue *queue) { - s32 i, j; + s32 i; + s32 j; for (i = 0; i < RECV_QUEUE_NUM_SLOTS; i++) { @@ -326,7 +327,8 @@ void RfuRecvQueue_Reset(struct RfuRecvQueue *queue) void RfuSendQueue_Reset(struct RfuSendQueue *queue) { - s32 i, j; + s32 i; + s32 j; for (i = 0; i < SEND_QUEUE_NUM_SLOTS; i++) { @@ -343,7 +345,8 @@ void RfuSendQueue_Reset(struct RfuSendQueue *queue) static void RfuUnusedQueue_Reset(struct RfuUnusedQueue *queue) { - s32 i, j; + s32 i; + s32 j; for (i = 0; i < UNUSED_QUEUE_NUM_SLOTS; i++) { @@ -620,39 +623,105 @@ static void ASCIIToPkmnStr(u8 *pkmnStr, const u8 *asciiStr) pkmnStr[i] = EOS; } +#ifdef NONMATCHING static u8 GetConnectedChildStrength(u8 maxFlags) { u8 flagCount = 0; - u8 flags = gRfuLinkStatus->connSlotFlag; + u32 flags = gRfuLinkStatus->connSlotFlag; u8 i; if (gRfuLinkStatus->parentChild == MODE_PARENT) { - for (i = 0; i < RFU_CHILD_MAX; i++) + for (i = 0; i < 4; flags >>= 1, i++) { if (flags & 1) { if (maxFlags == flagCount + 1) - { return gRfuLinkStatus->strength[i]; - break; // This break is needed to match - } flagCount++; } - flags >>= 1; } } else { - for (i = 0; i < 4; i++) + for (i = 0; i < 4; flags >>= 1, i++) { if (flags & 1) return gRfuLinkStatus->strength[i]; - flags >>= 1; } } return 0; } +#else +NAKED +static u8 GetConnectedChildStrength(u8 maxFlags) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tmovs r6, 0\n" + "\tldr r0, =gRfuLinkStatus\n" + "\tldr r4, [r0]\n" + "\tldrb r2, [r4, 0x2]\n" + "\tldrb r1, [r4]\n" + "\tadds r7, r0, 0\n" + "\tcmp r1, 0x1\n" + "\tbne _0800DD72\n" + "\tmovs r3, 0\n" + "\tands r1, r2\n" + "\tcmp r1, 0\n" + "\tbeq _0800DD4E\n" + "\tcmp r5, 0x1\n" + "\tbne _0800DD48\n" + "\tldrb r0, [r4, 0xA]\n" + "\tb _0800DD8C\n" + "\t.pool\n" + "_0800DD48:\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "_0800DD4E:\n" + "\tlsrs r2, 1\n" + "\tadds r0, r3, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r3, r0, 24\n" + "\tcmp r3, 0x3\n" + "\tbhi _0800DD8A\n" + "\tmovs r0, 0x1\n" + "\tands r0, r2\n" + "\tcmp r0, 0\n" + "\tbeq _0800DD4E\n" + "\tadds r0, r6, 0x1\n" + "\tcmp r5, r0\n" + "\tbne _0800DD48\n" + "_0800DD68:\n" + "\tldr r0, [r7]\n" + "\tadds r0, 0xA\n" + "\tadds r0, r3\n" + "\tldrb r0, [r0]\n" + "\tb _0800DD8C\n" + "_0800DD72:\n" + "\tmovs r3, 0\n" + "\tmovs r1, 0x1\n" + "_0800DD76:\n" + "\tadds r0, r2, 0\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _0800DD68\n" + "\tlsrs r2, 1\n" + "\tadds r0, r3, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r3, r0, 24\n" + "\tcmp r3, 0x3\n" + "\tbls _0800DD76\n" + "_0800DD8A:\n" + "\tmovs r0, 0\n" + "_0800DD8C:\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders) { @@ -922,7 +991,8 @@ void RecordMixTrainerNames(void) { if (gWirelessCommType != 0) { - s32 i, j; + s32 i; + s32 j; s32 nextSpace; s32 connectedTrainerRecordIndices[5]; struct TrainerNameRecord *newRecords = calloc(ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords), sizeof(struct TrainerNameRecord)); diff --git a/src/list_menu.c b/src/list_menu.c index 7784dd338b..e3c4e11d27 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -312,7 +312,7 @@ static void ListMenuDummyTask(u8 taskId) } -u32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) { switch (sMysteryGiftLinkMenu.state) { @@ -335,11 +335,11 @@ u32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str break; case 1: sMysteryGiftLinkMenu.currItemId = ListMenu_ProcessInput(sMysteryGiftLinkMenu.listTaskId); - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { sMysteryGiftLinkMenu.state = 2; } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { sMysteryGiftLinkMenu.currItemId = LIST_CANCEL; sMysteryGiftLinkMenu.state = 2; @@ -410,20 +410,20 @@ s32 ListMenu_ProcessInput(u8 listTaskId) { struct ListMenu *list = (void*) gTasks[listTaskId].data; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { return list->template.items[list->scrollOffset + list->selectedRow].id; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return LIST_CANCEL; } - else if (JOY_REPEAT(DPAD_UP)) + else if (gMain.newAndRepeatedKeys & DPAD_UP) { ListMenuChangeSelection(list, TRUE, 1, FALSE); return LIST_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { ListMenuChangeSelection(list, TRUE, 1, TRUE); return LIST_NOTHING_CHOSEN; @@ -439,12 +439,12 @@ s32 ListMenu_ProcessInput(u8 listTaskId) rightButton = FALSE; break; case LIST_MULTIPLE_SCROLL_DPAD: - leftButton = JOY_REPEAT(DPAD_LEFT); - rightButton = JOY_REPEAT(DPAD_RIGHT); + leftButton = gMain.newAndRepeatedKeys & DPAD_LEFT; + rightButton = gMain.newAndRepeatedKeys & DPAD_RIGHT; break; case LIST_MULTIPLE_SCROLL_L_R: - leftButton = JOY_REPEAT(L_BUTTON); - rightButton = JOY_REPEAT(R_BUTTON); + leftButton = gMain.newAndRepeatedKeys & L_BUTTON; + rightButton = gMain.newAndRepeatedKeys & R_BUTTON; break; } @@ -1257,17 +1257,17 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st s32 i, j, id = 0; subsprites[id] = sSubsprite_RedOutline1; - subsprites[id].x = -120; - subsprites[id].y = -120; + subsprites[id].x = 136; + subsprites[id].y = 136; id++; subsprites[id] = sSubsprite_RedOutline2; subsprites[id].x = rowWidth + 128; - subsprites[id].y = -120; + subsprites[id].y = 136; id++; subsprites[id] = sSubsprite_RedOutline7; - subsprites[id].x = -120; + subsprites[id].x = 136; subsprites[id].y = rowHeight + 128; id++; @@ -1297,7 +1297,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st for (j = 8; j < rowHeight - 8; j += 8) { subsprites[id] = sSubsprite_RedOutline4; - subsprites[id].x = -120; + subsprites[id].x = 136; subsprites[id].y = j - 120; id++; diff --git a/src/m4a.c b/src/m4a.c index b8f9e21c11..11a4525eab 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -22,7 +22,8 @@ u8 gMPlayMemAccArea[0x10]; u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust) { - u32 val1, val2; + u32 val1; + u32 val2; u32 fineAdjustShifted = fineAdjust << 24; if (key > 178) @@ -314,7 +315,7 @@ void MPlayExtender(struct CgbChannel *cgbChans) void MusicPlayerJumpTableCopy(void) { - asm("svc 0x2A"); + asm("swi 0x2A"); } void ClearChain(void *x) @@ -351,25 +352,25 @@ void SoundInit(struct SoundInfo *soundInfo) | SOUND_ALL_MIX_FULL; REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40; - REG_DMA1SAD = (u32)soundInfo->pcmBuffer; - REG_DMA1DAD = (u32)®_FIFO_A; - REG_DMA2SAD = (u32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; - REG_DMA2DAD = (u32)®_FIFO_B; + REG_DMA1SAD = (s32)soundInfo->pcmBuffer; + REG_DMA1DAD = (s32)®_FIFO_A; + REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; + REG_DMA2DAD = (s32)®_FIFO_B; SOUND_INFO_PTR = soundInfo; CpuFill32(0, soundInfo, sizeof(struct SoundInfo)); soundInfo->maxChans = 8; soundInfo->masterVolume = 15; - soundInfo->plynote = ply_note; + soundInfo->plynote = (u32)ply_note; soundInfo->CgbSound = DummyFunc; soundInfo->CgbOscOff = (void (*)(u8))DummyFunc; soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc; - soundInfo->ExtVolPit = (void (*)(struct MusicPlayerInfo *, struct MusicPlayerTrack *))DummyFunc; + soundInfo->ExtVolPit = (u32)DummyFunc; MPlayJumpTableCopy(gMPlayJumpTable); - soundInfo->MPlayJumpTable = (void (**)())gMPlayJumpTable; + soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable; SampleFreqSet(SOUND_MODE_FREQ_13379); @@ -380,7 +381,7 @@ void SampleFreqSet(u32 freq) { struct SoundInfo *soundInfo = SOUND_INFO_PTR; - freq = (freq & SOUND_MODE_FREQ) >> SOUND_MODE_FREQ_SHIFT; + freq = (freq & 0xF0000) >> 16; soundInfo->freq = freq; soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1]; soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank; @@ -431,9 +432,14 @@ void m4aSoundMode(u32 mode) soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT; - for (temp = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; temp != 0; temp--,chan++) + temp = MAX_DIRECTSOUND_CHANNELS; + chan = &soundInfo->chans[0]; + + while (temp != 0) { chan->status = 0; + temp--; + chan++; } } @@ -463,28 +469,37 @@ void m4aSoundMode(u32 mode) void SoundClear(void) { - s32 i; struct SoundInfo *soundInfo = SOUND_INFO_PTR; - struct SoundChannel *chan; + s32 i; + void *chan; if (soundInfo->ident != ID_NUMBER) return; soundInfo->ident++; - for (i = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; i > 0; i--,chan++) + i = MAX_DIRECTSOUND_CHANNELS; + chan = &soundInfo->chans[0]; + + while (i > 0) { - chan->status = 0; + ((struct SoundChannel *)chan)->status = 0; + i--; + chan = (void *)((s32)chan + sizeof(struct SoundChannel)); } - chan = (struct SoundChannel *)soundInfo->cgbChans; + chan = soundInfo->cgbChans; if (chan) { - for (i=1; i<=4; i++,chan++) + i = 1; + + while (i <= 4) { soundInfo->CgbOscOff(i); - chan->status = 0; + ((struct CgbChannel *)chan)->sf = 0; + i++; + chan = (void *)((s32)chan + sizeof(struct CgbChannel)); } } @@ -495,20 +510,21 @@ void m4aSoundVSyncOff(void) { struct SoundInfo *soundInfo = SOUND_INFO_PTR; - if (soundInfo->ident < ID_NUMBER || soundInfo->ident > ID_NUMBER + 1) - return; - soundInfo->ident += 10; + if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1) + { + soundInfo->ident += 10; - if (REG_DMA1CNT & (DMA_REPEAT << 16)) - REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + if (REG_DMA1CNT & (DMA_REPEAT << 16)) + REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - if (REG_DMA2CNT & (DMA_REPEAT << 16)) - REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + if (REG_DMA2CNT & (DMA_REPEAT << 16)) + REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - REG_DMA1CNT_H = DMA_32BIT; - REG_DMA2CNT_H = DMA_32BIT; + REG_DMA1CNT_H = DMA_32BIT; + REG_DMA2CNT_H = DMA_32BIT; - CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer)); + CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer)); + } } void m4aSoundVSyncOn(void) @@ -564,7 +580,7 @@ void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track } soundInfo->intp = (u32)mplayInfo; - soundInfo->func = MPlayMain; + soundInfo->func = (u32)MPlayMain; soundInfo->ident = ID_NUMBER; mplayInfo->ident = ID_NUMBER; } @@ -598,21 +614,28 @@ void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader mplayInfo->tempoC = 0; mplayInfo->fadeOI = 0; - for (i = 0, track = mplayInfo->tracks; i < songHeader->trackCount && i < mplayInfo->trackCount; i++, track++) + i = 0; + track = mplayInfo->tracks; + + while (i < songHeader->trackCount && i < mplayInfo->trackCount) { TrackStop(mplayInfo, track); track->flags = MPT_FLG_EXIST | MPT_FLG_START; track->chan = 0; track->cmdPtr = songHeader->part[i]; + i++; + track++; } - for (; i < mplayInfo->trackCount; i++, track++) + while (i < mplayInfo->trackCount) { TrackStop(mplayInfo, track); track->flags = 0; + i++; + track++; } - if (songHeader->reverb & SOUND_MODE_REVERB_SET) + if (songHeader->reverb & 0x80) m4aSoundMode(songHeader->reverb); mplayInfo->ident = ID_NUMBER; @@ -630,9 +653,14 @@ void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo) mplayInfo->ident++; mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; - for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + + while (i > 0) { TrackStop(mplayInfo, track); + i--; + track++; } mplayInfo->ident = ID_NUMBER; @@ -676,8 +704,10 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) if ((s16)(mplayInfo->fadeOV & mask) <= 0) { + i = mplayInfo->trackCount; + track = mplayInfo->tracks; - for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) + while (i > 0) { u32 val; @@ -689,6 +719,9 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) if (!val) track->flags = 0; + + i--; + track++; } if (mplayInfo->fadeOV & TEMPORARY_FADE) @@ -701,7 +734,10 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) } } - for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + + while (i > 0) { if (track->flags & MPT_FLG_EXIST) { @@ -710,6 +746,9 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) track->volX = (fadeOV >> FADE_VOL_SHIFT); track->flags |= MPT_FLG_VOLCHG; } + + i--; + track++; } } @@ -717,7 +756,7 @@ void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tr { if (track->flags & MPT_FLG_VOLSET) { - u32 x; + s32 x; s32 y; x = (u32)(track->vol * track->volX) >> 5; diff --git a/src/m4a_1.s b/src/m4a_1.s index 290404ad04..cab4ed1748 100644 --- a/src/m4a_1.s +++ b/src/m4a_1.s @@ -22,13 +22,13 @@ SoundMain: ldr r0, lt_SOUND_INFO_PTR ldr r0, [r0] ldr r2, lt_ID_NUMBER - ldr r3, [r0, #o_SoundInfo_ident] + ldr r3, [r0, o_SoundInfo_ident] cmp r2, r3 beq SoundMain_1 bx lr @ Exit the function if ident doesn't match ID_NUMBER. SoundMain_1: adds r3, 1 - str r3, [r0, #o_SoundInfo_ident] + str r3, [r0, o_SoundInfo_ident] push {r4-r7,lr} mov r1, r8 mov r2, r9 @@ -36,7 +36,7 @@ SoundMain_1: mov r4, r11 push {r0-r4} sub sp, 0x18 - ldrb r1, [r0, #o_SoundInfo_maxLines] + ldrb r1, [r0, o_SoundInfo_maxLines] cmp r1, 0 @ if maxLines is 0, there is no maximum beq SoundMain_3 ldr r2, lt_REG_VCOUNT @@ -48,24 +48,24 @@ SoundMain_2: adds r1, r2 SoundMain_3: str r1, [sp, 0x14] - ldr r3, [r0, #o_SoundInfo_func] + ldr r3, [r0, o_SoundInfo_func] cmp r3, 0 beq SoundMain_4 - ldr r0, [r0, #o_SoundInfo_intp] + ldr r0, [r0, o_SoundInfo_intp] bl _081DD25E ldr r0, [sp, 0x18] SoundMain_4: - ldr r3, [r0, #o_SoundInfo_CgbSound] + ldr r3, [r0, o_SoundInfo_CgbSound] bl _081DD25E ldr r0, [sp, 0x18] - ldr r3, [r0, #o_SoundInfo_pcmSamplesPerVBlank] + ldr r3, [r0, o_SoundInfo_pcmSamplesPerVBlank] mov r8, r3 ldr r5, lt_o_SoundInfo_pcmBuffer adds r5, r0 - ldrb r4, [r0, #o_SoundInfo_pcmDmaCounter] + ldrb r4, [r0, o_SoundInfo_pcmDmaCounter] subs r7, r4, 1 bls SoundMain_5 - ldrb r1, [r0, #o_SoundInfo_pcmDmaPeriod] + ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod] subs r1, r7 mov r2, r8 muls r2, r1 @@ -87,7 +87,7 @@ lt_PCM_DMA_BUF_SIZE: .word PCM_DMA_BUF_SIZE thumb_func_start SoundMainRAM SoundMainRAM: - ldrb r3, [r0, #o_SoundInfo_reverb] + ldrb r3, [r0, o_SoundInfo_reverb] cmp r3, 0 beq SoundMainRAM_NoReverb adr r1, SoundMainRAM_Reverb @@ -95,7 +95,7 @@ SoundMainRAM: .arm SoundMainRAM_Reverb: cmp r4, 0x2 - addeq r7, r0, #o_SoundInfo_pcmBuffer + addeq r7, r0, o_SoundInfo_pcmBuffer addne r7, r5, r8 mov r4, r8 _081DCEC4: @@ -145,14 +145,14 @@ SoundMainRAM_NoReverb_Loop: bgt SoundMainRAM_NoReverb_Loop _081DCF36: ldr r4, [sp, 0x18] - ldr r0, [r4, #o_SoundInfo_divFreq] + ldr r0, [r4, o_SoundInfo_divFreq] mov r12, r0 - ldrb r0, [r4, #o_SoundInfo_maxChans] - adds r4, #o_SoundInfo_chans + ldrb r0, [r4, o_SoundInfo_maxChans] + adds r4, o_SoundInfo_chans SoundMainRAM_ChanLoop: str r0, [sp, 0x4] - ldr r3, [r4, #o_SoundChannel_wav] + ldr r3, [r4, o_SoundChannel_wav] ldr r0, [sp, 0x14] cmp r0, 0 beq _081DCF60 @@ -169,7 +169,7 @@ _081DCF54: .pool _081DCF60: - ldrb r6, [r4, #o_SoundChannel_status] + ldrb r6, [r4, o_SoundChannel_status] movs r0, 0xC7 tst r0, r6 bne _081DCF6A @@ -182,99 +182,99 @@ _081DCF6A: tst r0, r6 bne _081DCFB0 movs r6, 0x3 - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_status] adds r0, r3, 0 adds r0, 0x10 - ldr r1, [r4, #o_SoundChannel_ct] + ldr r1, [r4, o_SoundChannel_ct] adds r0, r1 - str r0, [r4, #o_SoundChannel_cp] + str r0, [r4, o_SoundChannel_cp] ldr r0, [r3, 0xC] subs r0, r1 - str r0, [r4, #o_SoundChannel_ct] + str r0, [r4, o_SoundChannel_ct] movs r5, 0 - strb r5, [r4, #o_SoundChannel_ev] - str r5, [r4, #o_SoundChannel_fw] + strb r5, [r4, o_SoundChannel_ev] + str r5, [r4, o_SoundChannel_fw] ldrb r2, [r3, 0x3] movs r0, 0xC0 tst r0, r2 beq _081DCFF8 movs r0, 0x10 orrs r6, r0 - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_status] b _081DCFF8 _081DCFA0: - ldrb r5, [r4, #o_SoundChannel_ev] + ldrb r5, [r4, o_SoundChannel_ev] movs r0, 0x4 tst r0, r6 beq _081DCFB6 - ldrb r0, [r4, #o_SoundChannel_iel] + ldrb r0, [r4, o_SoundChannel_iel] subs r0, 1 - strb r0, [r4, #o_SoundChannel_iel] + strb r0, [r4, o_SoundChannel_iel] bhi _081DD006 _081DCFB0: movs r0, 0 - strb r0, [r4, #o_SoundChannel_status] + strb r0, [r4, o_SoundChannel_status] b _081DD240 _081DCFB6: movs r0, 0x40 tst r0, r6 beq _081DCFD6 - ldrb r0, [r4, #o_SoundChannel_release] + ldrb r0, [r4, o_SoundChannel_release] muls r5, r0 lsrs r5, 8 - ldrb r0, [r4, #o_SoundChannel_iev] + ldrb r0, [r4, o_SoundChannel_iev] cmp r5, r0 bhi _081DD006 _081DCFC8: - ldrb r5, [r4, #o_SoundChannel_iev] + ldrb r5, [r4, o_SoundChannel_iev] cmp r5, 0 beq _081DCFB0 movs r0, 0x4 orrs r6, r0 - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_status] b _081DD006 _081DCFD6: movs r2, 0x3 ands r2, r6 cmp r2, 0x2 bne _081DCFF4 - ldrb r0, [r4, #o_SoundChannel_decay] + ldrb r0, [r4, o_SoundChannel_decay] muls r5, r0 lsrs r5, 8 - ldrb r0, [r4, #o_SoundChannel_sustain] + ldrb r0, [r4, o_SoundChannel_sustain] cmp r5, r0 bhi _081DD006 adds r5, r0, 0 beq _081DCFC8 subs r6, 0x1 - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_status] b _081DD006 _081DCFF4: cmp r2, 0x3 bne _081DD006 _081DCFF8: - ldrb r0, [r4, #o_SoundChannel_attack] + ldrb r0, [r4, o_SoundChannel_attack] adds r5, r0 cmp r5, 0xFF bcc _081DD006 movs r5, 0xFF subs r6, 0x1 - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_status] _081DD006: - strb r5, [r4, #o_SoundChannel_ev] + strb r5, [r4, o_SoundChannel_ev] ldr r0, [sp, 0x18] - ldrb r0, [r0, #o_SoundChannel_release] + ldrb r0, [r0, o_SoundChannel_release] adds r0, 0x1 muls r0, r5 lsrs r5, r0, 4 - ldrb r0, [r4, #o_SoundChannel_rightVolume] + ldrb r0, [r4, o_SoundChannel_rightVolume] muls r0, r5 lsrs r0, 8 - strb r0, [r4, #o_SoundChannel_er] - ldrb r0, [r4, #o_SoundChannel_leftVolume] + strb r0, [r4, o_SoundChannel_er] + ldrb r0, [r4, o_SoundChannel_leftVolume] muls r0, r5 lsrs r0, 8 - strb r0, [r4, #o_SoundChannel_el] + strb r0, [r4, o_SoundChannel_el] movs r0, 0x10 ands r0, r6 str r0, [sp, 0x10] @@ -289,17 +289,17 @@ _081DD006: str r0, [sp, 0x10] _081DD03A: ldr r5, [sp, 0x8] - ldr r2, [r4, #o_SoundChannel_ct] - ldr r3, [r4, #o_SoundChannel_cp] + ldr r2, [r4, o_SoundChannel_ct] + ldr r3, [r4, o_SoundChannel_cp] adr r0, _081DD044 bx r0 .arm _081DD044: str r8, [sp] - ldr r9, [r4, #o_SoundChannel_fw] - ldrb r10, [r4, #o_SoundChannel_er] - ldrb r11, [r4, #o_SoundChannel_el] - ldrb r0, [r4, #o_SoundChannel_type] + ldr r9, [r4, o_SoundChannel_fw] + ldrb r10, [r4, o_SoundChannel_er] + ldrb r11, [r4, o_SoundChannel_el] + ldrb r0, [r4, o_SoundChannel_type] tst r0, 0x30 beq _081DD068 bl sub_82DF49C @@ -307,7 +307,7 @@ _081DD044: _081DD068: mov r10, r10, lsl 16 mov r11, r11, lsl 16 - ldrb r0, [r4, #o_SoundChannel_type] + ldrb r0, [r4, o_SoundChannel_type] tst r0, 0x8 beq _081DD19C _081DD07C: @@ -383,7 +383,7 @@ _081DD164: ldrne r3, [sp, 0xC] bne _081DD118 _081DD174: - strb r2, [r4, #o_SoundChannel_status] + strb r2, [r4, o_SoundChannel_status] mov r0, r5, lsr 30 bic r5, r5, 0xC0000000 rsb r0, r0, 0x3 @@ -395,7 +395,7 @@ _081DD174: b _081DD234 _081DD19C: push {r4,r12} - ldr r1, [r4, #o_SoundChannel_freq] + ldr r1, [r4, o_SoundChannel_freq] mul r4, r12, r1 ldrsb r0, [r3] ldrsb r1, [r3, 0x1]! @@ -434,10 +434,10 @@ _081DD208: sub r3, r3, 0x1 pop {r4,r12} _081DD228: - str r9, [r4, #o_SoundChannel_fw] + str r9, [r4, o_SoundChannel_fw] _081DD22C: - str r2, [r4, #o_SoundChannel_ct] - str r3, [r4, #o_SoundChannel_cp] + str r2, [r4, o_SoundChannel_ct] + str r3, [r4, o_SoundChannel_cp] _081DD234: ldr r8, [sp] add r0, pc, 0x1 @@ -467,33 +467,33 @@ _081DD25E: arm_func_start sub_82DF49C sub_82DF49C: - ldr r6, [r4, #o_SoundChannel_wav] - ldrb r0, [r4, #o_SoundChannel_status] + ldr r6, [r4, o_SoundChannel_wav] + ldrb r0, [r4, o_SoundChannel_status] tst r0, 0x20 bne _081DD2B4 orr r0, r0, 0x20 - strb r0, [r4, #o_SoundChannel_status] - ldrb r0, [r4, #o_SoundChannel_type] + strb r0, [r4, o_SoundChannel_status] + ldrb r0, [r4, o_SoundChannel_type] tst r0, 0x10 beq _081DD29C ldr r1, [r6, 0xC] add r1, r1, r6, lsl 1 add r1, r1, 0x20 sub r3, r1, r3 - str r3, [r4, #o_SoundChannel_cp] + str r3, [r4, o_SoundChannel_cp] _081DD29C: ldrh r0, [r6] cmp r0, 0 beq _081DD2B4 sub r3, r3, r6 sub r3, r3, 0x10 - str r3, [r4, #o_SoundChannel_cp] + str r3, [r4, o_SoundChannel_cp] _081DD2B4: push {r8,r12,lr} mov r10, r10, lsl 16 mov r11, r11, lsl 16 - ldr r1, [r4, #o_SoundChannel_freq] - ldrb r0, [r4, #o_SoundChannel_type] + ldr r1, [r4, o_SoundChannel_freq] + ldrb r0, [r4, o_SoundChannel_type] tst r0, 0x8 movne r8, 0x800000 muleq r8, r12, r1 @@ -501,8 +501,8 @@ _081DD2B4: cmp r0, 0 beq _081DD468 mov r0, 0xFF000000 - str r0, [r4, #o_SoundChannel_xpi] - ldrb r0, [r4, #o_SoundChannel_type] + str r0, [r4, o_SoundChannel_xpi] + ldrb r0, [r4, o_SoundChannel_type] tst r0, 0x10 bne _081DD3C0 bl sub_82DF758 @@ -555,7 +555,7 @@ _081DD398: ldr r0, [sp, 0x1C] cmp r0, 0 beq _081DD4F4 - ldr r3, [r4, #o_SoundChannel_wav] + ldr r3, [r4, o_SoundChannel_wav] ldr r3, [r3, 0x8] rsb lr, r2, 0 _081DD3B0: @@ -612,7 +612,7 @@ _081DD440: add r3, r3, 0x2 b _081DD4F0 _081DD468: - ldrb r0, [r4, #o_SoundChannel_type] + ldrb r0, [r4, o_SoundChannel_type] tst r0, 0x10 beq _081DD4F0 ldrsb r0, [r3, -0x1]! @@ -653,7 +653,7 @@ _081DD4F0: pop {r8,r12,pc} _081DD4F4: mov r2, 0 - strb r2, [r4, #o_SoundChannel_status] + strb r2, [r4, o_SoundChannel_status] mov r0, r5, lsr 30 bic r5, r5, 0xC0000000 rsb r0, r0, 0x3 @@ -669,13 +669,13 @@ _081DD4F4: sub_82DF758: push {r0,r2,r5-r7,lr} mov r0, r3, lsr 6 - ldr r1, [r4, #o_SoundChannel_xpi] + ldr r1, [r4, o_SoundChannel_xpi] cmp r0, r1 beq _081DD594 - str r0, [r4, #o_SoundChannel_xpi] + str r0, [r4, o_SoundChannel_xpi] mov r1, 0x21 mul r2, r1, r0 - ldr r1, [r4, #o_SoundChannel_wav] + ldr r1, [r4, o_SoundChannel_wav] add r2, r2, r1 add r2, r2, 0x10 ldr r5, =gUnknown_03001300 @@ -749,7 +749,7 @@ _081DD5E2: ply_fine: push {r4,r5,lr} adds r5, r1, 0 - ldr r4, [r5, #o_MusicPlayerTrack_chan] + ldr r4, [r5, o_MusicPlayerTrack_chan] cmp r4, 0 beq ply_fine_done ply_fine_loop: @@ -830,7 +830,7 @@ _081DD64A: ply_goto: push {lr} ply_goto_1: - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r0, [r2, 0x3] lsls r0, 8 ldrb r3, [r2, 0x2] @@ -841,24 +841,24 @@ ply_goto_1: lsls r0, 8 bl ldrb_r3_r2 orrs r0, r3 - str r0, [r1, #o_MusicPlayerTrack_cmdPtr] + str r0, [r1, o_MusicPlayerTrack_cmdPtr] pop {r0} bx r0 thumb_func_end ply_goto thumb_func_start ply_patt ply_patt: - ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel] + ldrb r2, [r1, o_MusicPlayerTrack_patternLevel] cmp r2, 3 bhs ply_patt_done lsls r2, 2 adds r3, r1, r2 - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] adds r2, 0x4 - str r2, [r3, #o_MusicPlayerTrack_patternStack] - ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel] + str r2, [r3, o_MusicPlayerTrack_patternStack] + ldrb r2, [r1, o_MusicPlayerTrack_patternLevel] adds r2, 1 - strb r2, [r1, #o_MusicPlayerTrack_patternLevel] + strb r2, [r1, o_MusicPlayerTrack_patternLevel] b ply_goto ply_patt_done: b ply_fine @@ -866,15 +866,15 @@ ply_patt_done: thumb_func_start ply_pend ply_pend: - ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel] + ldrb r2, [r1, o_MusicPlayerTrack_patternLevel] cmp r2, 0 beq ply_pend_done subs r2, 1 - strb r2, [r1, #o_MusicPlayerTrack_patternLevel] + strb r2, [r1, o_MusicPlayerTrack_patternLevel] lsls r2, 2 adds r3, r1, r2 - ldr r2, [r3, #o_MusicPlayerTrack_patternStack] - str r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r3, o_MusicPlayerTrack_patternStack] + str r2, [r1, o_MusicPlayerTrack_cmdPtr] ply_pend_done: bx lr thumb_func_end ply_pend @@ -882,17 +882,17 @@ ply_pend_done: thumb_func_start ply_rept ply_rept: push {lr} - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] cmp r3, 0 bne ply_rept_1 adds r2, 1 - str r2, [r1, #o_MusicPlayerTrack_cmdPtr] + str r2, [r1, o_MusicPlayerTrack_cmdPtr] b ply_goto_1 ply_rept_1: - ldrb r3, [r1, #o_MusicPlayerTrack_repN] + ldrb r3, [r1, o_MusicPlayerTrack_repN] adds r3, 1 - strb r3, [r1, #o_MusicPlayerTrack_repN] + strb r3, [r1, o_MusicPlayerTrack_repN] mov r12, r3 bl ld_r3_tp_adr_i cmp r12, r3 @@ -900,9 +900,9 @@ ply_rept_1: b ply_goto_1 ply_rept_2: movs r3, 0 - strb r3, [r1, #o_MusicPlayerTrack_repN] + strb r3, [r1, o_MusicPlayerTrack_repN] adds r2, 5 - str r2, [r1, #o_MusicPlayerTrack_cmdPtr] + str r2, [r1, o_MusicPlayerTrack_cmdPtr] pop {r0} bx r0 thumb_func_end ply_rept @@ -911,7 +911,7 @@ ply_rept_2: ply_prio: mov r12, lr bl ld_r3_tp_adr_i - strb r3, [r1, #o_MusicPlayerTrack_priority] + strb r3, [r1, o_MusicPlayerTrack_priority] bx r12 thumb_func_end ply_prio @@ -920,11 +920,11 @@ ply_tempo: mov r12, lr bl ld_r3_tp_adr_i lsls r3, 1 - strh r3, [r0, #o_MusicPlayerInfo_tempoD] - ldrh r2, [r0, #o_MusicPlayerInfo_tempoU] + strh r3, [r0, o_MusicPlayerInfo_tempoD] + ldrh r2, [r0, o_MusicPlayerInfo_tempoU] muls r3, r2 lsrs r3, 8 - strh r3, [r0, #o_MusicPlayerInfo_tempoI] + strh r3, [r0, o_MusicPlayerInfo_tempoI] bx r12 thumb_func_end ply_tempo @@ -932,35 +932,35 @@ ply_tempo: ply_keysh: mov r12, lr bl ld_r3_tp_adr_i - strb r3, [r1, #o_MusicPlayerTrack_keyShift] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_keyShift] + ldrb r3, [r1, o_MusicPlayerTrack_flags] movs r2, 0xC orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_keysh thumb_func_start ply_voice ply_voice: mov r12, lr - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] adds r2, 1 - str r2, [r1, #o_MusicPlayerTrack_cmdPtr] + str r2, [r1, o_MusicPlayerTrack_cmdPtr] lsls r2, r3, 1 adds r2, r3 lsls r2, 2 - ldr r3, [r0, #o_MusicPlayerInfo_tone] + ldr r3, [r0, o_MusicPlayerInfo_tone] adds r2, r3 ldr r3, [r2] bl chk_adr_r2 - str r3, [r1, #o_MusicPlayerTrack_ToneData_type] + str r3, [r1, o_MusicPlayerTrack_ToneData_type] ldr r3, [r2, 0x4] bl chk_adr_r2 - str r3, [r1, #o_MusicPlayerTrack_ToneData_wav] + str r3, [r1, o_MusicPlayerTrack_ToneData_wav] ldr r3, [r2, 0x8] bl chk_adr_r2 - str r3, [r1, #o_MusicPlayerTrack_ToneData_attack] + str r3, [r1, o_MusicPlayerTrack_ToneData_attack] bx r12 thumb_func_end ply_voice @@ -968,11 +968,11 @@ ply_voice: ply_vol: mov r12, lr bl ld_r3_tp_adr_i - strb r3, [r1, #o_MusicPlayerTrack_vol] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_vol] + ldrb r3, [r1, o_MusicPlayerTrack_flags] movs r2, 0x3 orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_vol @@ -981,11 +981,11 @@ ply_pan: mov r12, lr bl ld_r3_tp_adr_i subs r3, 0x40 - strb r3, [r1, #o_MusicPlayerTrack_pan] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_pan] + ldrb r3, [r1, o_MusicPlayerTrack_flags] movs r2, 0x3 orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_pan @@ -994,11 +994,11 @@ ply_bend: mov r12, lr bl ld_r3_tp_adr_i subs r3, 0x40 - strb r3, [r1, #o_MusicPlayerTrack_bend] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_bend] + ldrb r3, [r1, o_MusicPlayerTrack_flags] movs r2, 0xC orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_bend @@ -1006,11 +1006,11 @@ ply_bend: ply_bendr: mov r12, lr bl ld_r3_tp_adr_i - strb r3, [r1, #o_MusicPlayerTrack_bendRange] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_bendRange] + ldrb r3, [r1, o_MusicPlayerTrack_flags] movs r2, 0xC orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_bendr @@ -1018,7 +1018,7 @@ ply_bendr: ply_lfodl: mov r12, lr bl ld_r3_tp_adr_i - strb r3, [r1, #o_MusicPlayerTrack_lfoDelay] + strb r3, [r1, o_MusicPlayerTrack_lfoDelay] bx r12 thumb_func_end ply_lfodl @@ -1026,14 +1026,14 @@ ply_lfodl: ply_modt: mov r12, lr bl ld_r3_tp_adr_i - ldrb r0, [r1, #o_MusicPlayerTrack_modT] + ldrb r0, [r1, o_MusicPlayerTrack_modT] cmp r0, r3 beq _081DD7AA - strb r3, [r1, #o_MusicPlayerTrack_modT] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_modT] + ldrb r3, [r1, o_MusicPlayerTrack_flags] movs r2, 0xF orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] _081DD7AA: bx r12 thumb_func_end ply_modt @@ -1043,18 +1043,18 @@ ply_tune: mov r12, lr bl ld_r3_tp_adr_i subs r3, 0x40 - strb r3, [r1, #o_MusicPlayerTrack_tune] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_tune] + ldrb r3, [r1, o_MusicPlayerTrack_flags] movs r2, 0xC orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_tune thumb_func_start ply_port ply_port: mov r12, lr - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] adds r2, 1 ldr r0, =REG_SOUND1CNT_L @ sound register base address @@ -1072,20 +1072,20 @@ m4aSoundVSync: @ Exit the function if ident is not ID_NUMBER or ID_NUMBER+1. ldr r2, lt2_ID_NUMBER - ldr r3, [r0, #o_SoundInfo_ident] + ldr r3, [r0, o_SoundInfo_ident] subs r3, r2 cmp r3, 1 bhi m4aSoundVSync_Done @ Decrement the PCM DMA counter. If it reaches 0, we need to do a DMA. - ldrb r1, [r0, #o_SoundInfo_pcmDmaCounter] + ldrb r1, [r0, o_SoundInfo_pcmDmaCounter] subs r1, 1 - strb r1, [r0, #o_SoundInfo_pcmDmaCounter] + strb r1, [r0, o_SoundInfo_pcmDmaCounter] bgt m4aSoundVSync_Done @ Reload the PCM DMA counter. - ldrb r1, [r0, #o_SoundInfo_pcmDmaPeriod] - strb r1, [r0, #o_SoundInfo_pcmDmaCounter] + ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod] + strb r1, [r0, o_SoundInfo_pcmDmaCounter] ldr r2, =REG_DMA1 @@ -1127,18 +1127,18 @@ m4aSoundVSync_Done: thumb_func_start MPlayMain MPlayMain: ldr r2, lt2_ID_NUMBER - ldr r3, [r0, #o_MusicPlayerInfo_ident] + ldr r3, [r0, o_MusicPlayerInfo_ident] cmp r2, r3 beq _081DD82E bx lr _081DD82E: adds r3, 0x1 - str r3, [r0, #o_MusicPlayerInfo_ident] + str r3, [r0, o_MusicPlayerInfo_ident] push {r0,lr} - ldr r3, [r0, #o_MusicPlayerInfo_func] + ldr r3, [r0, o_MusicPlayerInfo_func] cmp r3, 0 beq _081DD840 - ldr r0, [r0, #o_MusicPlayerInfo_intp] + ldr r0, [r0, o_MusicPlayerInfo_intp] bl call_r3 _081DD840: pop {r0} @@ -1149,7 +1149,7 @@ _081DD840: mov r7, r11 push {r4-r7} adds r7, r0, 0 - ldr r0, [r7, #o_MusicPlayerInfo_status] + ldr r0, [r7, o_MusicPlayerInfo_status] cmp r0, 0 bge _081DD858 b _081DDA6C @@ -1159,18 +1159,18 @@ _081DD858: mov r8, r0 adds r0, r7, 0 bl FadeOutBody - ldr r0, [r7, #o_MusicPlayerInfo_status] + ldr r0, [r7, o_MusicPlayerInfo_status] cmp r0, 0 bge _081DD86C b _081DDA6C _081DD86C: - ldrh r0, [r7, #o_MusicPlayerInfo_tempoC] - ldrh r1, [r7, #o_MusicPlayerInfo_tempoI] + ldrh r0, [r7, o_MusicPlayerInfo_tempoC] + ldrh r1, [r7, o_MusicPlayerInfo_tempoI] adds r0, r1 b _081DD9BC _081DD874: - ldrb r6, [r7, #o_MusicPlayerInfo_trackCount] - ldr r5, [r7, #o_MusicPlayerInfo_tracks] + ldrb r6, [r7, o_MusicPlayerInfo_trackCount] + ldr r5, [r7, o_MusicPlayerInfo_tracks] movs r3, 0x1 movs r4, 0 _081DD87C: @@ -1183,7 +1183,7 @@ _081DD886: mov r10, r3 orrs r4, r3 mov r11, r4 - ldr r4, [r5, #o_MusicPlayerTrack_chan] + ldr r4, [r5, o_MusicPlayerTrack_chan] cmp r4, 0 beq _081DD8BA _081DD892: @@ -1209,7 +1209,7 @@ _081DD8B4: cmp r4, 0 bne _081DD892 _081DD8BA: - ldrb r3, [r5, #o_MusicPlayerTrack_flags] + ldrb r3, [r5, o_MusicPlayerTrack_flags] movs r0, 0x40 tst r0, r3 beq _081DD938 @@ -1218,33 +1218,33 @@ _081DD8BA: movs r0, 0x80 strb r0, [r5] movs r0, 0x2 - strb r0, [r5, #o_MusicPlayerTrack_bendRange] + strb r0, [r5, o_MusicPlayerTrack_bendRange] movs r0, 0x40 - strb r0, [r5, #o_MusicPlayerTrack_volX] + strb r0, [r5, o_MusicPlayerTrack_volX] movs r0, 0x16 - strb r0, [r5, #o_MusicPlayerTrack_lfoSpeed] + strb r0, [r5, o_MusicPlayerTrack_lfoSpeed] movs r0, 0x1 adds r1, r5, 0x6 - strb r0, [r1, #o_MusicPlayerTrack_ToneData_type - 0x6] + strb r0, [r1, o_MusicPlayerTrack_ToneData_type - 0x6] b _081DD938 _081DD8E0: - ldr r2, [r5, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r5, o_MusicPlayerTrack_cmdPtr] ldrb r1, [r2] cmp r1, 0x80 bhs _081DD8EC - ldrb r1, [r5, #o_MusicPlayerTrack_runningStatus] + ldrb r1, [r5, o_MusicPlayerTrack_runningStatus] b _081DD8F6 _081DD8EC: adds r2, 0x1 - str r2, [r5, #o_MusicPlayerTrack_cmdPtr] + str r2, [r5, o_MusicPlayerTrack_cmdPtr] cmp r1, 0xBD bcc _081DD8F6 - strb r1, [r5, #o_MusicPlayerTrack_runningStatus] + strb r1, [r5, o_MusicPlayerTrack_runningStatus] _081DD8F6: cmp r1, 0xCF bcc _081DD90C mov r0, r8 - ldr r3, [r0, #o_SoundInfo_plynote] + ldr r3, [r0, o_SoundInfo_plynote] adds r0, r1, 0 subs r0, 0xCF adds r1, r7, 0 @@ -1256,15 +1256,15 @@ _081DD90C: bls _081DD92E adds r0, r1, 0 subs r0, 0xB1 - strb r0, [r7, #o_MusicPlayerInfo_cmd] + strb r0, [r7, o_MusicPlayerInfo_cmd] mov r3, r8 - ldr r3, [r3, #o_SoundInfo_MPlayJumpTable] + ldr r3, [r3, o_SoundInfo_MPlayJumpTable] lsls r0, 2 ldr r3, [r3, r0] adds r0, r7, 0 adds r1, r5, 0 bl call_r3 - ldrb r0, [r5, #o_MusicPlayerTrack_flags] + ldrb r0, [r5, o_MusicPlayerTrack_flags] cmp r0, 0 beq _081DD994 b _081DD938 @@ -1273,29 +1273,29 @@ _081DD92E: subs r1, 0x80 adds r1, r0 ldrb r0, [r1] - strb r0, [r5, #o_MusicPlayerTrack_wait] + strb r0, [r5, o_MusicPlayerTrack_wait] _081DD938: - ldrb r0, [r5, #o_MusicPlayerTrack_wait] + ldrb r0, [r5, o_MusicPlayerTrack_wait] cmp r0, 0 beq _081DD8E0 subs r0, 0x1 - strb r0, [r5, #o_MusicPlayerTrack_wait] - ldrb r1, [r5, #o_MusicPlayerTrack_lfoSpeed] + strb r0, [r5, o_MusicPlayerTrack_wait] + ldrb r1, [r5, o_MusicPlayerTrack_lfoSpeed] cmp r1, 0 beq _081DD994 - ldrb r0, [r5, #o_MusicPlayerTrack_mod] + ldrb r0, [r5, o_MusicPlayerTrack_mod] cmp r0, 0 beq _081DD994 - ldrb r0, [r5, #o_MusicPlayerTrack_lfoDelayC] + ldrb r0, [r5, o_MusicPlayerTrack_lfoDelayC] cmp r0, 0 beq _081DD95A subs r0, 0x1 - strb r0, [r5, #o_MusicPlayerTrack_lfoDelayC] + strb r0, [r5, o_MusicPlayerTrack_lfoDelayC] b _081DD994 _081DD95A: - ldrb r0, [r5, #o_MusicPlayerTrack_lfoSpeedC] + ldrb r0, [r5, o_MusicPlayerTrack_lfoSpeedC] adds r0, r1 - strb r0, [r5, #o_MusicPlayerTrack_lfoSpeedC] + strb r0, [r5, o_MusicPlayerTrack_lfoSpeedC] adds r1, r0, 0 subs r0, 0x40 lsls r0, 24 @@ -1307,16 +1307,16 @@ _081DD96E: movs r0, 0x80 subs r2, r0, r1 _081DD972: - ldrb r0, [r5, #o_MusicPlayerTrack_mod] + ldrb r0, [r5, o_MusicPlayerTrack_mod] muls r0, r2 asrs r2, r0, 6 - ldrb r0, [r5, #o_MusicPlayerTrack_modM] + ldrb r0, [r5, o_MusicPlayerTrack_modM] eors r0, r2 lsls r0, 24 beq _081DD994 - strb r2, [r5, #o_MusicPlayerTrack_modM] + strb r2, [r5, o_MusicPlayerTrack_modM] ldrb r0, [r5] - ldrb r1, [r5, #o_MusicPlayerTrack_modT] + ldrb r1, [r5, o_MusicPlayerTrack_modT] cmp r1, 0 bne _081DD98E movs r1, 0xC @@ -1325,7 +1325,7 @@ _081DD98E: movs r1, 0x3 _081DD990: orrs r0, r1 - strb r0, [r5, #o_MusicPlayerTrack_flags] + strb r0, [r5, o_MusicPlayerTrack_flags] _081DD994: mov r3, r10 mov r4, r11 @@ -1337,29 +1337,29 @@ _081DD998: lsls r3, 1 b _081DD87C _081DD9A4: - ldr r0, [r7, #o_MusicPlayerInfo_clock] + ldr r0, [r7, o_MusicPlayerInfo_clock] adds r0, 0x1 - str r0, [r7, #o_MusicPlayerInfo_clock] + str r0, [r7, o_MusicPlayerInfo_clock] cmp r4, 0 bne _081DD9B6 movs r0, 0x80 lsls r0, 24 - str r0, [r7, #o_MusicPlayerInfo_status] + str r0, [r7, o_MusicPlayerInfo_status] b _081DDA6C _081DD9B6: - str r4, [r7, #o_MusicPlayerInfo_status] - ldrh r0, [r7, #o_MusicPlayerInfo_tempoC] + str r4, [r7, o_MusicPlayerInfo_status] + ldrh r0, [r7, o_MusicPlayerInfo_tempoC] subs r0, 0x96 _081DD9BC: - strh r0, [r7, #o_MusicPlayerInfo_tempoC] + strh r0, [r7, o_MusicPlayerInfo_tempoC] cmp r0, 0x96 bcc _081DD9C4 b _081DD874 _081DD9C4: - ldrb r2, [r7, #o_MusicPlayerInfo_trackCount] - ldr r5, [r7, #o_MusicPlayerInfo_tracks] + ldrb r2, [r7, o_MusicPlayerInfo_trackCount] + ldr r5, [r7, o_MusicPlayerInfo_tracks] _081DD9C8: - ldrb r0, [r5, #o_MusicPlayerTrack_flags] + ldrb r0, [r5, o_MusicPlayerTrack_flags] movs r1, 0x80 tst r1, r0 beq _081DDA62 @@ -1370,11 +1370,11 @@ _081DD9C8: adds r0, r7, 0 adds r1, r5, 0 bl TrkVolPitSet - ldr r4, [r5, #o_MusicPlayerTrack_chan] + ldr r4, [r5, o_MusicPlayerTrack_chan] cmp r4, 0 beq _081DDA58 _081DD9E6: - ldrb r1, [r4, #o_SoundChannel_status] + ldrb r1, [r4, o_SoundChannel_status] movs r0, 0xC7 tst r0, r1 bne _081DD9F6 @@ -1382,26 +1382,26 @@ _081DD9E6: bl ClearChain b _081DDA52 _081DD9F6: - ldrb r0, [r4, #o_SoundChannel_type] + ldrb r0, [r4, o_SoundChannel_type] movs r6, 0x7 ands r6, r0 - ldrb r3, [r5, #o_MusicPlayerTrack_flags] + ldrb r3, [r5, o_MusicPlayerTrack_flags] movs r0, 0x3 tst r0, r3 beq _081DDA14 bl ChnVolSetAsm cmp r6, 0 beq _081DDA14 - ldrb r0, [r4, #o_CgbChannel_mo] + ldrb r0, [r4, o_CgbChannel_mo] movs r1, 0x1 orrs r0, r1 - strb r0, [r4, #o_CgbChannel_mo] + strb r0, [r4, o_CgbChannel_mo] _081DDA14: - ldrb r3, [r5, #o_MusicPlayerTrack_flags] + ldrb r3, [r5, o_MusicPlayerTrack_flags] movs r0, 0xC tst r0, r3 beq _081DDA52 - ldrb r1, [r4, #o_SoundChannel_ky] + ldrb r1, [r4, o_SoundChannel_ky] movs r0, 0x8 ldrsb r0, [r5, r0] adds r2, r1, r0 @@ -1411,32 +1411,32 @@ _081DDA28: cmp r6, 0 beq _081DDA46 mov r0, r8 - ldr r3, [r0, #o_SoundInfo_MidiKeyToCgbFreq] + ldr r3, [r0, o_SoundInfo_MidiKeyToCgbFreq] adds r1, r2, 0 - ldrb r2, [r5, #o_MusicPlayerTrack_pitM] + ldrb r2, [r5, o_MusicPlayerTrack_pitM] adds r0, r6, 0 bl call_r3 - str r0, [r4, #o_CgbChannel_fr] - ldrb r0, [r4, #o_CgbChannel_mo] + str r0, [r4, o_CgbChannel_fr] + ldrb r0, [r4, o_CgbChannel_mo] movs r1, 0x2 orrs r0, r1 - strb r0, [r4, #o_CgbChannel_mo] + strb r0, [r4, o_CgbChannel_mo] b _081DDA52 _081DDA46: adds r1, r2, 0 - ldrb r2, [r5, #o_MusicPlayerTrack_pitM] - ldr r0, [r4, #o_SoundChannel_wav] + ldrb r2, [r5, o_MusicPlayerTrack_pitM] + ldr r0, [r4, o_SoundChannel_wav] bl MidiKeyToFreq - str r0, [r4, #o_SoundChannel_freq] + str r0, [r4, o_SoundChannel_freq] _081DDA52: - ldr r4, [r4, #o_SoundChannel_np] + ldr r4, [r4, o_SoundChannel_np] cmp r4, 0 bne _081DD9E6 _081DDA58: - ldrb r0, [r5, #o_MusicPlayerTrack_flags] + ldrb r0, [r5, o_MusicPlayerTrack_flags] movs r1, 0xF0 ands r0, r1 - strb r0, [r5, #o_MusicPlayerTrack_flags] + strb r0, [r5, o_MusicPlayerTrack_flags] mov r2, r9 _081DDA62: subs r2, 0x1 @@ -1446,7 +1446,7 @@ _081DDA62: bgt _081DD9C8 _081DDA6C: ldr r0, lt2_ID_NUMBER - str r0, [r7, #o_MusicPlayerInfo_ident] + str r0, [r7, o_MusicPlayerInfo_ident] pop {r0-r7} mov r8, r0 mov r9, r1 @@ -1467,35 +1467,35 @@ lt2_ID_NUMBER: .word ID_NUMBER TrackStop: push {r4-r6,lr} adds r5, r1, 0 - ldrb r1, [r5, #o_MusicPlayerTrack_flags] + ldrb r1, [r5, o_MusicPlayerTrack_flags] movs r0, 0x80 tst r0, r1 beq TrackStop_Done - ldr r4, [r5, #o_MusicPlayerTrack_chan] + ldr r4, [r5, o_MusicPlayerTrack_chan] cmp r4, 0 beq TrackStop_3 movs r6, 0 TrackStop_Loop: - ldrb r0, [r4, #o_SoundChannel_status] + ldrb r0, [r4, o_SoundChannel_status] cmp r0, 0 beq TrackStop_2 - ldrb r0, [r4, #o_SoundChannel_type] + ldrb r0, [r4, o_SoundChannel_type] movs r3, 0x7 ands r0, r3 beq TrackStop_1 ldr r3, =SOUND_INFO_PTR ldr r3, [r3] - ldr r3, [r3, #o_SoundInfo_CgbOscOff] + ldr r3, [r3, o_SoundInfo_CgbOscOff] bl call_r3 TrackStop_1: - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_status] TrackStop_2: - str r6, [r4, #o_SoundChannel_track] - ldr r4, [r4, #o_SoundChannel_np] + str r6, [r4, o_SoundChannel_track] + ldr r4, [r4, o_SoundChannel_np] cmp r4, 0 bne TrackStop_Loop TrackStop_3: - str r4, [r5, #o_MusicPlayerTrack_chan] + str r4, [r5, o_MusicPlayerTrack_chan] TrackStop_Done: pop {r4-r6} pop {r0} @@ -1550,41 +1550,41 @@ ply_note: ldr r1, =gClockTable adds r0, r1 ldrb r0, [r0] - strb r0, [r5, #o_MusicPlayerTrack_gateTime] - ldr r3, [r5, #o_MusicPlayerTrack_cmdPtr] + strb r0, [r5, o_MusicPlayerTrack_gateTime] + ldr r3, [r5, o_MusicPlayerTrack_cmdPtr] ldrb r0, [r3] cmp r0, 0x80 bhs _081DDB46 - strb r0, [r5, #o_MusicPlayerTrack_key] + strb r0, [r5, o_MusicPlayerTrack_key] adds r3, 0x1 ldrb r0, [r3] cmp r0, 0x80 bhs _081DDB44 - strb r0, [r5, #o_MusicPlayerTrack_velocity] + strb r0, [r5, o_MusicPlayerTrack_velocity] adds r3, 0x1 ldrb r0, [r3] cmp r0, 0x80 bhs _081DDB44 - ldrb r1, [r5, #o_MusicPlayerTrack_gateTime] + ldrb r1, [r5, o_MusicPlayerTrack_gateTime] adds r1, r0 - strb r1, [r5, #o_MusicPlayerTrack_gateTime] + strb r1, [r5, o_MusicPlayerTrack_gateTime] adds r3, 0x1 _081DDB44: - str r3, [r5, #o_MusicPlayerTrack_cmdPtr] + str r3, [r5, o_MusicPlayerTrack_cmdPtr] _081DDB46: movs r0, 0 str r0, [sp, 0x14] adds r4, r5, 0 - adds r4, #o_MusicPlayerTrack_ToneData_type + adds r4, o_MusicPlayerTrack_ToneData_type ldrb r2, [r4] movs r0, TONEDATA_TYPE_RHY | TONEDATA_TYPE_SPL tst r0, r2 beq _081DDB98 - ldrb r3, [r5, #o_MusicPlayerTrack_key] + ldrb r3, [r5, o_MusicPlayerTrack_key] movs r0, TONEDATA_TYPE_SPL tst r0, r2 beq _081DDB66 - ldr r1, [r5, #o_MusicPlayerTrack_ToneData_keySplitTable] + ldr r1, [r5, o_MusicPlayerTrack_ToneData_keySplitTable] adds r1, r3 ldrb r0, [r1] b _081DDB68 @@ -1594,7 +1594,7 @@ _081DDB68: lsls r1, r0, 1 adds r1, r0 lsls r1, 2 - ldr r0, [r5, #o_MusicPlayerTrack_ToneData_wav] + ldr r0, [r5, o_MusicPlayerTrack_ToneData_wav] adds r1, r0 mov r9, r1 mov r6, r9 @@ -1787,7 +1787,7 @@ _081DDCBC: bl call_r3 b _081DDCDC _081DDCCE: - ldr r0, [r5, #o_MusicPlayerTrack_unk_3C] + ldr r0, [r5, o_MusicPlayerTrack_unk_3C] str r0, [r4, 0x18] ldrb r2, [r5, 0x9] adds r1, r3, 0 @@ -1816,37 +1816,37 @@ _081DDCEA: thumb_func_start ply_endtie ply_endtie: push {r4,r5} - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] cmp r3, 0x80 bhs _081DDD16 - strb r3, [r1, #o_MusicPlayerTrack_key] + strb r3, [r1, o_MusicPlayerTrack_key] adds r2, 0x1 - str r2, [r1, #o_MusicPlayerTrack_cmdPtr] + str r2, [r1, o_MusicPlayerTrack_cmdPtr] b _081DDD18 _081DDD16: - ldrb r3, [r1, #o_MusicPlayerTrack_key] + ldrb r3, [r1, o_MusicPlayerTrack_key] _081DDD18: - ldr r1, [r1, #o_MusicPlayerTrack_chan] + ldr r1, [r1, o_MusicPlayerTrack_chan] cmp r1, 0 beq _081DDD40 movs r4, 0x83 movs r5, 0x40 _081DDD22: - ldrb r2, [r1, #o_SoundChannel_status] + ldrb r2, [r1, o_SoundChannel_status] tst r2, r4 beq _081DDD3A tst r2, r5 bne _081DDD3A - ldrb r0, [r1, #o_SoundChannel_mk] + ldrb r0, [r1, o_SoundChannel_mk] cmp r0, r3 bne _081DDD3A movs r0, 0x40 orrs r2, r0 - strb r2, [r1, #o_SoundChannel_status] + strb r2, [r1, o_SoundChannel_status] b _081DDD40 _081DDD3A: - ldr r1, [r1, #o_SoundChannel_np] + ldr r1, [r1, o_SoundChannel_np] cmp r1, 0 bne _081DDD22 _081DDD40: @@ -1857,9 +1857,9 @@ _081DDD40: thumb_func_start clear_modM clear_modM: movs r2, 0 - strb r2, [r1, #o_MusicPlayerTrack_modM] - strb r2, [r1, #o_MusicPlayerTrack_lfoSpeedC] - ldrb r2, [r1, #o_MusicPlayerTrack_modT] + strb r2, [r1, o_MusicPlayerTrack_modM] + strb r2, [r1, o_MusicPlayerTrack_lfoSpeedC] + ldrb r2, [r1, o_MusicPlayerTrack_modT] cmp r2, 0 bne _081DDD54 movs r2, 0xC @@ -1867,17 +1867,17 @@ clear_modM: _081DDD54: movs r2, 0x3 _081DDD56: - ldrb r3, [r1, #o_MusicPlayerTrack_flags] + ldrb r3, [r1, o_MusicPlayerTrack_flags] orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx lr thumb_func_end clear_modM thumb_func_start ld_r3_tp_adr_i ld_r3_tp_adr_i_unchecked: - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] adds r3, r2, 1 - str r3, [r1, #o_MusicPlayerTrack_cmdPtr] + str r3, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] bx lr thumb_func_end ld_r3_tp_adr_i @@ -1886,7 +1886,7 @@ ld_r3_tp_adr_i_unchecked: ply_lfos: mov r12, lr bl ld_r3_tp_adr_i_unchecked - strb r3, [r1, #o_MusicPlayerTrack_lfoSpeed] + strb r3, [r1, o_MusicPlayerTrack_lfoSpeed] cmp r3, 0 bne _081DDD7C bl clear_modM @@ -1898,7 +1898,7 @@ _081DDD7C: ply_mod: mov r12, lr bl ld_r3_tp_adr_i_unchecked - strb r3, [r1, #o_MusicPlayerTrack_mod] + strb r3, [r1, o_MusicPlayerTrack_mod] cmp r3, 0 bne _081DDD90 bl clear_modM diff --git a/src/m4a_tables.c b/src/m4a_tables.c index dfd285b1f3..9a4ea32e69 100644 --- a/src/m4a_tables.c +++ b/src/m4a_tables.c @@ -83,7 +83,7 @@ const u8 gScaleTable[] = 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, }; -const u32 gFreqTable[12] = +const u32 gFreqTable[] = { 2147483648u, 2275179671u, @@ -99,7 +99,7 @@ const u32 gFreqTable[12] = 4053909305u, }; -const u16 gPcmSamplesPerVBlankTable[12] = +const u16 gPcmSamplesPerVBlankTable[] = { 96, 132, @@ -130,7 +130,7 @@ const u8 gCgbScaleTable[] = 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, }; -const s16 gCgbFreqTable[12] = +const s16 gCgbFreqTable[] = { -2004, -1891, diff --git a/src/mail.c b/src/mail.c index 55bc9ed003..0fc62678a7 100644 --- a/src/mail.c +++ b/src/mail.c @@ -525,7 +525,7 @@ static void CB2_WaitForPaletteExitOnKeyPress(void) static void CB2_ExitOnKeyPress(void) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); sMailRead->callback2 = CB2_ExitMailReadFreeVars; diff --git a/src/main.c b/src/main.c index b3b76b1fbc..454fefc5cf 100644 --- a/src/main.c +++ b/src/main.c @@ -81,6 +81,8 @@ void InitIntrHandlers(void); static void WaitForVBlank(void); void EnableVCountIntrAtLine150(void); +#define B_START_SELECT (B_BUTTON | START_BUTTON | SELECT_BUTTON) + void AgbMain() { #if MODERN @@ -134,11 +136,9 @@ void AgbMain() { ReadKeys(); - if (!gSoftResetDisabled - && JOY_HELD_RAW(A_BUTTON) - && JOY_HELD_RAW(B_BUTTON) - && JOY_HELD_RAW(START_BUTTON) - && JOY_HELD_RAW(SELECT_BUTTON)) //The reset key combo A + B + START + SELECT + if (gSoftResetDisabled == FALSE + && (gMain.heldKeysRaw & A_BUTTON) + && (gMain.heldKeysRaw & B_START_SELECT) == B_START_SELECT) { rfu_REQ_stopMode(); rfu_waitREQComplete(); @@ -262,7 +262,9 @@ static void ReadKeys(void) if (keyInput != 0 && gMain.heldKeys == keyInput) { - if (--gMain.keyRepeatCounter == 0) + gMain.keyRepeatCounter--; + + if (gMain.keyRepeatCounter == 0) { gMain.newAndRepeatedKeys = keyInput; gMain.keyRepeatCounter = gKeyRepeatContinueDelay; @@ -280,10 +282,10 @@ static void ReadKeys(void) // Remap L to A if the L=A option is enabled. if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) { - if (JOY_NEW(L_BUTTON)) + if (gMain.newKeys & L_BUTTON) gMain.newKeys |= A_BUTTON; - if (JOY_HELD(L_BUTTON)) + if (gMain.heldKeys & L_BUTTON) gMain.heldKeys |= A_BUTTON; } @@ -341,7 +343,7 @@ static void VBlankIntr(void) { if (gWirelessCommType != 0) RfuVSync(); - else if (!gLinkVSyncDisabled) + else if (gLinkVSyncDisabled == FALSE) LinkVSync(); gMain.vblankCounter1++; diff --git a/src/main_menu.c b/src/main_menu.c index e8403cdb17..f4bf37ce18 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -696,7 +696,7 @@ static void Task_MainMenuCheckSaveFile(u8 taskId) static void Task_WaitForSaveFileErrorWindow(u8 taskId) { RunTextPrinters(); - if (!IsTextPrinterActive(7) && (JOY_NEW(A_BUTTON))) + if (!IsTextPrinterActive(7) && (gMain.newKeys & A_BUTTON)) { ClearWindowTilemap(7); ClearMainMenuWindowTilemap(&sWindowTemplates_MainMenu[7]); @@ -731,7 +731,7 @@ static void Task_MainMenuCheckBattery(u8 taskId) static void Task_WaitForBatteryDryErrorWindow(u8 taskId) { RunTextPrinters(); - if (!IsTextPrinterActive(7) && (JOY_NEW(A_BUTTON))) + if (!IsTextPrinterActive(7) && (gMain.newKeys & A_BUTTON)) { ClearWindowTilemap(7); ClearMainMenuWindowTilemap(&sWindowTemplates_MainMenu[7]); @@ -887,14 +887,14 @@ static bool8 HandleMainMenuInput(u8 taskId) { s16* data = gTasks[taskId].data; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); IsWirelessAdapterConnected(); // why bother calling this here? debug? Task_HandleMainMenuAPressed will check too BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_HandleMainMenuAPressed; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_WHITEALPHA); @@ -902,7 +902,7 @@ static bool8 HandleMainMenuInput(u8 taskId) SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 160)); gTasks[taskId].func = Task_HandleMainMenuBPressed; } - else if ((JOY_NEW(DPAD_UP)) && tCurrItem > 0) + else if ((gMain.newKeys & DPAD_UP) && tCurrItem > 0) { if (tMenuType == HAS_MYSTERY_EVENTS && tIsScrolled == TRUE && tCurrItem == 1) { @@ -914,7 +914,7 @@ static bool8 HandleMainMenuInput(u8 taskId) sCurrItemAndOptionMenuCheck = tCurrItem; return TRUE; } - else if ((JOY_NEW(DPAD_DOWN)) && tCurrItem < tItemCount - 1) + else if ((gMain.newKeys & DPAD_DOWN) && tCurrItem < tItemCount - 1) { if (tMenuType == HAS_MYSTERY_EVENTS && tCurrItem == 3 && tIsScrolled == FALSE) { @@ -1151,7 +1151,7 @@ static void Task_DisplayMainMenuInvalidActionError(u8 taskId) gTasks[taskId].tCurrItem++; break; case 3: - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -1594,7 +1594,7 @@ static void Task_NewGameBirchSpeech_WaitForWhatsYourNameToPrint(u8 taskId) static void Task_NewGameBirchSpeech_WaitPressBeforeNameChoice(u8 taskId) { - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = Task_NewGameBirchSpeech_StartNamingScreen; diff --git a/src/match_call.c b/src/match_call.c index 1899eabf03..2b3f6df8d6 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1253,7 +1253,7 @@ static bool32 sub_81962D8(u8 taskId) static bool32 sub_8196330(u8 taskId) { s16 *taskData = gTasks[taskId].data; - if (!ExecuteMatchCallTextPrinter(taskData[2]) && !IsSEPlaying() && JOY_NEW(A_BUTTON | B_BUTTON)) + if (!ExecuteMatchCallTextPrinter(taskData[2]) && !IsSEPlaying() && gMain.newKeys & (A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(taskData[2], PIXEL_FILL(8)); CopyWindowToVram(taskData[2], 2); @@ -1335,7 +1335,7 @@ static void InitMatchCallTextPrinter(int windowId, const u8 *str) printerTemplate.currentY = 1; printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = 10; printerTemplate.bgColor = 8; printerTemplate.shadowColor = 14; @@ -1346,7 +1346,7 @@ static void InitMatchCallTextPrinter(int windowId, const u8 *str) static bool32 ExecuteMatchCallTextPrinter(int windowId) { - if (JOY_HELD(A_BUTTON)) + if (gMain.heldKeys & A_BUTTON) gTextFlags.canABSpeedUpPrint = 1; else gTextFlags.canABSpeedUpPrint = 0; @@ -1774,7 +1774,7 @@ static int GetNumOwnedBadges(void) static bool32 sub_8196D74(int matchCallId) { int dayCount; - u32 otId; + int otId; u16 easyChatWord; int numRematchTrainersFought; int var0, var1, var2; diff --git a/src/menu.c b/src/menu.c index 9c5dec024e..f3334919c4 100644 --- a/src/menu.c +++ b/src/menu.c @@ -180,7 +180,7 @@ u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed printer.currentY = 1; printer.letterSpacing = 0; printer.lineSpacing = 0; - printer.style = 0; + printer.unk = 0; printer.fgColor = fgColor; printer.bgColor = bgColor; printer.shadowColor = shadowColor; @@ -981,23 +981,23 @@ u8 Menu_GetCursorPos(void) s8 Menu_ProcessInput(void) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (!sMenu.APressMuted) PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return MENU_B_PRESSED; } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { PlaySE(SE_SELECT); Menu_MoveCursor(-1); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { PlaySE(SE_SELECT); Menu_MoveCursor(1); @@ -1011,23 +1011,23 @@ s8 Menu_ProcessInputNoWrap(void) { u8 oldPos = sMenu.cursorPos; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (!sMenu.APressMuted) PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return MENU_B_PRESSED; } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { if (oldPos != Menu_MoveCursorNoWrapAround(-1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (oldPos != Menu_MoveCursorNoWrapAround(1)) PlaySE(SE_SELECT); @@ -1039,23 +1039,23 @@ s8 Menu_ProcessInputNoWrap(void) s8 ProcessMenuInput_other(void) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (!sMenu.APressMuted) PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return MENU_B_PRESSED; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) { PlaySE(SE_SELECT); Menu_MoveCursor(-1); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) { PlaySE(SE_SELECT); Menu_MoveCursor(1); @@ -1069,23 +1069,23 @@ s8 Menu_ProcessInputNoWrapAround_other(void) { u8 oldPos = sMenu.cursorPos; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (!sMenu.APressMuted) PlaySE(SE_SELECT); return sMenu.cursorPos; } - if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return MENU_B_PRESSED; } - if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) { if (oldPos != Menu_MoveCursorNoWrapAround(-1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) { if (oldPos != Menu_MoveCursorNoWrapAround(1)) PlaySE(SE_SELECT); @@ -1130,7 +1130,7 @@ void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 l printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(fontId, FONTATTR_STYLE); + printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN); printer.letterSpacing = letterSpacing; printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); printer.x = left; @@ -1194,7 +1194,7 @@ void sub_8198AF8(const struct WindowTemplate *window, u8 fontId, u8 left, u8 top printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(fontId, FONTATTR_STYLE); + printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN); printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING); printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); @@ -1252,7 +1252,7 @@ void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(fontId, FONTATTR_STYLE); + printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN); printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING); printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); @@ -1407,34 +1407,34 @@ u8 ChangeGridMenuCursorPosition(s8 deltaX, s8 deltaY) s8 sub_8199284(void) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return MENU_B_PRESSED; } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); @@ -1448,34 +1448,34 @@ s8 Menu_ProcessInputGridLayout(void) { u8 oldPos = sMenu.cursorPos; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return MENU_B_PRESSED; } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { if (oldPos != ChangeGridMenuCursorPosition(0, -1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (oldPos != ChangeGridMenuCursorPosition(0, 1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(1, 0)) PlaySE(SE_SELECT); @@ -1487,34 +1487,34 @@ s8 Menu_ProcessInputGridLayout(void) s8 sub_81993D8(void) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return MENU_B_PRESSED; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); @@ -1529,34 +1529,34 @@ s8 sub_8199484(void) { u8 oldPos = sMenu.cursorPos; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return MENU_B_PRESSED; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) { if (oldPos != ChangeGridMenuCursorPosition(0, -1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) { if (oldPos != ChangeGridMenuCursorPosition(0, 1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(1, 0)) PlaySE(SE_SELECT); @@ -1616,7 +1616,7 @@ void sub_81995E4(u8 windowId, u8 itemCount, const struct MenuAction *strs, const printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(1, FONTATTR_STYLE); + printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN); printer.letterSpacing = 0; printer.lineSpacing = 0; printer.x = 8; @@ -1650,7 +1650,7 @@ void CreateYesNoMenu(const struct WindowTemplate *window, u16 baseTileNum, u8 pa printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(1, FONTATTR_STYLE); + printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN); printer.letterSpacing = 0; printer.lineSpacing = 0; @@ -1681,7 +1681,7 @@ void sub_819983C(u8 windowId, u8 a4, u8 itemCount, u8 itemCount2, const struct M printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(1, FONTATTR_STYLE); + printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN); printer.letterSpacing = 0; printer.lineSpacing = 0; @@ -1949,7 +1949,7 @@ void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const printer.currentY = printer.y; printer.letterSpacing = GetFontAttribute(fontId, 2); printer.lineSpacing = GetFontAttribute(fontId, 3); - printer.style = 0; + printer.unk = 0; printer.fgColor = color[1]; printer.bgColor = color[0]; printer.shadowColor = color[2]; @@ -1970,7 +1970,7 @@ void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 left, u8 top, u8 le printer.currentY = printer.y; printer.letterSpacing = letterSpacing; printer.lineSpacing = lineSpacing; - printer.style = 0; + printer.unk = 0; printer.fgColor = color[1]; printer.bgColor = color[0]; printer.shadowColor = color[2]; @@ -1991,7 +1991,7 @@ void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 left printer.currentY = top; printer.letterSpacing = letterSpacing; printer.lineSpacing = lineSpacing; - printer.style = 0; + printer.unk = 0; printer.fgColor = GetFontAttribute(fontId, 5); printer.bgColor = GetFontAttribute(fontId, 6); diff --git a/src/menu_helpers.c b/src/menu_helpers.c index c80e52d270..69443d3099 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -183,7 +183,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) { s16 valBefore = (*arg0); - if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) { (*arg0)++; if ((*arg0) > arg1) @@ -199,7 +199,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) { (*arg0)--; if ((*arg0) <= 0) @@ -215,7 +215,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT) { (*arg0) += 10; if ((*arg0) > arg1) @@ -231,7 +231,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT) { (*arg0) -= 10; if ((*arg0) <= 0) @@ -255,9 +255,9 @@ u8 GetLRKeysPressed(void) { if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (JOY_NEW(L_BUTTON)) + if (gMain.newKeys & L_BUTTON) return MENU_L_PRESSED; - if (JOY_NEW(R_BUTTON)) + if (gMain.newKeys & R_BUTTON) return MENU_R_PRESSED; } @@ -268,9 +268,9 @@ u8 GetLRKeysPressedAndHeld(void) { if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (JOY_REPEAT(L_BUTTON)) + if (gMain.newAndRepeatedKeys & L_BUTTON) return MENU_L_PRESSED; - if (JOY_REPEAT(R_BUTTON)) + if (gMain.newAndRepeatedKeys & R_BUTTON) return MENU_R_PRESSED; } diff --git a/src/menu_specialized.c b/src/menu_specialized.c index f9da20e119..a99c5c9d0b 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -250,7 +250,7 @@ void sub_81D1D04(u8 a0) sUnknown_0203CF48[a0] = 0xFF; } -static u8 sub_81D1D34(u8 a0) // unused +static u8 sub_81D1D34(u8 a0) { return sUnknown_0203CF48[a0]; } @@ -894,73 +894,76 @@ static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId) { return StringCopyPadded(dst, gText_EggNickname, 0, 12); } - GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst); - StringGetEnd10(dst); - species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); - if (boxId == TOTAL_BOXES_COUNT) // Party mon. - { - level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - gender = GetMonGender(&gPlayerParty[monId]); - } else { - // Needed to match, feel free to remove. - boxId++, boxId--; - monId++, monId--; + GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst); + StringGetEnd10(dst); + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); + if (boxId == TOTAL_BOXES_COUNT) // Party mon. + { + level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + gender = GetMonGender(&gPlayerParty[monId]); + } + else + { + // Needed to match, feel free to remove. + boxId++;boxId--; + monId++;monId--; - boxMon = GetBoxedMonPtr(boxId, monId); - gender = GetBoxMonGender(boxMon); - level = GetLevelFromBoxMonExp(boxMon); - } + boxMon = GetBoxedMonPtr(boxId, monId); + gender = GetBoxMonGender(boxMon); + level = GetLevelFromBoxMonExp(boxMon); + } - if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species])) - gender = MON_GENDERLESS; + if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species])) + gender = MON_GENDERLESS; - for (str = dst; *str != EOS; str++) - ; + for (str = dst; *str != EOS; str++) + ; - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_SKIP; - *(str++) = 60; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_SKIP; + *(str++) = 60; - switch (gender) - { - default: + switch (gender) + { + default: + *(str++) = CHAR_SPACE; + break; + case MON_MALE: + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_COLOR; + *(str++) = TEXT_COLOR_RED; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_SHADOW; + *(str++) = TEXT_COLOR_LIGHT_RED; + *(str++) = CHAR_MALE; + break; + case MON_FEMALE: + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_COLOR; + *(str++) = TEXT_COLOR_GREEN; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_SHADOW; + *(str++) = TEXT_COLOR_LIGHT_GREEN; + *(str++) = CHAR_FEMALE; + break; + } + + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(str++) = TEXT_COLOR_BLUE; + *(str++) = TEXT_COLOR_TRANSPARENT; + *(str++) = TEXT_COLOR_LIGHT_BLUE; + *(str++) = CHAR_SLASH; + *(str++) = CHAR_EXTRA_SYMBOL; + *(str++) = CHAR_LV_2; + str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3); *(str++) = CHAR_SPACE; - break; - case MON_MALE: - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_COLOR; - *(str++) = TEXT_COLOR_RED; - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_SHADOW; - *(str++) = TEXT_COLOR_LIGHT_RED; - *(str++) = CHAR_MALE; - break; - case MON_FEMALE: - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_COLOR; - *(str++) = TEXT_COLOR_GREEN; - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_SHADOW; - *(str++) = TEXT_COLOR_LIGHT_GREEN; - *(str++) = CHAR_FEMALE; - break; + *str = EOS; + + return str; } - - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - *(str++) = TEXT_COLOR_BLUE; - *(str++) = TEXT_COLOR_TRANSPARENT; - *(str++) = TEXT_COLOR_LIGHT_BLUE; - *(str++) = CHAR_SLASH; - *(str++) = CHAR_EXTRA_SYMBOL; - *(str++) = CHAR_LV_2; - str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3); - *(str++) = CHAR_SPACE; - *str = EOS; - - return str; } // Buffers the string in src to dest up to n chars. If src is less than n chars, fill with spaces diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 607083e267..9c791b33f6 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -168,7 +168,7 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = { .numColors = 15, .delay = 5, .numFadeCycles = -1, - .maxBlendCoeff = -5, + .maxBlendCoeff = 11, .fadeType = 1, .restorePaletteOnUnload = FALSE, .unk7_7 = 1, @@ -412,9 +412,10 @@ void DoMirageTowerCeilingCrumble(void) static void WaitCeilingCrumble(u8 taskId) { - u16 *data = (u16 *)gTasks[taskId].data; + u16 *data = gTasks[taskId].data; + data[1]++; // Either wait 1000 frames, or until all 16 crumble sprites and the one screen-shake task are completed. - if (++data[1] == 1000 || data[0] == 17) + if (data[1] == 1000 || data[0] == 17) gTasks[taskId].func = FinishCeilingCrumbleTask; } @@ -690,7 +691,7 @@ static void DoFossilFallAndSink(u8 taskId) if (gSprites[sUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) return; DestroySprite(&gSprites[sUnknown_0203CF0C->spriteId]); - FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC); + FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);; FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImage); FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImageTiles); FREE_AND_SET_NULL(sUnknown_0203CF0C); @@ -723,40 +724,144 @@ static void sub_81BF248(struct Sprite *sprite) } } +#ifdef NONMATCHING static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e) { - u16 var, var2; - u8 r0, r5, r4, r2; - u8 r2_1, r4_1; - u8 b2, c2; + u8 r5, r4, r0, r2; + u16 var; - r4 = b / d; + r4 = r5 = b / d; gUnknown_030012A8[0] = r4; - r2 = b % d; + r0 = r2 = b % d; gUnknown_030012A8[1] = r2; - r4_1 = r4 & 7; - r2_1 = r2 & 7; + r4 &= 7; + r2 &= 7; + gUnknown_030012A8[2] = r4; + gUnknown_030012A8[3] = r2; - gUnknown_030012A8[2] = r4 & 7; //should be r4_1 but that doesn't match - gUnknown_030012A8[3] = r2 & 7; //should be r2_1 but that doesn't match - - r0 = r2 / 8; - r5 = r4 / 8; - - gUnknown_030012A8[4] = r2 / 8; //should just be r0, but that doesn't match - gUnknown_030012A8[5] = r4 / 8; //should be just r5 but that doesn't match - - var = (d / 8) * (r5 * 64) + (r0 * 64); + r0 /= 8; + r5 /= 8; + gUnknown_030012A8[4] = r0; + gUnknown_030012A8[5] = r5; + var = ((d / 8) * (r5 * 64)) + (r0 * 64); gUnknown_030012A8[6] = var; - var2 = var + ((r4_1 * 8) + r2_1); - var2 /= 2; - gUnknown_030012A8[7] = var + ((r4_1 * 8) + r2_1); // should be var2 with var2 being divided by 2 AFTER this assignment, but that doesn't match. + var += (r4 * 8) + r2; + gUnknown_030012A8[7] = var; - b2 = ((b % 2) ^ 1); - c2 = (c << (b2 << 2)) | (15 << (((b2 ^ 1) << 2))); - a[var2 + (e * 32)] &= c2; + // This part is non-matching. 99% sure it IS functionally equivalent, though. + b = (b & 1) ^ 1; + c = (c << ((b) << 2)) | (15 << ((b ^ 1) << 2)); + + a[(var / 2) + (e * 32)] &= c; } + +#else +NAKED +static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e) +{ + asm_unified( + "push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + str r0, [sp]\n\ + mov r10, r1\n\ + adds r6, r2, 0\n\ + mov r8, r3\n\ + ldr r0, [sp, 0x28]\n\ + mov r9, r0\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r10, r1\n\ + lsls r6, 24\n\ + lsrs r6, 24\n\ + mov r0, r8\n\ + lsls r0, 24\n\ + mov r8, r0\n\ + lsrs r7, r0, 24\n\ + mov r1, r9\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r9, r1\n\ + mov r0, r10\n\ + adds r1, r7, 0\n\ + bl __divsi3\n\ + adds r5, r0, 0\n\ + lsls r5, 24\n\ + lsrs r4, r5, 24\n\ + ldr r3, =gUnknown_030012A8\n\ + strh r4, [r3]\n\ + mov r0, r10\n\ + adds r1, r7, 0\n\ + str r3, [sp, 0x4]\n\ + bl __modsi3\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r3, [sp, 0x4]\n\ + strh r2, [r3, 0x2]\n\ + movs r1, 0x7\n\ + ands r4, r1\n\ + ands r2, r1\n\ + strh r4, [r3, 0x4]\n\ + strh r2, [r3, 0x6]\n\ + lsrs r0, 27\n\ + lsrs r5, 27\n\ + strh r0, [r3, 0x8]\n\ + strh r5, [r3, 0xA]\n\ + mov r1, r8\n\ + lsrs r1, 27\n\ + lsls r1, 6\n\ + mov r8, r1\n\ + mov r1, r8\n\ + muls r1, r5\n\ + lsls r0, 6\n\ + adds r1, r0\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + strh r1, [r3, 0xC]\n\ + lsls r4, 3\n\ + adds r4, r2\n\ + adds r1, r4\n\ + lsls r4, r1, 16\n\ + lsrs r4, 17\n\ + strh r1, [r3, 0xE]\n\ + movs r1, 0x1\n\ + mov r0, r10\n\ + ands r1, r0\n\ + movs r2, 0x1\n\ + eors r1, r2\n\ + lsls r0, r1, 2\n\ + lsls r6, r0\n\ + eors r1, r2\n\ + lsls r1, 2\n\ + movs r0, 0xF\n\ + lsls r0, r1\n\ + orrs r6, r0\n\ + lsls r6, 24\n\ + lsrs r6, 24\n\ + mov r1, r9\n\ + lsls r1, 5\n\ + mov r9, r1\n\ + add r9, r4\n\ + ldr r1, [sp]\n\ + add r1, r9\n\ + ldrb r0, [r1]\n\ + ands r6, r0\n\ + strb r6, [r1]\n\ + add sp, 0x8\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); +} +#endif // NONMATCHING diff --git a/src/mon_markings.c b/src/mon_markings.c index c2afdda833..db5df07e82 100644 --- a/src/mon_markings.c +++ b/src/mon_markings.c @@ -394,7 +394,7 @@ bool8 sub_811FBA4(void) { u16 i; - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { s8 pos; PlaySE(SE_SELECT); @@ -404,7 +404,7 @@ bool8 sub_811FBA4(void) return TRUE; } - if (JOY_NEW(DPAD_DOWN)) + if (gMain.newKeys & DPAD_DOWN) { s8 pos; PlaySE(SE_SELECT); @@ -414,7 +414,7 @@ bool8 sub_811FBA4(void) return TRUE; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); @@ -433,7 +433,7 @@ bool8 sub_811FBA4(void) return TRUE; } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); return FALSE; diff --git a/src/move_relearner.c b/src/move_relearner.c index cd4da58354..3e7caf133e 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -732,7 +732,7 @@ static void DoMoveRelearnerMain(void) } break; case MENU_STATE_WAIT_FOR_A_BUTTON: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); sMoveRelearnerStruct->state = MENU_STATE_FADE_AND_RETURN; @@ -778,7 +778,7 @@ static void HandleInput(bool8 showContest) switch (itemId) { case LIST_NOTHING_CHOSEN: - if (!(JOY_NEW(DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysPressed()) + if (!(gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysPressed()) { break; } diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index 00dcbf0e3c..032cc33403 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -163,7 +163,7 @@ static void CB2_MysteryEventMenu(void) PrintMysteryMenuText(0, gText_PressAToLoadEvent, 1, 2, 1); gMain.state++; } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); CloseLink(); @@ -177,7 +177,7 @@ static void CB2_MysteryEventMenu(void) case 5: if (GetLinkPlayerCount_2() == 2) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); CheckShouldAdvanceLinkState(); @@ -187,7 +187,7 @@ static void CB2_MysteryEventMenu(void) CopyWindowToVram(1, 3); gMain.state++; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); CloseLink(); @@ -227,7 +227,7 @@ static void CB2_MysteryEventMenu(void) } } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); CloseLink(); @@ -274,7 +274,7 @@ static void CB2_MysteryEventMenu(void) } break; case 14: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); gMain.state++; diff --git a/src/mystery_gift.c b/src/mystery_gift.c index a23f159b2d..ca5ab1bafb 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -561,7 +561,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str) goto inc; case 1: DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); - if (({JOY_NEW(A_BUTTON | B_BUTTON);})) + if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) { inc: (*textState)++; @@ -595,7 +595,7 @@ bool32 unref_HideDownArrowAndWaitButton(u8 * textState) { case 0: HideDownArrow(); - if (({JOY_NEW(A_BUTTON | B_BUTTON);})) + if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) { (*textState)++; } @@ -930,7 +930,7 @@ static bool32 mevent_save_game(u8 * state) (*state)++; break; case 3: - if (({JOY_NEW(A_BUTTON | B_BUTTON);})) + if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) { (*state)++; } @@ -1458,11 +1458,11 @@ void task00_mystery_gift(u8 taskId) case 20: if (data->IsCardOrNews == 0) { - if (({JOY_NEW(A_BUTTON);})) + if (({gMain.newKeys & A_BUTTON;})) { data->state = 21; } - if (({JOY_NEW(B_BUTTON);})) + if (({gMain.newKeys & B_BUTTON;})) { data->state = 27; } diff --git a/src/option_menu.c b/src/option_menu.c index b6440a89c0..1cf0bad2ed 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -271,16 +271,16 @@ static void Task_OptionMenuFadeIn(u8 taskId) static void Task_OptionMenuProcessInput(u8 taskId) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (gTasks[taskId].data[TD_MENUSELECTION] == MENUITEM_CANCEL) gTasks[taskId].func = Task_OptionMenuSave; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { gTasks[taskId].func = Task_OptionMenuSave; } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { if (gTasks[taskId].data[TD_MENUSELECTION] > 0) gTasks[taskId].data[TD_MENUSELECTION]--; @@ -288,7 +288,7 @@ static void Task_OptionMenuProcessInput(u8 taskId) gTasks[taskId].data[TD_MENUSELECTION] = MENUITEM_CANCEL; HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (gTasks[taskId].data[TD_MENUSELECTION] < MENUITEM_CANCEL) gTasks[taskId].data[TD_MENUSELECTION]++; @@ -405,7 +405,7 @@ static void DrawOptionMenuChoice(const u8 *text, u8 x, u8 y, u8 style) static u8 TextSpeed_ProcessInput(u8 selection) { - if (JOY_NEW(DPAD_RIGHT)) + if (gMain.newKeys & DPAD_RIGHT) { if (selection <= 1) selection++; @@ -414,7 +414,7 @@ static u8 TextSpeed_ProcessInput(u8 selection) sArrowPressed = TRUE; } - if (JOY_NEW(DPAD_LEFT)) + if (gMain.newKeys & DPAD_LEFT) { if (selection != 0) selection--; @@ -451,7 +451,7 @@ static void TextSpeed_DrawChoices(u8 selection) static u8 BattleScene_ProcessInput(u8 selection) { - if (JOY_NEW(DPAD_LEFT | DPAD_RIGHT)) + if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) { selection ^= 1; sArrowPressed = TRUE; @@ -474,7 +474,7 @@ static void BattleScene_DrawChoices(u8 selection) static u8 BattleStyle_ProcessInput(u8 selection) { - if (JOY_NEW(DPAD_LEFT | DPAD_RIGHT)) + if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) { selection ^= 1; sArrowPressed = TRUE; @@ -497,7 +497,7 @@ static void BattleStyle_DrawChoices(u8 selection) static u8 Sound_ProcessInput(u8 selection) { - if (JOY_NEW(DPAD_LEFT | DPAD_RIGHT)) + if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) { selection ^= 1; SetPokemonCryStereo(selection); @@ -521,7 +521,7 @@ static void Sound_DrawChoices(u8 selection) static u8 FrameType_ProcessInput(u8 selection) { - if (JOY_NEW(DPAD_RIGHT)) + if (gMain.newKeys & DPAD_RIGHT) { if (selection < WINDOW_FRAMES_COUNT - 1) selection++; @@ -532,7 +532,7 @@ static u8 FrameType_ProcessInput(u8 selection) LoadPalette(GetWindowFrameTilesPal(selection)->pal, 0x70, 0x20); sArrowPressed = TRUE; } - if (JOY_NEW(DPAD_LEFT)) + if (gMain.newKeys & DPAD_LEFT) { if (selection != 0) selection--; @@ -579,7 +579,7 @@ static void FrameType_DrawChoices(u8 selection) static u8 ButtonMode_ProcessInput(u8 selection) { - if (JOY_NEW(DPAD_RIGHT)) + if (gMain.newKeys & DPAD_RIGHT) { if (selection <= 1) selection++; @@ -588,7 +588,7 @@ static u8 ButtonMode_ProcessInput(u8 selection) sArrowPressed = TRUE; } - if (JOY_NEW(DPAD_LEFT)) + if (gMain.newKeys & DPAD_LEFT) { if (selection != 0) selection--; diff --git a/src/overworld.c b/src/overworld.c index 2d798f2ec7..4bf5d4fab3 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2454,19 +2454,20 @@ static void UpdateHeldKeyCode(u16 key) static u16 KeyInterCB_ReadButtons(u32 key) { - if (JOY_HELD(DPAD_UP)) + if (gMain.heldKeys & DPAD_UP) return LINK_KEY_CODE_DPAD_UP; - if (JOY_HELD(DPAD_DOWN)) + else if (gMain.heldKeys & DPAD_DOWN) return LINK_KEY_CODE_DPAD_DOWN; - if (JOY_HELD(DPAD_LEFT)) + else if (gMain.heldKeys & DPAD_LEFT) return LINK_KEY_CODE_DPAD_LEFT; - if (JOY_HELD(DPAD_RIGHT)) + else if (gMain.heldKeys & DPAD_RIGHT) return LINK_KEY_CODE_DPAD_RIGHT; - if (JOY_NEW(START_BUTTON)) + else if (gMain.newKeys & START_BUTTON) return LINK_KEY_CODE_START_BUTTON; - if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) return LINK_KEY_CODE_A_BUTTON; - return LINK_KEY_CODE_EMPTY; + else + return LINK_KEY_CODE_EMPTY; } static u16 GetDirectionForDpadKey(u16 a1) @@ -2573,7 +2574,7 @@ static u16 sub_8087170(u32 keyOrPlayerId) { if (sPlayerTradingStates[keyOrPlayerId] == PLAYER_TRADING_STATE_UNK_2) { - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { SetKeyInterceptCallback(KeyInterCB_DoNothingAndKeepAlive); return LINK_KEY_CODE_UNK_7; @@ -3188,7 +3189,7 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1); sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation); - if (linkPlayerObjEvent->movementMode == MOVEMENT_MODE_FREE) + if (!linkPlayerObjEvent->movementMode != MOVEMENT_MODE_FREE) StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte)); else StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte)); diff --git a/src/party_menu.c b/src/party_menu.c index e509ef6e09..7f4697d7da 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1411,7 +1411,7 @@ static u16 PartyMenuButtonHandler(s8 *slotPtr) break; } - if (JOY_NEW(START_BUTTON)) + if (gMain.newKeys & START_BUTTON) return 8; if (movementDir) @@ -1421,10 +1421,10 @@ static u16 PartyMenuButtonHandler(s8 *slotPtr) } // Pressed Cancel - if ((JOY_NEW(A_BUTTON)) && *slotPtr == PARTY_SIZE + 1) + if ((gMain.newKeys & A_BUTTON) && *slotPtr == PARTY_SIZE + 1) return 2; - return JOY_NEW(A_BUTTON | B_BUTTON); + return gMain.newKeys & (A_BUTTON | B_BUTTON); } static void UpdateCurrentPartySelection(s8 *slotPtr, s8 movementDir) @@ -1862,7 +1862,7 @@ u8 GetMonAilment(struct Pokemon *mon) static void SetPartyMonsAllowedInMinigame(void) { - s16 *ptr; + u16 *ptr; if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME) { @@ -3765,7 +3765,7 @@ static u16 GetFieldMoveMonSpecies(void) static void Task_CancelAfterAorBPress(u8 taskId) { - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) CursorCb_Cancel1(taskId); } @@ -4722,7 +4722,7 @@ static void Task_DoLearnedMoveFanfareAfterText(u8 taskId) static void Task_LearnNextMoveOrClosePartyMenu(u8 taskId) { - if (IsFanfareTaskInactive() && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) + if (IsFanfareTaskInactive() && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) { if (gPartyMenu.learnMoveState == 1) Task_TryLearningNextMove(taskId); @@ -4931,7 +4931,7 @@ static void UpdateMonDisplayInfoAfterRareCandy(u8 slot, struct Pokemon *mon) static void Task_DisplayLevelUpStatsPg1(u8 taskId) { - if (WaitFanfare(FALSE) && IsPartyMenuTextPrinterActive() != TRUE && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) + if (WaitFanfare(FALSE) && IsPartyMenuTextPrinterActive() != TRUE && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) { PlaySE(SE_SELECT); DisplayLevelUpStatsPg1(taskId); @@ -4941,7 +4941,7 @@ static void Task_DisplayLevelUpStatsPg1(u8 taskId) static void Task_DisplayLevelUpStatsPg2(u8 taskId) { - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { PlaySE(SE_SELECT); DisplayLevelUpStatsPg2(taskId); @@ -4951,9 +4951,9 @@ static void Task_DisplayLevelUpStatsPg2(u8 taskId) static void DisplayLevelUpStatsPg1(u8 taskId) { - u16 *arrayPtr = (u16*)sPartyMenuInternal->data; + s16 *arrayPtr = sPartyMenuInternal->data; - arrayPtr[12] = (u16)CreateLevelUpStatsWindow(); + arrayPtr[12] = CreateLevelUpStatsWindow(); DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); CopyWindowToVram(arrayPtr[12], 2); ScheduleBgCopyTilemapToVram(2); @@ -4961,7 +4961,7 @@ static void DisplayLevelUpStatsPg1(u8 taskId) static void DisplayLevelUpStatsPg2(u8 taskId) { - u16 *arrayPtr = (u16 *)sPartyMenuInternal->data; + s16 *arrayPtr = sPartyMenuInternal->data; DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); CopyWindowToVram(arrayPtr[12], 2); @@ -4972,7 +4972,7 @@ static void Task_TryLearnNewMoves(u8 taskId) { u16 learnMove; - if (WaitFanfare(0) && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) + if (WaitFanfare(0) && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) { RemoveLevelUpStatsWindow(); learnMove = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], TRUE); @@ -5609,7 +5609,7 @@ static void Task_ValidateChosenHalfParty(u8 taskId) static void Task_ContinueChoosingHalfParty(u8 taskId) { - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { PlaySE(SE_SELECT); DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); diff --git a/src/player_pc.c b/src/player_pc.c index 238424ee33..fc0bd9f4c8 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -327,7 +327,7 @@ void PlayerPC(void) static void InitPlayerPCMenu(u8 taskId) { - s16 *data; + u16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -346,7 +346,7 @@ static void InitPlayerPCMenu(u8 taskId) static void PlayerPCProcessMenuInput(u8 taskId) { - s16 *data; + u16 *data; s8 inputOptionId; data = gTasks[taskId].data; @@ -435,7 +435,7 @@ static void PlayerPC_TurnOff(u8 taskId) static void InitItemStorageMenu(u8 taskId, u8 var) { - s16 *data; + u16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -548,7 +548,7 @@ static void ItemStorage_Toss(u8 taskId) static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss) { - s16 *data = gTasks[taskId].data; + u16 *data = gTasks[taskId].data; data[3] = toss; sub_816B4DC(taskId); @@ -581,9 +581,9 @@ static void ItemStorage_SetItemAndMailCount(u8 taskId) static void sub_816B4DC(u8 taskId) { - u16 *data = (u16 *)gTasks[taskId].data; + u16 *data = gTasks[taskId].data; - ClearStdWindowAndFrameToTransparent((u8)data[4], FALSE); + ClearStdWindowAndFrameToTransparent(data[4], FALSE); ClearWindowTilemap(data[4]); RemoveWindow(data[4]); ScheduleBgCopyTilemapToVram(0); @@ -1134,7 +1134,7 @@ static void ItemStorage_ProcessInput(u8 taskId) s32 id; data = gTasks[taskId].data; - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); if ((playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos) != (playerPCItemPageInfo.count - 1)) @@ -1212,7 +1212,7 @@ static void sub_816C4FC(u8 taskId) s32 id; data = gTasks[taskId].data; - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); ItemStorage_DoItemSwap(taskId, FALSE); @@ -1227,7 +1227,7 @@ static void sub_816C4FC(u8 taskId) case LIST_NOTHING_CHOSEN: break; case LIST_CANCEL: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { ItemStorage_DoItemSwap(taskId, FALSE); } @@ -1332,7 +1332,7 @@ static void ItemStorage_HandleQuantityRolling(u8 taskId) sub_816C6BC(sub_816BC7C(4), data[2], STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3); else { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); sub_816BCC4(4); @@ -1341,7 +1341,7 @@ static void ItemStorage_HandleQuantityRolling(u8 taskId) else ItemStorage_DoItemToss(taskId); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); sub_816BCC4(4); @@ -1380,7 +1380,7 @@ static void ItemStorage_DoItemToss(u8 taskId) data = gTasks[taskId].data; b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove); - if (ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId) == 0) + if (!ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId)) { CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3); @@ -1412,7 +1412,7 @@ static void ItemStorage_HandleRemoveItem(u8 taskId) s16 *data; data = gTasks[taskId].data; - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { RemovePCItem((playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove), data[2]); DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); @@ -1429,7 +1429,7 @@ static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId) s16 *data; data = gTasks[taskId].data; - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId)); ItemStorage_StartScrollIndicatorAndProcessInput(taskId); diff --git a/src/pokeblock.c b/src/pokeblock.c index b44112b886..11fe832408 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -430,7 +430,7 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate = // code void OpenPokeblockCase(u8 caseId, void (*callback)(void)) { - sPokeblockMenu = Alloc(sizeof(struct PokeblockMenuStruct)); + sPokeblockMenu = Alloc(sizeof(*sPokeblockMenu)); sPokeblockMenu->caseId = caseId; sPokeblockMenu->callbackOnUse = NULL; sPokeblockMenu->unkTaskId = 0xFF; @@ -984,7 +984,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId) if (!gPaletteFade.active && MenuHelpers_CallLinkSomething() != TRUE) { - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); if (sSavedPokeblockData.lastItemPage + sSavedPokeblockData.lastItemPos != sPokeblockMenu->itemsNo - 1) @@ -1035,7 +1035,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId) if (MenuHelpers_CallLinkSomething() == TRUE) return; - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { PlaySE(SE_SELECT); ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); @@ -1069,7 +1069,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId) break; case LIST_CANCEL: // same id as STOW CASE field PlaySE(SE_SELECT); - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) HandlePokeblocksSwap(taskId, FALSE); else HandlePokeblocksSwap(taskId, TRUE); @@ -1193,7 +1193,7 @@ static void TossPokeblockChoice_Yes(u8 taskId) static void HandleErasePokeblock(u8 taskId) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { s16 *data; u16 *lastPage, *lastPos; diff --git a/src/pokedex.c b/src/pokedex.c index d375a0afc7..54f256509d 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -172,16 +172,16 @@ struct PokedexView u16 ownCount; u16 monSpriteIds[MAX_MONS_ON_SCREEN]; u16 selectedMonSpriteId; - s16 pokeBallRotationStep; - s16 pokeBallRotationBackup; + u16 pokeBallRotationStep; + u16 pokeBallRotationBackup; u8 pokeBallRotation; u8 initialVOffset; u8 scrollTimer; u8 scrollDirection; s16 listVOffset; s16 listMovingVOffset; - s16 scrollMonIncrement; - s16 maxScrollTimer; + u16 scrollMonIncrement; + u16 maxScrollTimer; u16 scrollSpeed; u16 unkArr1[4]; // Cleared, never read u8 filler[8]; @@ -1673,7 +1673,7 @@ static void Task_HandlePokedexInput(u8 taskId) } else { - if ((JOY_NEW(A_BUTTON)) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) + if ((gMain.newKeys & A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) { UpdateSelectedMonSpriteId(); BeginNormalPaletteFade(~(1 << (gSprites[sPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), 0, 0, 0x10, RGB_BLACK); @@ -1682,7 +1682,7 @@ static void Task_HandlePokedexInput(u8 taskId) PlaySE(SE_PIN); FreeWindowAndBgBuffers(); } - else if (JOY_NEW(START_BUTTON)) + else if (gMain.newKeys & START_BUTTON) { sPokedexView->menuY = 0; sPokedexView->menuIsOpen = TRUE; @@ -1690,7 +1690,7 @@ static void Task_HandlePokedexInput(u8 taskId) gTasks[taskId].func = Task_HandlePokedexStartMenuInput; PlaySE(SE_SELECT); } - else if (JOY_NEW(SELECT_BUTTON)) + else if (gMain.newKeys & SELECT_BUTTON) { PlaySE(SE_SELECT); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); @@ -1704,7 +1704,7 @@ static void Task_HandlePokedexInput(u8 taskId) PlaySE(SE_PC_LOGIN); FreeWindowAndBgBuffers(); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_ClosePokedex; @@ -1737,7 +1737,7 @@ static void Task_HandlePokedexStartMenuInput(u8 taskId) } else { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { switch (sPokedexView->menuCursorPos) { @@ -1768,18 +1768,18 @@ static void Task_HandlePokedexStartMenuInput(u8 taskId) } //Exit menu when Start or B is pressed - if (JOY_NEW(START_BUTTON | B_BUTTON)) + if (gMain.newKeys & (START_BUTTON | B_BUTTON)) { sPokedexView->menuIsOpen = FALSE; gTasks[taskId].func = Task_HandlePokedexInput; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_UP)) && sPokedexView->menuCursorPos != 0) + else if ((gMain.newAndRepeatedKeys & DPAD_UP) && sPokedexView->menuCursorPos != 0) { sPokedexView->menuCursorPos--; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_DOWN)) && sPokedexView->menuCursorPos < 3) + else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && sPokedexView->menuCursorPos < 3) { sPokedexView->menuCursorPos++; PlaySE(SE_SELECT); @@ -1873,7 +1873,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) } else { - if ((JOY_NEW(A_BUTTON)) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) + if ((gMain.newKeys & A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) { u32 a; @@ -1885,7 +1885,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) PlaySE(SE_PIN); FreeWindowAndBgBuffers(); } - else if (JOY_NEW(START_BUTTON)) + else if (gMain.newKeys & START_BUTTON) { sPokedexView->menuY = 0; sPokedexView->menuIsOpen = TRUE; @@ -1893,7 +1893,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) gTasks[taskId].func = Task_HandleSearchResultsStartMenuInput; PlaySE(SE_SELECT); } - else if (JOY_NEW(SELECT_BUTTON)) + else if (gMain.newKeys & SELECT_BUTTON) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].tTaskId = LoadSearchMenu(); @@ -1902,7 +1902,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) PlaySE(SE_PC_LOGIN); FreeWindowAndBgBuffers(); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_ReturnToPokedexFromSearchResults; @@ -1934,7 +1934,7 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId) } else { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { switch (sPokedexView->menuCursorPos) { @@ -1970,18 +1970,18 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId) } //Exit menu when Start or B is pressed - if (JOY_NEW(START_BUTTON | B_BUTTON)) + if (gMain.newKeys & (START_BUTTON | B_BUTTON)) { sPokedexView->menuIsOpen = FALSE; gTasks[taskId].func = Task_HandleSearchResultsInput; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_UP)) && sPokedexView->menuCursorPos) + else if ((gMain.newAndRepeatedKeys & DPAD_UP) && sPokedexView->menuCursorPos) { sPokedexView->menuCursorPos--; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_DOWN)) && sPokedexView->menuCursorPos < 4) + else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && sPokedexView->menuCursorPos < 4) { sPokedexView->menuCursorPos++; PlaySE(SE_SELECT); @@ -2060,10 +2060,10 @@ static bool8 LoadPokedexListPage(u8 page) SetGpuReg(REG_OFFSET_BG2VOFS, sPokedexView->initialVOffset); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sPokedex_BgTemplate, ARRAY_COUNT(sPokedex_BgTemplate)); - SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(3, AllocZeroed(0x800)); + SetBgTilemapBuffer(2, AllocZeroed(0x800)); + SetBgTilemapBuffer(1, AllocZeroed(0x800)); + SetBgTilemapBuffer(0, AllocZeroed(0x800)); DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(1, gPokedexList_Tilemap, 0, 0); CopyToBgTilemapBuffer(3, gPokedexListUnderlay_Tilemap, 0, 0); @@ -2590,7 +2590,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) u16 startingPos; u8 scrollDir = 0; - if ((JOY_HELD(DPAD_UP)) && (selectedMon > 0)) + if ((gMain.heldKeys & DPAD_UP) && (selectedMon > 0)) { scrollDir = 1; selectedMon = GetNextPosition(1, selectedMon, 0, sPokedexView->pokemonListCount - 1); @@ -2598,7 +2598,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonListEntry(1, selectedMon, ignored); PlaySE(SE_DEX_SCROLL); } - else if (JOY_HELD(DPAD_DOWN) && (selectedMon < sPokedexView->pokemonListCount - 1)) + else if ((gMain.heldKeys & DPAD_DOWN) && (selectedMon < sPokedexView->pokemonListCount - 1)) { scrollDir = 2; selectedMon = GetNextPosition(0, selectedMon, 0, sPokedexView->pokemonListCount - 1); @@ -2606,7 +2606,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonListEntry(2, selectedMon, ignored); PlaySE(SE_DEX_SCROLL); } - else if (JOY_NEW(DPAD_LEFT) && (selectedMon > 0)) + else if ((gMain.newKeys & DPAD_LEFT) && (selectedMon > 0)) { startingPos = selectedMon; @@ -2617,7 +2617,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonSpritesAtPos(selectedMon, 0xE); PlaySE(SE_DEX_PAGE); } - else if ((JOY_NEW(DPAD_RIGHT)) && (selectedMon < sPokedexView->pokemonListCount - 1)) + else if ((gMain.newKeys & DPAD_RIGHT) && (selectedMon < sPokedexView->pokemonListCount - 1)) { startingPos = selectedMon; for (i = 0; i < 7; i++) @@ -2666,7 +2666,7 @@ static bool8 TryDoInfoScreenScroll(void) u16 nextPokemon; u16 selectedPokemon = sPokedexView->selectedPokemon; - if ((JOY_NEW(DPAD_UP)) && selectedPokemon) + if ((gMain.newKeys & DPAD_UP) && selectedPokemon) { nextPokemon = selectedPokemon; while (nextPokemon != 0) @@ -2689,7 +2689,7 @@ static bool8 TryDoInfoScreenScroll(void) return TRUE; } } - else if ((JOY_NEW(DPAD_DOWN)) && selectedPokemon < sPokedexView->pokemonListCount - 1) + else if ((gMain.newKeys & DPAD_DOWN) && selectedPokemon < sPokedexView->pokemonListCount - 1) { nextPokemon = selectedPokemon; while (nextPokemon < sPokedexView->pokemonListCount - 1) @@ -3186,10 +3186,10 @@ static u8 LoadInfoScreen(struct PokedexListItem* item, u8 monSpriteId) gTasks[taskId].data[5] = 255; ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sInfoScreen_BgTemplate, ARRAY_COUNT(sInfoScreen_BgTemplate)); - SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(3, AllocZeroed(0x800)); + SetBgTilemapBuffer(2, AllocZeroed(0x800)); + SetBgTilemapBuffer(1, AllocZeroed(0x800)); + SetBgTilemapBuffer(0, AllocZeroed(0x800)); InitWindows(sInfoScreen_WindowTemplates); DeactivateAllTextPrinters(); @@ -3356,14 +3356,14 @@ static void Task_HandleInfoScreenInput(u8 taskId) PlaySE(SE_DEX_SCROLL); return; } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = Task_ExitInfoScreen; PlaySE(SE_PC_OFF); return; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { switch (sPokedexView->selectedScreen) { @@ -3400,8 +3400,8 @@ static void Task_HandleInfoScreenInput(u8 taskId) } return; } - if ((JOY_NEW(DPAD_LEFT) - || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if (((gMain.newKeys & DPAD_LEFT) + || ((gMain.newKeys & L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) && sPokedexView->selectedScreen > 0) { sPokedexView->selectedScreen--; @@ -3409,8 +3409,8 @@ static void Task_HandleInfoScreenInput(u8 taskId) PlaySE(SE_DEX_PAGE); return; } - if ((JOY_NEW(DPAD_RIGHT) - || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if (((gMain.newKeys & DPAD_RIGHT) + || ((gMain.newKeys & R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) && sPokedexView->selectedScreen < CANCEL_SCREEN) { sPokedexView->selectedScreen++; @@ -3630,7 +3630,7 @@ static void Task_HandleCryScreenInput(u8 taskId) else LoadPlayArrowPalette(FALSE); - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { LoadPlayArrowPalette(TRUE); CryScreenPlayButton(NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); @@ -3638,7 +3638,7 @@ static void Task_HandleCryScreenInput(u8 taskId) } else if (!gPaletteFade.active) { - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); m4aMPlayContinue(&gMPlayInfo_BGM); @@ -3647,8 +3647,8 @@ static void Task_HandleCryScreenInput(u8 taskId) PlaySE(SE_PC_OFF); return; } - if ((JOY_NEW(DPAD_LEFT)) - || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if ((gMain.newKeys & DPAD_LEFT) + || ((gMain.newKeys & L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); m4aMPlayContinue(&gMPlayInfo_BGM); @@ -3657,8 +3657,8 @@ static void Task_HandleCryScreenInput(u8 taskId) PlaySE(SE_DEX_PAGE); return; } - if (JOY_NEW(DPAD_RIGHT) - || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if ((gMain.newKeys & DPAD_RIGHT) + || ((gMain.newKeys & R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { if (!sPokedexListItem->owned) { @@ -3810,15 +3810,15 @@ static void Task_LoadSizeScreen(u8 taskId) static void Task_HandleSizeScreenInput(u8 taskId) { - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); sPokedexView->screenSwitchState = 1; gTasks[taskId].func = Task_SwitchScreensFromSizeScreen; PlaySE(SE_PC_OFF); } - else if ((JOY_NEW(DPAD_LEFT)) - || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + else if ((gMain.newKeys & DPAD_LEFT) + || ((gMain.newKeys & L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); sPokedexView->screenSwitchState = 2; @@ -3951,8 +3951,8 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId) ResetOtherVideoRegisters(DISPCNT_BG0_ON); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sNewEntryInfoScreen_BgTemplate, ARRAY_COUNT(sNewEntryInfoScreen_BgTemplate)); - SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(3, AllocZeroed(0x800)); + SetBgTilemapBuffer(2, AllocZeroed(0x800)); InitWindows(sNewEntryInfoScreen_WindowTemplates); DeactivateAllTextPrinters(); gTasks[taskId].tState = 1; @@ -4010,7 +4010,7 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId) static void Task_HandleCaughtMonPageInput(u8 taskId) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { BeginNormalPaletteFade(0x0000FFFF, 0, 0, 16, RGB_BLACK); gSprites[gTasks[taskId].tMonSpriteId].callback = SpriteCB_SlideCaughtMonToCenter; @@ -4167,18 +4167,21 @@ static void PrintMonHeight(u16 height, u8 left, u8 top) static void PrintMonWeight(u16 weight, u8 left, u8 top) { +#ifndef NONMATCHING + asm("":::"r9"); +{ +#endif u8 buffer[16]; - u8 i; bool8 output; + u8 i = 0; u32 lbs = (weight * 100000) / 4536; if (lbs % 10u >= 5) lbs += 10; - - i = 0; output = FALSE; - if ((buffer[i] = (lbs / 100000) + CHAR_0) == CHAR_0 && !output) + buffer[i] = (lbs / 100000) + CHAR_0; + if (buffer[i] == CHAR_0) { buffer[i++] = 0x77; } @@ -4189,7 +4192,8 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) } lbs %= 100000; - if ((buffer[i] = (lbs / 10000) + CHAR_0) == CHAR_0 && !output) + buffer[i] = (lbs / 10000) + CHAR_0; + if (buffer[i] == CHAR_0 && !output) { buffer[i++] = 0x77; } @@ -4200,13 +4204,13 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) } lbs %= 10000; - if ((buffer[i] = (lbs / 1000) + CHAR_0) == CHAR_0 && !output) + buffer[i] = (lbs / 1000) + CHAR_0; + if (buffer[i] == CHAR_0 && !output) { buffer[i++] = 0x77; } else { - output = TRUE; i++; } @@ -4222,6 +4226,9 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) buffer[i++] = CHAR_PERIOD; buffer[i++] = EOS; PrintInfoScreenText(buffer, left, top); +#ifndef NONMATCHING +} +#endif } const u8 *GetPokedexCategoryName(u16 dexNum) // unused @@ -4229,19 +4236,13 @@ const u8 *GetPokedexCategoryName(u16 dexNum) // unused return gPokedexEntries[dexNum].categoryName; } -enum -{ - HEIGHT, - WEIGHT, -}; - u16 GetPokedexHeightWeight(u16 dexNum, u8 data) { switch (data) { - case HEIGHT: + case 0: // height return gPokedexEntries[dexNum].height; - case WEIGHT: + case 1: // weight return gPokedexEntries[dexNum].weight; default: return 1; @@ -4819,10 +4820,10 @@ static void Task_LoadSearchMenu(u8 taskId) ResetOtherVideoRegisters(0); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sSearchMenu_BgTemplate, ARRAY_COUNT(sSearchMenu_BgTemplate)); - SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(3, AllocZeroed(0x800)); + SetBgTilemapBuffer(2, AllocZeroed(0x800)); + SetBgTilemapBuffer(1, AllocZeroed(0x800)); + SetBgTilemapBuffer(0, AllocZeroed(0x800)); InitWindows(sSearchMenu_WindowTemplate); DeactivateAllTextPrinters(); PutWindowTilemap(0); @@ -4906,13 +4907,13 @@ static void Task_SwitchToSearchMenuTopBar(u8 taskId) static void Task_HandleSearchTopBarInput(u8 taskId) { - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_PC_OFF); gTasks[taskId].func = Task_ExitSearch; return; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { switch (gTasks[taskId].tTopBarItem) { @@ -4933,7 +4934,7 @@ static void Task_HandleSearchTopBarInput(u8 taskId) } return; } - if ((JOY_NEW(DPAD_LEFT)) && gTasks[taskId].tTopBarItem > SEARCH_TOPBAR_SEARCH) + if ((gMain.newKeys & DPAD_LEFT) && gTasks[taskId].tTopBarItem > SEARCH_TOPBAR_SEARCH) { PlaySE(SE_DEX_PAGE); gTasks[taskId].tTopBarItem--; @@ -4941,7 +4942,7 @@ static void Task_HandleSearchTopBarInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_RIGHT)) && gTasks[taskId].tTopBarItem < SEARCH_TOPBAR_CANCEL) + if ((gMain.newKeys & DPAD_RIGHT) && gTasks[taskId].tTopBarItem < SEARCH_TOPBAR_CANCEL) { PlaySE(SE_DEX_PAGE); gTasks[taskId].tTopBarItem++; @@ -4980,14 +4981,14 @@ static void Task_HandleSearchMenuInput(u8 taskId) movementMap = sSearchMovementMap_SearchNatDex; } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_BALL); SetDefaultSearchModeAndOrder(taskId); gTasks[taskId].func = Task_SwitchToSearchMenuTopBar; return; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (gTasks[taskId].tMenuItem == SEARCH_OK) { @@ -5022,7 +5023,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) return; } - if ((JOY_NEW(DPAD_LEFT)) && movementMap[gTasks[taskId].tMenuItem][0] != 0xFF) + if ((gMain.newKeys & DPAD_LEFT) && movementMap[gTasks[taskId].tMenuItem][0] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][0]; @@ -5030,7 +5031,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if (JOY_NEW(DPAD_RIGHT) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) + if ((gMain.newKeys & DPAD_RIGHT) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][1]; @@ -5038,7 +5039,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_UP)) && movementMap[gTasks[taskId].tMenuItem][2] != 0xFF) + if ((gMain.newKeys & DPAD_UP) && movementMap[gTasks[taskId].tMenuItem][2] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][2]; @@ -5046,7 +5047,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_DOWN)) && movementMap[gTasks[taskId].tMenuItem][3] != 0xFF) + if ((gMain.newKeys & DPAD_DOWN) && movementMap[gTasks[taskId].tMenuItem][3] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][3]; @@ -5090,7 +5091,7 @@ static void Task_WaitAndCompleteSearch(u8 taskId) static void Task_SearchCompleteWaitForInput(u8 taskId) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (sPokedexView->pokemonListCount != 0) { @@ -5116,9 +5117,9 @@ static void Task_SelectSearchMenuItem(u8 taskId) u16 *scrollOffset; DrawOrEraseSearchParameterBox(FALSE); - menuItem = (u16)gTasks[taskId].tMenuItem; - cursorPos = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; - scrollOffset = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + menuItem = gTasks[taskId].tMenuItem; + cursorPos = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; + scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; gTasks[taskId].tCursorPos = *cursorPos; gTasks[taskId].tScrollOffset = *scrollOffset; PrintSearchParameterText(taskId); @@ -5143,7 +5144,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) cursorPos = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; maxOption = sSearchOptions[menuItem].numOptions - 1; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_PIN); ClearSearchParameterBoxText(); @@ -5153,7 +5154,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) CopyBgTilemapBufferToVram(3); return; } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_BALL); ClearSearchParameterBoxText(); @@ -5166,7 +5167,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) return; } moved = FALSE; - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) { if (*cursorPos != 0) { @@ -5192,7 +5193,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) } return; } - if (JOY_REPEAT(DPAD_DOWN)) + if (gMain.newAndRepeatedKeys & DPAD_DOWN) { if (*cursorPos < MAX_SEARCH_PARAM_CURSOR_POS && *cursorPos < maxOption) { @@ -5235,24 +5236,83 @@ static void Task_ExitSearchWaitForFade(u8 taskId) } } +#ifdef NONMATCHING +// This doesn't match because gcc flips the naming of the r7 and r6 +// registers. It also does one of the additions backwards. void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width) { - u16 i, temp; //This would have been better as a pointer but here we are - u32 ptr = (u32)GetBgTilemapBuffer(3); //This should be a pointer, but this only matches as a u32. + u16 i; + u16* ptr = GetBgTilemapBuffer(3); + u16* temp; for (i = 0; i < width; i++) { - temp = *(u16 *)(ptr + (y + 0) * 64 + (x + i) * 2); - temp &= 0x0fff; - temp |= (flags << 12); - *(u16 *)(ptr + (y + 0) * 64 + (x + i) * 2) = temp; + // This addition is supposed to be done in this order; however, + // gcc will always do it in ptr + (y * 32) order. + temp = (y * 32) + ptr; + temp[x + i] %= 0x1000; + temp[x + i] |= flags * 0x1000; - temp = *(u16 *)(ptr + (y + 1) * 64 + (x + i) * 2); - temp &= 0x0fff; - temp |= (flags << 12); - *(u16 *)(ptr + (y + 1) * 64 + (x + i) * 2) = temp; + temp[x + i + 32] %= 0x1000; + temp[x + i + 32] |= flags * 0x1000; } } +#else +NAKED +void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width) +{ + asm_unified( + "push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + adds r4, r3, 0\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r8, r1\n\ + lsls r2, 24\n\ + lsrs r5, r2, 24\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + movs r0, 0x3\n\ + bl GetBgTilemapBuffer\n\ + adds r2, r0, 0\n\ + movs r3, 0\n\ + cmp r3, r4\n\ + bcs _080C1DEC\n\ + lsls r0, r5, 6\n\ + adds r7, r0, r2\n\ + ldr r5, =0x00000fff\n\ + lsls r2, r6, 12\n\ +_080C1DC8:\n\ + mov r0, r8\n\ + adds r1, r0, r3\n\ + lsls r1, 1\n\ + adds r1, r7\n\ + ldrh r0, [r1]\n\ + ands r0, r5\n\ + orrs r0, r2\n\ + strh r0, [r1]\n\ + adds r1, 0x40\n\ + ldrh r0, [r1]\n\ + ands r0, r5\n\ + orrs r0, r2\n\ + strh r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, r4\n\ + bcc _080C1DC8\n\ +_080C1DEC:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); +} +#endif #define SEARCH_BG_SEARCH SEARCH_TOPBAR_SEARCH #define SEARCH_BG_SHIFT SEARCH_TOPBAR_SHIFT @@ -5452,8 +5512,8 @@ static void PrintSearchParameterText(u8 taskId) const struct SearchOptionText *texts = sSearchOptions[gTasks[taskId].tMenuItem].texts; const u16 *cursorPos = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; - - u16 i, j; + u16 i; + u16 j; ClearSearchParameterBoxText(); @@ -5542,7 +5602,8 @@ static bool8 SearchParamCantScrollUp(u8 taskId) if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset != 0) return FALSE; - return TRUE; + else + return TRUE; } static bool8 SearchParamCantScrollDown(u8 taskId) @@ -5553,7 +5614,8 @@ static bool8 SearchParamCantScrollDown(u8 taskId) if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset < lastOption - MAX_SEARCH_PARAM_CURSOR_POS) return FALSE; - return TRUE; + else + return TRUE; } #define sTaskId data[0] diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index fdbd2f40c5..8450f85306 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -724,12 +724,12 @@ static void Task_HandlePokedexAreaScreenInput(u8 taskId) return; break; case 1: - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { gTasks[taskId].data[1] = 1; PlaySE(SE_PC_OFF); } - else if (JOY_NEW(DPAD_RIGHT) || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + else if (gMain.newKeys & DPAD_RIGHT || (gMain.newKeys & R_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { gTasks[taskId].data[1] = 2; PlaySE(SE_DEX_PAGE); diff --git a/src/pokemon.c b/src/pokemon.c index a0e655d1e6..188624d6a7 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -70,7 +70,7 @@ EWRAM_DATA u8 gEnemyPartyCount = 0; EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0}; EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0}; -EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL, NULL}; +EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL}; // const rom data #include "data/battle_moves.h" @@ -5746,29 +5746,25 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId) u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) { - u16 retVal; // Dont modify HP, Accuracy, or Evasion by nature if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS) { - return n; + // Should just be "return n", but it wouldn't match without this. + u16 retVal = n; + retVal++; + retVal--; + return retVal; } switch (gNatureStatTable[nature][statIndex - 1]) { case 1: - retVal = n * 110; - retVal /= 100; - break; + return (u16)(n * 110) / 100; // NOTE: will overflow for n > 595 because the intermediate value is cast to u16 before the division. Fix by removing (u16) cast case -1: - retVal = n * 90; - retVal /= 100; - break; - default: - retVal = n; - break; + return (u16)(n * 90) / 100; // NOTE: will overflow for n > 728, see above } - return retVal; + return n; } #define IS_LEAGUE_BATTLE \ @@ -6808,16 +6804,19 @@ static bool8 ShouldSkipFriendshipChange(void) return FALSE; } -#define MAGIC_NUMBER 0xA3 +#define FORCE_SIGNED(x)(-(x * (-1))) static void sub_806F160(struct Unknown_806F160_Struct* structPtr) { u16 i, j; - for (i = 0; i < structPtr->field_0_0; i++) + for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++) { structPtr->templates[i] = gUnknown_08329D98[i]; for (j = 0; j < structPtr->field_1; j++) { + #ifndef NONMATCHING + asm(""); + #endif structPtr->frameImages[i * structPtr->field_1 + j].data = &structPtr->byteArrays[i][j * 0x800]; } structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_1]; @@ -6827,7 +6826,7 @@ static void sub_806F160(struct Unknown_806F160_Struct* structPtr) static void sub_806F1FC(struct Unknown_806F160_Struct* structPtr) { u16 i, j; - for (i = 0; i < structPtr->field_0_0; i++) + for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++) { structPtr->templates[i] = gUnknown_08329F28; for (j = 0; j < structPtr->field_1; j++) @@ -6858,7 +6857,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) structPtr->field_0_0 = 7; structPtr->field_0_1 = 7; structPtr->field_1 = 4; - structPtr->size = 1; + structPtr->field_3_0 = 1; structPtr->field_3_1 = 2; break; case 0: @@ -6866,12 +6865,12 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) structPtr->field_0_0 = 4; structPtr->field_0_1 = 4; structPtr->field_1 = 4; - structPtr->size = 1; + structPtr->field_3_0 = 1; structPtr->field_3_1 = 0; break; } - structPtr->bytes = AllocZeroed(structPtr->size * 0x800 * 4 * structPtr->field_0_0); + structPtr->bytes = AllocZeroed(structPtr->field_3_0 * 0x800 * 4 * structPtr->field_0_0); structPtr->byteArrays = AllocZeroed(structPtr->field_0_0 * 32); if (structPtr->bytes == NULL || structPtr->byteArrays == NULL) { @@ -6879,8 +6878,8 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) } else { - for (i = 0; i < structPtr->field_0_0; i++) - structPtr->byteArrays[i] = structPtr->bytes + (structPtr->size * (i << 0xD)); + for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++) + structPtr->byteArrays[i] = structPtr->bytes + (structPtr->field_3_0 * (i << 0xD)); } structPtr->templates = AllocZeroed(sizeof(struct SpriteTemplate) * structPtr->field_0_0); @@ -6899,8 +6898,8 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) case 2: sub_806F1FC(structPtr); break; - case 1: case 0: + case 1: default: sub_806F160(structPtr); break; @@ -6929,7 +6928,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) } else { - structPtr->magic = MAGIC_NUMBER; + structPtr->magic = 0xA3; gUnknown_020249B4[id] = structPtr; } @@ -6940,12 +6939,12 @@ void sub_806F47C(u8 id) { struct Unknown_806F160_Struct *structPtr; - id &= 1; + id %= 2; structPtr = gUnknown_020249B4[id]; if (structPtr == NULL) return; - if (structPtr->magic != MAGIC_NUMBER) + if (structPtr->magic != 0xA3) { memset(structPtr, 0, sizeof(struct Unknown_806F160_Struct)); } @@ -6969,13 +6968,15 @@ void sub_806F47C(u8 id) u8 *sub_806F4F8(u8 id, u8 arg1) { struct Unknown_806F160_Struct *structPtr = gUnknown_020249B4[id % 2]; - if (structPtr->magic != MAGIC_NUMBER) + if (structPtr->magic != 0xA3) { return NULL; } - - if (arg1 >= structPtr->field_0_0) - arg1 = 0; + else + { + if (arg1 >= FORCE_SIGNED(structPtr->field_0_0)) + arg1 = 0; - return structPtr->byteArrays[arg1]; + return structPtr->byteArrays[arg1]; + } } diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index e63a2cef1d..37abb90e9d 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -2884,10 +2884,13 @@ static void sub_8181C2C(struct Sprite *sprite) } else { + #ifndef NONMATCHING + register s32 var asm("r4") = sUnknown_03001240[sprite->data[0]].field_8; + #else + s32 var = sUnknown_03001240[sprite->data[0]].field_8; + #endif - const s16 var = sUnknown_03001240[sprite->data[0]].field_8; - - sprite->pos2.x = var * ((counter % 128) * 8) / 128 + 8 * -var; //Should be - 8 * var instead of + 8 * -var, but that doesn't match + sprite->pos2.x = (var << 3) * (counter % 128) / 128 - (sUnknown_03001240[sprite->data[0]].field_8 * 8); sprite->pos2.y = -(Sin(counter % 128, 8)); } diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 84d869a1ac..81f3a784fc 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -406,7 +406,7 @@ void StartPokemonJump(u16 partyIndex, MainCallback callback) if (gReceivedRemoteLinkPlayers) { - gUnknown_02022CFC = Alloc(sizeof(struct PokemonJump1)); + gUnknown_02022CFC = Alloc(sizeof(*gUnknown_02022CFC)); if (gUnknown_02022CFC) { ResetTasks(); @@ -1245,7 +1245,7 @@ static bool32 sub_802B8CC(void) break; // fall through case 1: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { sub_802C164(); sub_802AE14(3); @@ -1336,7 +1336,7 @@ static bool32 sub_802BA58(void) case 2: case 5: gUnknown_02022CFC->unk3C++; - if (JOY_NEW(A_BUTTON | B_BUTTON) || gUnknown_02022CFC->unk3C > 180) + if (gMain.newKeys & (A_BUTTON | B_BUTTON) || gUnknown_02022CFC->unk3C > 180) { sub_802DA14(); gUnknown_02022CFC->unkA++; @@ -3922,7 +3922,7 @@ static void Task_ShowPokemonJumpRecords(u8 taskId) data[0]++; break; case 2: - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { rbox_fill_rectangle(data[1]); CopyWindowToVram(data[1], 1); diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index ae334504e0..546f50dced 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -1756,10 +1756,10 @@ static void Task_PokemonStorageSystemPC(u8 taskId) { case MENU_NOTHING_CHOSEN: task->data[3] = task->data[1]; - if (JOY_NEW(DPAD_UP) && --task->data[3] < 0) + if (gMain.newKeys & DPAD_UP && --task->data[3] < 0) task->data[3] = 4; - if (JOY_NEW(DPAD_DOWN) && ++task->data[3] > 4) + if (gMain.newKeys & DPAD_DOWN && ++task->data[3] > 4) task->data[3] = 0; if (task->data[1] != task->data[3]) { @@ -1798,13 +1798,13 @@ static void Task_PokemonStorageSystemPC(u8 taskId) } break; case 3: - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); task->data[0] = 2; } - else if (JOY_NEW(DPAD_UP)) + else if (gMain.newKeys & DPAD_UP) { if (--task->data[1] < 0) task->data[1] = 4; @@ -1814,7 +1814,7 @@ static void Task_PokemonStorageSystemPC(u8 taskId) AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); task->data[0] = 2; } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { if (++task->data[1] > 3) task->data[1] = 0; @@ -1976,22 +1976,22 @@ static void sub_80C78E4(void) static u8 HandleBoxChooseSelectionInput(void) { - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); return 201; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); return gUnknown_02039D04->curBox; } - if (JOY_NEW(DPAD_LEFT)) + if (gMain.newKeys & DPAD_LEFT) { PlaySE(SE_SELECT); sub_80C7BB4(); } - else if (JOY_NEW(DPAD_RIGHT)) + else if (gMain.newKeys & DPAD_RIGHT) { PlaySE(SE_SELECT); sub_80C7B80(); @@ -2157,7 +2157,7 @@ static void Cb2_EnterPSS(u8 boxOption) { ResetTasks(); sCurrentBoxOption = boxOption; - sPSSData = Alloc(sizeof(struct PokemonStorageSystemData)); + sPSSData = Alloc(sizeof(*sPSSData)); if (sPSSData == NULL) { SetMainCallback2(Cb2_ExitPSS); @@ -2177,7 +2177,7 @@ static void Cb2_EnterPSS(u8 boxOption) static void Cb2_ReturnToPSS(void) { ResetTasks(); - sPSSData = Alloc(sizeof(struct PokemonStorageSystemData)); + sPSSData = Alloc(sizeof(*sPSSData)); if (sPSSData == NULL) { SetMainCallback2(Cb2_ExitPSS); @@ -2393,7 +2393,7 @@ static void Cb_ReshowPSS(u8 taskId) } break; case 2: - if (!IsDma3ManagerBusyWithBgCopy() && JOY_NEW(A_BUTTON | B_BUTTON)) + if (!IsDma3ManagerBusyWithBgCopy() && gMain.newKeys & (A_BUTTON | B_BUTTON)) { ClearBottomWindow(); sPSSData->state++; @@ -2615,7 +2615,7 @@ static void Cb_MainPSS(u8 taskId) } break; case 3: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sPSSData->state = 0; @@ -2632,7 +2632,7 @@ static void Cb_MainPSS(u8 taskId) sPSSData->state = 6; break; case 6: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -2858,7 +2858,7 @@ static void Cb_OnSelectedMon(u8 taskId) sPSSData->state = 6; break; case 6: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -2943,7 +2943,7 @@ static void Cb_WithdrawMon(u8 taskId) } break; case 1: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -3034,7 +3034,7 @@ static void Cb_DepositMenu(u8 taskId) } break; case 4: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); sPSSData->state = 1; @@ -3095,14 +3095,14 @@ static void Cb_ReleaseMon(u8 taskId) sPSSData->state++; break; case 4: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { PrintStorageActionText(PC_TEXT_BYE_BYE); sPSSData->state++; } break; case 5: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); if (sInPartyMenu) @@ -3134,14 +3134,14 @@ static void Cb_ReleaseMon(u8 taskId) sPSSData->state++; break; case 9: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { PrintStorageActionText(PC_TEXT_SURPRISE); sPSSData->state++; } break; case 10: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sub_80CC064(); @@ -3157,14 +3157,14 @@ static void Cb_ReleaseMon(u8 taskId) } break; case 12: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { PrintStorageActionText(PC_TEXT_WORRIED); sPSSData->state++; } break; case 13: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -3257,7 +3257,7 @@ static void Cb_GiveMovingItemToMon(u8 taskId) } break; case 3: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sPSSData->state++; @@ -3296,7 +3296,7 @@ static void Cb_ItemToBag(u8 taskId) } break; case 2: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sub_80CE00C(); @@ -3309,7 +3309,7 @@ static void Cb_ItemToBag(u8 taskId) SetPSSCallback(Cb_MainPSS); break; case 3: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -3349,7 +3349,7 @@ static void Cb_SwitchSelectedItem(u8 taskId) } break; case 3: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sPSSData->state++; @@ -3388,7 +3388,7 @@ static void Cb_ShowItemInfo(u8 taskId) sPSSData->state++; break; case 4: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { PlaySE(SE_WIN_OPEN); sPSSData->state++; @@ -3438,7 +3438,7 @@ static void Cb_CloseBoxWhileHoldingItem(u8 taskId) } break; case 2: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sPSSData->state = 5; @@ -3494,7 +3494,7 @@ static void Cb_PrintCantStoreMail(u8 taskId) sPSSData->state++; break; case 2: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sPSSData->state++; @@ -3759,7 +3759,7 @@ static void Cb_OnCloseBoxPressed(u8 taskId) } break; case 1: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -3820,7 +3820,7 @@ static void Cb_OnBPressed(u8 taskId) } break; case 1: - if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -5462,7 +5462,7 @@ static void sub_80CCA3C(const void *tilemap, s8 direction, u8 arg2) if (direction == 0) return; - if (direction > 0) + else if (direction > 0) x *= 1, x += 0x14; // x * 1 is needed to match, but can be safely removed as it makes no functional difference else x -= 4; @@ -6940,7 +6940,7 @@ static u8 InBoxInput_Normal(void) sPSSData->field_CD3 = 0; sPSSData->field_CD7 = 0; - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) { retVal = TRUE; if (sBoxCursorPosition >= IN_BOX_ROWS) @@ -6954,7 +6954,7 @@ static u8 InBoxInput_Normal(void) } break; } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { retVal = TRUE; cursorPosition += IN_BOX_ROWS; @@ -6968,7 +6968,7 @@ static u8 InBoxInput_Normal(void) } break; } - else if (JOY_REPEAT(DPAD_LEFT)) + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { retVal = TRUE; if (sBoxCursorPosition % IN_BOX_ROWS != 0) @@ -6982,7 +6982,7 @@ static u8 InBoxInput_Normal(void) } break; } - else if (JOY_REPEAT(DPAD_RIGHT)) + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { retVal = TRUE; if ((sBoxCursorPosition + 1) % IN_BOX_ROWS != 0) @@ -6996,7 +6996,7 @@ static u8 InBoxInput_Normal(void) } break; } - else if (JOY_NEW(START_BUTTON)) + else if (gMain.newKeys & START_BUTTON) { retVal = TRUE; cursorArea = CURSOR_AREA_BOX; @@ -7004,7 +7004,7 @@ static u8 InBoxInput_Normal(void) break; } - if ((JOY_NEW(A_BUTTON)) && sub_80CFA5C()) + if ((gMain.newKeys & A_BUTTON) && sub_80CFA5C()) { if (!sCanOnlyMove) return 8; @@ -7038,18 +7038,18 @@ static u8 InBoxInput_Normal(void) } } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) return 19; if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (JOY_HELD(L_BUTTON)) + if (gMain.heldKeys & L_BUTTON) return 10; - if (JOY_HELD(R_BUTTON)) + if (gMain.heldKeys & R_BUTTON) return 9; } - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { sub_80CFDC4(); return 0; @@ -7067,9 +7067,9 @@ static u8 InBoxInput_Normal(void) static u8 InBoxInput_GrabbingMultiple(void) { - if (JOY_HELD(A_BUTTON)) + if (gMain.heldKeys & A_BUTTON) { - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) { if (sBoxCursorPosition / IN_BOX_ROWS != 0) { @@ -7081,7 +7081,7 @@ static u8 InBoxInput_GrabbingMultiple(void) return 24; } } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { if (sBoxCursorPosition + IN_BOX_ROWS < IN_BOX_COUNT) { @@ -7093,7 +7093,7 @@ static u8 InBoxInput_GrabbingMultiple(void) return 24; } } - else if (JOY_REPEAT(DPAD_LEFT)) + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { if (sBoxCursorPosition % IN_BOX_ROWS != 0) { @@ -7105,7 +7105,7 @@ static u8 InBoxInput_GrabbingMultiple(void) return 24; } } - else if (JOY_REPEAT(DPAD_RIGHT)) + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { if ((sBoxCursorPosition + 1) % IN_BOX_ROWS != 0) { @@ -7142,7 +7142,7 @@ static u8 InBoxInput_GrabbingMultiple(void) static u8 InBoxInput_MovingMultiple(void) { - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) { if (sub_80D0580(0)) { @@ -7154,7 +7154,7 @@ static u8 InBoxInput_MovingMultiple(void) return 24; } } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { if (sub_80D0580(1)) { @@ -7166,7 +7166,7 @@ static u8 InBoxInput_MovingMultiple(void) return 24; } } - else if (JOY_REPEAT(DPAD_LEFT)) + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { if (sub_80D0580(2)) { @@ -7178,7 +7178,7 @@ static u8 InBoxInput_MovingMultiple(void) return 10; } } - else if (JOY_REPEAT(DPAD_RIGHT)) + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { if (sub_80D0580(3)) { @@ -7190,7 +7190,7 @@ static u8 InBoxInput_MovingMultiple(void) return 9; } } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { if (sub_80D0BC0()) { @@ -7203,7 +7203,7 @@ static u8 InBoxInput_MovingMultiple(void) return 24; } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return 24; } @@ -7211,9 +7211,9 @@ static u8 InBoxInput_MovingMultiple(void) { if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (JOY_HELD(L_BUTTON)) + if (gMain.heldKeys & L_BUTTON) return 10; - if (JOY_HELD(R_BUTTON)) + if (gMain.heldKeys & R_BUTTON) return 9; } @@ -7238,7 +7238,7 @@ static u8 HandleInput_InParty(void) gotoBox = FALSE; retVal = 0; - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) { if (--cursorPosition < 0) cursorPosition = PARTY_SIZE; @@ -7246,7 +7246,7 @@ static u8 HandleInput_InParty(void) retVal = 1; break; } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { if (++cursorPosition > PARTY_SIZE) cursorPosition = 0; @@ -7254,14 +7254,14 @@ static u8 HandleInput_InParty(void) retVal = 1; break; } - else if (JOY_REPEAT(DPAD_LEFT) && sBoxCursorPosition != 0) + else if (gMain.newAndRepeatedKeys & DPAD_LEFT && sBoxCursorPosition != 0) { retVal = 1; sPSSData->field_CD6 = sBoxCursorPosition; cursorPosition = 0; break; } - else if (JOY_REPEAT(DPAD_RIGHT)) + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { if (sBoxCursorPosition == 0) { @@ -7277,7 +7277,7 @@ static u8 HandleInput_InParty(void) break; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (sBoxCursorPosition == PARTY_SIZE) { @@ -7313,7 +7313,7 @@ static u8 HandleInput_InParty(void) } } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { if (sPSSData->boxOption == BOX_OPTION_DEPOSIT) return 19; @@ -7327,7 +7327,7 @@ static u8 HandleInput_InParty(void) cursorArea = CURSOR_AREA_IN_BOX; cursorPosition = 0; } - else if (JOY_NEW(SELECT_BUTTON)) + else if (gMain.newKeys & SELECT_BUTTON) { sub_80CFDC4(); return 0; @@ -7356,7 +7356,7 @@ static u8 HandleInput_OnBox(void) sPSSData->field_CD2 = 0; sPSSData->field_CD7 = 0; - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) { retVal = 1; cursorArea = CURSOR_AREA_BUTTONS; @@ -7364,7 +7364,7 @@ static u8 HandleInput_OnBox(void) sPSSData->field_CD7 = 1; break; } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { retVal = 1; cursorArea = CURSOR_AREA_IN_BOX; @@ -7372,30 +7372,30 @@ static u8 HandleInput_OnBox(void) break; } - if (JOY_HELD(DPAD_LEFT)) + if (gMain.heldKeys & DPAD_LEFT) return 10; - if (JOY_HELD(DPAD_RIGHT)) + if (gMain.heldKeys & DPAD_RIGHT) return 9; if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (JOY_HELD(L_BUTTON)) + if (gMain.heldKeys & L_BUTTON) return 10; - if (JOY_HELD(R_BUTTON)) + if (gMain.heldKeys & R_BUTTON) return 9; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { sub_80CD1A8(FALSE); AddBoxMenu(); return 7; } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) return 19; - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { sub_80CFDC4(); return 0; @@ -7429,7 +7429,7 @@ static u8 HandleInput_OnButtons(void) sPSSData->field_CD2 = 0; sPSSData->field_CD7 = 0; - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) { retVal = 1; cursorArea = CURSOR_AREA_IN_BOX; @@ -7441,8 +7441,7 @@ static u8 HandleInput_OnButtons(void) sPSSData->field_CD7 = 1; break; } - - if (JOY_REPEAT(DPAD_DOWN | START_BUTTON)) + else if (gMain.newAndRepeatedKeys & (DPAD_DOWN | START_BUTTON)) { retVal = 1; cursorArea = CURSOR_AREA_BOX; @@ -7451,14 +7450,14 @@ static u8 HandleInput_OnButtons(void) break; } - if (JOY_REPEAT(DPAD_LEFT)) + if (gMain.newAndRepeatedKeys & DPAD_LEFT) { retVal = 1; if (--cursorPosition < 0) cursorPosition = 1; break; } - else if (JOY_REPEAT(DPAD_RIGHT)) + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { retVal = 1; if (++cursorPosition > 1) @@ -7466,12 +7465,12 @@ static u8 HandleInput_OnButtons(void) break; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) return (cursorPosition == 0) ? 5 : 4; - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) return 19; - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { sub_80CFDC4(); return 0; @@ -7920,23 +7919,23 @@ static s16 sub_80D00AC(void) do { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { textId = Menu_GetCursorPos(); break; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); textId = -1; } - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { PlaySE(SE_SELECT); Menu_MoveCursor(-1); } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { PlaySE(SE_SELECT); Menu_MoveCursor(1); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index bfd849229d..d016c455c0 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1497,23 +1497,23 @@ static void Task_HandleInput(u8 taskId) { if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active) { - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { ChangeSummaryPokemon(taskId, -1); } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { ChangeSummaryPokemon(taskId, 1); } - else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) + else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { ChangePage(taskId, -1); } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { ChangePage(taskId, 1); } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { if (sMonSummaryScreen->currPageIndex != PSS_PAGE_SKILLS) { @@ -1530,7 +1530,7 @@ static void Task_HandleInput(u8 taskId) } } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { StopPokemonAnimations(); PlaySE(SE_SELECT); @@ -1878,17 +1878,17 @@ static void Task_HandleInput_MoveSelect(u8 taskId) if (MenuHelpers_CallLinkSomething() != 1) { - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { data[0] = 4; ChangeSelectedMove(data, -1, &sMonSummaryScreen->firstMoveIndex); } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { data[0] = 4; ChangeSelectedMove(data, 1, &sMonSummaryScreen->firstMoveIndex); } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { if (sMonSummaryScreen->lockMovesFlag == TRUE || (sMonSummaryScreen->newMove == MOVE_NONE && sMonSummaryScreen->firstMoveIndex == MAX_MON_MOVES)) @@ -1906,7 +1906,7 @@ static void Task_HandleInput_MoveSelect(u8 taskId) PlaySE(SE_FAILURE); } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); CloseMoveSelectMode(taskId); @@ -2018,24 +2018,24 @@ static void Task_HandleInput_MovePositionSwitch(u8 taskId) if (MenuHelpers_CallLinkSomething() != TRUE) { - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { data[0] = 3; ChangeSelectedMove(&data[0], -1, &sMonSummaryScreen->secondMoveIndex); } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { data[0] = 3; ChangeSelectedMove(&data[0], 1, &sMonSummaryScreen->secondMoveIndex); } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { if (sMonSummaryScreen->firstMoveIndex == sMonSummaryScreen->secondMoveIndex) ExitMovePositionSwitchMode(taskId, FALSE); else ExitMovePositionSwitchMode(taskId, TRUE); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { ExitMovePositionSwitchMode(taskId, FALSE); } @@ -2161,25 +2161,25 @@ static void Task_HandleReplaceMoveInput(u8 taskId) { if (gPaletteFade.active != TRUE) { - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { data[0] = 4; ChangeSelectedMove(data, -1, &sMonSummaryScreen->firstMoveIndex); } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { data[0] = 4; ChangeSelectedMove(data, 1, &sMonSummaryScreen->firstMoveIndex); } - else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) { ChangePage(taskId, -1); } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) { ChangePage(taskId, 1); } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { if (CanReplaceMove() == TRUE) { @@ -2195,7 +2195,7 @@ static void Task_HandleReplaceMoveInput(u8 taskId) ShowCantForgetHMsWindow(taskId); } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { StopPokemonAnimations(); PlaySE(SE_SELECT); @@ -2235,7 +2235,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) u16 move; if (FuncIsActiveTask(Task_ShowPowerAccWindow) != 1) { - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { data[1] = 1; data[0] = 4; @@ -2243,7 +2243,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) data[1] = 0; gTasks[taskId].func = Task_HandleReplaceMoveInput; } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { data[1] = 1; data[0] = 4; @@ -2251,7 +2251,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) data[1] = 0; gTasks[taskId].func = Task_HandleReplaceMoveInput; } - else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) { if (sMonSummaryScreen->currPageIndex != PSS_PAGE_BATTLE_MOVES) { @@ -2265,7 +2265,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) HandleAppealJamTilemap(9, -2, move); } } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) { if (sMonSummaryScreen->currPageIndex != PSS_PAGE_CONTEST_MOVES) { @@ -2279,7 +2279,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) HandleAppealJamTilemap(9, -2, move); } } - else if (JOY_NEW(A_BUTTON | B_BUTTON)) + else if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES); if (!gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_STATUS]].invisible) diff --git a/src/pokenav.c b/src/pokenav.c index 30dc001c37..8ea33575a0 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -317,7 +317,7 @@ static void Task_RunLoopedTask_LinkMode(u8 taskId) void CB2_InitPokeNav(void) { - gPokenavResources = Alloc(sizeof(struct PokenavResources)); + gPokenavResources = Alloc(sizeof(*gPokenavResources)); if (gPokenavResources == NULL) { SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); @@ -345,7 +345,7 @@ static void CB2_InitPokenavForTutorial(void) if (gPaletteFade.active) return; - gPokenavResources = Alloc(sizeof(struct PokenavResources)); + gPokenavResources = Alloc(sizeof(*gPokenavResources)); if (gPokenavResources == NULL) { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c index 488d40d130..1c7573a442 100644 --- a/src/pokenav_conditions_1.c +++ b/src/pokenav_conditions_1.c @@ -89,13 +89,13 @@ u32 sub_81CD08C(struct PokenavSub11 *structPtr) if (ret == 0) { - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); structPtr->unk6304 = sub_81CD19C; ret = 2; } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { if (structPtr->unk6300 == 0) { @@ -166,7 +166,7 @@ u8 sub_81CD1E4(struct PokenavSub11 *structPtr) struct PokenavSub18 *unkPtr = GetSubstructPtr(18); u8 ret = 0; - if (JOY_HELD(DPAD_UP)) + if (gMain.heldKeys & DPAD_UP) { if (structPtr->unk6300 == 0 || unkPtr->unk2 != 0) { @@ -174,7 +174,7 @@ u8 sub_81CD1E4(struct PokenavSub11 *structPtr) ret = sub_81CD258(1); } } - else if (JOY_HELD(DPAD_DOWN)) + else if (gMain.heldKeys & DPAD_DOWN) { if (structPtr->unk6300 == 0 || unkPtr->unk2 < unkPtr->unk0 - 1) { diff --git a/src/pokenav_conditions_3.c b/src/pokenav_conditions_3.c index 15b687a429..eea4aa397c 100644 --- a/src/pokenav_conditions_3.c +++ b/src/pokenav_conditions_3.c @@ -170,28 +170,29 @@ static bool32 sub_81CF010(struct PokenavSub7 *structPtr) static u32 sub_81CF030(struct PokenavSub7 *structPtr) { - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) return 1; - if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) return 2; - if (JOY_NEW(DPAD_LEFT)) + else if (gMain.newKeys & DPAD_LEFT) return 3; - if (JOY_NEW(DPAD_RIGHT)) + else if (gMain.newKeys & DPAD_RIGHT) return 4; - if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { structPtr->unk1C = 0; structPtr->unk0 = sub_81CF0B0; return 5; } - if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { structPtr->unkPtr->unk2 = GetSelectedMatchCall(); structPtr->unk1C = 1; structPtr->unk0 = sub_81CF0B8; return 6; } - return 0; + else + return 0; } static u32 sub_81CF0B0(struct PokenavSub7 *structPtr) diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index f2b9b0dcca..0e2425d4e9 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -436,10 +436,9 @@ static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0) if (ChangeBgY(0, 384, 2) <= 0) { ChangeBgY(0, 0, 0); - return LT_FINISH; + return 4; } - - return LT_PAUSE; + return 2; } void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) @@ -459,9 +458,11 @@ void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) { break; } - - index = (index * 16) + 0x100; - CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); + else + { + index = (index * 16) + 0x100; + CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); + } } } @@ -470,41 +471,139 @@ void sub_81C7990(u32 a0, u16 a1) CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); } -void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette) +NAKED +void sub_81C79BC(const u16 *a0, const u16 *a1, u32 a2, u32 a3, u32 a4, u16 *a5) { - - if (a4 == 0) - { - CpuCopy16(a0, palette, a2 * 2); - } - else if (a4 >= a3) - { - CpuCopy16(a1, palette, a2 * 2); - } - else - { - int r, g, b; - int r1, g1, b1; - while (a2--) - { - r = GET_R(*a0); - g = GET_G(*a0); - b = GET_B(*a0); - - r1 = ((((GET_R(*a1) << 8) - (r << 8)) / a3) * a4) >> 8; - g1 = ((((GET_G(*a1) << 8) - (g << 8)) / a3) * a4) >> 8; - b1 = ((((GET_B(*a1) << 8) - (b << 8)) / a3) * a4) >> 8; - - r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match; I have to assign the value of ((r + r1) & 0x1F) to r1 - g = (g + g1) & 0x1F; //See above - b = (b + b1) & 0x1F; //See above - - *palette = RGB2(r, g, b); //See above comment - - a0++, a1++; - palette++; - } - } + asm_unified( + "push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + str r0, [sp]\n\ + str r1, [sp, 0x4]\n\ + mov r10, r2\n\ + str r3, [sp, 0x8]\n\ + ldr r0, [sp, 0x2C]\n\ + cmp r0, 0\n\ + bne _081C79E4\n\ + ldr r2, =0x001fffff\n\ + mov r1, r10\n\ + ands r2, r1\n\ + ldr r0, [sp]\n\ + b _081C79F4\n\ + .pool\n\ +_081C79E4:\n\ + ldr r2, [sp, 0x2C]\n\ + ldr r0, [sp, 0x8]\n\ + cmp r2, r0\n\ + blt _081C7A00\n\ + ldr r2, =0x001fffff\n\ + mov r1, r10\n\ + ands r2, r1\n\ + ldr r0, [sp, 0x4]\n\ +_081C79F4:\n\ + ldr r1, [sp, 0x30]\n\ + bl CpuSet\n\ + b _081C7AAE\n\ + .pool\n\ +_081C7A00:\n\ + movs r2, 0x1\n\ + negs r2, r2\n\ + add r10, r2\n\ + b _081C7AA6\n\ +_081C7A08:\n\ + ldr r1, [sp]\n\ + ldrh r0, [r1]\n\ + movs r2, 0x1F\n\ + mov r9, r2\n\ + mov r1, r9\n\ + ands r1, r0\n\ + mov r9, r1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 21\n\ + movs r1, 0x1F\n\ + ands r1, r2\n\ + mov r8, r1\n\ + lsrs r7, r0, 26\n\ + movs r2, 0x1F\n\ + ands r7, r2\n\ + ldr r0, [sp, 0x4]\n\ + ldrh r4, [r0]\n\ + movs r0, 0x1F\n\ + ands r0, r4\n\ + mov r1, r9\n\ + subs r0, r1\n\ + lsls r0, 8\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r2, [sp, 0x2C]\n\ + adds r6, r0, 0\n\ + muls r6, r2\n\ + asrs r6, 8\n\ + lsls r4, 16\n\ + lsrs r0, r4, 21\n\ + movs r1, 0x1F\n\ + ands r0, r1\n\ + mov r2, r8\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r1, [sp, 0x2C]\n\ + adds r5, r0, 0\n\ + muls r5, r1\n\ + asrs r5, 8\n\ + lsrs r4, 26\n\ + movs r2, 0x1F\n\ + ands r4, r2\n\ + subs r4, r7\n\ + lsls r4, 8\n\ + adds r0, r4, 0\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r1, [sp, 0x2C]\n\ + muls r0, r1\n\ + asrs r0, 8\n\ + add r6, r9\n\ + movs r2, 0x1F\n\ + ands r6, r2\n\ + add r5, r8\n\ + ands r5, r2\n\ + adds r0, r7, r0\n\ + ands r0, r2\n\ + lsls r0, 10\n\ + lsls r5, 5\n\ + orrs r0, r5\n\ + orrs r0, r6\n\ + ldr r1, [sp, 0x30]\n\ + strh r0, [r1]\n\ + ldr r2, [sp]\n\ + adds r2, 0x2\n\ + str r2, [sp]\n\ + ldr r0, [sp, 0x4]\n\ + adds r0, 0x2\n\ + str r0, [sp, 0x4]\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x30]\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + add r10, r1\n\ +_081C7AA6:\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r10, r0\n\ + bne _081C7A08\n\ +_081C7AAE:\n\ + add sp, 0xC\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0"); } void PokenavFadeScreen(s32 fadeType) @@ -681,7 +780,7 @@ static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) size = GetDecompressedDataSize(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data); LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20); LZ77UnCompWram(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer); - RequestDma3Copy(gDecompressionBuffer, (void *)OBJ_VRAM0 + (GetSpriteTileStartByTag(2) * 32), size, 1); + RequestDma3Copy(gDecompressionBuffer, (void *)VRAM + 0x10000 + (GetSpriteTileStartByTag(2) * 32), size, 1); structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].size; if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT || menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_IN) diff --git a/src/pokenav_match_call_1.c b/src/pokenav_match_call_1.c index d919a4dbf8..2652593941 100755 --- a/src/pokenav_match_call_1.c +++ b/src/pokenav_match_call_1.c @@ -79,16 +79,16 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) { int selection; - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) return POKENAV_MC_FUNC_UP; - if (JOY_REPEAT(DPAD_DOWN)) + if (gMain.newAndRepeatedKeys & DPAD_DOWN) return POKENAV_MC_FUNC_DOWN; - if (JOY_REPEAT(DPAD_LEFT)) + if (gMain.newAndRepeatedKeys & DPAD_LEFT) return POKENAV_MC_FUNC_PG_UP; - if (JOY_REPEAT(DPAD_RIGHT)) + if (gMain.newAndRepeatedKeys & DPAD_RIGHT) return POKENAV_MC_FUNC_PG_DOWN; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { state->callback = CB2_HandleMatchCallOptionsInput; state->optionCursorPos = 0; @@ -108,7 +108,7 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) return POKENAV_MC_FUNC_SELECT; } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { if (GetPokenavMode() != POKENAV_MODE_FORCE_CALL_READY) { @@ -132,19 +132,19 @@ static u32 GetExitMatchCallMenuId(struct Pokenav3Struct *state) static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) { - if ((JOY_NEW(DPAD_UP)) && state->optionCursorPos) + if ((gMain.newKeys & DPAD_UP) && state->optionCursorPos) { state->optionCursorPos--; return POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR; } - if ((JOY_NEW(DPAD_DOWN)) && state->optionCursorPos < state->maxOptionId) + if ((gMain.newKeys & DPAD_DOWN) && state->optionCursorPos < state->maxOptionId) { state->optionCursorPos++; return POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { switch (state->matchCallOptions[state->optionCursorPos]) { @@ -166,7 +166,7 @@ static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) } } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { state->callback = CB2_HandleMatchCallInput; return POKENAV_MC_FUNC_CANCEL; @@ -177,12 +177,12 @@ static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *state) { - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) return POKENAV_MC_FUNC_CHECK_PAGE_UP; - if (JOY_REPEAT(DPAD_DOWN)) + if (gMain.newAndRepeatedKeys & DPAD_DOWN) return POKENAV_MC_FUNC_CHECK_PAGE_DOWN; - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { state->callback = CB2_HandleMatchCallInput; return POKENAV_MC_FUNC_EXIT_CHECK_PAGE; @@ -193,7 +193,7 @@ static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *state) static u32 CB2_HandleCallInput(struct Pokenav3Struct *state) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { state->callback = CB2_HandleMatchCallInput; return POKENAV_MC_FUNC_10; diff --git a/src/pokenav_match_call_2.c b/src/pokenav_match_call_2.c index 4248826702..60091577e9 100755 --- a/src/pokenav_match_call_2.c +++ b/src/pokenav_match_call_2.c @@ -1126,7 +1126,7 @@ static void PrintMatchCallMessage(struct Pokenav4Struct *state) static bool32 WaitForMatchCallMessageText(struct Pokenav4Struct *state) { - if (JOY_HELD(A_BUTTON)) + if (gMain.heldKeys & A_BUTTON) gTextFlags.canABSpeedUpPrint = 1; else gTextFlags.canABSpeedUpPrint = 0; diff --git a/src/pokenav_menu_handler_1.c b/src/pokenav_menu_handler_1.c index 6002d731bc..d8d8e1509b 100644 --- a/src/pokenav_menu_handler_1.c +++ b/src/pokenav_menu_handler_1.c @@ -216,7 +216,7 @@ static u32 HandleMainMenuInput(struct Pokenav1Struct *state) if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { switch (sMenuItems[state->menuType][state->cursorPos]) { @@ -251,7 +251,7 @@ static u32 HandleMainMenuInput(struct Pokenav1Struct *state) } } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) return -1; return POKENAV_MENU_FUNC_NONE; @@ -263,7 +263,7 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state) if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (sMenuItems[state->menuType][state->cursorPos] == POKENAV_MENUITEM_MATCH_CALL) { @@ -278,7 +278,7 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state) } } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_FAILURE); return POKENAV_MENU_FUNC_NONE; @@ -293,7 +293,7 @@ static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state) if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { u32 menuItem = sMenuItems[state->menuType][state->cursorPos]; if (menuItem != POKENAV_MENUITEM_MATCH_CALL && menuItem != POKENAV_MENUITEM_SWITCH_OFF) @@ -312,7 +312,7 @@ static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state) return -1; } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { return -1; } @@ -329,7 +329,7 @@ static u32 HandleCantOpenRibbonsInput(struct Pokenav1Struct *state) return POKENAV_MENU_FUNC_MOVE_CURSOR; } - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { state->callback = GetMainMenuInputHandler(); return POKENAV_MENU_FUNC_RESHOW_DESCRIPTION; @@ -343,7 +343,7 @@ static u32 HandleConditionMenuInput(struct Pokenav1Struct *state) if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { switch (sMenuItems[state->menuType][state->cursorPos]) { @@ -363,7 +363,7 @@ static u32 HandleConditionMenuInput(struct Pokenav1Struct *state) return POKENAV_MENU_FUNC_RETURN_TO_MAIN; } } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { if (state->cursorPos != sLastCursorPositions[state->menuType]) { @@ -387,7 +387,7 @@ static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state) if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { u8 menuItem = sMenuItems[state->menuType][state->cursorPos]; if (menuItem != POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL) @@ -404,7 +404,7 @@ static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state) return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; } } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { if (state->cursorPos != sLastCursorPositions[state->menuType]) { @@ -463,7 +463,7 @@ static void ReturnToConditionMenu(struct Pokenav1Struct *state) static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state) { - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { if (--state->cursorPos < 0) state->cursorPos = sLastCursorPositions[state->menuType]; @@ -471,7 +471,7 @@ static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state) state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; return TRUE; } - else if (JOY_NEW(DPAD_DOWN)) + else if (gMain.newKeys & DPAD_DOWN) { state->cursorPos++; if (state->cursorPos > sLastCursorPositions[state->menuType]) diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 394b409076..e858fad4a2 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -219,7 +219,7 @@ static u32 HandleRegionMapInput(struct Pokenav5Struct *state) static u32 HandleRegionMapInputZoomDisabled(struct Pokenav5Struct *state) { - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { state->callback = GetExitRegionMapMenuId; return POKENAV_MAP_FUNC_EXIT; diff --git a/src/pokenav_ribbons_1.c b/src/pokenav_ribbons_1.c index fd47b27ad4..aad0053a8d 100644 --- a/src/pokenav_ribbons_1.c +++ b/src/pokenav_ribbons_1.c @@ -162,21 +162,21 @@ static u32 sub_81CFA68(struct PokenavSub9 *structPtr) static u32 sub_81CFA88(struct PokenavSub9 *structPtr) { - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) return 1; - if (JOY_REPEAT(DPAD_DOWN)) + if (gMain.newAndRepeatedKeys & DPAD_DOWN) return 2; - if (JOY_NEW(DPAD_LEFT)) + if (gMain.newKeys & DPAD_LEFT) return 3; - if (JOY_NEW(DPAD_RIGHT)) + if (gMain.newKeys & DPAD_RIGHT) return 4; - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { structPtr->unk18 = 0; structPtr->unk0 = sub_81CFB08; return 5; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { structPtr->unk1C->unk2 = GetSelectedMatchCall(); structPtr->unk18 = 1; diff --git a/src/pokenav_ribbons_2.c b/src/pokenav_ribbons_2.c index 6eabc9b335..e5a89acad3 100644 --- a/src/pokenav_ribbons_2.c +++ b/src/pokenav_ribbons_2.c @@ -188,26 +188,26 @@ void sub_81D04B8(void) u32 sub_81D04C4(struct PokenavSub13 *structPtr) { - if (JOY_REPEAT(DPAD_UP) && structPtr->field_8->unk2 != 0) + if (gMain.newAndRepeatedKeys & DPAD_UP && structPtr->field_8->unk2 != 0) { structPtr->field_8->unk2--; structPtr->field_C = 0; sub_81D0814(structPtr); return 1; } - if (JOY_REPEAT(DPAD_DOWN) && structPtr->field_8->unk2 < structPtr->field_8->unk0 - 1) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN && structPtr->field_8->unk2 < structPtr->field_8->unk0 - 1) { structPtr->field_8->unk2++; structPtr->field_C = 0; sub_81D0814(structPtr); return 1; } - if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { structPtr->field_98 = sub_81D0548; return 2; } - if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { structPtr->field_98 = sub_81D05D4; return 5; @@ -217,15 +217,15 @@ u32 sub_81D04C4(struct PokenavSub13 *structPtr) u32 sub_81D0548(struct PokenavSub13 *structPtr) { - if (JOY_REPEAT(DPAD_UP) && sub_81D05DC(structPtr)) + if (gMain.newAndRepeatedKeys & DPAD_UP && sub_81D05DC(structPtr)) return 3; - if (JOY_REPEAT(DPAD_DOWN) && sub_81D061C(structPtr)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN && sub_81D061C(structPtr)) return 3; - if (JOY_REPEAT(DPAD_LEFT) && sub_81D0664(structPtr)) + else if (gMain.newAndRepeatedKeys & DPAD_LEFT && sub_81D0664(structPtr)) return 3; - if (JOY_REPEAT(DPAD_RIGHT) && sub_81D0688(structPtr)) + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT && sub_81D0688(structPtr)) return 3; - if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { structPtr->field_98 = sub_81D04C4; return 4; diff --git a/src/record_mixing.c b/src/record_mixing.c index b12b716972..6c0a02d8c5 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -713,18 +713,17 @@ static u8 sub_80E7A9C(struct DayCareMail *rmMail) return rmMail->message.itemId; } -static void ExchangeMail(struct RecordMixingDayCareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1) +static void sub_80E7AA4(struct RecordMixingDayCareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1) { struct DayCareMail buffer; struct RecordMixingDayCareMail *mail1; struct RecordMixingDayCareMail *mail2; mail1 = (void *)src + recordSize * idxs[which0][0]; - buffer = mail1->mail[idxs[which0][1]]; - + memcpy(&buffer, &mail1->mail[idxs[which0][1]], sizeof(struct DayCareMail)); mail2 = (void *)src + recordSize * idxs[which1][0]; - mail1->mail[idxs[which0][1]] = mail2->mail[idxs[which1][1]]; - mail2->mail[idxs[which1][1]] = buffer; + memcpy(&mail1->mail[idxs[which0][1]], &mail2->mail[idxs[which1][1]], sizeof(struct DayCareMail)); + memcpy(&mail2->mail[idxs[which1][1]], &buffer, sizeof(struct DayCareMail)); } static void sub_80E7B2C(const u8 *src) @@ -866,23 +865,28 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r } else if (sp1c[i][0] == TRUE && sp1c[i][1] == TRUE) { - u8 mail1, mail2; + u32 var1, var2; sp24[j][0] = i; - mail1 = sub_80E7A9C(&_src->mail[0]); - mail2 = sub_80E7A9C(&_src->mail[1]); - if (!(mail1 || mail2) || (mail1 && mail2)) //Logical (not bitwise) XOR. Should be ((mail1 || mail2) && !(mail1 && mail2)), but that doesn't match. + var1 = sub_80E7A9C(&_src->mail[0]); + var2 = sub_80E7A9C(&_src->mail[1]); + if (!var1 && var2) { - sp24[j][1] = Random2() % 2; + #ifndef NONMATCHING + register u8 one asm("r0") = 1; // boo, a fakematch + sp24[j][1] = one; + #else + sp24[j][1] = 1; + #endif } - else if (mail1 && !mail2) + else if ((var1 && var2) || (!var1 && !var2)) + { + sp24[j][1] = Random2() % 2; + } + else if (var1 && !var2) { sp24[j][1] = 0; } - else if (!mail1 && mail2) - { - sp24[j][1] = 1; - } j++; } } @@ -897,27 +901,27 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r switch (sp34) { case 2: - ExchangeMail(src, recordSize, sp24, 0, 1); + sub_80E7AA4(src, recordSize, sp24, 0, 1); break; case 3: which0 = gUnknown_0858CFB8[tableId][0]; which1 = gUnknown_0858CFB8[tableId][1]; - ExchangeMail(src, recordSize, sp24, which0, which1); + sub_80E7AA4(src, recordSize, sp24, which0, which1); break; case 4: ptr = sp24; which0 = gUnknown_0858CFBE[tableId][0]; which1 = gUnknown_0858CFBE[tableId][1]; - ExchangeMail(src, recordSize, ptr, which0, which1); + sub_80E7AA4(src, recordSize, ptr, which0, which1); which0 = gUnknown_0858CFBE[tableId][2]; which1 = gUnknown_0858CFBE[tableId][3]; - ExchangeMail(src, recordSize, ptr, which0, which1); + sub_80E7AA4(src, recordSize, ptr, which0, which1); break; } _src = (void *)src + which * recordSize; - gSaveBlock1Ptr->daycare.mons[0].mail = _src->mail[0]; - gSaveBlock1Ptr->daycare.mons[1].mail = _src->mail[1]; + memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &_src->mail[0], sizeof(struct DayCareMail)); + memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &_src->mail[1], sizeof(struct DayCareMail)); SeedRng(oldSeed); } diff --git a/src/region_map.c b/src/region_map.c index 49b21be078..3438ea3ed1 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -651,31 +651,31 @@ static u8 ProcessRegionMapInput_Full(void) input = MAP_INPUT_NONE; gRegionMap->cursorDeltaX = 0; gRegionMap->cursorDeltaY = 0; - if (JOY_HELD(DPAD_UP) && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN) + if (gMain.heldKeys & DPAD_UP && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN) { gRegionMap->cursorDeltaY = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_DOWN) && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX) + if (gMain.heldKeys & DPAD_DOWN && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX) { gRegionMap->cursorDeltaY = +1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_LEFT) && gRegionMap->cursorPosX > MAPCURSOR_X_MIN) + if (gMain.heldKeys & DPAD_LEFT && gRegionMap->cursorPosX > MAPCURSOR_X_MIN) { gRegionMap->cursorDeltaX = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_RIGHT) && gRegionMap->cursorPosX < MAPCURSOR_X_MAX) + if (gMain.heldKeys & DPAD_RIGHT && gRegionMap->cursorPosX < MAPCURSOR_X_MAX) { gRegionMap->cursorDeltaX = +1; input = MAP_INPUT_MOVE_START; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { input = MAP_INPUT_A_BUTTON; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { input = MAP_INPUT_B_BUTTON; } @@ -730,31 +730,31 @@ static u8 ProcessRegionMapInput_Zoomed(void) input = MAP_INPUT_NONE; gRegionMap->zoomedCursorDeltaX = 0; gRegionMap->zoomedCursorDeltaY = 0; - if (JOY_HELD(DPAD_UP) && gRegionMap->scrollY > -0x34) + if (gMain.heldKeys & DPAD_UP && gRegionMap->scrollY > -0x34) { gRegionMap->zoomedCursorDeltaY = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_DOWN) && gRegionMap->scrollY < 0x3c) + if (gMain.heldKeys & DPAD_DOWN && gRegionMap->scrollY < 0x3c) { gRegionMap->zoomedCursorDeltaY = +1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_LEFT) && gRegionMap->scrollX > -0x2c) + if (gMain.heldKeys & DPAD_LEFT && gRegionMap->scrollX > -0x2c) { gRegionMap->zoomedCursorDeltaX = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_RIGHT) && gRegionMap->scrollX < 0xac) + if (gMain.heldKeys & DPAD_RIGHT && gRegionMap->scrollX < 0xac) { gRegionMap->zoomedCursorDeltaX = +1; input = MAP_INPUT_MOVE_START; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { input = MAP_INPUT_A_BUTTON; } - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { input = MAP_INPUT_B_BUTTON; } diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index d0e815816b..204eb6733b 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -380,7 +380,7 @@ static void Task_ResetRtc_1(u8 taskId) u8 selection = data[2]; const struct ResetRtcStruct *selectionInfo = &sUnknown_08510428[selection - 1]; - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { gTasks[taskId].func = Task_ResetRtc_2; data[1] = 0; @@ -389,7 +389,7 @@ static void Task_ResetRtc_1(u8 taskId) return; } - if (JOY_NEW(DPAD_RIGHT)) + if (gMain.newKeys & DPAD_RIGHT) { if (selectionInfo->right) { @@ -399,7 +399,7 @@ static void Task_ResetRtc_1(u8 taskId) } } - if (JOY_NEW(DPAD_LEFT)) + if (gMain.newKeys & DPAD_LEFT) { if (selectionInfo->left) { @@ -411,7 +411,7 @@ static void Task_ResetRtc_1(u8 taskId) if (selection == 5) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { gLocalTime.days = data[3]; gLocalTime.hours = data[4]; @@ -423,7 +423,7 @@ static void Task_ResetRtc_1(u8 taskId) data[2] = 6; } } - else if (MoveTimeUpDown(&data[selectionInfo->dataIndex], selectionInfo->minVal, selectionInfo->maxVal, JOY_REPEAT(DPAD_UP | DPAD_DOWN))) + else if (MoveTimeUpDown(&data[selectionInfo->dataIndex], selectionInfo->minVal, selectionInfo->maxVal, gMain.newAndRepeatedKeys & (DPAD_UP | DPAD_DOWN))) { PlaySE(SE_SELECT); PrintTime(data[8], 0, 1, data[3], data[4], data[5], data[6]); @@ -532,12 +532,12 @@ static void Task_ShowResetRtcPrompt(u8 taskId) ScheduleBgCopyTilemapToVram(0); data[0]++; case 1: - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { DestroyTask(taskId); DoSoftReset(); } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); DestroyTask(taskId); @@ -620,7 +620,7 @@ static void Task_ResetRtcScreen(u8 taskId) } data[0] = 5; case 5: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { BeginNormalPaletteFade(0xFFFFFFFF, 1, 0, 0x10, RGB_WHITEALPHA); data[0] = 6; diff --git a/src/save.c b/src/save.c index 0a2a4e7994..3ae2f6fd53 100644 --- a/src/save.c +++ b/src/save.c @@ -13,7 +13,7 @@ #include "link.h" #include "constants/game_stat.h" -static u16 CalculateChecksum(const void *data, u16 size); +static u16 CalculateChecksum(void *data, u16 size); static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section); static u8 GetSaveValidStatus(const struct SaveSectionLocation *location); static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location); @@ -621,7 +621,7 @@ static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section) return TRUE; } -static u16 CalculateChecksum(const void *data, u16 size) +static u16 CalculateChecksum(void *data, u16 size) { u16 i; u32 checksum = 0; @@ -648,10 +648,12 @@ static void UpdateSaveAddresses(void) gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; } - for (; i <= SECTOR_ID_PKMN_STORAGE_END; i++) //i = SECTOR_ID_PKMN_STORAGE_START; in the initialization clause does not match + for (i = SECTOR_ID_PKMN_STORAGE_START; i <= SECTOR_ID_PKMN_STORAGE_END; i++) { gRamSaveSectionLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSectionOffsets[i].toAdd; gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; + + i++;i--; // needed to match } } diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index 9bf0e7ed4f..a2a2acc8d6 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -306,7 +306,7 @@ static void CB2_GameplayCannotBeContinued(void) { gSaveFailedClockInfo[CLOCK_RUNNING] = FALSE; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { FillWindowPixelBuffer(gSaveFailedWindowIds[TEXT_WIN_ID], PIXEL_FILL(1)); SaveFailedScreenTextPrint(gText_GamePlayCannotBeContinued, 1, 0); @@ -319,7 +319,7 @@ static void CB2_FadeAndReturnToTitleScreen(void) { gSaveFailedClockInfo[CLOCK_RUNNING] = FALSE; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); SetVBlankCallback(VBlankCB); @@ -349,7 +349,7 @@ static void VBlankCB_UpdateClockGraphics(void) gMain.oamBuffer[0] = sClockOamData; gMain.oamBuffer[0].x = 112; - gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8; + gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8;; if (gSaveFailedClockInfo[CLOCK_RUNNING] != FALSE) { diff --git a/src/scrcmd.c b/src/scrcmd.c index 578e357fa5..b71fa40ad8 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -788,8 +788,8 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); - s16 x; - s16 y; + u16 x; + u16 y; PlayerGetDestCoords(&x, &y); if (mapGroup == 0xFF && mapNum == 0xFF) @@ -1325,9 +1325,9 @@ bool8 ScrCmd_closemessage(struct ScriptContext *ctx) static bool8 WaitForAorBPress(void) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) return TRUE; - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) return TRUE; return FALSE; } diff --git a/src/script.c b/src/script.c index 889c25765c..9ba1a74297 100644 --- a/src/script.c +++ b/src/script.c @@ -26,9 +26,9 @@ void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTable s32 i; ctx->mode = 0; - ctx->scriptPtr = NULL; + ctx->scriptPtr = 0; ctx->stackDepth = 0; - ctx->nativePtr = NULL; + ctx->nativePtr = 0; ctx->cmdTable = cmdTable; ctx->cmdTableEnd = cmdTableEnd; @@ -55,7 +55,7 @@ void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void)) void StopScript(struct ScriptContext *ctx) { ctx->mode = 0; - ctx->scriptPtr = NULL; + ctx->scriptPtr = 0; } bool8 RunScriptCommand(struct ScriptContext *ctx) diff --git a/src/script_menu.c b/src/script_menu.c index 425cdc251c..2b135e3012 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -170,7 +170,7 @@ static void Task_HandleMultichoiceInput(u8 taskId) else selection = Menu_ProcessInput(); - if (JOY_NEW(DPAD_UP | DPAD_DOWN)) + if (gMain.newKeys & (DPAD_UP | DPAD_DOWN)) { DrawLinkServicesMultichoiceMenu(tMultichoiceId); } diff --git a/src/secret_base.c b/src/secret_base.c index 3f69e0419e..83626710fc 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -964,7 +964,7 @@ static void HandleRegistryMenuInput(u8 taskId) data = gTasks[taskId].data; input = ListMenu_ProcessInput(data[5]); - ListMenuGetScrollAndRow(data[5], (u16 *)&data[2], (u16 *)&data[1]); + ListMenuGetScrollAndRow(data[5], &data[2], &data[1]); switch (input) { case LIST_NOTHING_CHOSEN: @@ -1045,10 +1045,10 @@ void DeleteRegistry_Yes_Callback(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, 0); - DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); + DestroyListMenuTask(data[5], &data[2], &data[1]); gSaveBlock1Ptr->secretBases[data[4]].registryStatus = 0; BuildRegistryMenuItems(taskId); - sub_812225C((u16 *)&data[2], (u16 *)&data[1], (u16)data[3], (u16)data[0]); + sub_812225C(&data[2], &data[1], data[3], data[0]); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } @@ -1062,7 +1062,7 @@ static void DeleteRegistry_No(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, 0); - DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); + DestroyListMenuTask(data[5], &data[2], &data[1]); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } diff --git a/src/shop.c b/src/shop.c index 6e2e82a521..5cba2767db 100755 --- a/src/shop.c +++ b/src/shop.c @@ -1017,7 +1017,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) } else { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); ClearStdWindowAndFrameToTransparent(4, 0); @@ -1030,7 +1030,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, gShopDataPtr->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6); BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, BuyMenuConfirmPurchase); } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); ClearStdWindowAndFrameToTransparent(4, 0); @@ -1106,7 +1106,7 @@ static void Task_ReturnToItemListAfterItemPurchase(u8 taskId) { s16 *data = gTasks[taskId].data; - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); if (tItemId == ITEM_POKE_BALL && tItemCount > 9 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE) @@ -1122,7 +1122,7 @@ static void Task_ReturnToItemListAfterItemPurchase(u8 taskId) static void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId) { - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); BuyMenuReturnToItemList(taskId); diff --git a/src/slot_machine.c b/src/slot_machine.c index cc001bcc90..285b110af9 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -252,8 +252,8 @@ struct SlotMachine /*0x0E*/ s16 payout; /*0x10*/ s16 netCoinLoss; // coins lost to machine (but never goes below 0) /*0x12*/ s16 bet; - /*0x14*/ s16 reelTimePixelOffset; - /*0x16*/ s16 reelTimePosition; + /*0x14*/ s16 reeltimePixelOffset; + /*0x16*/ s16 reeltimePosition; /*0x18*/ s16 currReel; /*0x1A*/ s16 reelIncrement; // speed of reel /*0x1C*/ s16 reelPixelOffsets[NUM_REELS]; @@ -584,7 +584,7 @@ static const u16 *const sDigitalDisplay_Pal; static const s16 sInitialReelPositions[NUM_REELS][2]; static const u8 sLuckyFlagProbabilities_Top3[][6]; static const u8 sLuckyFlagProbabilities_NotTop3[][6]; -static const u8 sReelTimeProbabilities_UnluckyGame[][17]; +static const u8 sReeltimeProbabilities_UnluckyGame[][17]; static const u8 sReelTimeProbabilities_LuckyGame[][17]; static const u8 sSymToMatch[]; static const u8 sReelTimeTags[]; @@ -682,7 +682,7 @@ static const struct WindowTemplate sWindowTemplate_InfoBox = .baseBlock = 1 }; -static const u8 sColors_ReelTimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; +static const u8 sColors_ReeltimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; static bool8 (*const sSlotActions[])(struct Task *task) = { @@ -985,7 +985,7 @@ static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback exitCallb { struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)]; task->data[0] = slotMachineIndex; - StoreWordInTwoHalfwords((u16 *)&task->data[1], (intptr_t)exitCallback); + StoreWordInTwoHalfwords(&task->data[1], (intptr_t)exitCallback); } @@ -1744,13 +1744,13 @@ static u8 AttemptsAtLuckyFlags_NotTop3(void) static u8 GetReelTimeProbability(u8 reelTimeDraw) { - if (!sSlotMachine->luckyGame) - return sReelTimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower]; - - return sReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower]; + if (sSlotMachine->luckyGame == FALSE) + return sReeltimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower]; + else + return sReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower]; } -static void GetReelTimeDraw(void) +static void GetReeltimeDraw(void) { u8 rval; s16 reelTimeDraw; @@ -1773,13 +1773,15 @@ static bool8 ShouldReelTimeMachineExplode(u16 i) u16 rval = Random() & 0xff; if (rval < sReelTimeExplodeProbability[i]) return TRUE; - return FALSE; + else + return FALSE; } static u16 SlowReelSpeed(void) { u8 i = 0; - u8 rval, value; + u8 rval; + u8 value; if (sSlotMachine->netCoinLoss >= 300) i = 4; else if (sSlotMachine->netCoinLoss >= 250) @@ -1909,7 +1911,8 @@ static bool8 IsFinalTask_RunAwardPayoutActions(void) { if (FindTaskIdByFunc(RunAwardPayoutActions) == TAIL_SENTINEL) return TRUE; - return FALSE; + else + return FALSE; } static void RunAwardPayoutActions(u8 taskId) @@ -1942,7 +1945,7 @@ static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task) if (sSlotMachine->coins < MAX_COINS) sSlotMachine->coins++; task->data[1] = 8; - if (JOY_HELD(A_BUTTON)) + if (gMain.heldKeys & A_BUTTON) task->data[1] = 4; } if (IsFanfareTaskInactive() && JOY_NEW(START_BUTTON)) @@ -1997,7 +2000,7 @@ static u8 GetTag(u8 reel, s16 offset) static u8 GetNearbyReelTimeTag(s16 n) { - s16 newPosition = (sSlotMachine->reelTimePosition + n) % 6; + s16 newPosition = (sSlotMachine->reeltimePosition + n) % 6; if (newPosition < 0) newPosition += 6; return sReelTimeTags[newPosition]; @@ -2023,22 +2026,22 @@ s16 AdvanceSlotReelToNextTag(u8 reelIndex, s16 value) return offset; } -static void AdvanceReelTimeReel(s16 value) +static void AdvanceReeltimeReel(s16 value) { - sSlotMachine->reelTimePixelOffset += value; - sSlotMachine->reelTimePixelOffset %= 120; - sSlotMachine->reelTimePosition = 6 - sSlotMachine->reelTimePixelOffset / 20; + sSlotMachine->reeltimePixelOffset += value; + sSlotMachine->reeltimePixelOffset %= 120; + sSlotMachine->reeltimePosition = 6 - sSlotMachine->reeltimePixelOffset / 20; } -s16 AdvanceReelTimeReelToNextTag(s16 value) +s16 AdvanceReeltimeReelToNextTag(s16 value) { - s16 offset = sSlotMachine->reelTimePixelOffset % 20; + s16 offset = sSlotMachine->reeltimePixelOffset % 20; if (offset != 0) { if (offset < value) value = offset; - AdvanceReelTimeReel(value); - offset = sSlotMachine->reelTimePixelOffset % 20; + AdvanceReeltimeReel(value); + offset = sSlotMachine->reeltimePixelOffset % 20; } return offset; } @@ -3077,8 +3080,8 @@ static void Task_ReelTime(u8 taskId) static void ReelTime_Init(struct Task *task) { sSlotMachine->reelTimeSpinsLeft = 0; - sSlotMachine->reelTimePixelOffset = 0; - sSlotMachine->reelTimePosition = 0; + sSlotMachine->reeltimePixelOffset = 0; + sSlotMachine->reeltimePosition = 0; task->tState++; task->data[1] = 0; task->data[2] = 30; @@ -3093,7 +3096,7 @@ static void ReelTime_Init(struct Task *task) CreateReelTimeNumberSprites(); CreateReelTimeShadowSprites(); CreateReelTimeNumberGapSprite(); - GetReelTimeDraw(); + GetReeltimeDraw(); StopMapMusic(); PlayNewMapMusic(MUS_ROULETTE); } @@ -3116,12 +3119,12 @@ static void ReelTime_WindowEnter(struct Task *task) task->tState++; task->data[3] = 0; } - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); } static void ReelTime_WaitStartPikachu(struct Task *task) { - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); if (++task->data[5] >= 60) { task->tState++; @@ -3141,7 +3144,7 @@ static void ReelTime_PikachuSpeedUp1(struct Task *task) memcpy(reelTimeBoltDelays, sReelTimeBoltDelays, sizeof(sReelTimeBoltDelays)); memcpy(pikachuAuraFlashDelays, sPikachuAuraFlashDelays, sizeof(sPikachuAuraFlashDelays)); - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); // gradually slow down the reel task->data[4] -= 4; i = 4 - (task->data[4] >> 8); @@ -3159,7 +3162,7 @@ static void ReelTime_PikachuSpeedUp1(struct Task *task) static void ReelTime_PikachuSpeedUp2(struct Task *task) { - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); if (++task->data[5] >= 80) { task->tState++; @@ -3171,7 +3174,7 @@ static void ReelTime_PikachuSpeedUp2(struct Task *task) static void ReelTime_WaitReel(struct Task *task) { - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); task->data[4] = (u8)task->data[4] + 0x80; if (++task->data[5] >= 80) { @@ -3182,7 +3185,7 @@ static void ReelTime_WaitReel(struct Task *task) static void ReelTime_CheckExplode(struct Task *task) { - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); task->data[4] = (u8)task->data[4] + 0x40; if (++task->data[5] >= 40) { @@ -3206,19 +3209,19 @@ static void ReelTime_CheckExplode(struct Task *task) static void ReelTime_LandOnOutcome(struct Task *task) { - s16 reelTimePixelOffset = sSlotMachine->reelTimePixelOffset % 20; - if (reelTimePixelOffset) + s16 reeltimePixelOffset = sSlotMachine->reeltimePixelOffset % 20; + if (reeltimePixelOffset) { - reelTimePixelOffset = AdvanceReelTimeReelToNextTag(task->data[4] >> 8); + reeltimePixelOffset = AdvanceReeltimeReelToNextTag(task->data[4] >> 8); task->data[4] = (u8)task->data[4] + 0x40; } else if (GetNearbyReelTimeTag(1) != sSlotMachine->reelTimeDraw) { - AdvanceReelTimeReel(task->data[4] >> 8); - reelTimePixelOffset = sSlotMachine->reelTimePixelOffset % 20; + AdvanceReeltimeReel(task->data[4] >> 8); + reeltimePixelOffset = sSlotMachine->reeltimePixelOffset % 20; task->data[4] = (u8)task->data[4] + 0x40; } - if (reelTimePixelOffset == 0 && GetNearbyReelTimeTag(1) == sSlotMachine->reelTimeDraw) + if (reeltimePixelOffset == 0 && GetNearbyReelTimeTag(1) == sSlotMachine->reelTimeDraw) { task->data[4] = 0; // stop moving task->tState++; @@ -3441,7 +3444,7 @@ static void InfoBox_DrawWindow(struct Task *task) static void InfoBox_AddText(struct Task *task) { - AddTextPrinterParameterized3(1, 1, 2, 5, sColors_ReelTimeHelp, 0, gText_ReelTimeHelp); + AddTextPrinterParameterized3(1, 1, 2, 5, sColors_ReeltimeHelp, 0, gText_ReelTimeHelp); CopyWindowToVram(1, 3); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); task->tState++; @@ -3771,7 +3774,7 @@ static void CreateReelTimeNumberSprites(void) static void SpriteCB_ReelTimeNumbers(struct Sprite *sprite) { - s16 r0 = (u16)(sSlotMachine->reelTimePixelOffset + sprite->data[7]); + s16 r0 = (u16)(sSlotMachine->reeltimePixelOffset + sprite->data[7]); r0 %= 40; sprite->pos1.y = r0 + 59; StartSpriteAnimIfDifferent(sprite, GetNearbyReelTimeTag(r0 / 20)); @@ -4827,7 +4830,7 @@ static const u8 sLuckyFlagProbabilities_NotTop3[][6] = { {40, 40, 35, 35, 40, 40} }; -static const u8 sReelTimeProbabilities_UnluckyGame[][17] = { +static const u8 sReeltimeProbabilities_UnluckyGame[][17] = { {243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5}, { 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5}, { 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40}, diff --git a/src/start_menu.c b/src/start_menu.c index fa51766e8e..6a90946fe4 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -462,7 +462,7 @@ static bool32 InitStartMenuStep(void) sInitStartMenuData[0]++; break; case 4: - if (PrintStartMenuActions((s8 *)&sInitStartMenuData[1], 2)) + if (PrintStartMenuActions(&sInitStartMenuData[1], 2)) sInitStartMenuData[0]++; break; case 5: @@ -550,19 +550,19 @@ void ShowStartMenu(void) static bool8 HandleStartMenuInput(void) { - if (JOY_NEW(DPAD_UP)) + if (gMain.newKeys & DPAD_UP) { PlaySE(SE_SELECT); sStartMenuCursorPos = Menu_MoveCursor(-1); } - if (JOY_NEW(DPAD_DOWN)) + if (gMain.newKeys & DPAD_DOWN) { PlaySE(SE_SELECT); sStartMenuCursorPos = Menu_MoveCursor(1); } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); if (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void == StartMenuPokedexCallback) @@ -584,7 +584,7 @@ static bool8 HandleStartMenuInput(void) return FALSE; } - if (JOY_NEW(START_BUTTON | B_BUTTON)) + if (gMain.newKeys & (START_BUTTON | B_BUTTON)) { RemoveExtraStartMenuWindows(); HideStartMenu(); @@ -906,12 +906,12 @@ static bool8 SaveSuccesTimer(void) { sSaveDialogTimer--; - if (JOY_HELD(A_BUTTON)) + if (gMain.heldKeys & A_BUTTON) { PlaySE(SE_SELECT); return TRUE; } - if (sSaveDialogTimer == 0) + else if (sSaveDialogTimer == 0) { return TRUE; } @@ -925,7 +925,7 @@ static bool8 SaveErrorTimer(void) { sSaveDialogTimer--; } - else if (JOY_HELD(A_BUTTON)) + else if (gMain.heldKeys & A_BUTTON) { return TRUE; } diff --git a/src/title_screen.c b/src/title_screen.c index 1d6f90d74d..1086016856 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -727,24 +727,24 @@ static void Task_TitleScreenPhase2(u8 taskId) // Show Rayquaza silhouette and process main title screen input static void Task_TitleScreenPhase3(u8 taskId) { - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(START_BUTTON))) + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & START_BUTTON)) { FadeOutBGM(4); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_WHITEALPHA); SetMainCallback2(CB2_GoToMainMenu); } - else if (JOY_HELD(CLEAR_SAVE_BUTTON_COMBO) == CLEAR_SAVE_BUTTON_COMBO) + else if ((gMain.heldKeys & CLEAR_SAVE_BUTTON_COMBO) == CLEAR_SAVE_BUTTON_COMBO) { SetMainCallback2(CB2_GoToClearSaveDataScreen); } - else if (JOY_HELD(RESET_RTC_BUTTON_COMBO) == RESET_RTC_BUTTON_COMBO + else if ((gMain.heldKeys & RESET_RTC_BUTTON_COMBO) == RESET_RTC_BUTTON_COMBO && CanResetRTC() == TRUE) { FadeOutBGM(4); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); SetMainCallback2(CB2_GoToResetRtcScreen); } - else if (JOY_HELD(BERRY_UPDATE_BUTTON_COMBO) == BERRY_UPDATE_BUTTON_COMBO) + else if ((gMain.heldKeys & BERRY_UPDATE_BUTTON_COMBO) == BERRY_UPDATE_BUTTON_COMBO) { FadeOutBGM(4); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); diff --git a/src/trade.c b/src/trade.c index 17aaba565a..3072b8585d 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1353,24 +1353,24 @@ static void SetReadyToTrade(void) static void TradeMenuProcessInput(void) { - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) { TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 0); } - else if (JOY_REPEAT(DPAD_DOWN)) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 1); } - else if (JOY_REPEAT(DPAD_LEFT)) + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 2); } - else if (JOY_REPEAT(DPAD_RIGHT)) + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 3); } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); @@ -1451,7 +1451,7 @@ static void TradeMenuProcessInput_SelectedMon(void) static void ChooseMonAfterButtonPress(void) { - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { PlaySE(SE_SELECT); TradeMenuChooseMon(); @@ -1626,7 +1626,7 @@ static void RedrawTradeMenuAfterPressA(void) { int i; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); rbox_fill_rectangle(0); @@ -1698,7 +1698,7 @@ static void LinkTradeWaitForQueue(void) static void PartnersMonWasInvalid(void) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0); sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; @@ -3728,7 +3728,7 @@ static bool8 AnimateTradeSequenceCable(void) { return TRUE; } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { sTradeData->state++; } @@ -4243,7 +4243,7 @@ static bool8 AnimateTradeSequenceWireless(void) { return TRUE; } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { sTradeData->state++; } diff --git a/src/trainer_card.c b/src/trainer_card.c index 2d9ec2b090..9d6838176f 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -438,13 +438,13 @@ static void Task_TrainerCard(u8 taskId) DrawTrainerCardWindow(1); sData->timeColonNeedDraw = FALSE; } - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { FlipTrainerCard(); PlaySE(SE_RG_CARD_FLIP); sData->mainState = STATE_WAIT_FLIP_TO_BACK; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE) { @@ -465,7 +465,7 @@ static void Task_TrainerCard(u8 taskId) } break; case STATE_HANDLE_INPUT_BACK: - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE) { @@ -483,7 +483,7 @@ static void Task_TrainerCard(u8 taskId) PlaySE(SE_RG_CARD_FLIP); } } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE) { diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 14af7372f8..c5aea14d94 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -356,7 +356,7 @@ static void SetUpDataStruct(void) { if (sHillData == NULL) { - sHillData = AllocZeroed(sizeof(struct TrHillStruct2)); + sHillData = AllocZeroed(sizeof(*sHillData)); sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F; CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor)); nullsub_2(); @@ -672,18 +672,70 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void) return TRUE; } -static u16 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3) +// Functionally equivalent. +#ifdef NONMATCHING +static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3) { - u8 var0; - u16 var1; - u16 var2; + u32 var0, var1, var2, var3; - var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit) & 1); - var1 = sHillData->floors[floorId].display.data[arg3 * arg2 + bit] + 0x200; + var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit)) & 1; + var1 = sHillData->floors[floorId].display.data[arg2 * arg3 + bit]; + var3 = 0x200; var2 = 0x3000; - return (((var0 << 10) & 0xc00) | var2) | (var1 & 0x3ff); + return ((var0 << 10) | var2) | (var1 | var3); } +#else +NAKED +static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3) +{ + asm_unified("\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldr r4, =sHillData\n\ + ldr r4, [r4]\n\ + mov r12, r4\n\ + lsls r4, r2, 1\n\ + lsls r5, r0, 4\n\ + subs r5, r0\n\ + lsls r5, 3\n\ + subs r5, r0\n\ + lsls r5, 3\n\ + adds r4, r5\n\ + movs r0, 0xE8\n\ + lsls r0, 2\n\ + add r0, r12\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + movs r4, 0xF\n\ + subs r4, r1\n\ + asrs r0, r4\n\ + movs r4, 0x1\n\ + ands r0, r4\n\ + muls r2, r3\n\ + adds r2, r1\n\ + adds r2, r5\n\ + movs r1, 0xA8\n\ + lsls r1, 2\n\ + add r1, r12\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + movs r2, 0x80\n\ + lsls r2, 2\n\ + adds r3, r2, 0\n\ + movs r2, 0xC0\n\ + lsls r2, 6\n\ + lsls r0, 10\n\ + orrs r0, r2\n\ + orrs r1, r3\n\ + orrs r0, r1\n\ + pop {r4,r5}\n\ + pop {r1}\n\ + bx r1\n\ + .pool"); +} +#endif // NONMATCHING void GenerateTrainerHillFloorLayout(u16 *mapArg) { diff --git a/src/trainer_see.c b/src/trainer_see.c index c37f372627..4f4aaea08a 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -603,7 +603,7 @@ static void sub_80B44C8(u8 taskId) struct ObjectEvent *objEvent; // another objEvent loaded into by loadword? - LoadWordFromTwoHalfwords((u16*)&task->data[1], (u32 *)&objEvent); + LoadWordFromTwoHalfwords(&task->data[1], (u32 *)&objEvent); if (!task->data[7]) { ObjectEventClearHeldMovement(objEvent); @@ -624,7 +624,7 @@ static void sub_80B44C8(u8 taskId) void sub_80B4578(struct ObjectEvent *var) { - StoreWordInTwoHalfwords((u16 *)&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var); + StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var); } void EndTrainerApproach(void) diff --git a/src/union_room.c b/src/union_room.c index 05bd8cfb05..1bac3678c8 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -445,7 +445,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) break; case LL_STATE_AWAIT_PLAYERS: Leader_SetStateIfMemberListChanged(data, LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, LL_STATE_MEMBER_LEFT); - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { if (data->playerCount == 1) data->state = LL_STATE_SHUTDOWN_AND_FAIL; @@ -458,7 +458,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) && data->playerCount > GROUP_MIN(sPlayerActivityGroupSize) - 1 && GROUP_MAX(sPlayerActivityGroupSize) != 0 && sub_8012240() - && JOY_NEW(START_BUTTON)) + && gMain.newKeys & START_BUTTON) { data->state = LL_STATE_MEMBERS_OK_PROMPT; LinkRfu_StopManagerAndFinalizeSlots(); @@ -1005,7 +1005,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; case 0: id = ListMenu_ProcessInput(data->listTaskId); - if (JOY_NEW(A_BUTTON) && id != -1) + if (gMain.newKeys & A_BUTTON && id != -1) { // this unused variable along with the assignment is needed to match u32 activity = data->field_0->arr[id].gname_uname.gname.activity; @@ -1032,7 +1032,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) PlaySE(SE_WALL_HIT); } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { data->state = LG_STATE_CANCEL_CHOOSE_LEADER; } @@ -1135,7 +1135,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; } - if (RfuGetStatus() == RFU_STATUS_OK && JOY_NEW(B_BUTTON)) + if (RfuGetStatus() == RFU_STATUS_OK && gMain.newKeys & B_BUTTON) data->state = LG_STATE_ASK_LEAVE_GROUP; break; case LG_STATE_ASK_LEAVE_GROUP: @@ -1889,7 +1889,7 @@ static void Task_MEvent_Leader(u8 taskId) break; case 4: Leader_SetStateIfMemberListChanged(data, 5, 6); - if (JOY_NEW(B_BUTTON)) + if (gMain.newKeys & B_BUTTON) { data->state = 13; DestroyWirelessStatusIndicatorSprite(); @@ -2104,7 +2104,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) break; case 0: id = ListMenu_ProcessInput(data->listTaskId); - if (JOY_NEW(A_BUTTON) && id != -1) + if (gMain.newKeys & A_BUTTON && id != -1) { // this unused variable along with the assignment is needed to match u32 unusedVar; @@ -2126,7 +2126,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) PlaySE(SE_WALL_HIT); } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { data->state = 6; } @@ -2289,7 +2289,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) } } } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { data->state = 6; data->refreshTimer = 0; @@ -2547,7 +2547,7 @@ static void Task_RunUnionRoom(u8 taskId) } else if (ScriptContext2_IsEnabled() != TRUE) { - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { if (TryInteractWithUnionRoomMember(uroom->field_0, &taskData[0], &taskData[1], uroom->spriteIds)) { @@ -2881,7 +2881,7 @@ static void Task_RunUnionRoom(u8 taskId) break; case UR_STATE_HANDLE_CONTACT_DATA: ReceiveUnionRoomActivityPacket(uroom); - if (UnionRoom_HandleContactFromOtherPlayer(uroom) && JOY_NEW(B_BUTTON)) + if (UnionRoom_HandleContactFromOtherPlayer(uroom) && gMain.newKeys & B_BUTTON) { sub_8011DE0(1); StringCopy(gStringVar4, sText_ChatEnded); @@ -3754,7 +3754,7 @@ static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str printerTemplate.y = y; printerTemplate.currentX = x; printerTemplate.currentY = y; - printerTemplate.style = 0; + printerTemplate.unk = 0; gTextFlags.useAlternateDownArrow = FALSE; switch (colorIdx) diff --git a/src/union_room_chat.c b/src/union_room_chat.c index ed39d3acff..fd2a957915 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -1017,12 +1017,12 @@ static void Chat_HandleInput(void) switch (sChat->funcState) { case 0: - if (JOY_NEW(START_BUTTON)) + if (gMain.newKeys & START_BUTTON) { if (sChat->bufferCursorPos) SetChatFunction(CHAT_FUNC_SEND); } - else if (JOY_NEW(SELECT_BUTTON)) + else if (gMain.newKeys & SELECT_BUTTON) { SetChatFunction(CHAT_FUNC_SWITCH); } @@ -1039,14 +1039,14 @@ static void Chat_HandleInput(void) SetChatFunction(CHAT_FUNC_ASK_QUIT); } } - else if (JOY_NEW(A_BUTTON)) + else if (gMain.newKeys & A_BUTTON) { AppendTextToMessage(); StartDisplaySubtask(CHATDISPLAY_FUNC_UPDATE_MSG, 0); StartDisplaySubtask(CHATDISPLAY_FUNC_CURSOR_BLINK, 1); sChat->funcState = 1; } - else if (JOY_NEW(R_BUTTON)) + else if (gMain.newKeys & R_BUTTON) { if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER) { @@ -1100,7 +1100,7 @@ static void Chat_Switch(void) shouldSwitchPages = FALSE; break; case MENU_NOTHING_CHOSEN: - if (JOY_NEW(SELECT_BUTTON)) + if (gMain.newKeys & SELECT_BUTTON) { PlaySE(SE_SELECT); Menu_MoveCursor(1); @@ -1420,13 +1420,13 @@ static void Chat_Register(void) } break; case 1: - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { RegisterTextAtRow(); StartDisplaySubtask(CHATDISPLAY_FUNC_RETURN_TO_KB, 0); sChat->funcState = 3; } - else if (JOY_NEW(B_BUTTON)) + else if (gMain.newKeys & B_BUTTON) { StartDisplaySubtask(CHATDISPLAY_FUNC_CANCEL_REGISTER, 0); sChat->funcState = 4; @@ -1457,7 +1457,7 @@ static void Chat_Register(void) sChat->funcState = 6; break; case 6: - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0); sChat->funcState = 4; @@ -1591,7 +1591,7 @@ static bool32 HandleDPadInput(void) { do { - if (JOY_REPEAT(DPAD_UP)) + if (gMain.newAndRepeatedKeys & DPAD_UP) { if (sChat->currentRow > 0) sChat->currentRow--; @@ -1599,7 +1599,7 @@ static bool32 HandleDPadInput(void) sChat->currentRow = sKeyboardPageMaxRow[sChat->currentPage]; break; } - if (JOY_REPEAT(DPAD_DOWN)) + if (gMain.newAndRepeatedKeys & DPAD_DOWN) { if (sChat->currentRow < sKeyboardPageMaxRow[sChat->currentPage]) sChat->currentRow++; @@ -1609,7 +1609,7 @@ static bool32 HandleDPadInput(void) } if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER) { - if (JOY_REPEAT(DPAD_LEFT)) + if (gMain.newAndRepeatedKeys & DPAD_LEFT) { if (sChat->currentCol > 0) sChat->currentCol--; @@ -1617,7 +1617,7 @@ static bool32 HandleDPadInput(void) sChat->currentCol = 4; break; } - else if (JOY_REPEAT(DPAD_RIGHT)) + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { if (sChat->currentCol < 4) sChat->currentCol++; @@ -2121,7 +2121,7 @@ static void Task_ReceiveChatMessage(u8 taskId) static bool8 TryAllocDisplay(void) { - sDisplay = Alloc(sizeof(struct UnionRoomChatDisplay)); + sDisplay = Alloc(sizeof(*sDisplay)); if (sDisplay && TryAllocSprites()) { ResetBgsAndClearDma3BusyFlags(0); diff --git a/src/unk_text_util_2.c b/src/unk_text_util_2.c index b92b34fbd2..2ff8c65070 100644 --- a/src/unk_text_util_2.c +++ b/src/unk_text_util_2.c @@ -19,14 +19,14 @@ u16 Font6Func(struct TextPrinter *textPrinter) switch (textPrinter->state) { case 0: - if (JOY_HELD(A_BUTTON | B_BUTTON) && subStruct->hasPrintBeenSpedUp) + if (gMain.heldKeys & (A_BUTTON | B_BUTTON) && subStruct->hasPrintBeenSpedUp) { textPrinter->delayCounter = 0; } if (textPrinter->delayCounter && textPrinter->textSpeed) { textPrinter->delayCounter --; - if (gTextFlags.canABSpeedUpPrint && JOY_NEW(A_BUTTON | B_BUTTON)) + if (gTextFlags.canABSpeedUpPrint && gMain.newKeys & (A_BUTTON | B_BUTTON)) { subStruct->hasPrintBeenSpedUp = TRUE; textPrinter->delayCounter = 0; @@ -135,7 +135,7 @@ u16 Font6Func(struct TextPrinter *textPrinter) } DecompressGlyphFont6(char_); CopyGlyphToWindow(textPrinter); - textPrinter->printerTemplate.currentX += gUnknown_03002F90.width + textPrinter->printerTemplate.letterSpacing; + textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing; return 0; case 1: if (TextPrinterWait(textPrinter)) @@ -210,8 +210,8 @@ static void DecompressGlyphFont6(u16 glyph) DecompressGlyphTile(glyphs + 0x8, (u16 *)(gUnknown_03002F90.unk20)); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gUnknown_03002F90.unk40)); DecompressGlyphTile(glyphs + 0x88, (u16 *)(gUnknown_03002F90.unk60)); - gUnknown_03002F90.width = 0x10; - gUnknown_03002F90.height = 0x10; + gUnknown_03002F90.unk80 = 0x10; + gUnknown_03002F90.unk81 = 0x10; } u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese) diff --git a/src/walda_phrase.c b/src/walda_phrase.c index 2b11add769..4b617e3b89 100644 --- a/src/walda_phrase.c +++ b/src/walda_phrase.c @@ -118,8 +118,8 @@ static u8 GetLetterTableId(u8 letter) static bool32 TryCalculateWallpaper(u16* backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase) { s32 i; - u8 array[9]; - u8 charsByTableId[15]; + ALIGNED(2) u8 array[12]; + u8 charsByTableId[16]; u16 *ptr; if (StringLength(phrase) != 15) diff --git a/src/wallclock.c b/src/wallclock.c index c38dd99e38..bed04928e3 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -795,7 +795,7 @@ static void Task_SetClock_HandleInput(u8 taskId) { gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5; - if (JOY_NEW(A_BUTTON)) + if (gMain.newKeys & A_BUTTON) { gTasks[taskId].func = Task_SetClock_AskConfirm; } @@ -803,10 +803,10 @@ static void Task_SetClock_HandleInput(u8 taskId) { gTasks[taskId].tMoveDir = MOVE_NONE; - if (JOY_HELD(DPAD_LEFT)) + if (gMain.heldKeys & DPAD_LEFT) gTasks[taskId].tMoveDir = MOVE_BACKWARD; - if (JOY_HELD(DPAD_RIGHT)) + if (gMain.heldKeys & DPAD_RIGHT) gTasks[taskId].tMoveDir = MOVE_FORWARD; if (gTasks[taskId].tMoveDir != MOVE_NONE) @@ -878,7 +878,7 @@ static void Task_ViewClock_WaitFadeIn(u8 taskId) static void Task_ViewClock_HandleInput(u8 taskId) { InitClockWithRtc(taskId); - if (JOY_NEW(A_BUTTON | B_BUTTON)) + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) gTasks[taskId].func = Task_ViewClock_FadeOut; } diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index 81fa16720a..87b200f14a 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -237,7 +237,7 @@ static void PrintHeaderTexts(void) FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0)); WCSS_AddTextPrinterParameterized(0, 1, sHeaderTexts[0], GetStringCenterAlignXOffset(1, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN); - for (i = 0; i < (int)ARRAY_COUNT(sHeaderTexts[0]) - 1; i++) + for (i = 0; i < (int)ARRAY_COUNT(*sHeaderTexts) - 1; i++) { WCSS_AddTextPrinterParameterized(1, 1, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY); } @@ -362,12 +362,12 @@ static u32 CountPlayersInGroupAndGetActivity(struct UnkStruct_x20 * unk20, u32 * { if (group_players(i) == 0) { - k = 0; //Should just be 1 without the increment after the loop ends but that doesn't match. + k = 0; for (j = 0; j < RFU_CHILD_MAX; j++) { if (unk20->gname_uname.gname.child_sprite_gender[j] != 0) k++; } - k++; //See above comment. + k++; groupCounts[group_type(i)] += k; } else diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index 4e85953fdc..8d959465f7 100644 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -282,7 +282,7 @@ static void HflipTile(unsigned char * tile, int bitDepth) for (i = 0; i < 8; i++) { SWAP_NYBBLES(&tile[4 * i + 0], &tile[4 * i + 3]); - SWAP_NYBBLES(&tile[4 * i + 1], &tile[4 * i + 2]); + SWAP_NYBBLES(&tile[4 * i + 1], &tile[4 * i + 2]);; } break; case 8: From 171154a0975b1c734b5b2069f1bdb3ca2bab26f2 Mon Sep 17 00:00:00 2001 From: Kaz Date: Wed, 16 Sep 2020 19:27:55 -0400 Subject: [PATCH 008/177] Convert to -g; will be required for eliminating fakematches. --- Makefile | 4 ++-- src/battle_message.c | 3 +-- src/battle_script_commands.c | 9 ++------- src/battle_setup.c | 3 +-- src/berry_crush.c | 22 +++++++++++----------- src/event_object_movement.c | 9 +++------ src/fldeff_cut.c | 3 +-- src/pokenav_match_call_data.c | 13 +++---------- 8 files changed, 24 insertions(+), 42 deletions(-) diff --git a/Makefile b/Makefile index ca282d07e6..5484fb26e8 100644 --- a/Makefile +++ b/Makefile @@ -63,13 +63,13 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) -override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm +override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g ROM := pokeemerald.gba OBJ_DIR := build/emerald LIBPATH := -L ../../tools/agbcc/lib else CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet -override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mcpu=arm7tdmi -fno-toplevel-reorder -Wno-pointer-to-int-cast +override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mcpu=arm7tdmi -fno-toplevel-reorder -Wno-pointer-to-int-cast -g ROM := pokeemerald_modern.gba OBJ_DIR := build/modern LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" diff --git a/src/battle_message.c b/src/battle_message.c index c004665d75..ee1616b5e8 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2288,8 +2288,7 @@ static const u8* TryGetStatusString(u8 *src) statusPtr = status; for (i = 0; i < 8; i++) { - if (*src == EOS) - break; + if (*src == EOS) break; // one line required to match -g *statusPtr = *src; src++; statusPtr++; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fca2b38796..c2c4e6c410 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5035,14 +5035,9 @@ static void Cmd_openpartyscreen(void) hitmarkerFaintBits = gHitMarker >> 0x1C; gBattlerFainted = 0; - while (1) - { - if (gBitTable[gBattlerFainted] & hitmarkerFaintBits) - break; - if (gBattlerFainted >= gBattlersCount) - break; + while (!(gBitTable[gBattlerFainted] & hitmarkerFaintBits) + && gBattlerFainted < gBattlersCount) gBattlerFainted++; - } if (gBattlerFainted == gBattlersCount) gBattlescriptCurrInstr = jumpPtr; diff --git a/src/battle_setup.c b/src/battle_setup.c index 3c20d9ffe5..8b02e1f427 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -1565,8 +1565,7 @@ static s32 TrainerIdToRematchTableId(const struct RematchTrainer *table, u16 tra { for (j = 0; j < REMATCHES_COUNT; j++) { - if (table[i].trainerIds[j] == 0) - break; + if (table[i].trainerIds[j] == 0) break; // one line required to match -g if (table[i].trainerIds[j] == trainerId) return i; } diff --git a/src/berry_crush.c b/src/berry_crush.c index 744389ba70..3554644f2d 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -202,7 +202,7 @@ struct BerryCrushGame static void VBlankCB(void); static void MainCB(void); static void MainTask(u8); -static void InitGame(struct BerryCrushGame *); +static void ParseName_Options(struct BerryCrushGame *); void sub_8022BEC(u16, u8, u8 *); static void BerryCrush_SetPaletteFadeParams(u8 *, bool8, u32, s8, u8, u8, u16); static int sub_8021450(struct BerryCrushGame *); @@ -880,7 +880,7 @@ void StartBerryCrush(MainCallback callback) gBerryCrushGame->unk0 = callback; gBerryCrushGame->unk8 = multiplayerId; gBerryCrushGame->unk9 = playerCount; - InitGame(gBerryCrushGame); + ParseName_Options(gBerryCrushGame); gBerryCrushGame->unk12 = 1; gBerryCrushGame->unkE = 1; gBerryCrushGame->unkF = 6; @@ -907,23 +907,23 @@ static void GetBerryFromBag(void) SetMainCallback2(MainCB); } -static void InitMainTask(void) +static void BerryCrush_SetupMainTask(void) { DestroyTask(gBerryCrushGame->mainTask); ChooseBerryForMachine(GetBerryFromBag); } -static void SetVBlankCB(void) +static void BerryCrush_SetVBlankCB(void) { SetVBlankCallback(VBlankCB); } -static void InitVBlankCB(void) +static void BerryCrush_InitVBlankCB(void) { SetVBlankCallback(NULL); } -static void SaveResults(void) +static void BerryCrush_SaveResults(void) { u32 var0, var1; @@ -1002,7 +1002,7 @@ static void MainTask(u8 taskId) + offsetof(struct BerryCrushGame_68_x, unk30) \ + sizeof(struct BerryCrushGame_Player) * (i)) -static void InitGame(struct BerryCrushGame *arg0) +static void ParseName_Options(struct BerryCrushGame *arg0) { u8 i = 0; @@ -1028,7 +1028,7 @@ static void InitGame(struct BerryCrushGame *arg0) } } -// TODO: Everything from here on is likely in a separate file. +// TODO: Everything from here on is likely in separate files. s32 InitBerryCrushDisplay(void) { struct BerryCrushGame *game = GetBerryCrushGame(); @@ -1118,7 +1118,7 @@ s32 InitBerryCrushDisplay(void) ShowBg(2); ShowBg(3); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); - SetVBlankCB(); + BerryCrush_SetVBlankCB(); game->unkC = 0; return 1; } @@ -2155,7 +2155,7 @@ static u32 sub_8022EAC(struct BerryCrushGame *r4, u8 *r5) static u32 sub_8022F04(struct BerryCrushGame *r0, __attribute__((unused)) u8 *r1) { r0->unk4 = NULL; - SetMainCallback2(InitMainTask); + SetMainCallback2(BerryCrush_SetupMainTask); return 0; } @@ -2942,7 +2942,7 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 r7->unk10 = 0; break; case 7: - SaveResults(); + BerryCrush_SaveResults(); sub_8022BEC(18, 1, NULL); r7->unk12 = 11; r7->unkC = 0; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 68f873446c..0859fb32f9 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1295,22 +1295,19 @@ static bool8 GetAvailableObjectEventId(u16 localId, u8 mapNum, u8 mapGroup, u8 * { u8 i = 0; - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + for (i = 0; i < OBJECT_EVENTS_COUNT && gObjectEvents[i].active; i++) { - if (!gObjectEvents[i].active) - break; if (gObjectEvents[i].localId == localId && gObjectEvents[i].mapNum == mapNum && gObjectEvents[i].mapGroup == mapGroup) return TRUE; } if (i >= OBJECT_EVENTS_COUNT) return TRUE; *objectEventId = i; - do + for (; i < OBJECT_EVENTS_COUNT; i++) { if (gObjectEvents[i].active && gObjectEvents[i].localId == localId && gObjectEvents[i].mapNum == mapNum && gObjectEvents[i].mapGroup == mapGroup) return TRUE; - i++; - } while (i < OBJECT_EVENTS_COUNT); + } return FALSE; } diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 9916177131..db9eb42680 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -228,8 +228,7 @@ bool8 SetUpFieldMove_Cut(void) tileCuttable = TRUE; for (j = 0; j < 2; ++j) { - if (sHyperCutStruct[i].unk2[j] == 0) - break; + if (sHyperCutStruct[i].unk2[j] == 0) break; // one line required to match -g if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE) { tileCuttable = FALSE; diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index 91dbe40056..6610dcb803 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -1100,16 +1100,9 @@ const u8 *MatchCall_GetOverrideFlavorText(u32 idx, u32 offset) { if (sCheckPageOverrides[i].idx == idx) { - while (1) - { - if (i + 1 >= ARRAY_COUNT(sCheckPageOverrides)) - break; - if (sCheckPageOverrides[i + 1].idx != idx) - break; - if (!FlagGet(sCheckPageOverrides[i + 1].flag)) - break; - i++; - } + for (; i + 1 < ARRAY_COUNT(sCheckPageOverrides) && + sCheckPageOverrides[i + 1].idx == idx && + FlagGet(sCheckPageOverrides[i + 1].flag); i++); return sCheckPageOverrides[i].flavorTexts[offset]; } } From 5a70f99e16c5c2bb1bd32672dde581054990fae5 Mon Sep 17 00:00:00 2001 From: Kaz Date: Wed, 16 Sep 2020 21:39:44 -0400 Subject: [PATCH 009/177] battle_script_commands.c: Eliminate the last nonmatching (swapped expressions). --- src/battle_script_commands.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c2c4e6c410..14866bbcac 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4666,19 +4666,16 @@ static void Cmd_jumpifcantswitch(void) if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { - #ifndef NONMATCHING - asm("":::"r5"); - #endif // NONMATCHING if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) party = gEnemyParty; else party = gPlayerParty; - i = 0; + lastMonId = 0; if (gActiveBattler & 2) - i = 3; + lastMonId = 3; - for (lastMonId = i + 3; i < lastMonId; i++) + for (i = lastMonId; i < lastMonId + 3; i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) @@ -4687,7 +4684,7 @@ static void Cmd_jumpifcantswitch(void) break; } - if (i == lastMonId) + if (i == lastMonId + 3) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; @@ -4700,18 +4697,18 @@ static void Cmd_jumpifcantswitch(void) { party = gPlayerParty; - i = 0; + lastMonId = 0; if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE) - i = 3; + lastMonId = 3; } else { party = gEnemyParty; if (gActiveBattler == 1) - i = 0; + lastMonId = 0; else - i = 3; + lastMonId = 3; } } else @@ -4721,12 +4718,12 @@ static void Cmd_jumpifcantswitch(void) else party = gPlayerParty; - i = 0; + lastMonId = 0; if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE) - i = 3; + lastMonId = 3; } - for (lastMonId = i + 3; i < lastMonId; i++) + for (i = lastMonId; i < lastMonId + 3; i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) @@ -4735,7 +4732,7 @@ static void Cmd_jumpifcantswitch(void) break; } - if (i == lastMonId) + if (i == lastMonId + 3) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; @@ -4744,11 +4741,11 @@ static void Cmd_jumpifcantswitch(void) { party = gEnemyParty; - i = 0; + lastMonId = 0; if (gActiveBattler == B_POSITION_OPPONENT_RIGHT) - i = 3; + lastMonId = 3; - for (lastMonId = i + 3; i < lastMonId; i++) + for (i = lastMonId; i < lastMonId + 3; i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) @@ -4757,7 +4754,7 @@ static void Cmd_jumpifcantswitch(void) break; } - if (i == lastMonId) + if (i == lastMonId + 3) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; From c724f2b8099645daf85884895047e60e23368e4b Mon Sep 17 00:00:00 2001 From: Kaz Date: Wed, 16 Sep 2020 22:01:45 -0400 Subject: [PATCH 010/177] battle_ai_script_commands.c: -g fixes the fakematch. --- src/battle_ai_script_commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 032e5f407f..5aef7a04f9 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -616,8 +616,8 @@ static void RecordLastUsedMoveByTarget(void) { if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget]) break; - if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] != gLastMoves[gBattlerTarget] // HACK: This redundant condition is a hack to make the asm match. - && BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == MOVE_NONE) + + if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == MOVE_NONE) { BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] = gLastMoves[gBattlerTarget]; break; From 1404cf3330b49e217c317602194e52d9c49bb12b Mon Sep 17 00:00:00 2001 From: Kaz Date: Thu, 17 Sep 2020 18:24:11 -0400 Subject: [PATCH 011/177] field_player_avatar.c: Fix TryInterruptObjectEventSpecialAnim fakematch. --- include/global.fieldmap.h | 13 ++++--------- src/event_object_movement.c | 24 ++++++++++++------------ src/field_player_avatar.c | 10 +++------- src/overworld.c | 34 +++++++++++++++++++--------------- src/trainer_see.c | 12 ++++++------ 5 files changed, 44 insertions(+), 49 deletions(-) diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 4598e87faf..2729d2a205 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -195,15 +195,10 @@ struct ObjectEvent /*0x0C*/ struct Coords16 initialCoords; /*0x10*/ struct Coords16 currentCoords; /*0x14*/ struct Coords16 previousCoords; - /*0x18*/ u8 facingDirection:4; // current direction? - /*0x18*/ u8 movementDirection:4; - /*0x19*/ union __attribute__((packed)) { - u8 as_byte; - struct __attribute__((packed)) { - u8 x:4; - u8 y:4; - } ALIGNED(1) as_nybbles; - } ALIGNED(1) range; + /*0x18*/ u16 facingDirection:4; // current direction? + u16 movementDirection:4; + u16 rangeX:4; + u16 rangeY:4; /*0x1A*/ u8 fieldEffectSpriteId; /*0x1B*/ u8 warpArrowSpriteId; /*0x1C*/ u8 movementActionId; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 0859fb32f9..f97c9bfa00 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1232,8 +1232,8 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, objectEvent->previousCoords.y = y; objectEvent->currentElevation = template->elevation; objectEvent->previousElevation = template->elevation; - objectEvent->range.as_nybbles.x = template->movementRangeX; - objectEvent->range.as_nybbles.y = template->movementRangeY; + objectEvent->rangeX = template->movementRangeX; + objectEvent->rangeY = template->movementRangeY; objectEvent->trainerType = template->trainerType; objectEvent->mapNum = mapNum; //redundant, but needed to match objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId; @@ -1242,13 +1242,13 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, SetObjectEventDynamicGraphicsId(objectEvent); if (gRangedMovementTypes[objectEvent->movementType]) { - if (objectEvent->range.as_nybbles.x == 0) + if (objectEvent->rangeX == 0) { - objectEvent->range.as_nybbles.x++; + objectEvent->rangeX++; } - if (objectEvent->range.as_nybbles.y == 0) + if (objectEvent->rangeY == 0) { - objectEvent->range.as_nybbles.y++; + objectEvent->rangeY++; } } return objectEventId; @@ -4755,19 +4755,19 @@ static bool8 IsCoordOutsideObjectEventMovementRange(struct ObjectEvent *objectEv s16 top; s16 bottom; - if (objectEvent->range.as_nybbles.x != 0) + if (objectEvent->rangeX != 0) { - left = objectEvent->initialCoords.x - objectEvent->range.as_nybbles.x; - right = objectEvent->initialCoords.x + objectEvent->range.as_nybbles.x; + left = objectEvent->initialCoords.x - objectEvent->rangeX; + right = objectEvent->initialCoords.x + objectEvent->rangeX; if (left > x || right < x) { return TRUE; } } - if (objectEvent->range.as_nybbles.y != 0) + if (objectEvent->rangeY != 0) { - top = objectEvent->initialCoords.y - objectEvent->range.as_nybbles.y; - bottom = objectEvent->initialCoords.y + objectEvent->range.as_nybbles.y; + top = objectEvent->initialCoords.y - objectEvent->rangeY; + bottom = objectEvent->initialCoords.y + objectEvent->rangeY; if (top > y || bottom < y) { return TRUE; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index e907af5b9e..a47ee4a93c 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -343,10 +343,6 @@ void PlayerStep(u8 direction, u16 newKeys, u16 heldKeys) static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEvent, u8 direction) { - u8 r5 = direction; - u8 r6 = direction; - r6++; r6--; - if (ObjectEventIsMovementOverridden(playerObjEvent) && !ObjectEventClearHeldMovementIfFinished(playerObjEvent)) { @@ -358,13 +354,13 @@ static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEve return TRUE; } - if (playerObjEvent->movementDirection != r5) + if (playerObjEvent->movementDirection != direction) { ObjectEventClearHeldMovement(playerObjEvent); return FALSE; } - if (!sub_808B028(r6)) + if (!sub_808B028(direction)) { ObjectEventClearHeldMovement(playerObjEvent); return FALSE; @@ -2086,7 +2082,7 @@ static void sub_808D094(u8 taskId) sub_808D074(object->facingDirection); data[1] = 0; data[2] = 1; - data[3] = (u16)(sprite->pos1.y + sprite->pos2.y) * 16; + data[3] = (u16)(sprite->pos1.y + sprite->pos2.y) << 4; sprite->pos2.y = 0; CameraObjectReset2(); object->fixedPriority = TRUE; diff --git a/src/overworld.c b/src/overworld.c index 2d798f2ec7..ee70b3b929 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2909,7 +2909,11 @@ static void ZeroObjectEvent(struct ObjectEvent *objEvent) memset(objEvent, 0, sizeof(struct ObjectEvent)); } -static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4) +#define linkGender(obj) obj->singleMovementActive +// not even one can reference *byte* aligned bitfield members... +#define linkDirection(obj) ((u8*)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX + +static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 gender) { u8 objEventId = GetFirstInactiveObjectEventId(); struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId]; @@ -2924,8 +2928,8 @@ static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4) linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FREE; objEvent->active = 1; - objEvent->singleMovementActive = a4; - objEvent->range.as_byte = 2; + linkGender(objEvent) = gender; + linkDirection(objEvent) = 2; objEvent->spriteId = 64; InitLinkPlayerObjectEventPos(objEvent, x, y); @@ -2948,7 +2952,7 @@ static void sub_80877DC(u8 linkPlayerId, u8 a2) { u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId; struct ObjectEvent *objEvent = &gObjectEvents[objEventId]; - objEvent->range.as_byte = a2; + linkDirection(objEvent) = a2; } } @@ -2983,7 +2987,7 @@ static u8 GetLinkPlayerFacingDirection(u8 linkPlayerId) { u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId; struct ObjectEvent *objEvent = &gObjectEvents[objEventId]; - return objEvent->range.as_byte; + return linkDirection(objEvent); } static u8 GetLinkPlayerElevation(u8 linkPlayerId) @@ -3068,10 +3072,10 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer { s16 x, y; - objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte); - ObjectEventMoveDestCoords(objEvent, objEvent->range.as_byte, &x, &y); + linkDirection(objEvent) = FlipVerticalAndClearForced(a3, linkDirection(objEvent)); + ObjectEventMoveDestCoords(objEvent, linkDirection(objEvent), &x, &y); - if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, objEvent->range.as_byte, x, y)) + if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, linkDirection(objEvent), x, y)) { return FALSE; } @@ -3086,7 +3090,7 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer static bool8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3) { - objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte); + linkDirection(objEvent) = FlipVerticalAndClearForced(a3, linkDirection(objEvent)); return FALSE; } @@ -3100,7 +3104,7 @@ static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerObjectEvent { objEvent->directionSequenceIndex--; linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FROZEN; - MoveCoords(objEvent->range.as_byte, &objEvent->initialCoords.x, &objEvent->initialCoords.y); + MoveCoords(linkDirection(objEvent), &objEvent->initialCoords.x, &objEvent->initialCoords.y); if (!objEvent->directionSequenceIndex) { ShiftStillObjectEventCoords(objEvent); @@ -3161,14 +3165,14 @@ static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion) { case VERSION_FIRE_RED: case VERSION_LEAF_GREEN: - objEvent->spriteId = AddPseudoObjectEvent(GetFRLGAvatarGraphicsIdByGender(objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0); + objEvent->spriteId = AddPseudoObjectEvent(GetFRLGAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); break; case VERSION_RUBY: case VERSION_SAPPHIRE: - objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0); + objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); break; case VERSION_EMERALD: - objEvent->spriteId = AddPseudoObjectEvent(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0); + objEvent->spriteId = AddPseudoObjectEvent(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); break; } @@ -3189,9 +3193,9 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation); if (linkPlayerObjEvent->movementMode == MOVEMENT_MODE_FREE) - StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte)); + StartSpriteAnim(sprite, GetFaceDirectionAnimNum(linkDirection(objEvent))); else - StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte)); + StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(linkDirection(objEvent))); UpdateObjectEventSpriteVisibility(sprite, 0); if (objEvent->triggerGroundEffectsOnMove) diff --git a/src/trainer_see.c b/src/trainer_see.c index c37f372627..f2024e37c8 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -377,15 +377,15 @@ static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 ap } // preserve mapobj_unk_19 before clearing. - unk19_temp = trainerObj->range.as_nybbles.x; - unk19b_temp = trainerObj->range.as_nybbles.y; - trainerObj->range.as_nybbles.x = 0; - trainerObj->range.as_nybbles.y = 0; + unk19_temp = trainerObj->rangeX; + unk19b_temp = trainerObj->rangeY; + trainerObj->rangeX = 0; + trainerObj->rangeY = 0; collision = GetCollisionAtCoords(trainerObj, x, y, direction); - trainerObj->range.as_nybbles.x = unk19_temp; - trainerObj->range.as_nybbles.y = unk19b_temp; + trainerObj->rangeX = unk19_temp; + trainerObj->rangeY = unk19b_temp; if (collision == 4) return approachDistance; From 847878eae9a9f0ac4a722c27c1cdf1a2d3ff1d67 Mon Sep 17 00:00:00 2001 From: Kaz Date: Sat, 19 Sep 2020 13:37:24 -0400 Subject: [PATCH 012/177] battle_gfx_sfx_util.c: Very annoying fakematch fix. daycare.c: -g eliminates the need for the brace hack. battle_transition.c: Fix Phase2_Ripple_Func2...? --- include/battle.h | 6 +++++- src/battle_anim_effects_3.c | 2 +- src/battle_gfx_sfx_util.c | 42 +++++++++++++++++------------------- src/battle_intro.c | 4 ++-- src/battle_main.c | 2 +- src/battle_transition.c | 5 +---- src/contest.c | 4 ++-- src/contest_painting.c | 8 +++---- src/contest_util.c | 8 +++---- src/daycare.c | 3 --- src/egg_hatch.c | 2 +- src/evolution_scene.c | 10 ++++----- src/pokeblock_feed.c | 2 +- src/pokemon.c | 4 ++-- src/pokemon_summary_screen.c | 8 +++---- src/trade.c | 8 +++---- 16 files changed, 57 insertions(+), 61 deletions(-) diff --git a/include/battle.h b/include/battle.h index 5a04c1eec6..0f7a262ce8 100644 --- a/include/battle.h +++ b/include/battle.h @@ -584,7 +584,11 @@ struct BattleSpriteData struct MonSpritesGfx { void* firstDecompressed; // ptr to the decompressed sprite of the first pokemon - void* sprites[4]; + union + { + void* ptr[4]; + u8* byte[4]; + } sprites; struct SpriteTemplate templates[4]; struct SpriteFrameImage field_74[4][4]; u8 field_F4[0x80]; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 58d3351975..4ba2ad1f1b 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -2291,7 +2291,7 @@ void AnimTask_TransformMon(u8 taskId) else position = GetBattlerPosition(gBattleAnimAttacker); - src = gMonSpritesGfxPtr->sprites[position] + (gBattleMonForms[gBattleAnimAttacker] << 11); + src = gMonSpritesGfxPtr->sprites.ptr[position] + (gBattleMonForms[gBattleAnimAttacker] << 11); dest = animBg.bgTiles; CpuCopy32(src, dest, 0x800); LoadBgTiles(1, animBg.bgTiles, 0x800, animBg.tilesOffset); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index e3e63f0e84..58b5d82286 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -6,6 +6,7 @@ #include "constants/battle_anim.h" #include "battle_interface.h" #include "main.h" +#include "dma3.h" #include "malloc.h" #include "graphics.h" #include "random.h" @@ -568,7 +569,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) otId = GetMonData(mon, MON_DATA_OT_ID); position = GetBattlerPosition(battlerId); HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], species, currentPersonality); paletteOffset = 0x100 + battlerId * 16; @@ -624,13 +625,13 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (sub_80688F8(1, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) { HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], species, currentPersonality); } else { HandleLoadSpecialPokePic(&gMonBackPicTable[species], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], species, currentPersonality); } @@ -672,7 +673,7 @@ void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId) { u8 position = GetBattlerPosition(battlerId); DecompressPicFromTable_2(&gTrainerFrontPicTable[frontPicId], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], SPECIES_NONE); LoadCompressedSpritePalette(&gTrainerFrontPicPaletteTable[frontPicId]); } @@ -681,7 +682,7 @@ void DecompressTrainerBackPic(u16 backPicId, u8 battlerId) { u8 position = GetBattlerPosition(battlerId); DecompressPicFromTable_2(&gTrainerBackPicTable[backPicId], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], SPECIES_NONE); LoadCompressedPalette(gTrainerBackPicPaletteTable[backPicId].data, 0x100 + 16 * battlerId, 0x20); @@ -921,7 +922,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform otId = gContestResources->moveAnim->otId; HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies], - gMonSpritesGfxPtr->sprites[0], + gMonSpritesGfxPtr->sprites.ptr[0], targetSpecies, gContestResources->moveAnim->targetPersonality); } @@ -940,7 +941,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], targetSpecies, gTransformedPersonalities[battlerAtk]); } @@ -950,13 +951,13 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[targetSpecies], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], targetSpecies, gTransformedPersonalities[battlerAtk]); } } - src = gMonSpritesGfxPtr->sprites[position]; + src = gMonSpritesGfxPtr->sprites.ptr[position]; dst = (void *)(OBJ_VRAM0 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32); DmaCopy32(3, src, dst, 0x800); paletteOffset = 0x100 + battlerAtk * 16; @@ -997,18 +998,15 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) position = GetBattlerPosition(battlerId); if (IsContest()) - LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]); + LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites.ptr[position]); else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - LZDecompressVram(gSubstituteDollGfx, gMonSpritesGfxPtr->sprites[position]); + LZDecompressVram(gSubstituteDollGfx, gMonSpritesGfxPtr->sprites.ptr[position]); else - LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]); + LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites.ptr[position]); for (i = 1; i < 4; i++) { - u8 (*ptr)[4][0x800] = gMonSpritesGfxPtr->sprites[position]; - ptr++;ptr--; // Needed to match. - - DmaCopy32Defvars(3, (*ptr)[0], (*ptr)[i], 0x800); + Dma3CopyLarge32_(gMonSpritesGfxPtr->sprites.ptr[position], &gMonSpritesGfxPtr->sprites.byte[position][0x800 * i], 0x800); } palOffset = (battlerId * 16) + 0x100; @@ -1245,12 +1243,12 @@ void AllocateMonSpritesGfx(void) for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - gMonSpritesGfxPtr->sprites[i] = gMonSpritesGfxPtr->firstDecompressed + (i * 0x2000); + gMonSpritesGfxPtr->sprites.ptr[i] = gMonSpritesGfxPtr->firstDecompressed + (i * 0x2000); *(gMonSpritesGfxPtr->templates + i) = gUnknown_08329D98[i]; for (j = 0; j < 4; j++) { - gMonSpritesGfxPtr->field_74[i][j].data = gMonSpritesGfxPtr->sprites[i] + (j * 0x800); + gMonSpritesGfxPtr->field_74[i][j].data = gMonSpritesGfxPtr->sprites.ptr[i] + (j * 0x800); gMonSpritesGfxPtr->field_74[i][j].size = 0x800; } @@ -1272,10 +1270,10 @@ void FreeMonSpritesGfx(void) FREE_AND_SET_NULL(gMonSpritesGfxPtr->barFontGfx); FREE_AND_SET_NULL(gMonSpritesGfxPtr->firstDecompressed); - gMonSpritesGfxPtr->sprites[0] = NULL; - gMonSpritesGfxPtr->sprites[1] = NULL; - gMonSpritesGfxPtr->sprites[2] = NULL; - gMonSpritesGfxPtr->sprites[3] = NULL; + gMonSpritesGfxPtr->sprites.ptr[0] = NULL; + gMonSpritesGfxPtr->sprites.ptr[1] = NULL; + gMonSpritesGfxPtr->sprites.ptr[2] = NULL; + gMonSpritesGfxPtr->sprites.ptr[3] = NULL; FREE_AND_SET_NULL(gMonSpritesGfxPtr); } diff --git a/src/battle_intro.c b/src/battle_intro.c index 6964428a35..36ff325f51 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -586,7 +586,7 @@ void sub_8118FBC(int bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *ar int i, j; u8 battler = GetBattlerAtPosition(battlerPosition); int offset = tilesOffset; - CpuCopy16(gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], arg5, BG_SCREEN_SIZE); + CpuCopy16(gMonSpritesGfxPtr->sprites.ptr[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], arg5, BG_SCREEN_SIZE); LoadBgTiles(bgId, arg5, 0x1000, tilesOffset); for (i = arg2; i < arg2 + 8; i++) { @@ -604,7 +604,7 @@ void unref_sub_8119094(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u { int i, j, offset; - DmaCopy16(3, gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE); + DmaCopy16(3, gMonSpritesGfxPtr->sprites.ptr[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE); offset = (arg5 >> 5) - (arg7 << 9); for (i = arg1; i < arg1 + 8; i++) { diff --git a/src/battle_main.c b/src/battle_main.c index bf0fdc1aad..f0fedbd134 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -2762,7 +2762,7 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite) } else // Erase bottom part of the sprite to create a smooth illusion of mon falling down. { - u8 *dst = (u8 *)gMonSpritesGfxPtr->sprites[GetBattlerPosition(sprite->sBattler)] + (gBattleMonForms[sprite->sBattler] << 11) + (sprite->data[3] << 8); + u8* dst = gMonSpritesGfxPtr->sprites.byte[GetBattlerPosition(sprite->sBattler)] + (gBattleMonForms[sprite->sBattler] << 11) + (sprite->data[3] << 8); for (i = 0; i < 0x100; i++) *(dst++) = 0; diff --git a/src/battle_transition.c b/src/battle_transition.c index 4a9d263031..43a90ac98c 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1956,10 +1956,7 @@ static bool8 Phase2_Ripple_Func2(struct Task *task) for (i = 0; i < 160; i++, r4 += r8) { s16 var = r4 >> 8; - - var++; - var--; - gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3); + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var & 0xffff, r3); } if (++task->tData3 == 81) diff --git a/src/contest.c b/src/contest.c index 612d79562d..61a159bc49 100644 --- a/src/contest.c +++ b/src/contest.c @@ -3119,9 +3119,9 @@ static u8 CreateContestantSprite(u16 species, u32 otId, u32 personality, u32 ind species = SanitizeSpecies(species); if (index == gContestPlayerMonIndex) - HandleLoadSpecialPokePic_2(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[0], species, personality); + HandleLoadSpecialPokePic_2(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites.ptr[0], species, personality); else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[0], species, personality); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites.ptr[0], species, personality); LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20); SetMultiuseSpriteTemplateToPokemon(species, 0); diff --git a/src/contest_painting.c b/src/contest_painting.c index ceef8a9021..e903edbbbe 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -368,19 +368,19 @@ static void InitContestMonPixels(u16 species, u8 whichSprite) { HandleLoadSpecialPokePic_DontHandleDeoxys( &gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites[1], + gMonSpritesGfxPtr->sprites.ptr[1], species, gContestPaintingWinner->personality); - _InitContestMonPixels(gMonSpritesGfxPtr->sprites[1], gContestPaintingMonPalette, (void *)gContestMonPixels); + _InitContestMonPixels(gMonSpritesGfxPtr->sprites.ptr[1], gContestPaintingMonPalette, (void *)gContestMonPixels); } else { HandleLoadSpecialPokePic_DontHandleDeoxys( &gMonBackPicTable[species], - gMonSpritesGfxPtr->sprites[0], + gMonSpritesGfxPtr->sprites.ptr[0], species, gContestPaintingWinner->personality); - _InitContestMonPixels(gMonSpritesGfxPtr->sprites[0], gContestPaintingMonPalette, (void *)gContestMonPixels); + _InitContestMonPixels(gMonSpritesGfxPtr->sprites.ptr[0], gContestPaintingMonPalette, (void *)gContestMonPixels); } } diff --git a/src/contest_util.c b/src/contest_util.c index ae76eda6b4..dbc1e28ed6 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -880,7 +880,7 @@ static void Task_ShowWinnerMonBanner(u8 taskId) { HandleLoadSpecialPokePic_2( &gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites[1], + gMonSpritesGfxPtr->sprites.ptr[1], species, personality); } @@ -888,7 +888,7 @@ static void Task_ShowWinnerMonBanner(u8 taskId) { HandleLoadSpecialPokePic_DontHandleDeoxys( &gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites[1], + gMonSpritesGfxPtr->sprites.ptr[1], species, personality); } @@ -2552,9 +2552,9 @@ void ShowContestEntryMonPic(void) gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = species; if (gSpecialVar_0x8006 == gContestPlayerMonIndex) - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[1], species, personality); else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[1], species, personality); palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); LoadCompressedSpritePalette(palette); diff --git a/src/daycare.c b/src/daycare.c index 69043a5139..1490d37427 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -615,10 +615,7 @@ static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) { if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET) - { - // TODO: the curly braces around this if statement are required for a matching build. break; - } eggMoves[i] = gEggMoves[eggMoveIdx + i]; numEggMoves++; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 87f0a13fd5..f90441b68b 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -434,7 +434,7 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], + gMonSpritesGfxPtr->sprites.ptr [(a0 * 2) + 1], species, pid); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); *speciesLoc = species; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 61065367cc..faa6195b0a 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -256,7 +256,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, trainerId = GetMonData(mon, MON_DATA_OT_ID); personality = GetMonData(mon, MON_DATA_PERSONALITY); DecompressPicFromTable_2(&gMonFrontPicTable[currSpecies], - gMonSpritesGfxPtr->sprites[1], + gMonSpritesGfxPtr->sprites.ptr[1], currSpecies); pokePal = GetMonSpritePalStructFromOtIdPersonality(currSpecies, trainerId, personality); LoadCompressedPalette(pokePal->data, 0x110, 0x20); @@ -271,7 +271,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, // postEvo sprite DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve], - gMonSpritesGfxPtr->sprites[3], + gMonSpritesGfxPtr->sprites.ptr[3], speciesToEvolve); pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality); LoadCompressedPalette(pokePal->data, 0x120, 0x20); @@ -348,7 +348,7 @@ static void CB2_EvolutionSceneLoadGraphics(void) gReservedSpritePaletteCount = 4; DecompressPicFromTable_2(&gMonFrontPicTable[postEvoSpecies], - gMonSpritesGfxPtr->sprites[3], + gMonSpritesGfxPtr->sprites.ptr[3], postEvoSpecies); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); @@ -420,7 +420,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) u32 trainerId = GetMonData(Mon, MON_DATA_OT_ID); u32 personality = GetMonData(Mon, MON_DATA_PERSONALITY); DecompressPicFromTable_2(&gMonFrontPicTable[postEvoSpecies], - gMonSpritesGfxPtr->sprites[3], + gMonSpritesGfxPtr->sprites.ptr[3], postEvoSpecies); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); LoadCompressedPalette(pokePal->data, 0x120, 0x20); @@ -484,7 +484,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri sEvoStructPtr->preEvoSpriteID = preEvoSpriteID; DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve], - gMonSpritesGfxPtr->sprites[1], + gMonSpritesGfxPtr->sprites.ptr[1], speciesToEvolve); pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality); diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 797771f800..32db6c717e 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -646,7 +646,7 @@ static bool8 LoadMonAndSceneGfx(struct Pokemon *mon) case 0: species = GetMonData(mon, MON_DATA_SPECIES2); personality = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[1], species, personality); sPokeblockFeed->loadGfxState++; break; case 1: diff --git a/src/pokemon.c b/src/pokemon.c index a0e655d1e6..72fb4984c8 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5591,8 +5591,8 @@ u16 SpeciesToCryId(u16 species) void sub_806D544(u16 species, u32 personality, u8 *dest) { if (species == SPECIES_SPINDA - && dest != gMonSpritesGfxPtr->sprites[0] - && dest != gMonSpritesGfxPtr->sprites[2]) + && dest != gMonSpritesGfxPtr->sprites.ptr[0] + && dest != gMonSpritesGfxPtr->sprites.ptr[2]) { int i; for (i = 0; i < 4; i++) diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index bfd849229d..805f695424 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -3859,18 +3859,18 @@ static u8 LoadMonGfxAndSprite(struct Pokemon *mon, s16 *state) if (gMain.inBattle) { if (sub_80688F8(3, sMonSummaryScreen->curMonIndex)) - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); else - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); } else { if (gMonSpritesGfxPtr != NULL) { if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == PSS_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE) - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); } else { diff --git a/src/trade.c b/src/trade.c index 17aaba565a..f48e453a8a 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2725,9 +2725,9 @@ static void LoadTradeMonPic(u8 whichParty, u8 state) personality = GetMonData(mon, MON_DATA_PERSONALITY); if (whichParty == TRADE_PLAYER) - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[1], species, personality); else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[whichParty * 2 + 1], species, personality); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); sTradeData->monSpecies[whichParty] = species; @@ -3660,7 +3660,7 @@ static bool8 AnimateTradeSequenceCable(void) case 65: if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) { - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites.ptr[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); sTradeData->state++; } break; @@ -4175,7 +4175,7 @@ static bool8 AnimateTradeSequenceWireless(void) case 65: if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) { - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites.ptr[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); sTradeData->state++; } break; From 94711208a2088ec739f04a6bd78a983a76e7ec2e Mon Sep 17 00:00:00 2001 From: Kaz Date: Sat, 19 Sep 2020 17:38:54 -0400 Subject: [PATCH 013/177] menu_specialized.c: Fix fakematches. --- src/menu_specialized.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/src/menu_specialized.c b/src/menu_specialized.c index f9da20e119..495f9aa10b 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -881,34 +881,31 @@ s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst) // Gets the name/gender/level string for the condition menu static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId) { - u16 species, level, gender; + u16 box, mon, species, level, gender; struct BoxPokemon *boxMon; u8 *str; + box = boxId; + mon = monId; *(dst++) = EXT_CTRL_CODE_BEGIN; *(dst++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; *(dst++) = TEXT_COLOR_BLUE; *(dst++) = TEXT_COLOR_TRANSPARENT; *(dst++) = TEXT_COLOR_LIGHT_BLUE; - if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) - { + if (GetBoxOrPartyMonData(box, mon, MON_DATA_IS_EGG, NULL)) return StringCopyPadded(dst, gText_EggNickname, 0, 12); - } - GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst); + GetBoxOrPartyMonData(box, mon, MON_DATA_NICKNAME, dst); StringGetEnd10(dst); - species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); - if (boxId == TOTAL_BOXES_COUNT) // Party mon. + species = GetBoxOrPartyMonData(box, mon, MON_DATA_SPECIES, NULL); + if (box == TOTAL_BOXES_COUNT) // Party mon. { - level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - gender = GetMonGender(&gPlayerParty[monId]); + level = GetMonData(&gPlayerParty[mon], MON_DATA_LEVEL); + gender = GetMonGender(&gPlayerParty[mon]); } else { - // Needed to match, feel free to remove. - boxId++, boxId--; - monId++, monId--; + boxMon = GetBoxedMonPtr(box, mon); - boxMon = GetBoxedMonPtr(boxId, monId); gender = GetBoxMonGender(boxMon); level = GetLevelFromBoxMonExp(boxMon); } @@ -981,6 +978,8 @@ static u8 *BufferConditionMenuSpacedStringN(u8 *dst, const u8 *src, s16 n) void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel) { u16 i; + u16 box = boxId; + u16 mon = monId; // In this and the below 2 functions, numMons is passed as the number of menu selections (which includes Cancel) // To indicate that the Cancel needs to be subtracted they pass an additional bool @@ -990,21 +989,16 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId if (partyId != numMons) { - GetConditionMenuMonString(nameDst, boxId, monId); + GetConditionMenuMonString(nameDst, box, mon); locationDst[0] = EXT_CTRL_CODE_BEGIN; locationDst[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; locationDst[2] = TEXT_COLOR_BLUE; locationDst[3] = TEXT_COLOR_TRANSPARENT; locationDst[4] = TEXT_COLOR_LIGHT_BLUE; - if (boxId == TOTAL_BOXES_COUNT) // Party mon. - { + if (box == TOTAL_BOXES_COUNT) // Party mon. BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, 8); - } else - { - boxId++;boxId--; // Again...Someone fix this maybe? - BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(boxId), 8); - } + BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(box), 8); } else { From 32ae13f9b66ab1b01146e5746e9350f97f055526 Mon Sep 17 00:00:00 2001 From: Kaz Date: Sat, 19 Sep 2020 19:03:07 -0400 Subject: [PATCH 014/177] walda_phrase.c: Proper sub_81D9C90 match GET. --- src/walda_phrase.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/walda_phrase.c b/src/walda_phrase.c index 2b11add769..c9c7809d3b 100644 --- a/src/walda_phrase.c +++ b/src/walda_phrase.c @@ -173,14 +173,12 @@ static void sub_81D9C90(u8 *array, s32 arg1, s32 arg2) { var1 = (array[0] & 0x80) >> 7; - var1++; var1--; // needed to match - for (j = arg1 - 1; j >= 0; j--) { - var2 = array[j] & 0x80; + var2 = (array[j] & 0x80) >> 7; array[j] <<= 1; array[j] |= var1; - var1 = var2 >> 7; + var1 = var2; } } } From 04bf1d433a8c4bc04a0a2337d8f2ede6d07e2f43 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Wed, 23 Sep 2020 22:31:12 -0400 Subject: [PATCH 015/177] one more instrument oops just found this one --- sound/direct_sound_data.inc | 4 ++-- .../{unknown_taiko.aif => sc88pro_taiko.aif} | Bin sound/voicegroups/voicegroup003.inc | 6 +++--- sound/voicegroups/voicegroup004.inc | 6 +++--- sound/voicegroups/voicegroup129.inc | 2 +- sound/voicegroups/voicegroup177.inc | 2 +- sound/voicegroups/voicegroup190.inc | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) rename sound/direct_sound_samples/{unknown_taiko.aif => sc88pro_taiko.aif} (100%) diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index 34410f1e16..508e6a6c44 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -143,8 +143,8 @@ DirectSoundWaveData_ethnic_flavours_atarigane:: .incbin "sound/direct_sound_samples/ethnic_flavours_atarigane.bin" .align 2 -DirectSoundWaveData_unknown_taiko:: - .incbin "sound/direct_sound_samples/unknown_taiko.bin" +DirectSoundWaveData_sc88pro_taiko:: + .incbin "sound/direct_sound_samples/sc88pro_taiko.bin" .align 2 DirectSoundWaveData_ethnic_flavours_kotsuzumi:: diff --git a/sound/direct_sound_samples/unknown_taiko.aif b/sound/direct_sound_samples/sc88pro_taiko.aif similarity index 100% rename from sound/direct_sound_samples/unknown_taiko.aif rename to sound/direct_sound_samples/sc88pro_taiko.aif diff --git a/sound/voicegroups/voicegroup003.inc b/sound/voicegroups/voicegroup003.inc index 2ba0592d5e..cef9cb5776 100644 --- a/sound/voicegroups/voicegroup003.inc +++ b/sound/voicegroups/voicegroup003.inc @@ -33,10 +33,10 @@ voicegroup003:: @ 86763D0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 8676538 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 8676544 voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 @ 8676550 - voice_directsound 63, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 867655C + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 867655C voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 8676568 voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 8676574 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 8676580 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 8676580 voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 @ 867658C voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 @ 8676598 voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 @ 86765A4 @@ -50,7 +50,7 @@ voicegroup003:: @ 86763D0 voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 @ 8676604 voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 @ 8676610 voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 @ 867661C - voice_directsound 64, 104, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 235 @ 8676628 + voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 @ 8676628 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 8676634 voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 @ 8676640 voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 @ 867664C diff --git a/sound/voicegroups/voicegroup004.inc b/sound/voicegroups/voicegroup004.inc index c0c8e54d0a..367aafa155 100644 --- a/sound/voicegroups/voicegroup004.inc +++ b/sound/voicegroups/voicegroup004.inc @@ -33,7 +33,7 @@ voicegroup004:: @ 8676658 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86767C0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86767CC voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 @ 86767D8 - voice_directsound 63, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 86767E4 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 86767E4 voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 86767F0 voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 86767FC voice_directsound 62, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 @ 8676808 @@ -50,7 +50,7 @@ voicegroup004:: @ 8676658 voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 @ 867688C voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 @ 8676898 voice_directsound 56, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 @ 86768A4 - voice_directsound 64, 104, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 235 @ 86768B0 + voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 @ 86768B0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86768BC voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 @ 86768C8 voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 @ 86768D4 @@ -87,7 +87,7 @@ voicegroup004:: @ 8676658 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 8676A48 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 8676A54 voice_directsound 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 @ 8676A60 - voice_directsound 63, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 8676A6C + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 8676A6C voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 8676A78 voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 8676A84 diff --git a/sound/voicegroups/voicegroup129.inc b/sound/voicegroups/voicegroup129.inc index 224329a48b..3c3ce90c67 100644 --- a/sound/voicegroups/voicegroup129.inc +++ b/sound/voicegroups/voicegroup129.inc @@ -116,7 +116,7 @@ voicegroup129:: @ 86A0154 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86A06A0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86A06AC voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86A06B8 - voice_directsound 60, 0, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 86A06C4 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 86A06C4 voice_directsound 60, 0, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 @ 86A06D0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86A06DC voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86A06E8 diff --git a/sound/voicegroups/voicegroup177.inc b/sound/voicegroups/voicegroup177.inc index 266e28278d..6d43470b8a 100644 --- a/sound/voicegroups/voicegroup177.inc +++ b/sound/voicegroups/voicegroup177.inc @@ -87,7 +87,7 @@ voicegroup177:: @ 86B0378 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86B0768 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86B0774 voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 @ 86B0780 - voice_directsound 63, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 86B078C + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 86B078C voice_directsound 50, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 86B0798 voice_directsound 64, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 86B07A4 diff --git a/sound/voicegroups/voicegroup190.inc b/sound/voicegroups/voicegroup190.inc index 02b185c938..9dc83deed2 100644 --- a/sound/voicegroups/voicegroup190.inc +++ b/sound/voicegroups/voicegroup190.inc @@ -87,4 +87,4 @@ voicegroup190:: @ 86B429C voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86B468C voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86B4698 voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 @ 86B46A4 - voice_directsound 63, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 86B46B0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 86B46B0 From 66bd1e6d3f8ddc96b9a8be7d73ff084031072292 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 25 Sep 2020 11:18:52 -0400 Subject: [PATCH 016/177] Use constants for item digits --- include/constants/items.h | 4 ++++ src/item_menu.c | 14 +++++++------- src/shop.c | 6 +++--- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/include/constants/items.h b/include/constants/items.h index 9496a4c61e..95c6aacfea 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -497,6 +497,10 @@ #define MAX_PC_ITEM_CAPACITY 999 #define MAX_BERRY_CAPACITY 999 +#define BAG_ITEM_CAPACITY_DIGITS 2 +#define BERRY_CAPACITY_DIGITS 3 +#define MAX_ITEM_DIGITS BERRY_CAPACITY_DIGITS + // Secondary IDs for rods #define OLD_ROD 0 #define GOOD_ROD 1 diff --git a/src/item_menu.c b/src/item_menu.c index d40c3a12c7..d5e50fc2da 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -919,14 +919,14 @@ void BagMenu_ItemPrintCallback(u8 windowId, s32 itemIndex, u8 y) if (gBagPositionStruct.pocket == BERRIES_POCKET) { - ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, BERRY_CAPACITY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); offset = GetStringRightAlignXOffset(7, gStringVar4, 119); BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, -1, 0); } else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && ItemId_GetImportance(itemId) == FALSE) { - ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, BAG_ITEM_CAPACITY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); offset = GetStringRightAlignXOffset(7, gStringVar4, 119); BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, -1, 0); @@ -1133,7 +1133,7 @@ void sub_81ABC3C(u8 a) void PrintItemDepositAmount(u8 windowId, s16 numDeposited) { - u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; + u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS; ConvertIntToDecimalStringN(gStringVar1, numDeposited, STR_CONV_MODE_LEADING_ZEROS, numDigits); StringExpandPlaceholders(gStringVar4, gText_xVar1); AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0); @@ -1141,7 +1141,7 @@ void PrintItemDepositAmount(u8 windowId, s16 numDeposited) void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned) { - u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; + u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS; ConvertIntToDecimalStringN(gStringVar1, numSold, STR_CONV_MODE_LEADING_ZEROS, numDigits); StringExpandPlaceholders(gStringVar4, gText_xVar1); AddTextPrinterParameterized(windowId, 1, gStringVar4, 0, 1, -1, 0); @@ -1761,7 +1761,7 @@ void BagMenu_TossItems(u8 taskId) s16* data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems); FillWindowPixelBuffer(1, PIXEL_FILL(0)); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); @@ -1804,7 +1804,7 @@ void BagMenu_ConfirmToss(u8 taskId) s16* data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s); FillWindowPixelBuffer(1, PIXEL_FILL(0)); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); @@ -2172,7 +2172,7 @@ static void BagMenu_TryDepositItem(u8 taskId) else if (AddPCItem(gSpecialVar_ItemId, tItemCount) == TRUE) { CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_DepositedVar2Var1s); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); gTasks[taskId].func = Task_ActuallyToss; diff --git a/src/shop.c b/src/shop.c index 6e2e82a521..44ab0885ce 100755 --- a/src/shop.c +++ b/src/shop.c @@ -984,7 +984,7 @@ static void Task_BuyHowManyDialogueInit(u8 taskId) u16 maxQuantity; DrawStdFrameWithCustomTileAndPalette(3, FALSE, 1, 13); - ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, MAX_ITEM_DIGITS + 1); StringExpandPlaceholders(gStringVar4, gText_InBagVar1); BuyMenuPrint(3, gStringVar4, 0, 1, 0, 0); tItemCount = 1; @@ -1026,7 +1026,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) ClearWindowTilemap(3); PutWindowTilemap(1); CopyItemName(tItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, BAG_ITEM_CAPACITY_DIGITS); ConvertIntToDecimalStringN(gStringVar3, gShopDataPtr->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6); BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, BuyMenuConfirmPurchase); } @@ -1148,7 +1148,7 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) FillWindowPixelBuffer(4, PIXEL_FILL(1)); PrintMoneyAmount(4, 38, 1, gShopDataPtr->totalCost, TEXT_SPEED_FF); - ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, BAG_ITEM_CAPACITY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); BuyMenuPrint(4, gStringVar4, 0, 1, 0, 0); } From e7340ca0e1dc095d72a83416fc3f78673b876c1c Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Fri, 25 Sep 2020 13:25:36 -0500 Subject: [PATCH 017/177] Add byte comments to script command table --- data/script_cmd_table.inc | 454 +++++++++++++++++++------------------- 1 file changed, 227 insertions(+), 227 deletions(-) diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 2cde7190fe..9712da8937 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -1,232 +1,232 @@ .align 2 gScriptCmdTable:: @ 81DB67C - .4byte ScrCmd_nop - .4byte ScrCmd_nop1 - .4byte ScrCmd_end - .4byte ScrCmd_return - .4byte ScrCmd_call - .4byte ScrCmd_goto - .4byte ScrCmd_goto_if - .4byte ScrCmd_call_if - .4byte ScrCmd_gotostd - .4byte ScrCmd_callstd - .4byte ScrCmd_gotostd_if - .4byte ScrCmd_callstd_if - .4byte ScrCmd_returnram - .4byte ScrCmd_killscript - .4byte ScrCmd_setmysteryeventstatus - .4byte ScrCmd_loadword - .4byte ScrCmd_loadbyte - .4byte ScrCmd_writebytetoaddr - .4byte ScrCmd_loadbytefromaddr - .4byte ScrCmd_setptrbyte - .4byte ScrCmd_copylocal - .4byte ScrCmd_copybyte - .4byte ScrCmd_setvar - .4byte ScrCmd_addvar - .4byte ScrCmd_subvar - .4byte ScrCmd_copyvar - .4byte ScrCmd_setorcopyvar - .4byte ScrCmd_compare_local_to_local - .4byte ScrCmd_compare_local_to_value - .4byte ScrCmd_compare_local_to_addr - .4byte ScrCmd_compare_addr_to_local - .4byte ScrCmd_compare_addr_to_value - .4byte ScrCmd_compare_addr_to_addr - .4byte ScrCmd_compare_var_to_value - .4byte ScrCmd_compare_var_to_var - .4byte ScrCmd_callnative - .4byte ScrCmd_gotonative - .4byte ScrCmd_special - .4byte ScrCmd_specialvar - .4byte ScrCmd_waitstate - .4byte ScrCmd_delay - .4byte ScrCmd_setflag - .4byte ScrCmd_clearflag - .4byte ScrCmd_checkflag - .4byte ScrCmd_initclock - .4byte ScrCmd_dotimebasedevents - .4byte ScrCmd_gettime - .4byte ScrCmd_playse - .4byte ScrCmd_waitse - .4byte ScrCmd_playfanfare - .4byte ScrCmd_waitfanfare - .4byte ScrCmd_playbgm - .4byte ScrCmd_savebgm - .4byte ScrCmd_fadedefaultbgm - .4byte ScrCmd_fadenewbgm - .4byte ScrCmd_fadeoutbgm - .4byte ScrCmd_fadeinbgm - .4byte ScrCmd_warp - .4byte ScrCmd_warpsilent - .4byte ScrCmd_warpdoor - .4byte ScrCmd_warphole - .4byte ScrCmd_warpteleport - .4byte ScrCmd_setwarp - .4byte ScrCmd_setdynamicwarp - .4byte ScrCmd_setdivewarp - .4byte ScrCmd_setholewarp - .4byte ScrCmd_getplayerxy - .4byte ScrCmd_getpartysize - .4byte ScrCmd_additem - .4byte ScrCmd_removeitem - .4byte ScrCmd_checkitemspace - .4byte ScrCmd_checkitem - .4byte ScrCmd_checkitemtype - .4byte ScrCmd_addpcitem - .4byte ScrCmd_checkpcitem - .4byte ScrCmd_adddecoration - .4byte ScrCmd_removedecoration - .4byte ScrCmd_checkdecor - .4byte ScrCmd_checkdecorspace - .4byte ScrCmd_applymovement - .4byte ScrCmd_applymovement_at - .4byte ScrCmd_waitmovement - .4byte ScrCmd_waitmovement_at - .4byte ScrCmd_removeobject - .4byte ScrCmd_removeobject_at - .4byte ScrCmd_addobject - .4byte ScrCmd_addobject_at - .4byte ScrCmd_setobjectxy - .4byte ScrCmd_showobject_at - .4byte ScrCmd_hideobject_at - .4byte ScrCmd_faceplayer - .4byte ScrCmd_turnobject - .4byte ScrCmd_trainerbattle - .4byte ScrCmd_dotrainerbattle - .4byte ScrCmd_gotopostbattlescript - .4byte ScrCmd_gotobeatenscript - .4byte ScrCmd_checktrainerflag - .4byte ScrCmd_settrainerflag - .4byte ScrCmd_cleartrainerflag - .4byte ScrCmd_setobjectxyperm - .4byte ScrCmd_copyobjectxytoperm - .4byte ScrCmd_setobjectmovementtype - .4byte ScrCmd_waitmessage - .4byte ScrCmd_message - .4byte ScrCmd_closemessage - .4byte ScrCmd_lockall - .4byte ScrCmd_lock - .4byte ScrCmd_releaseall - .4byte ScrCmd_release - .4byte ScrCmd_waitbuttonpress - .4byte ScrCmd_yesnobox - .4byte ScrCmd_multichoice - .4byte ScrCmd_multichoicedefault - .4byte ScrCmd_multichoicegrid - .4byte ScrCmd_drawbox - .4byte ScrCmd_erasebox - .4byte ScrCmd_drawboxtext - .4byte ScrCmd_showmonpic - .4byte ScrCmd_hidemonpic - .4byte ScrCmd_showcontestwinner - .4byte ScrCmd_braillemessage - .4byte ScrCmd_givemon - .4byte ScrCmd_giveegg - .4byte ScrCmd_setmonmove - .4byte ScrCmd_checkpartymove - .4byte ScrCmd_bufferspeciesname - .4byte ScrCmd_bufferleadmonspeciesname - .4byte ScrCmd_bufferpartymonnick - .4byte ScrCmd_bufferitemname - .4byte ScrCmd_bufferdecorationname - .4byte ScrCmd_buffermovename - .4byte ScrCmd_buffernumberstring - .4byte ScrCmd_bufferstdstring - .4byte ScrCmd_bufferstring - .4byte ScrCmd_pokemart - .4byte ScrCmd_pokemartdecoration - .4byte ScrCmd_pokemartdecoration2 - .4byte ScrCmd_playslotmachine - .4byte ScrCmd_setberrytree - .4byte ScrCmd_choosecontestmon - .4byte ScrCmd_startcontest - .4byte ScrCmd_showcontestresults - .4byte ScrCmd_contestlinktransfer - .4byte ScrCmd_random - .4byte ScrCmd_addmoney - .4byte ScrCmd_removemoney - .4byte ScrCmd_checkmoney - .4byte ScrCmd_showmoneybox - .4byte ScrCmd_hidemoneybox - .4byte ScrCmd_updatemoneybox - .4byte ScrCmd_getpricereduction - .4byte ScrCmd_fadescreen - .4byte ScrCmd_fadescreenspeed - .4byte ScrCmd_setflashradius - .4byte ScrCmd_animateflash - .4byte ScrCmd_messageautoscroll - .4byte ScrCmd_dofieldeffect - .4byte ScrCmd_setfieldeffectarg - .4byte ScrCmd_waitfieldeffect - .4byte ScrCmd_setrespawn - .4byte ScrCmd_checkplayergender - .4byte ScrCmd_playmoncry - .4byte ScrCmd_setmetatile - .4byte ScrCmd_resetweather - .4byte ScrCmd_setweather - .4byte ScrCmd_doweather - .4byte ScrCmd_setstepcallback - .4byte ScrCmd_setmaplayoutindex - .4byte ScrCmd_setobjectpriority - .4byte ScrCmd_resetobjectpriority - .4byte ScrCmd_createvobject - .4byte ScrCmd_turnvobject - .4byte ScrCmd_opendoor - .4byte ScrCmd_closedoor - .4byte ScrCmd_waitdooranim - .4byte ScrCmd_setdooropen - .4byte ScrCmd_setdoorclosed - .4byte ScrCmd_addelevmenuitem - .4byte ScrCmd_showelevmenu - .4byte ScrCmd_checkcoins - .4byte ScrCmd_addcoins - .4byte ScrCmd_removecoins - .4byte ScrCmd_setwildbattle - .4byte ScrCmd_dowildbattle - .4byte ScrCmd_setvaddress - .4byte ScrCmd_vgoto - .4byte ScrCmd_vcall - .4byte ScrCmd_vgoto_if - .4byte ScrCmd_vcall_if - .4byte ScrCmd_vmessage - .4byte ScrCmd_vloadword - .4byte ScrCmd_vbufferstring - .4byte ScrCmd_showcoinsbox - .4byte ScrCmd_hidecoinsbox - .4byte ScrCmd_updatecoinsbox - .4byte ScrCmd_incrementgamestat - .4byte ScrCmd_setescapewarp - .4byte ScrCmd_waitmoncry - .4byte ScrCmd_bufferboxname - .4byte ScrCmd_nop1 - .4byte ScrCmd_nop1 - .4byte ScrCmd_nop1 - .4byte ScrCmd_nop1 - .4byte ScrCmd_nop1 - .4byte ScrCmd_nop1 - .4byte ScrCmd_setmonobedient - .4byte ScrCmd_checkmonobedience - .4byte ScrCmd_gotoram - .4byte ScrCmd_nop1 - .4byte ScrCmd_warpD1 - .4byte ScrCmd_setmonmetlocation - .4byte ScrCmd_moverotatingtileobjects - .4byte ScrCmd_turnrotatingtileobjects - .4byte ScrCmd_initrotatingtilepuzzle - .4byte ScrCmd_freerotatingtilepuzzle - .4byte ScrCmd_warpmossdeepgym - .4byte ScrCmd_cmdD8 - .4byte ScrCmd_cmdD9 - .4byte ScrCmd_closebraillemessage - .4byte ScrCmd_cmdDB - .4byte ScrCmd_fadescreenswapbuffers - .4byte ScrCmd_buffertrainerclassname - .4byte ScrCmd_buffertrainername - .4byte ScrCmd_pokenavcall - .4byte ScrCmd_warpsootopolislegend - .4byte ScrCmd_buffercontesttype - .4byte ScrCmd_bufferitemnameplural + .4byte ScrCmd_nop @ 0x00 + .4byte ScrCmd_nop1 @ 0x01 + .4byte ScrCmd_end @ 0x02 + .4byte ScrCmd_return @ 0x03 + .4byte ScrCmd_call @ 0x04 + .4byte ScrCmd_goto @ 0x05 + .4byte ScrCmd_goto_if @ 0x06 + .4byte ScrCmd_call_if @ 0x07 + .4byte ScrCmd_gotostd @ 0x08 + .4byte ScrCmd_callstd @ 0x09 + .4byte ScrCmd_gotostd_if @ 0x0a + .4byte ScrCmd_callstd_if @ 0x0b + .4byte ScrCmd_returnram @ 0x0c + .4byte ScrCmd_killscript @ 0x0d + .4byte ScrCmd_setmysteryeventstatus @ 0x0e + .4byte ScrCmd_loadword @ 0x0f + .4byte ScrCmd_loadbyte @ 0x10 + .4byte ScrCmd_writebytetoaddr @ 0x11 + .4byte ScrCmd_loadbytefromaddr @ 0x12 + .4byte ScrCmd_setptrbyte @ 0x13 + .4byte ScrCmd_copylocal @ 0x14 + .4byte ScrCmd_copybyte @ 0x15 + .4byte ScrCmd_setvar @ 0x16 + .4byte ScrCmd_addvar @ 0x17 + .4byte ScrCmd_subvar @ 0x18 + .4byte ScrCmd_copyvar @ 0x19 + .4byte ScrCmd_setorcopyvar @ 0x1a + .4byte ScrCmd_compare_local_to_local @ 0x1b + .4byte ScrCmd_compare_local_to_value @ 0x1c + .4byte ScrCmd_compare_local_to_addr @ 0x1d + .4byte ScrCmd_compare_addr_to_local @ 0x1e + .4byte ScrCmd_compare_addr_to_value @ 0x1f + .4byte ScrCmd_compare_addr_to_addr @ 0x20 + .4byte ScrCmd_compare_var_to_value @ 0x21 + .4byte ScrCmd_compare_var_to_var @ 0x22 + .4byte ScrCmd_callnative @ 0x23 + .4byte ScrCmd_gotonative @ 0x24 + .4byte ScrCmd_special @ 0x25 + .4byte ScrCmd_specialvar @ 0x26 + .4byte ScrCmd_waitstate @ 0x27 + .4byte ScrCmd_delay @ 0x28 + .4byte ScrCmd_setflag @ 0x29 + .4byte ScrCmd_clearflag @ 0x2a + .4byte ScrCmd_checkflag @ 0x2b + .4byte ScrCmd_initclock @ 0x2c + .4byte ScrCmd_dotimebasedevents @ 0x2d + .4byte ScrCmd_gettime @ 0x2e + .4byte ScrCmd_playse @ 0x2f + .4byte ScrCmd_waitse @ 0x30 + .4byte ScrCmd_playfanfare @ 0x31 + .4byte ScrCmd_waitfanfare @ 0x32 + .4byte ScrCmd_playbgm @ 0x33 + .4byte ScrCmd_savebgm @ 0x34 + .4byte ScrCmd_fadedefaultbgm @ 0x35 + .4byte ScrCmd_fadenewbgm @ 0x36 + .4byte ScrCmd_fadeoutbgm @ 0x37 + .4byte ScrCmd_fadeinbgm @ 0x38 + .4byte ScrCmd_warp @ 0x39 + .4byte ScrCmd_warpsilent @ 0x3a + .4byte ScrCmd_warpdoor @ 0x3b + .4byte ScrCmd_warphole @ 0x3c + .4byte ScrCmd_warpteleport @ 0x3d + .4byte ScrCmd_setwarp @ 0x3e + .4byte ScrCmd_setdynamicwarp @ 0x3f + .4byte ScrCmd_setdivewarp @ 0x40 + .4byte ScrCmd_setholewarp @ 0x41 + .4byte ScrCmd_getplayerxy @ 0x42 + .4byte ScrCmd_getpartysize @ 0x43 + .4byte ScrCmd_additem @ 0x44 + .4byte ScrCmd_removeitem @ 0x45 + .4byte ScrCmd_checkitemspace @ 0x46 + .4byte ScrCmd_checkitem @ 0x47 + .4byte ScrCmd_checkitemtype @ 0x48 + .4byte ScrCmd_addpcitem @ 0x49 + .4byte ScrCmd_checkpcitem @ 0x4a + .4byte ScrCmd_adddecoration @ 0x4b + .4byte ScrCmd_removedecoration @ 0x4c + .4byte ScrCmd_checkdecor @ 0x4d + .4byte ScrCmd_checkdecorspace @ 0x4e + .4byte ScrCmd_applymovement @ 0x4f + .4byte ScrCmd_applymovement_at @ 0x50 + .4byte ScrCmd_waitmovement @ 0x51 + .4byte ScrCmd_waitmovement_at @ 0x52 + .4byte ScrCmd_removeobject @ 0x53 + .4byte ScrCmd_removeobject_at @ 0x54 + .4byte ScrCmd_addobject @ 0x55 + .4byte ScrCmd_addobject_at @ 0x56 + .4byte ScrCmd_setobjectxy @ 0x57 + .4byte ScrCmd_showobject_at @ 0x58 + .4byte ScrCmd_hideobject_at @ 0x59 + .4byte ScrCmd_faceplayer @ 0x5a + .4byte ScrCmd_turnobject @ 0x5b + .4byte ScrCmd_trainerbattle @ 0x5c + .4byte ScrCmd_dotrainerbattle @ 0x5d + .4byte ScrCmd_gotopostbattlescript @ 0x5e + .4byte ScrCmd_gotobeatenscript @ 0x5f + .4byte ScrCmd_checktrainerflag @ 0x60 + .4byte ScrCmd_settrainerflag @ 0x61 + .4byte ScrCmd_cleartrainerflag @ 0x62 + .4byte ScrCmd_setobjectxyperm @ 0x63 + .4byte ScrCmd_copyobjectxytoperm @ 0x64 + .4byte ScrCmd_setobjectmovementtype @ 0x65 + .4byte ScrCmd_waitmessage @ 0x66 + .4byte ScrCmd_message @ 0x67 + .4byte ScrCmd_closemessage @ 0x68 + .4byte ScrCmd_lockall @ 0x69 + .4byte ScrCmd_lock @ 0x6a + .4byte ScrCmd_releaseall @ 0x6b + .4byte ScrCmd_release @ 0x6c + .4byte ScrCmd_waitbuttonpress @ 0x6d + .4byte ScrCmd_yesnobox @ 0x6e + .4byte ScrCmd_multichoice @ 0x6f + .4byte ScrCmd_multichoicedefault @ 0x70 + .4byte ScrCmd_multichoicegrid @ 0x71 + .4byte ScrCmd_drawbox @ 0x72 + .4byte ScrCmd_erasebox @ 0x73 + .4byte ScrCmd_drawboxtext @ 0x74 + .4byte ScrCmd_showmonpic @ 0x75 + .4byte ScrCmd_hidemonpic @ 0x76 + .4byte ScrCmd_showcontestwinner @ 0x77 + .4byte ScrCmd_braillemessage @ 0x78 + .4byte ScrCmd_givemon @ 0x79 + .4byte ScrCmd_giveegg @ 0x7a + .4byte ScrCmd_setmonmove @ 0x7b + .4byte ScrCmd_checkpartymove @ 0x7c + .4byte ScrCmd_bufferspeciesname @ 0x7d + .4byte ScrCmd_bufferleadmonspeciesname @ 0x7e + .4byte ScrCmd_bufferpartymonnick @ 0x7f + .4byte ScrCmd_bufferitemname @ 0x80 + .4byte ScrCmd_bufferdecorationname @ 0x81 + .4byte ScrCmd_buffermovename @ 0x82 + .4byte ScrCmd_buffernumberstring @ 0x83 + .4byte ScrCmd_bufferstdstring @ 0x84 + .4byte ScrCmd_bufferstring @ 0x85 + .4byte ScrCmd_pokemart @ 0x86 + .4byte ScrCmd_pokemartdecoration @ 0x87 + .4byte ScrCmd_pokemartdecoration2 @ 0x88 + .4byte ScrCmd_playslotmachine @ 0x89 + .4byte ScrCmd_setberrytree @ 0x8a + .4byte ScrCmd_choosecontestmon @ 0x8b + .4byte ScrCmd_startcontest @ 0x8c + .4byte ScrCmd_showcontestresults @ 0x8d + .4byte ScrCmd_contestlinktransfer @ 0x8e + .4byte ScrCmd_random @ 0x8f + .4byte ScrCmd_addmoney @ 0x90 + .4byte ScrCmd_removemoney @ 0x91 + .4byte ScrCmd_checkmoney @ 0x92 + .4byte ScrCmd_showmoneybox @ 0x93 + .4byte ScrCmd_hidemoneybox @ 0x94 + .4byte ScrCmd_updatemoneybox @ 0x95 + .4byte ScrCmd_getpricereduction @ 0x96 + .4byte ScrCmd_fadescreen @ 0x97 + .4byte ScrCmd_fadescreenspeed @ 0x98 + .4byte ScrCmd_setflashradius @ 0x99 + .4byte ScrCmd_animateflash @ 0x9a + .4byte ScrCmd_messageautoscroll @ 0x9b + .4byte ScrCmd_dofieldeffect @ 0x9c + .4byte ScrCmd_setfieldeffectarg @ 0x9d + .4byte ScrCmd_waitfieldeffect @ 0x9e + .4byte ScrCmd_setrespawn @ 0x9f + .4byte ScrCmd_checkplayergender @ 0xa0 + .4byte ScrCmd_playmoncry @ 0xa1 + .4byte ScrCmd_setmetatile @ 0xa2 + .4byte ScrCmd_resetweather @ 0xa3 + .4byte ScrCmd_setweather @ 0xa4 + .4byte ScrCmd_doweather @ 0xa5 + .4byte ScrCmd_setstepcallback @ 0xa6 + .4byte ScrCmd_setmaplayoutindex @ 0xa7 + .4byte ScrCmd_setobjectpriority @ 0xa8 + .4byte ScrCmd_resetobjectpriority @ 0xa9 + .4byte ScrCmd_createvobject @ 0xaa + .4byte ScrCmd_turnvobject @ 0xab + .4byte ScrCmd_opendoor @ 0xac + .4byte ScrCmd_closedoor @ 0xad + .4byte ScrCmd_waitdooranim @ 0xae + .4byte ScrCmd_setdooropen @ 0xaf + .4byte ScrCmd_setdoorclosed @ 0xb0 + .4byte ScrCmd_addelevmenuitem @ 0xb1 + .4byte ScrCmd_showelevmenu @ 0xb2 + .4byte ScrCmd_checkcoins @ 0xb3 + .4byte ScrCmd_addcoins @ 0xb4 + .4byte ScrCmd_removecoins @ 0xb5 + .4byte ScrCmd_setwildbattle @ 0xb6 + .4byte ScrCmd_dowildbattle @ 0xb7 + .4byte ScrCmd_setvaddress @ 0xb8 + .4byte ScrCmd_vgoto @ 0xb9 + .4byte ScrCmd_vcall @ 0xba + .4byte ScrCmd_vgoto_if @ 0xbb + .4byte ScrCmd_vcall_if @ 0xbc + .4byte ScrCmd_vmessage @ 0xbd + .4byte ScrCmd_vloadword @ 0xbe + .4byte ScrCmd_vbufferstring @ 0xbf + .4byte ScrCmd_showcoinsbox @ 0xc0 + .4byte ScrCmd_hidecoinsbox @ 0xc1 + .4byte ScrCmd_updatecoinsbox @ 0xc2 + .4byte ScrCmd_incrementgamestat @ 0xc3 + .4byte ScrCmd_setescapewarp @ 0xc4 + .4byte ScrCmd_waitmoncry @ 0xc5 + .4byte ScrCmd_bufferboxname @ 0xc6 + .4byte ScrCmd_nop1 @ 0xc7 + .4byte ScrCmd_nop1 @ 0xc8 + .4byte ScrCmd_nop1 @ 0xc9 + .4byte ScrCmd_nop1 @ 0xca + .4byte ScrCmd_nop1 @ 0xcb + .4byte ScrCmd_nop1 @ 0xcc + .4byte ScrCmd_setmonobedient @ 0xcd + .4byte ScrCmd_checkmonobedience @ 0xce + .4byte ScrCmd_gotoram @ 0xcf + .4byte ScrCmd_nop1 @ 0xd0 + .4byte ScrCmd_warpD1 @ 0xd1 + .4byte ScrCmd_setmonmetlocation @ 0xd2 + .4byte ScrCmd_moverotatingtileobjects @ 0xd3 + .4byte ScrCmd_turnrotatingtileobjects @ 0xd4 + .4byte ScrCmd_initrotatingtilepuzzle @ 0xd5 + .4byte ScrCmd_freerotatingtilepuzzle @ 0xd6 + .4byte ScrCmd_warpmossdeepgym @ 0xd7 + .4byte ScrCmd_cmdD8 @ 0xd8 + .4byte ScrCmd_cmdD9 @ 0xd9 + .4byte ScrCmd_closebraillemessage @ 0xda + .4byte ScrCmd_cmdDB @ 0xdb + .4byte ScrCmd_fadescreenswapbuffers @ 0xdc + .4byte ScrCmd_buffertrainerclassname @ 0xdd + .4byte ScrCmd_buffertrainername @ 0xde + .4byte ScrCmd_pokenavcall @ 0xdf + .4byte ScrCmd_warpsootopolislegend @ 0xe0 + .4byte ScrCmd_buffercontesttype @ 0xe1 + .4byte ScrCmd_bufferitemnameplural @ 0xe2 gScriptCmdTableEnd:: @ 81DBA08 .4byte ScrCmd_nop From 31d12383b1f5bb152e5c8c4d6fcd14c84cae6115 Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Fri, 25 Sep 2020 13:27:15 -0500 Subject: [PATCH 018/177] Add byte comments to mystery event script command table --- data/mystery_event_script_cmd_table.s | 34 +++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/data/mystery_event_script_cmd_table.s b/data/mystery_event_script_cmd_table.s index 867b05e07c..352c36e6a3 100644 --- a/data/mystery_event_script_cmd_table.s +++ b/data/mystery_event_script_cmd_table.s @@ -2,21 +2,21 @@ .align 2 gMysteryEventScriptCmdTable:: @ 82DED2C - .4byte MEScrCmd_nop - .4byte MEScrCmd_checkcompat - .4byte MEScrCmd_end - .4byte MEScrCmd_setmsg - .4byte MEScrCmd_setstatus - .4byte MEScrCmd_runscript - .4byte MEScrCmd_initramscript - .4byte MEScrCmd_setenigmaberry - .4byte MEScrCmd_giveribbon - .4byte MEScrCmd_givenationaldex - .4byte MEScrCmd_addrareword - .4byte MEScrCmd_setrecordmixinggift - .4byte MEScrCmd_givepokemon - .4byte MEScrCmd_addtrainer - .4byte MEScrCmd_enableresetrtc - .4byte MEScrCmd_checksum - .4byte MEScrCmd_crc + .4byte MEScrCmd_nop @ 0x00 + .4byte MEScrCmd_checkcompat @ 0x01 + .4byte MEScrCmd_end @ 0x02 + .4byte MEScrCmd_setmsg @ 0x03 + .4byte MEScrCmd_setstatus @ 0x04 + .4byte MEScrCmd_runscript @ 0x05 + .4byte MEScrCmd_initramscript @ 0x06 + .4byte MEScrCmd_setenigmaberry @ 0x07 + .4byte MEScrCmd_giveribbon @ 0x08 + .4byte MEScrCmd_givenationaldex @ 0x09 + .4byte MEScrCmd_addrareword @ 0x0a + .4byte MEScrCmd_setrecordmixinggift @ 0x0b + .4byte MEScrCmd_givepokemon @ 0x0c + .4byte MEScrCmd_addtrainer @ 0x0d + .4byte MEScrCmd_enableresetrtc @ 0x0e + .4byte MEScrCmd_checksum @ 0x0f + .4byte MEScrCmd_crc @ 0x10 gMysteryEventScriptCmdTableEnd:: From 3860551777299cc51eef6827d30a5735afd5d0f5 Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Fri, 25 Sep 2020 13:41:17 -0500 Subject: [PATCH 019/177] Mark unused script commands --- asm/macros/event.inc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 5e5a2758da..eafd19b1c2 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1434,6 +1434,7 @@ @ Sets the color of the text in standard message boxes. 0x00 produces blue (male) text, 0x01 produces red (female) text, @ 0xFF resets the color to the default for the current OW's gender, and all other values produce black text. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro textcolor color:req .byte 0xc7 .byte \color @@ -1441,6 +1442,7 @@ @ The exact purpose of this command is unknown, but it is related to the blue help-text box that appears on the bottom @ of the screen when the Main Menu is opened. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro loadhelp pointer:req .byte 0xc8 .4byte \pointer @@ -1448,21 +1450,25 @@ @ The exact purpose of this command is unknown, but it is related to the blue help-text box that appears on the bottom of @ the screen when the Main Menu is opened. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro unloadhelp .byte 0xc9 .endm @ After using this command, all standard message boxes will use the signpost frame. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro signmsg .byte 0xca .endm @ Ends the effects of signmsg, returning message box frames to normal. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro normalmsg .byte 0xcb .endm @ Compares the value of a hidden variable to a dword. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro comparehiddenvar a:req, value:req .byte 0xcc .byte \a @@ -1489,6 +1495,7 @@ .endm @ Sets worldmapflag to 1. This allows the player to Fly to the corresponding map, if that map has a flightspot. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro setworldmapflag worldmapflag:req .byte 0xd0 .2byte \worldmapflag From 032669e2ab1bd9658bfb6b3b205324e3dc0dde8d Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Fri, 25 Sep 2020 14:04:50 -0500 Subject: [PATCH 020/177] Change script command table comment alignment from tabs to spaces --- data/mystery_event_script_cmd_table.s | 34 +- data/script_cmd_table.inc | 454 +++++++++++++------------- 2 files changed, 244 insertions(+), 244 deletions(-) diff --git a/data/mystery_event_script_cmd_table.s b/data/mystery_event_script_cmd_table.s index 352c36e6a3..6ebc7e9625 100644 --- a/data/mystery_event_script_cmd_table.s +++ b/data/mystery_event_script_cmd_table.s @@ -2,21 +2,21 @@ .align 2 gMysteryEventScriptCmdTable:: @ 82DED2C - .4byte MEScrCmd_nop @ 0x00 - .4byte MEScrCmd_checkcompat @ 0x01 - .4byte MEScrCmd_end @ 0x02 - .4byte MEScrCmd_setmsg @ 0x03 - .4byte MEScrCmd_setstatus @ 0x04 - .4byte MEScrCmd_runscript @ 0x05 - .4byte MEScrCmd_initramscript @ 0x06 - .4byte MEScrCmd_setenigmaberry @ 0x07 - .4byte MEScrCmd_giveribbon @ 0x08 - .4byte MEScrCmd_givenationaldex @ 0x09 - .4byte MEScrCmd_addrareword @ 0x0a - .4byte MEScrCmd_setrecordmixinggift @ 0x0b - .4byte MEScrCmd_givepokemon @ 0x0c - .4byte MEScrCmd_addtrainer @ 0x0d - .4byte MEScrCmd_enableresetrtc @ 0x0e - .4byte MEScrCmd_checksum @ 0x0f - .4byte MEScrCmd_crc @ 0x10 + .4byte MEScrCmd_nop @ 0x00 + .4byte MEScrCmd_checkcompat @ 0x01 + .4byte MEScrCmd_end @ 0x02 + .4byte MEScrCmd_setmsg @ 0x03 + .4byte MEScrCmd_setstatus @ 0x04 + .4byte MEScrCmd_runscript @ 0x05 + .4byte MEScrCmd_initramscript @ 0x06 + .4byte MEScrCmd_setenigmaberry @ 0x07 + .4byte MEScrCmd_giveribbon @ 0x08 + .4byte MEScrCmd_givenationaldex @ 0x09 + .4byte MEScrCmd_addrareword @ 0x0a + .4byte MEScrCmd_setrecordmixinggift @ 0x0b + .4byte MEScrCmd_givepokemon @ 0x0c + .4byte MEScrCmd_addtrainer @ 0x0d + .4byte MEScrCmd_enableresetrtc @ 0x0e + .4byte MEScrCmd_checksum @ 0x0f + .4byte MEScrCmd_crc @ 0x10 gMysteryEventScriptCmdTableEnd:: diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 9712da8937..0971358a14 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -1,232 +1,232 @@ .align 2 gScriptCmdTable:: @ 81DB67C - .4byte ScrCmd_nop @ 0x00 - .4byte ScrCmd_nop1 @ 0x01 - .4byte ScrCmd_end @ 0x02 - .4byte ScrCmd_return @ 0x03 - .4byte ScrCmd_call @ 0x04 - .4byte ScrCmd_goto @ 0x05 - .4byte ScrCmd_goto_if @ 0x06 - .4byte ScrCmd_call_if @ 0x07 - .4byte ScrCmd_gotostd @ 0x08 - .4byte ScrCmd_callstd @ 0x09 - .4byte ScrCmd_gotostd_if @ 0x0a - .4byte ScrCmd_callstd_if @ 0x0b - .4byte ScrCmd_returnram @ 0x0c - .4byte ScrCmd_killscript @ 0x0d - .4byte ScrCmd_setmysteryeventstatus @ 0x0e - .4byte ScrCmd_loadword @ 0x0f - .4byte ScrCmd_loadbyte @ 0x10 - .4byte ScrCmd_writebytetoaddr @ 0x11 - .4byte ScrCmd_loadbytefromaddr @ 0x12 - .4byte ScrCmd_setptrbyte @ 0x13 - .4byte ScrCmd_copylocal @ 0x14 - .4byte ScrCmd_copybyte @ 0x15 - .4byte ScrCmd_setvar @ 0x16 - .4byte ScrCmd_addvar @ 0x17 - .4byte ScrCmd_subvar @ 0x18 - .4byte ScrCmd_copyvar @ 0x19 - .4byte ScrCmd_setorcopyvar @ 0x1a - .4byte ScrCmd_compare_local_to_local @ 0x1b - .4byte ScrCmd_compare_local_to_value @ 0x1c - .4byte ScrCmd_compare_local_to_addr @ 0x1d - .4byte ScrCmd_compare_addr_to_local @ 0x1e - .4byte ScrCmd_compare_addr_to_value @ 0x1f - .4byte ScrCmd_compare_addr_to_addr @ 0x20 - .4byte ScrCmd_compare_var_to_value @ 0x21 - .4byte ScrCmd_compare_var_to_var @ 0x22 - .4byte ScrCmd_callnative @ 0x23 - .4byte ScrCmd_gotonative @ 0x24 - .4byte ScrCmd_special @ 0x25 - .4byte ScrCmd_specialvar @ 0x26 - .4byte ScrCmd_waitstate @ 0x27 - .4byte ScrCmd_delay @ 0x28 - .4byte ScrCmd_setflag @ 0x29 - .4byte ScrCmd_clearflag @ 0x2a - .4byte ScrCmd_checkflag @ 0x2b - .4byte ScrCmd_initclock @ 0x2c - .4byte ScrCmd_dotimebasedevents @ 0x2d - .4byte ScrCmd_gettime @ 0x2e - .4byte ScrCmd_playse @ 0x2f - .4byte ScrCmd_waitse @ 0x30 - .4byte ScrCmd_playfanfare @ 0x31 - .4byte ScrCmd_waitfanfare @ 0x32 - .4byte ScrCmd_playbgm @ 0x33 - .4byte ScrCmd_savebgm @ 0x34 - .4byte ScrCmd_fadedefaultbgm @ 0x35 - .4byte ScrCmd_fadenewbgm @ 0x36 - .4byte ScrCmd_fadeoutbgm @ 0x37 - .4byte ScrCmd_fadeinbgm @ 0x38 - .4byte ScrCmd_warp @ 0x39 - .4byte ScrCmd_warpsilent @ 0x3a - .4byte ScrCmd_warpdoor @ 0x3b - .4byte ScrCmd_warphole @ 0x3c - .4byte ScrCmd_warpteleport @ 0x3d - .4byte ScrCmd_setwarp @ 0x3e - .4byte ScrCmd_setdynamicwarp @ 0x3f - .4byte ScrCmd_setdivewarp @ 0x40 - .4byte ScrCmd_setholewarp @ 0x41 - .4byte ScrCmd_getplayerxy @ 0x42 - .4byte ScrCmd_getpartysize @ 0x43 - .4byte ScrCmd_additem @ 0x44 - .4byte ScrCmd_removeitem @ 0x45 - .4byte ScrCmd_checkitemspace @ 0x46 - .4byte ScrCmd_checkitem @ 0x47 - .4byte ScrCmd_checkitemtype @ 0x48 - .4byte ScrCmd_addpcitem @ 0x49 - .4byte ScrCmd_checkpcitem @ 0x4a - .4byte ScrCmd_adddecoration @ 0x4b - .4byte ScrCmd_removedecoration @ 0x4c - .4byte ScrCmd_checkdecor @ 0x4d - .4byte ScrCmd_checkdecorspace @ 0x4e - .4byte ScrCmd_applymovement @ 0x4f - .4byte ScrCmd_applymovement_at @ 0x50 - .4byte ScrCmd_waitmovement @ 0x51 - .4byte ScrCmd_waitmovement_at @ 0x52 - .4byte ScrCmd_removeobject @ 0x53 - .4byte ScrCmd_removeobject_at @ 0x54 - .4byte ScrCmd_addobject @ 0x55 - .4byte ScrCmd_addobject_at @ 0x56 - .4byte ScrCmd_setobjectxy @ 0x57 - .4byte ScrCmd_showobject_at @ 0x58 - .4byte ScrCmd_hideobject_at @ 0x59 - .4byte ScrCmd_faceplayer @ 0x5a - .4byte ScrCmd_turnobject @ 0x5b - .4byte ScrCmd_trainerbattle @ 0x5c - .4byte ScrCmd_dotrainerbattle @ 0x5d - .4byte ScrCmd_gotopostbattlescript @ 0x5e - .4byte ScrCmd_gotobeatenscript @ 0x5f - .4byte ScrCmd_checktrainerflag @ 0x60 - .4byte ScrCmd_settrainerflag @ 0x61 - .4byte ScrCmd_cleartrainerflag @ 0x62 - .4byte ScrCmd_setobjectxyperm @ 0x63 - .4byte ScrCmd_copyobjectxytoperm @ 0x64 - .4byte ScrCmd_setobjectmovementtype @ 0x65 - .4byte ScrCmd_waitmessage @ 0x66 - .4byte ScrCmd_message @ 0x67 - .4byte ScrCmd_closemessage @ 0x68 - .4byte ScrCmd_lockall @ 0x69 - .4byte ScrCmd_lock @ 0x6a - .4byte ScrCmd_releaseall @ 0x6b - .4byte ScrCmd_release @ 0x6c - .4byte ScrCmd_waitbuttonpress @ 0x6d - .4byte ScrCmd_yesnobox @ 0x6e - .4byte ScrCmd_multichoice @ 0x6f - .4byte ScrCmd_multichoicedefault @ 0x70 - .4byte ScrCmd_multichoicegrid @ 0x71 - .4byte ScrCmd_drawbox @ 0x72 - .4byte ScrCmd_erasebox @ 0x73 - .4byte ScrCmd_drawboxtext @ 0x74 - .4byte ScrCmd_showmonpic @ 0x75 - .4byte ScrCmd_hidemonpic @ 0x76 - .4byte ScrCmd_showcontestwinner @ 0x77 - .4byte ScrCmd_braillemessage @ 0x78 - .4byte ScrCmd_givemon @ 0x79 - .4byte ScrCmd_giveegg @ 0x7a - .4byte ScrCmd_setmonmove @ 0x7b - .4byte ScrCmd_checkpartymove @ 0x7c - .4byte ScrCmd_bufferspeciesname @ 0x7d - .4byte ScrCmd_bufferleadmonspeciesname @ 0x7e - .4byte ScrCmd_bufferpartymonnick @ 0x7f - .4byte ScrCmd_bufferitemname @ 0x80 - .4byte ScrCmd_bufferdecorationname @ 0x81 - .4byte ScrCmd_buffermovename @ 0x82 - .4byte ScrCmd_buffernumberstring @ 0x83 - .4byte ScrCmd_bufferstdstring @ 0x84 - .4byte ScrCmd_bufferstring @ 0x85 - .4byte ScrCmd_pokemart @ 0x86 - .4byte ScrCmd_pokemartdecoration @ 0x87 - .4byte ScrCmd_pokemartdecoration2 @ 0x88 - .4byte ScrCmd_playslotmachine @ 0x89 - .4byte ScrCmd_setberrytree @ 0x8a - .4byte ScrCmd_choosecontestmon @ 0x8b - .4byte ScrCmd_startcontest @ 0x8c - .4byte ScrCmd_showcontestresults @ 0x8d - .4byte ScrCmd_contestlinktransfer @ 0x8e - .4byte ScrCmd_random @ 0x8f - .4byte ScrCmd_addmoney @ 0x90 - .4byte ScrCmd_removemoney @ 0x91 - .4byte ScrCmd_checkmoney @ 0x92 - .4byte ScrCmd_showmoneybox @ 0x93 - .4byte ScrCmd_hidemoneybox @ 0x94 - .4byte ScrCmd_updatemoneybox @ 0x95 - .4byte ScrCmd_getpricereduction @ 0x96 - .4byte ScrCmd_fadescreen @ 0x97 - .4byte ScrCmd_fadescreenspeed @ 0x98 - .4byte ScrCmd_setflashradius @ 0x99 - .4byte ScrCmd_animateflash @ 0x9a - .4byte ScrCmd_messageautoscroll @ 0x9b - .4byte ScrCmd_dofieldeffect @ 0x9c - .4byte ScrCmd_setfieldeffectarg @ 0x9d - .4byte ScrCmd_waitfieldeffect @ 0x9e - .4byte ScrCmd_setrespawn @ 0x9f - .4byte ScrCmd_checkplayergender @ 0xa0 - .4byte ScrCmd_playmoncry @ 0xa1 - .4byte ScrCmd_setmetatile @ 0xa2 - .4byte ScrCmd_resetweather @ 0xa3 - .4byte ScrCmd_setweather @ 0xa4 - .4byte ScrCmd_doweather @ 0xa5 - .4byte ScrCmd_setstepcallback @ 0xa6 - .4byte ScrCmd_setmaplayoutindex @ 0xa7 - .4byte ScrCmd_setobjectpriority @ 0xa8 - .4byte ScrCmd_resetobjectpriority @ 0xa9 - .4byte ScrCmd_createvobject @ 0xaa - .4byte ScrCmd_turnvobject @ 0xab - .4byte ScrCmd_opendoor @ 0xac - .4byte ScrCmd_closedoor @ 0xad - .4byte ScrCmd_waitdooranim @ 0xae - .4byte ScrCmd_setdooropen @ 0xaf - .4byte ScrCmd_setdoorclosed @ 0xb0 - .4byte ScrCmd_addelevmenuitem @ 0xb1 - .4byte ScrCmd_showelevmenu @ 0xb2 - .4byte ScrCmd_checkcoins @ 0xb3 - .4byte ScrCmd_addcoins @ 0xb4 - .4byte ScrCmd_removecoins @ 0xb5 - .4byte ScrCmd_setwildbattle @ 0xb6 - .4byte ScrCmd_dowildbattle @ 0xb7 - .4byte ScrCmd_setvaddress @ 0xb8 - .4byte ScrCmd_vgoto @ 0xb9 - .4byte ScrCmd_vcall @ 0xba - .4byte ScrCmd_vgoto_if @ 0xbb - .4byte ScrCmd_vcall_if @ 0xbc - .4byte ScrCmd_vmessage @ 0xbd - .4byte ScrCmd_vloadword @ 0xbe - .4byte ScrCmd_vbufferstring @ 0xbf - .4byte ScrCmd_showcoinsbox @ 0xc0 - .4byte ScrCmd_hidecoinsbox @ 0xc1 - .4byte ScrCmd_updatecoinsbox @ 0xc2 - .4byte ScrCmd_incrementgamestat @ 0xc3 - .4byte ScrCmd_setescapewarp @ 0xc4 - .4byte ScrCmd_waitmoncry @ 0xc5 - .4byte ScrCmd_bufferboxname @ 0xc6 - .4byte ScrCmd_nop1 @ 0xc7 - .4byte ScrCmd_nop1 @ 0xc8 - .4byte ScrCmd_nop1 @ 0xc9 - .4byte ScrCmd_nop1 @ 0xca - .4byte ScrCmd_nop1 @ 0xcb - .4byte ScrCmd_nop1 @ 0xcc - .4byte ScrCmd_setmonobedient @ 0xcd - .4byte ScrCmd_checkmonobedience @ 0xce - .4byte ScrCmd_gotoram @ 0xcf - .4byte ScrCmd_nop1 @ 0xd0 - .4byte ScrCmd_warpD1 @ 0xd1 - .4byte ScrCmd_setmonmetlocation @ 0xd2 - .4byte ScrCmd_moverotatingtileobjects @ 0xd3 - .4byte ScrCmd_turnrotatingtileobjects @ 0xd4 - .4byte ScrCmd_initrotatingtilepuzzle @ 0xd5 - .4byte ScrCmd_freerotatingtilepuzzle @ 0xd6 - .4byte ScrCmd_warpmossdeepgym @ 0xd7 - .4byte ScrCmd_cmdD8 @ 0xd8 - .4byte ScrCmd_cmdD9 @ 0xd9 - .4byte ScrCmd_closebraillemessage @ 0xda - .4byte ScrCmd_cmdDB @ 0xdb - .4byte ScrCmd_fadescreenswapbuffers @ 0xdc - .4byte ScrCmd_buffertrainerclassname @ 0xdd - .4byte ScrCmd_buffertrainername @ 0xde - .4byte ScrCmd_pokenavcall @ 0xdf - .4byte ScrCmd_warpsootopolislegend @ 0xe0 - .4byte ScrCmd_buffercontesttype @ 0xe1 - .4byte ScrCmd_bufferitemnameplural @ 0xe2 + .4byte ScrCmd_nop @ 0x00 + .4byte ScrCmd_nop1 @ 0x01 + .4byte ScrCmd_end @ 0x02 + .4byte ScrCmd_return @ 0x03 + .4byte ScrCmd_call @ 0x04 + .4byte ScrCmd_goto @ 0x05 + .4byte ScrCmd_goto_if @ 0x06 + .4byte ScrCmd_call_if @ 0x07 + .4byte ScrCmd_gotostd @ 0x08 + .4byte ScrCmd_callstd @ 0x09 + .4byte ScrCmd_gotostd_if @ 0x0a + .4byte ScrCmd_callstd_if @ 0x0b + .4byte ScrCmd_returnram @ 0x0c + .4byte ScrCmd_killscript @ 0x0d + .4byte ScrCmd_setmysteryeventstatus @ 0x0e + .4byte ScrCmd_loadword @ 0x0f + .4byte ScrCmd_loadbyte @ 0x10 + .4byte ScrCmd_writebytetoaddr @ 0x11 + .4byte ScrCmd_loadbytefromaddr @ 0x12 + .4byte ScrCmd_setptrbyte @ 0x13 + .4byte ScrCmd_copylocal @ 0x14 + .4byte ScrCmd_copybyte @ 0x15 + .4byte ScrCmd_setvar @ 0x16 + .4byte ScrCmd_addvar @ 0x17 + .4byte ScrCmd_subvar @ 0x18 + .4byte ScrCmd_copyvar @ 0x19 + .4byte ScrCmd_setorcopyvar @ 0x1a + .4byte ScrCmd_compare_local_to_local @ 0x1b + .4byte ScrCmd_compare_local_to_value @ 0x1c + .4byte ScrCmd_compare_local_to_addr @ 0x1d + .4byte ScrCmd_compare_addr_to_local @ 0x1e + .4byte ScrCmd_compare_addr_to_value @ 0x1f + .4byte ScrCmd_compare_addr_to_addr @ 0x20 + .4byte ScrCmd_compare_var_to_value @ 0x21 + .4byte ScrCmd_compare_var_to_var @ 0x22 + .4byte ScrCmd_callnative @ 0x23 + .4byte ScrCmd_gotonative @ 0x24 + .4byte ScrCmd_special @ 0x25 + .4byte ScrCmd_specialvar @ 0x26 + .4byte ScrCmd_waitstate @ 0x27 + .4byte ScrCmd_delay @ 0x28 + .4byte ScrCmd_setflag @ 0x29 + .4byte ScrCmd_clearflag @ 0x2a + .4byte ScrCmd_checkflag @ 0x2b + .4byte ScrCmd_initclock @ 0x2c + .4byte ScrCmd_dotimebasedevents @ 0x2d + .4byte ScrCmd_gettime @ 0x2e + .4byte ScrCmd_playse @ 0x2f + .4byte ScrCmd_waitse @ 0x30 + .4byte ScrCmd_playfanfare @ 0x31 + .4byte ScrCmd_waitfanfare @ 0x32 + .4byte ScrCmd_playbgm @ 0x33 + .4byte ScrCmd_savebgm @ 0x34 + .4byte ScrCmd_fadedefaultbgm @ 0x35 + .4byte ScrCmd_fadenewbgm @ 0x36 + .4byte ScrCmd_fadeoutbgm @ 0x37 + .4byte ScrCmd_fadeinbgm @ 0x38 + .4byte ScrCmd_warp @ 0x39 + .4byte ScrCmd_warpsilent @ 0x3a + .4byte ScrCmd_warpdoor @ 0x3b + .4byte ScrCmd_warphole @ 0x3c + .4byte ScrCmd_warpteleport @ 0x3d + .4byte ScrCmd_setwarp @ 0x3e + .4byte ScrCmd_setdynamicwarp @ 0x3f + .4byte ScrCmd_setdivewarp @ 0x40 + .4byte ScrCmd_setholewarp @ 0x41 + .4byte ScrCmd_getplayerxy @ 0x42 + .4byte ScrCmd_getpartysize @ 0x43 + .4byte ScrCmd_additem @ 0x44 + .4byte ScrCmd_removeitem @ 0x45 + .4byte ScrCmd_checkitemspace @ 0x46 + .4byte ScrCmd_checkitem @ 0x47 + .4byte ScrCmd_checkitemtype @ 0x48 + .4byte ScrCmd_addpcitem @ 0x49 + .4byte ScrCmd_checkpcitem @ 0x4a + .4byte ScrCmd_adddecoration @ 0x4b + .4byte ScrCmd_removedecoration @ 0x4c + .4byte ScrCmd_checkdecor @ 0x4d + .4byte ScrCmd_checkdecorspace @ 0x4e + .4byte ScrCmd_applymovement @ 0x4f + .4byte ScrCmd_applymovement_at @ 0x50 + .4byte ScrCmd_waitmovement @ 0x51 + .4byte ScrCmd_waitmovement_at @ 0x52 + .4byte ScrCmd_removeobject @ 0x53 + .4byte ScrCmd_removeobject_at @ 0x54 + .4byte ScrCmd_addobject @ 0x55 + .4byte ScrCmd_addobject_at @ 0x56 + .4byte ScrCmd_setobjectxy @ 0x57 + .4byte ScrCmd_showobject_at @ 0x58 + .4byte ScrCmd_hideobject_at @ 0x59 + .4byte ScrCmd_faceplayer @ 0x5a + .4byte ScrCmd_turnobject @ 0x5b + .4byte ScrCmd_trainerbattle @ 0x5c + .4byte ScrCmd_dotrainerbattle @ 0x5d + .4byte ScrCmd_gotopostbattlescript @ 0x5e + .4byte ScrCmd_gotobeatenscript @ 0x5f + .4byte ScrCmd_checktrainerflag @ 0x60 + .4byte ScrCmd_settrainerflag @ 0x61 + .4byte ScrCmd_cleartrainerflag @ 0x62 + .4byte ScrCmd_setobjectxyperm @ 0x63 + .4byte ScrCmd_copyobjectxytoperm @ 0x64 + .4byte ScrCmd_setobjectmovementtype @ 0x65 + .4byte ScrCmd_waitmessage @ 0x66 + .4byte ScrCmd_message @ 0x67 + .4byte ScrCmd_closemessage @ 0x68 + .4byte ScrCmd_lockall @ 0x69 + .4byte ScrCmd_lock @ 0x6a + .4byte ScrCmd_releaseall @ 0x6b + .4byte ScrCmd_release @ 0x6c + .4byte ScrCmd_waitbuttonpress @ 0x6d + .4byte ScrCmd_yesnobox @ 0x6e + .4byte ScrCmd_multichoice @ 0x6f + .4byte ScrCmd_multichoicedefault @ 0x70 + .4byte ScrCmd_multichoicegrid @ 0x71 + .4byte ScrCmd_drawbox @ 0x72 + .4byte ScrCmd_erasebox @ 0x73 + .4byte ScrCmd_drawboxtext @ 0x74 + .4byte ScrCmd_showmonpic @ 0x75 + .4byte ScrCmd_hidemonpic @ 0x76 + .4byte ScrCmd_showcontestwinner @ 0x77 + .4byte ScrCmd_braillemessage @ 0x78 + .4byte ScrCmd_givemon @ 0x79 + .4byte ScrCmd_giveegg @ 0x7a + .4byte ScrCmd_setmonmove @ 0x7b + .4byte ScrCmd_checkpartymove @ 0x7c + .4byte ScrCmd_bufferspeciesname @ 0x7d + .4byte ScrCmd_bufferleadmonspeciesname @ 0x7e + .4byte ScrCmd_bufferpartymonnick @ 0x7f + .4byte ScrCmd_bufferitemname @ 0x80 + .4byte ScrCmd_bufferdecorationname @ 0x81 + .4byte ScrCmd_buffermovename @ 0x82 + .4byte ScrCmd_buffernumberstring @ 0x83 + .4byte ScrCmd_bufferstdstring @ 0x84 + .4byte ScrCmd_bufferstring @ 0x85 + .4byte ScrCmd_pokemart @ 0x86 + .4byte ScrCmd_pokemartdecoration @ 0x87 + .4byte ScrCmd_pokemartdecoration2 @ 0x88 + .4byte ScrCmd_playslotmachine @ 0x89 + .4byte ScrCmd_setberrytree @ 0x8a + .4byte ScrCmd_choosecontestmon @ 0x8b + .4byte ScrCmd_startcontest @ 0x8c + .4byte ScrCmd_showcontestresults @ 0x8d + .4byte ScrCmd_contestlinktransfer @ 0x8e + .4byte ScrCmd_random @ 0x8f + .4byte ScrCmd_addmoney @ 0x90 + .4byte ScrCmd_removemoney @ 0x91 + .4byte ScrCmd_checkmoney @ 0x92 + .4byte ScrCmd_showmoneybox @ 0x93 + .4byte ScrCmd_hidemoneybox @ 0x94 + .4byte ScrCmd_updatemoneybox @ 0x95 + .4byte ScrCmd_getpricereduction @ 0x96 + .4byte ScrCmd_fadescreen @ 0x97 + .4byte ScrCmd_fadescreenspeed @ 0x98 + .4byte ScrCmd_setflashradius @ 0x99 + .4byte ScrCmd_animateflash @ 0x9a + .4byte ScrCmd_messageautoscroll @ 0x9b + .4byte ScrCmd_dofieldeffect @ 0x9c + .4byte ScrCmd_setfieldeffectarg @ 0x9d + .4byte ScrCmd_waitfieldeffect @ 0x9e + .4byte ScrCmd_setrespawn @ 0x9f + .4byte ScrCmd_checkplayergender @ 0xa0 + .4byte ScrCmd_playmoncry @ 0xa1 + .4byte ScrCmd_setmetatile @ 0xa2 + .4byte ScrCmd_resetweather @ 0xa3 + .4byte ScrCmd_setweather @ 0xa4 + .4byte ScrCmd_doweather @ 0xa5 + .4byte ScrCmd_setstepcallback @ 0xa6 + .4byte ScrCmd_setmaplayoutindex @ 0xa7 + .4byte ScrCmd_setobjectpriority @ 0xa8 + .4byte ScrCmd_resetobjectpriority @ 0xa9 + .4byte ScrCmd_createvobject @ 0xaa + .4byte ScrCmd_turnvobject @ 0xab + .4byte ScrCmd_opendoor @ 0xac + .4byte ScrCmd_closedoor @ 0xad + .4byte ScrCmd_waitdooranim @ 0xae + .4byte ScrCmd_setdooropen @ 0xaf + .4byte ScrCmd_setdoorclosed @ 0xb0 + .4byte ScrCmd_addelevmenuitem @ 0xb1 + .4byte ScrCmd_showelevmenu @ 0xb2 + .4byte ScrCmd_checkcoins @ 0xb3 + .4byte ScrCmd_addcoins @ 0xb4 + .4byte ScrCmd_removecoins @ 0xb5 + .4byte ScrCmd_setwildbattle @ 0xb6 + .4byte ScrCmd_dowildbattle @ 0xb7 + .4byte ScrCmd_setvaddress @ 0xb8 + .4byte ScrCmd_vgoto @ 0xb9 + .4byte ScrCmd_vcall @ 0xba + .4byte ScrCmd_vgoto_if @ 0xbb + .4byte ScrCmd_vcall_if @ 0xbc + .4byte ScrCmd_vmessage @ 0xbd + .4byte ScrCmd_vloadword @ 0xbe + .4byte ScrCmd_vbufferstring @ 0xbf + .4byte ScrCmd_showcoinsbox @ 0xc0 + .4byte ScrCmd_hidecoinsbox @ 0xc1 + .4byte ScrCmd_updatecoinsbox @ 0xc2 + .4byte ScrCmd_incrementgamestat @ 0xc3 + .4byte ScrCmd_setescapewarp @ 0xc4 + .4byte ScrCmd_waitmoncry @ 0xc5 + .4byte ScrCmd_bufferboxname @ 0xc6 + .4byte ScrCmd_nop1 @ 0xc7 + .4byte ScrCmd_nop1 @ 0xc8 + .4byte ScrCmd_nop1 @ 0xc9 + .4byte ScrCmd_nop1 @ 0xca + .4byte ScrCmd_nop1 @ 0xcb + .4byte ScrCmd_nop1 @ 0xcc + .4byte ScrCmd_setmonobedient @ 0xcd + .4byte ScrCmd_checkmonobedience @ 0xce + .4byte ScrCmd_gotoram @ 0xcf + .4byte ScrCmd_nop1 @ 0xd0 + .4byte ScrCmd_warpD1 @ 0xd1 + .4byte ScrCmd_setmonmetlocation @ 0xd2 + .4byte ScrCmd_moverotatingtileobjects @ 0xd3 + .4byte ScrCmd_turnrotatingtileobjects @ 0xd4 + .4byte ScrCmd_initrotatingtilepuzzle @ 0xd5 + .4byte ScrCmd_freerotatingtilepuzzle @ 0xd6 + .4byte ScrCmd_warpmossdeepgym @ 0xd7 + .4byte ScrCmd_cmdD8 @ 0xd8 + .4byte ScrCmd_cmdD9 @ 0xd9 + .4byte ScrCmd_closebraillemessage @ 0xda + .4byte ScrCmd_cmdDB @ 0xdb + .4byte ScrCmd_fadescreenswapbuffers @ 0xdc + .4byte ScrCmd_buffertrainerclassname @ 0xdd + .4byte ScrCmd_buffertrainername @ 0xde + .4byte ScrCmd_pokenavcall @ 0xdf + .4byte ScrCmd_warpsootopolislegend @ 0xe0 + .4byte ScrCmd_buffercontesttype @ 0xe1 + .4byte ScrCmd_bufferitemnameplural @ 0xe2 gScriptCmdTableEnd:: @ 81DBA08 .4byte ScrCmd_nop From 46d748a219bf6d34519d89e1d351b722a2ea9521 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 27 Sep 2020 17:40:30 -0400 Subject: [PATCH 021/177] Create pull_request_template.md --- .github/pull_request_template.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000..0b38a656c4 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,17 @@ +# Pull request into pret/pokeemerald + +## Instructions +Please complete both the questionnaire and the checklist below. This is required for the PR to be merged. Failure to do this may result in a ban from contributions. + +## Questionnaire +1. What is your Discord username? (name#numbers, e.g. PikalaxALT#5823) +2. What is the purpose of this pull request? (decompilation, documentation, bug fixes, typo correction, code style refactor) + + +## Checklist +- [ ] I am a member of the [pret discord server](https://discord.gg/d5dubZ3). +- [ ] I have run `make compare modern` on my local machine to ensure that the project compiles correctly. +- [ ] If I am fixing a bug or undefined behavior in the modern build, I have documented the bug and tested the fix locally. +- [ ] My changes are not informed by the leaked source code, or I have disclosed my use of the leaks in the discord. +- [ ] I have answered all questions truthfully, including this one. +- [ ] I am not a robot. From 70f7d4f256fc76caa3d132908e59598db5ff4549 Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Sun, 27 Sep 2020 17:59:21 -0500 Subject: [PATCH 022/177] More concise pull request template --- .github/pull_request_template.md | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0b38a656c4..9c61ba2bee 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,17 +1,23 @@ -# Pull request into pret/pokeemerald + -## Instructions -Please complete both the questionnaire and the checklist below. This is required for the PR to be merged. Failure to do this may result in a ban from contributions. - -## Questionnaire -1. What is your Discord username? (name#numbers, e.g. PikalaxALT#5823) -2. What is the purpose of this pull request? (decompilation, documentation, bug fixes, typo correction, code style refactor) +## Description + +## Type of changes + +- [ ] Decompilation (matching, fixing nonmatching, fakematching, etc.) +- [ ] Documentation (naming symbols, commenting, etc.) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] Style (code style refactors, typo, etc.) +- [ ] Other: ## Checklist -- [ ] I am a member of the [pret discord server](https://discord.gg/d5dubZ3). -- [ ] I have run `make compare modern` on my local machine to ensure that the project compiles correctly. + +- [ ] I am a member of the [pret Discord server](https://discord.gg/d5dubZ3). +- [ ] `make compare` and `make compare modern` on my local machine outputs ![OK](https://cdn.discordapp.com/emojis/504128071524286475.png?v=1). +- [ ] My code follows the code style of this project. - [ ] If I am fixing a bug or undefined behavior in the modern build, I have documented the bug and tested the fix locally. -- [ ] My changes are not informed by the leaked source code, or I have disclosed my use of the leaks in the discord. -- [ ] I have answered all questions truthfully, including this one. -- [ ] I am not a robot. +- [ ] All my usage, if any, of the leaked source code has been disclosed in pret's server. + +## **Discord contact info** + From 933e180dd6fd721742af60cd209af11bab7e5ca4 Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Sun, 27 Sep 2020 18:09:35 -0500 Subject: [PATCH 023/177] Remove breaking change line --- .github/pull_request_template.md | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 9c61ba2bee..a56a168b83 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -7,7 +7,6 @@ - [ ] Decompilation (matching, fixing nonmatching, fakematching, etc.) - [ ] Documentation (naming symbols, commenting, etc.) -- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Style (code style refactors, typo, etc.) - [ ] Other: From 7c697e9536bb07fcde5646209f24adfc9b088365 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 28 Sep 2020 07:22:47 -0400 Subject: [PATCH 024/177] Resolve fakematch CopyGlyphToWindow. --- gflib/text.c | 98 ++++++++++++++++++++++------------------------------ 1 file changed, 41 insertions(+), 57 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 89b47ca219..a86564985e 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -462,40 +462,37 @@ u8 GetLastTextColor(u8 colorType) } } -#define GLYPH_COPY(fromY_, toY_, fromX_, toX_, unk) \ - { \ - u32 i, j, *ptr, toY, fromX, toX, r5, bits; \ - u8 *dst; \ - j = fromX_; \ - i = fromY_; \ - ptr = unk; \ - toX = toX_; \ - toY = toY_; \ - fromX = fromX_; \ - \ - for (; i < toY; i++) \ - { \ - asm("":::"sl"); /* NONMATCHING */ \ - r5 = *(ptr++); \ - for (j = fromX; j < toX; j++) \ - { \ - const u32 toOrr = r5 & 0xF; \ - if (toOrr) \ - { \ - dst = windowTiles + ((j / 8) * 32) + ((j % 8) / 2) + ((i / 8) * widthOffset) + ((i % 8) * 4); \ - bits = ((j & 1) * 4); \ - *dst = (toOrr << bits) | (*dst & (0xF0 >> bits)); \ - } \ - r5 >>= 4; \ - } \ - } \ +inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 j, u32 i, u32 *ptr, s32 width, s32 height) // +{ + // WHYYYYYYYYY is dummyX needed aaaaaaaaaaaaaaaaaaaaa + u32 xAdd, yAdd, r5, bits, toOrr, dummyX; + u8 *dst; + + xAdd = j + width; + yAdd = i + height; + dummyX = j; // :masuda: + for (; i < yAdd; i++) + { + r5 = *ptr++; + for (j = dummyX; j < xAdd; j++) + { + // This inline assignent turns out to be needed as well. + if ((toOrr = r5 & 0xF)) + { + dst = windowTiles + ((j / 8) * 32) + ((j % 8) / 2) + ((i / 8) * widthOffset) + ((i % 8) * 4); + bits = ((j & 1) * 4); + *dst = (toOrr << bits) | (*dst & (0xF0 >> bits)); + } + r5 >>= 4; + } } +} void CopyGlyphToWindow(struct TextPrinter *textPrinter) { struct Window *win; struct WindowTemplate *winTempl; - struct Struct_03002F90 *unkStruct; + u32 *unkStruct; u32 currX, currY, widthOffset; s32 r4, r0; u8 *windowTiles; @@ -503,17 +500,18 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) win = &gWindows[textPrinter->printerTemplate.windowId]; winTempl = &win->window; - r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX; - if (r4 > gUnknown_03002F90.width) + // these inline assignments are required as well to match. Compiler is super fucking sensitive and needs like SEVERAL changes. + if ((r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX) > gUnknown_03002F90.width) r4 = gUnknown_03002F90.width; - r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY; - if (r0 > gUnknown_03002F90.height) + if ((r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY) > gUnknown_03002F90.height) r0 = gUnknown_03002F90.height; currX = textPrinter->printerTemplate.currentX; currY = textPrinter->printerTemplate.currentY; - unkStruct = &gUnknown_03002F90; + // i could only get this to work as a u32 due to lvalue bullshit and the macro + // really needs to be an inline to avoid temp bullshit below. It might work as a macro too, but... + unkStruct = (u32 *)&gUnknown_03002F90.unk0; windowTiles = win->tileData; widthOffset = winTempl->width * 32; @@ -521,45 +519,31 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) { if (r0 < 9) { - GLYPH_COPY(currY, currY + r0, currX, currX + r4, unkStruct->unk0); + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, r4, r0); } else { - u32 temp; - GLYPH_COPY(currY, currY + 8, currX, currX + r4, unkStruct->unk0); - - temp = currY + 8; - GLYPH_COPY(temp, (temp - 8) + r0, currX, currX + r4, unkStruct->unk40); + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, r4, 8); + GLYPH_COPY(windowTiles, widthOffset, currX, currY + 8, unkStruct + 16, r4, r0 - 8); } } else { - u32 temp; if (r0 < 9) { - GLYPH_COPY(currY, currY + r0, currX, currX + 8, unkStruct->unk0); - - temp = currX + 8; - GLYPH_COPY(currY, currY + r0, temp, (temp - 8) + r4, unkStruct->unk20); + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, 8, r0); + GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY, unkStruct + 8, r4 - 8, r0); } else { - GLYPH_COPY(currY, currY + 8, currX, currX + 8, unkStruct->unk0); - - temp = currX + 8; - GLYPH_COPY(currY, currY + 8, temp, temp - 8 + r4, unkStruct->unk20); - - temp = currY + 8; - GLYPH_COPY(temp, temp - 8 + r0, currX, currX + 8, unkStruct->unk40); - { - u32 tempX, tempY; - tempX = currX + 8; - tempY = currY + 8; - GLYPH_COPY(tempY, tempY - 8 + r0, tempX, tempX - 8 + r4, unkStruct->unk60); - } + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, 8, 8); + GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY, unkStruct + 8, r4 - 8, 8); + GLYPH_COPY(windowTiles, widthOffset, currX, currY + 8, unkStruct + 16, 8, r0 - 8); + GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY + 8, unkStruct + 24, r4 - 8, r0 - 8); } } } + void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) { struct Window *window; From 7f1fa7274655836bd1f5481de83952e5d3fef78e Mon Sep 17 00:00:00 2001 From: Revo Date: Mon, 28 Sep 2020 12:17:06 -0400 Subject: [PATCH 025/177] :masuda: --- gflib/text.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gflib/text.c b/gflib/text.c index a86564985e..7694941b80 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -470,7 +470,7 @@ inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 j, u32 i, u3 xAdd = j + width; yAdd = i + height; - dummyX = j; // :masuda: + dummyX = j; for (; i < yAdd; i++) { r5 = *ptr++; From 22c6c034296871cb1094d53ac3fc53cd2c5dbf8e Mon Sep 17 00:00:00 2001 From: Revo Date: Tue, 29 Sep 2020 10:41:35 -0400 Subject: [PATCH 026/177] Remove unnecessary comments --- gflib/text.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 7694941b80..a995c70a12 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -464,7 +464,6 @@ u8 GetLastTextColor(u8 colorType) inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 j, u32 i, u32 *ptr, s32 width, s32 height) // { - // WHYYYYYYYYY is dummyX needed aaaaaaaaaaaaaaaaaaaaa u32 xAdd, yAdd, r5, bits, toOrr, dummyX; u8 *dst; @@ -476,7 +475,6 @@ inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 j, u32 i, u3 r5 = *ptr++; for (j = dummyX; j < xAdd; j++) { - // This inline assignent turns out to be needed as well. if ((toOrr = r5 & 0xF)) { dst = windowTiles + ((j / 8) * 32) + ((j % 8) / 2) + ((i / 8) * widthOffset) + ((i % 8) * 4); @@ -500,7 +498,6 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) win = &gWindows[textPrinter->printerTemplate.windowId]; winTempl = &win->window; - // these inline assignments are required as well to match. Compiler is super fucking sensitive and needs like SEVERAL changes. if ((r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX) > gUnknown_03002F90.width) r4 = gUnknown_03002F90.width; @@ -509,8 +506,6 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) currX = textPrinter->printerTemplate.currentX; currY = textPrinter->printerTemplate.currentY; - // i could only get this to work as a u32 due to lvalue bullshit and the macro - // really needs to be an inline to avoid temp bullshit below. It might work as a macro too, but... unkStruct = (u32 *)&gUnknown_03002F90.unk0; windowTiles = win->tileData; widthOffset = winTempl->width * 32; From 52598983250fd8ad7b66ff2b9d77046859f169c8 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 1 Oct 2020 17:20:38 -0400 Subject: [PATCH 027/177] Replace POKEMON_SLOTS_NUMBER --- include/data.h | 1 - include/global.h | 5 ++--- src/apprentice.c | 1 - src/battle_ai_script_commands.c | 1 - src/battle_ai_switch_items.c | 1 - src/battle_anim_effects_3.c | 1 - src/battle_anim_mons.c | 1 - src/battle_anim_sound_tasks.c | 1 - src/battle_controllers.c | 1 - src/battle_dome.c | 1 - src/battle_factory.c | 1 - src/battle_gfx_sfx_util.c | 1 - src/battle_interface.c | 1 - src/battle_main.c | 1 - src/battle_pike.c | 1 - src/battle_pyramid.c | 1 - src/battle_script_commands.c | 1 - src/battle_setup.c | 1 - src/battle_tent.c | 1 - src/battle_tower.c | 1 - src/battle_tv.c | 1 - src/battle_util.c | 1 - src/birch_pc.c | 1 - src/braille_puzzles.c | 1 - src/contest.c | 1 - src/credits.c | 1 - src/data.c | 1 - src/data/bard_music/pokemon.h | 1 - src/data/contest_opponents.h | 1 - src/data/easy_chat/easy_chat_group_pokemon.h | 2 -- src/data/easy_chat/easy_chat_group_pokemon2.h | 2 -- src/data/lilycove_lady.h | 1 - src/daycare.c | 1 - src/decompress.c | 1 - src/dodrio_berry_picking.c | 1 - src/easy_chat.c | 1 - src/ereader_helpers.c | 1 - src/evolution_scene.c | 1 - src/field_player_avatar.c | 1 - src/field_poison.c | 1 - src/field_specials.c | 1 - src/frontier_util.c | 1 - src/hall_of_fame.c | 1 - src/intro.c | 1 - src/link_rfu_2.c | 1 - src/lottery_corner.c | 1 - src/mail.c | 1 - src/mail_data.c | 1 - src/main_menu.c | 1 - src/match_call.c | 1 - src/menu_specialized.c | 1 - src/mevent2.c | 1 - src/mevent_801BAAC.c | 1 - src/mystery_event_script.c | 1 - src/overworld.c | 1 - src/party_menu.c | 1 - src/pokeball.c | 1 - src/pokedex.c | 1 - src/pokedex_area_screen.c | 1 - src/pokemon.c | 1 - src/pokemon_animation.c | 1 - src/pokemon_icon.c | 1 - src/pokemon_jump.c | 1 - src/pokemon_size_record.c | 1 - src/pokemon_storage_system.c | 1 - src/pokemon_summary_screen.c | 1 - src/pokenav_conditions_1.c | 1 - src/pokenav_match_call_2.c | 1 - src/rayquaza_scene.c | 1 - src/record_mixing.c | 1 - src/reshow_battle_screen.c | 1 - src/roamer.c | 1 - src/roulette.c | 1 - src/script_pokemon_util.c | 1 - src/secret_base.c | 1 - src/starter_choose.c | 1 - src/trade.c | 1 - src/trainer_hill.c | 1 - src/trainer_pokemon_sprites.c | 1 - src/tv.c | 1 - src/union_room.c | 1 - src/wild_encounter.c | 1 - 82 files changed, 2 insertions(+), 86 deletions(-) diff --git a/include/data.h b/include/data.h index 49b98663ac..260c18152c 100644 --- a/include/data.h +++ b/include/data.h @@ -2,7 +2,6 @@ #define GUARD_DATA_H #include "constants/moves.h" -#include "constants/species.h" #define SPECIES_SHINY_TAG 500 diff --git a/include/global.h b/include/global.h index 8c51670410..f5781bcb4d 100644 --- a/include/global.h +++ b/include/global.h @@ -8,6 +8,7 @@ #include "constants/global.h" #include "constants/flags.h" #include "constants/vars.h" +#include "constants/species.h" // Prevent cross-jump optimization. #define BLOCK_CROSS_JUMP asm(""); @@ -65,8 +66,6 @@ // Converts a Q24.8 fixed-point format number to a regular integer #define Q_24_8_TO_INT(n) ((int)((n) >> 8)) -#define POKEMON_SLOTS_NUMBER 412 - #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) @@ -115,7 +114,7 @@ #define ROUND_BITS_TO_BYTES(numBits)(((numBits) / 8) + (((numBits) % 8) ? 1 : 0)) -#define DEX_FLAGS_NO (ROUND_BITS_TO_BYTES(POKEMON_SLOTS_NUMBER)) +#define DEX_FLAGS_NO (ROUND_BITS_TO_BYTES(NUM_SPECIES)) #define NUM_FLAG_BYTES (ROUND_BITS_TO_BYTES(FLAGS_COUNT)) struct Coords8 diff --git a/src/apprentice.c b/src/apprentice.c index 3dc33cad49..ad157f301e 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -27,7 +27,6 @@ #include "constants/items.h" #include "constants/pokemon.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" #include "constants/moves.h" diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 032e5f407f..1fd0642ad1 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -14,7 +14,6 @@ #include "constants/battle_ai.h" #include "constants/battle_move_effects.h" #include "constants/moves.h" -#include "constants/species.h" #define AI_ACTION_DONE 0x0001 #define AI_ACTION_FLEE 0x0002 diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 2a5a83e0d7..1663c25616 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -9,7 +9,6 @@ #include "constants/item_effects.h" #include "constants/items.h" #include "constants/moves.h" -#include "constants/species.h" // this file's functions static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng); diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 58d3351975..abb3223e06 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -21,7 +21,6 @@ #include "constants/battle_anim.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/weather.h" extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index d9993ab953..d626e16041 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -15,7 +15,6 @@ #include "trig.h" #include "util.h" #include "constants/battle_anim.h" -#include "constants/species.h" #define GET_UNOWN_LETTER(personality) (( \ (((personality & 0x03000000) >> 24) << 6) \ diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index 71c81235af..eed1638166 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -5,7 +5,6 @@ #include "sound.h" #include "task.h" #include "constants/battle_anim.h" -#include "constants/species.h" // this file's functions static void sub_8158B98(u8 taskId); diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 7f78c1ac9e..3ebc5d3bd8 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -13,7 +13,6 @@ #include "task.h" #include "util.h" #include "constants/abilities.h" -#include "constants/species.h" static EWRAM_DATA u8 sLinkSendTaskId = 0; static EWRAM_DATA u8 sLinkReceiveTaskId = 0; diff --git a/src/battle_dome.c b/src/battle_dome.c index 2f6df5dcaf..e504115a61 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -33,7 +33,6 @@ #include "graphics.h" #include "constants/battle_dome.h" #include "constants/frontier_util.h" -#include "constants/species.h" #include "constants/moves.h" #include "constants/pokemon.h" #include "constants/trainers.h" diff --git a/src/battle_factory.c b/src/battle_factory.c index 940e71f7da..021081483e 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -8,7 +8,6 @@ #include "frontier_util.h" #include "battle_tower.h" #include "random.h" -#include "constants/species.h" #include "constants/battle_ai.h" #include "constants/battle_factory.h" #include "constants/battle_frontier.h" diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index e3e63f0e84..d044f2fbdf 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -17,7 +17,6 @@ #include "sound.h" #include "party_menu.h" #include "m4a.h" -#include "constants/species.h" #include "decompress.h" #include "data.h" #include "palette.h" diff --git a/src/battle_interface.c b/src/battle_interface.c index 719af6a064..adbef019d8 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -15,7 +15,6 @@ #include "util.h" #include "gpu_regs.h" #include "battle_message.h" -#include "constants/species.h" #include "pokedex.h" #include "palette.h" #include "international_string_util.h" diff --git a/src/battle_main.c b/src/battle_main.c index bf0fdc1aad..bdde96be28 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -58,7 +58,6 @@ #include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" #include "cable_club.h" diff --git a/src/battle_pike.c b/src/battle_pike.c index 6b31419a5c..a161b88b81 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -21,7 +21,6 @@ #include "constants/layouts.h" #include "constants/rgb.h" #include "constants/trainers.h" -#include "constants/species.h" #include "constants/moves.h" #include "constants/party_menu.h" #include "constants/battle_pike.h" diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 9e881d3a3f..203b572eba 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -35,7 +35,6 @@ #include "constants/layouts.h" #include "constants/maps.h" #include "constants/moves.h" -#include "constants/species.h" #include "constants/trainers.h" extern const struct MapLayout *const gMapLayouts[]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fca2b38796..3b77df294d 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16,7 +16,6 @@ #include "random.h" #include "battle_controllers.h" #include "battle_interface.h" -#include "constants/species.h" #include "constants/songs.h" #include "constants/trainers.h" #include "constants/battle_anim.h" diff --git a/src/battle_setup.c b/src/battle_setup.c index 3c20d9ffe5..7b9d13980f 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -44,7 +44,6 @@ #include "constants/songs.h" #include "constants/map_types.h" #include "constants/maps.h" -#include "constants/species.h" #include "constants/trainers.h" #include "constants/trainer_hill.h" diff --git a/src/battle_tent.c b/src/battle_tent.c index 0a03fc1675..ba0c14dff0 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -17,7 +17,6 @@ #include "constants/items.h" #include "constants/layouts.h" #include "constants/region_map_sections.h" -#include "constants/species.h" #include "constants/trainers.h" // This file's functions. diff --git a/src/battle_tower.c b/src/battle_tower.c index e0ff3fe26a..9852a0eac1 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -35,7 +35,6 @@ #include "constants/trainers.h" #include "constants/event_objects.h" #include "constants/moves.h" -#include "constants/species.h" #include "constants/easy_chat.h" #include "constants/tv.h" diff --git a/src/battle_tv.c b/src/battle_tv.c index e3dec9a6cf..dea7116090 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -6,7 +6,6 @@ #include "constants/battle_string_ids.h" #include "constants/battle_anim.h" #include "constants/moves.h" -#include "constants/species.h" #include "battle_message.h" #include "tv.h" diff --git a/src/battle_util.c b/src/battle_util.c index 31ed0b3fe7..f98b088e05 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -21,7 +21,6 @@ #include "constants/hold_effects.h" #include "constants/items.h" #include "constants/moves.h" -#include "constants/species.h" #include "constants/weather.h" #include "battle_arena.h" #include "battle_pyramid.h" diff --git a/src/birch_pc.c b/src/birch_pc.c index 5b574b05d7..1f0ab23498 100644 --- a/src/birch_pc.c +++ b/src/birch_pc.c @@ -2,7 +2,6 @@ #include "event_data.h" #include "field_message_box.h" #include "pokedex.h" -#include "constants/species.h" #include "strings.h" bool16 ScriptGetPokedexInfo(void) diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index a1ea44e26e..aa6664f356 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -8,7 +8,6 @@ #include "constants/field_effects.h" #include "constants/maps.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/metatile_labels.h" #include "fieldmap.h" #include "party_menu.h" diff --git a/src/contest.c b/src/contest.c index 612d79562d..8412245774 100644 --- a/src/contest.c +++ b/src/contest.c @@ -42,7 +42,6 @@ #include "constants/moves.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/tv.h" // This file's functions. diff --git a/src/credits.c b/src/credits.c index 86a659d5a7..41d1c16866 100644 --- a/src/credits.c +++ b/src/credits.c @@ -22,7 +22,6 @@ #include "pokedex.h" #include "event_data.h" #include "random.h" -#include "constants/species.h" enum { diff --git a/src/data.c b/src/data.c index 8d6640223c..29d1835acc 100644 --- a/src/data.c +++ b/src/data.c @@ -5,7 +5,6 @@ #include "graphics.h" #include "constants/items.h" #include "constants/moves.h" -#include "constants/species.h" #include "constants/trainers.h" #include "constants/battle_ai.h" diff --git a/src/data/bard_music/pokemon.h b/src/data/bard_music/pokemon.h index 112a5870bc..5ccf2f830d 100644 --- a/src/data/bard_music/pokemon.h +++ b/src/data/bard_music/pokemon.h @@ -1,6 +1,5 @@ #ifndef GUARD_DATA_BARD_MUSIC_POKEMON_H #define GUARD_DATA_BARD_MUSIC_POKEMON_H -#include "constants/species.h" const u16 gNumSpeciesNames = NUM_SPECIES; diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 6de931ef20..127457bbec 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -1,7 +1,6 @@ #include "global.h" #include "contest.h" -#include "constants/species.h" #define CONTEST_OPPONENT_JIMMY 0 #define CONTEST_OPPONENT_EDITH 1 diff --git a/src/data/easy_chat/easy_chat_group_pokemon.h b/src/data/easy_chat/easy_chat_group_pokemon.h index 9993a51446..a6e1c48ea3 100755 --- a/src/data/easy_chat/easy_chat_group_pokemon.h +++ b/src/data/easy_chat/easy_chat_group_pokemon.h @@ -1,5 +1,3 @@ -#include "constants/species.h" - const u16 gEasyChatGroup_Pokemon[] = { SPECIES_ABRA, SPECIES_ABSOL, diff --git a/src/data/easy_chat/easy_chat_group_pokemon2.h b/src/data/easy_chat/easy_chat_group_pokemon2.h index 35b0a03cbb..44dce0cc84 100755 --- a/src/data/easy_chat/easy_chat_group_pokemon2.h +++ b/src/data/easy_chat/easy_chat_group_pokemon2.h @@ -1,5 +1,3 @@ -#include "constants/species.h" - const u16 gEasyChatGroup_Pokemon2[] = { SPECIES_ABRA, SPECIES_AERODACTYL, diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h index 738a6dc120..cf6c0c6488 100644 --- a/src/data/lilycove_lady.h +++ b/src/data/lilycove_lady.h @@ -1,7 +1,6 @@ #include "constants/easy_chat.h" #include "constants/event_objects.h" #include "constants/items.h" -#include "constants/species.h" #include "constants/moves.h" static const u16 sContestLadyMonGfxId[] = diff --git a/src/daycare.c b/src/daycare.c index 69043a5139..31014bf7f4 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -22,7 +22,6 @@ #include "constants/items.h" #include "constants/moves.h" #include "constants/region_map_sections.h" -#include "constants/species.h" // this file's functions static void ClearDaycareMonMail(struct DayCareMail *mail); diff --git a/src/decompress.c b/src/decompress.c index c303f214f9..0077533037 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -4,7 +4,6 @@ #include "decompress.h" #include "pokemon.h" #include "text.h" -#include "constants/species.h" EWRAM_DATA ALIGNED(4) u8 gDecompressionBuffer[0x4000] = {0}; diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 9cbc73c73e..66eacc5f92 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -24,7 +24,6 @@ #include "window.h" #include "constants/items.h" #include "constants/songs.h" -#include "constants/species.h" struct DodrioSubstruct_0160 { diff --git a/src/easy_chat.c b/src/easy_chat.c index e08f0bb75c..2e58dec0d2 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -32,7 +32,6 @@ #include "constants/lilycove_lady.h" #include "constants/mauville_old_man.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/rgb.h" #define EZCHAT_TASK_STATE 0 diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index bdfbebf6b1..944d1d7289 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -12,7 +12,6 @@ #include "trainer_hill.h" #include "constants/easy_chat.h" #include "constants/trainers.h" -#include "constants/species.h" #include "constants/moves.h" #include "constants/items.h" diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 61065367cc..22376a4783 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -30,7 +30,6 @@ #include "trade.h" #include "util.h" #include "constants/battle_string_ids.h" -#include "constants/species.h" #include "constants/songs.h" #include "constants/rgb.h" diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index e907af5b9e..f8c4e79f1b 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -29,7 +29,6 @@ #include "constants/maps.h" #include "constants/moves.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainer_types.h" static EWRAM_DATA u8 gUnknown_0203734C = 0; diff --git a/src/field_poison.c b/src/field_poison.c index 9d3ca047c7..132ce571e1 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -16,7 +16,6 @@ #include "trainer_hill.h" #include "constants/field_poison.h" #include "constants/party_menu.h" -#include "constants/species.h" static bool32 IsMonValidSpecies(struct Pokemon *pokemon) { diff --git a/src/field_specials.c b/src/field_specials.c index 57b7501454..b287a071a0 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -60,7 +60,6 @@ #include "constants/script_menu.h" #include "constants/slot_machine.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/moves.h" #include "constants/party_menu.h" #include "constants/battle_frontier.h" diff --git a/src/frontier_util.c b/src/frontier_util.c index a36e2ec9f4..d0dfa61f3c 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -31,7 +31,6 @@ #include "constants/battle_frontier.h" #include "constants/frontier_util.h" #include "constants/trainers.h" -#include "constants/species.h" #include "constants/game_stat.h" #include "constants/moves.h" #include "constants/items.h" diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index a13543d6a0..7b63950d1d 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -18,7 +18,6 @@ #include "window.h" #include "credits.h" #include "bg.h" -#include "constants/species.h" #include "constants/game_stat.h" #include "util.h" #include "string_util.h" diff --git a/src/intro.c b/src/intro.c index eca8b84b16..7dab2ad46b 100644 --- a/src/intro.c +++ b/src/intro.c @@ -21,7 +21,6 @@ #include "intro.h" #include "graphics.h" #include "sound.h" -#include "constants/species.h" #include "util.h" #include "title_screen.h" #include "constants/rgb.h" diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 41b28ec5f3..3db24aaece 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -15,7 +15,6 @@ #include "string_util.h" #include "task.h" #include "text.h" -#include "constants/species.h" #include "save.h" #include "mystery_gift.h" diff --git a/src/lottery_corner.c b/src/lottery_corner.c index 5f68ad5169..2cbf0a8089 100644 --- a/src/lottery_corner.c +++ b/src/lottery_corner.c @@ -4,7 +4,6 @@ #include "pokemon.h" #include "constants/items.h" #include "random.h" -#include "constants/species.h" #include "string_util.h" #include "text.h" #include "pokemon_storage_system.h" diff --git a/src/mail.c b/src/mail.c index 55bc9ed003..04464f06b1 100644 --- a/src/mail.c +++ b/src/mail.c @@ -16,7 +16,6 @@ #include "gpu_regs.h" #include "bg.h" #include "pokemon_icon.h" -#include "constants/species.h" #include "malloc.h" #include "easy_chat.h" #include "constants/rgb.h" diff --git a/src/mail_data.c b/src/mail_data.c index b0b05e8fe0..e0553af993 100644 --- a/src/mail_data.c +++ b/src/mail_data.c @@ -3,7 +3,6 @@ #include "constants/items.h" #include "pokemon.h" #include "pokemon_icon.h" -#include "constants/species.h" #include "text.h" #include "international_string_util.h" diff --git a/src/main_menu.c b/src/main_menu.c index e8403cdb17..5b39b6d456 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -3,7 +3,6 @@ #include "bg.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" #include "decompress.h" #include "event_data.h" diff --git a/src/match_call.c b/src/match_call.c index 1899eabf03..944d85b8f2 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -32,7 +32,6 @@ #include "constants/maps.h" #include "constants/region_map_sections.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" struct MatchCallState diff --git a/src/menu_specialized.c b/src/menu_specialized.c index f9da20e119..327dcefc4e 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -25,7 +25,6 @@ #include "window.h" #include "constants/berry.h" #include "constants/songs.h" -#include "constants/species.h" #include "gba/io_reg.h" extern const struct CompressedSpriteSheet gMonFrontPicTable[]; diff --git a/src/mevent2.c b/src/mevent2.c index 7a2edc7f5d..3209c585a3 100755 --- a/src/mevent2.c +++ b/src/mevent2.c @@ -10,7 +10,6 @@ #include "new_game.h" #include "mevent.h" #include "constants/mevent.h" -#include "constants/species.h" static EWRAM_DATA bool32 gUnknown_02022C70 = FALSE; diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c index 847449c450..d732e3045d 100644 --- a/src/mevent_801BAAC.c +++ b/src/mevent_801BAAC.c @@ -1,5 +1,4 @@ #include "global.h" -#include "constants/species.h" #include "bg.h" #include "gpu_regs.h" #include "palette.h" diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index 76f340c605..beb1bf45d5 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -9,7 +9,6 @@ #include "pokemon.h" #include "pokemon_size_record.h" #include "script.h" -#include "constants/species.h" #include "strings.h" #include "string_util.h" #include "text.h" diff --git a/src/overworld.c b/src/overworld.c index 2d798f2ec7..223e6e1522 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -65,7 +65,6 @@ #include "constants/maps.h" #include "constants/region_map_sections.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainer_hill.h" #include "constants/weather.h" diff --git a/src/party_menu.c b/src/party_menu.c index e509ef6e09..1d49523756 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -74,7 +74,6 @@ #include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #define PARTY_PAL_SELECTED (1 << 0) #define PARTY_PAL_FAINTED (1 << 1) diff --git a/src/pokeball.c b/src/pokeball.c index b176677bd3..92081a296e 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -13,7 +13,6 @@ #include "trig.h" #include "util.h" #include "constants/songs.h" -#include "constants/species.h" extern struct MusicPlayerInfo gMPlayInfo_BGM; diff --git a/src/pokedex.c b/src/pokedex.c index d375a0afc7..803b6019c3 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -28,7 +28,6 @@ #include "window.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" enum { diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index fdbd2f40c5..7a3b38dc2a 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -20,7 +20,6 @@ #include "constants/region_map_sections.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #define AREA_SCREEN_WIDTH 32 #define AREA_SCREEN_HEIGHT 20 diff --git a/src/pokemon.c b/src/pokemon.c index 30f0b0e73b..7d384de3da 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -44,7 +44,6 @@ #include "constants/layouts.h" #include "constants/moves.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" struct SpeciesItem diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index e63a2cef1d..f69bccb997 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -8,7 +8,6 @@ #include "util.h" #include "constants/battle_anim.h" #include "constants/rgb.h" -#include "constants/species.h" struct UnkAnimStruct { diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 7d8c65d7cb..b85a291514 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -4,7 +4,6 @@ #include "palette.h" #include "pokemon_icon.h" #include "sprite.h" -#include "constants/species.h" #define POKE_ICON_BASE_PAL_TAG 56000 diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 84d869a1ac..b6c557cabb 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -29,7 +29,6 @@ #include "pokemon_jump.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" struct PokemonJump1_MonInfo { diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index 914d689255..f8b3619124 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -6,7 +6,6 @@ #include "pokemon_size_record.h" #include "string_util.h" #include "text.h" -#include "constants/species.h" #define DEFAULT_MAX_SIZE 0x8000 // was 0x8100 in Ruby/Sapphire diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index ae334504e0..b61aff350c 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -41,7 +41,6 @@ #include "constants/moves.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" struct WallpaperTable { diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index bfd849229d..c80c4c5c47 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -46,7 +46,6 @@ #include "constants/region_map_sections.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" // Screen titles (upper left) #define PSS_LABEL_WINDOW_POKEMON_INFO_TITLE 0 diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c index 488d40d130..15d55ffb83 100644 --- a/src/pokenav_conditions_1.c +++ b/src/pokenav_conditions_1.c @@ -12,7 +12,6 @@ #include "strings.h" #include "text.h" #include "constants/songs.h" -#include "constants/species.h" struct PokenavSub11 { diff --git a/src/pokenav_match_call_2.c b/src/pokenav_match_call_2.c index 4248826702..337c75ce6b 100755 --- a/src/pokenav_match_call_2.c +++ b/src/pokenav_match_call_2.c @@ -23,7 +23,6 @@ #include "constants/game_stat.h" #include "constants/region_map_sections.h" #include "constants/songs.h" -#include "constants/species.h" struct Pokenav4Struct { diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index 063e6f3248..bc6758cae7 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -14,7 +14,6 @@ #include "decompress.h" #include "sound.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/rgb.h" #include "random.h" diff --git a/src/record_mixing.c b/src/record_mixing.c index b12b716972..344c535a4d 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -5,7 +5,6 @@ #include "text.h" #include "item.h" #include "task.h" -#include "constants/species.h" #include "save.h" #include "load_save.h" #include "pokemon.h" diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 46fc4cd41d..d8d75a0e03 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -11,7 +11,6 @@ #include "battle_controllers.h" #include "link.h" #include "sprite.h" -#include "constants/species.h" #include "constants/trainers.h" #include "battle_interface.h" #include "battle_anim.h" diff --git a/src/roamer.c b/src/roamer.c index 8a67234e36..d053e5b255 100644 --- a/src/roamer.c +++ b/src/roamer.c @@ -4,7 +4,6 @@ #include "random.h" #include "roamer.h" #include "constants/maps.h" -#include "constants/species.h" enum { diff --git a/src/roulette.c b/src/roulette.c index a0d1a7dc01..b4d1c44631 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -30,7 +30,6 @@ #include "constants/coins.h" #include "constants/rgb.h" #include "constants/roulette.h" -#include "constants/species.h" #include "constants/songs.h" #define BALLS_PER_ROUND 6 diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index a7b5433f06..c9a2127acb 100755 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -22,7 +22,6 @@ #include "string_util.h" #include "tv.h" #include "constants/items.h" -#include "constants/species.h" #include "constants/tv.h" #include "constants/battle_frontier.h" diff --git a/src/secret_base.c b/src/secret_base.c index 3f69e0419e..0ee5cc7401 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -46,7 +46,6 @@ #include "constants/moves.h" #include "constants/secret_bases.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" #include "constants/tv.h" diff --git a/src/starter_choose.c b/src/starter_choose.c index 2585f34088..771db961e9 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -22,7 +22,6 @@ #include "trig.h" #include "window.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/rgb.h" #define STARTER_MON_COUNT 3 diff --git a/src/trade.c b/src/trade.c index 17aaba565a..5ba26842f1 100644 --- a/src/trade.c +++ b/src/trade.c @@ -49,7 +49,6 @@ #include "constants/moves.h" #include "constants/region_map_sections.h" #include "constants/rgb.h" -#include "constants/species.h" #include "constants/songs.h" #include "constants/union_room.h" diff --git a/src/trainer_hill.c b/src/trainer_hill.c index fcaeb060b7..1116051d33 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -29,7 +29,6 @@ #include "constants/layouts.h" #include "constants/moves.h" #include "constants/maps.h" -#include "constants/species.h" #include "constants/trainers.h" #include "constants/easy_chat.h" #include "constants/trainer_hill.h" diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index d2cb634f0b..c23047b01d 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -2,7 +2,6 @@ #include "sprite.h" #include "window.h" #include "malloc.h" -#include "constants/species.h" #include "palette.h" #include "decompress.h" #include "trainer_pokemon_sprites.h" diff --git a/src/tv.c b/src/tv.c index 7732bb9b1a..17af3edff4 100644 --- a/src/tv.c +++ b/src/tv.c @@ -42,7 +42,6 @@ #include "constants/moves.h" #include "constants/region_map_sections.h" #include "constants/script_menu.h" -#include "constants/species.h" #include "constants/tv.h" // Static type declarations diff --git a/src/union_room.c b/src/union_room.c index 05bd8cfb05..b247a69e3d 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -52,7 +52,6 @@ #include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" // States for Task_RunUnionRoom enum { diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 492a10101e..9f81a3b3ed 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -21,7 +21,6 @@ #include "constants/items.h" #include "constants/layouts.h" #include "constants/maps.h" -#include "constants/species.h" #include "constants/weather.h" extern const u8 EventScript_RepelWoreOff[]; From 187c96d6e5558208266fa0ca81e41e38854ab568 Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Fri, 2 Oct 2020 12:12:31 +0200 Subject: [PATCH 028/177] rewrite MultiBootWaitCycles as naked function Before, when compiling MultiBootWaitCycles with O3 and MODERN=1, you might have run into problems during optimizations when the compiler tried to optimize the function, even if declared NOINLINE. When rewriting this function as NAKED function, this no longer happens as the optimizer will treat it as black box and compilation will resume. --- src/multiboot.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/multiboot.c b/src/multiboot.c index c7e14392e8..19245b5b33 100644 --- a/src/multiboot.c +++ b/src/multiboot.c @@ -1,3 +1,4 @@ +#include "global.h" #include "gba/gba.h" #include "multiboot.h" @@ -435,23 +436,23 @@ static int MultiBootHandShake(struct MultiBootParam *mp) #undef must_data } -static NOINLINE void MultiBootWaitCycles(u32 cycles) +NAKED +static void MultiBootWaitCycles(u32 cycles) { - asm("mov r2, pc"); - asm("lsr r2, #24"); - asm("mov r1, #12"); - asm("cmp r2, #0x02"); - asm("beq MultiBootWaitCyclesLoop"); - - asm("mov r1, #13"); - asm("cmp r2, #0x08"); - asm("beq MultiBootWaitCyclesLoop"); - - asm("mov r1, #4"); - - asm("MultiBootWaitCyclesLoop:"); - asm("sub r0, r1"); - asm("bgt MultiBootWaitCyclesLoop"); + asm_unified("\ + mov r2, pc\n\ + lsrs r2, 24\n\ + movs r1, 12\n\ + cmp r2, 2\n\ + beq MultiBootWaitCyclesLoop\n\ + movs r1, 13\n\ + cmp r2, 8\n\ + beq MultiBootWaitCyclesLoop\n\ + movs r1, 4\n\ +MultiBootWaitCyclesLoop:\n\ + subs r0, r1\n\ + bgt MultiBootWaitCyclesLoop\n\ + bx lr\n"); } static void MultiBootWaitSendDone(void) From 5f17b07d0c7c53670ccea0c44d3c87298f4d1ee7 Mon Sep 17 00:00:00 2001 From: MeatLoaf3 <71520913+MeatLoaf3@users.noreply.github.com> Date: Fri, 2 Oct 2020 11:17:11 -0400 Subject: [PATCH 029/177] Change toOrrX and toOrrY to u8 --- gflib/blit.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gflib/blit.c b/gflib/blit.c index 26a63fe9bb..bdbb2e2fdb 100644 --- a/gflib/blit.c +++ b/gflib/blit.c @@ -76,7 +76,7 @@ void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 hei s32 yEnd; s32 multiplierY; s32 loopX, loopY; - s32 toOrr1, toOrr2; + u8 toOrr1, toOrr2; xEnd = x + width; if (xEnd > surface->width) @@ -87,8 +87,8 @@ void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 hei yEnd = surface->height; multiplierY = (surface->width + (surface->width & 7)) >> 3; - toOrr1 = (u32)(fillValue << 0x1C) >> 0x18; - toOrr2 = (fillValue & 0xF); + toOrr1 = fillValue << 4; + toOrr2 = fillValue & 0xF; for (loopY = y; loopY < yEnd; loopY++) { From 94bfc31629f5fcad47d196028ffcf8514478ca52 Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Fri, 2 Oct 2020 11:24:39 -0500 Subject: [PATCH 030/177] Eliminate most of PR template --- .github/pull_request_template.md | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index a56a168b83..c381b50f1b 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -3,20 +3,6 @@ ## Description -## Type of changes - -- [ ] Decompilation (matching, fixing nonmatching, fakematching, etc.) -- [ ] Documentation (naming symbols, commenting, etc.) -- [ ] Style (code style refactors, typo, etc.) -- [ ] Other: - -## Checklist - -- [ ] I am a member of the [pret Discord server](https://discord.gg/d5dubZ3). -- [ ] `make compare` and `make compare modern` on my local machine outputs ![OK](https://cdn.discordapp.com/emojis/504128071524286475.png?v=1). -- [ ] My code follows the code style of this project. -- [ ] If I am fixing a bug or undefined behavior in the modern build, I have documented the bug and tested the fix locally. -- [ ] All my usage, if any, of the leaked source code has been disclosed in pret's server. - ## **Discord contact info** + \ No newline at end of file From 96e4b43ce5eeedfd0142e68103e9637c973e01e0 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 3 Oct 2020 21:52:09 -0300 Subject: [PATCH 031/177] Documenting where each of the berries are generated in new_game.inc --- data/scripts/new_game.inc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/data/scripts/new_game.inc b/data/scripts/new_game.inc index f723379729..77102a001f 100644 --- a/data/scripts/new_game.inc +++ b/data/scripts/new_game.inc @@ -1,43 +1,66 @@ EventScript_ResetAllBerries:: @ 827149D + @ Route 102 setberrytree 2, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES setberrytree 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES + + @ Route 104 setberrytree 11, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES setberrytree 13, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES setberrytree 4, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES setberrytree 76, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES setberrytree 8, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES setberrytree 10, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES + + @ Route 116 setberrytree 25, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES setberrytree 26, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES setberrytree 66, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES setberrytree 67, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES + + @ Route 115 setberrytree 69, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES setberrytree 70, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES setberrytree 71, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES setberrytree 55, ITEM_TO_BERRY(ITEM_BLUK_BERRY), BERRY_STAGE_BERRIES setberrytree 56, ITEM_TO_BERRY(ITEM_BLUK_BERRY), BERRY_STAGE_BERRIES + + @ Route 103 setberrytree 5, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES setberrytree 6, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES setberrytree 7, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES + + @ Route 110 setberrytree 16, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES setberrytree 17, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES setberrytree 18, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES + + @ Route 117 setberrytree 29, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES setberrytree 28, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES setberrytree 27, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES + + @ Route 112 setberrytree 24, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES setberrytree 23, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES setberrytree 22, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES setberrytree 21, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES + + @ Route 111 setberrytree 19, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES setberrytree 20, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES setberrytree 80, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES setberrytree 81, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES + + @ Route 114 setberrytree 77, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES setberrytree 78, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES setberrytree 68, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES + + @ Route 118 setberrytree 31, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES setberrytree 33, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES + + @ Route 119 setberrytree 34, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES setberrytree 35, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES setberrytree 36, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES @@ -45,6 +68,8 @@ EventScript_ResetAllBerries:: @ 827149D setberrytree 84, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), BERRY_STAGE_BERRIES setberrytree 85, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES setberrytree 86, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES + + @ Route 120 setberrytree 37, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES setberrytree 38, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES setberrytree 39, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES @@ -55,12 +80,16 @@ EventScript_ResetAllBerries:: @ 827149D setberrytree 45, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES setberrytree 44, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES setberrytree 43, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES + + @ Route 121 setberrytree 47, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES setberrytree 48, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES setberrytree 49, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES setberrytree 50, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES setberrytree 52, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES setberrytree 53, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES + + @ Route 123 setberrytree 62, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES setberrytree 64, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES setberrytree 58, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES @@ -78,6 +107,8 @@ EventScript_ResetAllBerries:: @ 827149D setberrytree 87, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES setberrytree 88, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES setberrytree 89, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES + + @ Mirage Island setberrytree 82, ITEM_TO_BERRY(ITEM_LIECHI_BERRY), BERRY_STAGE_BERRIES return From 65a4e067378b53225536d060d10fa306b6f045c2 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 5 Oct 2020 18:48:51 -0400 Subject: [PATCH 032/177] Add ITEM6_HEAL constants, change move flags to shifts --- include/battle.h | 2 +- include/constants/item_effects.h | 5 ++++ include/constants/pokemon.h | 44 ++++++++++++++++---------------- src/data/pokemon/item_effects.h | 14 +++++----- src/pokemon.c | 16 +++++++----- 5 files changed, 44 insertions(+), 37 deletions(-) diff --git a/include/battle.h b/include/battle.h index 5a04c1eec6..e4b7730892 100644 --- a/include/battle.h +++ b/include/battle.h @@ -493,7 +493,7 @@ struct BattleScripting u8 field_20; u8 reshowMainState; u8 reshowHelperState; - u8 field_23; + u8 levelUpHP; u8 windowsType; // 0 - normal, 1 - battle arena u8 multiplayerId; u8 specialTrainerBattleType; diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index 49fcedc617..6e61c4d7f9 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -51,6 +51,11 @@ // fields 6 and onwards are item-specific arguments +// Special HP recovery amounts for ITEM4_HEAL_HP +#define ITEM6_HEAL_FULL ((u8) -1) +#define ITEM6_HEAL_HALF ((u8) -2) +#define ITEM6_HEAL_LVL_UP ((u8) -3) + // Used for GetItemEffectType. #define ITEM_EFFECT_X_ITEM 0 #define ITEM_EFFECT_RAISE_LEVEL 1 diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 52eabe71bf..4cf0bd4f03 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -239,12 +239,12 @@ #define UNOWN_FORM_COUNT 28 // Battle move flags -#define FLAG_MAKES_CONTACT 0x1 -#define FLAG_PROTECT_AFFECTED 0x2 -#define FLAG_MAGICCOAT_AFFECTED 0x4 -#define FLAG_SNATCH_AFFECTED 0x8 -#define FLAG_MIRROR_MOVE_AFFECTED 0x10 -#define FLAG_KINGSROCK_AFFECTED 0x20 +#define FLAG_MAKES_CONTACT (1 << 0) +#define FLAG_PROTECT_AFFECTED (1 << 1) +#define FLAG_MAGICCOAT_AFFECTED (1 << 2) +#define FLAG_SNATCH_AFFECTED (1 << 3) +#define FLAG_MIRROR_MOVE_AFFECTED (1 << 4) +#define FLAG_KINGSROCK_AFFECTED (1 << 5) // Growth rates #define GROWTH_MEDIUM_FAST 0 @@ -268,22 +268,22 @@ #define F_SUMMARY_SCREEN_FLIP_SPRITE 0x80 -// Evolution type flags -#define EVO_FRIENDSHIP 0x0001 // Pokémon levels up with friendship ≥ 220 -#define EVO_FRIENDSHIP_DAY 0x0002 // Pokémon levels up during the day with friendship ≥ 220 -#define EVO_FRIENDSHIP_NIGHT 0x0003 // Pokémon levels up at night with friendship ≥ 220 -#define EVO_LEVEL 0x0004 // Pokémon reaches the specified level -#define EVO_TRADE 0x0005 // Pokémon is traded -#define EVO_TRADE_ITEM 0x0006 // Pokémon is traded while it's holding the specified item -#define EVO_ITEM 0x0007 // specified item is used on Pokémon -#define EVO_LEVEL_ATK_GT_DEF 0x0008 // Pokémon reaches the specified level with attack > defense -#define EVO_LEVEL_ATK_EQ_DEF 0x0009 // Pokémon reaches the specified level with attack = defense -#define EVO_LEVEL_ATK_LT_DEF 0x000a // Pokémon reaches the specified level with attack < defense -#define EVO_LEVEL_SILCOON 0x000b // Pokémon reaches the specified level with a Silcoon personality value -#define EVO_LEVEL_CASCOON 0x000c // Pokémon reaches the specified level with a Cascoon personality value -#define EVO_LEVEL_NINJASK 0x000d // Pokémon reaches the specified level (special value for Ninjask) -#define EVO_LEVEL_SHEDINJA 0x000e // Pokémon reaches the specified level (special value for Shedinja) -#define EVO_BEAUTY 0x000f // Pokémon levels up with beauty ≥ specified value +// Evolution types +#define EVO_FRIENDSHIP 1 // Pokémon levels up with friendship ≥ 220 +#define EVO_FRIENDSHIP_DAY 2 // Pokémon levels up during the day with friendship ≥ 220 +#define EVO_FRIENDSHIP_NIGHT 3 // Pokémon levels up at night with friendship ≥ 220 +#define EVO_LEVEL 4 // Pokémon reaches the specified level +#define EVO_TRADE 5 // Pokémon is traded +#define EVO_TRADE_ITEM 6 // Pokémon is traded while it's holding the specified item +#define EVO_ITEM 7 // specified item is used on Pokémon +#define EVO_LEVEL_ATK_GT_DEF 8 // Pokémon reaches the specified level with attack > defense +#define EVO_LEVEL_ATK_EQ_DEF 9 // Pokémon reaches the specified level with attack = defense +#define EVO_LEVEL_ATK_LT_DEF 10 // Pokémon reaches the specified level with attack < defense +#define EVO_LEVEL_SILCOON 11 // Pokémon reaches the specified level with a Silcoon personality value +#define EVO_LEVEL_CASCOON 12 // Pokémon reaches the specified level with a Cascoon personality value +#define EVO_LEVEL_NINJASK 13 // Pokémon reaches the specified level (special value for Ninjask) +#define EVO_LEVEL_SHEDINJA 14 // Pokémon reaches the specified level (special value for Shedinja) +#define EVO_BEAUTY 15 // Pokémon levels up with beauty ≥ specified value #define EVOS_PER_MON 5 diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 698d97a436..1ed721e44b 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -26,12 +26,12 @@ const u8 gItemEffect_ParalyzeHeal[6] = { const u8 gItemEffect_FullRestore[7] = { [3] = ITEM3_STATUS_ALL, [4] = ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_FULL, }; const u8 gItemEffect_MaxPotion[7] = { [4] = ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_FULL, }; const u8 gItemEffect_HyperPotion[7] = { @@ -50,12 +50,12 @@ const u8 gItemEffect_FullHeal[6] = { const u8 gItemEffect_Revive[7] = { [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, - [6] = -2, + [6] = ITEM6_HEAL_HALF, }; const u8 gItemEffect_MaxRevive[7] = { [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_FULL, }; const u8 gItemEffect_FreshWater[7] = { @@ -107,7 +107,7 @@ const u8 gItemEffect_HealPowder[9] = { const u8 gItemEffect_RevivalHerb[10] = { [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = -1, + [6] = ITEM6_HEAL_FULL, [7] = -15, [8] = -15, [9] = -20, @@ -157,7 +157,7 @@ const u8 gItemEffect_BerryJuice[7] = { const u8 gItemEffect_SacredAsh[7] = { [0] = ITEM0_SACRED_ASH, [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_FULL, }; const u8 gItemEffect_HPUp[10] = { @@ -206,7 +206,7 @@ const u8 gItemEffect_RareCandy[10] = { [3] = ITEM3_LEVEL_UP, [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = 0xFD, + [6] = ITEM6_HEAL_LVL_UP, [7] = 5, [8] = 3, [9] = 2, diff --git a/src/pokemon.c b/src/pokemon.c index 7d384de3da..8767207d7b 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2836,9 +2836,9 @@ void CalculateMonStats(struct Pokemon *mon) newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10; } - gBattleScripting.field_23 = newMaxHP - oldMaxHP; - if (gBattleScripting.field_23 == 0) - gBattleScripting.field_23 = 1; + gBattleScripting.levelUpHP = newMaxHP - oldMaxHP; + if (gBattleScripting.levelUpHP == 0) + gBattleScripting.levelUpHP = 1; SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP); @@ -4912,19 +4912,21 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; } } + + // Get amount of HP to restore dataUnsigned = itemEffect[var_3C++]; switch (dataUnsigned) { - case 0xFF: + case ITEM6_HEAL_FULL: dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL) - GetMonData(mon, MON_DATA_HP, NULL); break; - case 0xFE: + case ITEM6_HEAL_HALF: dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL) / 2; if (dataUnsigned == 0) dataUnsigned = 1; break; - case 0xFD: - dataUnsigned = gBattleScripting.field_23; + case ITEM6_HEAL_LVL_UP: + dataUnsigned = gBattleScripting.levelUpHP; break; } if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL)) From 9c43bcb429bd4d4b299fc71cba909ef607a3cca2 Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Mon, 5 Oct 2020 23:33:36 -0500 Subject: [PATCH 033/177] Delete accidentally pushed file --- graphics/picture_frame/frame5_map.bin.rl.bak | Bin 1296 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 graphics/picture_frame/frame5_map.bin.rl.bak diff --git a/graphics/picture_frame/frame5_map.bin.rl.bak b/graphics/picture_frame/frame5_map.bin.rl.bak deleted file mode 100644 index c009f0a95f51190b743b762c37ca5e7755f9289e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1296 zcmXqD;9#g%7tjzO7c&Sj2$&04kc~n5u{wZ9fENw&320++C@u%c2*{#AIRR-b4#nvJ zYzB-vU`U04j({#2)FUkoSPEDPpkr%-iBQ16*uaDcY-#|@IiN&njmUxu2Iy%QJ73cP yrl*m?8fKQc0P)&kdVtztCaII49j1qxwi_528W<6Q&9M8O^pfa50}Os=U;qHD$DR5B From 8f7e212967827d5ae2cedb8e711ee1e233b25439 Mon Sep 17 00:00:00 2001 From: ExpoSeed <> Date: Mon, 5 Oct 2020 23:33:55 -0500 Subject: [PATCH 034/177] Remove *.rl in make clean --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ca282d07e6..b21ac0fa49 100644 --- a/Makefile +++ b/Makefile @@ -178,7 +178,7 @@ mostlyclean: tidy rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin rm -f $(MID_SUBDIR)/*.s - find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + + find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} + From 2b2be90a5266e294342e1759dddfe8af4d6f39f2 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 10 Oct 2020 16:17:34 -0600 Subject: [PATCH 035/177] start pokenav documentation --- include/menu_specialized.h | 12 +- include/mon_markings.h | 4 +- include/pokenav.h | 198 +++++++----- src/menu_specialized.c | 50 +-- src/mon_markings.c | 4 +- src/pokemon_storage_system.c | 2 +- src/pokemon_summary_screen.c | 2 +- src/pokenav.c | 154 +++++---- src/pokenav_conditions_1.c | 444 +++++++++++++------------- src/pokenav_conditions_2.c | 589 ++++++++++++++++++----------------- src/pokenav_conditions_3.c | 433 ++++++++++++------------- src/pokenav_main_menu.c | 146 ++++----- src/pokenav_match_call_1.c | 48 +-- src/pokenav_match_call_2.c | 114 +++---- src/pokenav_match_call_ui.c | 430 ++++++++++++------------- src/pokenav_menu_handler_1.c | 34 +- src/pokenav_menu_handler_2.c | 517 +++++++++++++++--------------- src/pokenav_region_map.c | 58 ++-- src/pokenav_ribbons_1.c | 414 ++++++++++++------------ src/pokenav_ribbons_2.c | 348 +++++++++++---------- src/use_pokeblock.c | 10 +- 21 files changed, 2043 insertions(+), 1968 deletions(-) diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 242e1c6b2f..987fca9fc2 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -23,7 +23,7 @@ struct UnknownSubStruct_81D1ED4 struct ConditionGraph { - /*0x000*/ u8 unk0[4][FLAVOR_COUNT]; + /*0x000*/ u8 stat[4][FLAVOR_COUNT]; /*0x014*/ struct UnknownSubStruct_81D1ED4 unk14[4][FLAVOR_COUNT]; /*0x064*/ struct UnknownSubStruct_81D1ED4 unk64[10][FLAVOR_COUNT]; /*0x12C*/ struct UnknownSubStruct_81D1ED4 unk12C[FLAVOR_COUNT]; @@ -32,7 +32,7 @@ struct ConditionGraph /*0x350*/ u16 unk350; /*0x352*/ u16 unk352; /*0x354*/ u8 unk354; - /*0x355*/ u8 unk355; + /*0x355*/ u8 state; }; bool8 sub_81D1C44(u8 count); @@ -41,12 +41,12 @@ u8 sub_81D1DC0(struct PlayerPCItemPageStruct *page); void sub_81D1E90(struct PlayerPCItemPageStruct *page); void sub_81D1EC0(void); void sub_81D1D04(u8 a0); -void sub_81D1ED4(struct ConditionGraph *graph); +void InitConditionGraphData(struct ConditionGraph *graph); void sub_81D2108(struct ConditionGraph *graph); -void sub_81D21DC(u8 bg); -void sub_81D20AC(struct ConditionGraph *graph); +void SetConditionGraphIOWindows(u8 bg); +void InitConditionGraphState(struct ConditionGraph *graph); void sub_81D2230(struct ConditionGraph *graph); -bool8 sub_81D20BC(struct ConditionGraph *graph); +bool8 SetupConditionGraphScanlineParams(struct ConditionGraph *graph); bool32 TransitionConditionGraph(struct ConditionGraph *graph); void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1); void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2); diff --git a/include/mon_markings.h b/include/mon_markings.h index 241b31e014..3cb04ad48c 100644 --- a/include/mon_markings.h +++ b/include/mon_markings.h @@ -29,8 +29,8 @@ bool8 sub_811F960(void); void sub_811FA90(void); void sub_811FAA4(u8 markings, s16 x, s16 y); void sub_811FAF8(void); -bool8 sub_811FBA4(void); -struct Sprite *sub_811FF94(u16 tileTag, u16 paletteTag, const u16 *palette); +bool8 MonMarkingsMenuHandleInput(void); +struct Sprite *CreateMonMarkingsSpriteWithPal(u16 tileTag, u16 paletteTag, const u16 *palette); struct Sprite *sub_811FFB4(u16 tileTag, u16 paletteTag, const u16 *palette); void sub_8120084(u8 markings, void *dest); diff --git a/include/pokenav.h b/include/pokenav.h index ed4e5a9061..34692236d1 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -27,17 +27,17 @@ struct PokenavListTemplate struct PokenavMonList *monList; struct PokenavMatchCallEntries *matchCallEntries; } list; - u16 unk4; + u16 count; u16 unk6; u8 unk8; - u8 unk9; - u8 unkA; - u8 unkB; - u8 unkC; - u8 unkD; - u8 unkE; + u8 item_X; + u8 windowWidth; + u8 listTop; + u8 maxShowed; + u8 fillValue; + u8 fontId; union { - void (*unk10_1)(struct PokenavMonList *, u8 *a1); + void (*printMonFunc)(struct PokenavMonList *item, u8 *dest); void (*unk10_2)(struct PokenavMatchCallEntries *, u8 *a1); } listFunc; void (*unk14)(u16 a0, u32 a1, u32 a2); @@ -45,9 +45,9 @@ struct PokenavListTemplate struct PokenavSub18 { - u16 unk0; - u16 unk2; - struct PokenavMonList unk4[TOTAL_BOXES_COUNT * IN_BOX_COUNT + PARTY_SIZE]; + u16 listCount; + u16 currIndex; + struct PokenavMonList monData[TOTAL_BOXES_COUNT * IN_BOX_COUNT + PARTY_SIZE]; }; // Return values of LoopedTask functions. @@ -65,6 +65,31 @@ enum POKENAV_MODE_FORCE_CALL_EXIT, // Pokenav tutorial after calling Mr. Stone }; +// TODO - refine these names +enum Substructures +{ + POKENAV_SUBSTRUCT_MAIN_MENU, + POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, + POKENAV_SUBSTRUCT_MENU_ICONS, + POKENAV_SUBSTRUCT_REGION_MAP_STATE, + POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, + POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, + POKENAV_SUBSTRUCT_MATCH_CALL_OPEN, + POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, + POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, + POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, + POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, + POKENAV_SUBSTRUCT_CONDITION_GRAPH, + POKENAV_SUBSTRUCT_MON_MARK_MENU, + POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, + POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, + POKENAV_SUBSTRUCT_15, //unused + POKENAV_SUBSTRUCT_REGION_MAP, + POKENAV_SUBSTRUCT_MATCH_CALL_LIST, + POKENAV_SUBSTRUCT_MON_LIST, + POKENAV_SUBSTRUCT_COUNT, +}; + enum { POKENAV_GFX_MAIN_MENU, @@ -97,12 +122,12 @@ enum POKENAV_REGION_MAP, POKENAV_CONDITION_PARTY, POKENAV_CONDITION_SEARCH_RESULTS, - POKENAV_MENU_9, // Condition - POKENAV_MENU_A, // Condition + POKENAV_MENU_CONDITION_GRAPH_FROM_SEARCH, // opening condition graph from search list + POKENAV_RETURN_CONDITION_SEARCH, //return to search list from condition graph POKENAV_MATCH_CALL, POKENAV_RIBBONS_MON_LIST, - POKENAV_MENU_D, // Ribbons - POKENAV_MENU_E, // Ribbons + POKENAV_RIBBONS_SUMMARY_SCREEN, + POKENAV_RIBBONS_RETURN_TO_MON_LIST, }; enum @@ -207,7 +232,7 @@ enum // Pokenav Function IDs // Indices into the LoopedTask tables for each of the main Pokenav features -enum +enum RegionMapFuncIds { POKENAV_MENU_FUNC_NONE, POKENAV_MENU_FUNC_MOVE_CURSOR, @@ -220,6 +245,19 @@ enum POKENAV_MENU_FUNC_OPEN_FEATURE, }; +enum PartyConditionFuncIds +{ + PARTY_CONDITION_FUNC_NONE, + PARTY_CONDITION_FUNC_SLIDE_MON_IN, + PARTY_CONDITION_FUNC_RETURN, + PARTY_CONDITION_FUNC_NO_TRANSITION, + PARTY_CONDITION_FUNC_SLIDE_MON_OUT, + PARTY_CONDITION_FUNC_ADD_MARKINGS, + PARTY_CONDITION_FUNC_CLOSE_MARKINGS, +}; + +#define POKENAV_MENU_FUNC_EXIT -1 + enum { POKENAV_MC_FUNC_NONE, @@ -268,17 +306,17 @@ void SetPokenavVBlankCallback(void); void SetVBlankCallback_(IntrCallback callback); // pokenav_match_call_ui.c -u32 GetSelectedMatchCall(void); +u32 GetSelectedPokenavListIndex(void); bool32 sub_81C8224(void); int MatchCall_MoveCursorUp(void); int MatchCall_MoveCursorDown(void); int MatchCall_PageDown(void); int MatchCall_PageUp(void); -bool32 sub_81C8630(void); +bool32 IsMonListLoopedTaskActive(void); void ToggleMatchCallVerticalArrows(bool32 shouldHide); void sub_81C8838(void); void sub_81C877C(void); -bool32 sub_81C8820(void); +bool32 IsMatchCallListTaskActive(void); void PrintCheckPageInfo(s16 a0); u32 GetMatchCallListTopIndex(void); void sub_81C87F0(void); @@ -300,30 +338,30 @@ void MatchCall_GetNameAndDesc(u32 idx, const u8 **desc, const u8 **name); // pokenav_main_menu.c bool32 InitPokenavMainMenu(void); void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size); -void sub_81C7850(u32 a0); -u32 sub_81C786C(void); +void RunMainMenuLoopedTask(u32 a0); +u32 IsActiveMenuLoopTaskActive(void); void LoadLeftHeaderGfxForIndex(u32 arg0); -void sub_81C7FA0(u32 arg0, bool32 arg1, bool32 arg2); +void ShowLeftHeaderGfx(u32 menugfxId, bool32 arg1, bool32 isOnRightSide); void PokenavFadeScreen(s32 fadeType); -bool32 sub_81C8010(void); +bool32 AreLeftHeaderSpritesMoving(void); void InitBgTemplates(const struct BgTemplate *templates, int count); bool32 IsPaletteFadeActive(void); void PrintHelpBarText(u32 textId); bool32 WaitForHelpBar(void); -void sub_81C78A0(void); +void SlideMenuHeaderDown(void); bool32 MainMenuLoopedTaskIsBusy(void); -void sub_81C7FDC(void); -void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette); +void SetLeftHeaderSpritesInvisibility(void); +void PokenavCopyPalette(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette); void sub_81C7B40(void); struct Sprite *PauseSpinningPokenavSprite(void); void ResumeSpinningPokenavSprite(void); -void sub_81C7E14(u32 arg0); -void sub_81C7FC4(u32 arg0, bool32 arg1); -void sub_81C7880(void); -void sub_81C7990(u32 a0, u16 a1); +void UpdateRegionMapRightHeaderTiles(u32 arg0); +void HideMainOrSubMenuLeftHeader(u32 id, bool32 onRightSide); +void SlideMenuHeaderUp(void); +void PokenavFillPalette(u32 palIndex, u16 fillValue); u32 PokenavMainMenuLoopedTaskIsActive(void); bool32 WaitForPokenavShutdownFade(void); -void sub_81C7834(void *func1, void *func2); +void SetActiveMenuLoopTasks(void *func1, void *func2); void ShutdownPokenav(void); // pokenav_menu_handler_1.c @@ -345,7 +383,7 @@ bool32 OpenPokenavMenuNotInitial(void); void CreateMenuHandlerLoopedTask(s32 ltIdx); bool32 IsMenuHandlerLoopedTaskActive(void); void FreeMenuHandlerSubstruct2(void); -void sub_81CAADC(void); +void ResetBldCnt_(void); // pokenav_match_call_1.c bool32 PokenavCallback_Init_MatchCall(void); @@ -364,7 +402,7 @@ const u8 *GetMatchCallMessageText(int index, u8 *arg1); u16 GetMatchCallOptionCursorPos(void); u16 GetMatchCallOptionId(int arg0); void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntries * arg0, u8 *str); -u8 sub_81CB0C8(int rematchIndex); +u8 GetMatchTableMapSectionId(int rematchIndex); int GetIndexDeltaOfNextCheckPageDown(int index); int GetIndexDeltaOfNextCheckPageUp(int index); bool32 IsRematchEntryRegistered(int index); @@ -385,60 +423,60 @@ void FreeRegionMapSubstruct1(void); void FreeRegionMapSubstruct2(void); // pokenav_conditions_1.c -u32 PokenavCallback_Init_7(void); -u32 PokenavCallback_Init_9(void); -u32 sub_81CD070(void); -void sub_81CD1C0(void); -bool32 sub_81CD3C4(void); -bool32 sub_81CDD5C(void); -struct ConditionGraph *sub_81CDC70(void); -u16 sub_81CDC60(void); -u16 sub_81CDC50(void); -u8 sub_81CDDB0(void); -bool32 sub_81CD548(u8 arg0); -u8 sub_81CDD7C(void); -u8 *sub_81CDD04(u8 id); -u8 *sub_81CDD24(u8 id); -u16 sub_81CDD48(void); -void *sub_81CDCB4(u8 id); -void *sub_81CDCD4(u8 id); +u32 PokenavCallback_Init_PartyCondition(void); +u32 PokenavCallback_Init_ConditionGraphFromSearch(void); +u32 GetPartyConditionCallback(void); +void FreePartyConditionSubstruct1(void); +bool32 LoadPartyConditionMenuGfx(void); +bool32 IsConditionMenuSearchMode(void); +struct ConditionGraph *GetConditionGraphDataPtr(void); +u16 GetConditionGraphCurrentMonIndex(void); +u16 GetMonListCount(void); +u8 GetMonSheen(void); +bool32 SetConditionGraphData(u8 arg0); +u8 TryGetMonMarkId(void); +u8 *GetConditionMonNameBuffer(u8 id); +u8 *GetConditionMonLocationBuffer(u8 id); +u16 GetConditionMonDataBuffer(void); +void *GetConditionMonPicGfx(u8 id); +void *GetConditionMonPal(u8 id); // pokenav_conditions_2.c -bool32 sub_81CDDD4(void); -void sub_81CDE2C(s32); -u32 sub_81CDE64(void); -void sub_81CECA0(void); -u8 sub_81CEF14(void); +bool32 OpenPartyConditionMenu(void); +void CreatePartyConditionLoopedTask(s32); +u32 IsPartyConditionLoopedTaskActive(void); +void FreePartyConditionSubstruct2(void); +u8 GetMonMarkingsData(void); // pokenav_conditions_3.c -u32 PokenavCallback_Init_8(void); -u32 PokenavCallback_Init_10(void); -u32 sub_81CEFDC(void); -void sub_81CEFF0(void); -bool32 sub_81CF330(void); -bool32 sub_81CF368(void); -void sub_81CF3A0(s32); -u32 sub_81CF3D0(void); -void sub_81CF3F8(void); +u32 PokenavCallback_Init_ConditionSearch(void); +u32 PokenavCallback_Init_ReturnToMonSearchList(void); +u32 GetConditionSearchResultsCallback(void); +void FreeSearchResultSubstruct1(void); +bool32 OpenConditionSearchResults(void); +bool32 OpenConditionSearchListFromGraph(void); +void CreateSearchResultsLoopedTask(s32); +u32 IsSearchResultLoopedTaskActive(void); +void FreeSearchResultSubstruct2(void); // pokenav_ribbons_1.c -u32 PokenavCallback_Init_12(void); -u32 PokenavCallback_Init_14(void); -u32 sub_81CFA34(void); -void sub_81CFA48(void); -bool32 sub_81CFDD0(void); -bool32 sub_81CFE08(void); -void sub_81CFE40(s32); -u32 sub_81CFE70(void); -void sub_81CFE98(void); +u32 PokenavCallback_Init_MonRibbonList(void); +u32 PokenavCallback_Init_RibbonsMonListFromSummary(void); +u32 GetRibbonsMonListCallback(void); +void FreeRibbonsMonList1(void); +bool32 OpenRibbonsMonList(void); +bool32 OpenRibbonsMonListFromRibbonsSummary(void); +void CreateRibbonsMonListLoopedTask(s32); +u32 IsRibbonsMonListLoopedTaskActive(void); +void FreeRibbonsMonList2(void); // pokenav_ribbons_2.c -u32 PokenavCallback_Init_13(void); -u32 sub_81D04A0(void); -void sub_81D04B8(void); -bool32 sub_81D0978(void); -void sub_81D09B0(s32); -u32 sub_81D09E0(void); -void sub_81D09F4(void); +u32 PokenavCallback_Init_RibbonsSummaryMenu(void); +u32 GetRibbonsSummaryMenuCallback(void); +void FreeRibbonsSummaryScreen1(void); +bool32 OpenRibbonsSummaryMenu(void); +void CreateRibbonsSummaryLoopedTask(s32); +u32 IsRibbonsSummaryLoopedTaskActive(void); +void FreeRibbonsSummaryScreen2(void); #endif // GUARD_POKENAV_H diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 327dcefc4e..0745ac6d5f 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -319,7 +319,7 @@ void sub_81D1EC0(void) Free(sUnknown_0203CF4C); } -void sub_81D1ED4(struct ConditionGraph *a0) +void InitConditionGraphData(struct ConditionGraph *graph) { u8 i, j; @@ -327,22 +327,22 @@ void sub_81D1ED4(struct ConditionGraph *a0) { for (i = 0; i < 10; i++) { - a0->unk64[i][j].unk0 = 0; - a0->unk64[i][j].unk2 = 0; + graph->unk64[i][j].unk0 = 0; + graph->unk64[i][j].unk2 = 0; } for (i = 0; i < 4; i++) { - a0->unk0[i][j] = 0; - a0->unk14[i][j].unk0 = 0x9B; - a0->unk14[i][j].unk2 = 0x5B; + graph->stat[i][j] = 0; + graph->unk14[i][j].unk0 = 155; + graph->unk14[i][j].unk2 = 91; } - a0->unk12C[j].unk0 = 0; - a0->unk12C[j].unk2 = 0; + graph->unk12C[j].unk0 = 0; + graph->unk12C[j].unk2 = 0; } - a0->unk354 = 0; - a0->unk352 = 0; + graph->unk354 = 0; + graph->unk352 = 0; } void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2) @@ -350,7 +350,7 @@ void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 * u16 i, j; s32 r5, r6; - for (i = 0; i < 5; i++) + for (i = 0; i < FLAVOR_COUNT; i++) { r5 = arg1[i].unk0 << 8; r6 = ((arg2[i].unk0 - arg1[i].unk0) << 8) / 10; @@ -387,25 +387,25 @@ bool32 TransitionConditionGraph(struct ConditionGraph *graph) } } -void sub_81D20AC(struct ConditionGraph *a0) +void InitConditionGraphState(struct ConditionGraph *graph) { - a0->unk355 = 0; + graph->state = 0; } -bool8 sub_81D20BC(struct ConditionGraph *graph) +bool8 SetupConditionGraphScanlineParams(struct ConditionGraph *graph) { struct ScanlineEffectParams params; - switch (graph->unk355) + switch (graph->state) { case 0: ScanlineEffect_Clear(); - graph->unk355++; + graph->state++; return TRUE; case 1: params = sConditionGraphScanline; ScanlineEffect_SetParams(params); - graph->unk355++; + graph->state++; return FALSE; default: return FALSE; @@ -431,7 +431,7 @@ void sub_81D2108(struct ConditionGraph *graph) graph->unk354 = 0; } -void sub_81D21DC(u8 bg) +void SetConditionGraphIOWindows(u8 bg) { u32 flags; @@ -1025,23 +1025,23 @@ void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 if (partyId != numMons) { - graph->unk0[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); - graph->unk0[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); - graph->unk0[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); - graph->unk0[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); - graph->unk0[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + graph->stat[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + graph->stat[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + graph->stat[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + graph->stat[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + graph->stat[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); sheen[id] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 0xFF) ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u : 9; - sub_81D2754(graph->unk0[id], graph->unk14[id]); + sub_81D2754(graph->stat[id], graph->unk14[id]); } else { for (i = 0; i < FLAVOR_COUNT; i++) { - graph->unk0[id][i] = 0; + graph->stat[id][i] = 0; graph->unk14[id][i].unk0 = 155; graph->unk14[id][i].unk2 = 91; } diff --git a/src/mon_markings.c b/src/mon_markings.c index c2afdda833..a819d4f9ab 100644 --- a/src/mon_markings.c +++ b/src/mon_markings.c @@ -390,7 +390,7 @@ void sub_811FAF8(void) } } -bool8 sub_811FBA4(void) +bool8 MonMarkingsMenuHandleInput(void) { u16 i; @@ -564,7 +564,7 @@ static void sub_811FF7C(struct Sprite *sprite) sprite->pos1.y = (16 * sMenu->cursorPos) + sprite->data[0]; } -struct Sprite *sub_811FF94(u16 tileTag, u16 paletteTag, const u16 *palette) +struct Sprite *CreateMonMarkingsSpriteWithPal(u16 tileTag, u16 paletteTag, const u16 *palette) { if (!palette) palette = gUnknown_0859E65C; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index b61aff350c..4db9fbf92f 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -3183,7 +3183,7 @@ static void Cb_ShowMarkMenu(u8 taskId) sPSSData->state++; break; case 1: - if (!sub_811FBA4()) + if (!MonMarkingsMenuHandleInput()) { sub_811FAF8(); ClearBottomWindow(); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index c80c4c5c47..012e133e66 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -3976,7 +3976,7 @@ static void StopPokemonAnimations(void) // A subtle effect, this function stops static void CreateMonMarkingsSprite(struct Pokemon *mon) { - struct Sprite *sprite = sub_811FF94(TAG_MON_MARKINGS, TAG_MON_MARKINGS, sSummaryMarkingsPalette); + struct Sprite *sprite = CreateMonMarkingsSpriteWithPal(TAG_MON_MARKINGS, TAG_MON_MARKINGS, sSummaryMarkingsPalette); sMonSummaryScreen->markingsSprite = sprite; if (sprite != NULL) diff --git a/src/pokenav.c b/src/pokenav.c index 30dc001c37..12a13509bc 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -14,8 +14,6 @@ #define LOOPED_TASK_PRIMARY_ID(taskId) (taskId & 0xFFFF) #define LOOPED_TASK_SECONDARY_ID(taskId) (taskId >> 16) -#define SUBSTRUCT_COUNT 19 - struct PokenavResources { u32 (*currentMenuCb1)(void); @@ -23,7 +21,7 @@ struct PokenavResources u16 mode; u16 conditionSearchId; bool32 hasAnyRibbons; - void *field10[SUBSTRUCT_COUNT]; + void *substructPtrs[POKENAV_SUBSTRUCT_COUNT]; }; struct PokenavCallbacks @@ -38,7 +36,7 @@ struct PokenavCallbacks }; static u32 GetCurrentMenuCB(void); -static u32 sub_81C75D4(void); +static u32 IsActiveMenuLoopTaskActive_(void); static bool32 SetActivePokenavMenu(u32 menuId); static bool32 AnyMonHasRibbon(void); static void InitPokenavResources(struct PokenavResources *a0); @@ -126,43 +124,43 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = }, [POKENAV_CONDITION_PARTY - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_7, - .callback = sub_81CD070, - .open = sub_81CDDD4, - .createLoopTask = sub_81CDE2C, - .isLoopTaskActive = sub_81CDE64, - .free1 = sub_81CD1C0, - .free2 = sub_81CECA0, + .init = PokenavCallback_Init_PartyCondition, + .callback = GetPartyConditionCallback, + .open = OpenPartyConditionMenu, + .createLoopTask = CreatePartyConditionLoopedTask, + .isLoopTaskActive = IsPartyConditionLoopedTaskActive, + .free1 = FreePartyConditionSubstruct1, + .free2 = FreePartyConditionSubstruct2, }, [POKENAV_CONDITION_SEARCH_RESULTS - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_8, - .callback = sub_81CEFDC, - .open = sub_81CF330, - .createLoopTask = sub_81CF3A0, - .isLoopTaskActive = sub_81CF3D0, - .free1 = sub_81CEFF0, - .free2 = sub_81CF3F8, + .init = PokenavCallback_Init_ConditionSearch, + .callback = GetConditionSearchResultsCallback, + .open = OpenConditionSearchResults, + .createLoopTask = CreateSearchResultsLoopedTask, + .isLoopTaskActive = IsSearchResultLoopedTaskActive, + .free1 = FreeSearchResultSubstruct1, + .free2 = FreeSearchResultSubstruct2, }, - [POKENAV_MENU_9 - POKENAV_MENU_IDS_START] = + [POKENAV_MENU_CONDITION_GRAPH_FROM_SEARCH - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_9, - .callback = sub_81CD070, - .open = sub_81CDDD4, - .createLoopTask = sub_81CDE2C, - .isLoopTaskActive = sub_81CDE64, - .free1 = sub_81CD1C0, - .free2 = sub_81CECA0, + .init = PokenavCallback_Init_ConditionGraphFromSearch, + .callback = GetPartyConditionCallback, + .open = OpenPartyConditionMenu, + .createLoopTask = CreatePartyConditionLoopedTask, + .isLoopTaskActive = IsPartyConditionLoopedTaskActive, + .free1 = FreePartyConditionSubstruct1, + .free2 = FreePartyConditionSubstruct2, }, - [POKENAV_MENU_A - POKENAV_MENU_IDS_START] = + [POKENAV_RETURN_CONDITION_SEARCH - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_10, - .callback = sub_81CEFDC, - .open = sub_81CF368, - .createLoopTask = sub_81CF3A0, - .isLoopTaskActive = sub_81CF3D0, - .free1 = sub_81CEFF0, - .free2 = sub_81CF3F8, + .init = PokenavCallback_Init_ReturnToMonSearchList, + .callback = GetConditionSearchResultsCallback, + .open = OpenConditionSearchListFromGraph, + .createLoopTask = CreateSearchResultsLoopedTask, + .isLoopTaskActive = IsSearchResultLoopedTaskActive, + .free1 = FreeSearchResultSubstruct1, + .free2 = FreeSearchResultSubstruct2, }, [POKENAV_MATCH_CALL - POKENAV_MENU_IDS_START] = { @@ -176,33 +174,33 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = }, [POKENAV_RIBBONS_MON_LIST - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_12, - .callback = sub_81CFA34, - .open = sub_81CFDD0, - .createLoopTask = sub_81CFE40, - .isLoopTaskActive = sub_81CFE70, - .free1 = sub_81CFA48, - .free2 = sub_81CFE98, + .init = PokenavCallback_Init_MonRibbonList, + .callback = GetRibbonsMonListCallback, + .open = OpenRibbonsMonList, + .createLoopTask = CreateRibbonsMonListLoopedTask, + .isLoopTaskActive = IsRibbonsMonListLoopedTaskActive, + .free1 = FreeRibbonsMonList1, + .free2 = FreeRibbonsMonList2, }, - [POKENAV_MENU_D - POKENAV_MENU_IDS_START] = + [POKENAV_RIBBONS_SUMMARY_SCREEN - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_13, - .callback = sub_81D04A0, - .open = sub_81D0978, - .createLoopTask = sub_81D09B0, - .isLoopTaskActive = sub_81D09E0, - .free1 = sub_81D04B8, - .free2 = sub_81D09F4, + .init = PokenavCallback_Init_RibbonsSummaryMenu, + .callback = GetRibbonsSummaryMenuCallback, + .open = OpenRibbonsSummaryMenu, + .createLoopTask = CreateRibbonsSummaryLoopedTask, + .isLoopTaskActive = IsRibbonsSummaryLoopedTaskActive, + .free1 = FreeRibbonsSummaryScreen1, + .free2 = FreeRibbonsSummaryScreen2, }, - [POKENAV_MENU_E - POKENAV_MENU_IDS_START] = + [POKENAV_RIBBONS_RETURN_TO_MON_LIST - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_14, - .callback = sub_81CFA34, - .open = sub_81CFE08, - .createLoopTask = sub_81CFE40, - .isLoopTaskActive = sub_81CFE70, - .free1 = sub_81CFA48, - .free2 = sub_81CFE98, + .init = PokenavCallback_Init_RibbonsMonListFromSummary, + .callback = GetRibbonsMonListCallback, + .open = OpenRibbonsMonListFromRibbonsSummary, + .createLoopTask = CreateRibbonsMonListLoopedTask, + .isLoopTaskActive = IsRibbonsMonListLoopedTaskActive, + .free1 = FreeRibbonsMonList1, + .free2 = FreeRibbonsMonList2, }, }; @@ -368,24 +366,24 @@ static void FreePokenavResources(void) { int i; - for (i = 0; i < SUBSTRUCT_COUNT; i++) + for (i = 0; i < POKENAV_SUBSTRUCT_COUNT; i++) FreePokenavSubstruct(i); FREE_AND_SET_NULL(gPokenavResources); InitKeys(); } -static void InitPokenavResources(struct PokenavResources *a0) +static void InitPokenavResources(struct PokenavResources *resources) { int i; - for (i = 0; i < SUBSTRUCT_COUNT; i++) - a0->field10[i] = NULL; + for (i = 0; i < POKENAV_SUBSTRUCT_COUNT; i++) + resources->substructPtrs[i] = NULL; - a0->mode = POKENAV_MODE_NORMAL; - a0->currentMenuIndex = 0; - a0->hasAnyRibbons = AnyMonHasRibbon(); - a0->currentMenuCb1 = NULL; + resources->mode = POKENAV_MODE_NORMAL; + resources->currentMenuIndex = 0; + resources->hasAnyRibbons = AnyMonHasRibbon(); + resources->currentMenuCb1 = NULL; } static bool32 AnyMonHasRibbon(void) @@ -453,12 +451,12 @@ static void Task_Pokenav(u8 taskId) tState = 4; break; case 2: - if (sub_81C786C()) + if (IsActiveMenuLoopTaskActive()) break; tState = 3; case 3: menuId = GetCurrentMenuCB(); - if (menuId == -1) + if (menuId == POKENAV_MENU_FUNC_EXIT) { ShutdownPokenav(); tState = 5; @@ -479,13 +477,13 @@ static void Task_Pokenav(u8 taskId) } else if (menuId != 0) { - sub_81C7850(menuId); - if (sub_81C786C()) + RunMainMenuLoopedTask(menuId); + if (IsActiveMenuLoopTaskActive()) tState = 2; } break; case 4: - if (!sub_81C75D4()) + if (!IsActiveMenuLoopTaskActive_()) tState = 3; break; case 5: @@ -516,15 +514,15 @@ static bool32 SetActivePokenavMenu(u32 menuId) if (!PokenavMenuCallbacks[index].open()) return FALSE; - sub_81C7834(PokenavMenuCallbacks[index].createLoopTask, PokenavMenuCallbacks[index].isLoopTaskActive); + SetActiveMenuLoopTasks(PokenavMenuCallbacks[index].createLoopTask, PokenavMenuCallbacks[index].isLoopTaskActive); gPokenavResources->currentMenuCb1 = PokenavMenuCallbacks[index].callback; gPokenavResources->currentMenuIndex = index; return TRUE; } -static u32 sub_81C75D4(void) +static u32 IsActiveMenuLoopTaskActive_(void) { - return sub_81C786C(); + return IsActiveMenuLoopTaskActive(); } static u32 GetCurrentMenuCB(void) @@ -549,19 +547,19 @@ void SetPokenavVBlankCallback(void) void *AllocSubstruct(u32 index, u32 size) { - gPokenavResources->field10[index] = Alloc(size); - return gPokenavResources->field10[index]; + gPokenavResources->substructPtrs[index] = Alloc(size); + return gPokenavResources->substructPtrs[index]; } void *GetSubstructPtr(u32 index) { - return gPokenavResources->field10[index]; + return gPokenavResources->substructPtrs[index]; } void FreePokenavSubstruct(u32 index) { - if (gPokenavResources->field10[index] != NULL) - FREE_AND_SET_NULL(gPokenavResources->field10[index]); + if (gPokenavResources->substructPtrs[index] != NULL) + FREE_AND_SET_NULL(gPokenavResources->substructPtrs[index]); } u32 GetPokenavMode(void) diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c index 15d55ffb83..c27cd410c6 100644 --- a/src/pokenav_conditions_1.c +++ b/src/pokenav_conditions_1.c @@ -18,98 +18,98 @@ struct PokenavSub11 u32 monPal[3][0x20]; u8 fill[0x180]; u32 monPicGfx[3][0x800]; - u8 unk6300; - s16 unk6302; - u32 (*unk6304)(struct PokenavSub11 *); + u8 searchMode; + s16 monIndex; + u32 (*callback)(struct PokenavSub11 *); u8 fill2[0x6320 - 0x6308]; - u8 unk6320[3][24]; - u8 unk6368[3][64]; - struct ConditionGraph unk6428; - u8 unk6780[3]; - u8 unk6783[3]; - s8 unk6786; + u8 searchLocBuffer[3][24]; + u8 nameBuffer[3][64]; + struct ConditionGraph conditionData; + u8 sheen[3]; + u8 monMarks[3]; + s8 mark; s8 unk6787; s8 unk6788; s8 unk6789; - u8 unk678A; + u8 state; }; -void sub_81CD970(void); +void InitPartyConditionListParameters(void); void sub_81CD9F8(void); -u32 sub_81CD08C(struct PokenavSub11 *structPtr); -u32 sub_81CD19C(struct PokenavSub11 *structPtr); -u32 sub_81CD110(struct PokenavSub11 *structPtr); -u8 sub_81CD1E4(struct PokenavSub11 *structPtr); -u8 sub_81CD258(u8 arg0); -void sub_81CD824(s16 arg0, u8 arg1); -void sub_81CDA1C(s16 arg0, u8 arg1); -void sub_81CDB98(s16 arg0, u8 arg1); +u32 HandlePartyConditionInput(struct PokenavSub11 *structPtr); +u32 GetConditionReturnCallback(struct PokenavSub11 *structPtr); +u32 ConditionMenu_OpenMarkingsMenu(struct PokenavSub11 *structPtr); +u8 ConditionGraphHandleDpadInput(struct PokenavSub11 *structPtr); +u8 SwitchConditionSummaryIndex(u8 moveUp); +void CopyMonNameGenderLocation(s16 id, u8 arg1); +void GetMonConditionGraphData(s16 id, u8 arg1); +void ConditionGraphDrawMonPic(s16 id, u8 arg1); // code -bool32 PokenavCallback_Init_7(void) +bool32 PokenavCallback_Init_PartyCondition(void) { - struct PokenavSub11 *structPtr = AllocSubstruct(11, sizeof(struct PokenavSub11)); + struct PokenavSub11 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH, sizeof(struct PokenavSub11)); if (structPtr == NULL) return FALSE; - sub_81D1ED4(&structPtr->unk6428); - sub_81CD970(); + InitConditionGraphData(&structPtr->conditionData); + InitPartyConditionListParameters(); gKeyRepeatStartDelay = 20; - structPtr->unk6304 = sub_81CD08C; + structPtr->callback = HandlePartyConditionInput; return TRUE; } -bool32 PokenavCallback_Init_9(void) +bool32 PokenavCallback_Init_ConditionGraphFromSearch(void) { - struct PokenavSub11 *structPtr = AllocSubstruct(11, sizeof(struct PokenavSub11)); + struct PokenavSub11 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH, sizeof(struct PokenavSub11)); if (structPtr == NULL) return FALSE; - sub_81D1ED4(&structPtr->unk6428); + InitConditionGraphData(&structPtr->conditionData); sub_81CD9F8(); gKeyRepeatStartDelay = 20; - structPtr->unk6304 = sub_81CD08C; + structPtr->callback = HandlePartyConditionInput; return TRUE; } -u32 sub_81CD070(void) +u32 GetPartyConditionCallback(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->unk6304(structPtr); + return structPtr->callback(structPtr); } -u32 sub_81CD08C(struct PokenavSub11 *structPtr) +u32 HandlePartyConditionInput(struct PokenavSub11 *structPtr) { - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); - u32 ret = sub_81CD1E4(structPtr); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + u32 ret = ConditionGraphHandleDpadInput(structPtr); - if (ret == 0) + if (ret == PARTY_CONDITION_FUNC_NONE) { if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - structPtr->unk6304 = sub_81CD19C; - ret = 2; + structPtr->callback = GetConditionReturnCallback; + ret = PARTY_CONDITION_FUNC_RETURN; } else if (JOY_NEW(A_BUTTON)) { - if (structPtr->unk6300 == 0) + if (structPtr->searchMode == 0) { - if (unkPtr->unk2 == unkPtr->unk0 - 1) + if (monListPtr->currIndex == monListPtr->listCount - 1) { PlaySE(SE_SELECT); - structPtr->unk6304 = sub_81CD19C; - ret = 2; + structPtr->callback = GetConditionReturnCallback; + ret = PARTY_CONDITION_FUNC_RETURN; } } else { PlaySE(SE_SELECT); - ret = 5; - structPtr->unk6304 = sub_81CD110; + ret = PARTY_CONDITION_FUNC_ADD_MARKINGS; + structPtr->callback = ConditionMenu_OpenMarkingsMenu; } } } @@ -117,204 +117,204 @@ u32 sub_81CD08C(struct PokenavSub11 *structPtr) return ret; } -u32 sub_81CD110(struct PokenavSub11 *structPtr) +u32 ConditionMenu_OpenMarkingsMenu(struct PokenavSub11 *structPtr) { - struct PokenavSub18 *unkPtr; + struct PokenavSub18 *monListPtr; u8 markings; - u32 ret = 0, boxId, monId; + u32 ret = PARTY_CONDITION_FUNC_NONE, boxId, monId; - if (!sub_811FBA4()) + if (!MonMarkingsMenuHandleInput()) { - structPtr->unk6783[structPtr->unk6786] = sub_81CEF14(); - unkPtr = GetSubstructPtr(18); - boxId = unkPtr->unk4[unkPtr->unk2].boxId; - monId = unkPtr->unk4[unkPtr->unk2].monId; - markings = structPtr->unk6783[structPtr->unk6786]; + structPtr->monMarks[structPtr->mark] = GetMonMarkingsData(); + monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + boxId = monListPtr->monData[monListPtr->currIndex].boxId; + monId = monListPtr->monData[monListPtr->currIndex].monId; + markings = structPtr->monMarks[structPtr->mark]; if (boxId == TOTAL_BOXES_COUNT) SetMonData(&gPlayerParty[monId], MON_DATA_MARKINGS, &markings); else SetBoxMonDataAt(boxId, monId, MON_DATA_MARKINGS, &markings); - structPtr->unk6304 = sub_81CD08C; - ret = 6; + structPtr->callback = HandlePartyConditionInput; + ret = PARTY_CONDITION_FUNC_CLOSE_MARKINGS; } return ret; } -u32 sub_81CD19C(struct PokenavSub11 *structPtr) +u32 GetConditionReturnCallback(struct PokenavSub11 *structPtr) { - if (structPtr->unk6300 == 0) + if (structPtr->searchMode == 0) return POKENAV_CONDITION_MENU; else - return POKENAV_MENU_A; + return POKENAV_RETURN_CONDITION_SEARCH; } -void sub_81CD1C0(void) +void FreePartyConditionSubstruct1(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - if (structPtr->unk6300 == 0) - FreePokenavSubstruct(18); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + if (structPtr->searchMode == 0) + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); - FreePokenavSubstruct(11); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH); } -u8 sub_81CD1E4(struct PokenavSub11 *structPtr) +u8 ConditionGraphHandleDpadInput(struct PokenavSub11 *structPtr) { - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); u8 ret = 0; if (JOY_HELD(DPAD_UP)) { - if (structPtr->unk6300 == 0 || unkPtr->unk2 != 0) + if (structPtr->searchMode == 0 || monListPtr->currIndex != 0) { PlaySE(SE_SELECT); - ret = sub_81CD258(1); + ret = SwitchConditionSummaryIndex(1); } } else if (JOY_HELD(DPAD_DOWN)) { - if (structPtr->unk6300 == 0 || unkPtr->unk2 < unkPtr->unk0 - 1) + if (structPtr->searchMode == 0 || monListPtr->currIndex < monListPtr->listCount - 1) { PlaySE(SE_SELECT); - ret = sub_81CD258(0); + ret = SwitchConditionSummaryIndex(0); } } return ret; } -u8 sub_81CD258(u8 arg0) +u8 SwitchConditionSummaryIndex(u8 moveUp) { u16 r7; - bool8 r6, r0; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + bool8 wasNotLastMon, isNotLastMon; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - r7 = (arg0) ? structPtr->unk6788 : structPtr->unk6787; - sub_81D1F84(&structPtr->unk6428, structPtr->unk6428.unk14[structPtr->unk6786], structPtr->unk6428.unk14[r7]); - r6 = (unkPtr->unk2 != ((sub_81CDD5C() != 0) ? unkPtr->unk0 : unkPtr->unk0 - 1)); - if (arg0) + r7 = (moveUp) ? structPtr->unk6788 : structPtr->unk6787; + sub_81D1F84(&structPtr->conditionData, structPtr->conditionData.unk14[structPtr->mark], structPtr->conditionData.unk14[r7]); + wasNotLastMon = (monListPtr->currIndex != ((IsConditionMenuSearchMode() != 0) ? monListPtr->listCount : monListPtr->listCount - 1)); + if (moveUp) { structPtr->unk6788 = structPtr->unk6787; - structPtr->unk6787 = structPtr->unk6786; - structPtr->unk6786 = r7; + structPtr->unk6787 = structPtr->mark; + structPtr->mark = r7; structPtr->unk6789 = structPtr->unk6788; - unkPtr->unk2 = (unkPtr->unk2 == 0) ? unkPtr->unk0 - 1 : unkPtr->unk2 - 1; - structPtr->unk6302 = (unkPtr->unk2 != 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1; + monListPtr->currIndex = (monListPtr->currIndex == 0) ? monListPtr->listCount - 1 : monListPtr->currIndex - 1; + structPtr->monIndex = (monListPtr->currIndex != 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1; } else { structPtr->unk6787 = structPtr->unk6788; - structPtr->unk6788 = structPtr->unk6786; - structPtr->unk6786 = r7; + structPtr->unk6788 = structPtr->mark; + structPtr->mark = r7; structPtr->unk6789 = structPtr->unk6787; - unkPtr->unk2 = (unkPtr->unk2 < unkPtr->unk0 - 1) ? unkPtr->unk2 + 1 : 0; - structPtr->unk6302 = (unkPtr->unk2 < unkPtr->unk0 - 1) ? unkPtr->unk2 + 1 : 0; + monListPtr->currIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; + structPtr->monIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; } - r0 = (unkPtr->unk2 != ((sub_81CDD5C() != 0) ? unkPtr->unk0 : unkPtr->unk0 - 1)); - - if (!r6) - return 3; - else if (!r0) - return 4; + isNotLastMon = (monListPtr->currIndex != ((IsConditionMenuSearchMode() != 0) ? monListPtr->listCount : monListPtr->listCount - 1)); + + if (!wasNotLastMon) + return PARTY_CONDITION_FUNC_NO_TRANSITION; + else if (!isNotLastMon) + return PARTY_CONDITION_FUNC_SLIDE_MON_OUT; else - return 1; + return PARTY_CONDITION_FUNC_SLIDE_MON_IN; } -bool32 sub_81CD3C4(void) +bool32 LoadPartyConditionMenuGfx(void) { s32 var; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - switch (structPtr->unk678A) + switch (structPtr->state) { case 0: - sub_81CD824(unkPtr->unk2, 0); + CopyMonNameGenderLocation(monListPtr->currIndex, 0); break; case 1: - sub_81CDA1C(unkPtr->unk2, 0); + GetMonConditionGraphData(monListPtr->currIndex, 0); break; case 2: - sub_81CDB98(unkPtr->unk2, 0); + ConditionGraphDrawMonPic(monListPtr->currIndex, 0); break; case 3: - if (unkPtr->unk0 == 1) + if (monListPtr->listCount == 1) { - structPtr->unk6786 = 0; + structPtr->mark = 0; structPtr->unk6787 = 0; structPtr->unk6788 = 0; - structPtr->unk678A = 0; + structPtr->state = 0; return TRUE; } else { - structPtr->unk6786 = 0; + structPtr->mark = 0; structPtr->unk6787 = 1; structPtr->unk6788 = 2; } break; // These were probably ternaries just like cases 7-9, but couldn't match it any other way. case 4: - var = unkPtr->unk2 + 1; - if (var >= unkPtr->unk0) + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) var = 0; - sub_81CD824(var, 1); + CopyMonNameGenderLocation(var, 1); break; case 5: - var = unkPtr->unk2 + 1; - if (var >= unkPtr->unk0) + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) var = 0; - sub_81CDA1C(var, 1); + GetMonConditionGraphData(var, 1); break; case 6: - var = unkPtr->unk2 + 1; - if (var >= unkPtr->unk0) + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) var = 0; - sub_81CDB98(var, 1); + ConditionGraphDrawMonPic(var, 1); break; case 7: - sub_81CD824((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); + CopyMonNameGenderLocation((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); break; case 8: - sub_81CDA1C((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); + GetMonConditionGraphData((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); break; case 9: - sub_81CDB98((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); - structPtr->unk678A = 0; + ConditionGraphDrawMonPic((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); + structPtr->state = 0; return TRUE; } - structPtr->unk678A++; + structPtr->state++; return FALSE; } -bool32 sub_81CD548(u8 arg0) +bool32 SetConditionGraphData(u8 mode) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - switch (arg0) + switch (mode) { case 0: - sub_81CD824(structPtr->unk6302, structPtr->unk6789); + CopyMonNameGenderLocation(structPtr->monIndex, structPtr->unk6789); break; case 1: - sub_81CDA1C(structPtr->unk6302, structPtr->unk6789); + GetMonConditionGraphData(structPtr->monIndex, structPtr->unk6789); break; case 2: - sub_81CDB98(structPtr->unk6302, structPtr->unk6789); + ConditionGraphDrawMonPic(structPtr->monIndex, structPtr->unk6789); return TRUE; } return FALSE; } -u8 *sub_81CD5CC(u8 *dst, const u8 *src, s16 n) +u8 *CopyStringLeftAlignedToConditionData(u8 *dst, const u8 *src, s16 n) { while (*src != EOS) *dst++ = *src++, n--; @@ -326,15 +326,15 @@ u8 *sub_81CD5CC(u8 *dst, const u8 *src, s16 n) return dst; } -u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3) +u8 *CopyMonConditionNameGender(u8 *str, u16 id, bool8 arg3) { u16 boxId, monId, gender, species, level, lvlDigits; struct BoxPokemon *boxMon; u8 *txtPtr, *str_; - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - boxId = unkPtr->unk4[id].boxId; - monId = unkPtr->unk4[id].monId; + boxId = monListPtr->monData[id].boxId; + monId = monListPtr->monData[id].monId; *(str++) = EXT_CTRL_CODE_BEGIN; *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; *(str++) = TEXT_COLOR_BLUE; @@ -417,115 +417,115 @@ u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3) return str_; } -void sub_81CD824(s16 arg0, u8 arg1) +void CopyMonNameGenderLocation(s16 id, u8 arg1) { u16 boxId, i; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - if (arg0 != (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + if (id != (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) { - sub_81CD624(structPtr->unk6368[arg1], arg0, FALSE); - boxId = unkPtr->unk4[arg0].boxId; - structPtr->unk6320[arg1][0] = EXT_CTRL_CODE_BEGIN; - structPtr->unk6320[arg1][1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - structPtr->unk6320[arg1][2] = TEXT_COLOR_BLUE; - structPtr->unk6320[arg1][3] = TEXT_COLOR_TRANSPARENT; - structPtr->unk6320[arg1][4] = TEXT_COLOR_LIGHT_BLUE; + CopyMonConditionNameGender(structPtr->nameBuffer[arg1], id, FALSE); + boxId = monListPtr->monData[id].boxId; + structPtr->searchLocBuffer[arg1][0] = EXT_CTRL_CODE_BEGIN; + structPtr->searchLocBuffer[arg1][1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + structPtr->searchLocBuffer[arg1][2] = TEXT_COLOR_BLUE; + structPtr->searchLocBuffer[arg1][3] = TEXT_COLOR_TRANSPARENT; + structPtr->searchLocBuffer[arg1][4] = TEXT_COLOR_LIGHT_BLUE; if (boxId == TOTAL_BOXES_COUNT) - sub_81CD5CC(&structPtr->unk6320[arg1][5], gText_InParty, 8); + CopyStringLeftAlignedToConditionData(&structPtr->searchLocBuffer[arg1][5], gText_InParty, 8); else - sub_81CD5CC(&structPtr->unk6320[arg1][5], GetBoxNamePtr(boxId), 8); + CopyStringLeftAlignedToConditionData(&structPtr->searchLocBuffer[arg1][5], GetBoxNamePtr(boxId), 8); } else { for (i = 0; i < 12; i++) - structPtr->unk6368[arg1][i] = CHAR_SPACE; - structPtr->unk6368[arg1][i] = EOS; + structPtr->nameBuffer[arg1][i] = CHAR_SPACE; + structPtr->nameBuffer[arg1][i] = EOS; for (i = 0; i < 8; i++) - structPtr->unk6320[arg1][i] = CHAR_SPACE; - structPtr->unk6320[arg1][i] = EOS; + structPtr->searchLocBuffer[arg1][i] = CHAR_SPACE; + structPtr->searchLocBuffer[arg1][i] = EOS; } } -void sub_81CD970(void) +void InitPartyConditionListParameters(void) { u16 i, count; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = AllocSubstruct(18, sizeof(struct PokenavSub18)); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); - structPtr->unk6300 = 0; + structPtr->searchMode = 0; for (i = 0, count = 0; i < CalculatePlayerPartyCount(); i++) { if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { - unkPtr->unk4[count].boxId = TOTAL_BOXES_COUNT; - unkPtr->unk4[count].monId = i; - unkPtr->unk4[count].data = 0; + monListPtr->monData[count].boxId = TOTAL_BOXES_COUNT; + monListPtr->monData[count].monId = i; + monListPtr->monData[count].data = 0; count++; } } - unkPtr->unk4[count].boxId = 0; - unkPtr->unk4[count].monId = 0; - unkPtr->unk4[count].data = 0; - unkPtr->unk2 = 0; - unkPtr->unk0 = count + 1; - structPtr->unk678A = 0; + monListPtr->monData[count].boxId = 0; + monListPtr->monData[count].monId = 0; + monListPtr->monData[count].data = 0; + monListPtr->currIndex = 0; + monListPtr->listCount = count + 1; + structPtr->state = 0; } void sub_81CD9F8(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - structPtr->unk6300 = 1; - structPtr->unk678A = 0; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + structPtr->searchMode = 1; + structPtr->state = 0; } -void sub_81CDA1C(s16 arg0, u8 arg1) +void GetMonConditionGraphData(s16 id, u8 arg1) { u16 boxId, monId, i; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - if (arg0 != (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + if (id != (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) { - boxId = unkPtr->unk4[arg0].boxId; - monId = unkPtr->unk4[arg0].monId; - structPtr->unk6428.unk0[arg1][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); - structPtr->unk6428.unk0[arg1][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); - structPtr->unk6428.unk0[arg1][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); - structPtr->unk6428.unk0[arg1][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); - structPtr->unk6428.unk0[arg1][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); - structPtr->unk6780[arg1] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 255) + boxId = monListPtr->monData[id].boxId; + monId = monListPtr->monData[id].monId; + structPtr->conditionData.stat[arg1][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + structPtr->conditionData.stat[arg1][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + structPtr->conditionData.stat[arg1][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + structPtr->conditionData.stat[arg1][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + structPtr->conditionData.stat[arg1][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + structPtr->sheen[arg1] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 255) ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u : 9; - structPtr->unk6783[arg1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_MARKINGS, NULL); - sub_81D2754(structPtr->unk6428.unk0[arg1], structPtr->unk6428.unk14[arg1]); + structPtr->monMarks[arg1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_MARKINGS, NULL); + sub_81D2754(structPtr->conditionData.stat[arg1], structPtr->conditionData.unk14[arg1]); } else { - for (i = 0; i < 5; i++) + for (i = 0; i < FLAVOR_COUNT; i++) { - structPtr->unk6428.unk0[arg1][i] = 0; - structPtr->unk6428.unk14[arg1][i].unk0 = 155; - structPtr->unk6428.unk14[arg1][i].unk2 = 91; + structPtr->conditionData.stat[arg1][i] = 0; + structPtr->conditionData.unk14[arg1][i].unk0 = 155; + structPtr->conditionData.unk14[arg1][i].unk2 = 91; } } } -void sub_81CDB98(s16 arg0, u8 arg1) +void ConditionGraphDrawMonPic(s16 index, u8 arg1) { u16 boxId, monId, species; u32 personality, tid; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - if (arg0 == (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + if (index == (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) return; - boxId = unkPtr->unk4[arg0].boxId; - monId = unkPtr->unk4[arg0].monId; + boxId = monListPtr->monData[index].boxId; + monId = monListPtr->monData[index].monId; species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); tid = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); @@ -533,92 +533,92 @@ void sub_81CDB98(s16 arg0, u8 arg1) LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, tid, personality), structPtr->monPal[arg1]); } -u16 sub_81CDC50(void) +u16 GetMonListCount(void) { - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); - return unkPtr->unk0; + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->listCount; } -u16 sub_81CDC60(void) +u16 GetConditionGraphCurrentMonIndex(void) { - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); - return unkPtr->unk2; + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->currIndex; } -struct ConditionGraph *sub_81CDC70(void) +struct ConditionGraph *GetConditionGraphDataPtr(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return &structPtr->unk6428; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return &structPtr->conditionData; } -u8 sub_81CDC84(void) +u8 GetMonMarkIndex(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return structPtr->unk6786; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return structPtr->mark; } u8 sub_81CDC9C(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return structPtr->unk6302; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return structPtr->monIndex; } -void *sub_81CDCB4(u8 id) +void *GetConditionMonPicGfx(u8 id) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); return structPtr->monPicGfx[id]; } -void *sub_81CDCD4(u8 id) +void *GetConditionMonPal(u8 id) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); return structPtr->monPal[id]; } u8 sub_81CDCEC(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); return structPtr->unk6789; } -u8 *sub_81CDD04(u8 id) +u8 *GetConditionMonNameBuffer(u8 id) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return structPtr->unk6368[id]; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return structPtr->nameBuffer[id]; } -u8 *sub_81CDD24(u8 id) +u8 *GetConditionMonLocationBuffer(u8 id) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return structPtr->unk6320[id]; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return structPtr->searchLocBuffer[id]; } -u16 sub_81CDD48(void) +u16 GetConditionMonDataBuffer(void) { - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); - return unkPtr->unk4[unkPtr->unk2].data; + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->monData[monListPtr->currIndex].data; } -bool32 sub_81CDD5C(void) +bool32 IsConditionMenuSearchMode(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - if (structPtr->unk6300 == 1) + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + if (structPtr->searchMode == 1) return TRUE; else return FALSE; } -u8 sub_81CDD7C(void) +u8 TryGetMonMarkId(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - if (structPtr->unk6300 == 1) - return structPtr->unk6783[structPtr->unk6786]; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + if (structPtr->searchMode == 1) + return structPtr->monMarks[structPtr->mark]; else return 0; } -u8 sub_81CDDB0(void) +u8 GetMonSheen(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return structPtr->unk6780[structPtr->unk6786]; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return structPtr->sheen[structPtr->mark]; } diff --git a/src/pokenav_conditions_2.c b/src/pokenav_conditions_2.c index 7c536cd6a7..dc845ecab1 100644 --- a/src/pokenav_conditions_2.c +++ b/src/pokenav_conditions_2.c @@ -15,22 +15,22 @@ #include "strings.h" #include "text.h" -u32 sub_81CE37C(s32); -u32 sub_81CE2D0(s32); -u32 sub_81CE4D8(s32); -u32 sub_81CE5E4(s32); -u32 sub_81CE6BC(s32); -u32 sub_81CE700(s32); +u32 LoopedTask_TransitionMons(s32); +u32 LoopedTask_ExitPartyConditionMenu(s32); +u32 LoopedTask_MoveCursorNoTransition(s32); +u32 LoopedTask_SlideMonOut(s32); +u32 LoopedTask_OpenMonMarkingsWindow(s32); +u32 LoopedTask_CloseMonMarkingsWindow(s32); BSS_DATA u8 gUnknown_030012BC; const u16 gConditionGraphData_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph_data.gbapal"); const u16 gConditionText_Pal[] = INCBIN_U16("graphics/pokenav/condition/text.gbapal"); const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz"); -const u32 gUnknown_0862323C[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz"); -const u16 gUnknown_08623338[] = INCBIN_U16("graphics/pokenav/8623338.gbapal"); +const u32 sConditionGraph_Tilemap[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz"); +const u16 sConditionGraphMonMarkingsPal[] = INCBIN_U16("graphics/pokenav/8623338.gbapal"); -const struct BgTemplate gUnknown_08623358[3] = +const struct BgTemplate sPartyConditionBgTemplates[3] = { { .bg = 1, @@ -61,7 +61,7 @@ const struct BgTemplate gUnknown_08623358[3] = } }; -const struct WindowTemplate gUnknown_08623364 = +const struct WindowTemplate sMonNameGenderWindowTemplate = { .bg = 1, .tilemapLeft = 13, @@ -72,7 +72,7 @@ const struct WindowTemplate gUnknown_08623364 = .baseBlock = 2 }; -const struct WindowTemplate gUnknown_0862336C = +const struct WindowTemplate sConditionGraphListIdWindowTemplate = { .bg = 1, .tilemapLeft = 1, @@ -83,7 +83,7 @@ const struct WindowTemplate gUnknown_0862336C = .baseBlock = 0x36 }; -const struct WindowTemplate gUnknown_08623374 = +const struct WindowTemplate sUnusedWindowTemplate1 = { .bg = 1, .tilemapLeft = 1, @@ -94,7 +94,7 @@ const struct WindowTemplate gUnknown_08623374 = .baseBlock = 0x44 }; -const struct WindowTemplate gUnknown_0862337C = +const struct WindowTemplate sUnusedWindowTemplate2 = { .bg = 1, .tilemapLeft = 13, @@ -105,15 +105,15 @@ const struct WindowTemplate gUnknown_0862337C = .baseBlock = 0x44 }; -const LoopedTask gUnknown_08623384[] = +const LoopedTask sPartyConditionLoopedTaskFuncs[] = { - NULL, - sub_81CE37C, - sub_81CE2D0, - sub_81CE4D8, - sub_81CE5E4, - sub_81CE6BC, - sub_81CE700 + [PARTY_CONDITION_FUNC_NONE] = NULL, + [PARTY_CONDITION_FUNC_SLIDE_MON_IN] = LoopedTask_TransitionMons, + [PARTY_CONDITION_FUNC_RETURN] = LoopedTask_ExitPartyConditionMenu, + [PARTY_CONDITION_FUNC_NO_TRANSITION] = LoopedTask_MoveCursorNoTransition, + [PARTY_CONDITION_FUNC_SLIDE_MON_OUT] = LoopedTask_SlideMonOut, + [PARTY_CONDITION_FUNC_ADD_MARKINGS] = LoopedTask_OpenMonMarkingsWindow, + [PARTY_CONDITION_FUNC_CLOSE_MARKINGS] = LoopedTask_CloseMonMarkingsWindow }; struct Pokenav7Struct @@ -121,84 +121,84 @@ struct Pokenav7Struct u32 loopedTaskId; u8 tilemapBuffers[3][BG_SCREEN_SIZE]; u8 filler[2]; - u8 unk1806[10]; - u32 (*unk1810)(void); - s16 unk1814; - u8 unk1816; - u16 unk1818; - u16 unk181A; + u8 partyPokeballSpriteIds[10]; + u32 (*callback)(void); + s16 monTransitionX; + u8 monPicSpriteId; + u16 monPalIndex; + u16 monGfxTileStart; void *unk181C; - u8 unk1820; - u8 unk1821; - u8 unk1822; - u8 unk1823; + u8 nameGenderWindowId; + u8 listIndexWindowId; + u8 unusedWindowId1; + u8 unusedWindowId2; struct PokemonMarkMenu monMarks; - struct Sprite *unk28dc; - struct Sprite *unk28e0[MAX_CONDITION_SPARKLES]; - u8 unk2908; + struct Sprite *monMarksSprite; + struct Sprite *conditionSparkleSprites[MAX_CONDITION_SPARKLES]; + u8 windowModeState; u8 filler2[0x38ac - 0x2909]; }; -extern s8 sub_81CDC84(void); // This function's declaration here is different than its definition in pokenav_unk_6. u8/s8 +extern s8 GetMonMarkIndex(void); // This function's declaration here is different than its definition in pokenav_unk_6. u8/s8 -u32 sub_81CDE94(s32 state); -u32 sub_81CDE80(void); -void sub_81CED30(u8 var); -void sub_81CE9E4(void); -void sub_81CE934(void); -bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2); +u32 LoopedTask_OpenPartyConditionGraph(s32 state); +u32 GetPartyConditionLoopedTaskActive(void); +void CreateConditionMonPic(u8 var); +void CreateMonMarkingsOrPokeballIndicators(void); +void CopyUnusedConditionWindowsToVram(void); +bool32 UpdateConditionGraphWindows(u8 a0, u16 a1, bool8 a2); void sub_81CEE44(void); -void sub_81CEE90(void); +void DoConditionGraphTransition(void); void sub_81CEEC8(void); void sub_81CEE68(void); -void sub_81CEE74(bool8 showBg); +void ToggleBg2(bool8 showBg); // code -bool32 sub_81CDDD4(void) +bool32 OpenPartyConditionMenu(void) { - struct Pokenav7Struct *structPtr = AllocSubstruct(0xC, sizeof(struct Pokenav7Struct)); + struct Pokenav7Struct *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MON_MARK_MENU, sizeof(struct Pokenav7Struct)); if (structPtr == NULL) return FALSE; - structPtr->unk1816 = 0xFF; - structPtr->loopedTaskId = CreateLoopedTask(sub_81CDE94, 1); - structPtr->unk1810 = sub_81CDE80; - structPtr->unk2908 = 0; + structPtr->monPicSpriteId = 0xFF; + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_OpenPartyConditionGraph, 1); + structPtr->callback = GetPartyConditionLoopedTaskActive; + structPtr->windowModeState = 0; return TRUE; } -void sub_81CDE2C(s32 id) +void CreatePartyConditionLoopedTask(s32 id) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); - structPtr->loopedTaskId = CreateLoopedTask(gUnknown_08623384[id], 1); - structPtr->unk1810 = sub_81CDE80; + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); + structPtr->loopedTaskId = CreateLoopedTask(sPartyConditionLoopedTaskFuncs[id], 1); + structPtr->callback = GetPartyConditionLoopedTaskActive; } -u32 sub_81CDE64(void) +u32 IsPartyConditionLoopedTaskActive(void) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); - return structPtr->unk1810(); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); + return structPtr->callback(); } -u32 sub_81CDE80(void) +u32 GetPartyConditionLoopedTaskActive(void) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); return IsLoopedTaskActive(structPtr->loopedTaskId); } -u32 sub_81CDE94(s32 state) +u32 LoopedTask_OpenPartyConditionGraph(s32 state) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); switch (state) { case 0: - if (sub_81CD3C4() != TRUE) + if (LoadPartyConditionMenuGfx() != TRUE) return LT_PAUSE; return LT_INC_AND_PAUSE; case 1: - InitBgTemplates(gUnknown_08623358, ARRAY_COUNT(gUnknown_08623358)); + InitBgTemplates(sPartyConditionBgTemplates, ARRAY_COUNT(sPartyConditionBgTemplates)); ChangeBgX(1, 0, 0); ChangeBgY(1, 0, 0); ChangeBgX(2, 0, 0); @@ -221,23 +221,23 @@ u32 sub_81CDE94(s32 state) LZ77UnCompVram(gPokenavCondition_Tilemap, structPtr->tilemapBuffers[0]); SetBgTilemapBuffer(3, structPtr->tilemapBuffers[0]); - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) CopyToBgTilemapBufferRect(3, gPokenavOptions_Tilemap, 0, 5, 9, 4); CopyBgTilemapBufferToVram(3); CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20); CopyPaletteIntoBufferUnfaded(gConditionText_Pal, 0xF0, 0x20); - structPtr->unk1814 = -80; + structPtr->monTransitionX = -80; return LT_INC_AND_PAUSE; case 4: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - LZ77UnCompVram(gUnknown_0862323C, structPtr->tilemapBuffers[2]); + LZ77UnCompVram(sConditionGraph_Tilemap, structPtr->tilemapBuffers[2]); SetBgTilemapBuffer(2, structPtr->tilemapBuffers[2]); CopyBgTilemapBufferToVram(2); CopyPaletteIntoBufferUnfaded(gConditionGraphData_Pal, 0x30, 0x20); - sub_81D21DC(2); + SetConditionGraphIOWindows(2); return LT_INC_AND_PAUSE; case 5: sub_8199DF0(1, 0, 0, 1); @@ -249,85 +249,85 @@ u32 sub_81CDE94(s32 state) if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - structPtr->unk1820 = AddWindow(&gUnknown_08623364); - if (sub_81CDD5C() == TRUE) + structPtr->nameGenderWindowId = AddWindow(&sMonNameGenderWindowTemplate); + if (IsConditionMenuSearchMode() == TRUE) { - structPtr->unk1821 = AddWindow(&gUnknown_0862336C); - structPtr->unk1822 = AddWindow(&gUnknown_08623374); - structPtr->unk1823 = AddWindow(&gUnknown_0862337C); + structPtr->listIndexWindowId = AddWindow(&sConditionGraphListIdWindowTemplate); + structPtr->unusedWindowId1 = AddWindow(&sUnusedWindowTemplate1); + structPtr->unusedWindowId2 = AddWindow(&sUnusedWindowTemplate2); } DeactivateAllTextPrinters(); return LT_INC_AND_PAUSE; case 7: - sub_81CED30(0); + CreateConditionMonPic(0); return LT_INC_AND_PAUSE; case 8: - sub_81CE9E4(); + CreateMonMarkingsOrPokeballIndicators(); return LT_INC_AND_PAUSE; case 9: - if (sub_81CDD5C() == TRUE) - sub_81CE934(); + if (IsConditionMenuSearchMode() == TRUE) + CopyUnusedConditionWindowsToVram(); return LT_INC_AND_PAUSE; case 10: - sub_81CE754(0, sub_81CDC84(), TRUE); + UpdateConditionGraphWindows(0, GetMonMarkIndex(), TRUE); return LT_INC_AND_PAUSE; case 11: - sub_81CE754(1, sub_81CDC84(), TRUE); + UpdateConditionGraphWindows(1, GetMonMarkIndex(), TRUE); return LT_INC_AND_PAUSE; case 12: - sub_81CE754(2, sub_81CDC84(), TRUE); + UpdateConditionGraphWindows(2, GetMonMarkIndex(), TRUE); return LT_INC_AND_PAUSE; case 13: - if (sub_81CE754(3, sub_81CDC84(), TRUE) != TRUE) + if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), TRUE) != TRUE) return LT_PAUSE; - PutWindowTilemap(structPtr->unk1820); - if (sub_81CDD5C() == TRUE) + PutWindowTilemap(structPtr->nameGenderWindowId); + if (IsConditionMenuSearchMode() == TRUE) { - PutWindowTilemap(structPtr->unk1821); - PutWindowTilemap(structPtr->unk1822); - PutWindowTilemap(structPtr->unk1823); + PutWindowTilemap(structPtr->listIndexWindowId); + PutWindowTilemap(structPtr->unusedWindowId1); + PutWindowTilemap(structPtr->unusedWindowId2); } return LT_INC_AND_PAUSE; case 14: ShowBg(1); HideBg(2); ShowBg(3); - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); return LT_INC_AND_PAUSE; case 15: PokenavFadeScreen(1); - if (!sub_81CDD5C()) + if (!IsConditionMenuSearchMode()) { - LoadLeftHeaderGfxForIndex(6); - sub_81C7FA0(1, TRUE, 0); - sub_81C7FA0(6, TRUE, 0); + LoadLeftHeaderGfxForIndex(POKENAV_GFX_PARTY_MENU); + ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, TRUE, 0); + ShowLeftHeaderGfx(POKENAV_GFX_PARTY_MENU, TRUE, 0); } return LT_INC_AND_PAUSE; case 16: if (IsPaletteFadeActive()) return LT_PAUSE; - if (!sub_81CDD5C() && sub_81C8010()) + if (!IsConditionMenuSearchMode() && AreLeftHeaderSpritesMoving()) return LT_PAUSE; SetVBlankCallback_(sub_81CEE44); return LT_INC_AND_PAUSE; case 17: - sub_81CEE90(); - sub_81D20AC(sub_81CDC70()); + DoConditionGraphTransition(); + InitConditionGraphState(GetConditionGraphDataPtr()); return LT_INC_AND_PAUSE; case 18: - if (sub_81D20BC(sub_81CDC70())) + if (SetupConditionGraphScanlineParams(GetConditionGraphDataPtr())) return LT_PAUSE; return LT_INC_AND_PAUSE; case 19: - sub_81CEE74(TRUE); + ToggleBg2(TRUE); return LT_INC_AND_PAUSE; case 20: - if (!TryUpdateConditionMonTransitionOn(sub_81CDC70(), &structPtr->unk1814)) + if (!TryUpdateConditionMonTransitionOn(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) { - ResetConditionSparkleSprites(structPtr->unk28e0); - if (sub_81CDD5C() == TRUE || sub_81CDC60() != sub_81CDC50()) - CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); + if (IsConditionMenuSearchMode() == TRUE || GetConditionGraphCurrentMonIndex() != GetMonListCount()) + CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); return LT_FINISH; } @@ -337,211 +337,211 @@ u32 sub_81CDE94(s32 state) return LT_FINISH; } -u32 sub_81CE2D0(s32 state) +u32 LoopedTask_ExitPartyConditionMenu(s32 state) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); switch (state) { case 0: sub_81CEEC8(); - DestroyConditionSparkleSprites(structPtr->unk28e0); - return 1; + DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; case 1: - if (TryUpdateConditionMonTransitionOff(sub_81CDC70(), &structPtr->unk1814)) + if (TryUpdateConditionMonTransitionOff(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) return 2; - sub_81CEE74(FALSE); - return 1; + ToggleBg2(FALSE); + return LT_INC_AND_CONTINUE; case 2: PokenavFadeScreen(0); - if (!sub_81CDD5C()) - sub_81C78A0(); - return 0; + if (!IsConditionMenuSearchMode()) + SlideMenuHeaderDown(); + return LT_INC_AND_PAUSE; case 3: if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) - return 2; - FreeConditionSparkles(structPtr->unk28e0); + return LT_PAUSE; + FreeConditionSparkles(structPtr->conditionSparkleSprites); HideBg(1); HideBg(2); HideBg(3); - return 1; + return LT_INC_AND_CONTINUE; } return LT_FINISH; } -u32 sub_81CE37C(s32 state) +u32 LoopedTask_TransitionMons(s32 state) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); - struct ConditionGraph *unkPtr = sub_81CDC70(); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); + struct ConditionGraph *unkPtr = GetConditionGraphDataPtr(); switch (state) { case 0: - sub_81CD548(0); - return 1; + SetConditionGraphData(0); + return LT_INC_AND_CONTINUE; case 1: - sub_81CD548(1); - return 1; + SetConditionGraphData(1); + return LT_INC_AND_CONTINUE; case 2: - sub_81CD548(2); - DestroyConditionSparkleSprites(structPtr->unk28e0); - return 1; + SetConditionGraphData(2); + DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; case 3: TransitionConditionGraph(unkPtr); - return 1; + return LT_INC_AND_CONTINUE; case 4: - if (!MoveConditionMonOffscreen(&structPtr->unk1814)) + if (!MoveConditionMonOffscreen(&structPtr->monTransitionX)) { - sub_81CED30(sub_81CDC84()); - return 1; + CreateConditionMonPic(GetMonMarkIndex()); + return LT_INC_AND_CONTINUE; } - return 2; + return LT_PAUSE; case 5: - sub_81CE754(0, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 6: - sub_81CE754(1, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 7: - sub_81CE754(2, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 8: - if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) - return 1; - return 2; + if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; case 9: - unkPtr = sub_81CDC70(); - if (!TryUpdateConditionMonTransitionOn(unkPtr, &structPtr->unk1814)) + unkPtr = GetConditionGraphDataPtr(); + if (!TryUpdateConditionMonTransitionOn(unkPtr, &structPtr->monTransitionX)) { - ResetConditionSparkleSprites(structPtr->unk28e0); - if (sub_81CDD5C() != TRUE && sub_81CDC60() == sub_81CDC50()) - return 1; + ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); + if (IsConditionMenuSearchMode() != TRUE && GetConditionGraphCurrentMonIndex() == GetMonListCount()) + return LT_INC_AND_CONTINUE; - CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); - return 1; + CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); + return LT_INC_AND_CONTINUE; } - return 2; + return LT_PAUSE; } return LT_FINISH; } -u32 sub_81CE4D8(s32 state) +u32 LoopedTask_MoveCursorNoTransition(s32 state) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); switch (state) { case 0: - sub_81CD548(0); - return 1; + SetConditionGraphData(0); + return LT_INC_AND_CONTINUE; case 1: - sub_81CD548(1); - return 1; + SetConditionGraphData(1); + return LT_INC_AND_CONTINUE; case 2: - sub_81CD548(2); - return 1; + SetConditionGraphData(2); + return LT_INC_AND_CONTINUE; case 3: - sub_81CED30(sub_81CDC84()); - return 1; + CreateConditionMonPic(GetMonMarkIndex()); + return LT_INC_AND_CONTINUE; case 4: - sub_81CE754(0, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 5: - sub_81CE754(1, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 6: - sub_81CE754(2, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 7: - if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) - return 1; - return 2; + if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; case 8: - if (!TryUpdateConditionMonTransitionOn(sub_81CDC70(), &structPtr->unk1814)) + if (!TryUpdateConditionMonTransitionOn(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) { - ResetConditionSparkleSprites(structPtr->unk28e0); - CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); - return 1; + ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); + CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); + return LT_INC_AND_CONTINUE; } - return 2; + return LT_PAUSE; } return LT_FINISH; } -u32 sub_81CE5E4(s32 state) +u32 LoopedTask_SlideMonOut(s32 state) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); switch (state) { case 0: - sub_81CD548(0); - return 1; + SetConditionGraphData(0); + return LT_INC_AND_CONTINUE; case 1: - sub_81CD548(1); - return 1; + SetConditionGraphData(1); + return LT_INC_AND_CONTINUE; case 2: - sub_81CD548(2); - DestroyConditionSparkleSprites(structPtr->unk28e0); - return 1; + SetConditionGraphData(2); + DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; case 3: - if (!TryUpdateConditionMonTransitionOff(sub_81CDC70(), &structPtr->unk1814)) - return 1; - return 2; + if (!TryUpdateConditionMonTransitionOff(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; case 4: - sub_81CE754(0, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 5: - sub_81CE754(1, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 6: - sub_81CE754(2, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 7: - if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) - return 1; - return 2; + if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; } return LT_FINISH; } -u32 sub_81CE6BC(s32 state) +u32 LoopedTask_OpenMonMarkingsWindow(s32 state) { switch (state) { case 0: - sub_811FAA4(sub_81CDD7C(), 176, 32); - return 1; + sub_811FAA4(TryGetMonMarkId(), 176, 32); + return LT_INC_AND_CONTINUE; case 1: PrintHelpBarText(HELPBAR_CONDITION_MARKINGS); - return 1; + return LT_INC_AND_CONTINUE; case 2: if (WaitForHelpBar() == TRUE) - return 2; - return 1; + return LT_PAUSE; + return LT_INC_AND_CONTINUE; } return LT_FINISH; } -u32 sub_81CE700(s32 state) +u32 LoopedTask_CloseMonMarkingsWindow(s32 state) { switch (state) { case 0: sub_811FAF8(); - return 1; + return LT_INC_AND_CONTINUE; case 1: PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); - return 1; + return LT_INC_AND_CONTINUE; case 2: if (WaitForHelpBar() == TRUE) - return 2; - return 1; + return LT_PAUSE; + return LT_INC_AND_CONTINUE; } return LT_FINISH; @@ -555,68 +555,68 @@ static u8 *UnusedPrintNumberString(u8 *dst, u16 num) return txtPtr; } -bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2) +bool32 UpdateConditionGraphWindows(u8 mode, u16 bufferIndex, bool8 winMode) { u8 text[32]; const u8 *str; - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - switch (a0) + switch (mode) { case 0: - FillWindowPixelBuffer(structPtr->unk1820, 0); - if (sub_81CDD5C() == TRUE) - FillWindowPixelBuffer(structPtr->unk1821, 0); + FillWindowPixelBuffer(structPtr->nameGenderWindowId, 0); + if (IsConditionMenuSearchMode() == TRUE) + FillWindowPixelBuffer(structPtr->listIndexWindowId, 0); break; case 1: - if (sub_81CDC60() != sub_81CDC50() - 1 || sub_81CDD5C() == TRUE) + if (GetConditionGraphCurrentMonIndex() != GetMonListCount() - 1 || IsConditionMenuSearchMode() == TRUE) { - str = sub_81CDD04(a1); - AddTextPrinterParameterized(structPtr->unk1820, 1, str, 0, 1, 0, NULL); + str = GetConditionMonNameBuffer(bufferIndex); + AddTextPrinterParameterized(structPtr->nameGenderWindowId, 1, str, 0, 1, 0, NULL); } break; case 2: - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) { - str = sub_81CDD24(a1); - AddTextPrinterParameterized(structPtr->unk1820, 1, str, 0, 17, 0, NULL); + str = GetConditionMonLocationBuffer(bufferIndex); + AddTextPrinterParameterized(structPtr->nameGenderWindowId, 1, str, 0, 17, 0, NULL); text[0] = EXT_CTRL_CODE_BEGIN; text[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; text[2] = TEXT_COLOR_BLUE; text[3] = TEXT_COLOR_TRANSPARENT; text[4] = TEXT_COLOR_LIGHT_BLUE; StringCopy(text + 5, gText_Number2); - AddTextPrinterParameterized(structPtr->unk1821, 1, text, 4, 1, 0, NULL); - ConvertIntToDecimalStringN(text + 5, sub_81CDD48(), STR_CONV_MODE_RIGHT_ALIGN, 4); - AddTextPrinterParameterized(structPtr->unk1821, 1, text, 28, 1, 0, NULL); + AddTextPrinterParameterized(structPtr->listIndexWindowId, 1, text, 4, 1, 0, NULL); + ConvertIntToDecimalStringN(text + 5, GetConditionMonDataBuffer(), STR_CONV_MODE_RIGHT_ALIGN, 4); + AddTextPrinterParameterized(structPtr->listIndexWindowId, 1, text, 28, 1, 0, NULL); } break; case 3: - switch (structPtr->unk2908) + switch (structPtr->windowModeState) { case 0: - if (a2) - CopyWindowToVram(structPtr->unk1820, 3); + if (winMode) + CopyWindowToVram(structPtr->nameGenderWindowId, 3); else - CopyWindowToVram(structPtr->unk1820, 2); + CopyWindowToVram(structPtr->nameGenderWindowId, 2); - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) { - structPtr->unk2908++; + structPtr->windowModeState++; return FALSE; } else { - structPtr->unk2908 = 0; + structPtr->windowModeState = 0; return TRUE; } case 1: - if (a2) - CopyWindowToVram(structPtr->unk1821, 3); + if (winMode) + CopyWindowToVram(structPtr->listIndexWindowId, 3); else - CopyWindowToVram(structPtr->unk1821, 2); + CopyWindowToVram(structPtr->listIndexWindowId, 2); - structPtr->unk2908 = 0; + structPtr->windowModeState = 0; return TRUE; } } @@ -624,36 +624,36 @@ bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2) return FALSE; } -void sub_81CE934(void) +void CopyUnusedConditionWindowsToVram(void) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - CopyWindowToVram(structPtr->unk1822, 3); - CopyWindowToVram(structPtr->unk1823, 3); + CopyWindowToVram(structPtr->unusedWindowId1, 3); + CopyWindowToVram(structPtr->unusedWindowId2, 3); } void sub_81CE964(struct Sprite *sprite) { - if (sprite->data[0] == sub_81CDC60()) + if (sprite->data[0] == GetConditionGraphCurrentMonIndex()) StartSpriteAnim(sprite, 0); else StartSpriteAnim(sprite, 1); } -void sub_81CE990(struct Sprite *sprite) +void HighlightCurrentPartyIndexPokeball(struct Sprite *sprite) { - if (sub_81CDC60() == sub_81CDC50() - 1) + if (GetConditionGraphCurrentMonIndex() == GetMonListCount() - 1) sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x65); else sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x66); } -void sub_81CE9C8(struct Sprite *sprite) +void MonMarkingsCallback(struct Sprite *sprite) { - StartSpriteAnim(sprite, sub_81CDD7C()); + StartSpriteAnim(sprite, TryGetMonMarkId()); } -void sub_81CE9E4(void) +void CreateMonMarkingsOrPokeballIndicators(void) { struct SpriteSheet sprSheets[4]; struct SpriteTemplate sprTemplate; @@ -661,39 +661,40 @@ void sub_81CE9E4(void) struct SpriteSheet sprSheet; struct Sprite *sprite; u16 i, spriteId; - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); LoadConditionSelectionIcons(sprSheets, &sprTemplate, sprPals); - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) { structPtr->monMarks.baseTileTag = 0x6A; structPtr->monMarks.basePaletteTag = 0x6A; sub_811F90C(&structPtr->monMarks); sub_811FA90(); - sprite = sub_811FF94(0x69, 0x69, gUnknown_08623338); + sprite = CreateMonMarkingsSpriteWithPal(0x69, 0x69, sConditionGraphMonMarkingsPal); sprite->oam.priority = 3; sprite->pos1.x = 192; sprite->pos1.y = 32; - sprite->callback = sub_81CE9C8; - structPtr->unk28dc = sprite; - sub_81C7990(IndexOfSpritePaletteTag(0x69), 0); + sprite->callback = MonMarkingsCallback; + structPtr->monMarksSprite = sprite; + PokenavFillPalette(IndexOfSpritePaletteTag(0x69), 0); } else { + // party mode -> add pokeballs on right hand side LoadSpriteSheets(sprSheets); Pokenav_AllocAndLoadPalettes(sprPals); - for (i = 0; i < sub_81CDC50() - 1; i++) + for (i = 0; i < GetMonListCount() - 1; i++) { spriteId = CreateSprite(&sprTemplate, 226, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - structPtr->unk1806[i] = spriteId; + structPtr->partyPokeballSpriteIds[i] = spriteId; gSprites[spriteId].data[0] = i; gSprites[spriteId].callback = sub_81CE964; } else { - structPtr->unk1806[i] = 0xFF; + structPtr->partyPokeballSpriteIds[i] = 0xFF; } } @@ -704,27 +705,27 @@ void sub_81CE9E4(void) spriteId = CreateSprite(&sprTemplate, 230, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - structPtr->unk1806[i] = spriteId; + structPtr->partyPokeballSpriteIds[i] = spriteId; gSprites[spriteId].oam.size = 0; } else { - structPtr->unk1806[i] = 0xFF; + structPtr->partyPokeballSpriteIds[i] = 0xFF; } } sprTemplate.tileTag = 0x66; - sprTemplate.callback = sub_81CE990; + sprTemplate.callback = HighlightCurrentPartyIndexPokeball; spriteId = CreateSprite(&sprTemplate, 222, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - structPtr->unk1806[i] = spriteId; + structPtr->partyPokeballSpriteIds[i] = spriteId; gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16); gSprites[spriteId].oam.size = SPRITE_SIZE(32x16); } else { - structPtr->unk1806[i] = 0xFF; + structPtr->partyPokeballSpriteIds[i] = 0xFF; } } @@ -738,9 +739,9 @@ void sub_81CEBF4(struct Pokenav7Struct *structPtr) { u8 i; - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) { - DestroySprite(structPtr->unk28dc); + DestroySprite(structPtr->monMarksSprite); FreeSpriteTilesByTag(0x6A); FreeSpriteTilesByTag(0x69); FreeSpritePaletteByTag(0x6A); @@ -749,7 +750,7 @@ void sub_81CEBF4(struct Pokenav7Struct *structPtr) else { for (i = 0; i < 7; i++) - DestroySprite(&gSprites[structPtr->unk1806[i]]); + DestroySprite(&gSprites[structPtr->partyPokeballSpriteIds[i]]); FreeSpriteTilesByTag(0x65); FreeSpriteTilesByTag(0x66); @@ -758,83 +759,83 @@ void sub_81CEBF4(struct Pokenav7Struct *structPtr) FreeSpritePaletteByTag(0x66); } - if (structPtr->unk1816 != 0xFF) + if (structPtr->monPicSpriteId != 0xFF) { - DestroySprite(&gSprites[structPtr->unk1816]); + DestroySprite(&gSprites[structPtr->monPicSpriteId]); FreeSpriteTilesByTag(0x64); FreeSpritePaletteByTag(0x64); } } -void sub_81CECA0(void) +void FreePartyConditionSubstruct2(void) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - RemoveWindow(structPtr->unk1820); - if (sub_81CDD5C() == TRUE) + RemoveWindow(structPtr->nameGenderWindowId); + if (IsConditionMenuSearchMode() == TRUE) { - RemoveWindow(structPtr->unk1821); - RemoveWindow(structPtr->unk1822); - RemoveWindow(structPtr->unk1823); + RemoveWindow(structPtr->listIndexWindowId); + RemoveWindow(structPtr->unusedWindowId1); + RemoveWindow(structPtr->unusedWindowId2); } else { - sub_81C7FDC(); + SetLeftHeaderSpritesInvisibility(); } SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP); sub_81CEBF4(structPtr); sub_81CEE68(); - FreePokenavSubstruct(0xC); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_MARK_MENU); } -void sub_81CED10(struct Sprite *sprite) +void MonPicGfxSpriteCallback(struct Sprite *sprite) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); - sprite->pos1.x = structPtr->unk1814 + 38; + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); + sprite->pos1.x = structPtr->monTransitionX + 38; } -void sub_81CED30(u8 var) +void CreateConditionMonPic(u8 id) { struct SpriteTemplate sprTemplate; struct SpriteSheet sprSheet; struct SpritePalette sprPal; u8 spriteId; - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - if (structPtr->unk1816 == 0xFF) + if (structPtr->monPicSpriteId == 0xFF) { LoadConditionMonPicTemplate(&sprSheet, &sprTemplate, &sprPal); - sprSheet.data = sub_81CDCB4(var); - sprPal.data = sub_81CDCD4(var); - structPtr->unk1818 = LoadSpritePalette(&sprPal); - structPtr->unk181A = LoadSpriteSheet(&sprSheet); + sprSheet.data = GetConditionMonPicGfx(id); + sprPal.data = GetConditionMonPal(id); + structPtr->monPalIndex = LoadSpritePalette(&sprPal); + structPtr->monGfxTileStart = LoadSpriteSheet(&sprSheet); spriteId = CreateSprite(&sprTemplate, 38, 104, 0); - structPtr->unk1816 = spriteId; + structPtr->monPicSpriteId = spriteId; if (spriteId == MAX_SPRITES) { FreeSpriteTilesByTag(0x64); FreeSpritePaletteByTag(0x64); - structPtr->unk1816 = 0xFF; + structPtr->monPicSpriteId = 0xFF; } else { - structPtr->unk1816 = spriteId; - gSprites[structPtr->unk1816].callback = sub_81CED10; - structPtr->unk181C = (void*)(VRAM) + 0x10000 + (structPtr->unk181A * 32); - structPtr->unk1818 = (structPtr->unk1818 * 16) + 0x100; + structPtr->monPicSpriteId = spriteId; + gSprites[structPtr->monPicSpriteId].callback = MonPicGfxSpriteCallback; + structPtr->unk181C = (void*)(VRAM) + 0x10000 + (structPtr->monGfxTileStart * 32); + structPtr->monPalIndex = (structPtr->monPalIndex * 16) + 0x100; } } else { - DmaCopy16Defvars(3, sub_81CDCB4(var), structPtr->unk181C, 0x800); - LoadPalette(sub_81CDCD4(var), structPtr->unk1818, 0x20); + DmaCopy16Defvars(3, GetConditionMonPicGfx(id), structPtr->unk181C, 0x800); + LoadPalette(GetConditionMonPal(id), structPtr->monPalIndex, 0x20); } } void sub_81CEE44(void) { - struct ConditionGraph *unk = sub_81CDC70(); + struct ConditionGraph *unk = GetConditionGraphDataPtr(); LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); @@ -847,7 +848,7 @@ void sub_81CEE68(void) SetPokenavVBlankCallback(); } -void sub_81CEE74(bool8 showBg) +void ToggleBg2(bool8 showBg) { if (showBg) ShowBg(2); @@ -855,29 +856,29 @@ void sub_81CEE74(bool8 showBg) HideBg(2); } -void sub_81CEE90(void) +void DoConditionGraphTransition(void) { - struct ConditionGraph *unk = sub_81CDC70(); - u8 id = sub_81CDC84(); + struct ConditionGraph *conditionPtr = GetConditionGraphDataPtr(); + u8 id = GetMonMarkIndex(); gUnknown_030012BC = id; - sub_81D1F84(unk, unk->unk14[3], unk->unk14[id]); - TransitionConditionGraph(unk); + sub_81D1F84(conditionPtr, conditionPtr->unk14[3], conditionPtr->unk14[id]); + TransitionConditionGraph(conditionPtr); } void sub_81CEEC8(void) { - struct ConditionGraph *unk = sub_81CDC70(); + struct ConditionGraph *conditionPtr = GetConditionGraphDataPtr(); - if (sub_81CDD5C() || sub_81CDC60() != sub_81CDC50() - 1) - sub_81D1F84(unk, unk->unk14[sub_81CDC84()], unk->unk14[3]); + if (IsConditionMenuSearchMode() || GetConditionGraphCurrentMonIndex() != GetMonListCount() - 1) + sub_81D1F84(conditionPtr, conditionPtr->unk14[GetMonMarkIndex()], conditionPtr->unk14[3]); } -u8 sub_81CEF14(void) +u8 GetMonMarkingsData(void) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - if (sub_81CDD5C() == 1) + if (IsConditionMenuSearchMode() == 1) return structPtr->monMarks.markings; else return 0; diff --git a/src/pokenav_conditions_3.c b/src/pokenav_conditions_3.c index 15b687a429..c93544c522 100644 --- a/src/pokenav_conditions_3.c +++ b/src/pokenav_conditions_3.c @@ -10,67 +10,78 @@ #include "international_string_util.h" #include "constants/songs.h" +enum +{ + CONDITION_SEARCH_FUNC_NONE, + CONDITION_SEARCH_FUNC_MOVE_UP, + CONDITION_SEARCH_FUNC_MOVE_DOWN, + CONDITION_SEARCH_FUNC_PAGE_UP, + CONDITION_SEARCH_FUNC_PAGE_DOWN, + CONDITION_SEARCH_FUNC_EXIT, + CONDITION_SEARCH_FUNC_SELECT_MON, +}; + struct PokenavSub7 { - u32 (*unk0)(struct PokenavSub7 *); + u32 (*callback)(struct PokenavSub7 *); u32 loopedTaskId; u8 fill1[4]; - s32 unkC; - s32 unk10; - u32 unk14; + s32 boxId; + s32 monId; + u32 conditionDataId; u32 unk18; - u32 unk1C; - struct PokenavSub18 *unkPtr; + u32 isPartyCondition; + struct PokenavSub18 *monList; }; struct PokenavSub8 { bool32 (*callback)(void); - u32 ltid; + u32 ltid; //looped task Id u16 winid; - bool32 unkC; + bool32 fromGraph; u8 buff[BG_SCREEN_SIZE]; }; // size: 0x810 -static u32 sub_81CF010(struct PokenavSub7 *structPtr); -static u32 sub_81CF030(struct PokenavSub7 *structPtr); +static u32 HandleConditionSearchInput_WaitSetup(struct PokenavSub7 *structPtr); +static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr); static u32 sub_81CF0B8(struct PokenavSub7 *structPtr); -static u32 sub_81CF0B0(struct PokenavSub7 *structPtr); -static u32 sub_81CF11C(s32 state); -static u32 sub_81CF134(s32 state); -static u32 sub_81CF1C4(s32 state); -static u32 sub_81CF1D8(s32 state); +static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr); +static u32 GetConditionSearchLoopedTask(s32 state); +static u32 BuildPartyMonSearchResults(s32 state); +static u32 InitBoxMonSearchResults(s32 state); +static u32 BuildBoxMonSearchResults(s32 state); static u32 sub_81CF278(s32 state); -static u32 sub_81CF578(s32 state); -static u32 sub_81CF5F0(s32 state); -static u32 sub_81CF668(s32 state); -static u32 sub_81CF6E0(s32 state); -static u32 sub_81CF758(s32 state); -static u32 sub_81CF798(s32 state); +static u32 LoopedTask_MoveSearchListCursorUp(s32 state); +static u32 LoopedTask_MoveSearchListCursorDown(s32 state); +static u32 LoopedTask_MoveSearchListPageUp(s32 state); +static u32 LoopedTask_MoveSearchListPageDown(s32 state); +static u32 LoopedTask_ExitConditionSearchMenu(s32 state); +static u32 LoopedTask_SelectSearchResult(s32 state); static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item); -static bool32 sub_81CF3E4(void); -static u32 sub_81CF418(s32 state); -static void sub_81CF7C8(struct PokenavSub8 *); -static void sub_81CF7F4(struct PokenavSub8 *); -static void sub_81CF88C(void); -static void sub_81CF8E4(struct PokenavMonList *, u8 *); +static bool32 GetSearchResultCurrentLoopedTaskActive(void); +static u32 LoopedTask_OpenConditionSearchResults(s32 state); +static void AddSearchResultListMenuWindow(struct PokenavSub8 *); +static void PrintSearchResultListMenuItems(struct PokenavSub8 *); +static void InitConditionSearchListMenuTemplate(void); +static void PrintSearchMonListItem(struct PokenavMonList *, u8 *); -static const u32 gUnknown_086233A0[] = {0x16, 0x17, 0x18, 0x21, 0x2F}; +static const u32 sSearchMonDataIds[] = {MON_DATA_COOL, MON_DATA_BEAUTY, MON_DATA_CUTE, MON_DATA_SMART, MON_DATA_TOUGH}; -static const LoopedTask gUnknown_086233B4[] = +static const LoopedTask sConditionSearchLoopedTaskFuncs[] = { - sub_81CF134, - sub_81CF1C4, - sub_81CF1D8, + BuildPartyMonSearchResults, + InitBoxMonSearchResults, + BuildBoxMonSearchResults, sub_81CF278 }; -static const u16 gUnknown_086233C4[] = INCBIN_U16("graphics/pokenav/condition_search2.gbapal"); -static const u32 gUnknown_086233E4[] = INCBIN_U32("graphics/pokenav/condition_search2.4bpp.lz"); -static const u32 gUnknown_086234AC[] = INCBIN_U32("graphics/pokenav/condition_search2.bin.lz"); +static const u16 sConditionSearchResultFramePal[] = INCBIN_U16("graphics/pokenav/condition_search2.gbapal"); +static const u32 sConditionSearchResultTiles[] = INCBIN_U32("graphics/pokenav/condition_search2.4bpp.lz"); +static const u32 sConditionSearchResultTilemap[] = INCBIN_U32("graphics/pokenav/condition_search2.bin.lz"); static const u16 gUnknown_08623570[] = INCBIN_U16("graphics/pokenav/8623570.gbapal"); -static const struct BgTemplate gUnknown_08623590[] = +static const struct BgTemplate sConditionSearchResultBgTemplates[] = { { .bg = 1, @@ -91,18 +102,18 @@ static const struct BgTemplate gUnknown_08623590[] = } }; -static const LoopedTask gUnknown_08623598[] = +static const LoopedTask sSearchResultLoopTaskFuncs[] = { - NULL, - sub_81CF578, - sub_81CF5F0, - sub_81CF668, - sub_81CF6E0, - sub_81CF758, - sub_81CF798 + [CONDITION_SEARCH_FUNC_NONE] = NULL, + [CONDITION_SEARCH_FUNC_MOVE_UP] = LoopedTask_MoveSearchListCursorUp, + [CONDITION_SEARCH_FUNC_MOVE_DOWN] = LoopedTask_MoveSearchListCursorDown, + [CONDITION_SEARCH_FUNC_PAGE_UP] = LoopedTask_MoveSearchListPageUp, + [CONDITION_SEARCH_FUNC_PAGE_DOWN] = LoopedTask_MoveSearchListPageDown, + [CONDITION_SEARCH_FUNC_EXIT] = LoopedTask_ExitConditionSearchMenu, + [CONDITION_SEARCH_FUNC_SELECT_MON] = LoopedTask_SelectSearchResult }; -static const struct WindowTemplate gUnknown_086235B4 = +static const struct WindowTemplate sSearchResultListMenuWindowTemplate = { .bg = 1, .tilemapLeft = 1, @@ -117,137 +128,138 @@ static const u8 sText_MaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHIT static const u8 sText_FemaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); static const u8 sText_NoGenderSymbol[] = _("{UNK_SPACER}"); -bool32 PokenavCallback_Init_8(void) +bool32 PokenavCallback_Init_ConditionSearch(void) { struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); if (structPtr == NULL) return FALSE; - structPtr->unkPtr = AllocSubstruct(18, sizeof(struct PokenavSub18)); - if (structPtr->unkPtr == NULL) + structPtr->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); + if (structPtr->monList == NULL) return FALSE; - structPtr->unk0 = sub_81CF010; - structPtr->loopedTaskId = CreateLoopedTask(sub_81CF11C, 1); + structPtr->callback = HandleConditionSearchInput_WaitSetup; + structPtr->loopedTaskId = CreateLoopedTask(GetConditionSearchLoopedTask, 1); structPtr->unk18 = 0; - structPtr->unk14 = gUnknown_086233A0[GetSelectedConditionSearch()]; + structPtr->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; return TRUE; } -bool32 PokenavCallback_Init_10(void) +// return to search results from condition graph +bool32 PokenavCallback_Init_ReturnToMonSearchList(void) { - struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); + struct PokenavSub7 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, sizeof(struct PokenavSub7)); if (structPtr == NULL) return FALSE; - structPtr->unkPtr = GetSubstructPtr(18); - structPtr->unk0 = sub_81CF030; + structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + structPtr->callback = HandleConditionSearchInput; structPtr->unk18 = 1; - structPtr->unk14 = gUnknown_086233A0[GetSelectedConditionSearch()]; + structPtr->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; return TRUE; } -u32 sub_81CEFDC(void) +u32 GetConditionSearchResultsCallback(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(7); - return structPtr->unk0(structPtr); + struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return structPtr->callback(structPtr); } -void sub_81CEFF0(void) +void FreeSearchResultSubstruct1(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(7); - if (structPtr->unk1C == 0) - FreePokenavSubstruct(18); - FreePokenavSubstruct(7); + struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + if (structPtr->isPartyCondition == 0) + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); } -static bool32 sub_81CF010(struct PokenavSub7 *structPtr) +static bool32 HandleConditionSearchInput_WaitSetup(struct PokenavSub7 *structPtr) { if (!IsLoopedTaskActive(structPtr->loopedTaskId)) - structPtr->unk0 = sub_81CF030; + structPtr->callback = HandleConditionSearchInput; return FALSE; } -static u32 sub_81CF030(struct PokenavSub7 *structPtr) +static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr) { if (JOY_REPEAT(DPAD_UP)) - return 1; + return CONDITION_SEARCH_FUNC_MOVE_UP; if (JOY_REPEAT(DPAD_DOWN)) - return 2; + return CONDITION_SEARCH_FUNC_MOVE_DOWN; if (JOY_NEW(DPAD_LEFT)) - return 3; + return CONDITION_SEARCH_FUNC_PAGE_UP; if (JOY_NEW(DPAD_RIGHT)) - return 4; + return CONDITION_SEARCH_FUNC_PAGE_DOWN; if (JOY_NEW(B_BUTTON)) { - structPtr->unk1C = 0; - structPtr->unk0 = sub_81CF0B0; - return 5; + structPtr->isPartyCondition = 0; + structPtr->callback = ReturnToConditionSearchList; + return CONDITION_SEARCH_FUNC_EXIT; } if (JOY_NEW(A_BUTTON)) { - structPtr->unkPtr->unk2 = GetSelectedMatchCall(); - structPtr->unk1C = 1; - structPtr->unk0 = sub_81CF0B8; - return 6; + structPtr->monList->currIndex = GetSelectedPokenavListIndex(); + structPtr->isPartyCondition = 1; + structPtr->callback = sub_81CF0B8; + return CONDITION_SEARCH_FUNC_SELECT_MON; } - return 0; + return CONDITION_SEARCH_FUNC_NONE; } -static u32 sub_81CF0B0(struct PokenavSub7 *structPtr) +static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr) { return POKENAV_CONDITION_SEARCH_MENU; } static u32 sub_81CF0B8(struct PokenavSub7 *structPtr) { - return POKENAV_MENU_9; + return POKENAV_MENU_CONDITION_GRAPH_FROM_SEARCH; } static u32 sub_81CF0C0(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(7); + struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); return structPtr->unk18; } -static struct PokenavMonList * sub_81CF0D0(void) +static struct PokenavMonList * GetSearchResultsMonDataList(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - return ptr->unkPtr->unk4; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return ptr->monList->monData; } -static u16 sub_81CF0E0(void) +static u16 GetSearchResultsMonListCount(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - return ptr->unkPtr->unk0; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return ptr->monList->listCount; } -static s32 sub_81CF0F0(void) +static s32 GetSearchResultsSelectedMonData(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - s32 i = GetSelectedMatchCall(); - return ptr->unkPtr->unk4[i].data; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 i = GetSelectedPokenavListIndex(); + return ptr->monList->monData[i].data; } static u16 sub_81CF10C(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - return ptr->unkPtr->unk2; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return ptr->monList->currIndex; } -static u32 sub_81CF11C(s32 state) +static u32 GetConditionSearchLoopedTask(s32 state) { - return gUnknown_086233B4[state](state); + return sConditionSearchLoopedTaskFuncs[state](state); } -static u32 sub_81CF134(s32 state) +static u32 BuildPartyMonSearchResults(s32 state) { s32 i; struct PokenavMonList item; - struct PokenavSub7 * ptr = GetSubstructPtr(7); + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - ptr->unkPtr->unk0 = 0; - ptr->unkPtr->unk2 = 0; + ptr->monList->listCount = 0; + ptr->monList->currIndex = 0; item.boxId = 14; for (i = 0; i < PARTY_SIZE; i++) { @@ -257,7 +269,7 @@ static u32 sub_81CF134(s32 state) if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG)) { item.monId = i; - item.data = GetMonData(pokemon, ptr->unk14); + item.data = GetMonData(pokemon, ptr->conditionDataId); sub_81CF2C4(ptr, &item); } } @@ -265,19 +277,19 @@ static u32 sub_81CF134(s32 state) return LT_INC_AND_CONTINUE; } -static u32 sub_81CF1C4(s32 state) +static u32 InitBoxMonSearchResults(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - ptr->unk10 = 0; - ptr->unkC = 0; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + ptr->monId = 0; + ptr->boxId = 0; return LT_INC_AND_CONTINUE; } -static u32 sub_81CF1D8(s32 state) +static u32 BuildBoxMonSearchResults(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - s32 boxId = ptr->unkC; - s32 monId = ptr->unk10; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 boxId = ptr->boxId; + s32 monId = ptr->monId; s32 boxCount = 0; struct PokenavMonList item; @@ -289,15 +301,15 @@ static u32 sub_81CF1D8(s32 state) { item.boxId = boxId; item.monId = monId; - item.data = GetBoxMonDataAt(boxId, monId, ptr->unk14); + item.data = GetBoxMonDataAt(boxId, monId, ptr->conditionDataId); sub_81CF2C4(ptr, &item); } boxCount++; monId++; if (boxCount > 14) { - ptr->unkC = boxId; - ptr->unk10 = monId; + ptr->boxId = boxId; + ptr->monId = monId; return LT_CONTINUE; } } @@ -310,21 +322,21 @@ static u32 sub_81CF1D8(s32 state) static u32 sub_81CF278(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - s32 r6 = ptr->unkPtr->unk0; - s32 r4 = ptr->unkPtr->unk4[0].data; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 r6 = ptr->monList->listCount; + s32 r4 = ptr->monList->monData[0].data; s32 i; - ptr->unkPtr->unk4[0].data = 1; + ptr->monList->monData[0].data = 1; for (i = 1; i < r6; i++) { - if (ptr->unkPtr->unk4[i].data == r4) + if (ptr->monList->monData[i].data == r4) { - ptr->unkPtr->unk4[i].data = ptr->unkPtr->unk4[i - 1].data; + ptr->monList->monData[i].data = ptr->monList->monData[i - 1].data; } else { - r4 = ptr->unkPtr->unk4[i].data; - ptr->unkPtr->unk4[i].data = i + 1; + r4 = ptr->monList->monData[i].data; + ptr->monList->monData[i].data = i + 1; } } ptr->unk18 = 1; @@ -334,84 +346,84 @@ static u32 sub_81CF278(s32 state) static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item) { u32 left = 0; - u32 right = structPtr->unkPtr->unk0; + u32 right = structPtr->monList->listCount; u32 insertionIdx = left + (right - left) / 2; while (right != insertionIdx) { - if (item->data > structPtr->unkPtr->unk4[insertionIdx].data) + if (item->data > structPtr->monList->monData[insertionIdx].data) right = insertionIdx; else left = insertionIdx + 1; insertionIdx = left + (right - left) / 2; } - for (right = structPtr->unkPtr->unk0; right > insertionIdx; right--) - structPtr->unkPtr->unk4[right] = structPtr->unkPtr->unk4[right - 1]; - structPtr->unkPtr->unk4[insertionIdx] = *item; - structPtr->unkPtr->unk0++; + for (right = structPtr->monList->listCount; right > insertionIdx; right--) + structPtr->monList->monData[right] = structPtr->monList->monData[right - 1]; + structPtr->monList->monData[insertionIdx] = *item; + structPtr->monList->listCount++; } -bool32 sub_81CF330(void) +bool32 OpenConditionSearchResults(void) { - struct PokenavSub8 * unk = AllocSubstruct(8, sizeof(struct PokenavSub8)); - if (unk == NULL) + struct PokenavSub8 *searchList = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, sizeof(struct PokenavSub8)); + if (searchList == NULL) return FALSE; - unk->ltid = CreateLoopedTask(sub_81CF418, 1); - unk->callback = sub_81CF3E4; - unk->unkC = FALSE; + searchList->ltid = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); + searchList->callback = GetSearchResultCurrentLoopedTaskActive; + searchList->fromGraph = FALSE; return TRUE; } -bool32 sub_81CF368(void) +bool32 OpenConditionSearchListFromGraph(void) { - struct PokenavSub8 * unk = AllocSubstruct(8, sizeof(struct PokenavSub8)); - if (unk == NULL) + struct PokenavSub8 *searchList = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, sizeof(struct PokenavSub8)); + if (searchList == NULL) return FALSE; - unk->ltid = CreateLoopedTask(sub_81CF418, 1); - unk->callback = sub_81CF3E4; - unk->unkC = TRUE; + searchList->ltid = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); + searchList->callback = GetSearchResultCurrentLoopedTaskActive; + searchList->fromGraph = TRUE; return TRUE; } -void sub_81CF3A0(s32 idx) +void CreateSearchResultsLoopedTask(s32 idx) { - struct PokenavSub8 * unk = GetSubstructPtr(8); - unk->ltid = CreateLoopedTask(gUnknown_08623598[idx], 1); - unk->callback = sub_81CF3E4; + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + searchList->ltid = CreateLoopedTask(sSearchResultLoopTaskFuncs[idx], 1); + searchList->callback = GetSearchResultCurrentLoopedTaskActive; } -bool32 sub_81CF3D0(void) +bool32 IsSearchResultLoopedTaskActive(void) { - struct PokenavSub8 * unk = GetSubstructPtr(8); - return unk->callback(); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + return searchList->callback(); } -bool32 sub_81CF3E4(void) +bool32 GetSearchResultCurrentLoopedTaskActive(void) { - struct PokenavSub8 * unk = GetSubstructPtr(8); - return IsLoopedTaskActive(unk->ltid); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + return IsLoopedTaskActive(searchList->ltid); } -void sub_81CF3F8(void) +void FreeSearchResultSubstruct2(void) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); sub_81C8234(); - RemoveWindow(unk->winid); - FreePokenavSubstruct(8); + RemoveWindow(searchList->winid); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); } -static u32 sub_81CF418(s32 state) +static u32 LoopedTask_OpenConditionSearchResults(s32 state) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); switch (state) { case 0: - InitBgTemplates(gUnknown_08623590, NELEMS(gUnknown_08623590)); - DecompressAndCopyTileDataToVram(1, gUnknown_086233E4, 0, 0, 0); - SetBgTilemapBuffer(1, unk->buff); - CopyToBgTilemapBuffer(1, gUnknown_086234AC, 0, 0); + InitBgTemplates(sConditionSearchResultBgTemplates, NELEMS(sConditionSearchResultBgTemplates)); + DecompressAndCopyTileDataToVram(1, sConditionSearchResultTiles, 0, 0, 0); + SetBgTilemapBuffer(1, searchList->buff); + CopyToBgTilemapBuffer(1, sConditionSearchResultTilemap, 0, 0); CopyBgTilemapBufferToVram(1); - CopyPaletteIntoBufferUnfaded(gUnknown_086233C4, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, 0x10, 0x20); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -423,13 +435,13 @@ static u32 sub_81CF418(s32 state) case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(gUnknown_08623570, 0x20, 0x20); - sub_81CF88C(); + CopyPaletteIntoBufferUnfaded(gUnknown_08623570, 0x20, 32); + InitConditionSearchListMenuTemplate(); return LT_INC_AND_PAUSE; case 3: if (sub_81C8224()) return LT_PAUSE; - sub_81CF7C8(unk); + AddSearchResultListMenuWindow(searchList); PrintHelpBarText(HELPBAR_CONDITION_MON_LIST); return LT_INC_AND_PAUSE; case 4: @@ -440,28 +452,28 @@ static u32 sub_81CF418(s32 state) ShowBg(1); ShowBg(2); HideBg(3); - if (!unk->unkC) + if (!searchList->fromGraph) { - u8 r4 = GetSelectedConditionSearch() + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; - LoadLeftHeaderGfxForIndex(r4); - sub_81C7FA0(r4, 1, 0); - sub_81C7FA0(1, 1, 0); + u8 searchGfxId = GetSelectedConditionSearch() + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; + LoadLeftHeaderGfxForIndex(searchGfxId); + ShowLeftHeaderGfx(searchGfxId, 1, 0); + ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, 1, 0); } PokenavFadeScreen(1); return LT_INC_AND_PAUSE; case 5: if (IsPaletteFadeActive()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; break; } return LT_FINISH; } -static u32 sub_81CF578(s32 state) +static u32 LoopedTask_MoveSearchListCursorUp(s32 state) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); switch (state) { case 0: @@ -478,11 +490,11 @@ static u32 sub_81CF578(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81CF7F4(unk); + PrintSearchResultListMenuItems(searchList); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -492,9 +504,9 @@ static u32 sub_81CF578(s32 state) return LT_FINISH; } -static u32 sub_81CF5F0(s32 state) +static u32 LoopedTask_MoveSearchListCursorDown(s32 state) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); switch (state) { case 0: @@ -511,11 +523,11 @@ static u32 sub_81CF5F0(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81CF7F4(unk); + PrintSearchResultListMenuItems(searchList); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -525,9 +537,9 @@ static u32 sub_81CF5F0(s32 state) return LT_FINISH; } -static u32 sub_81CF668(s32 state) +static u32 LoopedTask_MoveSearchListPageUp(s32 state) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); switch (state) { case 0: @@ -544,11 +556,11 @@ static u32 sub_81CF668(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81CF7F4(unk); + PrintSearchResultListMenuItems(searchList); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -558,9 +570,9 @@ static u32 sub_81CF668(s32 state) return LT_FINISH; } -static u32 sub_81CF6E0(s32 state) +static u32 LoopedTask_MoveSearchListPageDown(s32 state) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); switch (state) { case 0: @@ -577,11 +589,11 @@ static u32 sub_81CF6E0(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81CF7F4(unk); + PrintSearchResultListMenuItems(searchList); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -591,27 +603,27 @@ static u32 sub_81CF6E0(s32 state) return LT_FINISH; } -static u32 sub_81CF758(s32 state) +static u32 LoopedTask_ExitConditionSearchMenu(s32 state) { switch (state) { case 0: PlaySE(SE_SELECT); PokenavFadeScreen(0); - sub_81C78A0(); + SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) return LT_PAUSE; if (MainMenuLoopedTaskIsBusy()) return LT_PAUSE; - sub_81C7FDC(); + SetLeftHeaderSpritesInvisibility(); break; } return LT_FINISH; } -static u32 sub_81CF798(s32 state) +static u32 LoopedTask_SelectSearchResult(s32 state) { switch (state) { @@ -627,46 +639,47 @@ static u32 sub_81CF798(s32 state) return LT_FINISH; } -static void sub_81CF7C8(struct PokenavSub8 * ptr) +static void AddSearchResultListMenuWindow(struct PokenavSub8 *searchList) { - ptr->winid = AddWindow(&gUnknown_086235B4); - PutWindowTilemap(ptr->winid); - CopyWindowToVram(ptr->winid, 1); - sub_81CF7F4(ptr); + searchList->winid = AddWindow(&sSearchResultListMenuWindowTemplate); + PutWindowTilemap(searchList->winid); + CopyWindowToVram(searchList->winid, 1); + PrintSearchResultListMenuItems(searchList); } -static void sub_81CF7F4(struct PokenavSub8 * ptr) +static void PrintSearchResultListMenuItems(struct PokenavSub8 *searchList) { - s32 r7 = sub_81CF0F0(); + s32 r7 = GetSearchResultsSelectedMonData(); DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); *gStringVar1 = EOS; DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar2, gText_NumberF700); - AddTextPrinterParameterized(ptr->winid, 1, gStringVar2, 4, 1, 0xFF, NULL); + AddTextPrinterParameterized(searchList->winid, 1, gStringVar2, 4, 1, 0xFF, NULL); ConvertIntToDecimalStringN(gStringVar1, r7, STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized(ptr->winid, 1, gStringVar1, 34, 1, 0xFF, NULL); - CopyWindowToVram(ptr->winid, 2); + AddTextPrinterParameterized(searchList->winid, 1, gStringVar1, 34, 1, 0xFF, NULL); + CopyWindowToVram(searchList->winid, 2); } -static void sub_81CF88C(void) +static void InitConditionSearchListMenuTemplate(void) { struct PokenavListTemplate template; - template.list.monList = sub_81CF0D0(); - template.unk4 = sub_81CF0E0(); + + template.list.monList = GetSearchResultsMonDataList(); + template.count = GetSearchResultsMonListCount(); template.unk8 = 4; template.unk6 = sub_81CF10C(); - template.unk9 = 13; - template.unkA = 17; - template.unkB = 1; - template.unkC = 8; - template.unkD = 2; - template.unkE = 1; - template.listFunc.unk10_1 = sub_81CF8E4; + template.item_X = 13; + template.windowWidth = 17; + template.listTop = 1; + template.maxShowed = 8; + template.fillValue = 2; + template.fontId = 1; + template.listFunc.printMonFunc = PrintSearchMonListItem; template.unk14 = NULL; - sub_81C81D4(&gUnknown_08623590[1], &template, 0); + sub_81C81D4(&sConditionSearchResultBgTemplates[1], &template, 0); } -static void sub_81CF8E4(struct PokenavMonList * item, u8 * dest) +static void PrintSearchMonListItem(struct PokenavMonList * item, u8 * dest) { u8 gender; u8 level; diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index f2b9b0dcca..806300539c 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -15,9 +15,9 @@ struct PokenavMainMenuResources { - void (*unk0)(u32); - u32 (*unk4)(void); - u32 unk8; + void (*loopTask)(u32); + u32 (*isLoopTaskActiveFunc)(void); + u32 unused; u32 currentTaskId; u32 helpBarWindowId; u32 palettes; @@ -47,8 +47,8 @@ static void SpriteCB_MoveLeftHeader(struct Sprite *sprite); static void InitPokenavMainMenuResources(void); static void InitHoennMapHeaderSprites(void); static void InitHelpBar(void); -static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0); -static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0); +static u32 LoopedTask_SlideMenuHeaderUp(s32 a0); +static u32 LoopedTask_SlideMenuHeaderDown(s32 a0); static void DrawHelpBar(u32 windowId); static void SpriteCB_SpinningPokenav(struct Sprite* sprite); static u32 LoopedTask_InitPokenavMenu(s32 a0); @@ -294,7 +294,7 @@ bool32 InitPokenavMainMenu(void) { struct PokenavMainMenuResources *structPtr; - structPtr = AllocSubstruct(0, sizeof(struct PokenavMainMenuResources)); + structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU, sizeof(struct PokenavMainMenuResources)); if (structPtr == NULL) return FALSE; @@ -306,14 +306,14 @@ bool32 InitPokenavMainMenu(void) u32 PokenavMainMenuLoopedTaskIsActive(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); return IsLoopedTaskActive(structPtr->currentTaskId); } void ShutdownPokenav(void) { PlaySE(SE_POKENAV_OFF); - sub_81CAADC(); + ResetBldCnt_(); BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); } @@ -345,7 +345,7 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) ResetTempTileDataBuffers(); return LT_INC_AND_CONTINUE; case 1: - structPtr = GetSubstructPtr(0); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DecompressAndCopyTileDataToVram(0, &gPokenavHeader_Gfx, 0, 0, 0); SetBgTilemapBuffer(0, structPtr->tilemapBuffer); CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); @@ -371,46 +371,46 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) } } -void sub_81C7834(void *func1, void *func2) // Fix types later. +void SetActiveMenuLoopTasks(void *createLoopTask, void *isLoopTaskActive) // Fix types later. { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->unk0 = func1; - structPtr->unk4 = func2; - structPtr->unk8 = 0; + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->loopTask = createLoopTask; + structPtr->isLoopTaskActiveFunc = isLoopTaskActive; + structPtr->unused = 0; } -void sub_81C7850(u32 a0) +void RunMainMenuLoopedTask(u32 a0) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->unk8 = 0; - structPtr->unk0(a0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->unused = 0; + structPtr->loopTask(a0); } -u32 sub_81C786C(void) +u32 IsActiveMenuLoopTaskActive(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - return structPtr->unk4(); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + return structPtr->isLoopTaskActiveFunc(); } -void sub_81C7880(void) +void SlideMenuHeaderUp(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_ScrollMenuHeaderDown, 4); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderUp, 4); } -void sub_81C78A0(void) +void SlideMenuHeaderDown(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_ScrollMenuHeaderUp, 4); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderDown, 4); } bool32 MainMenuLoopedTaskIsBusy(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); return IsLoopedTaskActive(structPtr->currentTaskId); } -static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0) +static u32 LoopedTask_SlideMenuHeaderUp(s32 a0) { switch (a0) { @@ -431,7 +431,7 @@ static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0) } } -static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0) +static u32 LoopedTask_SlideMenuHeaderDown(s32 a0) { if (ChangeBgY(0, 384, 2) <= 0) { @@ -465,35 +465,35 @@ void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) } } -void sub_81C7990(u32 a0, u16 a1) +void PokenavFillPalette(u32 palIndex, u16 fillValue) { - CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); + CpuFill16(fillValue, gPlttBufferFaded + 0x100 + (palIndex * 16), 16 * sizeof(u16)); } -void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette) +void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a4, u16 *palette) { if (a4 == 0) { - CpuCopy16(a0, palette, a2 * 2); + CpuCopy16(src, palette, size * 2); } else if (a4 >= a3) { - CpuCopy16(a1, palette, a2 * 2); + CpuCopy16(dest, palette, size * 2); } else { int r, g, b; int r1, g1, b1; - while (a2--) + while (size--) { - r = GET_R(*a0); - g = GET_G(*a0); - b = GET_B(*a0); + r = GET_R(*src); + g = GET_G(*src); + b = GET_B(*src); - r1 = ((((GET_R(*a1) << 8) - (r << 8)) / a3) * a4) >> 8; - g1 = ((((GET_G(*a1) << 8) - (g << 8)) / a3) * a4) >> 8; - b1 = ((((GET_B(*a1) << 8) - (b << 8)) / a3) * a4) >> 8; + r1 = ((((GET_R(*dest) << 8) - (r << 8)) / a3) * a4) >> 8; + g1 = ((((GET_G(*dest) << 8) - (g << 8)) / a3) * a4) >> 8; + b1 = ((((GET_B(*dest) << 8) - (b << 8)) / a3) * a4) >> 8; r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match; I have to assign the value of ((r + r1) & 0x1F) to r1 g = (g + g1) & 0x1F; //See above @@ -501,7 +501,7 @@ void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *pale *palette = RGB2(r, g, b); //See above comment - a0++, a1++; + src++, dest++; palette++; } } @@ -509,7 +509,7 @@ void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *pale void PokenavFadeScreen(s32 fadeType) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); switch (fadeType) { @@ -548,7 +548,7 @@ void InitBgTemplates(const struct BgTemplate *templates, int count) static void InitHelpBar(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); InitWindows(&sHelpBarWindowTemplate[0]); structPtr->helpBarWindowId = 0; @@ -559,7 +559,7 @@ static void InitHelpBar(void) void PrintHelpBarText(u32 textId) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DrawHelpBar(structPtr->helpBarWindowId); AddTextPrinterParameterized3(structPtr->helpBarWindowId, 1, 0, 1, sHelpBarTextColors, 0, sHelpBarTexts[textId]); @@ -580,7 +580,7 @@ static void InitPokenavMainMenuResources(void) { s32 i; u8 spriteId; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); for (i = 0; i < ARRAY_COUNT(gSpinningPokenavSpriteSheet); i++) LoadCompressedSpriteSheet(&gSpinningPokenavSpriteSheet[i]); @@ -593,7 +593,7 @@ static void InitPokenavMainMenuResources(void) static void CleanupPokenavMainMenuResources(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DestroySprite(structPtr->spinningPokenav); FreeSpriteTilesByTag(0); @@ -608,7 +608,7 @@ static void SpriteCB_SpinningPokenav(struct Sprite *sprite) struct Sprite *PauseSpinningPokenavSprite(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); structPtr->spinningPokenav->callback = SpriteCallbackDummy; return structPtr->spinningPokenav; @@ -616,7 +616,7 @@ struct Sprite *PauseSpinningPokenavSprite(void) void ResumeSpinningPokenavSprite(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); structPtr->spinningPokenav->pos1.x = 220; structPtr->spinningPokenav->pos1.y = 12; @@ -629,7 +629,7 @@ void ResumeSpinningPokenavSprite(void) static void InitHoennMapHeaderSprites(void) { s32 i, spriteId; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet); AllocSpritePalette(1); @@ -658,9 +658,9 @@ void LoadLeftHeaderGfxForIndex(u32 menuGfxId) LoadLeftHeaderGfxForSubMenu(menuGfxId - POKENAV_GFX_SUBMENUS_START); } -void sub_81C7E14(u32 menuGfxId) +void UpdateRegionMapRightHeaderTiles(u32 menuGfxId) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT) structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 32; @@ -676,7 +676,7 @@ static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) if (menuGfxId >= POKENAV_GFX_SUBMENUS_START) return; - structPtr = GetSubstructPtr(0); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); tag = sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].tag; size = GetDecompressedDataSize(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data); LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20); @@ -704,33 +704,33 @@ static void LoadLeftHeaderGfxForSubMenu(u32 menuGfxId) RequestDma3Copy(&gDecompressionBuffer[0x1000], (void *)VRAM + 0x10800 + (GetSpriteTileStartByTag(2) * 32), size, 1); } -void sub_81C7FA0(u32 menuGfxId, bool32 arg1, bool32 arg2) +void ShowLeftHeaderGfx(u32 menuGfxId, bool32 isMain, bool32 isOnRightSide) { - u32 var; + u32 tileTop; - if (!arg1) - var = 0x30; + if (!isMain) + tileTop = 0x30; else - var = 0x10; + tileTop = 0x10; if (menuGfxId < POKENAV_GFX_SUBMENUS_START) - ShowLeftHeaderSprites(var, arg2); + ShowLeftHeaderSprites(tileTop, isOnRightSide); else - ShowLeftHeaderSubmenuSprites(var, arg2); + ShowLeftHeaderSubmenuSprites(tileTop, isOnRightSide); } -void sub_81C7FC4(u32 arg0, bool32 arg1) +void HideMainOrSubMenuLeftHeader(u32 id, bool32 onRightSide) { - if (arg0 < 6) - HideLeftHeaderSprites(arg1); + if (id < POKENAV_GFX_PARTY_MENU) + HideLeftHeaderSprites(onRightSide); else - HideLeftHeaderSubmenuSprites(arg1); + HideLeftHeaderSubmenuSprites(onRightSide); } -void sub_81C7FDC(void) +void SetLeftHeaderSpritesInvisibility(void) { s32 i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { @@ -739,9 +739,9 @@ void sub_81C7FDC(void) } } -bool32 sub_81C8010(void) +bool32 AreLeftHeaderSpritesMoving(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (structPtr->leftHeaderSprites[0]->callback == SpriteCallbackDummy && structPtr->submenuLeftHeaderSprites[0]->callback == SpriteCallbackDummy) return FALSE; @@ -752,7 +752,7 @@ bool32 sub_81C8010(void) static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = -96, end = 32; @@ -769,7 +769,7 @@ static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = -96, end = 16; @@ -786,7 +786,7 @@ static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) static void HideLeftHeaderSprites(bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = 32, end = -96; @@ -802,7 +802,7 @@ static void HideLeftHeaderSprites(bool32 isOnRightSide) static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = 16, end = -96; diff --git a/src/pokenav_match_call_1.c b/src/pokenav_match_call_1.c index d919a4dbf8..fb44aaa876 100755 --- a/src/pokenav_match_call_1.c +++ b/src/pokenav_match_call_1.c @@ -53,7 +53,7 @@ static const u8 sMatchCallOptionsHasCheckPage[] = bool32 PokenavCallback_Init_MatchCall(void) { - struct Pokenav3Struct *state = AllocSubstruct(5, sizeof(struct Pokenav3Struct)); + struct Pokenav3Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, sizeof(struct Pokenav3Struct)); if (!state) return FALSE; @@ -66,13 +66,13 @@ bool32 PokenavCallback_Init_MatchCall(void) u32 GetMatchCallCallback(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->callback(state); } void FreeMatchCallSubstruct1(void) { - FreePokenavSubstruct(5); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); } static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) @@ -92,7 +92,7 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) { state->callback = CB2_HandleMatchCallOptionsInput; state->optionCursorPos = 0; - selection = GetSelectedMatchCall(); + selection = GetSelectedPokenavListIndex(); if (!state->matchCallEntries[selection].isSpecialTrainer || MatchCall_HasCheckPage(state->matchCallEntries[selection].headerId)) { @@ -205,7 +205,7 @@ static u32 CB2_HandleCallInput(struct Pokenav3Struct *state) static u32 sub_81CAD20(s32 taskState) { int i, j; - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); switch (taskState) { case 0: @@ -239,7 +239,7 @@ static u32 sub_81CAD20(s32 taskState) { state->matchCallEntries[state->numRegistered].headerId = state->headerId; state->matchCallEntries[state->numRegistered].isSpecialTrainer = FALSE; - state->matchCallEntries[state->numRegistered].mapSec = sub_81CB0C8(j); + state->matchCallEntries[state->numRegistered].mapSec = GetMatchTableMapSectionId(j); state->numRegistered++; } @@ -266,31 +266,31 @@ bool32 IsRematchEntryRegistered(int rematchIndex) int sub_81CAE28(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->unk10; } int GetNumberRegistered(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->numRegistered; } int sub_81CAE48(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->unkC; } int unref_sub_81CAE58(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->numRegistered - state->unkC; } int unref_sub_81CAE6C(int arg0) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); arg0 += state->unkC; if (arg0 >= state->numRegistered) return REMATCH_TABLE_ENTRIES; @@ -300,19 +300,19 @@ int unref_sub_81CAE6C(int arg0) struct PokenavMatchCallEntries *sub_81CAE94(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->matchCallEntries; } u16 GetMatchCallMapSec(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->matchCallEntries[index].mapSec; } bool32 ShouldDrawRematchPokeballIcon(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (!state->matchCallEntries[index].isSpecialTrainer) index = state->matchCallEntries[index].headerId; else @@ -327,7 +327,7 @@ bool32 ShouldDrawRematchPokeballIcon(int index) int GetMatchCallTrainerPic(int index) { int headerId; - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (!state->matchCallEntries[index].isSpecialTrainer) { index = GetTrainerIdxByRematchIdx(state->matchCallEntries[index].headerId); @@ -348,7 +348,7 @@ int GetMatchCallTrainerPic(int index) const u8 *GetMatchCallMessageText(int index, u8 *arg1) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); *arg1 = 0; if (!Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType)) return gText_CallCantBeMadeHere; @@ -364,7 +364,7 @@ const u8 *GetMatchCallMessageText(int index, u8 *arg1) const u8 *GetMatchCallFlavorText(int index, int checkPageEntry) { int rematchId; - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (state->matchCallEntries[index].isSpecialTrainer) { rematchId = MatchCall_GetRematchTableIdx(state->matchCallEntries[index].headerId); @@ -381,13 +381,13 @@ const u8 *GetMatchCallFlavorText(int index, int checkPageEntry) u16 GetMatchCallOptionCursorPos(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->optionCursorPos; } u16 GetMatchCallOptionId(int optionId) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (state->maxOptionId < optionId) return MATCH_CALL_OPTION_COUNT; @@ -422,7 +422,7 @@ void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntries *matchCallEntry, } } -u8 sub_81CB0C8(int rematchIndex) +u8 GetMatchTableMapSectionId(int rematchIndex) { int mapGroup = gRematchTable[rematchIndex].mapGroup; int mapNum = gRematchTable[rematchIndex].mapNum; @@ -431,7 +431,7 @@ u8 sub_81CB0C8(int rematchIndex) int GetIndexDeltaOfNextCheckPageDown(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); int count = 1; while (++index < state->numRegistered) { @@ -448,7 +448,7 @@ int GetIndexDeltaOfNextCheckPageDown(int index) int GetIndexDeltaOfNextCheckPageUp(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); int count = -1; while (--index >= 0) { @@ -488,8 +488,8 @@ bool32 unref_sub_81CB16C(void) static bool32 sub_81CB1D0(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); - int selection = GetSelectedMatchCall(); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + int selection = GetSelectedPokenavListIndex(); if (!state->matchCallEntries[selection].isSpecialTrainer) { if (GetMatchCallMapSec(selection) == gMapHeader.regionMapSectionId) diff --git a/src/pokenav_match_call_2.c b/src/pokenav_match_call_2.c index 337c75ce6b..63426199cb 100755 --- a/src/pokenav_match_call_2.c +++ b/src/pokenav_match_call_2.c @@ -36,7 +36,7 @@ struct Pokenav4Struct u16 msgBoxWindowId; s16 unk16; u8 unused18; - u8 unk19; + u8 unused19; u16 unk1A; struct Sprite *optionsCursorSprite; struct Sprite *trainerPicSprite; @@ -50,9 +50,9 @@ struct Pokenav4Struct static bool32 GetCurrentLoopedTaskActive(void); static u32 LoopedTask_OpenMatchCall(s32); -static void sub_81CBBB8(void); +static void InitMatchCallPokenavListMenuTemplate(void); static void sub_81CBC1C(void); -static void sub_81CC2B4(void); +static void RemoveMatchCallSprites(void); static void sub_81CC034(struct Pokenav4Struct *); static void DrawMatchCallLeftColumnWindows(struct Pokenav4Struct *); static void UpdateMatchCallInfoBox(struct Pokenav4Struct *); @@ -119,7 +119,7 @@ static const u16 gUnknown_08622700[] = INCBIN_U16("graphics/pokenav/8622700.gbap static const u16 gUnknown_08622720[] = INCBIN_U16("graphics/pokenav/pokeball_matchcall.gbapal"); static const u32 gUnknown_08622760[] = INCBIN_U32("graphics/pokenav/pokeball_matchcall.4bpp.lz"); -const struct BgTemplate gUnknown_0862278C[3] = +const struct BgTemplate sMatchCallBgTemplates[3] = { { .bg = 1, @@ -275,11 +275,11 @@ static const struct SpriteTemplate sTrainerPicSpriteTemplate = bool32 OpenMatchCall(void) { - struct Pokenav4Struct *state = AllocSubstruct(6, sizeof(struct Pokenav4Struct)); + struct Pokenav4Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN, sizeof(struct Pokenav4Struct)); if (!state) return FALSE; - state->unk19 = 0; + state->unused19 = 0; state->loopTaskId = CreateLoopedTask(LoopedTask_OpenMatchCall, 1); state->isTaskActiveCB = GetCurrentLoopedTaskActive; return TRUE; @@ -287,21 +287,21 @@ bool32 OpenMatchCall(void) void CreateMatchCallLoopedTask(s32 index) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); state->loopTaskId = CreateLoopedTask(sMatchCallLoopTaskFuncs[index], 1); state->isTaskActiveCB = GetCurrentLoopedTaskActive; } bool32 IsMatchCallLoopedTaskActive(void) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); return state->isTaskActiveCB(); } void FreeMatchCallSubstruct2(void) { - struct Pokenav4Struct *state = GetSubstructPtr(6); - sub_81CC2B4(); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + RemoveMatchCallSprites(); sub_81CBC1C(); RemoveWindow(state->infoBoxWindowId); RemoveWindow(state->locWindowId); @@ -311,17 +311,17 @@ void FreeMatchCallSubstruct2(void) static bool32 GetCurrentLoopedTaskActive(void) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); return IsLoopedTaskActive(state->loopTaskId); } static u32 LoopedTask_OpenMatchCall(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: - InitBgTemplates(gUnknown_0862278C, ARRAY_COUNT(gUnknown_0862278C)); + InitBgTemplates(sMatchCallBgTemplates, ARRAY_COUNT(sMatchCallBgTemplates)); ChangeBgX(2, 0, 0); ChangeBgY(2, 0, 0); DecompressAndCopyTileDataToVram(2, sMatchCallUI_Gfx, 0, 0, 0); @@ -354,7 +354,7 @@ static u32 LoopedTask_OpenMatchCall(s32 taskState) if (FreeTempTileDataBuffersIfPossible() || !sub_81CAE28()) return LT_PAUSE; - sub_81CBBB8(); + InitMatchCallPokenavListMenuTemplate(); return LT_INC_AND_PAUSE; case 4: if (sub_81C8224()) @@ -374,11 +374,11 @@ static u32 LoopedTask_OpenMatchCall(s32 taskState) ShowBg(1); sub_81CC214(); LoadLeftHeaderGfxForIndex(3); - sub_81C7FA0(3, 1, 0); + ShowLeftHeaderGfx(POKENAV_GFX_MATCH_CALL_MENU, 1, 0); PokenavFadeScreen(1); return LT_INC_AND_PAUSE; case 7: - if (IsPaletteFadeActive() || sub_81C8010()) + if (IsPaletteFadeActive() || AreLeftHeaderSpritesMoving()) return LT_PAUSE; sub_81CBC38(1); @@ -390,7 +390,7 @@ static u32 LoopedTask_OpenMatchCall(s32 taskState) u32 MatchCallListCursorDown(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -409,7 +409,7 @@ u32 MatchCallListCursorDown(s32 taskState) } break; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; PrintMatchCallLocation(state, 0); @@ -427,7 +427,7 @@ u32 MatchCallListCursorDown(s32 taskState) u32 MatchCallListCursorUp(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -446,7 +446,7 @@ u32 MatchCallListCursorUp(s32 taskState) } break; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; PrintMatchCallLocation(state, 0); @@ -464,7 +464,7 @@ u32 MatchCallListCursorUp(s32 taskState) u32 MatchCallListPageDown(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -483,7 +483,7 @@ u32 MatchCallListPageDown(s32 taskState) } break; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; PrintMatchCallLocation(state, 0); @@ -501,7 +501,7 @@ u32 MatchCallListPageDown(s32 taskState) u32 MatchCallListPageUp(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -520,7 +520,7 @@ u32 MatchCallListPageUp(s32 taskState) } break; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; PrintMatchCallLocation(state, 0); @@ -538,7 +538,7 @@ u32 MatchCallListPageUp(s32 taskState) u32 SelectMatchCallEntry(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -561,7 +561,7 @@ u32 MoveMatchCallOptionsCursor(s32 taskState) u16 cursorPos; PlaySE(SE_SELECT); - state = GetSubstructPtr(6); + state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); cursorPos = GetMatchCallOptionCursorPos(); UpdateCursorGfxPos(state, cursorPos); return LT_FINISH; @@ -569,7 +569,7 @@ u32 MoveMatchCallOptionsCursor(s32 taskState) u32 CancelMatchCallSelection(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -588,7 +588,7 @@ u32 CancelMatchCallSelection(s32 taskState) u32 DoMatchCallMessage(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -620,7 +620,7 @@ u32 DoMatchCallMessage(s32 taskState) u32 DoTrainerCloseByMessage(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -646,7 +646,7 @@ u32 DoTrainerCloseByMessage(s32 taskState) u32 sub_81CB888(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); u32 result = LT_INC_AND_PAUSE; switch (taskState) @@ -710,7 +710,7 @@ u32 sub_81CB888(s32 taskState) u32 ShowCheckPage(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -719,7 +719,7 @@ u32 ShowCheckPage(s32 taskState) UpdateWindowsToShowCheckPage(state); return LT_INC_AND_PAUSE; case 1: - if (sub_81C8820() || IsDma3ManagerBusyWithBgCopy1(state)) + if (IsMatchCallListTaskActive() || IsDma3ManagerBusyWithBgCopy1(state)) return LT_PAUSE; PrintHelpBarText(HELPBAR_MC_CHECK_PAGE); @@ -729,7 +729,7 @@ u32 ShowCheckPage(s32 taskState) LoadCheckPageTrainerPic(state); return LT_INC_AND_PAUSE; case 3: - if (sub_81C8820() || WaitForTrainerPic(state) || WaitForHelpBar()) + if (IsMatchCallListTaskActive() || WaitForTrainerPic(state) || WaitForHelpBar()) return LT_PAUSE; break; } @@ -741,7 +741,7 @@ u32 ShowCheckPageDown(s32 taskState) { int topId; int delta; - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -768,7 +768,7 @@ u32 ShowCheckPageDown(s32 taskState) LoadCheckPageTrainerPic(state); return LT_INC_AND_PAUSE; case 4: - if (sub_81C8820() || WaitForTrainerPic(state)) + if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) return LT_PAUSE; break; } @@ -778,7 +778,7 @@ u32 ShowCheckPageDown(s32 taskState) u32 ExitCheckPage(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -787,7 +787,7 @@ u32 ExitCheckPage(s32 taskState) sub_81C87F0(); return LT_INC_AND_PAUSE; case 1: - if (sub_81C8820() || WaitForTrainerPic(state)) + if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) return LT_PAUSE; PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); @@ -806,7 +806,7 @@ u32 ShowCheckPageUp(s32 taskState) { int topId; int delta; - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -833,7 +833,7 @@ u32 ShowCheckPageUp(s32 taskState) LoadCheckPageTrainerPic(state); return LT_INC_AND_PAUSE; case 4: - if (sub_81C8820() || WaitForTrainerPic(state)) + if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) return LT_PAUSE; break; } @@ -849,35 +849,35 @@ u32 ExitMatchCall(s32 taskState) PlaySE(SE_SELECT); sub_81CBC38(0); PokenavFadeScreen(0); - sub_81C78A0(); + SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) return LT_PAUSE; - sub_81C7FDC(); + SetLeftHeaderSpritesInvisibility(); break; } return LT_FINISH; } -static void sub_81CBBB8(void) +static void InitMatchCallPokenavListMenuTemplate(void) { struct PokenavListTemplate template; template.list.matchCallEntries = sub_81CAE94(); - template.unk4 = GetNumberRegistered(); + template.count = GetNumberRegistered(); template.unk8 = 4; template.unk6 = 0; - template.unk9 = 13; - template.unkA = 16; - template.unkB = 1; - template.unkC = 8; - template.unkD = 3; - template.unkE = 7; + template.item_X = 13; + template.windowWidth = 16; + template.listTop = 1; + template.maxShowed = 8; + template.fillValue = 3; + template.fontId = 7; template.listFunc.unk10_2 = BufferMatchCallNameAndDesc; template.unk14 = TryDrawRematchPokeballIcon; - sub_81C81D4(&gUnknown_0862278C[2], &template, 2); + sub_81C81D4(&sMatchCallBgTemplates[2], &template, 2); CreateTask(sub_81CBC64, 7); } @@ -902,7 +902,7 @@ static void sub_81CBC64(u8 taskId) taskData[0] += 4; taskData[0] &= 0x7F; taskData[1] = gSineTable[taskData[0]] >> 4; - sub_81C79BC(gUnknown_08622720, gUnknown_08622720 + 0x10, 0x10, 0x10, taskData[1], gPlttBufferUnfaded + 0x50); + PokenavCopyPalette(gUnknown_08622720, gUnknown_08622720 + 0x10, 0x10, 0x10, taskData[1], gPlttBufferUnfaded + 0x50); if (!gPaletteFade.active) CpuCopy32(gPlttBufferUnfaded + 0x50, gPlttBufferFaded + 0x50, 0x20); } @@ -1000,7 +1000,7 @@ static void PrintMatchCallLocation(struct Pokenav4Struct *state, int arg1) { u8 mapName[32]; int x; - int index = GetSelectedMatchCall() + arg1; + int index = GetSelectedPokenavListIndex() + arg1; int mapSec = GetMatchCallMapSec(index); if (mapSec != MAPSEC_NONE) GetMapName(mapName, mapSec, 0); @@ -1117,7 +1117,7 @@ static bool32 WaitForTrainerIsCloseByText(struct Pokenav4Struct *state) static void PrintMatchCallMessage(struct Pokenav4Struct *state) { - int index = GetSelectedMatchCall(); + int index = GetSelectedPokenavListIndex(); const u8 *str = GetMatchCallMessageText(index, &state->unkF); u8 speed = GetPlayerTextSpeedDelay(); AddTextPrinterParameterized(state->msgBoxWindowId, 1, str, 32, 1, speed, NULL); @@ -1151,7 +1151,7 @@ static void sub_81CC214(void) int i; u8 paletteNum; struct SpriteSheet spriteSheet; - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); for (i = 0; i < ARRAY_COUNT(gUnknown_08622810); i++) LoadCompressedSpriteSheet(&gUnknown_08622810[i]); @@ -1168,9 +1168,9 @@ static void sub_81CC214(void) state->trainerPicSprite->invisible = TRUE; } -static void sub_81CC2B4(void) +static void RemoveMatchCallSprites(void) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); if (state->optionsCursorSprite) DestroySprite(state->optionsCursorSprite); if (state->trainerPicSprite) @@ -1221,7 +1221,7 @@ static struct Sprite *CreateTrainerPicSprite(void) static void LoadCheckPageTrainerPic(struct Pokenav4Struct *state) { u16 cursor; - int trainerPic = GetMatchCallTrainerPic(GetSelectedMatchCall()); + int trainerPic = GetMatchCallTrainerPic(GetSelectedPokenavListIndex()); if (trainerPic >= 0) { DecompressPicFromTable(&gTrainerFrontPicTable[trainerPic], state->unk1828, SPECIES_NONE); diff --git a/src/pokenav_match_call_ui.c b/src/pokenav_match_call_ui.c index 01740fccec..2d89f9c39b 100644 --- a/src/pokenav_match_call_ui.c +++ b/src/pokenav_match_call_ui.c @@ -9,7 +9,7 @@ // TODO: This UI isnt just for match call, seems to be the general pokenav list UI -struct UnknownSubSubStruct_0203CF40 { +struct PokenavListMenuWindow { u8 bg; u8 unk1; u8 unk2; @@ -38,14 +38,14 @@ struct MatchCallWindowState { struct PokenavSub17Substruct { - struct UnknownSubSubStruct_0203CF40 unk0; + struct PokenavListMenuWindow listWindow; u32 unk10; u32 unk14; u32 unk18; void * unk1C; s32 unk20; s32 unk24; - u32 unk28; + u32 loopedTaskId; s32 unk2C; u32 unk30; void (*unk34)(struct PokenavMatchCallEntries *, u8*); @@ -59,34 +59,34 @@ struct PokenavSub17Substruct // Generally at index 0x11 (17) struct PokenavSub17 { - struct PokenavSub17Substruct unk0; + struct PokenavSub17Substruct list; u8 tilemapBuffer[0x800]; struct MatchCallWindowState unk888; s32 unk89C; - u32 unk8A0; + u32 loopedTaskId; }; extern void sub_81DB620(u32 windowId, u32 a1, u32 a2, u32 a3, u32 a4); -void sub_81C82E4(struct PokenavSub17 *a0); -bool32 sub_81C91AC(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct PokenavListTemplate *a2, s32 a3); -void sub_81C9160(struct MatchCallWindowState *a0, struct PokenavListTemplate *a1); +void sub_81C82E4(struct PokenavSub17 *matchCall); +bool32 CopyPokenavListMenuTemplate(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct PokenavListTemplate *a2, s32 a3); +void InitMatchCallWindowState(struct MatchCallWindowState *a0, struct PokenavListTemplate *a1); void SpriteCB_MatchCallUpArrow(struct Sprite *sprite); void SpriteCB_MatchCallDownArrow(struct Sprite *sprite); void SpriteCB_MatchCallRightArrow(struct Sprite *sprite); void ToggleMatchCallArrows(struct PokenavSub17Substruct *a0, u32 a1); -void sub_81C8FE0(struct PokenavSub17Substruct *a0); -void sub_81C8EF8(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); +void DestroyMatchCallListArrows(struct PokenavSub17Substruct *a0); +void CreateMatchCallArrowSprites(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); void sub_81C8ED0(void); static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 a2); void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 a1); void sub_81C8D4C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); void sub_81C8CB4(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, s32 a1, s32 a2); +void sub_81C8B70(struct PokenavListMenuWindow *a0, s32 a1, s32 a2); void sub_81C8568(s32 a0, struct PokenavSub17Substruct *a1); void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *a5); void sub_81C837C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C835C(struct UnknownSubSubStruct_0203CF40 *a0); +void sub_81C835C(struct PokenavListMenuWindow *a0); u32 LoopedTask_sub_81C8254(s32 state); bool32 sub_81C83E0(void); u32 LoopedTask_sub_81C83F0(s32 state); @@ -102,12 +102,12 @@ EWRAM_DATA u32 gUnknown_0203CF44 = 0; bool32 sub_81C81D4(const struct BgTemplate *arg0, struct PokenavListTemplate *arg1, s32 arg2) { - struct PokenavSub17 *structPtr = AllocSubstruct(17, sizeof(struct PokenavSub17)); + struct PokenavSub17 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_LIST, sizeof(struct PokenavSub17)); if (structPtr == NULL) return FALSE; - sub_81C9160(&structPtr->unk888, arg1); - if (!sub_81C91AC(&structPtr->unk0, arg0, arg1, arg2)) + InitMatchCallWindowState(&structPtr->unk888, arg1); + if (!CopyPokenavListMenuTemplate(&structPtr->list, arg0, arg1, arg2)) return FALSE; CreateLoopedTask(LoopedTask_sub_81C8254, 6); @@ -123,10 +123,10 @@ void sub_81C8234(void) { struct PokenavSub17 *structPtr; - structPtr = GetSubstructPtr(17); - sub_81C8FE0(&structPtr->unk0); - RemoveWindow(structPtr->unk0.unk0.windowId); - FreePokenavSubstruct(17); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); + DestroyMatchCallListArrows(&structPtr->list); + RemoveWindow(structPtr->list.listWindow.windowId); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); } u32 LoopedTask_sub_81C8254(s32 state) @@ -134,9 +134,9 @@ u32 LoopedTask_sub_81C8254(s32 state) struct PokenavSub17 *structPtr; if (IsDma3ManagerBusyWithBgCopy()) - return 2; + return LT_PAUSE; - structPtr = GetSubstructPtr(17); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); switch (state) { @@ -144,10 +144,10 @@ u32 LoopedTask_sub_81C8254(s32 state) sub_81C82E4(structPtr); return LT_INC_AND_PAUSE; case 1: - sub_81C835C(&structPtr->unk0.unk0); + sub_81C835C(&structPtr->list.listWindow); return LT_INC_AND_PAUSE; case 2: - sub_81C837C(&structPtr->unk888, &structPtr->unk0); + sub_81C837C(&structPtr->unk888, &structPtr->list); return LT_INC_AND_PAUSE; case 3: if (sub_81C83E0()) @@ -160,53 +160,53 @@ u32 LoopedTask_sub_81C8254(s32 state) return LT_INC_AND_CONTINUE; } case 4: - sub_81C8EF8(&structPtr->unk888, &structPtr->unk0); + CreateMatchCallArrowSprites(&structPtr->unk888, &structPtr->list); return LT_FINISH; default: return LT_FINISH; } } -void sub_81C82E4(struct PokenavSub17 *a0) +void sub_81C82E4(struct PokenavSub17 *matchCall) { - u16 tileNum = (a0->unk0.unk0.unk1 << 12) | a0->unk0.unk0.unk6; - sub_8199DF0(a0->unk0.unk0.bg, PIXEL_FILL(1), a0->unk0.unk0.unk6, 1); - sub_8199DF0(a0->unk0.unk0.bg, PIXEL_FILL(4), a0->unk0.unk0.unk6 + 1, 1); - SetBgTilemapBuffer(a0->unk0.unk0.bg, a0->tilemapBuffer); - FillBgTilemapBufferRect_Palette0(a0->unk0.unk0.bg, tileNum, 0, 0, 32, 32); - ChangeBgY(a0->unk0.unk0.bg, 0, 0); - ChangeBgX(a0->unk0.unk0.bg, 0, 0); - ChangeBgY(a0->unk0.unk0.bg, a0->unk0.unk0.unk3 << 11, 2); - CopyBgTilemapBufferToVram(a0->unk0.unk0.bg); + u16 tileNum = (matchCall->list.listWindow.unk1 << 12) | matchCall->list.listWindow.unk6; + sub_8199DF0(matchCall->list.listWindow.bg, PIXEL_FILL(1), matchCall->list.listWindow.unk6, 1); + sub_8199DF0(matchCall->list.listWindow.bg, PIXEL_FILL(4), matchCall->list.listWindow.unk6 + 1, 1); + SetBgTilemapBuffer(matchCall->list.listWindow.bg, matchCall->tilemapBuffer); + FillBgTilemapBufferRect_Palette0(matchCall->list.listWindow.bg, tileNum, 0, 0, 32, 32); + ChangeBgY(matchCall->list.listWindow.bg, 0, 0); + ChangeBgX(matchCall->list.listWindow.bg, 0, 0); + ChangeBgY(matchCall->list.listWindow.bg, matchCall->list.listWindow.unk3 << 11, 2); + CopyBgTilemapBufferToVram(matchCall->list.listWindow.bg); } -void sub_81C835C(struct UnknownSubSubStruct_0203CF40 *a0) +void sub_81C835C(struct PokenavListMenuWindow *listWindow) { - FillWindowPixelBuffer(a0->windowId, PIXEL_FILL(1)); - PutWindowTilemap(a0->windowId); - CopyWindowToVram(a0->windowId, 1); + FillWindowPixelBuffer(listWindow->windowId, PIXEL_FILL(1)); + PutWindowTilemap(listWindow->windowId); + CopyWindowToVram(listWindow->windowId, 1); } -void sub_81C837C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) +void sub_81C837C(struct MatchCallWindowState *state, struct PokenavSub17Substruct *a1) { - s32 arg2 = a0->listLength - a0->windowTopIndex; - if (arg2 > a0->visibleEntries) - arg2 = a0->visibleEntries; + s32 arg2 = state->listLength - state->windowTopIndex; + if (arg2 > state->visibleEntries) + arg2 = state->visibleEntries; - sub_81C83AC(a0->unk10, a0->windowTopIndex, arg2, a0->unkC, 0, a1); + sub_81C83AC(state->unk10, state->windowTopIndex, arg2, state->unkC, 0, a1); } -void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *a5) +void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *list) { if (a2 == 0) return; - a5->unk1C = a0 + a1 * a3; - a5->unk18 = a3; - a5->unk0.unkC = 0; - a5->unk0.unkE = a2; - a5->unk14 = a1; - a5->unk10 = a4; + list->unk1C = a0 + a1 * a3; + list->unk18 = a3; + list->listWindow.unkC = 0; + list->listWindow.unkE = a2; + list->unk14 = a1; + list->unk10 = a4; CreateLoopedTask(LoopedTask_sub_81C83F0, 5); } @@ -218,23 +218,23 @@ bool32 sub_81C83E0(void) u32 LoopedTask_sub_81C83F0(s32 state) { u32 v1; - struct PokenavSub17Substruct *structPtr = GetSubstructPtr(17); + struct PokenavSub17Substruct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); switch (state) { case 0: - v1 = (structPtr->unk0.unkA + structPtr->unk0.unkC + structPtr->unk10) & 0xF; + v1 = (structPtr->listWindow.unkA + structPtr->listWindow.unkC + structPtr->unk10) & 0xF; structPtr->unk34(structPtr->unk1C, structPtr->unkTextBuffer); if (structPtr->unk38 != NULL) - structPtr->unk38(structPtr->unk0.windowId, structPtr->unk14, v1); + structPtr->unk38(structPtr->listWindow.windowId, structPtr->unk14, v1); - AddTextPrinterParameterized(structPtr->unk0.windowId, structPtr->unk0.fontId, structPtr->unkTextBuffer, 8, (v1 << 4) + 1, 255, NULL); - if (++structPtr->unk0.unkC >= structPtr->unk0.unkE) + AddTextPrinterParameterized(structPtr->listWindow.windowId, structPtr->listWindow.fontId, structPtr->unkTextBuffer, 8, (v1 << 4) + 1, 255, NULL); + if (++structPtr->listWindow.unkC >= structPtr->listWindow.unkE) { if (structPtr->unk38 != NULL) - CopyWindowToVram(structPtr->unk0.windowId, 3); + CopyWindowToVram(structPtr->listWindow.windowId, 3); else - CopyWindowToVram(structPtr->unk0.windowId, 2); + CopyWindowToVram(structPtr->listWindow.windowId, 2); return LT_INC_AND_PAUSE; } else @@ -253,14 +253,14 @@ u32 LoopedTask_sub_81C83F0(s32 state) bool32 ShouldShowUpArrow(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); return (structPtr->unk888.windowTopIndex != 0); } bool32 ShouldShowDownArrow(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); struct MatchCallWindowState *subPtr = &structPtr->unk888; return (subPtr->windowTopIndex + subPtr->visibleEntries < subPtr->listLength); @@ -268,7 +268,7 @@ bool32 ShouldShowDownArrow(void) void MatchCall_MoveWindow(s32 a0, bool32 a1) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); struct MatchCallWindowState *subPtr = &structPtr->unk888; if (a0 < 0) @@ -276,7 +276,7 @@ void MatchCall_MoveWindow(s32 a0, bool32 a1) if (subPtr->windowTopIndex + a0 < 0) a0 = -1 * subPtr->windowTopIndex; if (a1) - sub_81C83AC(subPtr->unk10, subPtr->windowTopIndex + a0, a0 * -1, subPtr->unkC, a0, &structPtr->unk0); + sub_81C83AC(subPtr->unk10, subPtr->windowTopIndex + a0, a0 * -1, subPtr->unkC, a0, &structPtr->list); } else if (a1) { @@ -284,31 +284,31 @@ void MatchCall_MoveWindow(s32 a0, bool32 a1) if (temp + a0 >= subPtr->listLength) a0 = subPtr->listLength - temp; - sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, a0, subPtr->unkC, subPtr->visibleEntries, &structPtr->unk0); + sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, a0, subPtr->unkC, subPtr->visibleEntries, &structPtr->list); } - sub_81C8568(a0, &structPtr->unk0); + sub_81C8568(a0, &structPtr->list); subPtr->windowTopIndex += a0; } -void sub_81C8568(s32 a0, struct PokenavSub17Substruct *a1) +void sub_81C8568(s32 a0, struct PokenavSub17Substruct *list) { - a1->unk20 = GetBgY(a1->unk0.bg); - a1->unk24 = a1->unk20 + (a0 << 12); + list->unk20 = GetBgY(list->listWindow.bg); + list->unk24 = list->unk20 + (a0 << 12); if (a0 > 0) - a1->unk30 = 1; + list->unk30 = 1; else - a1->unk30 = 2; - a1->unk2C = a0; - a1->unk28 = CreateLoopedTask(LoopedTask_sub_81C85A0, 6); + list->unk30 = 2; + list->unk2C = a0; + list->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C85A0, 6); } u32 LoopedTask_sub_81C85A0(s32 state) { s32 y, v1; bool32 flag; - struct PokenavSub17 *structPtr = GetSubstructPtr(17); - struct PokenavSub17Substruct *subPtr = &structPtr->unk0; + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); + struct PokenavSub17Substruct *subPtr = &structPtr->list; switch (state) { @@ -318,8 +318,8 @@ u32 LoopedTask_sub_81C85A0(s32 state) return LT_PAUSE; case 1: flag = FALSE; - y = GetBgY(subPtr->unk0.bg); - v1 = ChangeBgY(subPtr->unk0.bg, 0x1000, subPtr->unk30); + y = GetBgY(subPtr->listWindow.bg); + v1 = ChangeBgY(subPtr->listWindow.bg, 0x1000, subPtr->unk30); if (subPtr->unk30 == 2) { if ((y > subPtr->unk24 || y <= subPtr->unk20) && v1 <= subPtr->unk24) @@ -333,8 +333,8 @@ u32 LoopedTask_sub_81C85A0(s32 state) if (flag) { - subPtr->unk0.unkA = (subPtr->unk0.unkA + subPtr->unk2C) & 0xF; - ChangeBgY(subPtr->unk0.bg, subPtr->unk24, 0); + subPtr->listWindow.unkA = (subPtr->listWindow.unkA + subPtr->unk2C) & 0xF; + ChangeBgY(subPtr->listWindow.bg, subPtr->unk24, 0); return LT_FINISH; } return LT_PAUSE; @@ -342,15 +342,15 @@ u32 LoopedTask_sub_81C85A0(s32 state) return LT_FINISH; } -bool32 sub_81C8630(void) +bool32 IsMonListLoopedTaskActive(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); - return IsLoopedTaskActive(structPtr->unk0.unk28); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); + return IsLoopedTaskActive(structPtr->list.loopedTaskId); } struct MatchCallWindowState *GetMatchCallWindowStruct(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); return &structPtr->unk888; } @@ -448,7 +448,7 @@ int MatchCall_PageDown(void) } } -u32 GetSelectedMatchCall(void) +u32 GetSelectedPokenavListIndex(void) { struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); @@ -464,53 +464,53 @@ u32 GetMatchCallListTopIndex(void) void sub_81C877C(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); structPtr->unk89C = 0; - structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8870, 6); + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C8870, 6); } void PrintCheckPageInfo(s16 a0) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); structPtr->unk888.windowTopIndex += a0; structPtr->unk89C = 0; - structPtr->unk8A0 = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); } void sub_81C87F0(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); structPtr->unk89C = 0; - structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8A28, 6); + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C8A28, 6); } -bool32 sub_81C8820(void) +bool32 IsMatchCallListTaskActive(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); - return IsLoopedTaskActive(structPtr->unk8A0); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); + return IsLoopedTaskActive(structPtr->loopedTaskId); } void sub_81C8838(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); struct MatchCallWindowState *subPtr = &structPtr->unk888; - structPtr->unk0.unk38(structPtr->unk0.unk0.windowId, subPtr->windowTopIndex + subPtr->selectedIndexOffset, (structPtr->unk0.unk0.unkA + subPtr->selectedIndexOffset) & 0xF); - CopyWindowToVram(structPtr->unk0.unk0.windowId, 1); + structPtr->list.unk38(structPtr->list.listWindow.windowId, subPtr->windowTopIndex + subPtr->selectedIndexOffset, (structPtr->list.listWindow.unkA + subPtr->selectedIndexOffset) & 0xF); + CopyWindowToVram(structPtr->list.listWindow.windowId, 1); } // TODO: u32 LoopedTask_sub_81C8870(s32 state) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); switch (state) { case 0: - ToggleMatchCallArrows(&structPtr->unk0, 1); + ToggleMatchCallArrows(&structPtr->list, 1); // fall-through case 1: if (structPtr->unk89C != structPtr->unk888.selectedIndexOffset) - sub_81C8B70(&structPtr->unk0.unk0, structPtr->unk89C, 1); + sub_81C8B70(&structPtr->list.listWindow, structPtr->unk89C, 1); structPtr->unk89C++; return LT_INC_AND_PAUSE; @@ -520,7 +520,7 @@ u32 LoopedTask_sub_81C8870(s32 state) if (structPtr->unk89C != structPtr->unk888.visibleEntries) return 6; if (structPtr->unk888.selectedIndexOffset != 0) - sub_81C8B70(&structPtr->unk0.unk0, structPtr->unk89C, structPtr->unk888.selectedIndexOffset); + sub_81C8B70(&structPtr->list.listWindow, structPtr->unk89C, structPtr->unk888.selectedIndexOffset); return LT_INC_AND_PAUSE; } @@ -537,7 +537,7 @@ u32 LoopedTask_sub_81C8870(s32 state) } return LT_PAUSE; case 4: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; structPtr->unk888.selectedIndexOffset = 0; @@ -548,35 +548,35 @@ u32 LoopedTask_sub_81C8870(s32 state) u32 LoopedTask_PrintCheckPageInfo(s32 state) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); if (IsDma3ManagerBusyWithBgCopy()) return LT_PAUSE; switch (state) { case 0: - sub_81C8CB4(&structPtr->unk888, &structPtr->unk0); + sub_81C8CB4(&structPtr->unk888, &structPtr->list); break; case 1: - PrintMatchCallFieldNames(&structPtr->unk0, 0); + PrintMatchCallFieldNames(&structPtr->list, 0); break; case 2: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_STRATEGY); + PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_STRATEGY); break; case 3: - PrintMatchCallFieldNames(&structPtr->unk0, 1); + PrintMatchCallFieldNames(&structPtr->list, 1); break; case 4: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_POKEMON); + PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_POKEMON); break; case 5: - PrintMatchCallFieldNames(&structPtr->unk0, 2); + PrintMatchCallFieldNames(&structPtr->list, 2); break; case 6: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_INTRO_1); + PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_INTRO_1); break; case 7: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_INTRO_2); + PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_INTRO_2); break; default: return LT_FINISH; @@ -594,9 +594,9 @@ u32 LoopedTask_sub_81C8A28(s32 state) if (IsDma3ManagerBusyWithBgCopy()) return LT_PAUSE; - structPtr = GetSubstructPtr(17); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); subPtr888 = &structPtr->unk888; - subPtr0 = &structPtr->unk0; + subPtr0 = &structPtr->list; switch (state) { @@ -607,7 +607,7 @@ u32 LoopedTask_sub_81C8A28(s32 state) ptr = &structPtr->unk89C; if (++(*ptr) < structPtr->unk888.visibleEntries) { - sub_81C8B70(&subPtr0->unk0, *ptr, 1); + sub_81C8B70(&subPtr0->listWindow, *ptr, 1); return LT_PAUSE; } @@ -618,7 +618,7 @@ u32 LoopedTask_sub_81C8A28(s32 state) { s32 r4 = subPtr888->windowTopIndex; r5 = -r4; - sub_81C8B70(&subPtr0->unk0, r5, r4); + sub_81C8B70(&subPtr0->listWindow, r5, r4); subPtr888->selectedIndexOffset = r4; *ptr = r5; return LT_INC_AND_PAUSE; @@ -630,7 +630,7 @@ u32 LoopedTask_sub_81C8A28(s32 state) { s32 r4 = subPtr888->windowTopIndex + subPtr888->visibleEntries - subPtr888->listLength; r5 = -r4; - sub_81C8B70(&subPtr0->unk0, r5, r4); + sub_81C8B70(&subPtr0->listWindow, r5, r4); subPtr888->selectedIndexOffset = r4; *ptr = r5; return LT_INC_AND_PAUSE; @@ -641,14 +641,14 @@ u32 LoopedTask_sub_81C8A28(s32 state) MatchCall_MoveWindow(structPtr->unk89C, FALSE); return LT_INC_AND_PAUSE; case 3: - if (!sub_81C8630()) + if (!IsMonListLoopedTaskActive()) { structPtr->unk89C = 0; return 1; } return 2; case 4: - sub_81C83AC(subPtr888->unk10, subPtr888->windowTopIndex + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, &structPtr->unk0); + sub_81C83AC(subPtr888->unk10, subPtr888->windowTopIndex + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, &structPtr->list); return LT_INC_AND_PAUSE; case 5: if (sub_81C83E0()) @@ -664,16 +664,16 @@ u32 LoopedTask_sub_81C8A28(s32 state) return LT_FINISH; } -void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, s32 a1, s32 a2) +void sub_81C8B70(struct PokenavListMenuWindow *listWindow, s32 a1, s32 a2) { - u8 *v1 = (u8*)GetWindowAttribute(a0->windowId, WINDOW_TILE_DATA); - u32 v2 = a0->unk4 * 64; + u8 *v1 = (u8*)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA); + u32 v2 = listWindow->unk4 * 64; - a1 = (a0->unkA + a1) & 0xF; + a1 = (listWindow->unkA + a1) & 0xF; if (a1 + a2 <= 16) { CpuFastFill8(PIXEL_FILL(1), v1 + a1 * v2, a2 * v2); - CopyWindowToVram(a0->windowId, 2); + CopyWindowToVram(listWindow->windowId, 2); } else { @@ -682,63 +682,63 @@ void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, s32 a1, s32 a2) CpuFastFill8(PIXEL_FILL(1), v1 + a1 * v2, v3 * v2); CpuFastFill8(PIXEL_FILL(1), v1, v4 * v2); - CopyWindowToVram(a0->windowId, 2); + CopyWindowToVram(listWindow->windowId, 2); } for (a2--; a2 != -1; a1 = (a1 + 1) & 0xF, a2--) - ClearRematchPokeballIcon(a0->windowId, a1); + ClearRematchPokeballIcon(listWindow->windowId, a1); - CopyWindowToVram(a0->windowId, 1); + CopyWindowToVram(listWindow->windowId, 1); } -void sub_81C8C64(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1) +void sub_81C8C64(struct PokenavListMenuWindow *listWindow, u32 a1) { u16 var; - u16 *v1 = (u16*)GetBgTilemapBuffer(GetWindowAttribute(a0->windowId, WINDOW_BG)); - v1 += ((a0->unkA << 6) + a0->unk2) - 1; + u16 *v1 = (u16*)GetBgTilemapBuffer(GetWindowAttribute(listWindow->windowId, WINDOW_BG)); + v1 += ((listWindow->unkA << 6) + listWindow->unk2) - 1; if (a1 != 0) - var = (a0->unk1 << 12) | (a0->unk6 + 1); + var = (listWindow->unk1 << 12) | (listWindow->unk6 + 1); else - var = (a0->unk1 << 12) | (a0->unk6); + var = (listWindow->unk1 << 12) | (listWindow->unk6); v1[0] = var; v1[0x20] = var; } -void sub_81C8CB4(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) +void sub_81C8CB4(struct MatchCallWindowState *state, struct PokenavSub17Substruct *list) { u8 colors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_RED}; - a1->unk34(a0->unk10 + a0->unkC * a0->windowTopIndex, a1->unkTextBuffer); - a1->unk38(a1->unk0.windowId, a0->windowTopIndex, a1->unk0.unkA); - FillWindowPixelRect(a1->unk0.windowId, PIXEL_FILL(4), 0, a1->unk0.unkA * 16, a1->unk0.unk4 * 8, 16); - AddTextPrinterParameterized3(a1->unk0.windowId, a1->unk0.fontId, 8, (a1->unk0.unkA * 16) + 1, colors, TEXT_SPEED_FF, a1->unkTextBuffer); - sub_81C8C64(&a1->unk0, 1); - CopyWindowRectToVram(a1->unk0.windowId, 3, 0, a1->unk0.unkA * 2, a1->unk0.unk4, 2); + list->unk34(state->unk10 + state->unkC * state->windowTopIndex, list->unkTextBuffer); + list->unk38(list->listWindow.windowId, state->windowTopIndex, list->listWindow.unkA); + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(4), 0, list->listWindow.unkA * 16, list->listWindow.unk4 * 8, 16); + AddTextPrinterParameterized3(list->listWindow.windowId, list->listWindow.fontId, 8, (list->listWindow.unkA * 16) + 1, colors, TEXT_SPEED_FF, list->unkTextBuffer); + sub_81C8C64(&list->listWindow, 1); + CopyWindowRectToVram(list->listWindow.windowId, 3, 0, list->listWindow.unkA * 2, list->listWindow.unk4, 2); } -void sub_81C8D4C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) +void sub_81C8D4C(struct MatchCallWindowState *state, struct PokenavSub17Substruct *list) { - a1->unk34(a0->unk10 + a0->unkC * a0->windowTopIndex, a1->unkTextBuffer); - FillWindowPixelRect(a1->unk0.windowId, PIXEL_FILL(1), 0, a1->unk0.unkA * 16, a1->unk0.unk4 * 8, 16); - AddTextPrinterParameterized(a1->unk0.windowId, a1->unk0.fontId, a1->unkTextBuffer, 8, a1->unk0.unkA * 16 + 1, TEXT_SPEED_FF, NULL); - sub_81C8C64(&a1->unk0, 0); - CopyWindowToVram(a1->unk0.windowId, 3); + list->unk34(state->unk10 + state->unkC * state->windowTopIndex, list->unkTextBuffer); + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, list->listWindow.unkA * 16, list->listWindow.unk4 * 8, 16); + AddTextPrinterParameterized(list->listWindow.windowId, list->listWindow.fontId, list->unkTextBuffer, 8, list->listWindow.unkA * 16 + 1, TEXT_SPEED_FF, NULL); + sub_81C8C64(&list->listWindow, 0); + CopyWindowToVram(list->listWindow.windowId, 3); } -void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 fieldId) +void PrintMatchCallFieldNames(struct PokenavSub17Substruct *list, u32 fieldId) { const u8 *fieldNames[] = {gText_PokenavMatchCall_Strategy, gText_PokenavMatchCall_TrainerPokemon, gText_PokenavMatchCall_SelfIntroduction}; u8 colors[3] = {TEXT_COLOR_WHITE, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED}; - u32 top = (a0->unk0.unkA + 1 + (fieldId * 2)) & 0xF; + u32 top = (list->listWindow.unkA + 1 + (fieldId * 2)) & 0xF; - FillWindowPixelRect(a0->unk0.windowId, PIXEL_FILL(1), 0, top << 4, a0->unk0.unk4, 16); - AddTextPrinterParameterized3(a0->unk0.windowId, 7, 2, (top << 4) + 1, colors, -1, fieldNames[fieldId]); - CopyWindowRectToVram(a0->unk0.windowId, 2, 0, top << 1, a0->unk0.unk4, 2); + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, top << 4, list->listWindow.unk4, 16); + AddTextPrinterParameterized3(list->listWindow.windowId, 7, 2, (top << 4) + 1, colors, -1, fieldNames[fieldId]); + CopyWindowRectToVram(list->listWindow.windowId, 2, 0, top << 1, list->listWindow.unk4, 2); } -static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 checkPageEntry) +static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *list, u32 checkPageEntry) { // lines 1, 3, and 5 are the field names printed by PrintMatchCallFieldNames static const u8 lineOffsets[CHECK_PAGE_ENTRY_COUNT] = @@ -749,14 +749,14 @@ static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct Pok [CHECK_PAGE_INTRO_2] = 7 }; - u32 r6 = (a1->unk0.unkA + lineOffsets[checkPageEntry]) & 0xF; + u32 r6 = (list->listWindow.unkA + lineOffsets[checkPageEntry]) & 0xF; const u8 *str = GetMatchCallFlavorText(a0->windowTopIndex, checkPageEntry); if (str != NULL) { - sub_81DB620(a1->unk0.windowId, 1, r6 * 2, a1->unk0.unk4 - 1, 2); - AddTextPrinterParameterized(a1->unk0.windowId, 7, str, 2, (r6 << 4) + 1, TEXT_SPEED_FF, NULL); - CopyWindowRectToVram(a1->unk0.windowId, 2, 0, r6 * 2, a1->unk0.unk4, 2); + sub_81DB620(list->listWindow.windowId, 1, r6 * 2, list->listWindow.unk4 - 1, 2); + AddTextPrinterParameterized(list->listWindow.windowId, 7, str, 2, (r6 << 4) + 1, TEXT_SPEED_FF, NULL); + CopyWindowRectToVram(list->listWindow.windowId, 2, 0, r6 * 2, list->listWindow.unk4, 2); } } @@ -839,57 +839,57 @@ void sub_81C8ED0(void) Pokenav_AllocAndLoadPalettes(sMatchcallArrowPalettes); } -void sub_81C8EF8(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) +void CreateMatchCallArrowSprites(struct MatchCallWindowState *windowState, struct PokenavSub17Substruct *list) { u32 spriteId; s16 x; - spriteId = CreateSprite(&sMatchCallRightArrowSprite, a1->unk0.unk2 * 8 + 3, (a1->unk0.unk3 + 1) * 8, 7); - a1->rightArrow = &gSprites[spriteId]; + spriteId = CreateSprite(&sMatchCallRightArrowSprite, list->listWindow.unk2 * 8 + 3, (list->listWindow.unk3 + 1) * 8, 7); + list->rightArrow = &gSprites[spriteId]; - x = a1->unk0.unk2 * 8 + (a1->unk0.unk4 - 1) * 4; - spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, a1->unk0.unk3 * 8 + a0->visibleEntries * 16, 7); - a1->downArrow = &gSprites[spriteId]; - a1->downArrow->oam.tileNum += 2; - a1->downArrow->callback = SpriteCB_MatchCallDownArrow; + x = list->listWindow.unk2 * 8 + (list->listWindow.unk4 - 1) * 4; + spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, list->listWindow.unk3 * 8 + windowState->visibleEntries * 16, 7); + list->downArrow = &gSprites[spriteId]; + list->downArrow->oam.tileNum += 2; + list->downArrow->callback = SpriteCB_MatchCallDownArrow; - spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, a1->unk0.unk3 * 8, 7); - a1->upArrow = &gSprites[spriteId]; - a1->upArrow->oam.tileNum += 4; - a1->upArrow->callback = SpriteCB_MatchCallUpArrow; + spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, list->listWindow.unk3 * 8, 7); + list->upArrow = &gSprites[spriteId]; + list->upArrow->oam.tileNum += 4; + list->upArrow->callback = SpriteCB_MatchCallUpArrow; } -void sub_81C8FE0(struct PokenavSub17Substruct *a0) +void DestroyMatchCallListArrows(struct PokenavSub17Substruct *list) { - DestroySprite(a0->rightArrow); - DestroySprite(a0->upArrow); - DestroySprite(a0->downArrow); + DestroySprite(list->rightArrow); + DestroySprite(list->upArrow); + DestroySprite(list->downArrow); FreeSpriteTilesByTag(0xA); FreeSpritePaletteByTag(0x14); } -void ToggleMatchCallArrows(struct PokenavSub17Substruct *a0, bool32 shouldHide) +void ToggleMatchCallArrows(struct PokenavSub17Substruct *list, bool32 shouldHide) { if (shouldHide) { - a0->rightArrow->callback = SpriteCallbackDummy; - a0->upArrow->callback = SpriteCallbackDummy; - a0->downArrow->callback = SpriteCallbackDummy; + list->rightArrow->callback = SpriteCallbackDummy; + list->upArrow->callback = SpriteCallbackDummy; + list->downArrow->callback = SpriteCallbackDummy; } else { - a0->rightArrow->callback = SpriteCB_MatchCallRightArrow; - a0->upArrow->callback = SpriteCB_MatchCallUpArrow; - a0->downArrow->callback = SpriteCB_MatchCallDownArrow; + list->rightArrow->callback = SpriteCB_MatchCallRightArrow; + list->upArrow->callback = SpriteCB_MatchCallUpArrow; + list->downArrow->callback = SpriteCB_MatchCallDownArrow; } - a0->rightArrow->invisible = shouldHide; - a0->upArrow->invisible = shouldHide; - a0->downArrow->invisible = shouldHide; + list->rightArrow->invisible = shouldHide; + list->upArrow->invisible = shouldHide; + list->downArrow->invisible = shouldHide; } void SpriteCB_MatchCallRightArrow(struct Sprite *sprite) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); sprite->pos2.y = structPtr->unk888.selectedIndexOffset << 4; } @@ -931,68 +931,68 @@ void SpriteCB_MatchCallUpArrow(struct Sprite *sprite) void ToggleMatchCallVerticalArrows(bool32 shouldHide) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); - structPtr->unk0.upArrow->data[7] = shouldHide; - structPtr->unk0.downArrow->data[7] = shouldHide; + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); + structPtr->list.upArrow->data[7] = shouldHide; + structPtr->list.downArrow->data[7] = shouldHide; } -void sub_81C9160(struct MatchCallWindowState *a0, struct PokenavListTemplate *a1) +void InitMatchCallWindowState(struct MatchCallWindowState *dst, struct PokenavListTemplate *template) { - a0->unk10 = a1->list.matchCallEntries; - a0->windowTopIndex = a1->unk6; - a0->listLength = a1->unk4; - a0->unkC = a1->unk8; - a0->visibleEntries = a1->unkC; - if (a0->visibleEntries >= a0->listLength) + dst->unk10 = template->list.matchCallEntries; + dst->windowTopIndex = template->unk6; + dst->listLength = template->count; + dst->unkC = template->unk8; + dst->visibleEntries = template->maxShowed; + if (dst->visibleEntries >= dst->listLength) { - a0->windowTopIndex = 0; - a0->unk4 = 0; - a0->selectedIndexOffset = a1->unk6; + dst->windowTopIndex = 0; + dst->unk4 = 0; + dst->selectedIndexOffset = template->unk6; } else { - a0->unk4 = a0->listLength - a0->visibleEntries; - if (a0->windowTopIndex + a0->visibleEntries > a0->listLength) + dst->unk4 = dst->listLength - dst->visibleEntries; + if (dst->windowTopIndex + dst->visibleEntries > dst->listLength) { - a0->selectedIndexOffset = a0->windowTopIndex + a0->visibleEntries - a0->listLength; - a0->windowTopIndex = a1->unk6 - a0->selectedIndexOffset; + dst->selectedIndexOffset = dst->windowTopIndex + dst->visibleEntries - dst->listLength; + dst->windowTopIndex = template->unk6 - dst->selectedIndexOffset; } else { - a0->selectedIndexOffset = 0; + dst->selectedIndexOffset = 0; } } } -bool32 sub_81C91AC(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct PokenavListTemplate *a2, s32 a3) +bool32 CopyPokenavListMenuTemplate(struct PokenavSub17Substruct *dest, const struct BgTemplate *bgTemplate, struct PokenavListTemplate *template, s32 a3) { struct WindowTemplate window; - a0->unk0.bg = a1->bg; - a0->unk0.unk6 = a3; - a0->unk34 = a2->listFunc.unk10_2; - a0->unk38 = a2->unk14; - a0->unk0.unk1 = a2->unkD; - a0->unk0.unk2 = a2->unk9; - a0->unk0.unk3 = a2->unkB; - a0->unk0.unk4 = a2->unkA; - a0->unk0.fontId = a2->unkE; + dest->listWindow.bg = bgTemplate->bg; + dest->listWindow.unk6 = a3; + dest->unk34 = template->listFunc.unk10_2; + dest->unk38 = template->unk14; + dest->listWindow.unk1 = template->fillValue; + dest->listWindow.unk2 = template->item_X; + dest->listWindow.unk3 = template->listTop; + dest->listWindow.unk4 = template->windowWidth; + dest->listWindow.fontId = template->fontId; - window.bg = a1->bg; - window.tilemapLeft = a2->unk9; + window.bg = bgTemplate->bg; + window.tilemapLeft = template->item_X; window.tilemapTop = 0; - window.width = a2->unkA; + window.width = template->windowWidth; window.height = 32; - window.paletteNum = a2->unkD; + window.paletteNum = template->fillValue; window.baseBlock = a3 + 2; - a0->unk0.windowId = AddWindow(&window); - if (a0->unk0.windowId == 0xFF) + dest->listWindow.windowId = AddWindow(&window); + if (dest->listWindow.windowId == 0xFF) return FALSE; - a0->unk0.unkA = 0; - a0->rightArrow = NULL; - a0->upArrow = NULL; - a0->downArrow = NULL; + dest->listWindow.unkA = 0; + dest->rightArrow = NULL; + dest->upArrow = NULL; + dest->downArrow = NULL; return 1; } diff --git a/src/pokenav_menu_handler_1.c b/src/pokenav_menu_handler_1.c index 6002d731bc..c8820ac38a 100644 --- a/src/pokenav_menu_handler_1.c +++ b/src/pokenav_menu_handler_1.c @@ -99,12 +99,12 @@ static u8 GetPokenavMainMenuType(void) bool32 PokenavCallback_Init_MainMenuCursorOnMap(void) { - struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; state->menuType = GetPokenavMainMenuType(); - state->cursorPos = 0; + state->cursorPos = POKENAV_MENUITEM_MAP; state->currMenuItem = POKENAV_MENUITEM_MAP; state->helpBarIndex = HELPBAR_NONE; SetMenuInputHandler(state); @@ -113,12 +113,12 @@ bool32 PokenavCallback_Init_MainMenuCursorOnMap(void) bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void) { - struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; state->menuType = GetPokenavMainMenuType(); - state->cursorPos = 2; + state->cursorPos = POKENAV_MENUITEM_MATCH_CALL; state->currMenuItem = POKENAV_MENUITEM_MATCH_CALL; state->helpBarIndex = HELPBAR_NONE; SetMenuInputHandler(state); @@ -127,12 +127,12 @@ bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void) bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void) { - struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; state->menuType = GetPokenavMainMenuType(); - state->cursorPos = 3; + state->cursorPos = POKENAV_MENUITEM_RIBBONS; state->currMenuItem = POKENAV_MENUITEM_RIBBONS; SetMenuInputHandler(state); return TRUE; @@ -140,12 +140,12 @@ bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void) bool32 PokenavCallback_Init_ConditionMenu(void) { - struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; state->menuType = POKENAV_MENU_TYPE_CONDITION; - state->cursorPos = 0; + state->cursorPos = 0; //party state->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY; state->helpBarIndex = HELPBAR_NONE; SetMenuInputHandler(state); @@ -154,7 +154,7 @@ bool32 PokenavCallback_Init_ConditionMenu(void) bool32 PokenavCallback_Init_ConditionSearchMenu(void) { - struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; @@ -202,13 +202,13 @@ static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*) u32 GetMenuHandlerCallback(void) { - struct Pokenav1Struct *state = GetSubstructPtr(1); + struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); return state->callback(state); } void FreeMenuHandlerSubstruct1(void) { - FreePokenavSubstruct(1); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); } static u32 HandleMainMenuInput(struct Pokenav1Struct *state) @@ -247,12 +247,12 @@ static u32 HandleMainMenuInput(struct Pokenav1Struct *state) return POKENAV_MENU_FUNC_NO_RIBBON_WINNERS; } case POKENAV_MENUITEM_SWITCH_OFF: - return -1; + return POKENAV_MENU_FUNC_EXIT; } } if (JOY_NEW(B_BUTTON)) - return -1; + return POKENAV_MENU_FUNC_EXIT; return POKENAV_MENU_FUNC_NONE; } @@ -488,26 +488,26 @@ static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state) int GetPokenavMenuType(void) { - struct Pokenav1Struct *state = GetSubstructPtr(1); + struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); return state->menuType; } // Position of cursor relative to number of current menu options int GetPokenavCursorPos(void) { - struct Pokenav1Struct *state = GetSubstructPtr(1); + struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); return state->cursorPos; } // ID of menu item the cursor is currently on int GetCurrentMenuItemId(void) { - struct Pokenav1Struct *state = GetSubstructPtr(1); + struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); return state->currMenuItem; } u16 GetHelpBarTextId(void) { - struct Pokenav1Struct *state = GetSubstructPtr(1); + struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); return state->helpBarIndex; } diff --git a/src/pokenav_menu_handler_2.c b/src/pokenav_menu_handler_2.c index 2be92013f4..0e819ecacc 100644 --- a/src/pokenav_menu_handler_2.c +++ b/src/pokenav_menu_handler_2.c @@ -27,7 +27,7 @@ struct Pokenav2Struct bool8 otherIconsInMotion; bool8 pokenavAlreadyOpen; bool32 iconVisible[MAX_POKENAV_MENUITEMS]; - struct Sprite * field_028; + struct Sprite * blueLightSpriteId; struct Sprite * iconSprites[MAX_POKENAV_MENUITEMS][4]; u16 bg1TilemapBuffer[0x400]; }; @@ -43,54 +43,54 @@ static u32 LoopedTask_ReturnToConditionMenu(s32 state); static u32 LoopedTask_SelectRibbonsNoWinners(s32 state); static u32 LoopedTask_ReShowDescription(s32 state); static u32 LoopedTask_OpenPokenavFeature(s32 state); -static void sub_81C9FC4(void); -static void sub_81C9FEC(void); +static void LoadPokenavOptionPalettes(void); +static void FreeAndDestroyMainMenuSprites(void); static void CreateMenuOptionSprites(void); -static void sub_81CA094(void); +static void DestroyMenuOptionSprites(void); static void sub_81CA0C8(void); -static void sub_81CA0EC(const u16 *const * a0, s32 a1, s32 a2); -static void sub_81CA20C(void); -static void sub_81CA278(void); -static void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3); -static void sub_81CA3B4(struct Sprite ** sprites); -static void sub_81CA2DC(void); +static void DrawOptionLabelGfx(const u16 *const * a0, s32 yPos, s32 a2); +static void SetupCurrentMenuOptionsGfx(void); +static void SetMenuOptionGfxParams_CursorMoved(void); +static void SetMenuOptionGfxParamsInactive(struct Sprite ** sprites, s32 x, s32 a2, s32 a3); +static void SetMenuOptionGfxParamsActive(struct Sprite ** sprites); +static void SetupPokenavMenuOptions(void); static bool32 AreMenuOptionSpritesMoving(void); -static void sub_81CA448(struct Sprite ** sprites, bool32 a1); +static void SetMenuOptionGfxInvisibility(struct Sprite ** sprites, bool32 a1); static void sub_81CA474(struct Sprite * sprite); static void sub_81CA4AC(struct Sprite * sprite); static void sub_81CA580(u8 taskId); -static void sub_81CA640(void); -static void sub_81CA6AC(struct Sprite * sprite); -static void sub_81CA698(void); +static void CreateMatchCallBlueLightSprite(void); +static void SpriteCB_BlinkingBlueLight(struct Sprite * sprite); +static void DestroyRematchBlueLightSpriteId(void); static void AddOptionDescriptionWindow(void); static void PrintCurrentOptionDescription(void); static void PrintNoRibbonWinners(void); -static bool32 sub_81CA7C4(void); -static void sub_81CA7D4(void); -static void sub_81CA7F4(void); -static void sub_81CA808(u8 taskId); -static void sub_81CA818(void); -static void sub_81CA850(void); -static void sub_81CA864(void); -static bool32 sub_81CA89C(void); -static void sub_81CA8B0(u8 taskId); -static void sub_81CA92C(void); -static void sub_81CA994(void); -static void sub_81CA9C8(void); -static void sub_81CA9D8(void); -static void sub_81CA9EC(u8 taskId); -static void sub_81CAA3C(void); +static bool32 IsDma3ManagerBusyWithBgCopy_(void); +static void CreateMovingBgDotsTask(void); +static void DestroyMovingDotsBgTask(void); +static void Task_MoveBgDots(u8 taskId); +static void CreateBgDotPurplePalTask(void); +static void ChangeBgDotsColorToPurple(void); +static void CreateBgDotLightBluePalTask(void); +static bool32 IsTaskActive_UpdateBgDotsPalette(void); +static void Task_UpdateBgDotsPalette(u8 taskId); +static void SetupPokenavMenuScanlineEffects(void); +static void DestroyMenuOptionGlowTask(void); +static void ResetBldCnt(void); +static void InitMenuOptionGlow(void); +static void Task_CurrentMenuOptionGlow(u8 taskId); +static void SetMenuOptionGlow(void); -static const u16 gUnknown_0861FC78[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); -static const u32 gUnknown_0861FC98[] = INCBIN_U32("graphics/pokenav/bg.4bpp.lz"); -static const u32 gUnknown_0861FCAC[] = INCBIN_U32("graphics/pokenav/bg.bin.lz"); -static const u16 gUnknown_0861FD4C[] = INCBIN_U16("graphics/pokenav/outline.gbapal"); -static const u32 gUnknown_0861FD6C[] = INCBIN_U32("graphics/pokenav/outline.4bpp.lz"); -static const u32 gUnknown_0861FFF4[] = INCBIN_U32("graphics/pokenav/outline_map.bin.lz"); +static const u16 sPokenavBgDotsPal[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); +static const u32 sPokenavBgDotsTiles[] = INCBIN_U32("graphics/pokenav/bg.4bpp.lz"); +static const u32 sPokenavBgDotsTilemap[] = INCBIN_U32("graphics/pokenav/bg.bin.lz"); +static const u16 sPokenavDeviceBgPal[] = INCBIN_U16("graphics/pokenav/outline.gbapal"); +static const u32 sPokenavDeviceBgTiles[] = INCBIN_U32("graphics/pokenav/outline.4bpp.lz"); +static const u32 sPokenavDeviceBgTilemap[] = INCBIN_U32("graphics/pokenav/outline_map.bin.lz"); static const u16 gUnknown_08620104[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); static const u32 gUnknown_08620124[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); -static const struct BgTemplate gUnknown_08620194[] = { +static const struct BgTemplate sPokenavMainMenuBgTemplates[] = { { .bg = 1, .charBaseIndex = 1, @@ -130,7 +130,7 @@ static const LoopedTask sMenuHandlerLoopTaskFuncs[] = { [POKENAV_MENU_FUNC_OPEN_FEATURE] = LoopedTask_OpenPokenavFeature }; -static const struct CompressedSpriteSheet gUnknown_086201C4[] = +static const struct CompressedSpriteSheet sPokenavOptionsSpriteSheets[] = { { .data = gPokenavOptions_Gfx, @@ -144,7 +144,7 @@ static const struct CompressedSpriteSheet gUnknown_086201C4[] = } }; -static const struct SpritePalette gUnknown_086201D4[] = +static const struct SpritePalette sPokenavOptionsSpritePalettes[] = { {gPokenavOptions_Pal + 0x00, 4}, {gPokenavOptions_Pal + 0x10, 5}, @@ -155,59 +155,58 @@ static const struct SpritePalette gUnknown_086201D4[] = {} }; -static const u16 gUnknown_0862020C[] = {0, 0}; -static const u16 gUnknown_08620210[] = {0x20, 1}; -static const u16 gUnknown_08620214[] = {0x40, 4}; -static const u16 gUnknown_08620218[] = {0x60, 2}; -static const u16 gUnknown_0862021C[] = {0x80, 3}; -static const u16 gUnknown_08620220[] = {0xA0, 1}; -static const u16 gUnknown_08620224[] = {0xC0, 1}; -static const u16 gUnknown_08620228[] = {0xE0, 4}; -static const u16 gUnknown_0862022C[] = {0x100, 1}; -static const u16 gUnknown_08620230[] = {0x120, 2}; -static const u16 gUnknown_08620234[] = {0x140, 0}; -static const u16 gUnknown_08620238[] = {0x160, 0}; -static const u16 gUnknown_0862023C[] = {0x180, 3}; +static const u16 sOptionsLabelGfx_RegionMap[] = {0, 0}; +static const u16 sOptionsLabelGfx_Condition[] = {0x20, 1}; +static const u16 sOptionsLabelGfx_MatchCall[] = {0x40, 4}; +static const u16 sOptionsLabelGfx_Ribbons[] = {0x60, 2}; +static const u16 sOptionsLabelGfx_SwitchOff[] = {0x80, 3}; +static const u16 sOptionsLabelGfx_Party[] = {0xA0, 1}; +static const u16 sOptionsLabelGfx_Search[] = {0xC0, 1}; +static const u16 sOptionsLabelGfx_Cool[] = {0xE0, 4}; +static const u16 sOptionsLabelGfx_Beauty[] = {0x100, 1}; +static const u16 sOptionsLabelGfx_Cute[] = {0x120, 2}; +static const u16 sOptionsLabelGfx_Smart[] = {0x140, 0}; +static const u16 sOptionsLabelGfx_Tough[] = {0x160, 0}; +static const u16 sOptionsLabelGfx_Cancel[] = {0x180, 3}; -struct UnkStruct_08620240 +struct OptionsLabelGfx { - u16 unk0; - u16 unk2; - const u16 *unk4[MAX_POKENAV_MENUITEMS]; + u16 yStart; + u16 deltaY; + const u16 *tiles[MAX_POKENAV_MENUITEMS]; }; -// TODO -static const struct UnkStruct_08620240 gUnknown_08620240[POKENAV_MENU_TYPE_COUNT] = +static const struct OptionsLabelGfx sPokenavMenuOptionLabelGfx[POKENAV_MENU_TYPE_COUNT] = { [POKENAV_MENU_TYPE_DEFAULT] = { - 0x2A, - 0x14, - {gUnknown_0862020C, gUnknown_08620210, gUnknown_0862021C} + .yStart = 42, + .deltaY = 20, + {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_SwitchOff} }, [POKENAV_MENU_TYPE_UNLOCK_MC] = { - 0x2A, - 0x14, - {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_0862021C} + .yStart = 42, + .deltaY = 20, + {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_MatchCall, sOptionsLabelGfx_SwitchOff} }, [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = { - 0x2A, - 0x14, - {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_08620218, gUnknown_0862021C} + .yStart = 42, + .deltaY = 20, + {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_MatchCall, sOptionsLabelGfx_Ribbons, sOptionsLabelGfx_SwitchOff} }, [POKENAV_MENU_TYPE_CONDITION] = { - 0x38, - 0x14, - {gUnknown_08620220, gUnknown_08620224, gUnknown_0862023C} + .yStart = 56, + .deltaY = 20, + {sOptionsLabelGfx_Party, sOptionsLabelGfx_Search, sOptionsLabelGfx_Cancel} }, [POKENAV_MENU_TYPE_CONDITION_SEARCH] = { - 0x28, - 0x10, - {gUnknown_08620228, gUnknown_0862022C, gUnknown_08620230, gUnknown_08620234, gUnknown_08620238, gUnknown_0862023C} + .yStart = 40, + .deltaY = 16, + {sOptionsLabelGfx_Cool, sOptionsLabelGfx_Beauty, sOptionsLabelGfx_Cute, sOptionsLabelGfx_Smart, sOptionsLabelGfx_Tough, sOptionsLabelGfx_Cancel} }, }; @@ -287,7 +286,7 @@ static const struct SpriteTemplate sMenuOptionSpriteTemplate = .callback = SpriteCallbackDummy, }; -static const struct OamData gUnknown_08620364 = +static const struct OamData sBlueLightOamData = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -301,18 +300,18 @@ static const struct OamData gUnknown_08620364 = .paletteNum = 0, }; -static const struct SpriteTemplate gUnknown_0862036C = +static const struct SpriteTemplate sMatchCallBlueLightSpriteTemplate = { .tileTag = 1, .paletteTag = 3, - .oam = &gUnknown_08620364, + .oam = &sBlueLightOamData, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -static const struct ScanlineEffectParams gUnknown_08620384 = +static const struct ScanlineEffectParams sPokenavMainMenuScanlineEffectParams = { (void *)REG_ADDR_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, @@ -320,13 +319,13 @@ static const struct ScanlineEffectParams gUnknown_08620384 = 0 }; -static bool32 sub_81C98D4(void) +static bool32 PlayerHasTrainerRematches(void) { s32 i; for (i = 0; i < REMATCH_TABLE_ENTRIES; i++) { - if (sub_81CB0C8(i) == gMapHeader.regionMapSectionId + if (GetMatchTableMapSectionId(i) == gMapHeader.regionMapSectionId && IsRematchEntryRegistered(i) && gSaveBlock1Ptr->trainerRematches[i]) return TRUE; @@ -373,43 +372,43 @@ static struct Pokenav2Struct * OpenPokenavMenu(void) void CreateMenuHandlerLoopedTask(s32 ltIdx) { - struct Pokenav2Struct * state = GetSubstructPtr(2); + struct Pokenav2Struct * state = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); state->loopedTaskId = CreateLoopedTask(sMenuHandlerLoopTaskFuncs[ltIdx], 1); state->isTaskActiveCB = GetCurrentLoopedTaskActive; } bool32 IsMenuHandlerLoopedTaskActive(void) { - struct Pokenav2Struct * state = GetSubstructPtr(2); + struct Pokenav2Struct * state = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); return state->isTaskActiveCB(); } void FreeMenuHandlerSubstruct2(void) { - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - sub_81CA7F4(); + DestroyMovingDotsBgTask(); RemoveWindow(unk->optionDescWindowId); - sub_81C9FEC(); - sub_81CA994(); - FreePokenavSubstruct(2); + FreeAndDestroyMainMenuSprites(); + DestroyMenuOptionGlowTask(); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MENU_ICONS); } static bool32 GetCurrentLoopedTaskActive(void) { - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); return IsLoopedTaskActive(unk->loopedTaskId); } static u32 LoopedTask_OpenMenu(s32 state) { - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); switch (state) { case 0: - InitBgTemplates(gUnknown_08620194, ARRAY_COUNT(gUnknown_08620194)); + InitBgTemplates(sPokenavMainMenuBgTemplates, ARRAY_COUNT(sPokenavMainMenuBgTemplates)); DecompressAndCopyTileDataToVram(1, gPokenavMessageBox_Gfx, 0, 0, 0); SetBgTilemapBuffer(1, unk->bg1TilemapBuffer); CopyToBgTilemapBuffer(1, gPokenavMessageBox_Tilemap, 0, 0); @@ -425,36 +424,36 @@ static u32 LoopedTask_OpenMenu(s32 state) case 1: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - DecompressAndCopyTileDataToVram(2, gUnknown_0861FD6C, 0, 0, 0); - DecompressAndCopyTileDataToVram(2, gUnknown_0861FFF4, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(gUnknown_0861FD4C, 0x20, 0x20); + DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTilemap, 0, 0, 1); + CopyPaletteIntoBufferUnfaded(sPokenavDeviceBgPal, 0x20, 0x20); return LT_INC_AND_PAUSE; case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - DecompressAndCopyTileDataToVram(3, gUnknown_0861FC98, 0, 0, 0); - DecompressAndCopyTileDataToVram(3, gUnknown_0861FCAC, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78, 0x30, 0x20); + DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTilemap, 0, 0, 1); + CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal, 0x30, 0x20); if (GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION || GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION_SEARCH) - sub_81CA850(); + ChangeBgDotsColorToPurple(); return LT_INC_AND_PAUSE; case 3: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; AddOptionDescriptionWindow(); - sub_81CA7D4(); + CreateMovingBgDotsTask(); return LT_INC_AND_CONTINUE; case 4: - sub_81C9FC4(); + LoadPokenavOptionPalettes(); return LT_INC_AND_CONTINUE; case 5: PrintCurrentOptionDescription(); CreateMenuOptionSprites(); - sub_81CA640(); + CreateMatchCallBlueLightSprite(); sub_81CA0C8(); return LT_INC_AND_PAUSE; case 6: - if (sub_81CA7C4()) + if (IsDma3ManagerBusyWithBgCopy_()) return LT_PAUSE; return LT_INC_AND_CONTINUE; case 7: @@ -487,22 +486,22 @@ static u32 LoopedTask_OpenMenu(s32 state) switch (GetPokenavMenuType()) { case POKENAV_MENU_TYPE_CONDITION_SEARCH: - sub_81C7FA0(7, FALSE, FALSE); + ShowLeftHeaderGfx(7, FALSE, FALSE); // fallthrough case POKENAV_MENU_TYPE_CONDITION: - sub_81C7FA0(1, FALSE, FALSE); + ShowLeftHeaderGfx(1, FALSE, FALSE); break; default: - sub_81C7FA0(0, FALSE, FALSE); + ShowLeftHeaderGfx(0, FALSE, FALSE); break; } - sub_81CA20C(); - sub_81CA92C(); + SetupCurrentMenuOptionsGfx(); + SetupPokenavMenuScanlineEffects(); return LT_INC_AND_CONTINUE; case 9: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; break; } @@ -514,15 +513,15 @@ static u32 LoopedTask_MoveMenuCursor(s32 state) switch (state) { case 0: - sub_81CAA3C(); - sub_81CA278(); + SetMenuOptionGlow(); + SetMenuOptionGfxParams_CursorMoved(); PrintCurrentOptionDescription(); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81CA7C4()) + if (IsDma3ManagerBusyWithBgCopy_()) return LT_PAUSE; break; } @@ -534,35 +533,35 @@ static u32 LoopedTask_OpenConditionMenu(s32 state) switch (state) { case 0: - sub_81CA9C8(); - sub_81CA2DC(); - sub_81C7FC4(0, 0); + ResetBldCnt(); + SetupPokenavMenuOptions(); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_MAIN_MENU, 0); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; sub_81CA0C8(); LoadLeftHeaderGfxForIndex(1); return LT_INC_AND_PAUSE; case 2: - sub_81CA20C(); - sub_81C7FA0(1, FALSE, FALSE); - sub_81CA818(); + SetupCurrentMenuOptionsGfx(); + ShowLeftHeaderGfx(1, FALSE, FALSE); + CreateBgDotPurplePalTask(); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; case 3: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - if (sub_81CA89C()) + if (IsTaskActive_UpdateBgDotsPalette()) return LT_PAUSE; - if (sub_81CA7C4()) + if (IsDma3ManagerBusyWithBgCopy_()) return LT_PAUSE; - sub_81CA9D8(); + InitMenuOptionGlow(); break; } return LT_FINISH; @@ -573,34 +572,34 @@ static u32 LoopedTask_ReturnToMainMenu(s32 state) switch (state) { case 0: - sub_81CA9C8(); - sub_81CA2DC(); - sub_81C7FC4(1, 0); + ResetBldCnt(); + SetupPokenavMenuOptions(); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_CONDITION_MENU, 0); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; sub_81CA0C8(); LoadLeftHeaderGfxForIndex(0); return LT_INC_AND_PAUSE; case 2: - sub_81CA20C(); - sub_81C7FA0(0, FALSE, FALSE); - sub_81CA864(); + SetupCurrentMenuOptionsGfx(); + ShowLeftHeaderGfx(0, FALSE, FALSE); + CreateBgDotLightBluePalTask(); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; case 3: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - if (sub_81CA89C()) + if (IsTaskActive_UpdateBgDotsPalette()) return LT_PAUSE; - if (sub_81CA7C4()) + if (IsDma3ManagerBusyWithBgCopy_()) return LT_PAUSE; - sub_81CA9D8(); + InitMenuOptionGlow(); break; } return LT_FINISH; @@ -611,8 +610,8 @@ static u32 LoopedTask_OpenConditionSearchMenu(s32 state) switch (state) { case 0: - sub_81CA9C8(); - sub_81CA2DC(); + ResetBldCnt(); + SetupPokenavMenuOptions(); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; case 1: @@ -622,18 +621,18 @@ static u32 LoopedTask_OpenConditionSearchMenu(s32 state) sub_81CA0C8(); return LT_INC_AND_PAUSE; case 2: - sub_81CA20C(); - sub_81C7FA0(7, FALSE, FALSE); + SetupCurrentMenuOptionsGfx(); + ShowLeftHeaderGfx(7, FALSE, FALSE); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; case 3: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - if (sub_81CA89C()) + if (IsTaskActive_UpdateBgDotsPalette()) return LT_PAUSE; - sub_81CA9D8(); + InitMenuOptionGlow(); break; } return LT_FINISH; @@ -644,27 +643,27 @@ static u32 LoopedTask_ReturnToConditionMenu(s32 state) switch (state) { case 0: - sub_81CA9C8(); - sub_81CA2DC(); - sub_81C7FC4(7, 0); + ResetBldCnt(); + SetupPokenavMenuOptions(); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_SEARCH_MENU, 0); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; sub_81CA0C8(); return LT_INC_AND_PAUSE; case 2: - sub_81CA20C(); + SetupCurrentMenuOptionsGfx(); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; case 3: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81CA89C()) + if (IsTaskActive_UpdateBgDotsPalette()) return LT_PAUSE; - sub_81CA9D8(); + InitMenuOptionGlow(); break; } return LT_FINISH; @@ -714,19 +713,19 @@ static u32 LoopedTask_OpenPokenavFeature(s32 state) case 1: if (WaitForHelpBar()) return LT_PAUSE; - sub_81C7880(); - sub_81CA9C8(); - sub_81CA2DC(); + SlideMenuHeaderUp(); + ResetBldCnt(); + SetupPokenavMenuOptions(); switch (GetPokenavMenuType()) { case POKENAV_MENU_TYPE_CONDITION_SEARCH: - sub_81C7FC4(7, FALSE); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_SEARCH_MENU, FALSE); // fallthrough case POKENAV_MENU_TYPE_CONDITION: - sub_81C7FC4(1, FALSE); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_CONDITION_MENU, FALSE); break; default: - sub_81C7FC4(0, FALSE); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_MAIN_MENU, FALSE); break; } PlaySE(SE_SELECT); @@ -734,7 +733,7 @@ static u32 LoopedTask_OpenPokenavFeature(s32 state) case 2: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; PokenavFadeScreen(0); return LT_INC_AND_PAUSE; @@ -746,16 +745,16 @@ static u32 LoopedTask_OpenPokenavFeature(s32 state) return LT_FINISH; } -static void sub_81C9FC4(void) +static void LoadPokenavOptionPalettes(void) { s32 i; - for (i = 0; i < NELEMS(gUnknown_086201C4); i++) - LoadCompressedSpriteSheet(&gUnknown_086201C4[i]); - Pokenav_AllocAndLoadPalettes(gUnknown_086201D4); + for (i = 0; i < NELEMS(sPokenavOptionsSpriteSheets); i++) + LoadCompressedSpriteSheet(&sPokenavOptionsSpriteSheets[i]); + Pokenav_AllocAndLoadPalettes(sPokenavOptionsSpritePalettes); } -static void sub_81C9FEC(void) +static void FreeAndDestroyMainMenuSprites(void) { FreeSpriteTilesByTag(3); FreeSpriteTilesByTag(1); @@ -765,14 +764,14 @@ static void sub_81C9FEC(void) FreeSpritePaletteByTag(7); FreeSpritePaletteByTag(8); FreeSpritePaletteByTag(3); - sub_81CA094(); - sub_81CA698(); + DestroyMenuOptionSprites(); + DestroyRematchBlueLightSpriteId(); } static void CreateMenuOptionSprites(void) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { @@ -786,10 +785,10 @@ static void CreateMenuOptionSprites(void) } } -static void sub_81CA094(void) +static void DestroyMenuOptionSprites(void) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { @@ -804,25 +803,25 @@ static void sub_81CA094(void) static void sub_81CA0C8(void) { s32 menuType = GetPokenavMenuType(); - sub_81CA0EC(gUnknown_08620240[menuType].unk4, gUnknown_08620240[menuType].unk0, gUnknown_08620240[menuType].unk2); + DrawOptionLabelGfx(sPokenavMenuOptionLabelGfx[menuType].tiles, sPokenavMenuOptionLabelGfx[menuType].yStart, sPokenavMenuOptionLabelGfx[menuType].deltaY); } -static void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) +static void DrawOptionLabelGfx(const u16 *const *tiles, s32 yPos, s32 deltaY) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); s32 sp04 = GetSpriteTileStartByTag(3); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (*a0 != NULL) + if (*tiles != NULL) { for (j = 0; j < 4; j++) { - unk->iconSprites[i][j]->oam.tileNum = (*a0)[0] + sp04 + 8 * j; - unk->iconSprites[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*a0)[1] + 4); + unk->iconSprites[i][j]->oam.tileNum = (*tiles)[0] + sp04 + 8 * j; + unk->iconSprites[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*tiles)[1] + 4); unk->iconSprites[i][j]->invisible = TRUE; - unk->iconSprites[i][j]->pos1.y = a1; + unk->iconSprites[i][j]->pos1.y = yPos; unk->iconSprites[i][j]->pos1.x = 0x8c; unk->iconSprites[i][j]->pos2.x = 32 * j; } @@ -836,76 +835,78 @@ static void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) } unk->iconVisible[i] = FALSE; } - a0++; - a1 += a2; + tiles++; + yPos += deltaY; } } -static void sub_81CA20C(void) +static void SetupCurrentMenuOptionsGfx(void) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); s32 r8 = GetPokenavCursorPos(); s32 r7 = 0; s32 r2; for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (unk->iconVisible[i]) + if (icons->iconVisible[i]) { if (r7++ == r8) { r2 = 0x82; - unk->cursorPos = i; + icons->cursorPos = i; } else r2 = 0x8c; - sub_81CA35C(unk->iconSprites[i], 0x100, r2, 0xC); - sub_81CA448(unk->iconSprites[i], FALSE); + SetMenuOptionGfxParamsInactive(icons->iconSprites[i], 0x100, r2, 0xC); + SetMenuOptionGfxInvisibility(icons->iconSprites[i], FALSE); } else - sub_81CA448(unk->iconSprites[i], TRUE); + { + SetMenuOptionGfxInvisibility(icons->iconSprites[i], TRUE); + } } } -static void sub_81CA278(void) +static void SetMenuOptionGfxParams_CursorMoved(void) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(2); - s32 r3 = GetPokenavCursorPos(); - s32 r5; + struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + s32 prevPos = GetPokenavCursorPos(); + s32 newPos; - for (i = 0, r5 = 0; i < MAX_POKENAV_MENUITEMS; i++) + for (i = 0, newPos = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (unk->iconVisible[i]) + if (icons->iconVisible[i]) { - if (r5 == r3) + if (newPos == prevPos) { - r5 = i; + newPos = i; break; } - r5++; + newPos++; } } - sub_81CA35C(unk->iconSprites[unk->cursorPos], 0x82, 0x8c, 0x4); - sub_81CA35C(unk->iconSprites[r5], 0x8c, 0x82, 0x4); - unk->cursorPos = r5; + SetMenuOptionGfxParamsInactive(icons->iconSprites[icons->cursorPos], 0x82, 0x8c, 0x4); + SetMenuOptionGfxParamsInactive(icons->iconSprites[newPos], 0x8c, 0x82, 0x4); + icons->cursorPos = newPos; } -static void sub_81CA2DC(void) +static void SetupPokenavMenuOptions(void) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct *optionIcons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (unk->iconVisible[i]) + if (optionIcons->iconVisible[i]) { - if (unk->cursorPos != i) - sub_81CA35C(unk->iconSprites[i], 0x8C, 0x100, 0x8); + if (optionIcons->cursorPos != i) + SetMenuOptionGfxParamsInactive(optionIcons->iconSprites[i], 0x8C, 0x100, 0x8); else - sub_81CA3B4(unk->iconSprites[i]); + SetMenuOptionGfxParamsActive(optionIcons->iconSprites[i]); } } } @@ -913,40 +914,40 @@ static void sub_81CA2DC(void) static bool32 AreMenuOptionSpritesMoving(void) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (unk->iconSprites[i][0]->callback != SpriteCallbackDummy) + if (icons->iconSprites[i][0]->callback != SpriteCallbackDummy) return TRUE; } - if (unk->otherIconsInMotion) + if (icons->otherIconsInMotion) return TRUE; return FALSE; } -static void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) +static void SetMenuOptionGfxParamsInactive(struct Sprite ** sprites, s32 x, s32 a2, s32 a3) { s32 i; for (i = 0; i < 4; i++) { - (*sprites)->pos1.x = a1; + (*sprites)->pos1.x = x; (*sprites)->data[0] = a3; - (*sprites)->data[1] = 16 * (a2 - a1) / a3; - (*sprites)->data[2] = 16 * a1; + (*sprites)->data[1] = 16 * (a2 - x) / a3; + (*sprites)->data[2] = 16 * x; (*sprites)->data[7] = a2; (*sprites)->callback = sub_81CA474; sprites++; } } -static void sub_81CA3B4(struct Sprite ** sprites) +static void SetMenuOptionGfxParamsActive(struct Sprite ** sprites) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); u8 taskId; for (i = 0; i < 4; i++) @@ -968,13 +969,13 @@ static void sub_81CA3B4(struct Sprite ** sprites) unk->otherIconsInMotion++; } -static void sub_81CA448(struct Sprite ** sprites, bool32 a1) +static void SetMenuOptionGfxInvisibility(struct Sprite ** sprites, bool32 invisible) { s32 i; for (i = 0; i < 4; i++) { - (*sprites)->invisible = a1; + (*sprites)->invisible = invisible; sprites++; } } @@ -1078,7 +1079,7 @@ static void sub_81CA580(u8 taskId) data[4]++; if (data[4] == 12) { - ((struct Pokenav2Struct *)GetSubstructPtr(2))->otherIconsInMotion--; + ((struct Pokenav2Struct *)GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS))->otherIconsInMotion--; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x00, 0x10)); DestroyTask(taskId); } @@ -1089,24 +1090,24 @@ static void sub_81CA580(u8 taskId) data[0]--; } -static void sub_81CA640(void) +static void CreateMatchCallBlueLightSprite(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); - u8 spriteId = CreateSprite(&gUnknown_0862036C, 0x10, 0x60, 4); - ptr->field_028 = &gSprites[spriteId]; - if (sub_81C98D4()) - ptr->field_028->callback = sub_81CA6AC; + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + u8 spriteId = CreateSprite(&sMatchCallBlueLightSpriteTemplate, 0x10, 0x60, 4); + ptr->blueLightSpriteId = &gSprites[spriteId]; + if (PlayerHasTrainerRematches()) + ptr->blueLightSpriteId->callback = SpriteCB_BlinkingBlueLight; else - ptr->field_028->invisible = TRUE; + ptr->blueLightSpriteId->invisible = TRUE; } -static void sub_81CA698(void) +static void DestroyRematchBlueLightSpriteId(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); - DestroySprite(ptr->field_028); + struct Pokenav2Struct *ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + DestroySprite(ptr->blueLightSpriteId); } -static void sub_81CA6AC(struct Sprite * sprite) +static void SpriteCB_BlinkingBlueLight(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] > 8) @@ -1118,7 +1119,7 @@ static void sub_81CA6AC(struct Sprite * sprite) static void AddOptionDescriptionWindow(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); ptr->optionDescWindowId = AddWindow(&sOptionDescWindowTemplate); PutWindowTilemap(ptr->optionDescWindowId); @@ -1128,7 +1129,7 @@ static void AddOptionDescriptionWindow(void) static void PrintCurrentOptionDescription(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); int menuItem = GetCurrentMenuItemId(); const u8 * s = sPageDescriptions[menuItem]; u32 width = GetStringWidth(1, s, -1); @@ -1140,73 +1141,73 @@ static void PrintCurrentOptionDescription(void) // Can occur by obtaining a mon with a ribbon and then releasing all ribbon winners static void PrintNoRibbonWinners(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); const u8 * s = gText_NoRibbonWinners; u32 width = GetStringWidth(1, s, -1); FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6)); AddTextPrinterParameterized3(ptr->optionDescWindowId, 1, (192 - width) / 2, 1, sOptionDescTextColors2, 0, s); } -static bool32 sub_81CA7C4(void) +static bool32 IsDma3ManagerBusyWithBgCopy_(void) { return IsDma3ManagerBusyWithBgCopy(); } -static void sub_81CA7D4(void) +static void CreateMovingBgDotsTask(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); - ptr->bg3ScrollTaskId = CreateTask(sub_81CA808, 2); + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + ptr->bg3ScrollTaskId = CreateTask(Task_MoveBgDots, 2); } -static void sub_81CA7F4(void) +static void DestroyMovingDotsBgTask(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); DestroyTask(ptr->bg3ScrollTaskId); } -static void sub_81CA808(u8 taskId) +static void Task_MoveBgDots(u8 taskId) { ChangeBgX(3, 0x80, 1); } -static void sub_81CA818(void) +static void CreateBgDotPurplePalTask(void) { - u8 taskId = CreateTask(sub_81CA8B0, 3); - SetWordTaskArg(taskId, 1, (uintptr_t)(gUnknown_0861FC78 + 1)); - SetWordTaskArg(taskId, 3, (uintptr_t)(gUnknown_0861FC78 + 7)); + u8 taskId = CreateTask(Task_UpdateBgDotsPalette, 3); + SetWordTaskArg(taskId, 1, (uintptr_t)(sPokenavBgDotsPal + 1)); + SetWordTaskArg(taskId, 3, (uintptr_t)(sPokenavBgDotsPal + 7)); } -static void sub_81CA850(void) +static void ChangeBgDotsColorToPurple(void) { - CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78 + 7, 0x31, 4); + CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal + 7, 0x31, 4); } -static void sub_81CA864(void) +static void CreateBgDotLightBluePalTask(void) { - u8 taskId = CreateTask(sub_81CA8B0, 3); - SetWordTaskArg(taskId, 1, (uintptr_t)(gUnknown_0861FC78 + 7)); - SetWordTaskArg(taskId, 3, (uintptr_t)(gUnknown_0861FC78 + 1)); + u8 taskId = CreateTask(Task_UpdateBgDotsPalette, 3); + SetWordTaskArg(taskId, 1, (uintptr_t)(sPokenavBgDotsPal + 7)); + SetWordTaskArg(taskId, 3, (uintptr_t)(sPokenavBgDotsPal + 1)); } -static bool32 sub_81CA89C(void) +static bool32 IsTaskActive_UpdateBgDotsPalette(void) { - return FuncIsActiveTask(sub_81CA8B0); + return FuncIsActiveTask(Task_UpdateBgDotsPalette); } -static void sub_81CA8B0(u8 taskId) +static void Task_UpdateBgDotsPalette(u8 taskId) { u16 sp8[2]; s16 * data = gTasks[taskId].data; const u16 * pal1 = (const u16 *)GetWordTaskArg(taskId, 1); const u16 * pal2 = (const u16 *)GetWordTaskArg(taskId, 3); - sub_81C79BC(pal1, pal2, 2, 12, ++data[0], sp8); + PokenavCopyPalette(pal1, pal2, 2, 12, ++data[0], sp8); LoadPalette(sp8, 0x31, 4); if (data[0] == 12) DestroyTask(taskId); } -static void sub_81CA914(void) +static void VBlankCB_PokenavMainMenu(void) { TransferPlttBuffer(); LoadOam(); @@ -1214,7 +1215,7 @@ static void sub_81CA914(void) ScanlineEffect_InitHBlankDmaTransfer(); } -static void sub_81CA92C(void) +static void SetupPokenavMenuScanlineEffects(void) { SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); SetGpuReg(REG_OFFSET_BLDY, 0); @@ -1223,33 +1224,33 @@ static void sub_81CA92C(void) SetGpuRegBits(REG_OFFSET_WINOUT, 0x1F); SetGpuRegBits(REG_OFFSET_WIN0V, 0xA0); ScanlineEffect_Stop(); - sub_81CAA3C(); - ScanlineEffect_SetParams(gUnknown_08620384); - SetVBlankCallback_(sub_81CA914); - CreateTask(sub_81CA9EC, 3); + SetMenuOptionGlow(); + ScanlineEffect_SetParams(sPokenavMainMenuScanlineEffectParams); + SetVBlankCallback_(VBlankCB_PokenavMainMenu); + CreateTask(Task_CurrentMenuOptionGlow, 3); } -static void sub_81CA994(void) +static void DestroyMenuOptionGlowTask(void) { SetGpuReg(REG_OFFSET_BLDCNT, 0); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); ScanlineEffect_Stop(); - DestroyTask(FindTaskIdByFunc(sub_81CA9EC)); + DestroyTask(FindTaskIdByFunc(Task_CurrentMenuOptionGlow)); SetPokenavVBlankCallback(); } -static void sub_81CA9C8(void) +static void ResetBldCnt(void) { SetGpuReg(REG_OFFSET_BLDCNT, 0); } -static void sub_81CA9D8(void) +static void InitMenuOptionGlow(void) { - sub_81CAA3C(); + SetMenuOptionGlow(); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); } -static void sub_81CA9EC(u8 taskId) +static void Task_CurrentMenuOptionGlow(u8 taskId) { s16 * data = gTasks[taskId].data; data[0]++; @@ -1262,18 +1263,18 @@ static void sub_81CA9EC(u8 taskId) } } -static void sub_81CAA3C(void) +static void SetMenuOptionGlow(void) { int menuType = GetPokenavMenuType(); int cursorPos = GetPokenavCursorPos(); - int r4 = gUnknown_08620240[menuType].unk2 * cursorPos + gUnknown_08620240[menuType].unk0 - 8; + int r4 = sPokenavMenuOptionLabelGfx[menuType].deltaY * cursorPos + sPokenavMenuOptionLabelGfx[menuType].yStart - 8; CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140); CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140); CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[0][r4], 0x20); CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[1][r4], 0x20); } -void sub_81CAADC(void) +void ResetBldCnt_(void) { - sub_81CA9C8(); + ResetBldCnt(); } diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 394b409076..2dd2e44088 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -170,11 +170,11 @@ static const struct SpriteTemplate sCityZoomTextSpriteTemplate = u32 PokenavCallback_Init_RegionMap(void) { - struct Pokenav5Struct *state = AllocSubstruct(3, sizeof(struct Pokenav5Struct)); + struct Pokenav5Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_STATE, sizeof(struct Pokenav5Struct)); if (!state) return FALSE; - if (!AllocSubstruct(16, sizeof(struct RegionMap))) + if (!AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP, sizeof(struct RegionMap))) return FALSE; state->zoomDisabled = IsEventIslandMapSecId(gMapHeader.regionMapSectionId); @@ -189,13 +189,13 @@ u32 PokenavCallback_Init_RegionMap(void) void FreeRegionMapSubstruct1(void) { gSaveBlock2Ptr->regionMapZoom = IsRegionMapZoomed(); - FreePokenavSubstruct(16); - FreePokenavSubstruct(3); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_REGION_MAP); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_STATE); } u32 GetRegionMapCallback(void) { - struct Pokenav5Struct *state = GetSubstructPtr(3); + struct Pokenav5Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); return state->callback(state); } @@ -235,13 +235,13 @@ static u32 GetExitRegionMapMenuId(struct Pokenav5Struct *state) bool32 GetZoomDisabled(void) { - struct Pokenav5Struct *state = GetSubstructPtr(3); + struct Pokenav5Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); return state->zoomDisabled; } bool32 OpenPokenavRegionMap(void) { - struct Pokenav5Struct_2 *state = AllocSubstruct(4, sizeof(struct Pokenav5Struct_2)); + struct Pokenav5Struct_2 *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, sizeof(struct Pokenav5Struct_2)); if (!state) return FALSE; @@ -252,25 +252,25 @@ bool32 OpenPokenavRegionMap(void) void CreateRegionMapLoopedTask(s32 index) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); state->loopTaskId = CreateLoopedTask(sRegionMapLoopTaskFuncs[index], 1); state->isTaskActiveCB = GetCurrentLoopedTaskActive; } bool32 IsRegionMapLoopedTaskActive(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); return state->isTaskActiveCB(); } void FreeRegionMapSubstruct2(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); FreeRegionMapIconResources(); FreeCityZoomViewGfx(); RemoveWindow(state->infoWindowId); - FreePokenavSubstruct(16); - FreePokenavSubstruct(4); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_REGION_MAP); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); SetPokenavVBlankCallback(); SetBgMode(0); } @@ -285,7 +285,7 @@ static void VBlankCB_RegionMap(void) static bool32 GetCurrentLoopedTaskActive(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); return IsLoopedTaskActive(state->loopTaskId); } @@ -301,7 +301,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) { int menuGfxId; struct RegionMap *regionMap; - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -311,7 +311,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) HideBg(3); SetBgMode(1); InitBgTemplates(sRegionMapBgTemplates, ARRAY_COUNT(sRegionMapBgTemplates) - 1); - regionMap = GetSubstructPtr(16); + regionMap = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP); InitRegionMapData(regionMap, &sRegionMapBgTemplates[1], ShouldOpenRegionMapZoomed()); LoadCityZoomViewGfx(); return LT_INC_AND_PAUSE; @@ -361,11 +361,11 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) menuGfxId = POKENAV_GFX_MAP_MENU_ZOOMED_IN; LoadLeftHeaderGfxForIndex(menuGfxId); - sub_81C7FA0(menuGfxId, 1, 1); + ShowLeftHeaderGfx(menuGfxId, 1, 1); PokenavFadeScreen(1); return LT_INC_AND_PAUSE; case 7: - if (IsPaletteFadeActive() || sub_81C8010()) + if (IsPaletteFadeActive() || AreLeftHeaderSpritesMoving()) return LT_PAUSE; return LT_INC_AND_CONTINUE; default: @@ -375,7 +375,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) static u32 LoopedTask_UpdateInfoAfterCursorMove(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -409,7 +409,7 @@ static u32 LoopedTask_RegionMapZoomOut(s32 taskState) if (WaitForHelpBar()) return LT_PAUSE; - sub_81C7E14(POKENAV_GFX_MAP_MENU_ZOOMED_OUT); + UpdateRegionMapRightHeaderTiles(POKENAV_GFX_MAP_MENU_ZOOMED_OUT); break; } @@ -418,7 +418,7 @@ static u32 LoopedTask_RegionMapZoomOut(s32 taskState) static u32 LoopedTask_RegionMapZoomIn(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -442,7 +442,7 @@ static u32 LoopedTask_RegionMapZoomIn(s32 taskState) if (WaitForHelpBar()) return LT_PAUSE; - sub_81C7E14(POKENAV_GFX_MAP_MENU_ZOOMED_IN); + UpdateRegionMapRightHeaderTiles(POKENAV_GFX_MAP_MENU_ZOOMED_IN); break; } @@ -461,8 +461,8 @@ static u32 LoopedTask_ExitRegionMap(s32 taskState) if (IsPaletteFadeActive()) return LT_PAUSE; - sub_81C7FDC(); - sub_81C78A0(); + SetLeftHeaderSpritesInvisibility(); + SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 2: if (MainMenuLoopedTaskIsBusy()) @@ -490,7 +490,7 @@ static void LoadCityZoomViewGfx(void) static void FreeCityZoomViewGfx(void) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); FreeSpriteTilesByTag(6); FreeSpritePaletteByTag(11); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) @@ -527,7 +527,7 @@ static bool32 TryFreeTempTileDataBuffers(void) static void UpdateMapSecInfoWindow(struct Pokenav5Struct_2 *state) { - struct RegionMap *regionMap = GetSubstructPtr(16); + struct RegionMap *regionMap = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP); switch (regionMap->mapSecType) { case MAPSECTYPE_CITY_CANFLY: @@ -619,7 +619,7 @@ static bool32 IsDecompressCityMapsActive(void) static u32 LoopedTask_DecompressCityMaps(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); if (taskState < NUM_CITY_MAPS) { LZ77UnCompWram(sPokenavCityMaps[taskState].tilemap, state->cityZoomPics[taskState]); @@ -662,7 +662,7 @@ static void CreateCityZoomTextSprites(void) int i; int y; struct Sprite *sprite; - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); // When not zoomed in the text is still created but its pushed off screen if (!IsRegionMapZoomed()) @@ -722,7 +722,7 @@ static void SpriteCB_CityZoomText(struct Sprite *sprite) static void UpdateCityZoomTextPosition(void) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); int y = 132 - (GetBgY(1) >> 8); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) state->cityZoomTextSprites[i]->pos1.y = y; @@ -731,7 +731,7 @@ static void UpdateCityZoomTextPosition(void) static void SetCityZoomTextInvisibility(bool32 invisible) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) state->cityZoomTextSprites[i]->invisible = invisible; } diff --git a/src/pokenav_ribbons_1.c b/src/pokenav_ribbons_1.c index fd47b27ad4..9c171dd45e 100644 --- a/src/pokenav_ribbons_1.c +++ b/src/pokenav_ribbons_1.c @@ -8,16 +8,28 @@ #include "international_string_util.h" #include "constants/songs.h" +enum +{ + RIBBONS_MON_LIST_FUNC_NONE, + RIBBONS_MON_LIST_FUNC_MOVE_UP, + RIBBONS_MON_LIST_FUNC_MOVE_DOWN, + RIBBONS_MON_LIST_FUNC_PAGE_UP, + RIBBONS_MON_LIST_FUNC_PAGE_DOWN, + RIBBONS_MON_LIST_FUNC_EXIT, + RIBBONS_MON_LIST_FUNC_OPEN_RIBBONS_SUMMARY +}; + + struct PokenavSub9 { - u32 (*unk0)(struct PokenavSub9*); + u32 (*callback)(struct PokenavSub9*); u32 loopedTaskId; u16 winid; - s32 unkC; - s32 unk10; - u32 unk14; - u32 unk18; - struct PokenavSub18 *unk1C; + s32 boxId; + s32 monId; + u32 changeBgs; + u32 saveMonList; + struct PokenavSub18 *monList; }; struct PokenavSub10 @@ -25,46 +37,46 @@ struct PokenavSub10 bool32 (*callback)(void); u32 ltid; u16 winid; - bool32 unkC; + bool32 fromSummary; u8 buff[BG_SCREEN_SIZE]; }; -static u32 sub_81CFA68(struct PokenavSub9 *structPtr); -static u32 sub_81CFA88(struct PokenavSub9 *structPtr); -static u32 sub_81CFB08(struct PokenavSub9 *structPtr); +static u32 HandleRibbonsMonListInput_WaitListInit(struct PokenavSub9 *structPtr); +static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr); +static u32 RibbonsMonMenu_ReturnToMainMenu(struct PokenavSub9 *structPtr); static u32 sub_81CFB10(struct PokenavSub9 *structPtr); -static u32 sub_81CFB8C(s32 state); -static u32 sub_81CFC2C(s32 state); -static u32 sub_81CFC40(s32 state); -static u32 sub_81CFB74(s32 state); +static u32 BuildPartyMonRibbonList(s32 state); +static u32 InitBoxMonRibbonList(s32 state); +static u32 BuildBoxMonRibbonList(s32 state); +static u32 GetMonRibbonListLoopTaskFunc(s32 state); static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *item); -static u32 sub_81CFEB8(s32 state); -static bool32 sub_81CFE84(void); -static u32 sub_81CFFFC(s32 state); -static u32 sub_81D0074(s32 state); -static u32 sub_81D00EC(s32 state); -static u32 sub_81D0164(s32 state); -static u32 sub_81D01DC(s32 state); -static u32 sub_81D021C(s32 state); +static u32 LoopedTask_OpenRibbonsMonList(s32 state); +static bool32 GetRibbonsMonCurrentLoopedTaskActive(void); +static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state); +static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state); +static u32 LoopedTask_RibbonsListMovePageUp(s32 state); +static u32 LoopedTask_RibbonsListMovePageDown(s32 state); +static u32 LoopedTask_RibbonsListReturnToMainMenu(s32 state); +static u32 LoopedTask_RibbonsListOpenSummary(s32 state); static void sub_81D02B0(s32 windowId, s32 val1, s32 val2); -static void sub_81D024C(struct PokenavSub10 *ptr); +static void AddRibbonsMonListWindow(struct PokenavSub10 *ptr); static void sub_81D0288(struct PokenavSub10 *ptr); -static void sub_81D0304(void); +static void InitMonRibbonPokenavListMenuTemplate(void); static void BufferRibbonMonInfoText(struct PokenavMonList *, u8 *); -static const LoopedTask gUnknown_086235D8[] = +static const LoopedTask sMonRibbonListLoopTaskFuncs[] = { - sub_81CFB8C, - sub_81CFC2C, - sub_81CFC40 + BuildPartyMonRibbonList, + InitBoxMonRibbonList, + BuildBoxMonRibbonList }; -static const u16 gUnknown_086235E4[] = INCBIN_U16("graphics/pokenav/ui_ribbons.gbapal"); -static const u32 gUnknown_08623604[] = INCBIN_U32("graphics/pokenav/ui_ribbons.4bpp.lz"); -static const u32 gUnknown_086236CC[] = INCBIN_U32("graphics/pokenav/ui_ribbons.bin.lz"); +static const u16 sMonRibbonListFramePal[] = INCBIN_U16("graphics/pokenav/ui_ribbons.gbapal"); +static const u32 sMonRibbonListFrameTiles[] = INCBIN_U32("graphics/pokenav/ui_ribbons.4bpp.lz"); +static const u32 sMonRibbonListFrameTilemap[] = INCBIN_U32("graphics/pokenav/ui_ribbons.bin.lz"); static const u16 gUnknown_08623790[] = INCBIN_U16("graphics/pokenav/8623790.gbapal"); -static const struct BgTemplate gUnknown_086237B0[] = +static const struct BgTemplate sMonRibbonListBgTemplates[] = { { .bg = 1, @@ -85,18 +97,18 @@ static const struct BgTemplate gUnknown_086237B0[] = } }; -static const LoopedTask gUnknown_086237B8[] = +static const LoopedTask sRibbonsMonMenuLoopTaskFuncs[] = { - NULL, - sub_81CFFFC, - sub_81D0074, - sub_81D00EC, - sub_81D0164, - sub_81D01DC, - sub_81D021C + [RIBBONS_MON_LIST_FUNC_NONE] = NULL, + [RIBBONS_MON_LIST_FUNC_MOVE_UP] = LoopedTask_RibbonsListMoveCursorUp, + [RIBBONS_MON_LIST_FUNC_MOVE_DOWN] = LoopedTask_RibbonsListMoveCursorDown, + [RIBBONS_MON_LIST_FUNC_PAGE_UP] = LoopedTask_RibbonsListMovePageUp, + [RIBBONS_MON_LIST_FUNC_PAGE_DOWN] = LoopedTask_RibbonsListMovePageDown, + [RIBBONS_MON_LIST_FUNC_EXIT] = LoopedTask_RibbonsListReturnToMainMenu, + [RIBBONS_MON_LIST_FUNC_OPEN_RIBBONS_SUMMARY] = LoopedTask_RibbonsListOpenSummary }; -static const struct WindowTemplate gUnknown_086237D4 = +static const struct WindowTemplate sRibbonsMonListWindowTemplate = { .bg = 1, .tilemapLeft = 1, @@ -111,135 +123,136 @@ static const u8 sText_MaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHIT static const u8 sText_FemaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); static const u8 sText_NoGenderSymbol[] = _("{UNK_SPACER}"); -bool32 PokenavCallback_Init_12(void) +bool32 PokenavCallback_Init_MonRibbonList(void) { - struct PokenavSub9 *structPtr = AllocSubstruct(9, sizeof(struct PokenavSub9)); + struct PokenavSub9 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct PokenavSub9)); if (structPtr == NULL) return FALSE; - structPtr->unk1C = AllocSubstruct(18, sizeof(struct PokenavSub18)); - if (structPtr->unk1C == NULL) + structPtr->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); + if (structPtr->monList == NULL) return FALSE; - structPtr->unk0 = sub_81CFA68; - structPtr->loopedTaskId = CreateLoopedTask(sub_81CFB74, 1); - structPtr->unk14 = 0; + structPtr->callback = HandleRibbonsMonListInput_WaitListInit; + structPtr->loopedTaskId = CreateLoopedTask(GetMonRibbonListLoopTaskFunc, 1); + structPtr->changeBgs = 0; return TRUE; } -bool32 PokenavCallback_Init_14(void) +bool32 PokenavCallback_Init_RibbonsMonListFromSummary(void) { - struct PokenavSub9 *structPtr = AllocSubstruct(9, sizeof(struct PokenavSub9)); + struct PokenavSub9 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct PokenavSub9)); if (structPtr == NULL) return FALSE; - structPtr->unk1C = GetSubstructPtr(18); - structPtr->unk0 = sub_81CFA88; - structPtr->unk14 = 1; + structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + structPtr->callback = HandleRibbonsMonListInput; + structPtr->changeBgs = 1; return TRUE; } -u32 sub_81CFA34(void) +u32 GetRibbonsMonListCallback(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(9); - return structPtr->unk0(structPtr); + struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return structPtr->callback(structPtr); } -void sub_81CFA48(void) +void FreeRibbonsMonList1(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(9); - if (!structPtr->unk18) - FreePokenavSubstruct(18); - FreePokenavSubstruct(9); + struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + if (!structPtr->saveMonList) + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); } -static u32 sub_81CFA68(struct PokenavSub9 *structPtr) +static u32 HandleRibbonsMonListInput_WaitListInit(struct PokenavSub9 *structPtr) { if (!IsLoopedTaskActive(structPtr->loopedTaskId)) - structPtr->unk0 = sub_81CFA88; + structPtr->callback = HandleRibbonsMonListInput; return 0; } -static u32 sub_81CFA88(struct PokenavSub9 *structPtr) +static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr) { if (JOY_REPEAT(DPAD_UP)) - return 1; + return RIBBONS_MON_LIST_FUNC_MOVE_UP; if (JOY_REPEAT(DPAD_DOWN)) - return 2; + return RIBBONS_MON_LIST_FUNC_MOVE_DOWN; if (JOY_NEW(DPAD_LEFT)) - return 3; + return RIBBONS_MON_LIST_FUNC_PAGE_UP; if (JOY_NEW(DPAD_RIGHT)) - return 4; + return RIBBONS_MON_LIST_FUNC_PAGE_DOWN; if (JOY_NEW(B_BUTTON)) { - structPtr->unk18 = 0; - structPtr->unk0 = sub_81CFB08; - return 5; + structPtr->saveMonList = 0; + structPtr->callback = RibbonsMonMenu_ReturnToMainMenu; + return RIBBONS_MON_LIST_FUNC_EXIT; } if (JOY_NEW(A_BUTTON)) { - structPtr->unk1C->unk2 = GetSelectedMatchCall(); - structPtr->unk18 = 1; - structPtr->unk0 = sub_81CFB10; - return 6; + structPtr->monList->currIndex = GetSelectedPokenavListIndex(); + structPtr->saveMonList = 1; + structPtr->callback = sub_81CFB10; + return RIBBONS_MON_LIST_FUNC_OPEN_RIBBONS_SUMMARY; } - return 0; + return RIBBONS_MON_LIST_FUNC_NONE; } -static u32 sub_81CFB08(struct PokenavSub9 *structPtr) +static u32 RibbonsMonMenu_ReturnToMainMenu(struct PokenavSub9 *structPtr) { return POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS; } static u32 sub_81CFB10(struct PokenavSub9 *structPtr) { - return POKENAV_MENU_D; + return POKENAV_RIBBONS_SUMMARY_SCREEN; } -static u32 sub_81CFB18(void) +static u32 UpdateMonListBgs(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(9); - return structPtr->unk14; + struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return structPtr->changeBgs; } -static struct PokenavMonList * sub_81CFB28(void) +static struct PokenavMonList *GetMonRibbonMonListData(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - return ptr->unk1C->unk4; + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return ptr->monList->monData; } -static s32 sub_81CFB38(void) +static s32 GetRibbonsMonListCount(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - return ptr->unk1C->unk0; + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return ptr->monList->listCount; } -static s32 sub_81CFB48(void) +//unused +static s32 GetMonRibbonSelectedMonData(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - s32 idx = GetSelectedMatchCall(); - return ptr->unk1C->unk4[idx].data; + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + s32 idx = GetSelectedPokenavListIndex(); + return ptr->monList->monData[idx].data; } -static s32 sub_81CFB64(void) +static s32 GetRibbonListMenuCurrIndex(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - return ptr->unk1C->unk2; + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return ptr->monList->currIndex; } -static u32 sub_81CFB74(s32 state) +static u32 GetMonRibbonListLoopTaskFunc(s32 state) { - return gUnknown_086235D8[state](state); + return sMonRibbonListLoopTaskFuncs[state](state); } -static u32 sub_81CFB8C(s32 state) +static u32 BuildPartyMonRibbonList(s32 state) { s32 i; struct PokenavMonList item; - struct PokenavSub9 * ptr = GetSubstructPtr(9); + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - ptr->unk1C->unk0 = 0; - ptr->unk1C->unk2 = 0; + ptr->monList->listCount = 0; + ptr->monList->currIndex = 0; item.boxId = TOTAL_BOXES_COUNT; for (i = 0; i < PARTY_SIZE; i++) { @@ -261,19 +274,19 @@ static u32 sub_81CFB8C(s32 state) return LT_INC_AND_CONTINUE; } -static u32 sub_81CFC2C(s32 state) +static u32 InitBoxMonRibbonList(s32 state) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - ptr->unk10 = 0; - ptr->unkC = 0; + struct PokenavSub9 *ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + ptr->monId = 0; + ptr->boxId = 0; return LT_INC_AND_CONTINUE; } -static u32 sub_81CFC40(s32 state) +static u32 BuildBoxMonRibbonList(s32 state) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - s32 boxId = ptr->unkC; - s32 monId = ptr->unk10; + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + s32 boxId = ptr->boxId; + s32 monId = ptr->monId; s32 boxCount = 0; struct PokenavMonList item; @@ -296,8 +309,8 @@ static u32 sub_81CFC40(s32 state) monId++; if (boxCount > TOTAL_BOXES_COUNT) { - ptr->unkC = boxId; - ptr->unk10 = monId; + ptr->boxId = boxId; + ptr->monId = monId; return LT_CONTINUE; } } @@ -305,37 +318,38 @@ static u32 sub_81CFC40(s32 state) boxId++; } - ptr->unk14 = 1; + ptr->changeBgs = 1; return LT_FINISH; } static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *item) { u32 left = 0; - u32 right = structPtr->unk1C->unk0; + u32 right = structPtr->monList->listCount; u32 insertionIdx = left + (right - left) / 2; while (right != insertionIdx) { - if (item->data > structPtr->unk1C->unk4[insertionIdx].data) + if (item->data > structPtr->monList->monData[insertionIdx].data) right = insertionIdx; else left = insertionIdx + 1; insertionIdx = left + (right - left) / 2; } - for (right = structPtr->unk1C->unk0; right > insertionIdx; right--) - structPtr->unk1C->unk4[right] = structPtr->unk1C->unk4[right - 1]; - structPtr->unk1C->unk4[insertionIdx] = *item; - structPtr->unk1C->unk0++; + for (right = structPtr->monList->listCount; right > insertionIdx; right--) + structPtr->monList->monData[right] = structPtr->monList->monData[right - 1]; + structPtr->monList->monData[insertionIdx] = *item; + structPtr->monList->listCount++; } -static bool32 sub_81CFD58(void) +//unused +static bool32 Unused_PlayerHasRibbonsMon(void) { s32 i, j; for (i = 0; i < PARTY_SIZE; i++) { - struct Pokemon * mon = &gPlayerParty[i]; + struct Pokemon *mon = &gPlayerParty[i]; if (!GetMonData(mon, MON_DATA_SANITY_HAS_SPECIES)) continue; if (GetMonData(mon, MON_DATA_SANITY_IS_EGG)) @@ -358,72 +372,72 @@ static bool32 sub_81CFD58(void) return FALSE; } -bool32 sub_81CFDD0(void) +bool32 OpenRibbonsMonList(void) { - struct PokenavSub10 * ptr = AllocSubstruct(10, sizeof(struct PokenavSub10)); + struct PokenavSub10 *ptr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct PokenavSub10)); if (ptr == NULL) return FALSE; - ptr->ltid = CreateLoopedTask(sub_81CFEB8, 1); - ptr->callback = sub_81CFE84; - ptr->unkC = FALSE; + ptr->ltid = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); + ptr->callback = GetRibbonsMonCurrentLoopedTaskActive; + ptr->fromSummary = FALSE; return TRUE; } -bool32 sub_81CFE08(void) +bool32 OpenRibbonsMonListFromRibbonsSummary(void) { - struct PokenavSub10 * ptr = AllocSubstruct(10, sizeof(struct PokenavSub10)); - if (ptr == NULL) + struct PokenavSub10 *monMenu = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct PokenavSub10)); + if (monMenu == NULL) return FALSE; - ptr->ltid = CreateLoopedTask(sub_81CFEB8, 1); - ptr->callback = sub_81CFE84; - ptr->unkC = TRUE; + monMenu->ltid = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); + monMenu->callback = GetRibbonsMonCurrentLoopedTaskActive; + monMenu->fromSummary = TRUE; return TRUE; } -void sub_81CFE40(s32 idx) +void CreateRibbonsMonListLoopedTask(s32 idx) { - struct PokenavSub10 * ptr = GetSubstructPtr(10); - ptr->ltid = CreateLoopedTask(gUnknown_086237B8[idx], 1); - ptr->callback = sub_81CFE84; + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + monMenu->ltid = CreateLoopedTask(sRibbonsMonMenuLoopTaskFuncs[idx], 1); + monMenu->callback = GetRibbonsMonCurrentLoopedTaskActive; } -bool32 sub_81CFE70(void) +bool32 IsRibbonsMonListLoopedTaskActive(void) { - struct PokenavSub10 * ptr = GetSubstructPtr(10); - return ptr->callback(); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + return monMenu->callback(); } -bool32 sub_81CFE84(void) +bool32 GetRibbonsMonCurrentLoopedTaskActive(void) { - struct PokenavSub10 * ptr = GetSubstructPtr(10); + struct PokenavSub10 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); return IsLoopedTaskActive(ptr->ltid); } -void sub_81CFE98(void) +void FreeRibbonsMonList2(void) { - struct PokenavSub10 * ptr = GetSubstructPtr(10); + struct PokenavSub10 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); sub_81C8234(); RemoveWindow(ptr->winid); - FreePokenavSubstruct(10); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); } -static u32 sub_81CFEB8(s32 state) +static u32 LoopedTask_OpenRibbonsMonList(s32 state) { - struct PokenavSub10 * unk = GetSubstructPtr(10); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: - InitBgTemplates(gUnknown_086237B0, NELEMS(gUnknown_086237B0)); - DecompressAndCopyTileDataToVram(1, gUnknown_08623604, 0, 0, 0); - SetBgTilemapBuffer(1, unk->buff); - CopyToBgTilemapBuffer(1, gUnknown_086236CC, 0, 0); - CopyPaletteIntoBufferUnfaded(gUnknown_086235E4, 0x10, 0x20); + InitBgTemplates(sMonRibbonListBgTemplates, NELEMS(sMonRibbonListBgTemplates)); + DecompressAndCopyTileDataToVram(1, sMonRibbonListFrameTiles, 0, 0, 0); + SetBgTilemapBuffer(1, monMenu->buff); + CopyToBgTilemapBuffer(1, sMonRibbonListFrameTilemap, 0, 0); + CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, 0x10, 0x20); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - if (!sub_81CFB18()) + if (!UpdateMonListBgs()) return LT_PAUSE; ChangeBgX(1, 0, 0); ChangeBgY(1, 0, 0); @@ -433,12 +447,12 @@ static u32 sub_81CFEB8(s32 state) if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; CopyPaletteIntoBufferUnfaded(gUnknown_08623790, 0x20, 0x20); - sub_81D0304(); + InitMonRibbonPokenavListMenuTemplate(); return LT_INC_AND_PAUSE; case 3: if (sub_81C8224()) return LT_PAUSE; - sub_81D024C(unk); + AddRibbonsMonListWindow(monMenu); return LT_INC_AND_PAUSE; case 4: if (FreeTempTileDataBuffersIfPossible()) @@ -447,25 +461,25 @@ static u32 sub_81CFEB8(s32 state) HideBg(3); PrintHelpBarText(HELPBAR_RIBBONS_MON_LIST); PokenavFadeScreen(1); - if (!unk->unkC) + if (!monMenu->fromSummary) { - LoadLeftHeaderGfxForIndex(2); - sub_81C7FA0(2, 1, 0); + LoadLeftHeaderGfxForIndex(POKENAV_GFX_RIBBONS_MENU); + ShowLeftHeaderGfx(POKENAV_GFX_RIBBONS_MENU, 1, 0); } return LT_INC_AND_PAUSE; case 5: if (IsPaletteFadeActive()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; break; } return LT_FINISH; } -static u32 sub_81CFFFC(s32 state) +static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state) { - struct PokenavSub10 * unk = GetSubstructPtr(10); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: @@ -482,11 +496,11 @@ static u32 sub_81CFFFC(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(unk); + sub_81D0288(monMenu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -496,9 +510,9 @@ static u32 sub_81CFFFC(s32 state) return LT_FINISH; } -static u32 sub_81D0074(s32 state) +static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state) { - struct PokenavSub10 * unk = GetSubstructPtr(10); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: @@ -515,11 +529,11 @@ static u32 sub_81D0074(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(unk); + sub_81D0288(monMenu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -529,9 +543,9 @@ static u32 sub_81D0074(s32 state) return LT_FINISH; } -static u32 sub_81D00EC(s32 state) +static u32 LoopedTask_RibbonsListMovePageUp(s32 state) { - struct PokenavSub10 * unk = GetSubstructPtr(10); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: @@ -548,11 +562,11 @@ static u32 sub_81D00EC(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(unk); + sub_81D0288(monMenu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -562,9 +576,9 @@ static u32 sub_81D00EC(s32 state) return LT_FINISH; } -static u32 sub_81D0164(s32 state) +static u32 LoopedTask_RibbonsListMovePageDown(s32 state) { - struct PokenavSub10 * unk = GetSubstructPtr(10); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: @@ -581,11 +595,11 @@ static u32 sub_81D0164(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(unk); + sub_81D0288(monMenu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -595,27 +609,27 @@ static u32 sub_81D0164(s32 state) return LT_FINISH; } -static u32 sub_81D01DC(s32 state) +static u32 LoopedTask_RibbonsListReturnToMainMenu(s32 state) { switch (state) { case 0: PlaySE(SE_SELECT); PokenavFadeScreen(0); - sub_81C78A0(); + SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) return LT_PAUSE; if (MainMenuLoopedTaskIsBusy()) return LT_PAUSE; - sub_81C7FDC(); + SetLeftHeaderSpritesInvisibility(); break; } return LT_FINISH; } -static u32 sub_81D021C(s32 state) +static u32 LoopedTask_RibbonsListOpenSummary(s32 state) { switch (state) { @@ -631,23 +645,23 @@ static u32 sub_81D021C(s32 state) return LT_FINISH; } -static void sub_81D024C(struct PokenavSub10 * ptr) +static void AddRibbonsMonListWindow(struct PokenavSub10 *monMenu) { s32 r2; - ptr->winid = AddWindow(&gUnknown_086237D4); - PutWindowTilemap(ptr->winid); - r2 = sub_81CFB38(); - sub_81D02B0(ptr->winid, 0, r2); - CopyWindowToVram(ptr->winid, 1); - sub_81D0288(ptr); + monMenu->winid = AddWindow(&sRibbonsMonListWindowTemplate); + PutWindowTilemap(monMenu->winid); + r2 = GetRibbonsMonListCount(); + sub_81D02B0(monMenu->winid, 0, r2); + CopyWindowToVram(monMenu->winid, 1); + sub_81D0288(monMenu); } -static void sub_81D0288(struct PokenavSub10 * ptr) +static void sub_81D0288(struct PokenavSub10 *monMenu) { - s32 r4 = GetSelectedMatchCall(); - s32 r2 = sub_81CFB38(); - sub_81D02B0(ptr->winid, r4 + 1, r2); - CopyWindowToVram(ptr->winid, 2); + s32 r4 = GetSelectedPokenavListIndex(); + s32 r2 = GetRibbonsMonListCount(); + sub_81D02B0(monMenu->winid, r4 + 1, r2); + CopyWindowToVram(monMenu->winid, 2); } static void sub_81D02B0(s32 windowId, s32 val1, s32 val2) @@ -663,22 +677,22 @@ static void sub_81D02B0(s32 windowId, s32 val1, s32 val2) AddTextPrinterParameterized(windowId, 1, strbuf, x, 1, 0xFF, NULL); } -static void sub_81D0304(void) +static void InitMonRibbonPokenavListMenuTemplate(void) { struct PokenavListTemplate template; - template.list.monList = sub_81CFB28(); - template.unk4 = sub_81CFB38(); + template.list.monList = GetMonRibbonMonListData(); + template.count = GetRibbonsMonListCount(); template.unk8 = 4; - template.unk6 = sub_81CFB64(); - template.unk9 = 13; - template.unkA = 17; - template.unkB = 1; - template.unkC = 8; - template.unkD = 2; - template.unkE = 1; - template.listFunc.unk10_1 = BufferRibbonMonInfoText; + template.unk6 = GetRibbonListMenuCurrIndex(); + template.item_X = 13; + template.windowWidth = 17; + template.listTop = 1; + template.maxShowed = 8; + template.fillValue = 2; + template.fontId = 1; + template.listFunc.printMonFunc = BufferRibbonMonInfoText; template.unk14 = NULL; - sub_81C81D4(&gUnknown_086237B0[1], &template, 0); + sub_81C81D4(&sMonRibbonListBgTemplates[1], &template, 0); } // Buffers the "Nickname gender/level" text for the ribbon mon list diff --git a/src/pokenav_ribbons_2.c b/src/pokenav_ribbons_2.c index 6eabc9b335..f33d90e51f 100644 --- a/src/pokenav_ribbons_2.c +++ b/src/pokenav_ribbons_2.c @@ -13,28 +13,38 @@ #include "window.h" #include "constants/songs.h" +enum +{ + RIBBONS_SUMMARY_FUNC_NONE, + RIBBONS_SUMMARY_FUNC_MOVED_CURSOR, + RIBBONS_SUMMARY_FUNC_SELECT_RIBBON, + RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE, + RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL, + RIBBONS_SUMMARY_FUNC_EXIT, +}; + struct PokenavSub13 { u8 filler0[0x8]; - struct PokenavSub18 *field_8; + struct PokenavSub18 *monList; u16 field_C; u16 field_E; u16 field_10; u16 field_12; u32 field_14[25]; u32 field_78[8]; - u32 (*field_98)(struct PokenavSub13 *structPtr); + u32 (*callback)(struct PokenavSub13 *structPtr); }; struct PokenavSub14 { - u32 (*field_0)(void); + u32 (*callback)(void); u32 loopedTaskId; - u16 field_8; - u16 field_A; - u16 field_C; + u16 nameWindowId; + u16 ribbonCountWindowId; + u16 listIdxWindowId; u16 field_E; - u16 field_10; + u16 monSpriteId; struct Sprite *field_14; u32 filler; u8 tilemapBuffers[2][BG_SCREEN_SIZE]; @@ -43,48 +53,48 @@ struct PokenavSub14 static u32 gUnknown_030012C0; static u32 gUnknown_030012C4; -void sub_81D0E84(struct PokenavSub14 *structPtr); -void sub_81D0FF0(struct PokenavSub14 *structPtr); -void sub_81D10D0(struct PokenavSub14 *structPtr); +void PrintCurrentMonRibbonCount(struct PokenavSub14 *structPtr); +void PrintRibbbonsSummaryMonInfo(struct PokenavSub14 *structPtr); +void PrintRibbonsMonListIndex(struct PokenavSub14 *structPtr); void sub_81D1500(struct PokenavSub14 *structPtr); void sub_81D0EFC(struct PokenavSub14 *structPtr); -void sub_81D1148(struct PokenavSub14 *structPtr); -void sub_81D10A4(struct PokenavSub14 *structPtr); -void sub_81D1178(struct PokenavSub14 *structPtr); +void ResetSpritesAndDrawRibbonsMonFrontPic(struct PokenavSub14 *structPtr); +void AddRibbonListIndexWindow(struct PokenavSub14 *structPtr); +void DestroyRibbonsMonFrontPic(struct PokenavSub14 *structPtr); void sub_81D11D8(struct PokenavSub14 *structPtr); void sub_81D11FC(struct PokenavSub14 *structPtr); -void sub_81D0E60(struct PokenavSub14 *structPtr); +void AddRibbonCountWindow(struct PokenavSub14 *structPtr); void sub_81D1448(struct PokenavSub14 *structPtr); void sub_81D13FC(struct PokenavSub14 *structPtr); -void sub_81D0FCC(struct PokenavSub14 *structPtr); +void AddRibbonSummaryMonNameWindow(struct PokenavSub14 *structPtr); void sub_81D12D8(struct PokenavSub14 *structPtr); bool32 sub_81D1524(struct PokenavSub14 *structPtr); bool32 sub_81D1234(struct PokenavSub14 *structPtr); void sub_81D0814(struct PokenavSub13 *structPtr); -u32 sub_81D0548(struct PokenavSub13 *structPtr); -u32 sub_81D04C4(struct PokenavSub13 *structPtr); -u32 sub_81D05D4(struct PokenavSub13 *structPtr); +u32 HandleExpandedRibbonInput(struct PokenavSub13 *structPtr); +u32 RibbonsSummaryHandleInput(struct PokenavSub13 *structPtr); +u32 ReturnToRibbonsListFromSummary(struct PokenavSub13 *structPtr); bool32 sub_81D05DC(struct PokenavSub13 *structPtr); bool32 sub_81D0688(struct PokenavSub13 *structPtr); bool32 sub_81D0664(struct PokenavSub13 *structPtr); bool32 sub_81D061C(struct PokenavSub13 *structPtr); bool32 sub_81D0688(struct PokenavSub13 *structPtr); -bool32 sub_81D0A58(void); -u32 sub_81D06C4(void); -u32 sub_81D06D4(void); -u16 sub_81D1184(s32 unused0, s32 unused1); +bool32 GetCurrentLoopedTaskActive(void); +u32 GetRibbonsSummaryCurrentIndex(void); +u32 GetRibbonsSummaryMonListCount(void); +u16 DrawRibbonsMonFrontPic(s32 unused0, s32 unused1); void sub_81D1258(struct Sprite *sprite, s32 arg1, s32 arg2, s32 arg3); void sub_81D1284(struct Sprite *sprite); void sub_81D1350(void); void sub_81D13BC(u16 *dst, u32 id); void sub_81D1370(u32 arg0, u32 id); void sub_81D1538(struct Sprite *sprite); -u32 sub_81D0A6C(s32 state); -u32 sub_81D0C84(s32 state); -u32 sub_81D0D2C(s32 state); -u32 sub_81D0D8C(s32 state); -u32 sub_81D0E00(s32 state); -u32 sub_81D0C54(s32 state); +u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state); +u32 LoopedTask_UpdateRibbonsSummaryInfo(s32 state); +u32 LoopedTask_ExpandSelectedRibbon(s32 state); +u32 LoopedTask_MoveRibbonsCursorExpanded(s32 state); +u32 LoopedTask_ShrinkExpandedRibbon(s32 state); +u32 LoopedTask_ExitRibbonsSummaryMenu(s32 state); struct { @@ -147,95 +157,95 @@ static const struct BgTemplate gUnknown_08624B98[] = } }; -static const LoopedTask gUnknown_08624BA0[] = +static const LoopedTask sRibbonsSummaryMenuLoopTaskFuncs[] = { - NULL, - sub_81D0C84, - sub_81D0D2C, - sub_81D0D8C, - sub_81D0E00, - sub_81D0C54 + [RIBBONS_SUMMARY_FUNC_NONE] = NULL, + [RIBBONS_SUMMARY_FUNC_MOVED_CURSOR] = LoopedTask_UpdateRibbonsSummaryInfo, + [RIBBONS_SUMMARY_FUNC_SELECT_RIBBON] = LoopedTask_ExpandSelectedRibbon, + [RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE] = LoopedTask_MoveRibbonsCursorExpanded, + [RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL] = LoopedTask_ShrinkExpandedRibbon, + [RIBBONS_SUMMARY_FUNC_EXIT] = LoopedTask_ExitRibbonsSummaryMenu }; // code -bool32 PokenavCallback_Init_13(void) +bool32 PokenavCallback_Init_RibbonsSummaryMenu(void) { - struct PokenavSub13 *structPtr = AllocSubstruct(13, sizeof(struct PokenavSub13)); + struct PokenavSub13 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, sizeof(struct PokenavSub13)); if (structPtr == NULL) return FALSE; - structPtr->field_8 = GetSubstructPtr(18); - if (structPtr->field_8 == NULL) + structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + if (structPtr->monList == NULL) return FALSE; sub_81D0814(structPtr); - structPtr->field_98 = sub_81D04C4; + structPtr->callback = RibbonsSummaryHandleInput; gKeyRepeatContinueDelay = 3; gKeyRepeatStartDelay = 10; return TRUE; } -u32 sub_81D04A0(void) +u32 GetRibbonsSummaryMenuCallback(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - return structPtr->field_98(structPtr); + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return structPtr->callback(structPtr); } -void sub_81D04B8(void) +void FreeRibbonsSummaryScreen1(void) { - FreePokenavSubstruct(13); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); } -u32 sub_81D04C4(struct PokenavSub13 *structPtr) +u32 RibbonsSummaryHandleInput(struct PokenavSub13 *structPtr) { - if (JOY_REPEAT(DPAD_UP) && structPtr->field_8->unk2 != 0) + if (JOY_REPEAT(DPAD_UP) && structPtr->monList->currIndex != 0) { - structPtr->field_8->unk2--; + structPtr->monList->currIndex--; structPtr->field_C = 0; sub_81D0814(structPtr); - return 1; + return RIBBONS_SUMMARY_FUNC_MOVED_CURSOR; } - if (JOY_REPEAT(DPAD_DOWN) && structPtr->field_8->unk2 < structPtr->field_8->unk0 - 1) + if (JOY_REPEAT(DPAD_DOWN) && structPtr->monList->currIndex < structPtr->monList->listCount - 1) { - structPtr->field_8->unk2++; + structPtr->monList->currIndex++; structPtr->field_C = 0; sub_81D0814(structPtr); - return 1; + return RIBBONS_SUMMARY_FUNC_MOVED_CURSOR; } if (JOY_NEW(A_BUTTON)) { - structPtr->field_98 = sub_81D0548; - return 2; + structPtr->callback = HandleExpandedRibbonInput; + return RIBBONS_SUMMARY_FUNC_SELECT_RIBBON; } if (JOY_NEW(B_BUTTON)) { - structPtr->field_98 = sub_81D05D4; - return 5; + structPtr->callback = ReturnToRibbonsListFromSummary; + return RIBBONS_SUMMARY_FUNC_EXIT; } - return 0; + return RIBBONS_SUMMARY_FUNC_NONE; } -u32 sub_81D0548(struct PokenavSub13 *structPtr) +u32 HandleExpandedRibbonInput(struct PokenavSub13 *structPtr) { if (JOY_REPEAT(DPAD_UP) && sub_81D05DC(structPtr)) - return 3; + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; if (JOY_REPEAT(DPAD_DOWN) && sub_81D061C(structPtr)) - return 3; + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; if (JOY_REPEAT(DPAD_LEFT) && sub_81D0664(structPtr)) - return 3; + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; if (JOY_REPEAT(DPAD_RIGHT) && sub_81D0688(structPtr)) - return 3; + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; if (JOY_NEW(B_BUTTON)) { - structPtr->field_98 = sub_81D04C4; - return 4; + structPtr->callback = RibbonsSummaryHandleInput; + return RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL; } - return 0; + return RIBBONS_SUMMARY_FUNC_NONE; } -u32 sub_81D05D4(struct PokenavSub13 *structPtr) +u32 ReturnToRibbonsListFromSummary(struct PokenavSub13 *structPtr) { - return POKENAV_MENU_E; + return POKENAV_RIBBONS_RETURN_TO_MON_LIST; } bool32 sub_81D05DC(struct PokenavSub13 *structPtr) @@ -320,23 +330,23 @@ bool32 sub_81D0688(struct PokenavSub13 *structPtr) return FALSE; } -u32 sub_81D06C4(void) +u32 GetRibbonsSummaryCurrentIndex(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - return structPtr->field_8->unk2; + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return structPtr->monList->currIndex; } -u32 sub_81D06D4(void) +u32 GetRibbonsSummaryMonListCount(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - return structPtr->field_8->unk0; + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return structPtr->monList->listCount; } static void GetCurrMonInfo1(u8 *nick, u8 *level, u8 *gender) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - struct PokenavSub18 *mons = structPtr->field_8; - struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavSub18 *mons = structPtr->monList; + struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) { @@ -357,9 +367,9 @@ static void GetCurrMonInfo1(u8 *nick, u8 *level, u8 *gender) static void GetCurrMonInfo2(u16 *species, u32 *personality, u32 *otId) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - struct PokenavSub18 *mons = structPtr->field_8; - struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavSub18 *mons = structPtr->monList; + struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) { @@ -379,9 +389,9 @@ static void GetCurrMonInfo2(u16 *species, u32 *personality, u32 *otId) static u32 GetCurrMonRibbonCount(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - struct PokenavSub18 *mons = structPtr->field_8; - struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavSub18 *mons = structPtr->monList; + struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) return GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBON_COUNT); @@ -393,8 +403,8 @@ void sub_81D0814(struct PokenavSub13 *structPtr) { u32 ribbons; s32 i, j; - struct PokenavSub18 *mons = structPtr->field_8; - struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + struct PokenavSub18 *mons = structPtr->monList; + struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) ribbons = GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBONS); @@ -433,27 +443,27 @@ void sub_81D0814(struct PokenavSub13 *structPtr) u32 *sub_81D0914(u32 *arg0) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); *arg0 = structPtr->field_10; return structPtr->field_14; } u32 *sub_81D092C(u32 *arg0) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); *arg0 = structPtr->field_12; return structPtr->field_78; } u16 sub_81D0944(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); return structPtr->field_C; } u32 sub_81D0954(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); int var = structPtr->field_C; if (var <= 24) return structPtr->field_14[var]; @@ -461,38 +471,38 @@ u32 sub_81D0954(void) return structPtr->field_78[var - 27]; } -bool32 sub_81D0978(void) +bool32 OpenRibbonsSummaryMenu(void) { - struct PokenavSub14 *structPtr = AllocSubstruct(14, sizeof(struct PokenavSub14)); + struct PokenavSub14 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, sizeof(struct PokenavSub14)); if (structPtr == NULL) return FALSE; - structPtr->loopedTaskId = CreateLoopedTask(sub_81D0A6C, 1); - structPtr->field_0 = sub_81D0A58; + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_OpenRibbonsSummaryMenu, 1); + structPtr->callback = GetCurrentLoopedTaskActive; return TRUE; } -void sub_81D09B0(s32 id) +void CreateRibbonsSummaryLoopedTask(s32 id) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); - structPtr->loopedTaskId = CreateLoopedTask(gUnknown_08624BA0[id], 1); - structPtr->field_0 = sub_81D0A58; + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + structPtr->loopedTaskId = CreateLoopedTask(sRibbonsSummaryMenuLoopTaskFuncs[id], 1); + structPtr->callback = GetCurrentLoopedTaskActive; } -u32 sub_81D09E0(void) +u32 IsRibbonsSummaryLoopedTaskActive(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); - return structPtr->field_0(); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + return structPtr->callback(); } -void sub_81D09F4(void) +void FreeRibbonsSummaryScreen2(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); - RemoveWindow(structPtr->field_A); - RemoveWindow(structPtr->field_8); - RemoveWindow(structPtr->field_C); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + RemoveWindow(structPtr->ribbonCountWindowId); + RemoveWindow(structPtr->nameWindowId); + RemoveWindow(structPtr->listIdxWindowId); RemoveWindow(structPtr->field_E); - sub_81D1178(structPtr); + DestroyRibbonsMonFrontPic(structPtr); FreeSpriteTilesByTag(9); FreeSpritePaletteByTag(0xF); FreeSpritePaletteByTag(0x10); @@ -501,18 +511,18 @@ void sub_81D09F4(void) FreeSpritePaletteByTag(0x13); FreeSpriteOamMatrix(structPtr->field_14); DestroySprite(structPtr->field_14); - FreePokenavSubstruct(14); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); } -bool32 sub_81D0A58(void) +bool32 GetCurrentLoopedTaskActive(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); return IsLoopedTaskActive(structPtr->loopedTaskId); } -u32 sub_81D0A6C(s32 state) +u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: @@ -539,21 +549,21 @@ u32 sub_81D0A6C(s32 state) case 2: if (!FreeTempTileDataBuffersIfPossible()) { - sub_81D0E60(structPtr); + AddRibbonCountWindow(structPtr); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 3: if (!FreeTempTileDataBuffersIfPossible()) { - sub_81D0FCC(structPtr); + AddRibbonSummaryMonNameWindow(structPtr); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 4: if (!FreeTempTileDataBuffersIfPossible()) { - sub_81D10A4(structPtr); + AddRibbonListIndexWindow(structPtr); return LT_INC_AND_PAUSE; } return LT_PAUSE; @@ -567,7 +577,7 @@ u32 sub_81D0A6C(s32 state) case 6: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_81D1148(structPtr); + ResetSpritesAndDrawRibbonsMonFrontPic(structPtr); return LT_INC_AND_CONTINUE; } return LT_PAUSE; @@ -598,7 +608,7 @@ u32 sub_81D0A6C(s32 state) return LT_FINISH; } -u32 sub_81D0C54(s32 state) +u32 LoopedTask_ExitRibbonsSummaryMenu(s32 state) { switch (state) { @@ -614,9 +624,9 @@ u32 sub_81D0C54(s32 state) return LT_FINISH; } -u32 sub_81D0C84(s32 state) +u32 LoopedTask_UpdateRibbonsSummaryInfo(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: @@ -626,7 +636,7 @@ u32 sub_81D0C84(s32 state) case 1: if (!sub_81D1234(structPtr)) { - sub_81D0FF0(structPtr); + PrintRibbbonsSummaryMonInfo(structPtr); return LT_INC_AND_CONTINUE; } return LT_PAUSE; @@ -634,10 +644,10 @@ u32 sub_81D0C84(s32 state) sub_81D12D8(structPtr); return LT_INC_AND_CONTINUE; case 3: - sub_81D10D0(structPtr); + PrintRibbonsMonListIndex(structPtr); return LT_INC_AND_CONTINUE; case 4: - sub_81D0E84(structPtr); + PrintCurrentMonRibbonCount(structPtr); return LT_INC_AND_CONTINUE; case 5: if (!IsDma3ManagerBusyWithBgCopy()) @@ -654,9 +664,9 @@ u32 sub_81D0C84(s32 state) return LT_FINISH; } -u32 sub_81D0D2C(s32 state) +u32 LoopedTask_ExpandSelectedRibbon(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: @@ -678,9 +688,9 @@ u32 sub_81D0D2C(s32 state) return LT_FINISH; } -u32 sub_81D0D8C(s32 state) +u32 LoopedTask_MoveRibbonsCursorExpanded(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: @@ -708,9 +718,9 @@ u32 sub_81D0D8C(s32 state) return LT_FINISH; } -u32 sub_81D0E00(s32 state) +u32 LoopedTask_ShrinkExpandedRibbon(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: @@ -720,7 +730,7 @@ u32 sub_81D0E00(s32 state) case 1: if (!sub_81D1524(structPtr)) { - sub_81D0E84(structPtr); + PrintCurrentMonRibbonCount(structPtr); PrintHelpBarText(HELPBAR_RIBBONS_LIST); return LT_INC_AND_PAUSE; } @@ -732,7 +742,7 @@ u32 sub_81D0E00(s32 state) return LT_FINISH; } -static const struct WindowTemplate gUnknown_08624BB8 = +static const struct WindowTemplate sRibbonCountWindowTemplate = { .bg = 2, .tilemapLeft = 12, @@ -743,14 +753,14 @@ static const struct WindowTemplate gUnknown_08624BB8 = .baseBlock = 0x14, }; -void sub_81D0E60(struct PokenavSub14 *structPtr) +void AddRibbonCountWindow(struct PokenavSub14 *structPtr) { - structPtr->field_A = AddWindow(&gUnknown_08624BB8); - PutWindowTilemap(structPtr->field_A); - sub_81D0E84(structPtr); + structPtr->ribbonCountWindowId = AddWindow(&sRibbonCountWindowTemplate); + PutWindowTilemap(structPtr->ribbonCountWindowId); + PrintCurrentMonRibbonCount(structPtr); } -void sub_81D0E84(struct PokenavSub14 *structPtr) +void PrintCurrentMonRibbonCount(struct PokenavSub14 *structPtr) { u8 color[] = {TEXT_COLOR_RED, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY}; @@ -758,9 +768,9 @@ void sub_81D0E84(struct PokenavSub14 *structPtr) DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_RibbonsF700); - FillWindowPixelBuffer(structPtr->field_A, PIXEL_FILL(4)); - AddTextPrinterParameterized3(structPtr->field_A, 1, 0, 1, color, -1, gStringVar4); - CopyWindowToVram(structPtr->field_A, 2); + FillWindowPixelBuffer(structPtr->ribbonCountWindowId, PIXEL_FILL(4)); + AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, 1, 0, 1, color, -1, gStringVar4); + CopyWindowToVram(structPtr->ribbonCountWindowId, 2); } void sub_81D0EFC(struct PokenavSub14 *structPtr) @@ -769,11 +779,11 @@ void sub_81D0EFC(struct PokenavSub14 *structPtr) u32 ribbonId = sub_81D0954(); u8 color[] = {TEXT_COLOR_RED, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY}; - FillWindowPixelBuffer(structPtr->field_A, PIXEL_FILL(4)); + FillWindowPixelBuffer(structPtr->ribbonCountWindowId, PIXEL_FILL(4)); if (ribbonId < 25) { for (i = 0; i < 2; i++) - AddTextPrinterParameterized3(structPtr->field_A, 1, 0, (i * 16) + 1, color, -1, gRibbonDescriptionPointers[ribbonId][i]); + AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, 1, 0, (i * 16) + 1, color, -1, gRibbonDescriptionPointers[ribbonId][i]); } else { @@ -783,13 +793,13 @@ void sub_81D0EFC(struct PokenavSub14 *structPtr) ribbonId--; for (i = 0; i < 2; i++) - AddTextPrinterParameterized3(structPtr->field_A, 1, 0, (i * 16) + 1, color, -1, gGiftRibbonDescriptionPointers[ribbonId][i]); + AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, 1, 0, (i * 16) + 1, color, -1, gGiftRibbonDescriptionPointers[ribbonId][i]); } - CopyWindowToVram(structPtr->field_A, 2); + CopyWindowToVram(structPtr->ribbonCountWindowId, 2); } -static const struct WindowTemplate gUnknown_08624BC4 = +static const struct WindowTemplate sRibbonSummaryMonNameWindowTemplate = { .bg = 2, .tilemapLeft = 14, @@ -800,23 +810,23 @@ static const struct WindowTemplate gUnknown_08624BC4 = .baseBlock = 0x54, }; -void sub_81D0FCC(struct PokenavSub14 *structPtr) +void AddRibbonSummaryMonNameWindow(struct PokenavSub14 *structPtr) { - structPtr->field_8 = AddWindow(&gUnknown_08624BC4); - PutWindowTilemap(structPtr->field_8); - sub_81D0FF0(structPtr); + structPtr->nameWindowId = AddWindow(&sRibbonSummaryMonNameWindowTemplate); + PutWindowTilemap(structPtr->nameWindowId); + PrintRibbbonsSummaryMonInfo(structPtr); } static const u8 sMaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); static const u8 sFemaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); static const u8 sGenderlessIconString[] = _("{UNK_SPACER}"); -void sub_81D0FF0(struct PokenavSub14 *structPtr) +void PrintRibbbonsSummaryMonInfo(struct PokenavSub14 *structPtr) { const u8 *genderTxt; u8 *txtPtr; u8 level, gender; - u16 windowId = structPtr->field_8; + u16 windowId = structPtr->nameWindowId; FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); GetCurrMonInfo1(gStringVar3, &level, &gender); @@ -843,7 +853,7 @@ void sub_81D0FF0(struct PokenavSub14 *structPtr) CopyWindowToVram(windowId, 2); } -static const struct WindowTemplate gUnknown_08624BE8[] = +static const struct WindowTemplate sRibbonMonListIndexWindowTemplate[] = { { .bg = 2, @@ -857,46 +867,46 @@ static const struct WindowTemplate gUnknown_08624BE8[] = {}, }; -void sub_81D10A4(struct PokenavSub14 *structPtr) +void AddRibbonListIndexWindow(struct PokenavSub14 *structPtr) { - structPtr->field_C = AddWindow(gUnknown_08624BE8); - FillWindowPixelBuffer(structPtr->field_C, PIXEL_FILL(1)); - PutWindowTilemap(structPtr->field_C); - sub_81D10D0(structPtr); + structPtr->listIdxWindowId = AddWindow(sRibbonMonListIndexWindowTemplate); + FillWindowPixelBuffer(structPtr->listIdxWindowId, PIXEL_FILL(1)); + PutWindowTilemap(structPtr->listIdxWindowId); + PrintRibbonsMonListIndex(structPtr); } -void sub_81D10D0(struct PokenavSub14 *structPtr) +void PrintRibbonsMonListIndex(struct PokenavSub14 *structPtr) { s32 x; u8 *txtPtr; - u32 id = sub_81D06C4() + 1; - u32 count = sub_81D06D4(); + u32 id = GetRibbonsSummaryCurrentIndex() + 1; + u32 count = GetRibbonsSummaryMonListCount(); txtPtr = ConvertIntToDecimalStringN(gStringVar1, id, STR_CONV_MODE_RIGHT_ALIGN, 3); *(txtPtr++) = CHAR_SLASH; ConvertIntToDecimalStringN(txtPtr, count, STR_CONV_MODE_RIGHT_ALIGN, 3); x = GetStringCenterAlignXOffset(1, gStringVar1, 56); - AddTextPrinterParameterized(structPtr->field_C, 1, gStringVar1, x, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(structPtr->field_C, 2); + AddTextPrinterParameterized(structPtr->listIdxWindowId, 1, gStringVar1, x, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(structPtr->listIdxWindowId, 2); } -void sub_81D1148(struct PokenavSub14 *structPtr) +void ResetSpritesAndDrawRibbonsMonFrontPic(struct PokenavSub14 *structPtr) { u16 species; u32 personality, otId; GetCurrMonInfo2(&species, &personality, &otId); ResetAllPicSprites(); - structPtr->field_10 = sub_81D1184(40, 104); - sub_81C7990(15, 0); + structPtr->monSpriteId = DrawRibbonsMonFrontPic(40, 104); + PokenavFillPalette(15, 0); } -void sub_81D1178(struct PokenavSub14 *structPtr) +void DestroyRibbonsMonFrontPic(struct PokenavSub14 *structPtr) { - FreeAndDestroyMonPicSprite(structPtr->field_10); + FreeAndDestroyMonPicSprite(structPtr->monSpriteId); } -u16 sub_81D1184(s32 unused0, s32 unused1) +u16 DrawRibbonsMonFrontPic(s32 unused0, s32 unused1) { u16 species, spriteId; u32 personality, otId; @@ -909,19 +919,19 @@ u16 sub_81D1184(s32 unused0, s32 unused1) void sub_81D11D8(struct PokenavSub14 *structPtr) { - sub_81D1258(&gSprites[structPtr->field_10], 40, -32, 6); + sub_81D1258(&gSprites[structPtr->monSpriteId], 40, -32, 6); } void sub_81D11FC(struct PokenavSub14 *structPtr) { - FreeAndDestroyMonPicSprite(structPtr->field_10); - structPtr->field_10 = sub_81D1184(-32, 104); - sub_81D1258(&gSprites[structPtr->field_10], -32, 40, 6); + FreeAndDestroyMonPicSprite(structPtr->monSpriteId); + structPtr->monSpriteId = DrawRibbonsMonFrontPic(-32, 104); + sub_81D1258(&gSprites[structPtr->monSpriteId], -32, 40, 6); } bool32 sub_81D1234(struct PokenavSub14 *structPtr) { - return (gSprites[structPtr->field_10].callback != SpriteCallbackDummy); + return (gSprites[structPtr->monSpriteId].callback != SpriteCallbackDummy); } void sub_81D1258(struct Sprite *sprite, s32 arg1, s32 arg2, s32 arg3) diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index ebb237d544..1af157b907 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -486,7 +486,7 @@ static void LoadUsePokeblockMenu(void) { case 0: sMenu->curMonSpriteId = 0xFF; - sub_81D1ED4(&sMenu->graph); + InitConditionGraphData(&sMenu->graph); sInfo->mainState++; break; case 1: @@ -536,12 +536,12 @@ static void LoadUsePokeblockMenu(void) sInfo->mainState++; break; case 11: - sub_81D2754(sMenu->graph.unk0[0], sMenu->graph.unk14[0]); - sub_81D20AC(&sMenu->graph); + sub_81D2754(sMenu->graph.stat[0], sMenu->graph.unk14[0]); + InitConditionGraphState(&sMenu->graph); sInfo->mainState++; break; case 12: - if (!sub_81D20BC(&sMenu->graph)) + if (!SetupConditionGraphScanlineParams(&sMenu->graph)) { sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[0], sMenu->graph.unk14[0]); sInfo->mainState++; @@ -1368,7 +1368,7 @@ static bool8 LoadUsePokeblockMenuGfx(void) LoadBgTilemap(2, sMenu->tilemapBuffer, 1280, 0); LoadPalette(gConditionGraphData_Pal, 48, 32); LoadPalette(gConditionText_Pal, 240, 32); - sub_81D21DC(2); + SetConditionGraphIOWindows(2); break; default: sMenu->info.helperState = 0; From 52ebc4252e0752ab3b918d4637c4c2672f033610 Mon Sep 17 00:00:00 2001 From: kageru Date: Wed, 7 Oct 2020 23:03:46 +0200 Subject: [PATCH 036/177] Document gUnknown_03006298 --- common_syms/battle_tower.txt | 2 +- include/battle_tower.h | 4 +++- src/battle_factory.c | 12 ++++++------ src/battle_tent.c | 2 +- src/battle_tower.c | 34 +++++++++++++++++----------------- 5 files changed, 28 insertions(+), 26 deletions(-) diff --git a/common_syms/battle_tower.txt b/common_syms/battle_tower.txt index dd198e2292..7371109d51 100644 --- a/common_syms/battle_tower.txt +++ b/common_syms/battle_tower.txt @@ -1 +1 @@ -gUnknown_03006298 +gFrontierTempParty diff --git a/include/battle_tower.h b/include/battle_tower.h index 3bf2f004b1..30649719b4 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -43,7 +43,9 @@ extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; extern const struct FacilityMon gSlateportBattleTentMons[]; extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[]; -extern u16 gUnknown_03006298[]; +// Temporary storage for monIds of the opponent team +// during team generation in battle factory and similar facilities. +extern u16 gFrontierTempParty[]; extern const struct BattleFrontierTrainer *gFacilityTrainers; extern const struct FacilityMon *gFacilityTrainerMons; diff --git a/src/battle_factory.c b/src/battle_factory.c index 021081483e..a2b1d337ac 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -207,7 +207,7 @@ static void InitFactoryChallenge(void) for (i = 0; i < 6; i++) gSaveBlock2Ptr->frontier.rentalMons[i].monId = 0xFFFF; for (i = 0; i < FRONTIER_PARTY_SIZE; i++) - gUnknown_03006298[i] = 0xFFFF; + gFrontierTempParty[i] = 0xFFFF; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); gTrainerBattleOpponent_A = 0; @@ -355,7 +355,7 @@ static void GenerateOpponentMons(void) species[i] = gFacilityTrainerMons[monId].species; heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]; - gUnknown_03006298[i] = monId; + gFrontierTempParty[i] = monId; i++; } } @@ -376,11 +376,11 @@ static void SetRentalsToOpponentParty(void) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId = gUnknown_03006298[i]; + gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId = gFrontierTempParty[i]; gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL); gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality = GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY, NULL); gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityNum = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ABILITY_NUM, NULL); - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[gUnknown_03006298[i]].itemTableId]); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[gFrontierTempParty[i]].itemTableId]); } } @@ -595,7 +595,7 @@ static void GetOpponentMostCommonMonType(void) typesCount[i] = 0; for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - u32 species = gFacilityTrainerMons[gUnknown_03006298[i]].species; + u32 species = gFacilityTrainerMons[gFrontierTempParty[i]].species; typesCount[gBaseStats[species].type1]++; if (gBaseStats[species].type1 != gBaseStats[species].type2) @@ -631,7 +631,7 @@ static void GetOpponentBattleStyle(void) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - u16 monId = gUnknown_03006298[i]; + u16 monId = gFrontierTempParty[i]; for (j = 0; j < MAX_MON_MOVES; j++) { u8 battleStyle = GetMoveBattleStyle(gFacilityTrainerMons[monId].moves[j]); diff --git a/src/battle_tent.c b/src/battle_tent.c index ba0c14dff0..de0ecea983 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -420,7 +420,7 @@ static void GenerateOpponentMons(void) species[i] = gFacilityTrainerMons[sRandMonSetId].species; heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonSetId].itemTableId]; - gUnknown_03006298[i] = sRandMonSetId; + gFrontierTempParty[i] = sRandMonSetId; i++; } } diff --git a/src/battle_tower.c b/src/battle_tower.c index 9852a0eac1..046362105a 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -46,7 +46,7 @@ EWRAM_DATA const struct BattleFrontierTrainer *gFacilityTrainers = NULL; EWRAM_DATA const struct FacilityMon *gFacilityTrainerMons = NULL; // IWRAM common -u16 gUnknown_03006298[MAX_FRONTIER_PARTY_SIZE]; +u16 gFrontierTempParty[MAX_FRONTIER_PARTY_SIZE]; // This file's functions. static void InitTowerChallenge(void); @@ -1856,7 +1856,7 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) otID = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - u16 monId = gUnknown_03006298[i]; + u16 monId = gFrontierTempParty[i]; CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monId].species, level, @@ -1884,7 +1884,7 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - u16 monId = gUnknown_03006298[i]; + u16 monId = gFrontierTempParty[i]; CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monId].species, level, @@ -2224,11 +2224,11 @@ static void GetApprenticeMultiPartnerParty(u16 trainerId) } } - gUnknown_03006298[0] = validSpecies[Random() % count]; + gFrontierTempParty[0] = validSpecies[Random() % count]; do { - gUnknown_03006298[1] = validSpecies[Random() % count]; - } while (gUnknown_03006298[0] == gUnknown_03006298[1]); + gFrontierTempParty[1] = validSpecies[Random() % count]; + } while (gFrontierTempParty[0] == gFrontierTempParty[1]); } static void GetRecordMixFriendMultiPartnerParty(u16 trainerId) @@ -2252,11 +2252,11 @@ static void GetRecordMixFriendMultiPartnerParty(u16 trainerId) } } - gUnknown_03006298[2] = validSpecies[Random() % count]; + gFrontierTempParty[2] = validSpecies[Random() % count]; do { - gUnknown_03006298[3] = validSpecies[Random() % count]; - } while (gUnknown_03006298[2] == gUnknown_03006298[3]); + gFrontierTempParty[3] = validSpecies[Random() % count]; + } while (gFrontierTempParty[2] == gFrontierTempParty[3]); } static void LoadMultiPartnerCandidatesData(void) @@ -2420,15 +2420,15 @@ static void sub_81646BC(u16 trainerId, u16 monId) } else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) { - move = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gUnknown_03006298[gSpecialVar_0x8005 + 1]].moves[0]; - species = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gUnknown_03006298[gSpecialVar_0x8005 + 1]].species; + move = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gFrontierTempParty[gSpecialVar_0x8005 + 1]].moves[0]; + species = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gFrontierTempParty[gSpecialVar_0x8005 + 1]].species; } else { s32 i; - move = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gUnknown_03006298[gSpecialVar_0x8005 - 1]].moves[0]; - species = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gUnknown_03006298[gSpecialVar_0x8005 - 1]].species; + move = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gFrontierTempParty[gSpecialVar_0x8005 - 1]].moves[0]; + species = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gFrontierTempParty[gSpecialVar_0x8005 - 1]].species; for (i = 0; i < PLAYER_NAME_LENGTH; i++) gStringVar3[i] = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].playerName[i]; gStringVar3[i] = EOS; @@ -2497,13 +2497,13 @@ static void ShowPartnerCandidateMessage(void) } else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) { - gSaveBlock2Ptr->frontier.trainerIds[18] = gUnknown_03006298[2]; - gSaveBlock2Ptr->frontier.trainerIds[19] = gUnknown_03006298[3]; + gSaveBlock2Ptr->frontier.trainerIds[18] = gFrontierTempParty[2]; + gSaveBlock2Ptr->frontier.trainerIds[19] = gFrontierTempParty[3]; } else { - gSaveBlock2Ptr->frontier.trainerIds[18] = gUnknown_03006298[0]; - gSaveBlock2Ptr->frontier.trainerIds[19] = gUnknown_03006298[1]; + gSaveBlock2Ptr->frontier.trainerIds[18] = gFrontierTempParty[0]; + gSaveBlock2Ptr->frontier.trainerIds[19] = gFrontierTempParty[1]; } for (k = 0; k < 14; k++) { From f4909b4d964100b2e2dde75582ad647ef80fc6a8 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 11 Oct 2020 08:50:58 -0600 Subject: [PATCH 037/177] align pokenav task funcs and update some pokenav menu bg gfx files --- graphics/pokenav/{bg.bin => bg_dots.bin} | 0 graphics/pokenav/{bg.png => bg_dots.png} | Bin .../{outline.png => device_outline.png} | Bin ...outline_map.bin => device_outline_map.bin} | Bin include/pokenav.h | 2 +- src/pokenav.c | 2 +- src/pokenav_conditions_2.c | 14 ++++---- src/pokenav_conditions_3.c | 30 +++++++++--------- src/pokenav_match_call_2.c | 30 +++++++++--------- src/pokenav_menu_handler_2.c | 21 ++++++------ src/pokenav_ribbons_2.c | 10 +++--- 11 files changed, 55 insertions(+), 54 deletions(-) rename graphics/pokenav/{bg.bin => bg_dots.bin} (100%) rename graphics/pokenav/{bg.png => bg_dots.png} (100%) rename graphics/pokenav/{outline.png => device_outline.png} (100%) rename graphics/pokenav/{outline_map.bin => device_outline_map.bin} (100%) diff --git a/graphics/pokenav/bg.bin b/graphics/pokenav/bg_dots.bin similarity index 100% rename from graphics/pokenav/bg.bin rename to graphics/pokenav/bg_dots.bin diff --git a/graphics/pokenav/bg.png b/graphics/pokenav/bg_dots.png similarity index 100% rename from graphics/pokenav/bg.png rename to graphics/pokenav/bg_dots.png diff --git a/graphics/pokenav/outline.png b/graphics/pokenav/device_outline.png similarity index 100% rename from graphics/pokenav/outline.png rename to graphics/pokenav/device_outline.png diff --git a/graphics/pokenav/outline_map.bin b/graphics/pokenav/device_outline_map.bin similarity index 100% rename from graphics/pokenav/outline_map.bin rename to graphics/pokenav/device_outline_map.bin diff --git a/include/pokenav.h b/include/pokenav.h index 34692236d1..3fc01ede3d 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -122,7 +122,7 @@ enum POKENAV_REGION_MAP, POKENAV_CONDITION_PARTY, POKENAV_CONDITION_SEARCH_RESULTS, - POKENAV_MENU_CONDITION_GRAPH_FROM_SEARCH, // opening condition graph from search list + POKENAV_CONDITION_GRAPH_FROM_SEARCH, // opening condition graph from search list POKENAV_RETURN_CONDITION_SEARCH, //return to search list from condition graph POKENAV_MATCH_CALL, POKENAV_RIBBONS_MON_LIST, diff --git a/src/pokenav.c b/src/pokenav.c index 12a13509bc..9f9cf7dee0 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -142,7 +142,7 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = .free1 = FreeSearchResultSubstruct1, .free2 = FreeSearchResultSubstruct2, }, - [POKENAV_MENU_CONDITION_GRAPH_FROM_SEARCH - POKENAV_MENU_IDS_START] = + [POKENAV_CONDITION_GRAPH_FROM_SEARCH - POKENAV_MENU_IDS_START] = { .init = PokenavCallback_Init_ConditionGraphFromSearch, .callback = GetPartyConditionCallback, diff --git a/src/pokenav_conditions_2.c b/src/pokenav_conditions_2.c index dc845ecab1..c0e8c7d6db 100644 --- a/src/pokenav_conditions_2.c +++ b/src/pokenav_conditions_2.c @@ -107,12 +107,12 @@ const struct WindowTemplate sUnusedWindowTemplate2 = const LoopedTask sPartyConditionLoopedTaskFuncs[] = { - [PARTY_CONDITION_FUNC_NONE] = NULL, - [PARTY_CONDITION_FUNC_SLIDE_MON_IN] = LoopedTask_TransitionMons, - [PARTY_CONDITION_FUNC_RETURN] = LoopedTask_ExitPartyConditionMenu, - [PARTY_CONDITION_FUNC_NO_TRANSITION] = LoopedTask_MoveCursorNoTransition, - [PARTY_CONDITION_FUNC_SLIDE_MON_OUT] = LoopedTask_SlideMonOut, - [PARTY_CONDITION_FUNC_ADD_MARKINGS] = LoopedTask_OpenMonMarkingsWindow, + [PARTY_CONDITION_FUNC_NONE] = NULL, + [PARTY_CONDITION_FUNC_SLIDE_MON_IN] = LoopedTask_TransitionMons, + [PARTY_CONDITION_FUNC_RETURN] = LoopedTask_ExitPartyConditionMenu, + [PARTY_CONDITION_FUNC_NO_TRANSITION] = LoopedTask_MoveCursorNoTransition, + [PARTY_CONDITION_FUNC_SLIDE_MON_OUT] = LoopedTask_SlideMonOut, + [PARTY_CONDITION_FUNC_ADD_MARKINGS] = LoopedTask_OpenMonMarkingsWindow, [PARTY_CONDITION_FUNC_CLOSE_MARKINGS] = LoopedTask_CloseMonMarkingsWindow }; @@ -139,7 +139,7 @@ struct Pokenav7Struct u8 filler2[0x38ac - 0x2909]; }; -extern s8 GetMonMarkIndex(void); // This function's declaration here is different than its definition in pokenav_unk_6. u8/s8 +extern s8 GetMonMarkIndex(void); // This function's declaration here is s8 vs. u8 in pokenav_conditions_1.c u32 LoopedTask_OpenPartyConditionGraph(s32 state); u32 GetPartyConditionLoopedTaskActive(void); diff --git a/src/pokenav_conditions_3.c b/src/pokenav_conditions_3.c index c93544c522..196484df76 100644 --- a/src/pokenav_conditions_3.c +++ b/src/pokenav_conditions_3.c @@ -29,7 +29,7 @@ struct PokenavSub7 s32 boxId; s32 monId; u32 conditionDataId; - u32 unk18; + u32 returnFromGraph; u32 isPartyCondition; struct PokenavSub18 *monList; }; @@ -45,7 +45,7 @@ struct PokenavSub8 static u32 HandleConditionSearchInput_WaitSetup(struct PokenavSub7 *structPtr); static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr); -static u32 sub_81CF0B8(struct PokenavSub7 *structPtr); +static u32 OpenConditionGraphFromSearchList(struct PokenavSub7 *structPtr); static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr); static u32 GetConditionSearchLoopedTask(s32 state); static u32 BuildPartyMonSearchResults(s32 state); @@ -104,12 +104,12 @@ static const struct BgTemplate sConditionSearchResultBgTemplates[] = static const LoopedTask sSearchResultLoopTaskFuncs[] = { - [CONDITION_SEARCH_FUNC_NONE] = NULL, - [CONDITION_SEARCH_FUNC_MOVE_UP] = LoopedTask_MoveSearchListCursorUp, - [CONDITION_SEARCH_FUNC_MOVE_DOWN] = LoopedTask_MoveSearchListCursorDown, - [CONDITION_SEARCH_FUNC_PAGE_UP] = LoopedTask_MoveSearchListPageUp, - [CONDITION_SEARCH_FUNC_PAGE_DOWN] = LoopedTask_MoveSearchListPageDown, - [CONDITION_SEARCH_FUNC_EXIT] = LoopedTask_ExitConditionSearchMenu, + [CONDITION_SEARCH_FUNC_NONE] = NULL, + [CONDITION_SEARCH_FUNC_MOVE_UP] = LoopedTask_MoveSearchListCursorUp, + [CONDITION_SEARCH_FUNC_MOVE_DOWN] = LoopedTask_MoveSearchListCursorDown, + [CONDITION_SEARCH_FUNC_PAGE_UP] = LoopedTask_MoveSearchListPageUp, + [CONDITION_SEARCH_FUNC_PAGE_DOWN] = LoopedTask_MoveSearchListPageDown, + [CONDITION_SEARCH_FUNC_EXIT] = LoopedTask_ExitConditionSearchMenu, [CONDITION_SEARCH_FUNC_SELECT_MON] = LoopedTask_SelectSearchResult }; @@ -140,7 +140,7 @@ bool32 PokenavCallback_Init_ConditionSearch(void) structPtr->callback = HandleConditionSearchInput_WaitSetup; structPtr->loopedTaskId = CreateLoopedTask(GetConditionSearchLoopedTask, 1); - structPtr->unk18 = 0; + structPtr->returnFromGraph = 0; structPtr->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; return TRUE; } @@ -154,7 +154,7 @@ bool32 PokenavCallback_Init_ReturnToMonSearchList(void) structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); structPtr->callback = HandleConditionSearchInput; - structPtr->unk18 = 1; + structPtr->returnFromGraph = 1; structPtr->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; return TRUE; } @@ -200,7 +200,7 @@ static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr) { structPtr->monList->currIndex = GetSelectedPokenavListIndex(); structPtr->isPartyCondition = 1; - structPtr->callback = sub_81CF0B8; + structPtr->callback = OpenConditionGraphFromSearchList; return CONDITION_SEARCH_FUNC_SELECT_MON; } return CONDITION_SEARCH_FUNC_NONE; @@ -211,15 +211,15 @@ static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr) return POKENAV_CONDITION_SEARCH_MENU; } -static u32 sub_81CF0B8(struct PokenavSub7 *structPtr) +static u32 OpenConditionGraphFromSearchList(struct PokenavSub7 *structPtr) { - return POKENAV_MENU_CONDITION_GRAPH_FROM_SEARCH; + return POKENAV_CONDITION_GRAPH_FROM_SEARCH; } static u32 sub_81CF0C0(void) { struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - return structPtr->unk18; + return structPtr->returnFromGraph; } static struct PokenavMonList * GetSearchResultsMonDataList(void) @@ -339,7 +339,7 @@ static u32 sub_81CF278(s32 state) ptr->monList->monData[i].data = i + 1; } } - ptr->unk18 = 1; + ptr->returnFromGraph = 1; return LT_FINISH; } diff --git a/src/pokenav_match_call_2.c b/src/pokenav_match_call_2.c index 63426199cb..adcd889d37 100755 --- a/src/pokenav_match_call_2.c +++ b/src/pokenav_match_call_2.c @@ -152,22 +152,22 @@ const struct BgTemplate sMatchCallBgTemplates[3] = static const LoopedTask sMatchCallLoopTaskFuncs[] = { - [POKENAV_MC_FUNC_NONE] = NULL, - [POKENAV_MC_FUNC_DOWN] = MatchCallListCursorDown, - [POKENAV_MC_FUNC_UP] = MatchCallListCursorUp, - [POKENAV_MC_FUNC_PG_DOWN] = MatchCallListPageDown, - [POKENAV_MC_FUNC_PG_UP] = MatchCallListPageUp, - [POKENAV_MC_FUNC_SELECT] = SelectMatchCallEntry, + [POKENAV_MC_FUNC_NONE] = NULL, + [POKENAV_MC_FUNC_DOWN] = MatchCallListCursorDown, + [POKENAV_MC_FUNC_UP] = MatchCallListCursorUp, + [POKENAV_MC_FUNC_PG_DOWN] = MatchCallListPageDown, + [POKENAV_MC_FUNC_PG_UP] = MatchCallListPageUp, + [POKENAV_MC_FUNC_SELECT] = SelectMatchCallEntry, [POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR] = MoveMatchCallOptionsCursor, - [POKENAV_MC_FUNC_CANCEL] = CancelMatchCallSelection, - [POKENAV_MC_FUNC_CALL_MSG] = DoMatchCallMessage, - [POKENAV_MC_FUNC_NEARBY_MSG] = DoTrainerCloseByMessage, - [POKENAV_MC_FUNC_10] = sub_81CB888, - [POKENAV_MC_FUNC_SHOW_CHECK_PAGE] = ShowCheckPage, - [POKENAV_MC_FUNC_CHECK_PAGE_UP] = ShowCheckPageUp, - [POKENAV_MC_FUNC_CHECK_PAGE_DOWN] = ShowCheckPageDown, - [POKENAV_MC_FUNC_EXIT_CHECK_PAGE] = ExitCheckPage, - [POKENAV_MC_FUNC_EXIT] = ExitMatchCall + [POKENAV_MC_FUNC_CANCEL] = CancelMatchCallSelection, + [POKENAV_MC_FUNC_CALL_MSG] = DoMatchCallMessage, + [POKENAV_MC_FUNC_NEARBY_MSG] = DoTrainerCloseByMessage, + [POKENAV_MC_FUNC_10] = sub_81CB888, + [POKENAV_MC_FUNC_SHOW_CHECK_PAGE] = ShowCheckPage, + [POKENAV_MC_FUNC_CHECK_PAGE_UP] = ShowCheckPageUp, + [POKENAV_MC_FUNC_CHECK_PAGE_DOWN] = ShowCheckPageDown, + [POKENAV_MC_FUNC_EXIT_CHECK_PAGE] = ExitCheckPage, + [POKENAV_MC_FUNC_EXIT] = ExitMatchCall }; static const struct WindowTemplate sMatchCallLocationWindowTemplate = diff --git a/src/pokenav_menu_handler_2.c b/src/pokenav_menu_handler_2.c index 0e819ecacc..d37c897b52 100644 --- a/src/pokenav_menu_handler_2.c +++ b/src/pokenav_menu_handler_2.c @@ -81,14 +81,14 @@ static void InitMenuOptionGlow(void); static void Task_CurrentMenuOptionGlow(u8 taskId); static void SetMenuOptionGlow(void); -static const u16 sPokenavBgDotsPal[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); -static const u32 sPokenavBgDotsTiles[] = INCBIN_U32("graphics/pokenav/bg.4bpp.lz"); +static const u16 sPokenavBgDotsPal[] = INCBIN_U16("graphics/pokenav/bg_dots.gbapal"); +static const u32 sPokenavBgDotsTiles[] = INCBIN_U32("graphics/pokenav/bg_dots.4bpp.lz"); static const u32 sPokenavBgDotsTilemap[] = INCBIN_U32("graphics/pokenav/bg.bin.lz"); -static const u16 sPokenavDeviceBgPal[] = INCBIN_U16("graphics/pokenav/outline.gbapal"); -static const u32 sPokenavDeviceBgTiles[] = INCBIN_U32("graphics/pokenav/outline.4bpp.lz"); -static const u32 sPokenavDeviceBgTilemap[] = INCBIN_U32("graphics/pokenav/outline_map.bin.lz"); -static const u16 gUnknown_08620104[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); -static const u32 gUnknown_08620124[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); +static const u16 sPokenavDeviceBgPal[] = INCBIN_U16("graphics/pokenav/device_outline.gbapal"); +static const u32 sPokenavDeviceBgTiles[] = INCBIN_U32("graphics/pokenav/device_outline.4bpp.lz"); +static const u32 sPokenavDeviceBgTilemap[] = INCBIN_U32("graphics/pokenav/device_outline_map.bin.lz"); +static const u16 sMatchCallBlueLightPal[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); +static const u32 sMatchCallBlueLightTiles[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); static const struct BgTemplate sPokenavMainMenuBgTemplates[] = { { @@ -118,7 +118,8 @@ static const struct BgTemplate sPokenavMainMenuBgTemplates[] = { } }; -static const LoopedTask sMenuHandlerLoopTaskFuncs[] = { +static const LoopedTask sMenuHandlerLoopTaskFuncs[] = +{ [POKENAV_MENU_FUNC_NONE] = NULL, [POKENAV_MENU_FUNC_MOVE_CURSOR] = LoopedTask_MoveMenuCursor, [POKENAV_MENU_FUNC_OPEN_CONDITION] = LoopedTask_OpenConditionMenu, @@ -138,7 +139,7 @@ static const struct CompressedSpriteSheet sPokenavOptionsSpriteSheets[] = .tag = 0x0003 }, { - .data = gUnknown_08620124, + .data = sMatchCallBlueLightTiles, .size = 0x0100, .tag = 0x0001 } @@ -151,7 +152,7 @@ static const struct SpritePalette sPokenavOptionsSpritePalettes[] = {gPokenavOptions_Pal + 0x20, 6}, {gPokenavOptions_Pal + 0x30, 7}, {gPokenavOptions_Pal + 0x40, 8}, - {gUnknown_08620104, 3}, + {sMatchCallBlueLightPal, 3}, {} }; diff --git a/src/pokenav_ribbons_2.c b/src/pokenav_ribbons_2.c index f33d90e51f..203aa19e5e 100644 --- a/src/pokenav_ribbons_2.c +++ b/src/pokenav_ribbons_2.c @@ -159,12 +159,12 @@ static const struct BgTemplate gUnknown_08624B98[] = static const LoopedTask sRibbonsSummaryMenuLoopTaskFuncs[] = { - [RIBBONS_SUMMARY_FUNC_NONE] = NULL, - [RIBBONS_SUMMARY_FUNC_MOVED_CURSOR] = LoopedTask_UpdateRibbonsSummaryInfo, - [RIBBONS_SUMMARY_FUNC_SELECT_RIBBON] = LoopedTask_ExpandSelectedRibbon, + [RIBBONS_SUMMARY_FUNC_NONE] = NULL, + [RIBBONS_SUMMARY_FUNC_MOVED_CURSOR] = LoopedTask_UpdateRibbonsSummaryInfo, + [RIBBONS_SUMMARY_FUNC_SELECT_RIBBON] = LoopedTask_ExpandSelectedRibbon, [RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE] = LoopedTask_MoveRibbonsCursorExpanded, - [RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL] = LoopedTask_ShrinkExpandedRibbon, - [RIBBONS_SUMMARY_FUNC_EXIT] = LoopedTask_ExitRibbonsSummaryMenu + [RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL] = LoopedTask_ShrinkExpandedRibbon, + [RIBBONS_SUMMARY_FUNC_EXIT] = LoopedTask_ExitRibbonsSummaryMenu }; // code From 280c68b531dd6dfa4c4a539dbb6602580a36c16a Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 11 Oct 2020 09:11:12 -0600 Subject: [PATCH 038/177] renamed pokenav graphics file fixes --- graphics_file_rules.mk | 2 +- src/pokenav_menu_handler_2.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 630aaa3fc1..f9ea405321 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -709,7 +709,7 @@ $(PKNAVOPTIONSGFXDIR)/options.4bpp: $(PKNAVOPTIONSGFXDIR)/hoenn_map.4bpp \ $(PKNAVGFXDIR)/header.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 53 -$(PKNAVGFXDIR)/outline.4bpp: %.4bpp: %.png +$(PKNAVGFXDIR)/device_outline.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 53 $(PKNAVGFXDIR)/ui_matchcall.4bpp: %.4bpp: %.png diff --git a/src/pokenav_menu_handler_2.c b/src/pokenav_menu_handler_2.c index d37c897b52..3fcd41dc9e 100644 --- a/src/pokenav_menu_handler_2.c +++ b/src/pokenav_menu_handler_2.c @@ -83,7 +83,7 @@ static void SetMenuOptionGlow(void); static const u16 sPokenavBgDotsPal[] = INCBIN_U16("graphics/pokenav/bg_dots.gbapal"); static const u32 sPokenavBgDotsTiles[] = INCBIN_U32("graphics/pokenav/bg_dots.4bpp.lz"); -static const u32 sPokenavBgDotsTilemap[] = INCBIN_U32("graphics/pokenav/bg.bin.lz"); +static const u32 sPokenavBgDotsTilemap[] = INCBIN_U32("graphics/pokenav/bg_dots.bin.lz"); static const u16 sPokenavDeviceBgPal[] = INCBIN_U16("graphics/pokenav/device_outline.gbapal"); static const u32 sPokenavDeviceBgTiles[] = INCBIN_U32("graphics/pokenav/device_outline.4bpp.lz"); static const u32 sPokenavDeviceBgTilemap[] = INCBIN_U32("graphics/pokenav/device_outline_map.bin.lz"); From 1472111c5d158e72f4cf80c075a221e98d814250 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 11 Oct 2020 19:02:10 -0400 Subject: [PATCH 039/177] Fix PutAwayDecorationLoop UB comment --- data/scripts/secret_base.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/scripts/secret_base.inc b/data/scripts/secret_base.inc index 132bdd19ca..4a20de9a6b 100644 --- a/data/scripts/secret_base.inc +++ b/data/scripts/secret_base.inc @@ -308,7 +308,7 @@ SecretBase_EventScript_PutAwayDecorationLoop:: @ 8275D39 compare VAR_0x8005, 0 goto_if_eq SecretBase_EventScript_PutAwayDecorationLoop removeobject VAR_0x8006 - setflag VAR_0x8005 @ UB: GF likely meant setvar here; setflag 0x8005 is out of bounds + setflag VAR_0x8005 @ UB: VAR_0x8005 is set to a flag by PutAwayDecorationIteration, but ScrCmd_setflag doesn't use VarGet goto SecretBase_EventScript_PutAwayDecorationLoop end From c31c2d93d73bd6c6d328df3ac07ab5d160a21008 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 16 Oct 2020 16:55:29 -0400 Subject: [PATCH 040/177] [LEAK INFORMED] match FadeOutBody --- src/m4a.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/m4a.c b/src/m4a.c index b8f9e21c11..a417466cf5 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -643,40 +643,27 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) s32 i; struct MusicPlayerTrack *track; u16 fadeOV; -#ifdef NONMATCHING - u16 mask; -#else - register u16 mask asm("r2"); -#endif // NONMATCHING if (mplayInfo->fadeOI == 0) return; - - mplayInfo->fadeOC--; - mask = 0xFFFF; - - if (mplayInfo->fadeOC != 0) + if (--mplayInfo->fadeOC != 0) return; mplayInfo->fadeOC = mplayInfo->fadeOI; if (mplayInfo->fadeOV & FADE_IN) { - mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT); - - if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT)) + if ((u16)(mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT)) >= (64 << FADE_VOL_SHIFT)) { mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); mplayInfo->fadeOI = 0; } } + else { - mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT); - - if ((s16)(mplayInfo->fadeOV & mask) <= 0) + if ((s16)(mplayInfo->fadeOV-=(4 << FADE_VOL_SHIFT)) <= 0) { - for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) { u32 val; From bf03f1154f4e25b8d03035074bd4f77fe421aa3b Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 16 Oct 2020 16:57:41 -0400 Subject: [PATCH 041/177] formatting --- src/m4a.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/m4a.c b/src/m4a.c index a417466cf5..fa81a09c38 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -662,7 +662,7 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) else { - if ((s16)(mplayInfo->fadeOV-=(4 << FADE_VOL_SHIFT)) <= 0) + if ((s16)(mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT)) <= 0) { for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) { From aedfe27f8d609e4a6cef15b977ae8322f190d094 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 16 Oct 2020 17:16:25 -0400 Subject: [PATCH 042/177] Remove newline --- src/m4a.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/m4a.c b/src/m4a.c index fa81a09c38..2280fc74c8 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -659,7 +659,6 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) mplayInfo->fadeOI = 0; } } - else { if ((s16)(mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT)) <= 0) From 7d5fce9a72de91b20d3908b5c6dbfac18b6524a4 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 19 Oct 2020 05:58:51 -0400 Subject: [PATCH 043/177] re-remove extra semicolons (from #1104) --- src/AgbRfu_LinkManager.c | 2 +- tools/gbagfx/gfx.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c index e4127ee090..f6ebcc7265 100644 --- a/src/AgbRfu_LinkManager.c +++ b/src/AgbRfu_LinkManager.c @@ -918,7 +918,7 @@ static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) { lman.reserveDisconnectSlot_flag = 0; lman.acceptCount = 0; - lman.acceptSlot_flag = 0;; + lman.acceptSlot_flag = 0; lman.parent_child = MODE_NEUTRAL; rfu_LMAN_managerChangeAgbClockMaster(); if (reqCommandId == ID_STOP_MODE_REQ) diff --git a/tools/gbagfx/gfx.c b/tools/gbagfx/gfx.c index 8d959465f7..4e85953fdc 100644 --- a/tools/gbagfx/gfx.c +++ b/tools/gbagfx/gfx.c @@ -282,7 +282,7 @@ static void HflipTile(unsigned char * tile, int bitDepth) for (i = 0; i < 8; i++) { SWAP_NYBBLES(&tile[4 * i + 0], &tile[4 * i + 3]); - SWAP_NYBBLES(&tile[4 * i + 1], &tile[4 * i + 2]);; + SWAP_NYBBLES(&tile[4 * i + 1], &tile[4 * i + 2]); } break; case 8: From 56c3eefd9f1b1dca3cfd9738a620f60932d3c665 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 19 Oct 2020 06:15:35 -0400 Subject: [PATCH 044/177] re-match RotateAuroraRingColors_Step --- src/battle_anim_water.c | 82 ++--------------------------------------- 1 file changed, 4 insertions(+), 78 deletions(-) diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 5810b6bdc9..a09feafb3a 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -624,98 +624,24 @@ void AnimTask_RotateAuroraRingColors(u8 taskId) gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step; } -#ifdef NONMATCHING static void AnimTask_RotateAuroraRingColors_Step(u8 taskId) { int i; u16 palIndex; - u16 *palPtr1; - u16 *palPtr2; - u16 rgbBuffer; if (++gTasks[taskId].data[10] == 3) { + u16 rgbBuffer; gTasks[taskId].data[10] = 0; palIndex = gTasks[taskId].data[2] + 1; - palPtr1 = &gPlttBufferFaded[palIndex]; - rgbBuffer = *palPtr1; - palPtr2 = &palPtr1[1]; - for (i = 0; i < 7; i++) - palPtr1[i] = palPtr2[i]; + rgbBuffer = gPlttBufferFaded[palIndex]; + for (i = 1; i < 8; i++) + gPlttBufferFaded[palIndex + i - 1] = gPlttBufferFaded[palIndex + i]; gPlttBufferFaded[palIndex + 7] = rgbBuffer; } if (++gTasks[taskId].data[11] == gTasks[taskId].data[0]) DestroyAnimVisualTask(taskId); } -#else -NAKED -static void AnimTask_RotateAuroraRingColors_Step(u8 taskId) -{ - asm_unified("push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldr r1, =gTasks\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - adds r2, r0, r1\n\ - ldrh r0, [r2, 0x1C]\n\ - adds r0, 0x1\n\ - strh r0, [r2, 0x1C]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - mov r12, r1\n\ - cmp r0, 0x3\n\ - bne _081075BE\n\ - movs r0, 0\n\ - strh r0, [r2, 0x1C]\n\ - ldrh r0, [r2, 0xC]\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - ldr r1, =gPlttBufferFaded\n\ - lsls r0, r5, 1\n\ - adds r0, r1\n\ - ldrh r6, [r0]\n\ - adds r7, r1, 0\n\ - adds r3, r0, 0x2\n\ - movs r1, 0x6\n\ - adds r2, r0, 0\n\ -_081075A8:\n\ - ldrh r0, [r3]\n\ - strh r0, [r2]\n\ - adds r3, 0x2\n\ - adds r2, 0x2\n\ - subs r1, 0x1\n\ - cmp r1, 0\n\ - bge _081075A8\n\ - adds r0, r5, 0x7\n\ - lsls r0, 1\n\ - adds r0, r7\n\ - strh r6, [r0]\n\ -_081075BE:\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - add r0, r12\n\ - ldrh r1, [r0, 0x1E]\n\ - adds r1, 0x1\n\ - strh r1, [r0, 0x1E]\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - movs r2, 0x8\n\ - ldrsh r0, [r0, r2]\n\ - cmp r1, r0\n\ - bne _081075DE\n\ - adds r0, r4, 0\n\ - bl DestroyAnimVisualTask\n\ -_081075DE:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n"); -} -#endif // For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam) static void AnimToTargetInSinWave(struct Sprite *sprite) From f0efd11aa9fd0f715b61c81cca268ef3013f522f Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 19 Oct 2020 06:19:21 -0400 Subject: [PATCH 045/177] re-match InitObjectEventStateFromTemplate --- src/event_object_movement.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 29a9f6d0a1..cbd0db6f32 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1223,7 +1223,6 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, objectEvent->movementType = template->movementType; objectEvent->localId = template->localId; objectEvent->mapNum = mapNum; - objectEvent++; objectEvent--; objectEvent->mapGroup = mapGroup; objectEvent->initialCoords.x = x; objectEvent->initialCoords.y = y; @@ -1236,13 +1235,11 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, objectEvent->range.as_nybbles.x = template->movementRangeX; objectEvent->range.as_nybbles.y = template->movementRangeY; objectEvent->trainerType = template->trainerType; + objectEvent->mapNum = mapNum; objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId; objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType]; SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection); SetObjectEventDynamicGraphicsId(objectEvent); -#ifndef NONMATCHING - asm("":::"r5", "r6"); -#endif if (gRangedMovementTypes[objectEvent->movementType]) { if (objectEvent->range.as_nybbles.x == 0) From c8e832980bbbe6af338c935d7a3e9985858103a3 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 19 Oct 2020 06:37:00 -0400 Subject: [PATCH 046/177] re-match CreateWaterPulseRingBubbles --- src/battle_anim_water.c | 199 +++------------------------------------- 1 file changed, 14 insertions(+), 185 deletions(-) diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index a09feafb3a..d7a022d1a8 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -1930,16 +1930,24 @@ static void AnimWaterPulseRing_Step(struct Sprite *sprite) sprite->data[0]++; } -#ifdef NONMATCHING static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff) { - s16 something = sprite->data[0] / 2; - s16 combinedX = sprite->pos1.x + sprite->pos2.x; - s16 combinedY = sprite->pos1.y + sprite->pos2.y; - s16 randomSomethingY = yDiff + (Random2() % 10) - 5; - s16 randomSomethingX = -xDiff + (Random2() % 10) - 5; + s16 combinedX; + s16 combinedY; s16 i; + s16 something; + s16 unusedVar = 1; //unusedVar is needed to match + s16 randomSomethingY; + s16 randomSomethingX; u8 spriteId; + + something = sprite->data[0] / 2; + combinedX = sprite->pos1.x + sprite->pos2.x; + combinedY = sprite->pos1.y + sprite->pos2.y; + if (yDiff < 0) + unusedVar *= -1; //Needed to match + randomSomethingY = yDiff + (Random2() % 10) - 5; + randomSomethingX = -xDiff + (Random2() % 10) - 5; for (i = 0; i <= 0; i++) { @@ -1964,182 +1972,3 @@ static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yD gSprites[spriteId].data[2] = randomSomethingX; } } -#else -NAKED -static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff) -{ - asm_unified("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x18\n\ - adds r4, r1, 0\n\ - adds r5, r2, 0\n\ - movs r2, 0x2E\n\ - ldrsh r1, [r0, r2]\n\ - lsrs r2, r1, 31\n\ - adds r1, r2\n\ - lsls r1, 15\n\ - lsrs r1, 16\n\ - str r1, [sp]\n\ - ldrh r1, [r0, 0x24]\n\ - ldrh r3, [r0, 0x20]\n\ - adds r1, r3\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - mov r8, r1\n\ - ldrh r1, [r0, 0x26]\n\ - ldrh r0, [r0, 0x22]\n\ - adds r1, r0\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - mov r10, r1\n\ - bl Random2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - adds r0, r5, r0\n\ - subs r0, 0x5\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r9, r0\n\ - bl Random2\n\ - negs r4, r4\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - adds r4, r0\n\ - subs r4, 0x5\n\ - lsls r4, 16\n\ - lsrs r7, r4, 16\n\ - movs r6, 0\n\ - mov r0, r8\n\ - lsls r0, 16\n\ - mov r8, r0\n\ - mov r1, r10\n\ - lsls r1, 16\n\ - str r1, [sp, 0xC]\n\ - ldr r2, [sp]\n\ - lsls r2, 16\n\ - str r2, [sp, 0x10]\n\ - asrs r1, 16\n\ - lsls r0, r7, 16\n\ - asrs r5, r0, 16\n\ - str r0, [sp, 0x14]\n\ - negs r3, r5\n\ - str r3, [sp, 0x4]\n\ - asrs r0, r2, 16\n\ - adds r1, r0\n\ - lsls r1, 16\n\ - mov r10, r1\n\ -_08108DE2:\n\ - ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\ - mov r2, r8\n\ - asrs r1, r2, 16\n\ - mov r3, r10\n\ - asrs r2, r3, 16\n\ - movs r3, 0x82\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r1, =gSprites\n\ - lsls r0, r2, 4\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - adds r4, r0, r1\n\ - movs r0, 0x14\n\ - strh r0, [r4, 0x2E]\n\ - mov r0, r9\n\ - strh r0, [r4, 0x30]\n\ - ldr r0, =gBattleAnimAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSpriteSubpriority\n\ - subs r0, 0x1\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - cmp r5, 0\n\ - bge _08108E30\n\ - mov r1, sp\n\ - ldrh r1, [r1, 0x4]\n\ - strh r1, [r4, 0x32]\n\ - b _08108E32\n\ - .pool\n\ -_08108E30:\n\ - strh r7, [r4, 0x32]\n\ -_08108E32:\n\ - lsls r0, r6, 16\n\ - movs r2, 0x80\n\ - lsls r2, 9\n\ - adds r0, r2\n\ - lsrs r6, r0, 16\n\ - cmp r0, 0\n\ - ble _08108DE2\n\ - movs r6, 0\n\ - ldr r3, [sp, 0xC]\n\ - asrs r1, r3, 16\n\ - ldr r0, [sp, 0x14]\n\ - asrs r5, r0, 16\n\ - negs r2, r5\n\ - str r2, [sp, 0x8]\n\ - ldr r3, [sp, 0x10]\n\ - asrs r0, r3, 16\n\ - subs r1, r0\n\ - lsls r1, 16\n\ - mov r10, r1\n\ -_08108E58:\n\ - ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\ - mov r2, r8\n\ - asrs r1, r2, 16\n\ - mov r3, r10\n\ - asrs r2, r3, 16\n\ - movs r3, 0x82\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r1, =gSprites\n\ - lsls r0, r2, 4\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - adds r4, r0, r1\n\ - movs r0, 0x14\n\ - strh r0, [r4, 0x2E]\n\ - mov r0, r9\n\ - strh r0, [r4, 0x30]\n\ - ldr r0, =gBattleAnimAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSpriteSubpriority\n\ - subs r0, 0x1\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - cmp r5, 0\n\ - ble _08108EA8\n\ - mov r1, sp\n\ - ldrh r1, [r1, 0x8]\n\ - strh r1, [r4, 0x32]\n\ - b _08108EAA\n\ - .pool\n\ -_08108EA8:\n\ - strh r7, [r4, 0x32]\n\ -_08108EAA:\n\ - lsls r0, r6, 16\n\ - movs r2, 0x80\n\ - lsls r2, 9\n\ - adds r0, r2\n\ - lsrs r6, r0, 16\n\ - cmp r0, 0\n\ - ble _08108E58\n\ - add sp, 0x18\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n"); -} -#endif From eee55c65f6a3f78adf13e92b374bc98a1ad4d408 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Wed, 21 Oct 2020 03:45:29 -0400 Subject: [PATCH 047/177] re-do "match function signatures" (from #1119) not a matching, but I don't see why we shouldn't do this --- src/field_player_avatar.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 3d916e9d09..5fab2489bb 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -101,9 +101,9 @@ static void sub_808C280(struct ObjectEvent *); static void StartStrengthAnim(u8, u8); static void Task_PushBoulder(u8 taskId); -static u8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); -static u8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); -static u8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); static void DoPlayerMatJump(void); static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); From 5fd555016f112f1ed71aadf615486cee4a070d1a Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Wed, 21 Oct 2020 04:04:59 -0400 Subject: [PATCH 048/177] re-match battle_anim_flying functions (from #1126) --- src/battle_anim_flying.c | 41 ++++++++++++++-------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 5179c13648..d7f079886f 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -570,7 +570,7 @@ struct FeatherDanceData static void AnimFallingFeather(struct Sprite *sprite) { u8 battler, matrixNum, sinIndex; - s16 spriteCoord, sinVal; + s16 spriteCoord; struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; @@ -633,22 +633,11 @@ static void AnimFallingFeather(struct Sprite *sprite) matrixNum = sprite->oam.matrixNum; sinIndex = (-sprite->pos2.x >> 1) + data->unkA; - sinVal = gSineTable[sinIndex]; + spriteCoord = gSineTable[sinIndex]; gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; - // The comparison below is completely pointless. 'sprite' is sure to be a valid pointer and - // both the 'if' and 'else' parts are exactly the same. - // The only reason for this is making sure the compiler generates the exact ASM. - if (sprite) - { - gOamMatrices[matrixNum].b = sinVal; - gOamMatrices[matrixNum].c = -sinVal; - } - else - { - gOamMatrices[matrixNum].b = sinVal; - gOamMatrices[matrixNum].c = -sinVal; - } + gOamMatrices[matrixNum].b = spriteCoord; + gOamMatrices[matrixNum].c = -spriteCoord; sprite->callback = sub_810E520; } @@ -671,13 +660,13 @@ static void sub_810E520(struct Sprite *sprite) switch (data->unk2 / 64) { case 0: - if (data->unk0_1 << 24 >> 24 == 1) // the shifts have to be here + if ((u8)data->unk0_1 == 1) //casts to u8 here are necessary for matching { data->unk0_0d = 1; data->unk0_0a = 1; data->unk1 = 0; } - else if (data->unk0_1 << 24 >> 24 == 3) + else if ((u8)data->unk0_1 == 3) { data->unk0_0b ^= 1; data->unk0_0a = 1; @@ -724,13 +713,13 @@ static void sub_810E520(struct Sprite *sprite) data->unk0_1 = 0; break; case 1: - if (data->unk0_1 << 24 >> 24 == 0) + if ((u8)data->unk0_1 == 0) { data->unk0_0d = 1; data->unk0_0a = 1; data->unk1 = 0; } - else if (data->unk0_1 << 24 >> 24 == 2) + else if ((u8)data->unk0_1 == 2) { data->unk0_0a = 1; data->unk1 = 0; @@ -775,13 +764,13 @@ static void sub_810E520(struct Sprite *sprite) data->unk0_1 = 1; break; case 2: - if (data->unk0_1 << 24 >> 24 == 3) + if ((u8)data->unk0_1 == 3) { data->unk0_0d = 1; data->unk0_0a = 1; data->unk1 = 0; } - else if (data->unk0_1 << 24 >> 24 == 1) + else if ((u8)data->unk0_1 == 1) { data->unk0_0a = 1; data->unk1 = 0; @@ -826,11 +815,11 @@ static void sub_810E520(struct Sprite *sprite) data->unk0_1 = 2; break; case 3: - if (data->unk0_1 << 24 >> 24 == 2) + if ((u8)data->unk0_1 == 2) { data->unk0_0d = 1; } - else if (data->unk0_1 << 24 >> 24 == 0) + else if ((u8)data->unk0_1 == 0) { data->unk0_0b ^= 1; data->unk0_0a = 1; @@ -876,10 +865,8 @@ static void sub_810E520(struct Sprite *sprite) data->unk0_1 = 3; break; } - #ifndef NONMATCHING - asm("":::"r8"); - #endif - sprite->pos2.x = (data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8; + + sprite->pos2.x = ((s32)data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8; matrixNum = sprite->oam.matrixNum; sinIndex = (-sprite->pos2.x >> 1) + data->unkA; From 063596d87bc92852739e039b586ead9523db5c83 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Wed, 21 Oct 2020 04:26:45 -0400 Subject: [PATCH 049/177] re-match GLYPH_COPY --- gflib/text.c | 877 ++++-------------------------------------- gflib/text.h | 4 +- src/unk_text_util_2.c | 6 +- 3 files changed, 79 insertions(+), 808 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 5d407e5e4c..9f7fcde494 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -462,811 +462,82 @@ u8 GetLastTextColor(u8 colorType) } } -#ifdef NONMATCHING +inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 j, u32 i, u32 *ptr, s32 width, s32 height) +{ + u32 xAdd, yAdd, r5, bits, toOrr, dummyX; + u8 *dst; -#define GLYPH_COPY(fromY_, toY_, fromX_, toX_, unk) \ -{ \ - u32 i, j, *ptr, toY, fromX, toX, r5, toOrr, bits; \ - u8 *dst; \ - \ - j = fromX_; \ - i = fromY_; \ - ptr = unk; \ - toX = toX_; \ - toY = toY_; \ - fromX = fromX_; \ - \ - for (; i < toY; i++) \ - { \ - r5 = *(ptr++); \ - for (j = fromX; j < toX; j++) \ - { \ - toOrr = r5 & 0xF; \ - if (toOrr) \ - { \ - dst = windowTiles + ((j / 8) * 32) + ((j & 7) / 2) + ((i / 8) * widthOffset) + ((i & 7) * 4); \ - bits = ((j & 1) << 2); \ - *dst = ((toOrr << bits) | (*dst & (0xF0 >> bits))); \ - } \ - r5 >>= 4; \ - } \ - } \ + xAdd = j + width; + yAdd = i + height; + dummyX = j; + for (; i < yAdd; i++) + { + r5 = *ptr++; + for (j = dummyX; j < xAdd; j++) + { + if ((toOrr = r5 & 0xF)) + { + dst = windowTiles + ((j / 8) * 32) + ((j % 8) / 2) + ((i / 8) * widthOffset) + ((i % 8) * 4); + bits = ((j & 1) * 4); + *dst = (toOrr << bits) | (*dst & (0xF0 >> bits)); + } + r5 >>= 4; + } + } } void CopyGlyphToWindow(struct TextPrinter *textPrinter) { struct Window *win; struct WindowTemplate *winTempl; - struct Struct_03002F90 *unkStruct; - u32 currX, widthOffset, currY; + u32 *unkStruct; + u32 currX, currY, widthOffset; s32 r4, r0; u8 *windowTiles; win = &gWindows[textPrinter->printerTemplate.windowId]; winTempl = &win->window; - r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX; - if (r4 > gUnknown_03002F90.unk80) - r4 = gUnknown_03002F90.unk80; + if ((r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX) > gUnknown_03002F90.width) + r4 = gUnknown_03002F90.width; - r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY; - if (r0 > gUnknown_03002F90.unk81) - r0 = gUnknown_03002F90.unk81; + if ((r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY) > gUnknown_03002F90.height) + r0 = gUnknown_03002F90.height; currX = textPrinter->printerTemplate.currentX; currY = textPrinter->printerTemplate.currentY; - unkStruct = &gUnknown_03002F90; + unkStruct = (u32 *)&gUnknown_03002F90.unk0; windowTiles = win->tileData; widthOffset = winTempl->width * 32; - if (r4 <= 8) + if (r4 < 9) { - if (r0 <= 8) + if (r0 < 9) { - GLYPH_COPY(currY, currY + r0, currX, currX + r4, unkStruct->unk0); + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, r4, r0); } else { - u32 temp; - GLYPH_COPY(currY, currY + 8, currX, currX + r4, unkStruct->unk0); - - temp = currY + 8; - GLYPH_COPY(temp, (temp - 8) + r0, currX, currX + r4, unkStruct->unk40); + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, r4, 8); + GLYPH_COPY(windowTiles, widthOffset, currX, currY + 8, unkStruct + 16, r4, r0 - 8); } } else { - if (r0 <= 8) + if (r0 < 9) { - u32 temp; - GLYPH_COPY(currY, currY + r0, currX, currX + 8, unkStruct->unk0); - - temp = currX + 8; - GLYPH_COPY(currY, currY + r0, temp, (temp - 8) + r4, unkStruct->unk20); + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, 8, r0); + GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY, unkStruct + 8, r4 - 8, r0); } else { - u32 temp; - GLYPH_COPY(currY, currY + 8, currX, currX + 8, unkStruct->unk0); - - temp = currX + 8; - GLYPH_COPY(currY, currY + 8, temp, temp - 8 + r4, unkStruct->unk20); - - temp = currY + 8; - GLYPH_COPY(temp, temp - 8 + r0, currX, currX + 8, unkStruct->unk40); - { - u32 tempX, tempY; - tempX = currX + 8; - tempY = currY + 8; - GLYPH_COPY(tempY, tempY - 8 + r0, tempX, tempX - 8 + r4, unkStruct->unk60); - } + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, 8, 8); + GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY, unkStruct + 8, r4 - 8, 8); + GLYPH_COPY(windowTiles, widthOffset, currX, currY + 8, unkStruct + 16, 8, r0 - 8); + GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY + 8, unkStruct + 24, r4 - 8, r0 - 8); } } } -#else -NAKED -void CopyGlyphToWindow(struct TextPrinter *x) -{ - asm("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, #0x8C\n\ - add r3, r0, #0\n\ - ldrb r1, [r3, #0x4]\n\ - lsl r0, r1, #1\n\ - add r0, r1\n\ - lsl r0, #2\n\ - ldr r1, =gWindows\n\ - add r1, r0, r1\n\ - add r2, r1, #0\n\ - ldrb r7, [r1, #0x3]\n\ - lsl r0, r7, #3\n\ - ldrb r6, [r3, #0x8]\n\ - sub r4, r0, r6\n\ - ldr r5, =gUnknown_03002F90\n\ - add r0, r5, #0\n\ - add r0, #0x80\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - ble _08004DD2\n\ - add r4, r0, #0\n\ -_08004DD2:\n\ - ldrb r0, [r1, #0x4]\n\ - lsl r0, #3\n\ - ldrb r3, [r3, #0x9]\n\ - sub r0, r3\n\ - add r1, r5, #0\n\ - add r1, #0x81\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - ble _08004DE6\n\ - add r0, r1, #0\n\ -_08004DE6:\n\ - str r6, [sp]\n\ - mov r8, r3\n\ - add r3, r5, #0\n\ - ldr r2, [r2, #0x8]\n\ - mov r9, r2\n\ - lsl r1, r7, #5\n\ - str r1, [sp, #0x4]\n\ - cmp r4, #0x8\n\ - ble _08004DFA\n\ - b _08004F94\n\ -_08004DFA:\n\ - cmp r0, #0x8\n\ - bgt _08004E84\n\ - mov r1, r8\n\ - str r3, [sp, #0x8]\n\ - add r2, r6, #0\n\ - add r2, r4\n\ - mov r8, r2\n\ - add r0, r1, r0\n\ - str r0, [sp, #0xC]\n\ - str r6, [sp, #0x10]\n\ - cmp r1, r0\n\ - bcc _08004E14\n\ - b _080052AA\n\ -_08004E14:\n\ - ldr r3, [sp, #0x8]\n\ - ldm r3!, {r5}\n\ - str r3, [sp, #0x8]\n\ - ldr r4, [sp, #0x10]\n\ - add r0, r1, #0x1\n\ - mov r10, r0\n\ - cmp r4, r8\n\ - bcs _08004E72\n\ - mov r2, #0x7\n\ - mov r12, r2\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, r12\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ -_08004E38:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _08004E6A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_08004E6A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08004E38\n\ -_08004E72:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0xC]\n\ - cmp r1, r2\n\ - bcc _08004E14\n\ - b _080052AA\n\ - .pool\n\ -_08004E84:\n\ - mov r1, r8\n\ - str r3, [sp, #0x14]\n\ - ldr r3, [sp]\n\ - add r3, r4\n\ - mov r12, r3\n\ - add r2, r1, #0\n\ - add r2, #0x8\n\ - str r2, [sp, #0x18]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x1C]\n\ - mov r2, r12\n\ - str r2, [sp, #0x74]\n\ - ldr r3, [sp, #0x18]\n\ - str r3, [sp, #0x88]\n\ - sub r0, #0x8\n\ - str r0, [sp, #0x80]\n\ - cmp r1, r3\n\ - bcs _08004F0E\n\ -_08004EA8:\n\ - ldr r0, [sp, #0x14]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x14]\n\ - ldr r4, [sp, #0x1C]\n\ - add r2, r1, #0x1\n\ - mov r8, r2\n\ - cmp r4, r12\n\ - bcs _08004F06\n\ - mov r3, #0x7\n\ - mov r10, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r10\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_08004ECC:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _08004EFE\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r10\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_08004EFE:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _08004ECC\n\ -_08004F06:\n\ - mov r1, r8\n\ - ldr r2, [sp, #0x18]\n\ - cmp r1, r2\n\ - bcc _08004EA8\n\ -_08004F0E:\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002F90 + 0x40\n\ - str r3, [sp, #0x20]\n\ - ldr r0, [sp, #0x74]\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x24]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x28]\n\ - cmp r1, r2\n\ - bcc _08004F28\n\ - b _080052AA\n\ -_08004F28:\n\ - ldr r0, [sp, #0x20]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x20]\n\ - ldr r4, [sp, #0x28]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r8\n\ - bcs _08004F86\n\ - mov r3, #0x7\n\ - mov r12, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_08004F4C:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _08004F7E\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_08004F7E:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08004F4C\n\ -_08004F86:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x24]\n\ - cmp r1, r2\n\ - bcc _08004F28\n\ - b _080052AA\n\ - .pool\n\ -_08004F94:\n\ - cmp r0, #0x8\n\ - ble _08004F9A\n\ - b _080050A4\n\ -_08004F9A:\n\ - mov r1, r8\n\ - str r3, [sp, #0x2C]\n\ - ldr r3, [sp]\n\ - add r3, #0x8\n\ - mov r12, r3\n\ - add r0, r8\n\ - str r0, [sp, #0x30]\n\ - ldr r0, [sp]\n\ - str r0, [sp, #0x34]\n\ - ldr r2, [sp, #0x30]\n\ - str r2, [sp, #0x78]\n\ - str r3, [sp, #0x84]\n\ - sub r4, #0x8\n\ - str r4, [sp, #0x7C]\n\ - cmp r8, r2\n\ - bcs _0800501C\n\ -_08004FBA:\n\ - ldr r0, [sp, #0x2C]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x2C]\n\ - ldr r4, [sp, #0x34]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r12\n\ - bcs _08005014\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, #0x7\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ -_08004FDA:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _0800500C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, #0x7\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800500C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _08004FDA\n\ -_08005014:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x30]\n\ - cmp r1, r2\n\ - bcc _08004FBA\n\ -_0800501C:\n\ - mov r1, r8\n\ - ldr r3, =gUnknown_03002F90 + 0x20\n\ - str r3, [sp, #0x38]\n\ - ldr r0, [sp, #0x84]\n\ - ldr r2, [sp, #0x7C]\n\ - add r0, r2\n\ - mov r8, r0\n\ - ldr r3, [sp, #0x78]\n\ - str r3, [sp, #0x3C]\n\ - ldr r0, [sp, #0x84]\n\ - str r0, [sp, #0x40]\n\ - cmp r1, r3\n\ - bcc _08005038\n\ - b _080052AA\n\ -_08005038:\n\ - ldr r2, [sp, #0x38]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x38]\n\ - ldr r4, [sp, #0x40]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r8\n\ - bcs _08005096\n\ - mov r0, #0x7\n\ - mov r12, r0\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_0800505C:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800508E\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800508E:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _0800505C\n\ -_08005096:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x3C]\n\ - cmp r1, r2\n\ - bcc _08005038\n\ - b _080052AA\n\ - .pool\n\ -_080050A4:\n\ - mov r1, r8\n\ - str r5, [sp, #0x44]\n\ - ldr r3, [sp]\n\ - add r3, #0x8\n\ - mov r12, r3\n\ - mov r2, r8\n\ - add r2, #0x8\n\ - str r2, [sp, #0x48]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x4C]\n\ - str r2, [sp, #0x88]\n\ - sub r0, #0x8\n\ - str r0, [sp, #0x80]\n\ - mov r0, r12\n\ - str r0, [sp, #0x84]\n\ - sub r4, #0x8\n\ - str r4, [sp, #0x7C]\n\ - cmp r8, r2\n\ - bcs _0800512C\n\ -_080050CA:\n\ - ldr r2, [sp, #0x44]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x44]\n\ - ldr r4, [sp, #0x4C]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r12\n\ - bcs _08005124\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, #0x7\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_080050EA:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800511C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, #0x7\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800511C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _080050EA\n\ -_08005124:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x48]\n\ - cmp r1, r2\n\ - bcc _080050CA\n\ -_0800512C:\n\ - mov r1, r8\n\ - ldr r3, =gUnknown_03002F90 + 0x20\n\ - str r3, [sp, #0x50]\n\ - ldr r0, [sp, #0x84]\n\ - ldr r2, [sp, #0x7C]\n\ - add r0, r2\n\ - mov r8, r0\n\ - ldr r3, [sp, #0x88]\n\ - str r3, [sp, #0x54]\n\ - ldr r0, [sp, #0x84]\n\ - str r0, [sp, #0x58]\n\ - cmp r1, r3\n\ - bcs _080051AC\n\ -_08005146:\n\ - ldr r2, [sp, #0x50]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x50]\n\ - ldr r4, [sp, #0x58]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r8\n\ - bcs _080051A4\n\ - mov r0, #0x7\n\ - mov r12, r0\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_0800516A:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800519C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800519C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _0800516A\n\ -_080051A4:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x54]\n\ - cmp r1, r2\n\ - bcc _08005146\n\ -_080051AC:\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002F90 + 0x40\n\ - str r3, [sp, #0x5C]\n\ - ldr r0, [sp, #0x84]\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x60]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x64]\n\ - cmp r1, r2\n\ - bcs _0800522A\n\ -_080051C4:\n\ - ldr r0, [sp, #0x5C]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x5C]\n\ - ldr r4, [sp, #0x64]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r8\n\ - bcs _08005222\n\ - mov r3, #0x7\n\ - mov r12, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_080051E8:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800521A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800521A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _080051E8\n\ -_08005222:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x60]\n\ - cmp r1, r2\n\ - bcc _080051C4\n\ -_0800522A:\n\ - ldr r4, [sp, #0x84]\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002F90 + 0x60\n\ - str r3, [sp, #0x68]\n\ - ldr r0, [sp, #0x7C]\n\ - add r0, r4\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x6C]\n\ - str r4, [sp, #0x70]\n\ - cmp r1, r2\n\ - bcs _080052AA\n\ -_08005244:\n\ - ldr r3, [sp, #0x68]\n\ - ldm r3!, {r5}\n\ - str r3, [sp, #0x68]\n\ - ldr r4, [sp, #0x70]\n\ - add r0, r1, #0x1\n\ - mov r10, r0\n\ - cmp r4, r8\n\ - bcs _080052A2\n\ - mov r2, #0x7\n\ - mov r12, r2\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, r12\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ -_08005268:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _0800529A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800529A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08005268\n\ -_080052A2:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x6C]\n\ - cmp r1, r2\n\ - bcc _08005244\n\ -_080052AA:\n\ - add sp, #0x8C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); -} -#endif // NONMATCHING void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) { @@ -1283,7 +554,7 @@ void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) pixels_data.height = window->window.height << 3; gUnk = &gUnknown_03002F90; - glyphHeight = &gUnk->unk81; + glyphHeight = &gUnk->height; FillBitmapRect4Bit( &pixels_data, @@ -1745,8 +1016,8 @@ u16 RenderText(struct TextPrinter *textPrinter) break; case CHAR_KEYPAD_ICON: currChar = *textPrinter->printerTemplate.currentChar++; - gUnknown_03002F90.unk80 = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY); - textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing; + gUnknown_03002F90.width = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY); + textPrinter->printerTemplate.currentX += gUnknown_03002F90.width + textPrinter->printerTemplate.letterSpacing; return 0; case EOS: return 1; @@ -1780,8 +1051,8 @@ u16 RenderText(struct TextPrinter *textPrinter) if (textPrinter->minLetterSpacing) { - textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80; - width = textPrinter->minLetterSpacing - gUnknown_03002F90.unk80; + textPrinter->printerTemplate.currentX += gUnknown_03002F90.width; + width = textPrinter->minLetterSpacing - gUnknown_03002F90.width; if (width > 0) { ClearTextSpan(textPrinter, width); @@ -1791,9 +1062,9 @@ u16 RenderText(struct TextPrinter *textPrinter) else { if (textPrinter->japanese) - textPrinter->printerTemplate.currentX += (gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing); + textPrinter->printerTemplate.currentX += (gUnknown_03002F90.width + textPrinter->printerTemplate.letterSpacing); else - textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80; + textPrinter->printerTemplate.currentX += gUnknown_03002F90.width; } return 0; case 1: @@ -2325,15 +1596,15 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.unk80 = 8; // gGlyphWidth - gUnknown_03002F90.unk81 = 12; // gGlyphHeight + gUnknown_03002F90.width = 8; // gGlyphWidth + gUnknown_03002F90.height = 12; // gGlyphHeight } else { glyphs = gFont0LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.unk80 = gFont0LatinGlyphWidths[glyphId]; + gUnknown_03002F90.width = gFont0LatinGlyphWidths[glyphId]; - if (gUnknown_03002F90.unk80 <= 8) + if (gUnknown_03002F90.width <= 8) { DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); @@ -2346,7 +1617,7 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); } - gUnknown_03002F90.unk81 = 13; + gUnknown_03002F90.height = 13; } } @@ -2368,15 +1639,15 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese) glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.unk80 = 8; // gGlyphWidth - gUnknown_03002F90.unk81 = 15; // gGlyphHeight + gUnknown_03002F90.width = 8; // gGlyphWidth + gUnknown_03002F90.height = 15; // gGlyphHeight } else { glyphs = gFont7LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.unk80 = gFont7LatinGlyphWidths[glyphId]; + gUnknown_03002F90.width = gFont7LatinGlyphWidths[glyphId]; - if (gUnknown_03002F90.unk80 <= 8) + if (gUnknown_03002F90.width <= 8) { DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); @@ -2389,7 +1660,7 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); } - gUnknown_03002F90.unk81 = 15; + gUnknown_03002F90.height = 15; } } @@ -2410,15 +1681,15 @@ void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese) glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.unk80 = 8; // gGlyphWidth - gUnknown_03002F90.unk81 = 12; // gGlyphHeight + gUnknown_03002F90.width = 8; // gGlyphWidth + gUnknown_03002F90.height = 12; // gGlyphHeight } else { glyphs = gFont8LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.unk80 = gFont8LatinGlyphWidths[glyphId]; + gUnknown_03002F90.width = gFont8LatinGlyphWidths[glyphId]; - if (gUnknown_03002F90.unk80 <= 8) + if (gUnknown_03002F90.width <= 8) { DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); @@ -2431,7 +1702,7 @@ void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); } - gUnknown_03002F90.unk81 = 12; + gUnknown_03002F90.height = 12; } } @@ -2454,15 +1725,15 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); // gUnknown_03002F90 + 0x40 DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x20 DecompressGlyphTile(glyphs + 0x88, gUnknown_03002F90.unk60); // gUnknown_03002F90 + 0x60 - gUnknown_03002F90.unk80 = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth - gUnknown_03002F90.unk81 = 14; // gGlyphHeight + gUnknown_03002F90.width = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth + gUnknown_03002F90.height = 14; // gGlyphHeight } else { glyphs = gFont2LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.unk80 = gFont2LatinGlyphWidths[glyphId]; + gUnknown_03002F90.width = gFont2LatinGlyphWidths[glyphId]; - if (gUnknown_03002F90.unk80 <= 8) + if (gUnknown_03002F90.width <= 8) { DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); @@ -2475,7 +1746,7 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); } - gUnknown_03002F90.unk81 = 14; + gUnknown_03002F90.height = 14; } } @@ -2497,15 +1768,15 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.unk80 = 8; // gGlyphWidth - gUnknown_03002F90.unk81 = 15; // gGlyphHeight + gUnknown_03002F90.width = 8; // gGlyphWidth + gUnknown_03002F90.height = 15; // gGlyphHeight } else { glyphs = gFont1LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.unk80 = gFont1LatinGlyphWidths[glyphId]; + gUnknown_03002F90.width = gFont1LatinGlyphWidths[glyphId]; - if (gUnknown_03002F90.unk80 <= 8) + if (gUnknown_03002F90.width <= 8) { DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); @@ -2518,7 +1789,7 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); } - gUnknown_03002F90.unk81 = 15; + gUnknown_03002F90.height = 15; } } @@ -2537,6 +1808,6 @@ void DecompressGlyphFont9(u16 glyphId) glyphs = gFont9JapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF)); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); - gUnknown_03002F90.unk80 = 8; - gUnknown_03002F90.unk81 = 12; + gUnknown_03002F90.width = 8; + gUnknown_03002F90.height = 12; } diff --git a/gflib/text.h b/gflib/text.h index ba74cde6e1..723a2fc0e5 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -366,8 +366,8 @@ struct Struct_03002F90 u32 unk20[8]; u32 unk40[8]; u32 unk60[8]; - u8 unk80; - u8 unk81; + u8 width; + u8 height; }; extern TextFlags gTextFlags; diff --git a/src/unk_text_util_2.c b/src/unk_text_util_2.c index 2ff8c65070..22db293e93 100644 --- a/src/unk_text_util_2.c +++ b/src/unk_text_util_2.c @@ -135,7 +135,7 @@ u16 Font6Func(struct TextPrinter *textPrinter) } DecompressGlyphFont6(char_); CopyGlyphToWindow(textPrinter); - textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing; + textPrinter->printerTemplate.currentX += gUnknown_03002F90.width + textPrinter->printerTemplate.letterSpacing; return 0; case 1: if (TextPrinterWait(textPrinter)) @@ -210,8 +210,8 @@ static void DecompressGlyphFont6(u16 glyph) DecompressGlyphTile(glyphs + 0x8, (u16 *)(gUnknown_03002F90.unk20)); DecompressGlyphTile(glyphs + 0x80, (u16 *)(gUnknown_03002F90.unk40)); DecompressGlyphTile(glyphs + 0x88, (u16 *)(gUnknown_03002F90.unk60)); - gUnknown_03002F90.unk80 = 0x10; - gUnknown_03002F90.unk81 = 0x10; + gUnknown_03002F90.width = 0x10; + gUnknown_03002F90.height = 0x10; } u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese) From 03f46ff23a1f0497711786ed61d23e06039a7ee0 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Wed, 21 Oct 2020 04:41:57 -0400 Subject: [PATCH 050/177] re-match battle_anim_water functions (from #1136) --- src/battle_anim_water.c | 425 ++-------------------------------------- 1 file changed, 18 insertions(+), 407 deletions(-) diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index d7a022d1a8..2bb90e5850 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -797,11 +797,15 @@ static void AnimSmallBubblePair_Step(struct Sprite *sprite) DestroyAnimSprite(sprite); } -#ifdef NONMATCHING void AnimTask_CreateSurfWave(u8 taskId) { struct BattleAnimBgData animBg; u8 taskId2; + u16 *x; + u16 *y; + + x = &gBattle_BG1_X; + y = &gBattle_BG1_Y; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); @@ -832,30 +836,30 @@ void AnimTask_CreateSurfWave(u8 taskId) gTasks[taskId2].data[2] = 0x1000; if (IsContest()) { - gBattle_BG1_X = -80; - gBattle_BG1_Y = -48; + *x = -80; + *y = -48; gTasks[taskId].data[0] = 2; gTasks[taskId].data[1] = 1; gTasks[taskId2].data[3] = 0; } else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) { - gBattle_BG1_X = -224; - gBattle_BG1_Y = 256; + *x = -224; + *y = 256; gTasks[taskId].data[0] = 2; gTasks[taskId].data[1] = -1; gTasks[taskId2].data[3] = 1; } else { - gBattle_BG1_X = 0; - gBattle_BG1_Y = -48; + *x = 0; + *y = -48; gTasks[taskId].data[0] = -2; gTasks[taskId].data[1] = 1; gTasks[taskId2].data[3] = 0; } - SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); - SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + SetGpuReg(REG_OFFSET_BG1HOFS, *x); + SetGpuReg(REG_OFFSET_BG1VOFS, *y); if (gTasks[taskId2].data[3] == 0) { gTasks[taskId2].data[4] = 48; @@ -869,235 +873,7 @@ void AnimTask_CreateSurfWave(u8 taskId) gTasks[taskId].data[6] = 1; gTasks[taskId].func = AnimTask_CreateSurfWave_Step1; } -#else -NAKED -void AnimTask_CreateSurfWave(u8 taskId) -{ - asm_unified("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x10\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - ldr r1, =0x00003f42\n\ - movs r0, 0x50\n\ - bl SetGpuReg\n\ - movs r1, 0x80\n\ - lsls r1, 5\n\ - movs r0, 0x52\n\ - bl SetGpuReg\n\ - movs r0, 0x1\n\ - movs r1, 0x4\n\ - movs r2, 0x1\n\ - bl SetAnimBgAttribute\n\ - movs r0, 0x1\n\ - movs r1, 0\n\ - movs r2, 0x1\n\ - bl SetAnimBgAttribute\n\ - mov r0, sp\n\ - bl sub_80A6B30\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _081079E0\n\ - movs r0, 0x1\n\ - movs r1, 0x3\n\ - movs r2, 0x1\n\ - bl SetAnimBgAttribute\n\ - ldr r0, =gBattleAnimAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _081079D0\n\ - mov r0, sp\n\ - ldrb r0, [r0, 0x9]\n\ - ldr r1, =gBattleAnimBgTilemap_SurfOpponent\n\ - bl AnimLoadCompressedBgTilemap\n\ - b _081079EA\n\ - .pool\n\ -_081079D0:\n\ - mov r0, sp\n\ - ldrb r0, [r0, 0x9]\n\ - ldr r1, =gBattleAnimBgTilemap_SurfPlayer\n\ - bl AnimLoadCompressedBgTilemap\n\ - b _081079EA\n\ - .pool\n\ -_081079E0:\n\ - ldr r1, =gBattleAnimBgTilemap_SurfContest\n\ - mov r0, sp\n\ - movs r2, 0x1\n\ - bl AnimLoadCompressedBgTilemapHandleContest\n\ -_081079EA:\n\ - mov r0, sp\n\ - ldrb r0, [r0, 0x9]\n\ - ldr r1, =gBattleAnimBgImage_Surf\n\ - mov r2, sp\n\ - ldrh r2, [r2, 0xA]\n\ - bl AnimLoadCompressedBgGfx\n\ - ldr r0, =gBattleAnimArgs\n\ - movs r1, 0\n\ - ldrsh r0, [r0, r1]\n\ - cmp r0, 0\n\ - bne _08107A24\n\ - ldr r0, =gBattleAnimBgPalette_Surf\n\ - mov r1, sp\n\ - ldrb r1, [r1, 0x8]\n\ - lsls r1, 4\n\ - movs r2, 0x20\n\ - bl LoadCompressedPalette\n\ - b _08107A32\n\ - .pool\n\ -_08107A24:\n\ - ldr r0, =gBattleAnimBackgroundImageMuddyWater_Pal\n\ - mov r1, sp\n\ - ldrb r1, [r1, 0x8]\n\ - lsls r1, 4\n\ - movs r2, 0x20\n\ - bl LoadCompressedPalette\n\ -_08107A32:\n\ - ldr r0, =AnimTask_SurfWaveScanlineEffect\n\ - ldr r4, =gTasks\n\ - mov r2, r10\n\ - lsls r5, r2, 2\n\ - adds r1, r5, r2\n\ - lsls r1, 3\n\ - adds r6, r1, r4\n\ - ldrb r1, [r6, 0x7]\n\ - adds r1, 0x1\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - bl CreateTask\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - movs r0, 0\n\ - mov r9, r0\n\ - mov r1, r8\n\ - strh r1, [r6, 0x26]\n\ - mov r2, r8\n\ - lsls r0, r2, 2\n\ - add r0, r8\n\ - lsls r0, 3\n\ - adds r7, r0, r4\n\ - mov r0, r9\n\ - strh r0, [r7, 0x8]\n\ - movs r0, 0x80\n\ - lsls r0, 5\n\ - strh r0, [r7, 0xA]\n\ - strh r0, [r7, 0xC]\n\ - bl IsContest\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0\n\ - beq _08107AB4\n\ - ldr r1, =0x0000ffb0\n\ - adds r0, r1, 0\n\ - ldr r2, =gBattle_BG1_X\n\ - strh r0, [r2]\n\ - adds r1, 0x20\n\ - adds r0, r1, 0\n\ - ldr r2, =gBattle_BG1_Y\n\ - strh r0, [r2]\n\ - movs r0, 0x2\n\ - strh r0, [r6, 0x8]\n\ - movs r0, 0x1\n\ - strh r0, [r6, 0xA]\n\ - mov r0, r9\n\ - strh r0, [r7, 0xE]\n\ - b _08107B0E\n\ - .pool\n\ -_08107AB4:\n\ - ldr r0, =gBattleAnimAttacker\n\ - ldrb r0, [r0]\n\ - bl GetBattlerSide\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - cmp r1, 0x1\n\ - bne _08107AF8\n\ - ldr r2, =0x0000ff20\n\ - adds r0, r2, 0\n\ - ldr r2, =gBattle_BG1_X\n\ - strh r0, [r2]\n\ - movs r2, 0x80\n\ - lsls r2, 1\n\ - adds r0, r2, 0\n\ - ldr r2, =gBattle_BG1_Y\n\ - strh r0, [r2]\n\ - movs r0, 0x2\n\ - strh r0, [r6, 0x8]\n\ - ldr r0, =0x0000ffff\n\ - strh r0, [r6, 0xA]\n\ - strh r1, [r7, 0xE]\n\ - b _08107B0E\n\ - .pool\n\ -_08107AF8:\n\ - ldr r0, =gBattle_BG1_X\n\ - strh r4, [r0]\n\ - ldr r1, =0x0000ffd0\n\ - adds r0, r1, 0\n\ - ldr r2, =gBattle_BG1_Y\n\ - strh r0, [r2]\n\ - ldr r0, =0x0000fffe\n\ - strh r0, [r6, 0x8]\n\ - movs r0, 0x1\n\ - strh r0, [r6, 0xA]\n\ - strh r4, [r7, 0xE]\n\ -_08107B0E:\n\ - ldr r0, =gBattle_BG1_X\n\ - ldrh r1, [r0]\n\ - movs r0, 0x14\n\ - bl SetGpuReg\n\ - ldr r2, =gBattle_BG1_Y\n\ - ldrh r1, [r2]\n\ - movs r0, 0x16\n\ - bl SetGpuReg\n\ - ldr r1, =gTasks\n\ - mov r2, r8\n\ - lsls r0, r2, 2\n\ - add r0, r8\n\ - lsls r0, 3\n\ - adds r1, r0, r1\n\ - movs r2, 0xE\n\ - ldrsh r0, [r1, r2]\n\ - cmp r0, 0\n\ - bne _08107B54\n\ - movs r0, 0x30\n\ - strh r0, [r1, 0x10]\n\ - movs r0, 0x70\n\ - b _08107B58\n\ - .pool\n\ -_08107B54:\n\ - movs r0, 0\n\ - strh r0, [r1, 0x10]\n\ -_08107B58:\n\ - strh r0, [r1, 0x12]\n\ - ldr r1, =gTasks\n\ - mov r2, r10\n\ - adds r0, r5, r2\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - movs r1, 0x1\n\ - strh r1, [r0, 0x14]\n\ - ldr r1, =AnimTask_CreateSurfWave_Step1\n\ - str r1, [r0]\n\ - add sp, 0x10\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n"); -} -#endif -#ifdef NONMATCHING static void AnimTask_CreateSurfWave_Step1(u8 taskId) { struct BattleAnimBgData animBg; @@ -1105,7 +881,6 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) u16 rgbBuffer; u16 *BGptrX = &gBattle_BG1_X; u16 *BGptrY = &gBattle_BG1_Y; - s16 unkUse; u32 palOffset; u16 palNum; @@ -1118,9 +893,7 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7]; for (i = 6; i != 0; i--) { - palNum = animBg.paletteId * 16; - palOffset = 1 + i; - gPlttBufferFaded[palNum + palOffset] = gPlttBufferFaded[palNum + palOffset - 1]; + gPlttBufferFaded[animBg.paletteId * 16 + 1 + i] = gPlttBufferFaded[animBg.paletteId * 16 + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason } gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer; gTasks[taskId].data[5] = 0; @@ -1128,16 +901,15 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) if (++gTasks[taskId].data[6] > 1) { gTasks[taskId].data[6] = 0; - unkUse = ++gTasks[taskId].data[3]; - if (unkUse <= 13) + if (++gTasks[taskId].data[3] <= 13) { - gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256); + gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[3]) | ((16 - gTasks[taskId].data[3]) << 8)); gTasks[taskId].data[4]++; } if (gTasks[taskId].data[3] > 54) { - unkUse = --gTasks[taskId].data[4]; - gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256); + gTasks[taskId].data[4]--; + gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[4]) | ((16 - gTasks[taskId].data[4]) << 8)); } } if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F)) @@ -1146,167 +918,6 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) gTasks[taskId].func = AnimTask_CreateSurfWave_Step2; } } -#else -NAKED -static void AnimTask_CreateSurfWave_Step1(u8 taskId) -{ - asm_unified("push {r4-r7,lr}\n\ - sub sp, 0x10\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldr r1, =gBattle_BG1_X\n\ - ldr r2, =gBattle_BG1_Y\n\ - ldr r0, =gTasks\n\ - lsls r4, r5, 2\n\ - adds r4, r5\n\ - lsls r4, 3\n\ - adds r4, r0\n\ - ldrh r0, [r4, 0x8]\n\ - ldrh r3, [r1]\n\ - adds r0, r3\n\ - strh r0, [r1]\n\ - ldrh r0, [r4, 0xA]\n\ - ldrh r1, [r2]\n\ - adds r0, r1\n\ - strh r0, [r2]\n\ - mov r0, sp\n\ - bl sub_80A6B30\n\ - ldrh r0, [r4, 0xA]\n\ - ldrh r3, [r4, 0xC]\n\ - adds r0, r3\n\ - strh r0, [r4, 0xC]\n\ - ldrh r0, [r4, 0x12]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x12]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x4\n\ - bne _08107C18\n\ - ldr r1, =gPlttBufferFaded\n\ - mov r0, sp\n\ - ldrb r0, [r0, 0x8]\n\ - lsls r0, 4\n\ - adds r0, 0x7\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r6, [r0]\n\ - movs r2, 0x6\n\ - adds r7, r1, 0\n\ - adds r3, r7, 0\n\ - mov r4, sp\n\ -_08107BDE:\n\ - ldrb r0, [r4, 0x8]\n\ - lsls r0, 4\n\ - adds r1, r2, 0x1\n\ - adds r0, r1\n\ - lsls r1, r0, 1\n\ - adds r1, r3\n\ - subs r0, 0x1\n\ - lsls r0, 1\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - strh r0, [r1]\n\ - subs r0, r2, 0x1\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - cmp r2, 0\n\ - bne _08107BDE\n\ - mov r0, sp\n\ - ldrb r0, [r0, 0x8]\n\ - lsls r0, 4\n\ - adds r0, 0x1\n\ - lsls r0, 1\n\ - adds r0, r7\n\ - strh r6, [r0]\n\ - ldr r1, =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - strh r2, [r0, 0x12]\n\ -_08107C18:\n\ - ldr r1, =gTasks\n\ - lsls r2, r5, 2\n\ - adds r0, r2, r5\n\ - lsls r0, 3\n\ - adds r3, r0, r1\n\ - ldrh r0, [r3, 0x14]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0x14]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - adds r4, r1, 0\n\ - adds r6, r2, 0\n\ - cmp r0, 0x1\n\ - ble _08107C86\n\ - movs r0, 0\n\ - strh r0, [r3, 0x14]\n\ - ldrh r0, [r3, 0xE]\n\ - adds r2, r0, 0x1\n\ - strh r2, [r3, 0xE]\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - cmp r0, 0xD\n\ - bgt _08107C62\n\ - movs r1, 0x26\n\ - ldrsh r0, [r3, r1]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 3\n\ - adds r1, r4\n\ - movs r0, 0x10\n\ - subs r0, r2\n\ - lsls r0, 8\n\ - orrs r2, r0\n\ - strh r2, [r1, 0xA]\n\ - ldrh r0, [r3, 0x10]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0x10]\n\ -_08107C62:\n\ - movs r1, 0xE\n\ - ldrsh r0, [r3, r1]\n\ - cmp r0, 0x36\n\ - ble _08107C86\n\ - ldrh r2, [r3, 0x10]\n\ - subs r2, 0x1\n\ - strh r2, [r3, 0x10]\n\ - movs r1, 0x26\n\ - ldrsh r0, [r3, r1]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 3\n\ - adds r1, r4\n\ - movs r0, 0x10\n\ - subs r0, r2\n\ - lsls r0, 8\n\ - orrs r2, r0\n\ - strh r2, [r1, 0xA]\n\ -_08107C86:\n\ - adds r0, r6, r5\n\ - lsls r0, 3\n\ - adds r2, r0, r4\n\ - movs r3, 0x26\n\ - ldrsh r1, [r2, r3]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - adds r0, r4\n\ - ldrh r0, [r0, 0xA]\n\ - movs r3, 0x1F\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - bne _08107CA8\n\ - strh r3, [r2, 0x8]\n\ - ldr r0, =AnimTask_CreateSurfWave_Step2\n\ - str r0, [r2]\n\ -_08107CA8:\n\ - add sp, 0x10\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n"); -} -#endif static void AnimTask_CreateSurfWave_Step2(u8 taskId) { From 2239f3aa6068925f04350b3089714dc8e1eafa9a Mon Sep 17 00:00:00 2001 From: Thomas Winwood Date: Wed, 21 Oct 2020 20:07:34 +0100 Subject: [PATCH 051/177] Eliminate goto in ItemUseCB_Medicine --- src/party_menu.c | 87 +++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index 1d49523756..862302229f 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4325,9 +4325,13 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) u16 hp = 0; struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 item = gSpecialVar_ItemId; - bool8 canHeal; + bool8 canHeal, cannotUse; - if (NotUsingHPEVItemOnShedinja(mon, item)) + if (NotUsingHPEVItemOnShedinja(mon, item) == FALSE) + { + cannotUse = TRUE; + } + else { canHeal = IsHPRecoveryItem(item); if (canHeal == TRUE) @@ -4336,51 +4340,50 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) if (hp == GetMonData(mon, MON_DATA_MAX_HP)) canHeal = FALSE; } - if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0)) - { - iTriedHonestlyIDid: - gPartyMenuUseExitCallback = FALSE; - PlaySE(SE_SELECT); - DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); - ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = task; - return; - } + cannotUse = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0); } - else + + if (cannotUse != FALSE) { - goto iTriedHonestlyIDid; //TODO: resolve this goto - } - gPartyMenuUseExitCallback = TRUE; - if (!IsItemFlute(item)) - { - PlaySE(SE_USE_ITEM); - if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM) - RemoveBagItem(item, 1); - } - else - { - PlaySE(SE_GLASS_FLUTE); - } - SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]); - if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible) - DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1); - if (canHeal == TRUE) - { - if (hp == 0) - AnimatePartySlot(gPartyMenu.slotId, 1); - PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage); - ResetHPTaskData(taskId, 0, hp); - return; - } - else - { - GetMonNickname(mon, gStringVar1); - GetMedicineItemEffectMessage(item); - DisplayPartyMenuMessage(gStringVar4, TRUE); + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); ScheduleBgCopyTilemapToVram(2); gTasks[taskId].func = task; } + else + { + gPartyMenuUseExitCallback = TRUE; + if (!IsItemFlute(item)) + { + PlaySE(SE_USE_ITEM); + if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM) + RemoveBagItem(item, 1); + } + else + { + PlaySE(SE_GLASS_FLUTE); + } + SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]); + if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible) + DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1); + if (canHeal == TRUE) + { + if (hp == 0) + AnimatePartySlot(gPartyMenu.slotId, 1); + PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage); + ResetHPTaskData(taskId, 0, hp); + return; + } + else + { + GetMonNickname(mon, gStringVar1); + GetMedicineItemEffectMessage(item); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = task; + } + } } static void Task_DisplayHPRestoredMessage(u8 taskId) From 2945a3a8458f063462089b148d5d80527c3f1010 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Thu, 22 Oct 2020 05:03:16 -0400 Subject: [PATCH 052/177] re-match GetConnectedChildStrength --- src/link_rfu_3.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index db1ba8b43c..b347d8cc79 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -637,7 +637,10 @@ static u8 GetConnectedChildStrength(u8 maxFlags) if (flags & 1) { if (maxFlags == flagCount + 1) + { return gRfuLinkStatus->strength[i]; + break; + } flagCount++; } } From 0bca313b41e44d2c63c39a61014a1eb5c67a8b5c Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Thu, 22 Oct 2020 05:04:35 -0400 Subject: [PATCH 053/177] remove naked asm (oops) --- src/link_rfu_3.c | 71 ------------------------------------------------ 1 file changed, 71 deletions(-) diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index b347d8cc79..c6344f5036 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -623,7 +623,6 @@ static void ASCIIToPkmnStr(u8 *pkmnStr, const u8 *asciiStr) pkmnStr[i] = EOS; } -#ifdef NONMATCHING static u8 GetConnectedChildStrength(u8 maxFlags) { u8 flagCount = 0; @@ -655,76 +654,6 @@ static u8 GetConnectedChildStrength(u8 maxFlags) } return 0; } -#else -NAKED -static u8 GetConnectedChildStrength(u8 maxFlags) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tmovs r6, 0\n" - "\tldr r0, =gRfuLinkStatus\n" - "\tldr r4, [r0]\n" - "\tldrb r2, [r4, 0x2]\n" - "\tldrb r1, [r4]\n" - "\tadds r7, r0, 0\n" - "\tcmp r1, 0x1\n" - "\tbne _0800DD72\n" - "\tmovs r3, 0\n" - "\tands r1, r2\n" - "\tcmp r1, 0\n" - "\tbeq _0800DD4E\n" - "\tcmp r5, 0x1\n" - "\tbne _0800DD48\n" - "\tldrb r0, [r4, 0xA]\n" - "\tb _0800DD8C\n" - "\t.pool\n" - "_0800DD48:\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "_0800DD4E:\n" - "\tlsrs r2, 1\n" - "\tadds r0, r3, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x3\n" - "\tbhi _0800DD8A\n" - "\tmovs r0, 0x1\n" - "\tands r0, r2\n" - "\tcmp r0, 0\n" - "\tbeq _0800DD4E\n" - "\tadds r0, r6, 0x1\n" - "\tcmp r5, r0\n" - "\tbne _0800DD48\n" - "_0800DD68:\n" - "\tldr r0, [r7]\n" - "\tadds r0, 0xA\n" - "\tadds r0, r3\n" - "\tldrb r0, [r0]\n" - "\tb _0800DD8C\n" - "_0800DD72:\n" - "\tmovs r3, 0\n" - "\tmovs r1, 0x1\n" - "_0800DD76:\n" - "\tadds r0, r2, 0\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbne _0800DD68\n" - "\tlsrs r2, 1\n" - "\tadds r0, r3, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x3\n" - "\tbls _0800DD76\n" - "_0800DD8A:\n" - "\tmovs r0, 0\n" - "_0800DD8C:\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); -} -#endif void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders) { From 9c4dddf870e4420fb7c8619071d7588b5b703367 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Thu, 22 Oct 2020 05:37:51 -0400 Subject: [PATCH 054/177] re-match _InitContestMonPixels (from #1153) --- src/contest_painting.c | 108 +---------------------------------------- 1 file changed, 1 insertion(+), 107 deletions(-) diff --git a/src/contest_painting.c b/src/contest_painting.c index 5dd4a70a53..6a902d446f 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -384,8 +384,6 @@ static void InitContestMonPixels(u16 species, u8 whichSprite) } } -#ifdef NONMATCHING -// functionally equivalent. static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]) { u16 tileY, tileX, pixelY, pixelX; @@ -399,8 +397,7 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels) { for (pixelX = 0; pixelX < 8; pixelX++) { - int offset = 32 * (8 * tileY + tileX) + (pixelY * 4 + pixelX / 2); - colorIndex = spriteGfx[offset]; + colorIndex = spriteGfx[32 * (tileY * 8 + tileX) + (pixelY << 2) + (pixelX >> 1)]; if (pixelX & 1) colorIndex >>= 4; else @@ -415,109 +412,6 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels) } } } -#else -NAKED -static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0xC\n\ - mov r10, r0\n\ - mov r9, r1\n\ - str r2, [sp]\n\ - movs r0, 0\n\ -_08130394:\n\ - movs r3, 0\n\ - adds r1, r0, 0x1\n\ - str r1, [sp, 0x4]\n\ - lsls r0, 3\n\ - str r0, [sp, 0x8]\n\ -_0813039E:\n\ - movs r1, 0\n\ - adds r2, r3, 0x1\n\ - mov r8, r2\n\ - ldr r7, [sp, 0x8]\n\ - adds r0, r7, r3\n\ - lsls r0, 5\n\ - mov r12, r0\n\ - lsls r4, r3, 3\n\ -_081303AE:\n\ - movs r3, 0\n\ - lsls r0, r1, 2\n\ - adds r6, r1, 0x1\n\ - mov r2, r12\n\ - adds r5, r2, r0\n\ - ldr r7, [sp, 0x8]\n\ - adds r0, r7, r1\n\ - lsls r0, 7\n\ - ldr r1, [sp]\n\ - adds r2, r0, r1\n\ -_081303C2:\n\ - lsrs r0, r3, 1\n\ - adds r0, r5, r0\n\ - add r0, r10\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r3\n\ - cmp r0, 0\n\ - beq _081303D6\n\ - lsrs r1, 4\n\ - b _081303DA\n\ -_081303D6:\n\ - movs r0, 0xF\n\ - ands r1, r0\n\ -_081303DA:\n\ - cmp r1, 0\n\ - bne _081303EC\n\ - adds r0, r4, r3\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - movs r7, 0x80\n\ - lsls r7, 8\n\ - adds r1, r7, 0\n\ - b _081303F8\n\ -_081303EC:\n\ - adds r0, r4, r3\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - lsls r1, 1\n\ - add r1, r9\n\ - ldrh r1, [r1]\n\ -_081303F8:\n\ - strh r1, [r0]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0x7\n\ - bls _081303C2\n\ - lsls r0, r6, 16\n\ - lsrs r1, r0, 16\n\ - cmp r1, 0x7\n\ - bls _081303AE\n\ - mov r1, r8\n\ - lsls r0, r1, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0x7\n\ - bls _0813039E\n\ - ldr r2, [sp, 0x4]\n\ - lsls r0, r2, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x7\n\ - bls _08130394\n\ - add sp, 0xC\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0"); -} -#endif #define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)]) From 64ba8c806111ab6baa6bde485f64925c07378f89 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Thu, 22 Oct 2020 05:45:53 -0400 Subject: [PATCH 055/177] port fakematch fixes from #1155 --- src/battle_main.c | 6 +----- src/link_rfu_2.c | 12 ++++++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 0c3e84c1ea..d2763b0000 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4962,11 +4962,7 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) TryClearRageStatuses(); gCurrentTurnActionNumber = 0; -{ - // something stupid needed to match - u8 zero; - gCurrentActionFuncId = gActionsByTurnOrder[(zero = 0)]; -} + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; gDynamicBasePower = 0; gBattleStruct->dynamicMoveType = 0; gBattleMainFunc = RunTurnActionsFunctions; diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 6a2605c96e..7f3bfa20da 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -923,7 +923,7 @@ static bool32 RfuProcessEnqueuedRecvBlock(void) static void HandleSendFailure(u8 unused, u32 flags) { - s32 i, j; + s32 i, j, temp; const u8 *r10 = Rfu.sendBlock.payload; for (i = 0; i < Rfu.sendBlock.count; i++) @@ -933,14 +933,14 @@ static void HandleSendFailure(u8 unused, u32 flags) sResendBlock16[0] = RFUCMD_0x8900 | i; for (j = 0; j < 7; j++) { - sResendBlock16[j + 1] = (r10[12 * i + (j << 1) + 1] << 8) | r10[12 * i + (j << 1) + 0]; + temp = j << 1; + sResendBlock16[j + 1] = (r10[12 * i + temp + 1] << 8) | r10[12 * i + temp + 0]; } for (j = 0; j < 7; j++) { - sResendBlock8[2 * j + 1] = sResendBlock16[j] >> 8; - sResendBlock8[2 * j + 0] = sResendBlock16[j]; - - j++;j--; // Needed to match; + temp = j << 1; + sResendBlock8[temp + 1] = sResendBlock16[j] >> 8; + sResendBlock8[temp + 0] = sResendBlock16[j]; } RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8); Rfu.sendBlock.failedFlags |= (1 << i); From 90211248af2f02aa696b38fbf77ddfd2d2950312 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 23 Oct 2020 20:47:10 -0400 Subject: [PATCH 056/177] re-match Cmd_unknown_24 (from #1140) changes to data structs are necessary. other things that look unnecessary, like the order of operands, are also necessary. fuck this function. --- include/battle.h | 18 +- include/constants/battle.h | 2 +- src/battle_script_commands.c | 315 ++--------------------------------- 3 files changed, 21 insertions(+), 314 deletions(-) diff --git a/include/battle.h b/include/battle.h index 6dddfd197a..5284040f10 100644 --- a/include/battle.h +++ b/include/battle.h @@ -132,14 +132,14 @@ struct ProtectStruct struct SpecialStatus { - u8 statLowered:1; - u8 lightningRodRedirected:1; - u8 restoredBattlerSprite: 1; - u8 intimidatedMon:1; - u8 traced:1; - u8 ppNotAffectedByPressure:1; - u8 flag40:1; - u8 focusBanded:1; + u32 statLowered:1; + u32 lightningRodRedirected:1; + u32 restoredBattlerSprite: 1; + u32 intimidatedMon:1; + u32 traced:1; + u32 ppNotAffectedByPressure:1; + u32 flag40:1; + u32 focusBanded:1; s32 dmg; s32 physicalDmg; s32 specialDmg; @@ -254,7 +254,7 @@ struct BattleResults u16 playerMon2Species; // 0x26 u16 caughtMonSpecies; // 0x28 u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A - u8 filler35[1]; // 0x35 + u8 filler35; // 0x35 u8 catchAttempts[11]; // 0x36 }; diff --git a/include/constants/battle.h b/include/constants/battle.h index 8b860e3848..fa8f422c4b 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -186,7 +186,7 @@ #define HITMARKER_x4000000 (1 << 26) #define HITMARKER_CHARGING (1 << 27) #define HITMARKER_FAINTED(battler) (gBitTable[battler] << 28) -#define HITMARKER_FAINTED2(battler) (1 << (28 + battler)) +#define HITMARKER_FAINTED2(battler) ((1 << 28) << battler) // Per-side statuses that affect an entire party #define SIDE_STATUS_REFLECT (1 << 0) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9cff332cab..512830900f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3489,7 +3489,6 @@ static void Cmd_getexp(void) } } -#ifdef NONMATCHING static void Cmd_unknown_24(void) { u16 HP_count = 0; @@ -3520,8 +3519,10 @@ static void Cmd_unknown_24(void) if (HP_count == 0) gBattleOutcome |= B_OUTCOME_LOST; + + HP_count = 0; - for (HP_count = 0, i = 0; i < PARTY_SIZE; i++) + for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & gBitTable[i]))) @@ -3535,19 +3536,20 @@ static void Cmd_unknown_24(void) if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))) { - s32 foundPlayer; + s32 foundPlayer = 0; s32 foundOpponent; - // Impossible to decompile loops. - for (foundPlayer = 0, i = 0; i < gBattlersCount; i += 2) + for (i = 0; i < gBattlersCount; i += 2) { - if (HITMARKER_FAINTED2(i) & gHitMarker && !gSpecialStatuses[i].flag40) + if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) foundPlayer++; } + + foundOpponent = 0; - for (foundOpponent = 0, i = 1; i < gBattlersCount; i += 2) + for (i = 1; i < gBattlersCount; i += 2) { - if (HITMARKER_FAINTED2(i) & gHitMarker && !gSpecialStatuses[i].flag40) + if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) foundOpponent++; } @@ -3571,301 +3573,6 @@ static void Cmd_unknown_24(void) gBattlescriptCurrInstr += 5; } } -#else -NAKED -static void Cmd_unknown_24(void) -{ - asm("\n\ - .syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - movs r6, 0\n\ - ldr r0, =gBattleControllerExecFlags\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _0804ACE2\n\ - b _0804AF22\n\ - _0804ACE2:\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 15\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0804AD48\n\ - ldr r0, =gPartnerTrainerId\n\ - ldrh r1, [r0]\n\ - ldr r0, =0x00000c03\n\ - cmp r1, r0\n\ - bne _0804AD48\n\ - movs r5, 0\n\ - _0804ACFC:\n\ - movs r0, 0x64\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r0, =gPlayerParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0804AD2C\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0804AD2C\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - adds r0, r6, r0\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - _0804AD2C:\n\ - adds r5, 0x1\n\ - cmp r5, 0x2\n\ - ble _0804ACFC\n\ - b _0804ADA8\n\ - .pool\n\ - _0804AD48:\n\ - movs r5, 0\n\ - _0804AD4A:\n\ - movs r0, 0x64\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r0, =gPlayerParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0804ADA2\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0804ADA2\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 11\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0804AD94\n\ - ldr r0, =gBattleStruct\n\ - ldr r0, [r0]\n\ - movs r1, 0xA8\n\ - lsls r1, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - ldr r2, =gBitTable\n\ - lsls r0, r5, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _0804ADA2\n\ - _0804AD94:\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - adds r0, r6, r0\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - _0804ADA2:\n\ - adds r5, 0x1\n\ - cmp r5, 0x5\n\ - ble _0804AD4A\n\ - _0804ADA8:\n\ - cmp r6, 0\n\ - bne _0804ADB6\n\ - ldr r0, =gBattleOutcome\n\ - ldrb r1, [r0]\n\ - movs r2, 0x2\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - _0804ADB6:\n\ - movs r6, 0\n\ - movs r5, 0\n\ - _0804ADBA:\n\ - movs r0, 0x64\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r0, =gEnemyParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0804AE10\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0804AE10\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 11\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0804AE02\n\ - ldr r0, =gBattleStruct\n\ - ldr r0, [r0]\n\ - ldr r1, =0x000002a1\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - ldr r2, =gBitTable\n\ - lsls r0, r5, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _0804AE10\n\ - _0804AE02:\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - adds r0, r6, r0\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - _0804AE10:\n\ - adds r5, 0x1\n\ - cmp r5, 0x5\n\ - ble _0804ADBA\n\ - ldr r2, =gBattleOutcome\n\ - cmp r6, 0\n\ - bne _0804AE24\n\ - ldrb r0, [r2]\n\ - movs r1, 0x1\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - _0804AE24:\n\ - ldrb r0, [r2]\n\ - cmp r0, 0\n\ - bne _0804AF1A\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r1, [r0]\n\ - ldr r2, =0x02000002\n\ - ands r1, r2\n\ - mov r8, r0\n\ - cmp r1, 0\n\ - beq _0804AF1A\n\ - movs r3, 0\n\ - movs r5, 0\n\ - ldr r0, =gBattlersCount\n\ - ldrb r1, [r0]\n\ - mov r12, r0\n\ - ldr r7, =gBattlescriptCurrInstr\n\ - cmp r3, r1\n\ - bge _0804AE70\n\ - ldr r0, =gHitMarker\n\ - movs r6, 0x80\n\ - lsls r6, 21\n\ - ldr r4, [r0]\n\ - adds r2, r1, 0\n\ - ldr r1, =gSpecialStatuses\n\ - _0804AE54:\n\ - adds r0, r6, 0\n\ - lsls r0, r5\n\ - ands r0, r4\n\ - cmp r0, 0\n\ - beq _0804AE68\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _0804AE68\n\ - adds r3, 0x1\n\ - _0804AE68:\n\ - adds r1, 0x28\n\ - adds r5, 0x2\n\ - cmp r5, r2\n\ - blt _0804AE54\n\ - _0804AE70:\n\ - movs r2, 0\n\ - movs r5, 0x1\n\ - mov r4, r12\n\ - ldrb r1, [r4]\n\ - cmp r5, r1\n\ - bge _0804AEAA\n\ - ldr r0, =gHitMarker\n\ - movs r4, 0x80\n\ - lsls r4, 21\n\ - mov r12, r4\n\ - ldr r6, [r0]\n\ - ldr r0, =gSpecialStatuses\n\ - adds r4, r1, 0\n\ - adds r1, r0, 0\n\ - adds r1, 0x14\n\ - _0804AE8E:\n\ - mov r0, r12\n\ - lsls r0, r5\n\ - ands r0, r6\n\ - cmp r0, 0\n\ - beq _0804AEA2\n\ - ldrb r0, [r1]\n\ - lsls r0, 25\n\ - cmp r0, 0\n\ - blt _0804AEA2\n\ - adds r2, 0x1\n\ - _0804AEA2:\n\ - adds r1, 0x28\n\ - adds r5, 0x2\n\ - cmp r5, r4\n\ - blt _0804AE8E\n\ - _0804AEAA:\n\ - mov r1, r8\n\ - ldr r0, [r1]\n\ - movs r1, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0804AEF0\n\ - adds r0, r2, r3\n\ - cmp r0, 0x1\n\ - bgt _0804AEF8\n\ - b _0804AF12\n\ - .pool\n\ - _0804AEF0:\n\ - cmp r2, 0\n\ - beq _0804AF12\n\ - cmp r3, 0\n\ - beq _0804AF12\n\ - _0804AEF8:\n\ - ldr r2, [r7]\n\ - ldrb r1, [r2, 0x1]\n\ - ldrb r0, [r2, 0x2]\n\ - lsls r0, 8\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 16\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 24\n\ - adds r1, r0\n\ - str r1, [r7]\n\ - b _0804AF22\n\ - _0804AF12:\n\ - ldr r0, [r7]\n\ - adds r0, 0x5\n\ - str r0, [r7]\n\ - b _0804AF22\n\ - _0804AF1A:\n\ - ldr r1, =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x5\n\ - str r0, [r1]\n\ - _0804AF22:\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided"); -} - -#endif // NONMATCHING static void MoveValuesCleanUp(void) { @@ -5832,7 +5539,7 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) { u32 i = 0; u32 lastMonLevel = 0; - u32 moneyReward = 0; + u32 moneyReward; if (trainerId == TRAINER_SECRET_BASE) { From 16cf49ffbe9643c75c810a545917780e74a9df75 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 23 Oct 2020 20:59:27 -0400 Subject: [PATCH 057/177] re-match GetTypeEffectivenessPoints (from #1177) --- src/battle_dome.c | 257 ++-------------------------------------------- 1 file changed, 8 insertions(+), 249 deletions(-) diff --git a/src/battle_dome.c b/src/battle_dome.c index f2abe39d2f..d78b7f366c 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2731,9 +2731,6 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom) #define TYPE_x2 40 #define TYPE_x4 80 -// Functionally equivalent, while loop is impossible to match. -// arg2 is either 2, a personality, or an OTID -#ifdef NONMATCHING static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) { int defType1, defType2, defAbility, moveType; @@ -2762,13 +2759,15 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) i += 3; continue; } - else if (TYPE_EFFECT_ATK_TYPE(i) == moveType) + if (TYPE_EFFECT_ATK_TYPE(i) == moveType) { - // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard. - if (TYPE_EFFECT_DEF_TYPE(i) == defType1 && (defAbility != ABILITY_WONDER_GUARD || TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE * 2)) - typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; - if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2 && (defAbility != ABILITY_WONDER_GUARD || TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE * 2)) - typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; + // BUG: TYPE_x2 is not necessary and makes the condition always false if the ability is wonder guard. + if (TYPE_EFFECT_DEF_TYPE(i) == defType1) + if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) + typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; + if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) + if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) + typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; } i += 3; } @@ -2848,246 +2847,6 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) return typePower; } -#else -NAKED -static int GetTypeEffectivenessPoints(int move, int species, int arg2) -{ - asm_unified( - "push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x8\n\ - adds r3, r0, 0\n\ - adds r4, r1, 0\n\ - str r2, [sp]\n\ - movs r6, 0\n\ - movs r2, 0x14\n\ - cmp r3, 0\n\ - beq _0818FFF0\n\ - ldr r0, =0x0000ffff\n\ - cmp r3, r0\n\ - beq _0818FFF0\n\ - ldr r0, =gBattleMoves\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r3, r1, r0\n\ - ldrb r0, [r3, 0x1]\n\ - cmp r0, 0\n\ - bne _0818FFFC\n\ -_0818FFF0:\n\ - movs r0, 0\n\ - b _08190156\n\ - .pool\n\ -_0818FFFC:\n\ - ldr r1, =gBaseStats\n\ - lsls r0, r4, 3\n\ - subs r0, r4\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x6]\n\ - mov r10, r1\n\ - ldrb r1, [r0, 0x7]\n\ - mov r9, r1\n\ - ldrb r0, [r0, 0x16]\n\ - mov r8, r0\n\ - ldrb r3, [r3, 0x2]\n\ - str r3, [sp, 0x4]\n\ - cmp r0, 0x1A\n\ - bne _0819002C\n\ - cmp r3, 0x4\n\ - bne _0819002C\n\ - ldr r0, [sp]\n\ - cmp r0, 0x1\n\ - bne _081900AA\n\ - movs r2, 0x8\n\ - b _081900A4\n\ - .pool\n\ -_0819002C:\n\ - ldr r0, =gTypeEffectiveness\n\ - adds r1, r6, r0\n\ - ldrb r0, [r1]\n\ - ldr r7, =gTypeEffectiveness\n\ - cmp r0, 0xFF\n\ - beq _081900A4\n\ - adds r4, r1, 0\n\ -_0819003A:\n\ - ldrb r0, [r4]\n\ - cmp r0, 0xFE\n\ - beq _08190096\n\ - ldrb r0, [r4]\n\ - ldr r1, [sp, 0x4]\n\ - cmp r0, r1\n\ - bne _08190096\n\ - ldrb r0, [r4, 0x1]\n\ - adds r5, r6, 0x1\n\ - cmp r0, r10\n\ - bne _0819006C\n\ - adds r1, r6, 0x2\n\ - mov r0, r8\n\ - cmp r0, 0x19\n\ - bne _0819005E\n\ - ldrb r0, [r4, 0x2]\n\ - cmp r0, 0x28\n\ - bne _0819006C\n\ -_0819005E:\n\ - adds r0, r1, r7\n\ - ldrb r0, [r0]\n\ - muls r0, r2\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - adds r2, r0, 0\n\ -_0819006C:\n\ - adds r0, r5, r7\n\ - ldrb r0, [r0]\n\ - cmp r0, r9\n\ - bne _08190096\n\ - cmp r10, r9\n\ - beq _08190096\n\ - adds r1, r6, 0x2\n\ - mov r0, r8\n\ - cmp r0, 0x19\n\ - bne _08190088\n\ - adds r0, r1, r7\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x28\n\ - bne _08190096\n\ -_08190088:\n\ - adds r0, r1, r7\n\ - ldrb r0, [r0]\n\ - muls r0, r2\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - adds r2, r0, 0\n\ -_08190096:\n\ - adds r4, 0x3\n\ - adds r6, 0x3\n\ - ldr r1, =gTypeEffectiveness\n\ - adds r0, r6, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xFF\n\ - bne _0819003A\n\ -_081900A4:\n\ - ldr r0, [sp]\n\ - cmp r0, 0x1\n\ - beq _081900E0\n\ -_081900AA:\n\ - ldr r1, [sp]\n\ - cmp r1, 0x1\n\ - bgt _081900BC\n\ - cmp r1, 0\n\ - beq _081900C4\n\ - b _08190154\n\ - .pool\n\ -_081900BC:\n\ - ldr r0, [sp]\n\ - cmp r0, 0x2\n\ - beq _08190114\n\ - b _08190154\n\ -_081900C4:\n\ - cmp r2, 0xA\n\ - beq _08190146\n\ - cmp r2, 0xA\n\ - ble _08190146\n\ - cmp r2, 0x28\n\ - beq _0819014A\n\ - cmp r2, 0x28\n\ - bgt _081900DA\n\ - cmp r2, 0x14\n\ - beq _08190104\n\ - b _08190146\n\ -_081900DA:\n\ - cmp r2, 0x50\n\ - bne _08190146\n\ - b _08190100\n\ -_081900E0:\n\ - cmp r2, 0xA\n\ - beq _08190104\n\ - cmp r2, 0xA\n\ - bgt _081900F2\n\ - cmp r2, 0\n\ - beq _08190100\n\ - cmp r2, 0x5\n\ - beq _0819014A\n\ - b _08190146\n\ -_081900F2:\n\ - cmp r2, 0x28\n\ - beq _08190108\n\ - cmp r2, 0x28\n\ - ble _08190146\n\ - cmp r2, 0x50\n\ - beq _0819010E\n\ - b _08190146\n\ -_08190100:\n\ - movs r2, 0x8\n\ - b _08190154\n\ -_08190104:\n\ - movs r2, 0x2\n\ - b _08190154\n\ -_08190108:\n\ - movs r2, 0x2\n\ - negs r2, r2\n\ - b _08190154\n\ -_0819010E:\n\ - movs r2, 0x4\n\ - negs r2, r2\n\ - b _08190154\n\ -_08190114:\n\ - cmp r2, 0xA\n\ - beq _08190146\n\ - cmp r2, 0xA\n\ - bgt _08190126\n\ - cmp r2, 0\n\ - beq _0819013A\n\ - cmp r2, 0x5\n\ - beq _08190140\n\ - b _08190146\n\ -_08190126:\n\ - cmp r2, 0x28\n\ - beq _0819014E\n\ - cmp r2, 0x28\n\ - bgt _08190134\n\ - cmp r2, 0x14\n\ - beq _0819014A\n\ - b _08190146\n\ -_08190134:\n\ - cmp r2, 0x50\n\ - beq _08190152\n\ - b _08190146\n\ -_0819013A:\n\ - movs r2, 0x10\n\ - negs r2, r2\n\ - b _08190154\n\ -_08190140:\n\ - movs r2, 0x8\n\ - negs r2, r2\n\ - b _08190154\n\ -_08190146:\n\ - movs r2, 0\n\ - b _08190154\n\ -_0819014A:\n\ - movs r2, 0x4\n\ - b _08190154\n\ -_0819014E:\n\ - movs r2, 0xC\n\ - b _08190154\n\ -_08190152:\n\ - movs r2, 0x14\n\ -_08190154:\n\ - adds r0, r2, 0\n\ -_08190156:\n\ - add sp, 0x8\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1"); -} -#endif // NONMATCHING // Duplicate of GetFrontierTrainerFixedIvs // NOTE: In CreateDomeOpponentMon a tournament trainer ID (0-15) is passed instead, resulting in all IVs of 3 From 36d7e8c769554f6a7bcbac7ce081955ad125c9f7 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 23 Oct 2020 21:04:28 -0400 Subject: [PATCH 058/177] re-match TryPutLinkBattleTvShowOnAir (from #1177) --- src/battle_tv.c | 338 +----------------------------------------------- 1 file changed, 5 insertions(+), 333 deletions(-) diff --git a/src/battle_tv.c b/src/battle_tv.c index c84ae827b0..b83999c149 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -713,8 +713,6 @@ void BattleTv_SetDataBasedOnAnimation(u8 animationId) } } -#ifdef NONMATCHING -// for loop has an unused stack variable void TryPutLinkBattleTvShowOnAir(void) { u16 playerBestSpecies = 0, opponentBestSpecies = 0; @@ -726,6 +724,7 @@ void TryPutLinkBattleTvShowOnAir(void) u16 species = 0; u16 moveId = 0; s32 i, j; + int zero = 0, one = 1; //needed for matching if (gBattleStruct->anyMonHasTransformed) return; @@ -748,7 +747,7 @@ void TryPutLinkBattleTvShowOnAir(void) if (species != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG, NULL)) { for (sum = 0, j = 0; j < MAX_MON_MOVES; j++) - sum += movePoints->points[0][i * 4 + j]; + sum += movePoints->points[zero][i * 4 + j]; if (playerBestSum < sum) { @@ -762,7 +761,7 @@ void TryPutLinkBattleTvShowOnAir(void) if (species != SPECIES_NONE && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG, NULL)) { for (sum = 0, j = 0; j < MAX_MON_MOVES; j++) - sum += movePoints->points[1][i * 4 + j]; + sum += movePoints->points[one][i * 4 + j]; if (opponentBestSum == sum) { @@ -784,9 +783,9 @@ void TryPutLinkBattleTvShowOnAir(void) for (sum = 0, i = 0, j = 0; j < MAX_MON_MOVES; j++) { - if (sum < movePoints->points[0][playerBestMonId * 4 + j]) + if (sum < movePoints->points[zero][playerBestMonId * 4 + j]) { - sum = movePoints->points[0][playerBestMonId * 4 + j]; + sum = movePoints->points[zero][playerBestMonId * 4 + j]; i = j; } } @@ -810,333 +809,6 @@ void TryPutLinkBattleTvShowOnAir(void) } } -#else -NAKED -void TryPutLinkBattleTvShowOnAir(void) -{ - asm_unified( - "push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r1, 0\n\ - str r1, [sp, 0x4]\n\ - movs r2, 0\n\ - str r2, [sp, 0x8]\n\ - ldr r3, =0x00007fff\n\ - str r3, [sp, 0xC]\n\ - movs r4, 0\n\ - str r4, [sp, 0x10]\n\ - movs r7, 0\n\ - str r7, [sp, 0x14]\n\ - mov r8, r0\n\ - ldr r0, =gBattleStruct\n\ - ldr r1, [r0]\n\ - adds r0, r1, 0\n\ - adds r0, 0xB3\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _0817E42A\n\ - b _0817E670\n\ -_0817E42A:\n\ - movs r2, 0xD2\n\ - lsls r2, 1\n\ - adds r2, r1\n\ - mov r10, r2\n\ - movs r6, 0\n\ -_0817E434:\n\ - movs r0, 0x64\n\ - adds r4, r6, 0\n\ - muls r4, r0\n\ - ldr r0, =gPlayerParty\n\ - adds r0, r4, r0\n\ - movs r1, 0xB\n\ - movs r2, 0\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0817E454\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ -_0817E454:\n\ - ldr r5, =gEnemyParty\n\ - adds r0, r4, r5\n\ - movs r1, 0xB\n\ - movs r2, 0\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0817E46A\n\ - adds r0, r7, 0x1\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ -_0817E46A:\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _0817E434\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r0, [r0]\n\ - movs r1, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0817E47E\n\ - b _0817E670\n\ -_0817E47E:\n\ - cmp r8, r7\n\ - beq _0817E484\n\ - b _0817E670\n\ -_0817E484:\n\ - movs r6, 0\n\ - lsls r3, r6, 1\n\ - str r3, [sp, 0x18]\n\ - movs r4, 0x64\n\ - mov r8, r4\n\ -_0817E48E:\n\ - mov r1, r8\n\ - muls r1, r6\n\ - ldr r0, =gPlayerParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - movs r2, 0\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - adds r0, r6, 0x1\n\ - mov r9, r0\n\ - cmp r7, 0\n\ - beq _0817E4EE\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - movs r2, 0\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0817E4EE\n\ - movs r4, 0\n\ - lsls r0, r6, 3\n\ - mov r2, r10\n\ - adds r1, r0, r2\n\ - movs r3, 0x3\n\ -_0817E4C4:\n\ - lsls r0, r4, 16\n\ - asrs r0, 16\n\ - ldrh r4, [r1]\n\ - adds r0, r4\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - adds r1, 0x2\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bge _0817E4C4\n\ - ldr r1, [sp, 0x8]\n\ - lsls r0, r1, 16\n\ - lsls r1, r4, 16\n\ - cmp r0, r1\n\ - bge _0817E4EE\n\ - lsls r0, r6, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x10]\n\ - lsrs r1, 16\n\ - str r1, [sp, 0x8]\n\ - str r7, [sp]\n\ -_0817E4EE:\n\ - mov r0, r8\n\ - muls r0, r6\n\ - ldr r2, =gEnemyParty\n\ - adds r4, r0, r2\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - movs r2, 0\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - ldr r3, [sp, 0x8]\n\ - lsls r3, 16\n\ - str r3, [sp, 0x1C]\n\ - cmp r7, 0\n\ - beq _0817E5A0\n\ - adds r0, r4, 0\n\ - movs r1, 0x2D\n\ - movs r2, 0\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0817E5A0\n\ - movs r4, 0\n\ - ldr r0, [sp, 0xC]\n\ - lsls r2, r0, 16\n\ - movs r3, 0x1\n\ - lsls r1, r3, 1\n\ - adds r1, 0x1\n\ - lsls r1, 4\n\ - lsls r0, r6, 3\n\ - adds r0, r1\n\ - mov r3, r10\n\ - adds r1, r0, r3\n\ - movs r3, 0x3\n\ -_0817E534:\n\ - lsls r0, r4, 16\n\ - asrs r0, 16\n\ - ldrh r4, [r1]\n\ - adds r0, r4\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - adds r1, 0x2\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bge _0817E534\n\ - asrs r1, r2, 16\n\ - lsls r5, r4, 16\n\ - asrs r0, r5, 16\n\ - cmp r1, r0\n\ - bne _0817E590\n\ - mov r0, r8\n\ - muls r0, r6\n\ - ldr r1, =gEnemyParty\n\ - adds r0, r1\n\ - movs r1, 0x19\n\ - movs r2, 0\n\ - bl GetMonData\n\ - adds r4, r0, 0\n\ - ldr r2, [sp, 0x14]\n\ - mov r0, r8\n\ - muls r0, r2\n\ - ldr r3, =gEnemyParty\n\ - adds r0, r3\n\ - movs r1, 0x19\n\ - movs r2, 0\n\ - bl GetMonData\n\ - cmp r4, r0\n\ - bls _0817E5A0\n\ - b _0817E594\n\ - .pool\n\ -_0817E590:\n\ - cmp r1, r0\n\ - ble _0817E5A0\n\ -_0817E594:\n\ - lsls r0, r6, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x14]\n\ - lsrs r5, 16\n\ - str r5, [sp, 0xC]\n\ - str r7, [sp, 0x4]\n\ -_0817E5A0:\n\ - mov r6, r9\n\ - cmp r6, 0x5\n\ - bgt _0817E5A8\n\ - b _0817E48E\n\ -_0817E5A8:\n\ - movs r4, 0\n\ - movs r6, 0\n\ - movs r3, 0\n\ - ldr r5, =gPlayerParty\n\ - ldr r7, [sp, 0x10]\n\ - lsls r0, r7, 3\n\ - mov r1, r10\n\ - adds r2, r0, r1\n\ -_0817E5B8:\n\ - lsls r0, r4, 16\n\ - asrs r0, 16\n\ - movs r7, 0\n\ - ldrsh r1, [r2, r7]\n\ - cmp r0, r1\n\ - bge _0817E5C8\n\ - ldrh r4, [r2]\n\ - adds r6, r3, 0\n\ -_0817E5C8:\n\ - adds r2, 0x2\n\ - adds r3, 0x1\n\ - cmp r3, 0x3\n\ - ble _0817E5B8\n\ - movs r0, 0x64\n\ - ldr r1, [sp, 0x10]\n\ - muls r0, r1\n\ - adds r0, r5\n\ - adds r1, r6, 0\n\ - adds r1, 0xD\n\ - movs r2, 0\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - ldr r2, [sp, 0x1C]\n\ - cmp r2, 0\n\ - beq _0817E670\n\ - cmp r4, 0\n\ - beq _0817E670\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r0, [r0]\n\ - movs r1, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0817E65C\n\ - ldr r3, [sp, 0x10]\n\ - cmp r3, 0x2\n\ - bhi _0817E620\n\ - ldr r0, =gBattleScripting\n\ - adds r0, 0x25\n\ - ldrb r0, [r0]\n\ - bl GetLinkTrainerFlankId\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _0817E630\n\ - b _0817E670\n\ - .pool\n\ -_0817E620:\n\ - ldr r0, =gBattleScripting\n\ - adds r0, 0x25\n\ - ldrb r0, [r0]\n\ - bl GetLinkTrainerFlankId\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _0817E670\n\ -_0817E630:\n\ - movs r3, 0\n\ - ldr r7, [sp, 0x14]\n\ - cmp r7, 0x2\n\ - bls _0817E63A\n\ - movs r3, 0x1\n\ -_0817E63A:\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - ldr r1, =gBattleScripting\n\ - adds r1, 0x25\n\ - ldrb r1, [r1]\n\ - bl sub_806EF84\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r1, r4, 0\n\ - ldr r2, [sp]\n\ - ldr r3, [sp, 0x4]\n\ - bl PutBattleUpdateOnTheAir\n\ - b _0817E670\n\ - .pool\n\ -_0817E65C:\n\ - ldr r0, =gBattleScripting\n\ - adds r0, 0x25\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - eors r0, r1\n\ - adds r1, r4, 0\n\ - ldr r2, [sp]\n\ - ldr r3, [sp, 0x4]\n\ - bl PutBattleUpdateOnTheAir\n\ -_0817E670:\n\ - add sp, 0x20\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); -} -#endif - static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) { struct BattleTvMovePoints *movePoints = &gBattleStruct->tvMovePoints; From a6cb8279f789da99642762ce7c6da6c7bb28c38b Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 23 Oct 2020 21:29:59 -0400 Subject: [PATCH 059/177] re-match DrawResultsTextWindow (from #1177) --- src/contest_util.c | 367 ++++++--------------------------------------- 1 file changed, 44 insertions(+), 323 deletions(-) diff --git a/src/contest_util.c b/src/contest_util.c index 5b4e0a70ab..7f94681469 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -1148,28 +1148,21 @@ static void TryCreateWirelessSprites(void) } } -// Functionally equivalent, the same except compiler generated variables from -// src are placed on different stack positions. - -#ifdef NONMATCHING static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) { - u8 *windowTilesPtr; u16 windowId; int origWidth; - struct WindowTemplate windowTemplate; int strWidth; u8 *spriteTilePtrs[4]; u8 *dst; - int i; - struct Sprite *sprite; - const u8 *src; // The culprit. - - memset(&windowTemplate, 0, sizeof(windowTemplate)); - windowTemplate.width = 30; - windowTemplate.height = 2; - windowId = AddWindow(&windowTemplate); - FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + { + struct WindowTemplate windowTemplate; + memset(&windowTemplate, 0, sizeof(windowTemplate)); + windowTemplate.width = 30; + windowTemplate.height = 2; + windowId = AddWindow(&windowTemplate); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + } origWidth = GetStringWidth(1, text, 0); strWidth = (origWidth + 9) / 8; @@ -1177,321 +1170,49 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) strWidth = 30; AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, -1, text); - windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA)); - src = (u8 *)(sUnknown_0858D6D0); - - sprite = &gSprites[spriteId]; - spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + VRAM + 0x10000); - - for (i = 1; i < 4; i++) - spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + VRAM + 0x10000); - - for (i = 0; i < 4; i++) - CpuFill32(0, spriteTilePtrs[i], 0x400); - - dst = spriteTilePtrs[0]; - CpuCopy32(src, dst, 0x20); - CpuCopy32(src + 128, dst + 0x100, 0x20); - CpuCopy32(src + 128, dst + 0x200, 0x20); - CpuCopy32(src + 64, dst + 0x300, 0x20); - - for (i = 0; i < strWidth; i++) { - dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; - CpuCopy32(src + 192, dst, 0x20); - CpuCopy32(windowTilesPtr, dst + 0x100, 0x20); - CpuCopy32(windowTilesPtr + 960, dst + 0x200, 0x20); - CpuCopy32(src + 224, dst + 0x300, 0x20); - windowTilesPtr += 0x20; - } + s32 i; + struct Sprite *sprite; + const u8 *src, *windowTilesPtr; + windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA)); + src = (u8 *)(sUnknown_0858D6D0); - dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; - CpuCopy32(src + 32, dst, 0x20); - CpuCopy32(src + 160, dst + 0x100, 0x20); - CpuCopy32(src + 160, dst + 0x200, 0x20); - CpuCopy32(src + 96, dst + 0x300, 0x20); + sprite = &gSprites[spriteId]; + spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + VRAM + 0x10000); + + for (i = 1; i < 4; i++) + spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + VRAM + 0x10000); + + for (i = 0; i < 4; i++) + CpuFill32(0, spriteTilePtrs[i], 0x400); + + dst = spriteTilePtrs[0]; + CpuCopy32(src, dst, 0x20); + CpuCopy32(src + 128, dst + 0x100, 0x20); + CpuCopy32(src + 128, dst + 0x200, 0x20); + CpuCopy32(src + 64, dst + 0x300, 0x20); + + for (i = 0; i < strWidth; i++) + { + dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; + CpuCopy32(src + 192, dst, 0x20); + CpuCopy32(windowTilesPtr, dst + 0x100, 0x20); + CpuCopy32(windowTilesPtr + 960, dst + 0x200, 0x20); + CpuCopy32(src + 224, dst + 0x300, 0x20); + windowTilesPtr += 0x20; + } + + dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; + CpuCopy32(src + 32, dst, 0x20); + CpuCopy32(src + 160, dst + 0x100, 0x20); + CpuCopy32(src + 160, dst + 0x200, 0x20); + CpuCopy32(src + 96, dst + 0x300, 0x20); + } RemoveWindow(windowId); return (240 - (strWidth + 2) * 8) / 2; } -#else -NAKED -static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) -{ - asm_unified( - "push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x44\n\ - adds r5, r0, 0\n\ - lsls r1, 24\n\ - lsrs r7, r1, 24\n\ - add r4, sp, 0x20\n\ - adds r0, r4, 0\n\ - movs r1, 0\n\ - movs r2, 0x8\n\ - bl memset\n\ - movs r0, 0x1E\n\ - strb r0, [r4, 0x3]\n\ - movs r0, 0x2\n\ - strb r0, [r4, 0x4]\n\ - adds r0, r4, 0\n\ - bl AddWindow\n\ - lsls r6, r0, 24\n\ - lsrs r4, r6, 24\n\ - adds r0, r4, 0\n\ - movs r1, 0x11\n\ - bl FillWindowPixelBuffer\n\ - movs r0, 0x1\n\ - adds r1, r5, 0\n\ - movs r2, 0\n\ - bl GetStringWidth\n\ - adds r2, r0, 0\n\ - adds r2, 0x9\n\ - cmp r2, 0\n\ - bge _080F6BC4\n\ - adds r2, 0x7\n\ -_080F6BC4:\n\ - asrs r2, 3\n\ - mov r10, r2\n\ - cmp r2, 0x1E\n\ - ble _080F6BD0\n\ - movs r1, 0x1E\n\ - mov r10, r1\n\ -_080F6BD0:\n\ - mov r1, r10\n\ - lsls r2, r1, 3\n\ - subs r2, r0\n\ - lsrs r0, r2, 31\n\ - adds r2, r0\n\ - asrs r2, 1\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - ldr r0, =sContestLinkTextColors\n\ - str r0, [sp]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - str r0, [sp, 0x4]\n\ - str r5, [sp, 0x8]\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - movs r3, 0x1\n\ - bl AddTextPrinterParameterized3\n\ - adds r0, r4, 0\n\ - movs r1, 0x7\n\ - bl GetWindowAttribute\n\ - mov r9, r0\n\ - ldr r2, =sUnknown_0858D6D0\n\ - mov r8, r2\n\ - lsls r1, r7, 4\n\ - adds r1, r7\n\ - lsls r1, 2\n\ - ldr r3, =gSprites\n\ - adds r1, r3\n\ - ldrh r0, [r1, 0x4]\n\ - lsls r0, 22\n\ - lsrs r0, 17\n\ - ldr r2, =0x06010000\n\ - adds r0, r2\n\ - str r0, [sp, 0xC]\n\ - str r6, [sp, 0x38]\n\ - mov r7, sp\n\ - adds r7, 0x1C\n\ - str r7, [sp, 0x2C]\n\ - mov r0, r10\n\ - adds r0, 0x2\n\ - str r0, [sp, 0x30]\n\ - movs r5, 0\n\ - add r7, sp, 0x10\n\ - mov r12, r7\n\ - adds r6, r1, 0\n\ - adds r6, 0x2E\n\ - movs r4, 0x2\n\ -_080F6C34:\n\ - adds r0, r6, r5\n\ - movs r7, 0\n\ - ldrsh r1, [r0, r7]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldrh r0, [r0, 0x4]\n\ - lsls r0, 22\n\ - lsrs r0, 17\n\ - adds r0, r2\n\ - mov r1, r12\n\ - adds r1, 0x4\n\ - mov r12, r1\n\ - subs r1, 0x4\n\ - stm r1!, {r0}\n\ - adds r5, 0x2\n\ - subs r4, 0x1\n\ - cmp r4, 0\n\ - bge _080F6C34\n\ - mov r7, r8\n\ - adds r7, 0x80\n\ - mov r2, r8\n\ - adds r2, 0x40\n\ - str r2, [sp, 0x28]\n\ - mov r0, r8\n\ - adds r0, 0x20\n\ - str r0, [sp, 0x3C]\n\ - mov r1, r8\n\ - adds r1, 0xA0\n\ - str r1, [sp, 0x40]\n\ - adds r2, 0x20\n\ - str r2, [sp, 0x34]\n\ - add r5, sp, 0xC\n\ - movs r6, 0\n\ - movs r4, 0x3\n\ -_080F6C7C:\n\ - str r6, [sp, 0x1C]\n\ - ldm r5!, {r1}\n\ - ldr r0, [sp, 0x2C]\n\ - ldr r2, =0x05000100\n\ - bl CpuSet\n\ - subs r4, 0x1\n\ - cmp r4, 0\n\ - bge _080F6C7C\n\ - ldr r5, [sp, 0xC]\n\ - ldr r6, =0x04000008\n\ - mov r0, r8\n\ - adds r1, r5, 0\n\ - adds r2, r6, 0\n\ - bl CpuSet\n\ - movs r0, 0x80\n\ - lsls r0, 1\n\ - adds r1, r5, r0\n\ - adds r0, r7, 0\n\ - adds r2, r6, 0\n\ - bl CpuSet\n\ - movs r2, 0x80\n\ - lsls r2, 2\n\ - adds r1, r5, r2\n\ - adds r0, r7, 0\n\ - adds r2, r6, 0\n\ - bl CpuSet\n\ - movs r7, 0xC0\n\ - lsls r7, 2\n\ - adds r1, r5, r7\n\ - ldr r0, [sp, 0x28]\n\ - adds r2, r6, 0\n\ - bl CpuSet\n\ - movs r4, 0\n\ - cmp r4, r10\n\ - bge _080F6D32\n\ - adds r7, r6, 0\n\ -_080F6CCE:\n\ - adds r6, r4, 0x1\n\ - adds r0, r6, 0\n\ - cmp r6, 0\n\ - bge _080F6CDA\n\ - adds r0, r4, 0\n\ - adds r0, 0x8\n\ -_080F6CDA:\n\ - asrs r0, 3\n\ - lsls r1, r0, 2\n\ - add r1, sp\n\ - adds r1, 0xC\n\ - lsls r0, 3\n\ - subs r0, r6, r0\n\ - lsls r0, 5\n\ - ldr r1, [r1]\n\ - adds r5, r1, r0\n\ - mov r0, r8\n\ - adds r0, 0xC0\n\ - adds r1, r5, 0\n\ - adds r2, r7, 0\n\ - bl CpuSet\n\ - movs r0, 0x80\n\ - lsls r0, 1\n\ - adds r1, r5, r0\n\ - mov r0, r9\n\ - adds r2, r7, 0\n\ - bl CpuSet\n\ - movs r0, 0xF0\n\ - lsls r0, 2\n\ - add r0, r9\n\ - movs r2, 0x80\n\ - lsls r2, 2\n\ - adds r1, r5, r2\n\ - adds r2, r7, 0\n\ - bl CpuSet\n\ - movs r0, 0xC0\n\ - lsls r0, 2\n\ - adds r1, r5, r0\n\ - mov r0, r8\n\ - adds r0, 0xE0\n\ - adds r2, r7, 0\n\ - bl CpuSet\n\ - movs r1, 0x20\n\ - add r9, r1\n\ - adds r4, r6, 0\n\ - cmp r4, r10\n\ - blt _080F6CCE\n\ -_080F6D32:\n\ - adds r2, r4, 0x1\n\ - adds r0, r2, 0\n\ - cmp r2, 0\n\ - bge _080F6D3E\n\ - adds r0, r4, 0\n\ - adds r0, 0x8\n\ -_080F6D3E:\n\ - asrs r0, 3\n\ - lsls r1, r0, 2\n\ - add r1, sp\n\ - adds r1, 0xC\n\ - lsls r0, 3\n\ - subs r0, r2, r0\n\ - lsls r0, 5\n\ - ldr r1, [r1]\n\ - adds r5, r1, r0\n\ - ldr r4, =0x04000008\n\ - ldr r0, [sp, 0x3C]\n\ - adds r1, r5, 0\n\ - adds r2, r4, 0\n\ - bl CpuSet\n\ - movs r2, 0x80\n\ - lsls r2, 1\n\ - adds r1, r5, r2\n\ - ldr r0, [sp, 0x40]\n\ - adds r2, r4, 0\n\ - bl CpuSet\n\ - movs r7, 0x80\n\ - lsls r7, 2\n\ - adds r1, r5, r7\n\ - ldr r0, [sp, 0x40]\n\ - adds r2, r4, 0\n\ - bl CpuSet\n\ - movs r0, 0xC0\n\ - lsls r0, 2\n\ - adds r1, r5, r0\n\ - ldr r0, [sp, 0x34]\n\ - adds r2, r4, 0\n\ - bl CpuSet\n\ - ldr r1, [sp, 0x38]\n\ - lsrs r0, r1, 24\n\ - bl RemoveWindow\n\ - ldr r2, [sp, 0x30]\n\ - lsls r1, r2, 3\n\ - movs r0, 0xF0\n\ - subs r0, r1\n\ - asrs r0, 1\n\ - add sp, 0x44\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .pool"); -} -#endif // NONMATCHING - static void LoadContestResultSprites(void) { int i; From 9b573b283cfcb10aa976f0fac16dd0d90edfbeb5 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 23 Oct 2020 21:36:38 -0400 Subject: [PATCH 060/177] re-match CreateFrontierBrainPokemon (from #1177) --- src/frontier_util.c | 244 +------------------------------------------- 1 file changed, 5 insertions(+), 239 deletions(-) diff --git a/src/frontier_util.c b/src/frontier_util.c index 3e7fecb480..3f0826ef19 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -2486,7 +2486,6 @@ void SetFrontierBrainObjEventGfx_2(void) #define FRONTIER_BRAIN_OTID 61226 -#ifdef NONMATCHING void CreateFrontierBrainPokemon(void) { s32 i, j; @@ -2512,8 +2511,11 @@ void CreateFrontierBrainPokemon(void) do { - j = Random32(); - } while (IsShinyOtIdPersonality(FRONTIER_BRAIN_OTID, j) || sFrontierBrainsMons[facility][symbol][i].nature != GetNatureFromPersonality(j)); + do + { + j = Random32(); //should just be one while loop, but that doesn't match + } while (IsShinyOtIdPersonality(FRONTIER_BRAIN_OTID, j)); + } while (sFrontierBrainsMons[facility][symbol][i].nature != GetNatureFromPersonality(j)); CreateMon(&gEnemyParty[monPartyId], sFrontierBrainsMons[facility][symbol][i].species, monLevel, @@ -2535,242 +2537,6 @@ void CreateFrontierBrainPokemon(void) monPartyId++; } } -#else -NAKED -void CreateFrontierBrainPokemon(void) -{ - asm_unified( - "push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x44\n\ - ldr r0, =0x000040cf\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x20]\n\ - bl GetFronterBrainSymbol\n\ - str r0, [sp, 0x24]\n\ - ldr r0, [sp, 0x20]\n\ - cmp r0, 0x1\n\ - bne _081A4E44\n\ - ldr r0, =0x000003fe\n\ - bl TrainerIdToDomeTournamentId\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - bl GetDomeTrainerSelectedMons\n\ - adds r4, r0, 0\n\ - b _081A4E46\n\ - .pool\n\ -_081A4E44:\n\ - movs r4, 0x7\n\ -_081A4E46:\n\ - bl ZeroEnemyPartyMons\n\ - movs r1, 0\n\ - str r1, [sp, 0x18]\n\ - bl SetFacilityPtrsGetLevel\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x1C]\n\ - movs r2, 0\n\ - str r2, [sp, 0x14]\n\ -_081A4E5C:\n\ - movs r0, 0x1\n\ - ands r0, r4\n\ - asrs r4, 1\n\ - str r4, [sp, 0x30]\n\ - ldr r3, [sp, 0x14]\n\ - adds r3, 0x1\n\ - str r3, [sp, 0x28]\n\ - cmp r0, 0\n\ - bne _081A4E70\n\ - b _081A4FC4\n\ -_081A4E70:\n\ - ldr r4, [sp, 0x14]\n\ - lsls r4, 2\n\ - mov r9, r4\n\ - ldr r0, [sp, 0x24]\n\ - lsls r0, 4\n\ - str r0, [sp, 0x38]\n\ - ldr r1, [sp, 0x20]\n\ - lsls r1, 4\n\ - str r1, [sp, 0x34]\n\ - ldr r2, [sp, 0x1C]\n\ - lsls r2, 24\n\ - str r2, [sp, 0x3C]\n\ - ldr r3, [sp, 0x18]\n\ - adds r3, 0x1\n\ - str r3, [sp, 0x2C]\n\ - ldr r0, [sp, 0x14]\n\ - add r0, r9\n\ - lsls r0, 2\n\ - mov r8, r0\n\ -_081A4E96:\n\ - bl Random\n\ - adds r4, r0, 0\n\ - bl Random\n\ - lsls r4, 16\n\ - lsrs r7, r4, 16\n\ - lsls r0, 16\n\ - orrs r7, r0\n\ - ldr r0, =0x0000ef2a\n\ - adds r1, r7, 0\n\ - bl IsShinyOtIdPersonality\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _081A4E96\n\ - ldr r4, [sp, 0x38]\n\ - ldr r1, [sp, 0x24]\n\ - subs r0, r4, r1\n\ - lsls r5, r0, 2\n\ - mov r2, r8\n\ - adds r4, r2, r5\n\ - ldr r3, [sp, 0x34]\n\ - ldr r1, [sp, 0x20]\n\ - subs r0, r3, r1\n\ - lsls r6, r0, 3\n\ - adds r4, r6\n\ - ldr r2, =sFrontierBrainsMons\n\ - adds r4, r2\n\ - adds r0, r7, 0\n\ - bl GetNatureFromPersonality\n\ - ldrb r1, [r4, 0x5]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r1, r0\n\ - bne _081A4E96\n\ - ldr r4, [sp, 0x18]\n\ - movs r0, 0x64\n\ - adds r3, r4, 0\n\ - muls r3, r0\n\ - mov r8, r3\n\ - ldr r1, =gEnemyParty\n\ - add r1, r8\n\ - mov r10, r1\n\ - ldr r4, [sp, 0x14]\n\ - add r4, r9\n\ - lsls r4, 2\n\ - adds r0, r4, r5\n\ - adds r0, r6\n\ - ldr r2, =sFrontierBrainsMons\n\ - adds r0, r2\n\ - ldrh r1, [r0]\n\ - ldr r3, [sp, 0x3C]\n\ - lsrs r2, r3, 24\n\ - ldrb r3, [r0, 0x4]\n\ - movs r0, 0x1\n\ - str r0, [sp]\n\ - str r7, [sp, 0x4]\n\ - str r0, [sp, 0x8]\n\ - ldr r0, =0x0000ef2a\n\ - str r0, [sp, 0xC]\n\ - mov r0, r10\n\ - bl CreateMon\n\ - ldr r0, =sFrontierBrainsMons\n\ - adds r5, r0\n\ - adds r5, r6, r5\n\ - adds r4, r5, r4\n\ - adds r4, 0x2\n\ - mov r0, r10\n\ - movs r1, 0xC\n\ - adds r2, r4, 0\n\ - bl SetMonData\n\ - movs r7, 0\n\ - mov r6, r8\n\ - ldr r3, =gEnemyParty\n\ -_081A4F32:\n\ - adds r1, r7, 0\n\ - adds r1, 0x1A\n\ - ldr r0, [sp, 0x14]\n\ - add r0, r9\n\ - lsls r4, r0, 2\n\ - adds r2, r5, r4\n\ - adds r0, r7, 0x6\n\ - adds r2, r0\n\ - adds r0, r6, r3\n\ - str r3, [sp, 0x40]\n\ - bl SetMonData\n\ - adds r7, 0x1\n\ - ldr r3, [sp, 0x40]\n\ - cmp r7, 0x5\n\ - ble _081A4F32\n\ - movs r1, 0xFF\n\ - add r0, sp, 0x10\n\ - strb r1, [r0]\n\ - movs r7, 0\n\ - ldr r1, [sp, 0x18]\n\ - movs r2, 0x64\n\ - adds r6, r1, 0\n\ - muls r6, r2\n\ - ldr r3, =sFrontierBrainsMons + 0xC\n\ - mov r8, r3\n\ - ldr r3, =gEnemyParty\n\ - adds r5, r4, 0\n\ -_081A4F6A:\n\ - ldr r4, [sp, 0x38]\n\ - ldr r0, [sp, 0x24]\n\ - subs r1, r4, r0\n\ - lsls r1, 2\n\ - adds r1, r5, r1\n\ - ldr r2, [sp, 0x34]\n\ - ldr r4, [sp, 0x20]\n\ - subs r0, r2, r4\n\ - lsls r0, 3\n\ - adds r1, r0\n\ - add r1, r8\n\ - ldrh r4, [r1]\n\ - lsls r2, r7, 24\n\ - lsrs r2, 24\n\ - adds r0, r6, r3\n\ - adds r1, r4, 0\n\ - str r3, [sp, 0x40]\n\ - bl SetMonMoveSlot\n\ - ldr r3, [sp, 0x40]\n\ - cmp r4, 0xDA\n\ - bne _081A4F9C\n\ - movs r1, 0\n\ - add r0, sp, 0x10\n\ - strb r1, [r0]\n\ -_081A4F9C:\n\ - adds r5, 0x2\n\ - adds r7, 0x1\n\ - cmp r7, 0x3\n\ - ble _081A4F6A\n\ - ldr r0, [sp, 0x18]\n\ - movs r1, 0x64\n\ - adds r4, r0, 0\n\ - muls r4, r1\n\ - ldr r0, =gEnemyParty\n\ - adds r4, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0x20\n\ - add r2, sp, 0x10\n\ - bl SetMonData\n\ - adds r0, r4, 0\n\ - bl CalculateMonStats\n\ - ldr r2, [sp, 0x2C]\n\ - str r2, [sp, 0x18]\n\ -_081A4FC4:\n\ - ldr r4, [sp, 0x30]\n\ - ldr r3, [sp, 0x28]\n\ - str r3, [sp, 0x14]\n\ - cmp r3, 0x2\n\ - bgt _081A4FD0\n\ - b _081A4E5C\n\ -_081A4FD0:\n\ - add sp, 0x44\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); -} -#endif u16 GetFrontierBrainMonSpecies(u8 monId) { From a1d69ae2641c4cad48895d791e6d72c84b14a2cc Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 23 Oct 2020 21:51:46 -0400 Subject: [PATCH 061/177] re-match sub_81BF2B8 (from $1177) --- src/mirage_tower.c | 154 +++++++-------------------------------------- 1 file changed, 24 insertions(+), 130 deletions(-) diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 9c791b33f6..ef7bf7228c 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -724,144 +724,38 @@ static void sub_81BF248(struct Sprite *sprite) } } -#ifdef NONMATCHING static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e) { u8 r5, r4, r0, r2; - u16 var; + u16 var, var2; + u8 r2_1, r4_1; + u8 b2, c2; - r4 = r5 = b / d; + r4 = b / d; gUnknown_030012A8[0] = r4; - r0 = r2 = b % d; + r2 = b % d; gUnknown_030012A8[1] = r2; - r4 &= 7; - r2 &= 7; - gUnknown_030012A8[2] = r4; - gUnknown_030012A8[3] = r2; + r4_1 = r4 & 7; + r2_1 = r2 & 7; + gUnknown_030012A8[2] = r4 & 7; //should be using r4_1, but that doesn't match + gUnknown_030012A8[3] = r2 & 7; //" + + r0 = r2 / 8; + r5 = r4 / 8; + + gUnknown_030012A8[4] = r2 / 8; //should be using r0, but that doesn't match + gUnknown_030012A8[5] = r4 / 8; //should be using r5, but that doesn't match - r0 /= 8; - r5 /= 8; - gUnknown_030012A8[4] = r0; - gUnknown_030012A8[5] = r5; - - var = ((d / 8) * (r5 * 64)) + (r0 * 64); + var = (d / 8) * (r5 * 64) + (r0 * 64); gUnknown_030012A8[6] = var; - - var += (r4 * 8) + r2; - gUnknown_030012A8[7] = var; - - // This part is non-matching. 99% sure it IS functionally equivalent, though. - b = (b & 1) ^ 1; - c = (c << ((b) << 2)) | (15 << ((b ^ 1) << 2)); - - a[(var / 2) + (e * 32)] &= c; + + var2 = var + ((r4_1 * 8) + r2_1); + var2 /= 2; + gUnknown_030012A8[7] = var + ((r4_1 * 8) + r2_1); //should be using var2 with var2 being divided afterwards, but that doesn't match + + b2 = ((b % 2) ^ 1); + c2 = (c << (b2 << 2)) | 15 << (((b2 ^ 1) << 2)); + a[var2 + (e * 32)] &= c2; } - -#else -NAKED -static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e) -{ - asm_unified( - "push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x8\n\ - str r0, [sp]\n\ - mov r10, r1\n\ - adds r6, r2, 0\n\ - mov r8, r3\n\ - ldr r0, [sp, 0x28]\n\ - mov r9, r0\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - mov r10, r1\n\ - lsls r6, 24\n\ - lsrs r6, 24\n\ - mov r0, r8\n\ - lsls r0, 24\n\ - mov r8, r0\n\ - lsrs r7, r0, 24\n\ - mov r1, r9\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r9, r1\n\ - mov r0, r10\n\ - adds r1, r7, 0\n\ - bl __divsi3\n\ - adds r5, r0, 0\n\ - lsls r5, 24\n\ - lsrs r4, r5, 24\n\ - ldr r3, =gUnknown_030012A8\n\ - strh r4, [r3]\n\ - mov r0, r10\n\ - adds r1, r7, 0\n\ - str r3, [sp, 0x4]\n\ - bl __modsi3\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r3, [sp, 0x4]\n\ - strh r2, [r3, 0x2]\n\ - movs r1, 0x7\n\ - ands r4, r1\n\ - ands r2, r1\n\ - strh r4, [r3, 0x4]\n\ - strh r2, [r3, 0x6]\n\ - lsrs r0, 27\n\ - lsrs r5, 27\n\ - strh r0, [r3, 0x8]\n\ - strh r5, [r3, 0xA]\n\ - mov r1, r8\n\ - lsrs r1, 27\n\ - lsls r1, 6\n\ - mov r8, r1\n\ - mov r1, r8\n\ - muls r1, r5\n\ - lsls r0, 6\n\ - adds r1, r0\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - strh r1, [r3, 0xC]\n\ - lsls r4, 3\n\ - adds r4, r2\n\ - adds r1, r4\n\ - lsls r4, r1, 16\n\ - lsrs r4, 17\n\ - strh r1, [r3, 0xE]\n\ - movs r1, 0x1\n\ - mov r0, r10\n\ - ands r1, r0\n\ - movs r2, 0x1\n\ - eors r1, r2\n\ - lsls r0, r1, 2\n\ - lsls r6, r0\n\ - eors r1, r2\n\ - lsls r1, 2\n\ - movs r0, 0xF\n\ - lsls r0, r1\n\ - orrs r6, r0\n\ - lsls r6, 24\n\ - lsrs r6, 24\n\ - mov r1, r9\n\ - lsls r1, 5\n\ - mov r9, r1\n\ - add r9, r4\n\ - ldr r1, [sp]\n\ - add r1, r9\n\ - ldrb r0, [r1]\n\ - ands r6, r0\n\ - strb r6, [r1]\n\ - add sp, 0x8\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); -} -#endif // NONMATCHING From 627853a2bfbc3ce87f3b48b2b80acd10172a0212 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 23 Oct 2020 21:59:15 -0400 Subject: [PATCH 062/177] re-match SetSearchRectHighlight (from #1177) --- src/pokedex.c | 80 +++++++-------------------------------------------- 1 file changed, 11 insertions(+), 69 deletions(-) diff --git a/src/pokedex.c b/src/pokedex.c index 54f256509d..c8d3c7d269 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -5236,83 +5236,25 @@ static void Task_ExitSearchWaitForFade(u8 taskId) } } -#ifdef NONMATCHING -// This doesn't match because gcc flips the naming of the r7 and r6 -// registers. It also does one of the additions backwards. void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width) { u16 i; - u16* ptr = GetBgTilemapBuffer(3); + u16 temp; //should be a pointer, but does not match as one + u32 ptr = (u32)GetBgTilemapBuffer(3); //same as above - u16* temp; for (i = 0; i < width; i++) { - // This addition is supposed to be done in this order; however, - // gcc will always do it in ptr + (y * 32) order. - temp = (y * 32) + ptr; - temp[x + i] %= 0x1000; - temp[x + i] |= flags * 0x1000; - - temp[x + i + 32] %= 0x1000; - temp[x + i + 32] |= flags * 0x1000; + temp = *(u16 *)(ptr + (y + 0) * 64 + (x + i) * 2); + temp &= 0x0fff; + temp |= (flags << 12); + *(u16 *)(ptr + (y + 0) * 64 + (x + i) * 2) = temp; + + temp = *(u16 *)(ptr + (y + 1) * 64 + (x + i) * 2); + temp &= 0x0fff; + temp |= (flags << 12); + *(u16 *)(ptr + (y + 1) * 64 + (x + i) * 2) = temp; } } -#else -NAKED -void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width) -{ - asm_unified( - "push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - adds r4, r3, 0\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r8, r1\n\ - lsls r2, 24\n\ - lsrs r5, r2, 24\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - movs r0, 0x3\n\ - bl GetBgTilemapBuffer\n\ - adds r2, r0, 0\n\ - movs r3, 0\n\ - cmp r3, r4\n\ - bcs _080C1DEC\n\ - lsls r0, r5, 6\n\ - adds r7, r0, r2\n\ - ldr r5, =0x00000fff\n\ - lsls r2, r6, 12\n\ -_080C1DC8:\n\ - mov r0, r8\n\ - adds r1, r0, r3\n\ - lsls r1, 1\n\ - adds r1, r7\n\ - ldrh r0, [r1]\n\ - ands r0, r5\n\ - orrs r0, r2\n\ - strh r0, [r1]\n\ - adds r1, 0x40\n\ - ldrh r0, [r1]\n\ - ands r0, r5\n\ - orrs r0, r2\n\ - strh r0, [r1]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, r4\n\ - bcc _080C1DC8\n\ -_080C1DEC:\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); -} -#endif #define SEARCH_BG_SEARCH SEARCH_TOPBAR_SEARCH #define SEARCH_BG_SHIFT SEARCH_TOPBAR_SHIFT From 44c2d15ca9f3b1b758fc70acdf6d0cf1cf74cf5f Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 23 Oct 2020 22:07:30 -0400 Subject: [PATCH 063/177] re-match sub_81C79BC (from #1177) also re-define RBG macros --- include/constants/rgb.h | 4 + include/pokenav.h | 2 +- src/pokenav_main_menu.c | 166 ++++++++-------------------------------- 3 files changed, 39 insertions(+), 133 deletions(-) diff --git a/include/constants/rgb.h b/include/constants/rgb.h index 80d951f4bd..1896250d20 100644 --- a/include/constants/rgb.h +++ b/include/constants/rgb.h @@ -1,6 +1,10 @@ #ifndef GUARD_RGB_H #define GUARD_RGB_H +#define GET_R(color) ((color) & 0x1F) +#define GET_G(color) (((color) >> 5) & 0x1F) +#define GET_B(color) (((color) >> 10) & 0x1F) + #define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10)) #define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r)) #define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F)) diff --git a/include/pokenav.h b/include/pokenav.h index ac916f3ba8..ed4e5a9061 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -313,7 +313,7 @@ bool32 WaitForHelpBar(void); void sub_81C78A0(void); bool32 MainMenuLoopedTaskIsBusy(void); void sub_81C7FDC(void); -void sub_81C79BC(const u16 *a0, const u16 *a1, u32 a2, u32 a3, u32 a4, u16 *a5); +void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette); void sub_81C7B40(void); struct Sprite *PauseSpinningPokenavSprite(void); void ResumeSpinningPokenavSprite(void); diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index 0e2425d4e9..a100e2c23f 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -471,139 +471,41 @@ void sub_81C7990(u32 a0, u16 a1) CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); } -NAKED -void sub_81C79BC(const u16 *a0, const u16 *a1, u32 a2, u32 a3, u32 a4, u16 *a5) +void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette) { - asm_unified( - "push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0xC\n\ - str r0, [sp]\n\ - str r1, [sp, 0x4]\n\ - mov r10, r2\n\ - str r3, [sp, 0x8]\n\ - ldr r0, [sp, 0x2C]\n\ - cmp r0, 0\n\ - bne _081C79E4\n\ - ldr r2, =0x001fffff\n\ - mov r1, r10\n\ - ands r2, r1\n\ - ldr r0, [sp]\n\ - b _081C79F4\n\ - .pool\n\ -_081C79E4:\n\ - ldr r2, [sp, 0x2C]\n\ - ldr r0, [sp, 0x8]\n\ - cmp r2, r0\n\ - blt _081C7A00\n\ - ldr r2, =0x001fffff\n\ - mov r1, r10\n\ - ands r2, r1\n\ - ldr r0, [sp, 0x4]\n\ -_081C79F4:\n\ - ldr r1, [sp, 0x30]\n\ - bl CpuSet\n\ - b _081C7AAE\n\ - .pool\n\ -_081C7A00:\n\ - movs r2, 0x1\n\ - negs r2, r2\n\ - add r10, r2\n\ - b _081C7AA6\n\ -_081C7A08:\n\ - ldr r1, [sp]\n\ - ldrh r0, [r1]\n\ - movs r2, 0x1F\n\ - mov r9, r2\n\ - mov r1, r9\n\ - ands r1, r0\n\ - mov r9, r1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 21\n\ - movs r1, 0x1F\n\ - ands r1, r2\n\ - mov r8, r1\n\ - lsrs r7, r0, 26\n\ - movs r2, 0x1F\n\ - ands r7, r2\n\ - ldr r0, [sp, 0x4]\n\ - ldrh r4, [r0]\n\ - movs r0, 0x1F\n\ - ands r0, r4\n\ - mov r1, r9\n\ - subs r0, r1\n\ - lsls r0, 8\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r2, [sp, 0x2C]\n\ - adds r6, r0, 0\n\ - muls r6, r2\n\ - asrs r6, 8\n\ - lsls r4, 16\n\ - lsrs r0, r4, 21\n\ - movs r1, 0x1F\n\ - ands r0, r1\n\ - mov r2, r8\n\ - subs r0, r2\n\ - lsls r0, 8\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r1, [sp, 0x2C]\n\ - adds r5, r0, 0\n\ - muls r5, r1\n\ - asrs r5, 8\n\ - lsrs r4, 26\n\ - movs r2, 0x1F\n\ - ands r4, r2\n\ - subs r4, r7\n\ - lsls r4, 8\n\ - adds r0, r4, 0\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r1, [sp, 0x2C]\n\ - muls r0, r1\n\ - asrs r0, 8\n\ - add r6, r9\n\ - movs r2, 0x1F\n\ - ands r6, r2\n\ - add r5, r8\n\ - ands r5, r2\n\ - adds r0, r7, r0\n\ - ands r0, r2\n\ - lsls r0, 10\n\ - lsls r5, 5\n\ - orrs r0, r5\n\ - orrs r0, r6\n\ - ldr r1, [sp, 0x30]\n\ - strh r0, [r1]\n\ - ldr r2, [sp]\n\ - adds r2, 0x2\n\ - str r2, [sp]\n\ - ldr r0, [sp, 0x4]\n\ - adds r0, 0x2\n\ - str r0, [sp, 0x4]\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x30]\n\ - movs r1, 0x1\n\ - negs r1, r1\n\ - add r10, r1\n\ -_081C7AA6:\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - cmp r10, r0\n\ - bne _081C7A08\n\ -_081C7AAE:\n\ - add sp, 0xC\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0"); + + if (a4 == 0) + { + CpuCopy16(a0, palette, a2 * 2); + } + else if (a4 >= a3) + { + CpuCopy16(a1, palette, a2 * 2); + } + else + { + int r, g, b; + int r1, g1, b1; + while (a2--) + { + r = GET_R(*a0); + g = GET_G(*a0); + b = GET_B(*a0); + + r1 = ((((GET_R(*a1) << 8) - (r << 8)) / a3) * a4) >> 8; + g1 = ((((GET_G(*a1) << 8) - (g << 8)) / a3) * a4) >> 8; + b1 = ((((GET_B(*a1) << 8) - (b << 8)) / a3) * a4) >> 8; + + r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match; I have to assign the value of ((r + r1) & 0x1F) to r1 + g = (g + g1) & 0x1F; //See above + b = (b + b1) & 0x1F; //See above + + *palette = RGB2(r, g, b); //See above comment + + a0++, a1++; + palette++; + } + } } void PokenavFadeScreen(s32 fadeType) From af04d99cd9794dc1366ffe74ff49133e11659095 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 23 Oct 2020 22:12:09 -0400 Subject: [PATCH 064/177] port fix for UpdateSaveAddresses (from #1177) --- src/save.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/save.c b/src/save.c index 3ae2f6fd53..680f33de0a 100644 --- a/src/save.c +++ b/src/save.c @@ -648,12 +648,10 @@ static void UpdateSaveAddresses(void) gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; } - for (i = SECTOR_ID_PKMN_STORAGE_START; i <= SECTOR_ID_PKMN_STORAGE_END; i++) + for (; i <= SECTOR_ID_PKMN_STORAGE_END; i++) //setting i to SECTOR_ID_PKMN_STORAGE_START does not match { gRamSaveSectionLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSectionOffsets[i].toAdd; gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; - - i++;i--; // needed to match } } From 9c9b626ccb9a713796b2a36871a990e4bd57d32e Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 25 Oct 2020 23:19:56 -0400 Subject: [PATCH 065/177] re-match CheckBagHasSpace (from #1179) --- src/item.c | 227 +++++++++-------------------------------------------- 1 file changed, 37 insertions(+), 190 deletions(-) diff --git a/src/item.c b/src/item.c index 5a77d363ec..0b63660480 100644 --- a/src/item.c +++ b/src/item.c @@ -181,11 +181,12 @@ bool8 HasAtLeastOneBerry(void) return FALSE; } -#ifdef NONMATCHING -// Refuses to match. bool8 CheckBagHasSpace(u16 itemId, u16 count) { u8 i; + u8 pocket; + u16 slotCapacity; + u16 ownedCount; if (ItemId_GetPocket(itemId) == POCKET_NONE) return FALSE; @@ -194,209 +195,55 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count) { return CheckPyramidBagHasSpace(itemId, count); } + + pocket = ItemId_GetPocket(itemId) - 1; + if (pocket != BERRIES_POCKET) + slotCapacity = MAX_BAG_ITEM_CAPACITY; else + slotCapacity = MAX_BERRY_CAPACITY; + + // Check space in any existing item slots that already contain this item + for (i = 0; i < gBagPockets[pocket].capacity; i++) { - u8 pocket; - u16 slotCapacity; - u16 ownedCount; + if (gBagPockets[pocket].itemSlots[i].itemId == itemId) + { + ownedCount = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity); + if (ownedCount + count <= slotCapacity) + return TRUE; + if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET) + return FALSE; + count -= (slotCapacity - ownedCount); + if (count == 0) + break; //should be return TRUE, but that doesn't match + } + } - pocket = ItemId_GetPocket(itemId) - 1; - if (pocket != BERRIES_POCKET) - slotCapacity = MAX_BAG_ITEM_CAPACITY; - else - slotCapacity = MAX_BERRY_CAPACITY; - - // Check space in any existing item slots that already contain this item + // Check space in empty item slots + if (count > 0) + { for (i = 0; i < gBagPockets[pocket].capacity; i++) { - if (gBagPockets[pocket].itemSlots[i].itemId == itemId) + if (gBagPockets[pocket].itemSlots[i].itemId == 0) { - ownedCount = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity); - if (ownedCount + count <= slotCapacity) - return TRUE; - if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET) - return FALSE; - count -= slotCapacity - ownedCount; - if (count == 0) - return TRUE; - } - } - - // Check space in empty item slots - if (count > 0) - { - for (i = 0; i < gBagPockets[pocket].capacity; i++) - { - if (gBagPockets[pocket].itemSlots[i].itemId == 0) + if (count > slotCapacity) { - if (count <= slotCapacity) - return TRUE; if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET) return FALSE; count -= slotCapacity; } + else + { + count = 0; //should be return TRUE, but that doesn't match + break; + } } - if (count > 0) - return FALSE; // No more item slots. The bag is full } - - return TRUE; + if (count > 0) + return FALSE; // No more item slots. The bag is full } + + return TRUE; } -#else -NAKED -bool8 CheckBagHasSpace(u16 itemId, u16 count) -{ - asm_unified( - "push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x4\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - lsls r1, 16\n\ - lsrs r5, r1, 16\n\ - bl ItemId_GetPocket\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080D6906\n\ - bl InBattlePyramid\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _080D6838\n\ - ldr r0, =0x00004004\n\ - bl FlagGet\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _080D684C\n\ -_080D6838:\n\ - mov r0, r8\n\ - adds r1, r5, 0\n\ - bl CheckPyramidBagHasSpace\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - b _080D6916\n\ - .pool\n\ -_080D684C:\n\ - mov r0, r8\n\ - bl ItemId_GetPocket\n\ - subs r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r7, =0x000003e7\n\ - cmp r2, 0x3\n\ - beq _080D6860\n\ - movs r7, 0x63\n\ -_080D6860:\n\ - movs r6, 0\n\ - ldr r1, =gBagPockets\n\ - lsls r4, r2, 3\n\ - adds r0, r4, r1\n\ - mov r9, r4\n\ - ldrb r0, [r0, 0x4]\n\ - cmp r6, r0\n\ - bcs _080D68BC\n\ - subs r0, r2, 0x2\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ -_080D6878:\n\ - adds r0, r4, r1\n\ - ldr r1, [r0]\n\ - lsls r0, r6, 2\n\ - adds r1, r0, r1\n\ - ldrh r0, [r1]\n\ - cmp r0, r8\n\ - bne _080D68AC\n\ - adds r0, r1, 0x2\n\ - str r2, [sp]\n\ - bl GetBagItemQuantity\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - adds r0, r1, r5\n\ - ldr r2, [sp]\n\ - cmp r0, r7\n\ - ble _080D6914\n\ - mov r0, r10\n\ - cmp r0, 0x1\n\ - bls _080D6906\n\ - subs r0, r7, r1\n\ - subs r0, r5, r0\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, 0\n\ - beq _080D6914\n\ -_080D68AC:\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - ldr r1, =gBagPockets\n\ - adds r0, r4, r1\n\ - ldrb r0, [r0, 0x4]\n\ - cmp r6, r0\n\ - bcc _080D6878\n\ -_080D68BC:\n\ - cmp r5, 0\n\ - beq _080D6914\n\ - movs r6, 0\n\ - ldr r3, =gBagPockets\n\ - mov r1, r9\n\ - adds r0, r1, r3\n\ - ldrb r0, [r0, 0x4]\n\ - cmp r6, r0\n\ - bcs _080D6902\n\ - adds r4, r3, 0\n\ - subs r0, r2, 0x2\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ -_080D68D6:\n\ - adds r0, r1, r4\n\ - ldr r1, [r0]\n\ - lsls r0, r6, 2\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - bne _080D68F2\n\ - cmp r5, r7\n\ - bls _080D6914\n\ - cmp r2, 0x1\n\ - bls _080D6906\n\ - subs r0, r5, r7\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ -_080D68F2:\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - mov r1, r9\n\ - adds r0, r1, r3\n\ - ldrb r0, [r0, 0x4]\n\ - cmp r6, r0\n\ - bcc _080D68D6\n\ -_080D6902:\n\ - cmp r5, 0\n\ - beq _080D6914\n\ -_080D6906:\n\ - movs r0, 0\n\ - b _080D6916\n\ - .pool\n\ -_080D6914:\n\ - movs r0, 0x1\n\ -_080D6916:\n\ - add sp, 0x4\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1"); -} -#endif // NONMATCHING bool8 AddBagItem(u16 itemId, u16 count) { From b2100cb480fef1b4d4f70a06eb88d1b6e9538d1a Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 25 Oct 2020 23:23:40 -0400 Subject: [PATCH 066/177] port ModifyStatByNature fakematch fix (from #1179) --- src/pokemon.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index 188624d6a7..e04260e40c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5746,25 +5746,29 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId) u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) { - // Dont modify HP, Accuracy, or Evasion by nature + u16 retVal; + // Don't modify HP, Accuracy, or Evasion by nature if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS) { - // Should just be "return n", but it wouldn't match without this. - u16 retVal = n; - retVal++; - retVal--; - return retVal; + return n; } switch (gNatureStatTable[nature][statIndex - 1]) { case 1: - return (u16)(n * 110) / 100; // NOTE: will overflow for n > 595 because the intermediate value is cast to u16 before the division. Fix by removing (u16) cast + retVal = n * 110; + retVal /= 100; + break; case -1: - return (u16)(n * 90) / 100; // NOTE: will overflow for n > 728, see above + retVal = n * 90; + retVal /= 100; + break; + default: + retVal = n; + break; } - return n; + return retVal; } #define IS_LEAGUE_BATTLE \ From 193e601c2c14b7230f73a4d1c28b85bbc88810cb Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 25 Oct 2020 23:42:50 -0400 Subject: [PATCH 067/177] port Phase2_FrontierLogoWave_Func4 fix --- src/battle_transition.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/battle_transition.c b/src/battle_transition.c index 559279e740..496cc9e09a 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -3974,10 +3974,7 @@ static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task) for (i = 0; i < 160; i++, var6 += var8) { s16 index = var6 / 256; - #ifndef NONMATCHING - asm(""); - #endif - gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index, amplitude); + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index & 0xff, amplitude); } if (++task->tData3 == 101) From 077a2c23dc499bdb6a0a0ca8dd4fd5d5022dfa6b Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 25 Oct 2020 23:45:42 -0400 Subject: [PATCH 068/177] port HasNoMonsToSwitch fakematch fix (from #1181) --- src/battle_util.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 699fd05bc8..aeae8b58b7 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1634,16 +1634,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) } else { - // FIXME: Compiler insists on moving r4 into r1 before doing the eor. - #ifndef NONMATCHING - register u32 var asm("r1"); - #else - u32 var; - #endif // NONMATCHING - party = gEnemyParty; - var = battler ^ BIT_SIDE; - if (var == 0) + if (battler == 1) id1 = 0; else id1 = 1; From c7d624edeb396d8f7aaff0448f57ca8b1ca7f228 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 25 Oct 2020 23:52:39 -0400 Subject: [PATCH 069/177] re-match sub_81D5F58 --- src/trainer_hill.c | 62 ++++------------------------------------------ 1 file changed, 5 insertions(+), 57 deletions(-) diff --git a/src/trainer_hill.c b/src/trainer_hill.c index c5aea14d94..6bbac91ca3 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -672,70 +672,18 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void) return TRUE; } -// Functionally equivalent. -#ifdef NONMATCHING static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3) { - u32 var0, var1, var2, var3; + u8 var0; + u16 var1; + u16 var2; var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit)) & 1; - var1 = sHillData->floors[floorId].display.data[arg2 * arg3 + bit]; - var3 = 0x200; + var1 = sHillData->floors[floorId].display.data[arg2 * arg3 + bit] + 0x200; var2 = 0x3000; - return ((var0 << 10) | var2) | (var1 | var3); + return (((var0 << 10) & 0xc00) | var2) | (var1 & 0x3ff); } -#else -NAKED -static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3) -{ - asm_unified("\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r4, =sHillData\n\ - ldr r4, [r4]\n\ - mov r12, r4\n\ - lsls r4, r2, 1\n\ - lsls r5, r0, 4\n\ - subs r5, r0\n\ - lsls r5, 3\n\ - subs r5, r0\n\ - lsls r5, 3\n\ - adds r4, r5\n\ - movs r0, 0xE8\n\ - lsls r0, 2\n\ - add r0, r12\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - movs r4, 0xF\n\ - subs r4, r1\n\ - asrs r0, r4\n\ - movs r4, 0x1\n\ - ands r0, r4\n\ - muls r2, r3\n\ - adds r2, r1\n\ - adds r2, r5\n\ - movs r1, 0xA8\n\ - lsls r1, 2\n\ - add r1, r12\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - movs r2, 0x80\n\ - lsls r2, 2\n\ - adds r3, r2, 0\n\ - movs r2, 0xC0\n\ - lsls r2, 6\n\ - lsls r0, 10\n\ - orrs r0, r2\n\ - orrs r1, r3\n\ - orrs r0, r1\n\ - pop {r4,r5}\n\ - pop {r1}\n\ - bx r1\n\ - .pool"); -} -#endif // NONMATCHING void GenerateTrainerHillFloorLayout(u16 *mapArg) { From 4c10f3f4651d6ac523eaabf34c20614b3cf03df8 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 25 Oct 2020 23:55:38 -0400 Subject: [PATCH 070/177] port GetFrontierOpponentClass fakematch fix --- src/battle_tower.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/battle_tower.c b/src/battle_tower.c index 0333c4397d..9d632b444a 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1447,7 +1447,7 @@ u8 GetFrontierOpponentClass(u16 trainerId) } else if (trainerId == TRAINER_FRONTIER_BRAIN) { - trainerClass = GetFrontierBrainTrainerClass(); + return GetFrontierBrainTrainerClass(); } else if (trainerId == TRAINER_STEVEN_PARTNER) { @@ -1466,9 +1466,6 @@ u8 GetFrontierOpponentClass(u16 trainerId) else { trainerClass = gFacilityClassToTrainerClass[gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].facilityClass]; - #ifndef NONMATCHING - asm(""); - #endif } } else @@ -1480,9 +1477,6 @@ u8 GetFrontierOpponentClass(u16 trainerId) else { trainerClass = gFacilityClassToTrainerClass[gApprentices[gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id].facilityClass]; - #ifndef NONMATCHING - asm(""); - #endif } } From 83846b913ac7dd23389588a23b3bb1aa2062a2ee Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 00:01:53 -0400 Subject: [PATCH 071/177] port sub_806F160 fakematch fix --- include/pokemon.h | 12 ++++++------ src/pokemon.c | 13 ++++--------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/include/pokemon.h b/include/pokemon.h index d75ec94f30..a956b9c406 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -123,12 +123,12 @@ struct Pokemon struct Unknown_806F160_Struct { - u8 field_0_0:4; - u8 field_0_1:4; - u8 field_1; - u8 magic; - u8 field_3_0:4; - u8 field_3_1:4; + u32 field_0_0:4; + u32 field_0_1:4; + u32 field_1:8; + u16 magic:8; + u32 field_3_0:4; + u32 field_3_1:4; void *bytes; u8 **byteArrays; struct SpriteTemplate *templates; diff --git a/src/pokemon.c b/src/pokemon.c index e04260e40c..a38ad12de0 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6808,19 +6808,14 @@ static bool8 ShouldSkipFriendshipChange(void) return FALSE; } -#define FORCE_SIGNED(x)(-(x * (-1))) - static void sub_806F160(struct Unknown_806F160_Struct* structPtr) { u16 i, j; - for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++) + for (i = 0; i < structPtr->field_0_0; i++) { structPtr->templates[i] = gUnknown_08329D98[i]; for (j = 0; j < structPtr->field_1; j++) { - #ifndef NONMATCHING - asm(""); - #endif structPtr->frameImages[i * structPtr->field_1 + j].data = &structPtr->byteArrays[i][j * 0x800]; } structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_1]; @@ -6830,7 +6825,7 @@ static void sub_806F160(struct Unknown_806F160_Struct* structPtr) static void sub_806F1FC(struct Unknown_806F160_Struct* structPtr) { u16 i, j; - for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++) + for (i = 0; i < structPtr->field_0_0; i++) { structPtr->templates[i] = gUnknown_08329F28; for (j = 0; j < structPtr->field_1; j++) @@ -6882,7 +6877,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) } else { - for (i = 0; i < FORCE_SIGNED(structPtr->field_0_0); i++) + for (i = 0; i < structPtr->field_0_0; i++) structPtr->byteArrays[i] = structPtr->bytes + (structPtr->field_3_0 * (i << 0xD)); } @@ -6978,7 +6973,7 @@ u8 *sub_806F4F8(u8 id, u8 arg1) } else { - if (arg1 >= FORCE_SIGNED(structPtr->field_0_0)) + if (arg1 >= structPtr->field_0_0) arg1 = 0; return structPtr->byteArrays[arg1]; From 9d067dfe0d4fff1e638bc8a8739e833be44726ea Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 00:06:19 -0400 Subject: [PATCH 072/177] port sub_8181C2C fakematching fix --- src/pokemon_animation.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 37abb90e9d..916a579077 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -2884,13 +2884,9 @@ static void sub_8181C2C(struct Sprite *sprite) } else { - #ifndef NONMATCHING - register s32 var asm("r4") = sUnknown_03001240[sprite->data[0]].field_8; - #else - s32 var = sUnknown_03001240[sprite->data[0]].field_8; - #endif + s32 var = sUnknown_03001240[sprite->data[0]].field_8; - sprite->pos2.x = (var << 3) * (counter % 128) / 128 - (sUnknown_03001240[sprite->data[0]].field_8 * 8); + sprite->pos2.x = var * ((counter % 128) * 8) / 128 + 8 * -var; sprite->pos2.y = -(Sin(counter % 128, 8)); } From af0a1cb7bf71b8d27cc33db4ddca040ad1e8eb35 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 00:10:30 -0400 Subject: [PATCH 073/177] port ReceiveDaycareMailData fakematch fix --- src/record_mixing.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/record_mixing.c b/src/record_mixing.c index 6c0a02d8c5..7bb3df8071 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -870,23 +870,18 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r sp24[j][0] = i; var1 = sub_80E7A9C(&_src->mail[0]); var2 = sub_80E7A9C(&_src->mail[1]); - if (!var1 && var2) + if (!(var1 || var2) || (var1 && var2)) { - #ifndef NONMATCHING - register u8 one asm("r0") = 1; // boo, a fakematch - sp24[j][1] = one; - #else - sp24[j][1] = 1; - #endif - } - else if ((var1 && var2) || (!var1 && !var2)) - { - sp24[j][1] = Random2() % 2; + sp24[j][1] = Random2() % 2; } else if (var1 && !var2) { sp24[j][1] = 0; } + else if (!var1 && var2) + { + sp24[j][1] = 1; + } j++; } } From 9ca406b15d0f0146643b18155d5ffd6cc337fcbb Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 00:17:26 -0400 Subject: [PATCH 074/177] port Cmd_forcerandomswitch fakematch fix --- src/battle_script_commands.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 512830900f..a16cfff3b4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7131,17 +7131,12 @@ static void Cmd_forcerandomswitch(void) s32 battler1PartyId = 0; s32 battler2PartyId = 0; - #ifdef NONMATCHING - s32 lastMonId = 0; // + 1 - #else - register s32 lastMonId asm("r8") = 0; // + 1 - #endif // NONMATCHING - - s32 firstMonId = 0; - s32 monsCount = 0; + s32 firstMonId; + s32 lastMonId = 0; // + 1 + s32 monsCount; struct Pokemon* party = NULL; s32 validMons = 0; - s32 minNeeded = 0; + s32 minNeeded; if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)) { @@ -7253,14 +7248,15 @@ static void Cmd_forcerandomswitch(void) { do { - i = Random() % monsCount; - i += firstMonId; - } - while (i == battler2PartyId - || i == battler1PartyId - || GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE + do + { + i = Random() % monsCount; + i += firstMonId; + } + while (i == battler2PartyId || i == battler1PartyId); + } while (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE - || GetMonData(&party[i], MON_DATA_HP) == 0); + || GetMonData(&party[i], MON_DATA_HP) == 0); //should be one while loop, but that doesn't match. } *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i; From 9e033fa55456e6e6f8a43c3b081ec8d0d71aa46e Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 00:22:56 -0400 Subject: [PATCH 075/177] port BerryCrushCommand_BeginNormalPaletteFade fix --- src/berry_crush.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/berry_crush.c b/src/berry_crush.c index 96b00ba2bf..76d2d74500 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1986,29 +1986,29 @@ static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame *game, // byte 9: if TRUE, communicate on fade complete u16 color; - u32 selectedPals; - selectedPals = ({ -#ifndef NONMATCHING - register u32 value asm("r2"); - register u32 b asm("r3"); -#else - u32 value; - u32 b; -#endif //NONMATCHING - value = params[0] << 0; - value |= (b = params[1] << 8); - value |= (b = params[2] << 16); - value |= (b = params[3] << 24); - value; - }); + u32 selectedPals[2]; + selectedPals[0] = (u32)params[0]; + selectedPals[1] = (u32)params[1]; + selectedPals[1] <<= 8; + + selectedPals[0] |= selectedPals[1]; + selectedPals[1] = (u32)params[2]; + selectedPals[1] <<= 16; + + selectedPals[0] |= selectedPals[1]; + selectedPals[1] = (u32)params[3]; + selectedPals[1] <<= 24; + + selectedPals[0] |= selectedPals[1]; params[0] = params[9]; - color = params[8] << 8; - color |= params[7] << 0; + color = params[8]; + color <<= 8; + color |= params[7]; gPaletteFade.bufferTransferDisabled = FALSE; - BeginNormalPaletteFade(selectedPals, params[4], params[5], params[6], color); + BeginNormalPaletteFade(selectedPals[0], params[4], params[5], params[6], color); UpdatePaletteFade(); game->unkE = 2; return 0; From e8fd0bd2c3718ee1b9f402a041652252619b5371 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 00:26:15 -0400 Subject: [PATCH 076/177] port InitPaintingMonOamData fakematch fix --- src/contest_painting.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/contest_painting.c b/src/contest_painting.c index 6a902d446f..ccf97c4608 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -501,20 +501,19 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 arg1) static void InitPaintingMonOamData(u8 contestWinnerId) { - //Some hacks just to get the asm to match -#ifndef NONMATCHING - asm(""::"r"(contestWinnerId)); -#endif - gMain.oamBuffer[0] = sContestPaintingMonOamData; gMain.oamBuffer[0].tileNum = 0; -#ifndef NONMATCHING - if (contestWinnerId) contestWinnerId = gMain.oamBuffer[0].tileNum; -#endif - - gMain.oamBuffer[0].x = 88; - gMain.oamBuffer[0].y = 24; + if (contestWinnerId > 1) + { + gMain.oamBuffer[0].x = 88; + gMain.oamBuffer[0].y = 24; + } + else + { + gMain.oamBuffer[0].x = 88; // Duplicated code + gMain.oamBuffer[0].y = 24; + } } static u8 GetImageEffectForContestWinner(u8 contestWinnerId) From 072797844a4f028ee5d21de06657a04c4618362d Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 00:29:55 -0400 Subject: [PATCH 077/177] port TrendyPhraseIdOld fakematch fix --- src/dewford_trend.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/dewford_trend.c b/src/dewford_trend.c index e3b98859ce..5c7e50f16b 100644 --- a/src/dewford_trend.c +++ b/src/dewford_trend.c @@ -222,15 +222,18 @@ void BufferTrendyPhraseString(void) void TrendyPhraseIsOld(void) { u16 result = 0; - - if (gSaveBlock1Ptr->easyChatPairs[0].unk0_0 - gSaveBlock1Ptr->easyChatPairs[1].unk0_0 < 2) + + do { - #ifndef NONMATCHING - asm("":::"r2"); //Force the compiler to store address of gSaveBlock1 in r3 instead of r2 - #endif - if (!gSaveBlock1Ptr->easyChatPairs[0].unk1_6 && gSaveBlock1Ptr->easyChatPairs[1].unk1_6) - result = 1; - } + if (gSaveBlock1Ptr->easyChatPairs[0].unk0_0 - gSaveBlock1Ptr->easyChatPairs[1].unk0_0 > 1) + break; + if (gSaveBlock1Ptr->easyChatPairs[0].unk1_6) + break; + if (!gSaveBlock1Ptr->easyChatPairs[1].unk1_6) + break; + result = 1; + } while (0); + gSpecialVar_Result = result; } From b2b363159fd3cfdd1c7e462faacd791ee7004ded Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 00:46:01 -0400 Subject: [PATCH 078/177] port sub_80C6104 fakematch fix --- src/frontier_pass.c | 46 +++++++++------------------------------------ 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 702f6c0987..dfd5c0f2d6 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -1173,75 +1173,47 @@ static void sub_80C5F58(bool8 arg0, bool8 arg1) static void sub_80C6104(u8 cursorArea, u8 previousCursorArea) { - bool32 var; - switch (previousCursorArea) { case CURSOR_AREA_MAP: CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24, 16, 3, 12, 7, 17); - var = TRUE; break; case CURSOR_AREA_CARD: CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 336, 16, 10, 12, 7, 17); - var = TRUE; break; case CURSOR_AREA_RECORD: - if (!sPassData->hasBattleRecord) - { - var = FALSE; - } - else - { + if (sPassData->hasBattleRecord) CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28, 2, 10, 12, 3, 17); - var = TRUE; - } + else if (cursorArea == CURSOR_AREA_NOTHING || cursorArea > CURSOR_AREA_CANCEL) + return; break; case CURSOR_AREA_CANCEL: CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3350, 21, 0, 9, 2, 17); - var = TRUE; break; default: - var = FALSE; - break; - } - - if (!var) - { if (cursorArea == CURSOR_AREA_NOTHING || cursorArea > CURSOR_AREA_CANCEL) return; + break; } - + switch (cursorArea) { case CURSOR_AREA_MAP: CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 168, 16, 3, 12, 7, 17); - var = TRUE; break; case CURSOR_AREA_CARD: CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 504, 16, 10, 12, 7, 17); - var = TRUE; break; case CURSOR_AREA_RECORD: - if (!sPassData->hasBattleRecord) + if (sPassData->hasBattleRecord) + CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28 + 72, 2, 10, 12, 3, 17); + else return; - - CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28 + 72, 2, 10, 12, 3, 17); - var = TRUE; - break; + break; //needed to match case CURSOR_AREA_CANCEL: CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3374, 21, 0, 9, 2, 17); - var = TRUE; break; default: - var = FALSE; - break; - } - - if (!var) - { - #ifndef NONMATCHING - asm("":::"r4"); - #endif if (previousCursorArea == CURSOR_AREA_NOTHING || previousCursorArea > CURSOR_AREA_CANCEL) return; } From 43701c3860adfdaa2e5eff56eb7228eb26c60858 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 00:49:57 -0400 Subject: [PATCH 079/177] port PrintMonWeight fakematch fix --- src/pokedex.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/pokedex.c b/src/pokedex.c index c8d3c7d269..6b9ee7a114 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4167,21 +4167,17 @@ static void PrintMonHeight(u16 height, u8 left, u8 top) static void PrintMonWeight(u16 weight, u8 left, u8 top) { -#ifndef NONMATCHING - asm("":::"r9"); -{ -#endif u8 buffer[16]; bool8 output; - u8 i = 0; + u8 i; u32 lbs = (weight * 100000) / 4536; if (lbs % 10u >= 5) lbs += 10; + i = 0; output = FALSE; - buffer[i] = (lbs / 100000) + CHAR_0; - if (buffer[i] == CHAR_0) + if ((buffer[i] = (lbs / 100000) + CHAR_0) == CHAR_0 && !output) { buffer[i++] = 0x77; } @@ -4192,8 +4188,7 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) } lbs %= 100000; - buffer[i] = (lbs / 10000) + CHAR_0; - if (buffer[i] == CHAR_0 && !output) + if ((buffer[i] = (lbs / 10000) + CHAR_0) == CHAR_0 && !output) { buffer[i++] = 0x77; } @@ -4204,13 +4199,13 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) } lbs %= 10000; - buffer[i] = (lbs / 1000) + CHAR_0; - if (buffer[i] == CHAR_0 && !output) + if ((buffer[i] = (lbs / 1000) + CHAR_0) == CHAR_0 && !output) { buffer[i++] = 0x77; } else { + output = TRUE; i++; } @@ -4226,9 +4221,6 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) buffer[i++] = CHAR_PERIOD; buffer[i++] = EOS; PrintInfoScreenText(buffer, left, top); -#ifndef NONMATCHING -} -#endif } const u8 *GetPokedexCategoryName(u16 dexNum) // unused From 539fd463c88ab3a3046fa1b8dc4e36cc4db10581 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 03:46:08 -0400 Subject: [PATCH 080/177] port MovementAction_StoreAndLockAnim_Step0 fix --- src/event_object_movement.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index cbd0db6f32..38a4b3240e 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -8865,15 +8865,13 @@ u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite * u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - u32 one; bool32 ableToStore = FALSE; if (gLockedAnimObjectEvents == NULL) { gLockedAnimObjectEvents = AllocZeroed(sizeof(struct LockedAnimObjectEvents)); gLockedAnimObjectEvents->objectEventIds[0] = objectEvent->localId; - // needed to match - gLockedAnimObjectEvents->count = (one = 1); - ableToStore = one; + gLockedAnimObjectEvents->count = 1; + ableToStore = TRUE; } else { From fe40c0c4663d732c8ba9ca5f5e00b3c14a17d304 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 26 Oct 2020 05:52:00 -0400 Subject: [PATCH 081/177] re-match BattleIntroOpponent1SendsOutMonAnimation a lot of functions and a bit of data had to be moved from battle_main.c to battle_util.c; I have added a note to battle_util.c stating the reason for this --- include/battle_main.h | 1 + include/battle_util.h | 13 + src/battle_main.c | 718 +----------------------------------------- src/battle_util.c | 616 ++++++++++++++++++++++++++++++++++++ 4 files changed, 641 insertions(+), 707 deletions(-) diff --git a/include/battle_main.h b/include/battle_main.h index 890e47f399..1c2c50f1c0 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -83,6 +83,7 @@ u8 GetWhoStrikesFirst(u8 battlerId1, u8 battlerId2, bool8 ignoreChosenMoves); void RunBattleScriptCommands_PopCallbacksStack(void); void RunBattleScriptCommands(void); bool8 TryRunFromBattle(u8 battlerId); +void SpecialStatusesClear(void); extern struct UnknownPokemonStruct4 gMultiPartnerParty[MULTI_PARTY_SIZE]; diff --git a/include/battle_util.h b/include/battle_util.h index 157ba8eb6d..81443f4631 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -41,6 +41,19 @@ #define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK))) #define WEATHER_HAS_EFFECT2 ((!ABILITY_ON_FIELD2(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD2(ABILITY_AIR_LOCK))) +void HandleAction_UseMove(void); +void HandleAction_Switch(void); +void HandleAction_UseItem(void); +void HandleAction_Run(void); +void HandleAction_WatchesCarefully(void); +void HandleAction_SafariZoneBallThrow(void); +void HandleAction_ThrowPokeblock(void); +void HandleAction_GoNear(void); +void HandleAction_SafariZoneRun(void); +void HandleAction_WallyBallThrow(void); +void HandleAction_TryFinish(void); +void HandleAction_NothingIsFainted(void); +void HandleAction_ActionFinished(void); u8 GetBattlerForBattleScript(u8 caseId); void PressurePPLose(u8 target, u8 attacker, u16 move); void PressurePPLoseOnUsingPerishSong(u8 attacker); diff --git a/src/battle_main.c b/src/battle_main.c index d2763b0000..11ed29ac85 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -11,6 +11,7 @@ #include "battle_scripts.h" #include "battle_setup.h" #include "battle_tower.h" +#include "battle_util.h" #include "berry.h" #include "bg.h" #include "data.h" @@ -66,11 +67,6 @@ extern struct MusicPlayerInfo gMPlayInfo_SE2; extern const struct BgTemplate gBattleBgTemplates[]; extern const struct WindowTemplate *const gBattleWindowTemplates[]; -extern const u8 *const gBattleScriptsForMoveEffects[]; -extern const u8 *const gBattlescriptsForBallThrow[]; -extern const u8 *const gBattlescriptsForRunningByItem[]; -extern const u8 *const gBattlescriptsForUsingItem[]; -extern const u8 *const gBattlescriptsForSafariActions[]; // this file's functions #if !defined(NONMATCHING) && MODERN @@ -99,7 +95,6 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite); static void SpriteCb_BlinkVisible(struct Sprite *sprite); static void SpriteCallbackDummy_3(struct Sprite *sprite); static void oac_poke_ally_(struct Sprite *sprite); -static void SpecialStatusesClear(void); static void TurnValuesCleanUp(bool8 var0); static void SpriteCB_BounceEffect(struct Sprite *sprite); static void BattleStartClearSetData(void); @@ -132,19 +127,6 @@ static void HandleEndTurn_BattleLost(void); static void HandleEndTurn_RanFromBattle(void); static void HandleEndTurn_MonFled(void); static void HandleEndTurn_FinishBattle(void); -static void HandleAction_UseMove(void); -static void HandleAction_Switch(void); -static void HandleAction_UseItem(void); -static void HandleAction_Run(void); -static void HandleAction_WatchesCarefully(void); -static void HandleAction_SafariZoneBallThrow(void); -static void HandleAction_ThrowPokeblock(void); -static void HandleAction_GoNear(void); -static void HandleAction_SafariZoneRun(void); -static void HandleAction_WallyBallThrow(void); -static void HandleAction_TryFinish(void); -static void HandleAction_NothingIsFainted(void); -static void HandleAction_ActionFinished(void); // EWRAM vars EWRAM_DATA u16 gBattle_BG0_X = 0; @@ -591,10 +573,6 @@ const u8 * const gStatusConditionStringsTable[7][2] = {gStatusConditionString_LoveJpn, gText_Love} }; -static const u8 sPkblToEscapeFactor[][3] = {{0, 0, 0}, {3, 5, 0}, {2, 3, 0}, {1, 2, 0}, {1, 1, 0}}; -static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1}; -static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4}; - // code void CB2_InitBattle(void) { @@ -3609,19 +3587,21 @@ static void BattleIntroOpponent2SendsOutMonAnimation(void) gBattleMainFunc = BattleIntroRecordMonsToDex; } -#ifdef NONMATCHING static void BattleIntroOpponent1SendsOutMonAnimation(void) { u32 position; - if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) - position = B_POSITION_OPPONENT_LEFT; - else if (gBattleTypeFlags & BATTLE_TYPE_x2000000) + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) { - if (gBattleTypeFlags & BATTLE_TYPE_x80000000) - position = B_POSITION_OPPONENT_LEFT; + if (gBattleTypeFlags & BATTLE_TYPE_x2000000) + { + if (gBattleTypeFlags & BATTLE_TYPE_x80000000) + position = B_POSITION_OPPONENT_LEFT; + else + position = B_POSITION_PLAYER_LEFT; + } else - position = B_POSITION_PLAYER_LEFT; + position = B_POSITION_OPPONENT_LEFT; } else position = B_POSITION_OPPONENT_LEFT; @@ -3645,92 +3625,6 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void) gBattleMainFunc = BattleIntroRecordMonsToDex; } -#else -NAKED -static void BattleIntroOpponent1SendsOutMonAnimation(void) -{ - asm_unified( - "push {r4-r6,lr}\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r2, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 17\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _0803B298\n\ - movs r0, 0x80\n\ - lsls r0, 18\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _0803B298\n\ - movs r1, 0x80\n\ - lsls r1, 24\n\ - ands r1, r2\n\ - negs r0, r1\n\ - orrs r0, r1\n\ - lsrs r5, r0, 31\n\ - b _0803B29A\n\ - .pool\n\ -_0803B288:\n\ - ldr r1, =gBattleMainFunc\n\ - ldr r0, =BattleIntroOpponent2SendsOutMonAnimation\n\ - b _0803B2F0\n\ - .pool\n\ -_0803B298:\n\ - movs r5, 0x1\n\ -_0803B29A:\n\ - ldr r0, =gBattleControllerExecFlags\n\ - ldr r2, [r0]\n\ - cmp r2, 0\n\ - bne _0803B2F2\n\ - ldr r0, =gActiveBattler\n\ - strb r2, [r0]\n\ - ldr r1, =gBattlersCount\n\ - adds r4, r0, 0\n\ - ldrb r1, [r1]\n\ - cmp r2, r1\n\ - bcs _0803B2EC\n\ - adds r6, r4, 0\n\ -_0803B2B2:\n\ - ldrb r0, [r4]\n\ - bl GetBattlerPosition\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, r5\n\ - bne _0803B2D8\n\ - movs r0, 0\n\ - bl BtlController_EmitIntroTrainerBallThrow\n\ - ldrb r0, [r4]\n\ - bl MarkBattlerForControllerExec\n\ - ldr r0, =gBattleTypeFlags\n\ - ldr r0, [r0]\n\ - ldr r1, =0x00008040\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0803B288\n\ -_0803B2D8:\n\ - ldrb r0, [r6]\n\ - adds r0, 0x1\n\ - strb r0, [r6]\n\ - ldr r1, =gBattlersCount\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r4, =gActiveBattler\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc _0803B2B2\n\ -_0803B2EC:\n\ - ldr r1, =gBattleMainFunc\n\ - ldr r0, =BattleIntroRecordMonsToDex\n\ -_0803B2F0:\n\ - str r0, [r1]\n\ -_0803B2F2:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); -} -#endif // NONMATCHING static void BattleIntroRecordMonsToDex(void) { @@ -4929,7 +4823,7 @@ static void TurnValuesCleanUp(bool8 var0) gSideTimers[1].followmeTimer = 0; } -static void SpecialStatusesClear(void) +void SpecialStatusesClear(void) { for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { @@ -5298,593 +5192,3 @@ void RunBattleScriptCommands(void) if (gBattleControllerExecFlags == 0) gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } - -static void HandleAction_UseMove(void) -{ - u8 side; - u8 var = 4; - - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - - if (*(&gBattleStruct->field_91) & gBitTable[gBattlerAttacker]) - { - gCurrentActionFuncId = B_ACTION_FINISHED; - return; - } - - gCritMultiplier = 1; - gBattleScripting.dmgMultiplier = 1; - gBattleStruct->atkCancellerTracker = 0; - gMoveResultFlags = 0; - gMultiHitCounter = 0; - gBattleCommunication[6] = 0; - gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker); - - // choose move - if (gProtectStructs[gBattlerAttacker].noValidMoves) - { - gProtectStructs[gBattlerAttacker].noValidMoves = 0; - gCurrentMove = gChosenMove = MOVE_STRUGGLE; - gHitMarker |= HITMARKER_NO_PPDEDUCT; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0); - } - else if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE) - { - gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker]; - } - // encore forces you to use the same move - else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE - && gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) - { - gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove; - gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); - } - // check if the encored move wasn't overwritten - else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE - && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) - { - gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; - gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; - gDisableStructs[gBattlerAttacker].encoredMove = MOVE_NONE; - gDisableStructs[gBattlerAttacker].encoredMovePos = 0; - gDisableStructs[gBattlerAttacker].encoreTimer = 0; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); - } - else if (gBattleMons[gBattlerAttacker].moves[gCurrMovePos] != gChosenMoveByBattler[gBattlerAttacker]) - { - gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; - *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); - } - else - { - gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; - } - - if (gBattleMons[gBattlerAttacker].hp != 0) - { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - gBattleResults.lastUsedMovePlayer = gCurrentMove; - else - gBattleResults.lastUsedMoveOpponent = gCurrentMove; - } - - // choose target - side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; - if (gSideTimers[side].followmeTimer != 0 - && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED - && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget) - && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) - { - gBattlerTarget = gSideTimers[side].followmeTarget; - } - else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && gSideTimers[side].followmeTimer == 0 - && (gBattleMoves[gCurrentMove].power != 0 - || gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER) - && gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD - && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) - { - side = GetBattlerSide(gBattlerAttacker); - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (side != GetBattlerSide(gActiveBattler) - && *(gBattleStruct->moveTarget + gBattlerAttacker) != gActiveBattler - && gBattleMons[gActiveBattler].ability == ABILITY_LIGHTNING_ROD - && GetBattlerTurnOrderNum(gActiveBattler) < var) - { - var = GetBattlerTurnOrderNum(gActiveBattler); - } - } - if (var == 4) - { - if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) - { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - } - else - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - } - } - else - { - gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); - } - - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - { - if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) - { - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); - } - else - { - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); - } - } - } - else - { - gActiveBattler = gBattlerByTurnOrder[var]; - RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability); - gSpecialStatuses[gActiveBattler].lightningRodRedirected = 1; - gBattlerTarget = gActiveBattler; - } - } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) - { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - } - else - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - } - - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget] - && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) - { - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); - } - } - else - { - gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - { - if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) - { - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); - } - else - { - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); - } - } - } - - // choose battlescript - if (gBattleTypeFlags & BATTLE_TYPE_PALACE - && gProtectStructs[gBattlerAttacker].palaceUnableToUseMove) - { - if (gBattleMons[gBattlerAttacker].hp == 0) - { - gCurrentActionFuncId = B_ACTION_FINISHED; - return; - } - else if (gPalaceSelectionBattleScripts[gBattlerAttacker] != NULL) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - gBattlescriptCurrInstr = gPalaceSelectionBattleScripts[gBattlerAttacker]; - gPalaceSelectionBattleScripts[gBattlerAttacker] = NULL; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; - } - } - else - { - gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; - } - - if (gBattleTypeFlags & BATTLE_TYPE_ARENA) - BattleArena_AddMindPoints(gBattlerAttacker); - - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -static void HandleAction_Switch(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gActionSelectionCursor[gBattlerAttacker] = 0; - gMoveSelectionCursor[gBattlerAttacker] = 0; - - PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->field_58 + gBattlerAttacker)) - - gBattleScripting.battler = gBattlerAttacker; - gBattlescriptCurrInstr = BattleScript_ActionSwitch; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; - - if (gBattleResults.playerSwitchesCounter < 255) - gBattleResults.playerSwitchesCounter++; -} - -static void HandleAction_UseItem(void) -{ - gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); - gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8); - - if (gLastUsedItem <= LAST_BALL) // is ball - { - gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem]; - } - else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL) - { - gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; - } - else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; - } - else - { - gBattleScripting.battler = gBattlerAttacker; - - switch (*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))) - { - case AI_ITEM_FULL_RESTORE: - case AI_ITEM_HEAL_HP: - break; - case AI_ITEM_CURE_CONDITION: - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1) - { - if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E) - gBattleCommunication[MULTISTRING_CHOOSER] = 5; - } - else - { - while (!(*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1)) - { - *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; - gBattleCommunication[MULTISTRING_CHOOSER]++; - } - } - break; - case AI_ITEM_X_STAT: - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 0x80) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 5; - } - else - { - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK) - PREPARE_STRING_BUFFER(gBattleTextBuff2, CHAR_X) - - while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1)) - { - *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; - gBattleTextBuff1[2]++; - } - - gBattleScripting.animArg1 = gBattleTextBuff1[2] + 14; - gBattleScripting.animArg2 = 0; - } - break; - case AI_ITEM_GUARD_SPECS: - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - break; - } - - gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + gBattlerAttacker / 2)]; - } - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -bool8 TryRunFromBattle(u8 battler) -{ - bool8 effect = FALSE; - u8 holdEffect; - u8 pyramidMultiplier; - u8 speedVar; - - if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY) - holdEffect = gEnigmaBerries[battler].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(gBattleMons[battler].item); - - gPotentialItemEffectBattler = battler; - - if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) - { - gLastUsedItem = gBattleMons[battler].item; - gProtectStructs[battler].fleeFlag = 1; - effect++; - } - else if (gBattleMons[battler].ability == ABILITY_RUN_AWAY) - { - if (InBattlePyramid()) - { - gBattleStruct->runTries++; - pyramidMultiplier = GetPyramidRunMultiplier(); - speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); - if (speedVar > (Random() & 0xFF)) - { - gLastUsedAbility = ABILITY_RUN_AWAY; - gProtectStructs[battler].fleeFlag = 2; - effect++; - } - } - else - { - gLastUsedAbility = ABILITY_RUN_AWAY; - gProtectStructs[battler].fleeFlag = 2; - effect++; - } - } - else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_TRAINER_HILL) && gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - effect++; - } - else - { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - { - if (InBattlePyramid()) - { - pyramidMultiplier = GetPyramidRunMultiplier(); - speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); - if (speedVar > (Random() & 0xFF)) - effect++; - } - else if (gBattleMons[battler].speed < gBattleMons[BATTLE_OPPOSITE(battler)].speed) - { - speedVar = (gBattleMons[battler].speed * 128) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); - if (speedVar > (Random() & 0xFF)) - effect++; - } - else // same speed or faster - { - effect++; - } - } - - gBattleStruct->runTries++; - } - - if (effect) - { - gCurrentTurnActionNumber = gBattlersCount; - gBattleOutcome = B_OUTCOME_RAN; - } - - return effect; -} - -static void HandleAction_Run(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - - if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) - { - gCurrentTurnActionNumber = gBattlersCount; - - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) - { - if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) - gBattleOutcome |= B_OUTCOME_LOST; - } - else - { - if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) - gBattleOutcome |= B_OUTCOME_WON; - } - } - - gBattleOutcome |= B_OUTCOME_LINK_BATTLE_RAN; - gSaveBlock2Ptr->frontier.disableRecordBattle = TRUE; - } - else - { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - if (!TryRunFromBattle(gBattlerAttacker)) // failed to run away - { - ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; - } - } - else - { - if (gBattleMons[gBattlerAttacker].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; - } - else - { - gCurrentTurnActionNumber = gBattlersCount; - gBattleOutcome = B_OUTCOME_MON_FLED; - } - } - } -} - -static void HandleAction_WatchesCarefully(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0]; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -static void HandleAction_SafariZoneBallThrow(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gNumSafariBalls--; - gLastUsedItem = ITEM_SAFARI_BALL; - gBattlescriptCurrInstr = gBattlescriptsForBallThrow[ITEM_SAFARI_BALL]; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -static void HandleAction_ThrowPokeblock(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBattlerAttacker][1] - 1; - gLastUsedItem = gBattleBufferB[gBattlerAttacker][2]; - - if (gBattleResults.pokeblockThrows < 0xFF) - gBattleResults.pokeblockThrows++; - if (gBattleStruct->safariPkblThrowCounter < 3) - gBattleStruct->safariPkblThrowCounter++; - if (gBattleStruct->safariEscapeFactor > 1) - { - if (gBattleStruct->safariEscapeFactor < sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]) - gBattleStruct->safariEscapeFactor = 1; - else - gBattleStruct->safariEscapeFactor -= sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]; - } - - gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2]; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -static void HandleAction_GoNear(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - - gBattleStruct->safariCatchFactor += sGoNearCounterToCatchFactor[gBattleStruct->safariGoNearCounter]; - if (gBattleStruct->safariCatchFactor > 20) - gBattleStruct->safariCatchFactor = 20; - - gBattleStruct->safariEscapeFactor += sGoNearCounterToEscapeFactor[gBattleStruct->safariGoNearCounter]; - if (gBattleStruct->safariEscapeFactor > 20) - gBattleStruct->safariEscapeFactor = 20; - - if (gBattleStruct->safariGoNearCounter < 3) - { - gBattleStruct->safariGoNearCounter++; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = 1; // Can't get closer. - } - gBattlescriptCurrInstr = gBattlescriptsForSafariActions[1]; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; -} - -static void HandleAction_SafariZoneRun(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - PlaySE(SE_FLEE); - gCurrentTurnActionNumber = gBattlersCount; - gBattleOutcome = B_OUTCOME_RAN; -} - -static void HandleAction_WallyBallThrow(void) -{ - gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - - PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]) - - gBattlescriptCurrInstr = gBattlescriptsForSafariActions[3]; - gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; - gActionsByTurnOrder[1] = B_ACTION_FINISHED; -} - -static void HandleAction_TryFinish(void) -{ - if (!HandleFaintedMonActions()) - { - gBattleStruct->faintedActionsState = 0; - gCurrentActionFuncId = B_ACTION_FINISHED; - } -} - -static void HandleAction_NothingIsFainted(void) -{ - gCurrentTurnActionNumber++; - gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; - gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR - | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 - | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT - | HITMARKER_CHARGING | HITMARKER_x4000000); -} - -static void HandleAction_ActionFinished(void) -{ - *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = 6; - gCurrentTurnActionNumber++; - gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; - SpecialStatusesClear(); - gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR - | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 - | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT - | HITMARKER_CHARGING | HITMARKER_x4000000); - - gCurrentMove = 0; - gBattleMoveDamage = 0; - gMoveResultFlags = 0; - gBattleScripting.animTurn = 0; - gBattleScripting.animTargetsHit = 0; - gLastLandedMoves[gBattlerAttacker] = 0; - gLastHitByType[gBattlerAttacker] = 0; - gBattleStruct->dynamicMoveType = 0; - gDynamicBasePower = 0; - gBattleScripting.moveendState = 0; - gBattleCommunication[3] = 0; - gBattleCommunication[4] = 0; - gBattleScripting.multihitMoveEffect = 0; - gBattleResources->battleScriptsStack->size = 0; -} - - diff --git a/src/battle_util.c b/src/battle_util.c index aeae8b58b7..db9903d339 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1,13 +1,23 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" +#include "battle_arena.h" +#include "battle_pyramid.h" +#include "battle_util.h" #include "pokemon.h" +#include "international_string_util.h" #include "item.h" #include "util.h" #include "battle_scripts.h" #include "random.h" #include "text.h" +#include "safari_zone.h" +#include "sound.h" +#include "sprite.h" #include "string_util.h" +#include "task.h" +#include "trig.h" +#include "window.h" #include "battle_message.h" #include "battle_ai_script_commands.h" #include "battle_controllers.h" @@ -23,9 +33,615 @@ #include "constants/hold_effects.h" #include "constants/items.h" #include "constants/moves.h" +#include "constants/songs.h" #include "constants/species.h" #include "constants/weather.h" +/* +NOTE: The data and functions in this file up until (but not including) sSoundMovesTable +are actually part of battle_main.c. They needed to be moved to this file in order to +match the ROM; this is also why sSoundMovesTable's declaration is in the middle of +functions instead of at the top of the file with the other declarations. +*/ + +extern const u8 *const gBattleScriptsForMoveEffects[]; +extern const u8 *const gBattlescriptsForBallThrow[]; +extern const u8 *const gBattlescriptsForRunningByItem[]; +extern const u8 *const gBattlescriptsForUsingItem[]; +extern const u8 *const gBattlescriptsForSafariActions[]; + +static const u8 sPkblToEscapeFactor[][3] = {{0, 0, 0}, {3, 5, 0}, {2, 3, 0}, {1, 2, 0}, {1, 1, 0}}; +static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1}; +static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4}; + +void HandleAction_UseMove(void) +{ + u8 side; + u8 var = 4; + + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + + if (*(&gBattleStruct->field_91) & gBitTable[gBattlerAttacker]) + { + gCurrentActionFuncId = B_ACTION_FINISHED; + return; + } + + gCritMultiplier = 1; + gBattleScripting.dmgMultiplier = 1; + gBattleStruct->atkCancellerTracker = 0; + gMoveResultFlags = 0; + gMultiHitCounter = 0; + gBattleCommunication[6] = 0; + gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker); + + // choose move + if (gProtectStructs[gBattlerAttacker].noValidMoves) + { + gProtectStructs[gBattlerAttacker].noValidMoves = 0; + gCurrentMove = gChosenMove = MOVE_STRUGGLE; + gHitMarker |= HITMARKER_NO_PPDEDUCT; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0); + } + else if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE) + { + gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker]; + } + // encore forces you to use the same move + else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) + { + gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove; + gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + } + // check if the encored move wasn't overwritten + else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos]) + { + gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; + gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + gDisableStructs[gBattlerAttacker].encoredMove = MOVE_NONE; + gDisableStructs[gBattlerAttacker].encoredMovePos = 0; + gDisableStructs[gBattlerAttacker].encoreTimer = 0; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else if (gBattleMons[gBattlerAttacker].moves[gCurrMovePos] != gChosenMoveByBattler[gBattlerAttacker]) + { + gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + *(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else + { + gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + } + + if (gBattleMons[gBattlerAttacker].hp != 0) + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + gBattleResults.lastUsedMovePlayer = gCurrentMove; + else + gBattleResults.lastUsedMoveOpponent = gCurrentMove; + } + + // choose target + side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; + if (gSideTimers[side].followmeTimer != 0 + && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED + && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget) + && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) + { + gBattlerTarget = gSideTimers[side].followmeTarget; + } + else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && gSideTimers[side].followmeTimer == 0 + && (gBattleMoves[gCurrentMove].power != 0 + || gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER) + && gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD + && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + { + side = GetBattlerSide(gBattlerAttacker); + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + { + if (side != GetBattlerSide(gActiveBattler) + && *(gBattleStruct->moveTarget + gBattlerAttacker) != gActiveBattler + && gBattleMons[gActiveBattler].ability == ABILITY_LIGHTNING_ROD + && GetBattlerTurnOrderNum(gActiveBattler) < var) + { + var = GetBattlerTurnOrderNum(gActiveBattler); + } + } + if (var == 4) + { + if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + } + else + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + } + } + else + { + gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); + } + + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + { + if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + else + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + } + } + else + { + gActiveBattler = gBattlerByTurnOrder[var]; + RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability); + gSpecialStatuses[gActiveBattler].lightningRodRedirected = 1; + gBattlerTarget = gActiveBattler; + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + } + else + { + if (Random() & 1) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + else + gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + } + + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget] + && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + } + else + { + gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + { + if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + else + { + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_SIDE); + if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerTarget) ^ BIT_FLANK); + } + } + } + + // choose battlescript + if (gBattleTypeFlags & BATTLE_TYPE_PALACE + && gProtectStructs[gBattlerAttacker].palaceUnableToUseMove) + { + if (gBattleMons[gBattlerAttacker].hp == 0) + { + gCurrentActionFuncId = B_ACTION_FINISHED; + return; + } + else if (gPalaceSelectionBattleScripts[gBattlerAttacker] != NULL) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr = gPalaceSelectionBattleScripts[gBattlerAttacker]; + gPalaceSelectionBattleScripts[gBattlerAttacker] = NULL; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; + } + } + else + { + gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; + } + + if (gBattleTypeFlags & BATTLE_TYPE_ARENA) + BattleArena_AddMindPoints(gBattlerAttacker); + + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_Switch(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gActionSelectionCursor[gBattlerAttacker] = 0; + gMoveSelectionCursor[gBattlerAttacker] = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->field_58 + gBattlerAttacker)) + + gBattleScripting.battler = gBattlerAttacker; + gBattlescriptCurrInstr = BattleScript_ActionSwitch; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + + if (gBattleResults.playerSwitchesCounter < 255) + gBattleResults.playerSwitchesCounter++; +} + +void HandleAction_UseItem(void) +{ + gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); + gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8); + + if (gLastUsedItem <= LAST_BALL) // is ball + { + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem]; + } + else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL) + { + gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; + } + else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; + } + else + { + gBattleScripting.battler = gBattlerAttacker; + + switch (*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))) + { + case AI_ITEM_FULL_RESTORE: + case AI_ITEM_HEAL_HP: + break; + case AI_ITEM_CURE_CONDITION: + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1) + { + if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E) + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + while (!(*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1)) + { + *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; + gBattleCommunication[MULTISTRING_CHOOSER]++; + } + } + break; + case AI_ITEM_X_STAT: + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 0x80) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK) + PREPARE_STRING_BUFFER(gBattleTextBuff2, CHAR_X) + + while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1)) + { + *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; + gBattleTextBuff1[2]++; + } + + gBattleScripting.animArg1 = gBattleTextBuff1[2] + 14; + gBattleScripting.animArg2 = 0; + } + break; + case AI_ITEM_GUARD_SPECS: + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + break; + } + + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + gBattlerAttacker / 2)]; + } + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +bool8 TryRunFromBattle(u8 battler) +{ + bool8 effect = FALSE; + u8 holdEffect; + u8 pyramidMultiplier; + u8 speedVar; + + if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY) + holdEffect = gEnigmaBerries[battler].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(gBattleMons[battler].item); + + gPotentialItemEffectBattler = battler; + + if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) + { + gLastUsedItem = gBattleMons[battler].item; + gProtectStructs[battler].fleeFlag = 1; + effect++; + } + else if (gBattleMons[battler].ability == ABILITY_RUN_AWAY) + { + if (InBattlePyramid()) + { + gBattleStruct->runTries++; + pyramidMultiplier = GetPyramidRunMultiplier(); + speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); + if (speedVar > (Random() & 0xFF)) + { + gLastUsedAbility = ABILITY_RUN_AWAY; + gProtectStructs[battler].fleeFlag = 2; + effect++; + } + } + else + { + gLastUsedAbility = ABILITY_RUN_AWAY; + gProtectStructs[battler].fleeFlag = 2; + effect++; + } + } + else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_TRAINER_HILL) && gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + effect++; + } + else + { + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + if (InBattlePyramid()) + { + pyramidMultiplier = GetPyramidRunMultiplier(); + speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); + if (speedVar > (Random() & 0xFF)) + effect++; + } + else if (gBattleMons[battler].speed < gBattleMons[BATTLE_OPPOSITE(battler)].speed) + { + speedVar = (gBattleMons[battler].speed * 128) / (gBattleMons[BATTLE_OPPOSITE(battler)].speed) + (gBattleStruct->runTries * 30); + if (speedVar > (Random() & 0xFF)) + effect++; + } + else // same speed or faster + { + effect++; + } + } + + gBattleStruct->runTries++; + } + + if (effect) + { + gCurrentTurnActionNumber = gBattlersCount; + gBattleOutcome = B_OUTCOME_RAN; + } + + return effect; +} + +void HandleAction_Run(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + + if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) + { + gCurrentTurnActionNumber = gBattlersCount; + + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + { + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) + gBattleOutcome |= B_OUTCOME_LOST; + } + else + { + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN) + gBattleOutcome |= B_OUTCOME_WON; + } + } + + gBattleOutcome |= B_OUTCOME_LINK_BATTLE_RAN; + gSaveBlock2Ptr->frontier.disableRecordBattle = TRUE; + } + else + { + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + { + if (!TryRunFromBattle(gBattlerAttacker)) // failed to run away + { + ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + } + } + else + { + if (gBattleMons[gBattlerAttacker].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + } + else + { + gCurrentTurnActionNumber = gBattlersCount; + gBattleOutcome = B_OUTCOME_MON_FLED; + } + } + } +} + +void HandleAction_WatchesCarefully(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_SafariZoneBallThrow(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gNumSafariBalls--; + gLastUsedItem = ITEM_SAFARI_BALL; + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[ITEM_SAFARI_BALL]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_ThrowPokeblock(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBattlerAttacker][1] - 1; + gLastUsedItem = gBattleBufferB[gBattlerAttacker][2]; + + if (gBattleResults.pokeblockThrows < 0xFF) + gBattleResults.pokeblockThrows++; + if (gBattleStruct->safariPkblThrowCounter < 3) + gBattleStruct->safariPkblThrowCounter++; + if (gBattleStruct->safariEscapeFactor > 1) + { + if (gBattleStruct->safariEscapeFactor < sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]) + gBattleStruct->safariEscapeFactor = 1; + else + gBattleStruct->safariEscapeFactor -= sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]; + } + + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_GoNear(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + + gBattleStruct->safariCatchFactor += sGoNearCounterToCatchFactor[gBattleStruct->safariGoNearCounter]; + if (gBattleStruct->safariCatchFactor > 20) + gBattleStruct->safariCatchFactor = 20; + + gBattleStruct->safariEscapeFactor += sGoNearCounterToEscapeFactor[gBattleStruct->safariGoNearCounter]; + if (gBattleStruct->safariEscapeFactor > 20) + gBattleStruct->safariEscapeFactor = 20; + + if (gBattleStruct->safariGoNearCounter < 3) + { + gBattleStruct->safariGoNearCounter++; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; // Can't get closer. + } + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[1]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; +} + +void HandleAction_SafariZoneRun(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + PlaySE(SE_FLEE); + gCurrentTurnActionNumber = gBattlersCount; + gBattleOutcome = B_OUTCOME_RAN; +} + +void HandleAction_WallyBallThrow(void) +{ + gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]) + + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[3]; + gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; + gActionsByTurnOrder[1] = B_ACTION_FINISHED; +} + +void HandleAction_TryFinish(void) +{ + if (!HandleFaintedMonActions()) + { + gBattleStruct->faintedActionsState = 0; + gCurrentActionFuncId = B_ACTION_FINISHED; + } +} + +void HandleAction_NothingIsFainted(void) +{ + gCurrentTurnActionNumber++; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; + gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 + | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_CHARGING | HITMARKER_x4000000); +} + +void HandleAction_ActionFinished(void) +{ + *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = 6; + gCurrentTurnActionNumber++; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; + SpecialStatusesClear(); + gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 + | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_CHARGING | HITMARKER_x4000000); + + gCurrentMove = 0; + gBattleMoveDamage = 0; + gMoveResultFlags = 0; + gBattleScripting.animTurn = 0; + gBattleScripting.animTargetsHit = 0; + gLastLandedMoves[gBattlerAttacker] = 0; + gLastHitByType[gBattlerAttacker] = 0; + gBattleStruct->dynamicMoveType = 0; + gDynamicBasePower = 0; + gBattleScripting.moveendState = 0; + gBattleCommunication[3] = 0; + gBattleCommunication[4] = 0; + gBattleScripting.multihitMoveEffect = 0; + gBattleResources->battleScriptsStack->size = 0; +} + // rom const data static const u16 sSoundMovesTable[] = { From 00db69a302355626ffd0d3379e7ea0743a010e15 Mon Sep 17 00:00:00 2001 From: aaaaaa123456789 Date: Mon, 26 Oct 2020 12:31:07 -0300 Subject: [PATCH 082/177] Port back improvements from later commits --- src/pokenav_conditions_3.c | 20 ++++---- src/pokenav_menu_handler_1.c | 94 ++++++++++++++++++------------------ src/pokenav_ribbons_1.c | 20 ++++---- src/pokenav_ribbons_2.c | 26 +++++----- src/trainer_hill.c | 6 +-- 5 files changed, 83 insertions(+), 83 deletions(-) diff --git a/src/pokenav_conditions_3.c b/src/pokenav_conditions_3.c index f698cbfa65..c4beb924c2 100644 --- a/src/pokenav_conditions_3.c +++ b/src/pokenav_conditions_3.c @@ -182,15 +182,15 @@ static bool32 HandleConditionSearchInput_WaitSetup(struct PokenavSub7 *structPtr static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr) { - if (gMain.newAndRepeatedKeys & DPAD_UP) - return 1; - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - return 2; - else if (gMain.newKeys & DPAD_LEFT) - return 3; - else if (gMain.newKeys & DPAD_RIGHT) - return 4; - else if (gMain.newKeys & B_BUTTON) + if (JOY_REPEAT(DPAD_UP)) + return CONDITION_SEARCH_FUNC_MOVE_UP; + else if (JOY_REPEAT(DPAD_DOWN)) + return CONDITION_SEARCH_FUNC_MOVE_DOWN; + else if (JOY_NEW(DPAD_LEFT)) + return CONDITION_SEARCH_FUNC_PAGE_UP; + else if (JOY_NEW(DPAD_RIGHT)) + return CONDITION_SEARCH_FUNC_PAGE_DOWN; + else if (JOY_NEW(B_BUTTON)) { structPtr->isPartyCondition = 0; structPtr->callback = ReturnToConditionSearchList; @@ -204,7 +204,7 @@ static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr) return CONDITION_SEARCH_FUNC_SELECT_MON; } else - return 0; + return CONDITION_SEARCH_FUNC_NONE; } static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr) diff --git a/src/pokenav_menu_handler_1.c b/src/pokenav_menu_handler_1.c index b3aaff50bf..35e7a84f90 100644 --- a/src/pokenav_menu_handler_1.c +++ b/src/pokenav_menu_handler_1.c @@ -32,53 +32,53 @@ static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*); static void SetMenuInputHandler(struct Pokenav1Struct *state); // Number of entries - 1 for that menu type -static const u8 sLastCursorPositions[] = +static const u8 sLastCursorPositions[] = { - [POKENAV_MENU_TYPE_DEFAULT] = 2, - [POKENAV_MENU_TYPE_UNLOCK_MC] = 3, - [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4, - [POKENAV_MENU_TYPE_CONDITION] = 2, + [POKENAV_MENU_TYPE_DEFAULT] = 2, + [POKENAV_MENU_TYPE_UNLOCK_MC] = 3, + [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4, + [POKENAV_MENU_TYPE_CONDITION] = 2, [POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5 }; static const u8 sMenuItems[][6] = { - [POKENAV_MENU_TYPE_DEFAULT] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, + [POKENAV_MENU_TYPE_DEFAULT] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, [2 ... 5] = POKENAV_MENUITEM_SWITCH_OFF }, - [POKENAV_MENU_TYPE_UNLOCK_MC] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, - POKENAV_MENUITEM_MATCH_CALL, + [POKENAV_MENU_TYPE_UNLOCK_MC] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, + POKENAV_MENUITEM_MATCH_CALL, [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF }, - [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, - POKENAV_MENUITEM_MATCH_CALL, - POKENAV_MENUITEM_RIBBONS, + [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, + POKENAV_MENUITEM_MATCH_CALL, + POKENAV_MENUITEM_RIBBONS, [4 ... 5] = POKENAV_MENUITEM_SWITCH_OFF }, - [POKENAV_MENU_TYPE_CONDITION] = - { - POKENAV_MENUITEM_CONDITION_PARTY, - POKENAV_MENUITEM_CONDITION_SEARCH, - POKENAV_MENUITEM_CONDITION_CANCEL, + [POKENAV_MENU_TYPE_CONDITION] = + { + POKENAV_MENUITEM_CONDITION_PARTY, + POKENAV_MENUITEM_CONDITION_SEARCH, + POKENAV_MENUITEM_CONDITION_CANCEL, [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF }, - [POKENAV_MENU_TYPE_CONDITION_SEARCH] = - { - POKENAV_MENUITEM_CONDITION_SEARCH_COOL, - POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY, - POKENAV_MENUITEM_CONDITION_SEARCH_CUTE, - POKENAV_MENUITEM_CONDITION_SEARCH_SMART, - POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH, - POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL + [POKENAV_MENU_TYPE_CONDITION_SEARCH] = + { + POKENAV_MENUITEM_CONDITION_SEARCH_COOL, + POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY, + POKENAV_MENUITEM_CONDITION_SEARCH_CUTE, + POKENAV_MENUITEM_CONDITION_SEARCH_SMART, + POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH, + POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL }, }; @@ -87,13 +87,13 @@ static u8 GetPokenavMainMenuType(void) u8 menuType = POKENAV_MENU_TYPE_DEFAULT; if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV)) - { + { menuType = POKENAV_MENU_TYPE_UNLOCK_MC; if (FlagGet(FLAG_SYS_RIBBON_GET)) menuType = POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS; } - + return menuType; } @@ -102,7 +102,7 @@ bool32 PokenavCallback_Init_MainMenuCursorOnMap(void) struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; - + state->menuType = GetPokenavMainMenuType(); state->cursorPos = POKENAV_MENUITEM_MAP; state->currMenuItem = POKENAV_MENUITEM_MAP; @@ -116,7 +116,7 @@ bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void) struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; - + state->menuType = GetPokenavMainMenuType(); state->cursorPos = POKENAV_MENUITEM_MATCH_CALL; state->currMenuItem = POKENAV_MENUITEM_MATCH_CALL; @@ -130,7 +130,7 @@ bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void) struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; - + state->menuType = GetPokenavMainMenuType(); state->cursorPos = POKENAV_MENUITEM_RIBBONS; state->currMenuItem = POKENAV_MENUITEM_RIBBONS; @@ -143,7 +143,7 @@ bool32 PokenavCallback_Init_ConditionMenu(void) struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; - + state->menuType = POKENAV_MENU_TYPE_CONDITION; state->cursorPos = 0; //party state->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY; @@ -157,7 +157,7 @@ bool32 PokenavCallback_Init_ConditionSearchMenu(void) struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; - + state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; state->cursorPos = GetSelectedConditionSearch(); state->currMenuItem = state->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; @@ -251,8 +251,8 @@ static u32 HandleMainMenuInput(struct Pokenav1Struct *state) } } - if (gMain.newKeys & B_BUTTON) - return -1; + if (JOY_NEW(B_BUTTON)) + return POKENAV_MENU_FUNC_EXIT; return POKENAV_MENU_FUNC_NONE; } @@ -277,13 +277,13 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state) return POKENAV_MENU_FUNC_NONE; } } - + if (gMain.newKeys & B_BUTTON) { PlaySE(SE_FAILURE); return POKENAV_MENU_FUNC_NONE; } - + return POKENAV_MENU_FUNC_NONE; } @@ -292,7 +292,7 @@ static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state) { if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - + if (gMain.newKeys & A_BUTTON) { u32 menuItem = sMenuItems[state->menuType][state->cursorPos]; @@ -342,7 +342,7 @@ static u32 HandleConditionMenuInput(struct Pokenav1Struct *state) { if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - + if (gMain.newKeys & A_BUTTON) { switch (sMenuItems[state->menuType][state->cursorPos]) @@ -386,7 +386,7 @@ static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state) { if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - + if (gMain.newKeys & A_BUTTON) { u8 menuItem = sMenuItems[state->menuType][state->cursorPos]; diff --git a/src/pokenav_ribbons_1.c b/src/pokenav_ribbons_1.c index 6c20a0dc35..9c171dd45e 100644 --- a/src/pokenav_ribbons_1.c +++ b/src/pokenav_ribbons_1.c @@ -174,21 +174,21 @@ static u32 HandleRibbonsMonListInput_WaitListInit(struct PokenavSub9 *structPtr) static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr) { - if (gMain.newAndRepeatedKeys & DPAD_UP) - return 1; - if (gMain.newAndRepeatedKeys & DPAD_DOWN) - return 2; - if (gMain.newKeys & DPAD_LEFT) - return 3; - if (gMain.newKeys & DPAD_RIGHT) - return 4; - if (gMain.newKeys & B_BUTTON) + if (JOY_REPEAT(DPAD_UP)) + return RIBBONS_MON_LIST_FUNC_MOVE_UP; + if (JOY_REPEAT(DPAD_DOWN)) + return RIBBONS_MON_LIST_FUNC_MOVE_DOWN; + if (JOY_NEW(DPAD_LEFT)) + return RIBBONS_MON_LIST_FUNC_PAGE_UP; + if (JOY_NEW(DPAD_RIGHT)) + return RIBBONS_MON_LIST_FUNC_PAGE_DOWN; + if (JOY_NEW(B_BUTTON)) { structPtr->saveMonList = 0; structPtr->callback = RibbonsMonMenu_ReturnToMainMenu; return RIBBONS_MON_LIST_FUNC_EXIT; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { structPtr->monList->currIndex = GetSelectedPokenavListIndex(); structPtr->saveMonList = 1; diff --git a/src/pokenav_ribbons_2.c b/src/pokenav_ribbons_2.c index 7764a965da..203aa19e5e 100644 --- a/src/pokenav_ribbons_2.c +++ b/src/pokenav_ribbons_2.c @@ -198,26 +198,26 @@ void FreeRibbonsSummaryScreen1(void) u32 RibbonsSummaryHandleInput(struct PokenavSub13 *structPtr) { - if (gMain.newAndRepeatedKeys & DPAD_UP && structPtr->monList->currIndex != 0) + if (JOY_REPEAT(DPAD_UP) && structPtr->monList->currIndex != 0) { structPtr->monList->currIndex--; structPtr->field_C = 0; sub_81D0814(structPtr); return RIBBONS_SUMMARY_FUNC_MOVED_CURSOR; } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN && structPtr->monList->currIndex < structPtr->monList->listCount - 1) + if (JOY_REPEAT(DPAD_DOWN) && structPtr->monList->currIndex < structPtr->monList->listCount - 1) { structPtr->monList->currIndex++; structPtr->field_C = 0; sub_81D0814(structPtr); return RIBBONS_SUMMARY_FUNC_MOVED_CURSOR; } - else if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { structPtr->callback = HandleExpandedRibbonInput; return RIBBONS_SUMMARY_FUNC_SELECT_RIBBON; } - else if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { structPtr->callback = ReturnToRibbonsListFromSummary; return RIBBONS_SUMMARY_FUNC_EXIT; @@ -227,15 +227,15 @@ u32 RibbonsSummaryHandleInput(struct PokenavSub13 *structPtr) u32 HandleExpandedRibbonInput(struct PokenavSub13 *structPtr) { - if (gMain.newAndRepeatedKeys & DPAD_UP && sub_81D05DC(structPtr)) - return 3; - else if (gMain.newAndRepeatedKeys & DPAD_DOWN && sub_81D061C(structPtr)) - return 3; - else if (gMain.newAndRepeatedKeys & DPAD_LEFT && sub_81D0664(structPtr)) - return 3; - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT && sub_81D0688(structPtr)) - return 3; - else if (gMain.newKeys & B_BUTTON) + if (JOY_REPEAT(DPAD_UP) && sub_81D05DC(structPtr)) + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; + if (JOY_REPEAT(DPAD_DOWN) && sub_81D061C(structPtr)) + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; + if (JOY_REPEAT(DPAD_LEFT) && sub_81D0664(structPtr)) + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; + if (JOY_REPEAT(DPAD_RIGHT) && sub_81D0688(structPtr)) + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; + if (JOY_NEW(B_BUTTON)) { structPtr->callback = RibbonsSummaryHandleInput; return RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 75271cab0a..18d56723cf 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -671,14 +671,14 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void) return TRUE; } -static u32 GetMetatileForFloor(u8 floorId, u32 bit, u32 arg2, u32 arg3) +static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 stride) // stride is always 16 { bool8 impassable; u16 metatile; u16 elevation; - impassable = (sHillData->floors[floorId].display.collisionData[arg2] >> (15 - bit)) & 1; - metatile = sHillData->floors[floorId].display.metatileData[arg2 * arg3 + bit] + 0x200; + impassable = (sHillData->floors[floorId].display.collisionData[y] >> (15 - x) & 1); + metatile = sHillData->floors[floorId].display.metatileData[stride * y + x] + 0x200; elevation = 0x3000; return (((impassable << 10) & METATILE_COLLISION_MASK) | elevation) | (metatile & METATILE_ID_MASK); From 4bbc14ecdd628d5509d6b9b3f074aa783d00afa8 Mon Sep 17 00:00:00 2001 From: aaaaaa123456789 Date: Mon, 26 Oct 2020 15:51:10 -0300 Subject: [PATCH 083/177] Remove unused variable Co-authored-by: Seija <71219152+PokeCodec@users.noreply.github.com> --- src/contest.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/contest.c b/src/contest.c index a4f73ef902..d592ef8cc1 100644 --- a/src/contest.c +++ b/src/contest.c @@ -998,7 +998,6 @@ void ResetLinkContestBoolean(void) static void SetupContestGpuRegs(void) { - u16 savedIme; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -6100,4 +6099,3 @@ void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 langua } } - From bcbd05e1510c8af636291a067533ba6290084ade Mon Sep 17 00:00:00 2001 From: aaaaaa123456789 Date: Mon, 26 Oct 2020 15:52:44 -0300 Subject: [PATCH 084/177] Fix whitespace issues --- src/contest.c | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/src/contest.c b/src/contest.c index d592ef8cc1..53f1f573d9 100644 --- a/src/contest.c +++ b/src/contest.c @@ -950,39 +950,39 @@ const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTA static const s8 gContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] = { - [CONTEST_CATEGORY_COOL] = { - [CONTEST_CATEGORY_COOL] = +1, - [CONTEST_CATEGORY_BEAUTY] = 0, - [CONTEST_CATEGORY_CUTE] = -1, - [CONTEST_CATEGORY_SMART] = -1, + [CONTEST_CATEGORY_COOL] = { + [CONTEST_CATEGORY_COOL] = +1, + [CONTEST_CATEGORY_BEAUTY] = 0, + [CONTEST_CATEGORY_CUTE] = -1, + [CONTEST_CATEGORY_SMART] = -1, [CONTEST_CATEGORY_TOUGH] = 0 }, - [CONTEST_CATEGORY_BEAUTY] = { - [CONTEST_CATEGORY_COOL] = 0, - [CONTEST_CATEGORY_BEAUTY] = +1, - [CONTEST_CATEGORY_CUTE] = 0, - [CONTEST_CATEGORY_SMART] = -1, + [CONTEST_CATEGORY_BEAUTY] = { + [CONTEST_CATEGORY_COOL] = 0, + [CONTEST_CATEGORY_BEAUTY] = +1, + [CONTEST_CATEGORY_CUTE] = 0, + [CONTEST_CATEGORY_SMART] = -1, [CONTEST_CATEGORY_TOUGH] = -1 }, [CONTEST_CATEGORY_CUTE] = { - [CONTEST_CATEGORY_COOL] = -1, - [CONTEST_CATEGORY_BEAUTY] = 0, - [CONTEST_CATEGORY_CUTE] = +1, - [CONTEST_CATEGORY_SMART] = 0, + [CONTEST_CATEGORY_COOL] = -1, + [CONTEST_CATEGORY_BEAUTY] = 0, + [CONTEST_CATEGORY_CUTE] = +1, + [CONTEST_CATEGORY_SMART] = 0, [CONTEST_CATEGORY_TOUGH] = -1 }, [CONTEST_CATEGORY_SMART] = { - [CONTEST_CATEGORY_COOL] = -1, - [CONTEST_CATEGORY_BEAUTY] = -1, - [CONTEST_CATEGORY_CUTE] = 0, - [CONTEST_CATEGORY_SMART] = +1, + [CONTEST_CATEGORY_COOL] = -1, + [CONTEST_CATEGORY_BEAUTY] = -1, + [CONTEST_CATEGORY_CUTE] = 0, + [CONTEST_CATEGORY_SMART] = +1, [CONTEST_CATEGORY_TOUGH] = 0 }, - [CONTEST_CATEGORY_TOUGH] = { - [CONTEST_CATEGORY_COOL] = 0, - [CONTEST_CATEGORY_BEAUTY] = -1, - [CONTEST_CATEGORY_CUTE] = -1, - [CONTEST_CATEGORY_SMART] = 0, + [CONTEST_CATEGORY_TOUGH] = { + [CONTEST_CATEGORY_COOL] = 0, + [CONTEST_CATEGORY_BEAUTY] = -1, + [CONTEST_CATEGORY_CUTE] = -1, + [CONTEST_CATEGORY_SMART] = 0, [CONTEST_CATEGORY_TOUGH] = +1 } }; @@ -998,7 +998,6 @@ void ResetLinkContestBoolean(void) static void SetupContestGpuRegs(void) { - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); From 9794b077b501ca8c9e5e3f1b6cdd705ec2129d24 Mon Sep 17 00:00:00 2001 From: aaaaaa123456789 Date: Mon, 26 Oct 2020 19:14:08 -0300 Subject: [PATCH 085/177] Update src/digit_obj_util.c Co-authored-by: Seija <71219152+PokeCodec@users.noreply.github.com> --- src/digit_obj_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c index fe5d49e69d..f887dafb95 100644 --- a/src/digit_obj_util.c +++ b/src/digit_obj_util.c @@ -33,7 +33,7 @@ struct DigitPrinterAlloc }; // this file's functions -static u8 GetFirstOamId(u8 oamCount);; +static u8 GetFirstOamId(u8 oamCount); static void CopyWorkToOam(struct DigitPrinter *objWork); static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign); static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign); From be1685c87fd683c2c4efc6d2ca173d5344bfcf2f Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Oct 2020 16:34:33 -0400 Subject: [PATCH 086/177] Use constants for menu info icon table --- include/menu.h | 11 ++++++++- src/decoration.c | 4 ++-- src/item_menu.c | 10 ++++---- src/menu.c | 60 ++++++++++++++++++++++++------------------------ src/union_room.c | 8 +++---- 5 files changed, 51 insertions(+), 42 deletions(-) diff --git a/include/menu.h b/include/menu.h index 1bd8007426..c9d8e374df 100644 --- a/include/menu.h +++ b/include/menu.h @@ -4,6 +4,7 @@ #include "task.h" #include "text.h" #include "window.h" +#include "constants/pokemon.h" #define MENU_NOTHING_CHOSEN -2 #define MENU_B_PRESSED -1 @@ -14,6 +15,14 @@ #define MENU_CURSOR_DELTA_LEFT -1 #define MENU_CURSOR_DELTA_RIGHT 1 +#define MENU_INFO_ICON_TYPE (NUMBER_OF_MON_TYPES + 1) +#define MENU_INFO_ICON_POWER (NUMBER_OF_MON_TYPES + 2) +#define MENU_INFO_ICON_ACCURACY (NUMBER_OF_MON_TYPES + 3) +#define MENU_INFO_ICON_PP (NUMBER_OF_MON_TYPES + 4) +#define MENU_INFO_ICON_EFFECT (NUMBER_OF_MON_TYPES + 5) +#define MENU_INFO_ICON_BALL_RED (NUMBER_OF_MON_TYPES + 6) +#define MENU_INFO_ICON_BALL_BLUE (NUMBER_OF_MON_TYPES + 7) + enum { SAVE_MENU_NAME, @@ -61,7 +70,7 @@ u8 InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 windowId, u8 numItems, u8 i u8 Menu_GetCursorPos(void); s8 Menu_ProcessInput(void); s8 Menu_ProcessInputNoWrap(void); -void blit_move_info_icon(u8 winId, u8 a2, u16 x, u16 y); +void BlitMenuInfoIcon(u8 winId, u8 a2, u16 x, u16 y); void ResetTempTileDataBuffers(void); void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); bool8 FreeTempTileDataBuffersIfPossible(void); diff --git a/src/decoration.c b/src/decoration.c index 22ae327f9e..8a3f86dfd2 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -917,9 +917,9 @@ static void DecorationItemsMenu_PrintDecorationInUse(u8 windowId, s32 itemIndex, if (itemIndex != -2) { if (IsDecorationIndexInSecretBase(itemIndex + 1) == TRUE) - blit_move_info_icon(windowId, 0x18, 0x5c, y + 2); + BlitMenuInfoIcon(windowId, MENU_INFO_ICON_BALL_RED, 92, y + 2); else if (IsDecorationIndexInPlayersRoom(itemIndex + 1) == TRUE) - blit_move_info_icon(windowId, 0x19, 0x5c, y + 2); + BlitMenuInfoIcon(windowId, MENU_INFO_ICON_BALL_BLUE, 92, y + 2); } } diff --git a/src/item_menu.c b/src/item_menu.c index d5e50fc2da..c764f4e81e 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2456,10 +2456,10 @@ static void RemoveMoneyWindow(void) void BagMenu_PrepareTMHMMoveWindow(void) { FillWindowPixelBuffer(3, PIXEL_FILL(0)); - blit_move_info_icon(3, 19, 0, 0); - blit_move_info_icon(3, 20, 0, 12); - blit_move_info_icon(3, 21, 0, 24); - blit_move_info_icon(3, 22, 0, 36); + BlitMenuInfoIcon(3, MENU_INFO_ICON_TYPE, 0, 0); + BlitMenuInfoIcon(3, MENU_INFO_ICON_POWER, 0, 12); + BlitMenuInfoIcon(3, MENU_INFO_ICON_ACCURACY, 0, 24); + BlitMenuInfoIcon(3, MENU_INFO_ICON_PP, 0, 36); CopyWindowToVram(3, 2); } @@ -2479,7 +2479,7 @@ void PrintTMHMMoveData(u16 itemId) else { moveId = ItemIdToBattleMoveId(itemId); - blit_move_info_icon(4, gBattleMoves[moveId].type + 1, 0, 0); + BlitMenuInfoIcon(4, gBattleMoves[moveId].type + 1, 0, 0); if (gBattleMoves[moveId].power <= 1) { text = gText_ThreeDashes; diff --git a/src/menu.c b/src/menu.c index 9c5dec024e..457fc2bf29 100644 --- a/src/menu.c +++ b/src/menu.c @@ -25,7 +25,7 @@ #define STD_WINDOW_PALETTE_NUM 14 #define STD_WINDOW_BASE_TILE_NUM 0x214 -struct MoveMenuInfoIcon +struct MenuInfoIcon { u8 width; u8 height; @@ -98,34 +98,34 @@ const u16 gUnknown_0860F0B0[] = INCBIN_U16("graphics/interface/860F0B0.gbapal"); const u8 sTextColors[] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY }; // Table of move info icon offsets in graphics/interface_fr/menu.png -const struct MoveMenuInfoIcon gMoveMenuInfoIcons[] = +static const struct MenuInfoIcon sMenuInfoIcons[] = { // { width, height, offset } - { 12, 12, 0x00 }, // Unused - { 32, 12, 0x20 }, // Normal icon - { 32, 12, 0x64 }, // Fight icon - { 32, 12, 0x60 }, // Flying icon - { 32, 12, 0x80 }, // Poison icon - { 32, 12, 0x48 }, // Ground icon - { 32, 12, 0x44 }, // Rock icon - { 32, 12, 0x6C }, // Bug icon - { 32, 12, 0x68 }, // Ghost icon - { 32, 12, 0x88 }, // Steel icon - { 32, 12, 0xA4 }, // ??? (Mystery) icon - { 32, 12, 0x24 }, // Fire icon - { 32, 12, 0x28 }, // Water icon - { 32, 12, 0x2C }, // Grass icon - { 32, 12, 0x40 }, // Electric icon - { 32, 12, 0x84 }, // Psychic icon - { 32, 12, 0x4C }, // Ice icon - { 32, 12, 0xA0 }, // Dragon icon - { 32, 12, 0x8C }, // Dark icon - { 42, 12, 0xA8 }, // -Type- icon - { 42, 12, 0xC0 }, // -Power- icon - { 42, 12, 0xC8 }, // -Accuracy- icon - { 42, 12, 0xE0 }, // -PP- icon - { 42, 12, 0xE8 }, // -Effect- icon - { 8, 8, 0xAE }, // Unused (Small white pokeball) - { 8, 8, 0xAF }, // Unused (Small dark pokeball) + { 12, 12, 0x00 }, // Unused + [TYPE_NORMAL + 1] = { 32, 12, 0x20 }, + [TYPE_FIGHTING + 1] = { 32, 12, 0x64 }, + [TYPE_FLYING + 1] = { 32, 12, 0x60 }, + [TYPE_POISON + 1] = { 32, 12, 0x80 }, + [TYPE_GROUND + 1] = { 32, 12, 0x48 }, + [TYPE_ROCK + 1] = { 32, 12, 0x44 }, + [TYPE_BUG + 1] = { 32, 12, 0x6C }, + [TYPE_GHOST + 1] = { 32, 12, 0x68 }, + [TYPE_STEEL + 1] = { 32, 12, 0x88 }, + [TYPE_MYSTERY + 1] = { 32, 12, 0xA4 }, + [TYPE_FIRE + 1] = { 32, 12, 0x24 }, + [TYPE_WATER + 1] = { 32, 12, 0x28 }, + [TYPE_GRASS + 1] = { 32, 12, 0x2C }, + [TYPE_ELECTRIC + 1] = { 32, 12, 0x40 }, + [TYPE_PSYCHIC + 1] = { 32, 12, 0x84 }, + [TYPE_ICE + 1] = { 32, 12, 0x4C }, + [TYPE_DRAGON + 1] = { 32, 12, 0xA0 }, + [TYPE_DARK + 1] = { 32, 12, 0x8C }, + [MENU_INFO_ICON_TYPE] = { 42, 12, 0xA8 }, + [MENU_INFO_ICON_POWER] = { 42, 12, 0xC0 }, + [MENU_INFO_ICON_ACCURACY] = { 42, 12, 0xC8 }, + [MENU_INFO_ICON_PP] = { 42, 12, 0xE0 }, + [MENU_INFO_ICON_EFFECT] = { 42, 12, 0xE8 }, // Unused + [MENU_INFO_ICON_BALL_RED] = { 8, 8, 0xAE }, // For placed decorations in Secret Base + [MENU_INFO_ICON_BALL_BLUE] = { 8, 8, 0xAF }, // For placed decorations in player's room }; @@ -2119,9 +2119,9 @@ void ListMenuLoadStdPalAt(u8 palOffset, u8 palId) LoadPalette(palette, palOffset, 0x20); } -void blit_move_info_icon(u8 windowId, u8 iconId, u16 x, u16 y) +void BlitMenuInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y) { - BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gMoveMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, gMoveMenuInfoIcons[iconId].width, gMoveMenuInfoIcons[iconId].height); + BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + sMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, sMenuInfoIcons[iconId].width, sMenuInfoIcons[iconId].height); } void BufferSaveMenuText(u8 textId, u8 *dest, u8 color) diff --git a/src/union_room.c b/src/union_room.c index b247a69e3d..0f8aa042d6 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -4076,14 +4076,14 @@ static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname UR_AddTextPrinterParameterized(windowId, 1, uname, 8, y, colorIdx); if (species == SPECIES_EGG) { - UR_AddTextPrinterParameterized(windowId, 1, sText_EggTrade, 0x44, y, colorIdx); + UR_AddTextPrinterParameterized(windowId, 1, sText_EggTrade, 68, y, colorIdx); } else { - blit_move_info_icon(windowId, type + 1, 0x44, y); - UR_AddTextPrinterParameterized(windowId, 1, gSpeciesNames[species], 0x76, y, colorIdx); + BlitMenuInfoIcon(windowId, type + 1, 68, y); + UR_AddTextPrinterParameterized(windowId, 1, gSpeciesNames[species], 118, y, colorIdx); ConvertIntToDecimalStringN(levelStr, level, STR_CONV_MODE_RIGHT_ALIGN, 3); - UR_AddTextPrinterParameterized(windowId, 1, levelStr, 0xC6, y, colorIdx); + UR_AddTextPrinterParameterized(windowId, 1, levelStr, 198, y, colorIdx); } } From 8bf401c2272b7c4182f54cb1285f6067fb5247f9 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 2 Nov 2020 18:43:11 -0500 Subject: [PATCH 087/177] address comments --- include/battle_main.h | 2 -- src/battle_anim_bug.c | 9 ++------- src/battle_anim_dark.c | 2 -- src/battle_anim_effects_3.c | 10 ++++----- src/battle_anim_flying.c | 2 +- src/battle_anim_psychic.c | 2 +- src/battle_anim_utility_funcs.c | 2 +- src/battle_dome.c | 2 +- src/battle_records.c | 2 +- src/contest.c | 10 ++++----- src/contest_util.c | 4 ++-- src/credits.c | 2 +- src/event_object_movement.c | 36 ++++++--------------------------- src/intro_credits_graphics.c | 4 ++-- src/m4a.c | 2 +- src/overworld.c | 2 +- src/pokedex.c | 28 ++++++++++++------------- src/pokenav_main_menu.c | 6 +++--- src/save_failed_screen.c | 2 +- 19 files changed, 48 insertions(+), 81 deletions(-) diff --git a/include/battle_main.h b/include/battle_main.h index 1c2c50f1c0..0176f7f244 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -73,8 +73,6 @@ void nullsub_20(void); void BeginBattleIntro(void); void SwitchInClearSetData(void); void FaintClearSetData(void); -void sub_803B3AC(void); // unused -void sub_803B598(void); // unused void BattleTurnPassed(void); u8 IsRunningFromBattleImpossible(void); void SwitchPartyOrder(u8 battlerId); diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index ea3df80986..b8aba89764 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -387,13 +387,8 @@ static void AnimTranslateStinger(struct Sprite *sprite) if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT) { - s16 temp1, temp2; - - temp1 = gBattleAnimArgs[2]; - gBattleAnimArgs[2] = -temp1; - - temp2 = gBattleAnimArgs[0]; - gBattleAnimArgs[0] = -temp2; + gBattleAnimArgs[2] *= -1; + gBattleAnimArgs[0] *= -1; } } diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c index faa5884a59..7253b52472 100644 --- a/src/battle_anim_dark.c +++ b/src/battle_anim_dark.c @@ -635,8 +635,6 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId) static void AnimTask_MoveTargetMementoShadow_Step(u8 taskId) { - u8 pos; - u16 i; struct Task *task = &gTasks[taskId]; switch (task->data[0]) diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index bad46f1445..8f7ab85413 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -5007,7 +5007,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) int otId; u16 species; u8 subpriority; - u8 isBackPic; + bool8 isBackPic; s16 x; switch (gTasks[taskId].data[0]) @@ -5035,7 +5035,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) otId = gContestResources->moveAnim->otId; species = gContestResources->moveAnim->species; subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker); - isBackPic = 0; + isBackPic = FALSE; x = -32; } else @@ -5050,7 +5050,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1; - isBackPic = 0; + isBackPic = FALSE; x = 272; } else @@ -5063,7 +5063,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1; - isBackPic = 1; + isBackPic = TRUE; x = -32; } } @@ -5138,7 +5138,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) gSprites[spriteId].pos2.x = 0; } - gTasks[taskId].data[1] = (u8)gTasks[taskId].data[1]; + gTasks[taskId].data[1] &= 0xFF; if (gSprites[spriteId].pos2.x == 0) DestroyAnimVisualTask(taskId); break; diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index d7f079886f..f8d47f4ec0 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -1199,7 +1199,7 @@ static void AnimSkyAttackBird(struct Sprite *sprite) sprite->data[7] = ((posy - sprite->pos1.y) << 4) / 12; rotation = ArcTan2Neg(posx - sprite->pos1.x, posy - sprite->pos1.y); - rotation += 49152; + rotation -= 16384; TrySetSpriteRotScale(sprite, 1, 0x100, 0x100, rotation); diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index 0a07b9070b..3f451998c4 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -1101,7 +1101,7 @@ static void AnimTask_TransparentCloneGrowAndShrink_Step(u8 taskId) break; case 1: task->data[1] -= 4; - task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);; + task->data[2] = 256 - (gSineTable[task->data[1]] >> 1); SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0); SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]); if (task->data[1] == 0) diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index af48ac3b9c..9790cf9eac 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -569,7 +569,7 @@ static void sub_81172EC(u8 taskId) if (gTasks[taskId].data[12] == 0) { sub_80A477C(0); - gTasks[taskId].data[15]++;; + gTasks[taskId].data[15]++; } } break; diff --git a/src/battle_dome.c b/src/battle_dome.c index d78b7f366c..8d6e7f8257 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -5292,7 +5292,7 @@ static void Task_ShowTourneyTree(u8 taskId) gTasks[taskId].tState++; break; case 2: - sTilemapBuffer = AllocZeroed(0x800); + sTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); LZDecompressWram(gDomeTourneyLineMask_Tilemap, sTilemapBuffer); SetBgTilemapBuffer(1, sTilemapBuffer); CopyBgTilemapBufferToVram(1); diff --git a/src/battle_records.c b/src/battle_records.c index c6363a6eda..680733527b 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -485,7 +485,7 @@ static void CB2_ShowTrainerHillRecords(void) gMain.state++; break; case 2: - sTilemapBuffer = AllocZeroed(0x800); + sTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sTrainerHillRecordsBgTemplates, ARRAY_COUNT(sTrainerHillRecordsBgTemplates)); SetBgTilemapBuffer(3, sTilemapBuffer); diff --git a/src/contest.c b/src/contest.c index b509c896a2..198e68dd32 100644 --- a/src/contest.c +++ b/src/contest.c @@ -4142,12 +4142,12 @@ static u8 CreateContestantBoxBlinkSprites(u8 contestant) CpuFill32(0, gContestResources->boxBlinkTiles2 + 0x500, 0x300); RequestDma3Copy(gContestResources->boxBlinkTiles1, - (u8 *)(VRAM + 0x10000 + gSprites[spriteId1].oam.tileNum * 32), + (u8 *)(OBJ_VRAM0 + gSprites[spriteId1].oam.tileNum * 32), 0x800, 1); RequestDma3Copy(gContestResources->boxBlinkTiles2, - (u8 *)(VRAM + 0x10000 + gSprites[spriteId2].oam.tileNum * 32), + (u8 *)(OBJ_VRAM0 + gSprites[spriteId2].oam.tileNum * 32), 0x800, 1); @@ -4736,8 +4736,8 @@ static void UpdateApplauseMeter(void) src = &gContestApplauseMeterGfx[64]; else src = gContestApplauseMeterGfx; - CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32); - CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32); + CpuCopy32(src, (void *)(OBJ_VRAM0 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32); + CpuCopy32(src + 32, (void *)(OBJ_VRAM0 + (gSprites[eContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32); if (eContest.applauseLevel > 4) StartApplauseOverflowAnimation(); @@ -5018,7 +5018,7 @@ static void ShowHideNextTurnGfx(bool8 show) { if (eContestantStatus[i].turnOrderMod != 0 && show) { - CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32); + CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(OBJ_VRAM0 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32); gSprites[eContestGfxState[i].nextTurnSpriteId].pos1.y = sNextTurnSpriteYPositions[gContestantTurnOrder[i]]; gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = FALSE; } diff --git a/src/contest_util.c b/src/contest_util.c index 7f94681469..21408c6735 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -1178,10 +1178,10 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) src = (u8 *)(sUnknown_0858D6D0); sprite = &gSprites[spriteId]; - spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + VRAM + 0x10000); + spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + OBJ_VRAM0); for (i = 1; i < 4; i++) - spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + VRAM + 0x10000); + spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + OBJ_VRAM0); for (i = 0; i < 4; i++) CpuFill32(0, spriteTilePtrs[i], 0x400); diff --git a/src/credits.c b/src/credits.c index 020221f305..5f331097b9 100644 --- a/src/credits.c +++ b/src/credits.c @@ -1160,7 +1160,7 @@ static void sub_8175548(void) { ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBackgroundTemplates, 1); - SetBgTilemapBuffer(0, AllocZeroed(0x800)); + SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); LoadPalette(gUnknown_085E56F0, 0x80, 0x40); InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 38a4b3240e..6d89adea65 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -8509,23 +8509,11 @@ void sub_809783C(struct Sprite *sprite, u8 a2, u8 a3, u8 a4) sprite->data[6] = 0; } -static const s16 gUnknown_0850E840[] = { - 16, 16, 32, -}; - -static const u8 gUnknown_0850E846[] = { - 0, 0, 1, -}; - u8 sub_809785C(struct Sprite *sprite) { - s16 v5[3]; - u8 v6[3]; - u8 v2; - - memcpy(v5, gUnknown_0850E840, 6); // TODO: get rid of memcpy - memcpy(v6, gUnknown_0850E846, 3); - v2 = 0; + s16 v5[] = {16, 16, 32}; + u8 v6[] = {0, 0, 1}; + u8 v2 = 0; if (sprite->data[4]) Step1(sprite, sprite->data[3]); @@ -8546,23 +8534,11 @@ u8 sub_809785C(struct Sprite *sprite) return v2; } -static const s16 gUnknown_0850E84A[] = { - 32, 32, 64, -}; - -static const u8 gUnknown_0850E850[] = { - 1, 1, 2, -}; - u8 sub_80978E4(struct Sprite *sprite) { - s16 v5[3]; - u8 v6[3]; - u8 v2; - - memcpy(v5, gUnknown_0850E84A, 6); - memcpy(v6, gUnknown_0850E850, 3); - v2 = 0; + s16 v5[] = {32, 32, 64}; + u8 v6[] = {1, 1, 2}; + u8 v2 = 0; if (sprite->data[4] && !(sprite->data[6] & 1)) Step1(sprite, sprite->data[3]); diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 04e2216f64..45cc24e5c8 100644 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -824,7 +824,7 @@ void sub_817B1C8(u8 a) LZ77UnCompVram(gUnknown_085F1398, (void *)(BG_SCREEN_ADDR(6))); LoadPalette(&gUnknown_085F0CFC, 0, 96); LoadCompressedSpriteSheet(gUnknown_085F5064); - LZ77UnCompVram(gUnknown_085F16A8, (void *)(VRAM + 0x10000)); + LZ77UnCompVram(gUnknown_085F16A8, (void *)(OBJ_VRAM0)); LoadPalette(&gUnknown_085F1668, 256, 32); sub_817B76C(); break; @@ -834,7 +834,7 @@ void sub_817B1C8(u8 a) LZ77UnCompVram(gUnknown_085F1398, (void *)(BG_SCREEN_ADDR(6))); LoadPalette(&gUnknown_085F0D5C, 0, 96); LoadCompressedSpriteSheet(gUnknown_085F5064); - LZ77UnCompVram(gUnknown_085F16A8, (void *)(VRAM + 0x10000)); + LZ77UnCompVram(gUnknown_085F16A8, (void *)(OBJ_VRAM0)); LoadPalette(&gUnknown_085F1688, 256, 32); sub_817B76C(); break; diff --git a/src/m4a.c b/src/m4a.c index 11a4525eab..50a9a54bed 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -635,7 +635,7 @@ void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader track++; } - if (songHeader->reverb & 0x80) + if (songHeader->reverb & SOUND_MODE_REVERB_SET) m4aSoundMode(songHeader->reverb); mplayInfo->ident = ID_NUMBER; diff --git a/src/overworld.c b/src/overworld.c index 4bf5d4fab3..d18e3d3bc1 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -3189,7 +3189,7 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1); sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation); - if (!linkPlayerObjEvent->movementMode != MOVEMENT_MODE_FREE) + if (linkPlayerObjEvent->movementMode == MOVEMENT_MODE_FREE) StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte)); else StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte)); diff --git a/src/pokedex.c b/src/pokedex.c index 6b9ee7a114..40b45e53ed 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -2060,10 +2060,10 @@ static bool8 LoadPokedexListPage(u8 page) SetGpuReg(REG_OFFSET_BG2VOFS, sPokedexView->initialVOffset); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sPokedex_BgTemplate, ARRAY_COUNT(sPokedex_BgTemplate)); - SetBgTilemapBuffer(3, AllocZeroed(0x800)); - SetBgTilemapBuffer(2, AllocZeroed(0x800)); - SetBgTilemapBuffer(1, AllocZeroed(0x800)); - SetBgTilemapBuffer(0, AllocZeroed(0x800)); + SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(1, gPokedexList_Tilemap, 0, 0); CopyToBgTilemapBuffer(3, gPokedexListUnderlay_Tilemap, 0, 0); @@ -3186,10 +3186,10 @@ static u8 LoadInfoScreen(struct PokedexListItem* item, u8 monSpriteId) gTasks[taskId].data[5] = 255; ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sInfoScreen_BgTemplate, ARRAY_COUNT(sInfoScreen_BgTemplate)); - SetBgTilemapBuffer(3, AllocZeroed(0x800)); - SetBgTilemapBuffer(2, AllocZeroed(0x800)); - SetBgTilemapBuffer(1, AllocZeroed(0x800)); - SetBgTilemapBuffer(0, AllocZeroed(0x800)); + SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); InitWindows(sInfoScreen_WindowTemplates); DeactivateAllTextPrinters(); @@ -3951,8 +3951,8 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId) ResetOtherVideoRegisters(DISPCNT_BG0_ON); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sNewEntryInfoScreen_BgTemplate, ARRAY_COUNT(sNewEntryInfoScreen_BgTemplate)); - SetBgTilemapBuffer(3, AllocZeroed(0x800)); - SetBgTilemapBuffer(2, AllocZeroed(0x800)); + SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE)); InitWindows(sNewEntryInfoScreen_WindowTemplates); DeactivateAllTextPrinters(); gTasks[taskId].tState = 1; @@ -4812,10 +4812,10 @@ static void Task_LoadSearchMenu(u8 taskId) ResetOtherVideoRegisters(0); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sSearchMenu_BgTemplate, ARRAY_COUNT(sSearchMenu_BgTemplate)); - SetBgTilemapBuffer(3, AllocZeroed(0x800)); - SetBgTilemapBuffer(2, AllocZeroed(0x800)); - SetBgTilemapBuffer(1, AllocZeroed(0x800)); - SetBgTilemapBuffer(0, AllocZeroed(0x800)); + SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(2, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE)); InitWindows(sSearchMenu_WindowTemplate); DeactivateAllTextPrinters(); PutWindowTilemap(0); diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index a100e2c23f..fc7004a886 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -436,9 +436,9 @@ static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0) if (ChangeBgY(0, 384, 2) <= 0) { ChangeBgY(0, 0, 0); - return 4; + return LT_FINISH; } - return 2; + return LT_PAUSE; } void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) @@ -682,7 +682,7 @@ static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) size = GetDecompressedDataSize(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data); LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20); LZ77UnCompWram(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data, gDecompressionBuffer); - RequestDma3Copy(gDecompressionBuffer, (void *)VRAM + 0x10000 + (GetSpriteTileStartByTag(2) * 32), size, 1); + RequestDma3Copy(gDecompressionBuffer, (void *)OBJ_VRAM0 + (GetSpriteTileStartByTag(2) * 32), size, 1); structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].size; if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT || menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_IN) diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index a2a2acc8d6..7c824e82dd 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -349,7 +349,7 @@ static void VBlankCB_UpdateClockGraphics(void) gMain.oamBuffer[0] = sClockOamData; gMain.oamBuffer[0].x = 112; - gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8;; + gMain.oamBuffer[0].y = (CLOCK_WIN_TOP + 1) * 8; if (gSaveFailedClockInfo[CLOCK_RUNNING] != FALSE) { From bacc831aa91d059936bd7c852bf0a0fb44d8f27a Mon Sep 17 00:00:00 2001 From: aaaaaa123456789 Date: Mon, 2 Nov 2020 22:02:39 -0300 Subject: [PATCH 088/177] Re-apply joypad macros (minus merge conflicts) --- gflib/text.c | 6 +- src/apprentice.c | 4 +- src/battle_controller_player.c | 74 +++++++-------- src/battle_controller_safari.c | 10 +- src/battle_dome.c | 24 ++--- src/battle_factory_screen.c | 54 +++++------ src/battle_main.c | 10 +- src/battle_pyramid_bag.c | 26 +++--- src/battle_records.c | 2 +- src/battle_script_commands.c | 32 +++---- src/berry_crush.c | 8 +- src/berry_fix_program.c | 8 +- src/berry_tag_screen.c | 4 +- src/cable_club.c | 10 +- src/contest.c | 4 +- src/contest_painting.c | 2 +- src/credits.c | 2 +- src/daycare.c | 4 +- src/decoration.c | 27 +++--- src/diploma.c | 2 +- src/dodrio_berry_picking.c | 20 ++-- src/easy_chat.c | 64 ++++++------- src/ereader_screen.c | 10 +- src/evolution_scene.c | 8 +- src/field_player_avatar.c | 4 +- src/field_special_scene.c | 2 +- src/frontier_pass.c | 18 ++-- src/hall_of_fame.c | 12 +-- src/item_menu.c | 42 ++++----- src/item_use.c | 4 +- src/link.c | 16 ++-- src/list_menu.c | 14 +-- src/mail.c | 2 +- src/main.c | 4 +- src/main_menu.c | 16 ++-- src/match_call.c | 4 +- src/menu.c | 72 +++++++-------- src/menu_helpers.c | 16 ++-- src/mon_markings.c | 8 +- src/move_relearner.c | 4 +- src/mystery_event_menu.c | 10 +- src/mystery_gift.c | 10 +- src/option_menu.c | 26 +++--- src/overworld.c | 17 ++-- src/party_menu.c | 18 ++-- src/player_pc.c | 14 +-- src/pokeblock.c | 8 +- src/pokedex.c | 106 ++++++++++----------- src/pokedex_area_screen.c | 4 +- src/pokemon_jump.c | 6 +- src/pokemon_storage_system.c | 163 +++++++++++++++++---------------- src/pokemon_summary_screen.c | 50 +++++----- src/pokenav_match_call_1.c | 28 +++--- src/pokenav_match_call_2.c | 2 +- src/pokenav_menu_handler_1.c | 14 +-- src/pokenav_region_map.c | 2 +- src/region_map.c | 24 ++--- src/reset_rtc_screen.c | 16 ++-- src/save_failed_screen.c | 4 +- src/scrcmd.c | 4 +- src/script_menu.c | 2 +- src/shop.c | 8 +- src/slot_machine.c | 2 +- src/start_menu.c | 14 +-- src/title_screen.c | 8 +- src/trade.c | 20 ++-- src/trainer_card.c | 8 +- src/union_room.c | 22 ++--- src/union_room_chat.c | 24 ++--- src/unk_text_util_2.c | 4 +- src/wallclock.c | 8 +- 71 files changed, 651 insertions(+), 648 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 9f7fcde494..30c142fa88 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -765,7 +765,7 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) else { TextPrinterDrawDownArrow(textPrinter); - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { result = TRUE; PlaySE(SE_SELECT); @@ -844,13 +844,13 @@ u16 RenderText(struct TextPrinter *textPrinter) switch (textPrinter->state) { case 0: - if ((gMain.heldKeys & (A_BUTTON | B_BUTTON)) && subStruct->hasPrintBeenSpedUp) + if ((JOY_HELD(A_BUTTON | B_BUTTON)) && subStruct->hasPrintBeenSpedUp) textPrinter->delayCounter = 0; if (textPrinter->delayCounter && textPrinter->textSpeed) { textPrinter->delayCounter--; - if (gTextFlags.canABSpeedUpPrint && (gMain.newKeys & (A_BUTTON | B_BUTTON))) + if (gTextFlags.canABSpeedUpPrint && (JOY_NEW(A_BUTTON | B_BUTTON))) { subStruct->hasPrintBeenSpedUp = TRUE; textPrinter->delayCounter = 0; diff --git a/src/apprentice.c b/src/apprentice.c index 7ef0949888..ad157f301e 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -1296,13 +1296,13 @@ const u8 *GetApprenticeNameInLanguage(u32 apprenticeId, s32 language) // Functionally unused static void Task_SwitchToFollowupFuncAfterButtonPress(u8 taskId) { - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) SwitchTaskToFollowupFunc(taskId); } static void Task_ExecuteFuncAfterButtonPress(u8 taskId) { - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { gApprenticeFunc = (void*)(u32)(((u16)gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 16))); gApprenticeFunc(); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index d8005e808c..7c34efd443 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -240,12 +240,12 @@ static void HandleInputChooseAction(void) DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); - if (gMain.newAndRepeatedKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + if (JOY_REPEAT(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; else gPlayerDpadHoldFrames = 0; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); @@ -266,7 +266,7 @@ static void HandleInputChooseAction(void) } PlayerBufferExecCompleted(); } - else if (gMain.newKeys & DPAD_LEFT) + else if (JOY_NEW(DPAD_LEFT)) { if (gActionSelectionCursor[gActiveBattler] & 1) // if is B_ACTION_USE_ITEM or B_ACTION_RUN { @@ -276,7 +276,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (gMain.newKeys & DPAD_RIGHT) + else if (JOY_NEW(DPAD_RIGHT)) { if (!(gActionSelectionCursor[gActiveBattler] & 1)) // if is B_ACTION_USE_MOVE or B_ACTION_SWITCH { @@ -286,7 +286,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { if (gActionSelectionCursor[gActiveBattler] & 2) // if is B_ACTION_SWITCH or B_ACTION_RUN { @@ -296,7 +296,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (!(gActionSelectionCursor[gActiveBattler] & 2)) // if is B_ACTION_USE_MOVE or B_ACTION_USE_ITEM { @@ -306,7 +306,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59) + else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT @@ -326,7 +326,7 @@ static void HandleInputChooseAction(void) PlayerBufferExecCompleted(); } } - else if (gMain.newKeys & START_BUTTON) + else if (JOY_NEW(START_BUTTON)) { SwapHpBarsWithHpText(); } @@ -359,12 +359,12 @@ static void HandleInputChooseTarget(void) } while (i < gBattlersCount); } - if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; else gPlayerDpadHoldFrames = 0; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; @@ -372,7 +372,7 @@ static void HandleInputChooseTarget(void) EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); PlayerBufferExecCompleted(); } - else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59) + else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; @@ -381,7 +381,7 @@ static void HandleInputChooseTarget(void) DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); } - else if (gMain.newKeys & (DPAD_LEFT | DPAD_UP)) + else if (JOY_NEW(DPAD_LEFT | DPAD_UP)) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; @@ -423,7 +423,7 @@ static void HandleInputChooseTarget(void) } while (i == 0); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget; } - else if (gMain.newKeys & (DPAD_RIGHT | DPAD_DOWN)) + else if (JOY_NEW(DPAD_RIGHT | DPAD_DOWN)) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; @@ -472,12 +472,12 @@ static void HandleInputChooseMove(void) bool32 canSelectTarget = FALSE; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]); - if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; else gPlayerDpadHoldFrames = 0; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { u8 moveTarget; @@ -539,13 +539,13 @@ static void HandleInputChooseMove(void) gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget; } } - else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59) + else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(1, 10, 0xFFFF); PlayerBufferExecCompleted(); } - else if (gMain.newKeys & DPAD_LEFT) + else if (JOY_NEW(DPAD_LEFT)) { if (gMoveSelectionCursor[gActiveBattler] & 1) { @@ -557,7 +557,7 @@ static void HandleInputChooseMove(void) MoveSelectionDisplayMoveType(); } } - else if (gMain.newKeys & DPAD_RIGHT) + else if (JOY_NEW(DPAD_RIGHT)) { if (!(gMoveSelectionCursor[gActiveBattler] & 1) && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose) @@ -570,7 +570,7 @@ static void HandleInputChooseMove(void) MoveSelectionDisplayMoveType(); } } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { if (gMoveSelectionCursor[gActiveBattler] & 2) { @@ -582,7 +582,7 @@ static void HandleInputChooseMove(void) MoveSelectionDisplayMoveType(); } } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (!(gMoveSelectionCursor[gActiveBattler] & 2) && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose) @@ -595,7 +595,7 @@ static void HandleInputChooseMove(void) MoveSelectionDisplayMoveType(); } } - else if (gMain.newKeys & SELECT_BUTTON) + else if (JOY_NEW(SELECT_BUTTON)) { if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -617,26 +617,26 @@ u32 sub_8057FBC(void) // unused { u32 var = 0; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); var = 1; } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); gBattle_BG0_X = 0; gBattle_BG0_Y = 0x140; var = 0xFF; } - if (gMain.newKeys & DPAD_LEFT && gMoveSelectionCursor[gActiveBattler] & 1) + if (JOY_NEW(DPAD_LEFT) && gMoveSelectionCursor[gActiveBattler] & 1) { MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); gMoveSelectionCursor[gActiveBattler] ^= 1; PlaySE(SE_SELECT); MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); } - if (gMain.newKeys & DPAD_RIGHT && !(gMoveSelectionCursor[gActiveBattler] & 1) + if (JOY_NEW(DPAD_RIGHT) && !(gMoveSelectionCursor[gActiveBattler] & 1) && (gMoveSelectionCursor[gActiveBattler] ^ 1) < gNumberOfMovesToChoose) { MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); @@ -644,14 +644,14 @@ u32 sub_8057FBC(void) // unused PlaySE(SE_SELECT); MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); } - if (gMain.newKeys & DPAD_UP && gMoveSelectionCursor[gActiveBattler] & 2) + if (JOY_NEW(DPAD_UP) && gMoveSelectionCursor[gActiveBattler] & 2) { MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); gMoveSelectionCursor[gActiveBattler] ^= 2; PlaySE(SE_SELECT); MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); } - if (gMain.newKeys & DPAD_DOWN && !(gMoveSelectionCursor[gActiveBattler] & 2) + if (JOY_NEW(DPAD_DOWN) && !(gMoveSelectionCursor[gActiveBattler] & 2) && (gMoveSelectionCursor[gActiveBattler] ^ 2) < gNumberOfMovesToChoose) { MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); @@ -669,7 +669,7 @@ static void HandleMoveSwitching(void) struct ChooseMoveStruct moveStruct; u8 totalPPBonuses; - if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON)) + if (JOY_NEW(A_BUTTON | SELECT_BUTTON)) { PlaySE(SE_SELECT); @@ -763,7 +763,7 @@ static void HandleMoveSwitching(void) MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); } - else if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) + else if (JOY_NEW(B_BUTTON | SELECT_BUTTON)) { PlaySE(SE_SELECT); MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor); @@ -773,7 +773,7 @@ static void HandleMoveSwitching(void) MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); } - else if (gMain.newKeys & DPAD_LEFT) + else if (JOY_NEW(DPAD_LEFT)) { if (gMultiUsePlayerCursor & 1) { @@ -791,7 +791,7 @@ static void HandleMoveSwitching(void) MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); } } - else if (gMain.newKeys & DPAD_RIGHT) + else if (JOY_NEW(DPAD_RIGHT)) { if (!(gMultiUsePlayerCursor & 1) && (gMultiUsePlayerCursor ^ 1) < gNumberOfMovesToChoose) { @@ -809,7 +809,7 @@ static void HandleMoveSwitching(void) MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); } } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { if (gMultiUsePlayerCursor & 2) { @@ -827,7 +827,7 @@ static void HandleMoveSwitching(void) MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27); } } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (!(gMultiUsePlayerCursor & 2) && (gMultiUsePlayerCursor ^ 2) < gNumberOfMovesToChoose) { @@ -1402,21 +1402,21 @@ static void DoHitAnimBlinkSpriteEffect(void) static void PlayerHandleUnknownYesNoInput(void) { - if (gMain.newKeys & DPAD_UP && gMultiUsePlayerCursor != 0) + if (JOY_NEW(DPAD_UP) && gMultiUsePlayerCursor != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gMultiUsePlayerCursor); gMultiUsePlayerCursor = 0; BattleCreateYesNoCursorAt(0); } - if (gMain.newKeys & DPAD_DOWN && gMultiUsePlayerCursor == 0) + if (JOY_NEW(DPAD_DOWN) && gMultiUsePlayerCursor == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gMultiUsePlayerCursor); gMultiUsePlayerCursor = 1; BattleCreateYesNoCursorAt(1); } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); PlaySE(SE_SELECT); @@ -1428,7 +1428,7 @@ static void PlayerHandleUnknownYesNoInput(void) PlayerBufferExecCompleted(); } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); PlaySE(SE_SELECT); diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 70e41cf8d2..9cb427e129 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -170,7 +170,7 @@ static void SafariBufferRunCommand(void) static void HandleInputChooseAction(void) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); @@ -191,7 +191,7 @@ static void HandleInputChooseAction(void) } SafariBufferExecCompleted(); } - else if (gMain.newKeys & DPAD_LEFT) + else if (JOY_NEW(DPAD_LEFT)) { if (gActionSelectionCursor[gActiveBattler] & 1) { @@ -201,7 +201,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (gMain.newKeys & DPAD_RIGHT) + else if (JOY_NEW(DPAD_RIGHT)) { if (!(gActionSelectionCursor[gActiveBattler] & 1)) { @@ -211,7 +211,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { if (gActionSelectionCursor[gActiveBattler] & 2) { @@ -221,7 +221,7 @@ static void HandleInputChooseAction(void) ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (!(gActionSelectionCursor[gActiveBattler] & 2)) { diff --git a/src/battle_dome.c b/src/battle_dome.c index c305081c0b..ce2f3cde6a 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -4110,7 +4110,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) u8 tourneyId = sTourneyTreeTrainerIds[position]; u16 roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) input = INFOCARD_INPUT_AB; // Next opponent card cant scroll @@ -4121,7 +4121,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) { // For trainer info cards, pos is 0 when on a trainer info card (not viewing that trainer's match progression) // Scrolling up/down from a trainer info card goes to other trainer info cards - if (gMain.newKeys & DPAD_UP && sInfoCard->pos == 0) + if (JOY_NEW(DPAD_UP) && sInfoCard->pos == 0) { if (position == 0) position = DOME_TOURNAMENT_TRAINERS_COUNT - 1; @@ -4129,7 +4129,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) position--; input = TRAINERCARD_INPUT_UP; } - else if (gMain.newKeys & DPAD_DOWN && sInfoCard->pos == 0) + else if (JOY_NEW(DPAD_DOWN) && sInfoCard->pos == 0) { if (position == DOME_TOURNAMENT_TRAINERS_COUNT - 1) position = 0; @@ -4138,13 +4138,13 @@ static u8 Task_GetInfoCardInput(u8 taskId) input = TRAINERCARD_INPUT_DOWN; } // Scrolling left can only be done after scrolling right - else if (gMain.newKeys & DPAD_LEFT && sInfoCard->pos != 0) + else if (JOY_NEW(DPAD_LEFT) && sInfoCard->pos != 0) { sInfoCard->pos--; input = TRAINERCARD_INPUT_LEFT; } // Scrolling right from a trainer info card shows their match progression - else if (gMain.newKeys & DPAD_RIGHT) + else if (JOY_NEW(DPAD_RIGHT)) { // Can only scroll right from a trainer card until the round they were eliminated if (DOME_TRAINERS[tourneyId].isEliminated && sInfoCard->pos - 1 < DOME_TRAINERS[tourneyId].eliminatedAt) @@ -4172,7 +4172,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) { // For match info cards, pos is 1 when on the match card, 0 when on the left trainer, and 1 when on the right trainer // Scrolling up/down from a match info card goes to the next/previous match - if (gMain.newKeys & DPAD_UP && sInfoCard->pos == 1) + if (JOY_NEW(DPAD_UP) && sInfoCard->pos == 1) { if (position == DOME_TOURNAMENT_TRAINERS_COUNT) position = sLastMatchCardNum[roundId]; @@ -4180,7 +4180,7 @@ static u8 Task_GetInfoCardInput(u8 taskId) position--; input = MATCHCARD_INPUT_UP; } - else if (gMain.newKeys & DPAD_DOWN && sInfoCard->pos == 1) + else if (JOY_NEW(DPAD_DOWN) && sInfoCard->pos == 1) { if (position == sLastMatchCardNum[roundId]) position = DOME_TOURNAMENT_TRAINERS_COUNT; @@ -4189,12 +4189,12 @@ static u8 Task_GetInfoCardInput(u8 taskId) input = MATCHCARD_INPUT_DOWN; } // Scrolling left/right from a match info card shows the trainer info card of the competitors for that match - else if (gMain.newKeys & DPAD_LEFT && sInfoCard->pos != 0) + else if (JOY_NEW(DPAD_LEFT) && sInfoCard->pos != 0) { input = MATCHCARD_INPUT_LEFT; sInfoCard->pos--; } - else if (gMain.newKeys & DPAD_RIGHT && (sInfoCard->pos == 0 || sInfoCard->pos == 1)) + else if (JOY_NEW(DPAD_RIGHT) && (sInfoCard->pos == 0 || sInfoCard->pos == 1)) { input = MATCHCARD_INPUT_RIGHT; sInfoCard->pos++; @@ -5042,12 +5042,12 @@ static u8 UpdateTourneyTreeCursor(u8 taskId) int tourneyTreeCursorSpriteId = gTasks[taskId].data[1]; int roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - if (gMain.newKeys == B_BUTTON || (gMain.newKeys & A_BUTTON && tourneyTreeCursorSpriteId == TOURNEY_TREE_CLOSE_BUTTON)) + if (gMain.newKeys == B_BUTTON || (JOY_NEW(A_BUTTON) && tourneyTreeCursorSpriteId == TOURNEY_TREE_CLOSE_BUTTON)) { PlaySE(SE_SELECT); selection = TOURNEY_TREE_SELECTED_CLOSE; } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { if (tourneyTreeCursorSpriteId < DOME_TOURNAMENT_TRAINERS_COUNT) { @@ -5551,7 +5551,7 @@ static void Task_HandleStaticTourneyTreeInput(u8 taskId) gTasks[taskId].tState = STATE_WAIT_FOR_INPUT; break; case STATE_WAIT_FOR_INPUT: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].tState = STATE_CLOSE_TOURNEY_TREE; diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 388881a1c4..a3fa275c5c 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1478,7 +1478,7 @@ static void Task_HandleSelectionScreenYesNo(u8 taskId) gTasks[taskId].data[0] = 5; break; case 5: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if (sFactorySelectScreen->yesNoCursorPos == 0) @@ -1496,7 +1496,7 @@ static void Task_HandleSelectionScreenYesNo(u8 taskId) gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); sub_819B958(4); @@ -1505,12 +1505,12 @@ static void Task_HandleSelectionScreenYesNo(u8 taskId) gTasks[taskId].data[0] = 1; gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (JOY_REPEAT(DPAD_UP)) { PlaySE(SE_SELECT); Select_UpdateYesNoCursorPosition(-1); } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { PlaySE(SE_SELECT); Select_UpdateYesNoCursorPosition(1); @@ -1538,7 +1538,7 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) } break; case 3: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { u8 retVal; PlaySE(SE_SELECT); @@ -1565,7 +1565,7 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) gTasks[taskId].func = Task_FromSelectScreenToSummaryScreen; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); @@ -1574,12 +1574,12 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) gTasks[taskId].data[0] = 1; gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (JOY_REPEAT(DPAD_UP)) { PlaySE(SE_SELECT); Select_UpdateMenuCursorPosition(-1); } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { PlaySE(SE_SELECT); Select_UpdateMenuCursorPosition(1); @@ -1618,21 +1618,21 @@ static void Task_HandleSelectionScreenChooseMons(u8 taskId) } break; case 1: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); sFactorySelectScreen->unk2A2 = FALSE; gTasks[taskId].data[0] = 2; gTasks[taskId].func = Task_HandleSelectionScreenMenu; } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + else if (JOY_REPEAT(DPAD_LEFT)) { PlaySE(SE_SELECT); Select_UpdateBallCursorPosition(-1); Select_PrintMonCategory(); Select_PrintMonSpecies(); } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_RIGHT)) { PlaySE(SE_SELECT); Select_UpdateBallCursorPosition(1); @@ -1641,7 +1641,7 @@ static void Task_HandleSelectionScreenChooseMons(u8 taskId) } break; case 11: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); @@ -2361,7 +2361,7 @@ static void Task_HandleSwapScreenYesNo(u8 taskId) gTasks[taskId].data[0] = 5; break; case 5: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if (sFactorySwapScreen->yesNoCursorPos == 0) @@ -2380,7 +2380,7 @@ static void Task_HandleSwapScreenYesNo(u8 taskId) gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); gTasks[taskId].data[1] = 0; @@ -2389,12 +2389,12 @@ static void Task_HandleSwapScreenYesNo(u8 taskId) loPtr = gTasks[taskId].data[7]; gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (JOY_REPEAT(DPAD_UP)) { PlaySE(SE_SELECT); Swap_UpdateYesNoCursorPosition(-1); } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { PlaySE(SE_SELECT); Swap_UpdateYesNoCursorPosition(1); @@ -2485,12 +2485,12 @@ static void Task_HandleSwapScreenMenu(u8 taskId) case 3: if (sFactorySwapScreen->unk30 != TRUE) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); Swap_RunMenuOptionFunc(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); @@ -2501,11 +2501,11 @@ static void Task_HandleSwapScreenMenu(u8 taskId) gTasks[taskId].data[5] = 1; gTasks[taskId].func = sub_819D770; } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (JOY_REPEAT(DPAD_UP)) { Swap_UpdateMenuCursorPosition(-1); } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { Swap_UpdateMenuCursorPosition(1); } @@ -2526,7 +2526,7 @@ static void Task_HandleSwapScreenChooseMons(u8 taskId) } break; case 1: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); sFactorySwapScreen->unk22 = FALSE; @@ -2534,7 +2534,7 @@ static void Task_HandleSwapScreenChooseMons(u8 taskId) sub_819EAC0(); Swap_RunActionFunc(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); sFactorySwapScreen->unk22 = FALSE; @@ -2546,25 +2546,25 @@ static void Task_HandleSwapScreenChooseMons(u8 taskId) gTasks[taskId].data[5] = 0; gTasks[taskId].func = sub_819D588; } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + else if (JOY_REPEAT(DPAD_LEFT)) { Swap_UpdateBallCursorPosition(-1); Swap_PrintMonCategory(); Swap_PrintMonSpecies(); } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_RIGHT)) { Swap_UpdateBallCursorPosition(1); Swap_PrintMonCategory(); Swap_PrintMonSpecies(); } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { Swap_UpdateActionCursorPosition(1); Swap_PrintMonCategory(); Swap_PrintMonSpecies(); } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (JOY_REPEAT(DPAD_UP)) { Swap_UpdateActionCursorPosition(-1); Swap_PrintMonCategory(); @@ -3929,7 +3929,7 @@ static void Task_SwapCantHaveSameMons(u8 taskId) gTasks[taskId].data[0]++; break; case 1: - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); diff --git a/src/battle_main.c b/src/battle_main.c index ec4c651f01..acc65008e1 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1831,7 +1831,7 @@ void BattleMainCB2(void) UpdatePaletteFade(); RunTasks(); - if (gMain.heldKeys & B_BUTTON && gBattleTypeFlags & BATTLE_TYPE_RECORDED && sub_8186450()) + if (JOY_HELD(B_BUTTON) && gBattleTypeFlags & BATTLE_TYPE_RECORDED && sub_8186450()) { gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; ResetPaletteFadeControl(); @@ -2487,7 +2487,7 @@ static void sub_803939C(void) } break; case 5: - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { if (gBattleCommunication[CURSOR_POSITION] != 0) { @@ -2497,7 +2497,7 @@ static void sub_803939C(void) BattleCreateYesNoCursorAt(0); } } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (gBattleCommunication[CURSOR_POSITION] == 0) { @@ -2507,7 +2507,7 @@ static void sub_803939C(void) BattleCreateYesNoCursorAt(1); } } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if (gBattleCommunication[CURSOR_POSITION] == 0) @@ -2521,7 +2521,7 @@ static void sub_803939C(void) gBattleCommunication[MULTIUSE_STATE]++; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); gBattleCommunication[MULTIUSE_STATE]++; diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index e038e71e18..8fee578554 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -839,7 +839,7 @@ static void Task_HandlePyramidBagInput(u8 taskId) s16 *data = gTasks[taskId].data; if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active) { - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { if (gPyramidBagCursorData.unk4 != 2) { @@ -965,7 +965,7 @@ static void HandleMenuActionInput(u8 taskId) if (MenuHelpers_CallLinkSomething() != TRUE) { s8 id = Menu_GetCursorPos(); - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { if (id > 0 && IsValidMenuAction(id - 2)) { @@ -973,7 +973,7 @@ static void HandleMenuActionInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); } } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (id < gPyramidBagResources->menuActionsCount - 2 && IsValidMenuAction(id + 2)) { @@ -981,7 +981,7 @@ static void HandleMenuActionInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); } } - else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) + else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { if (id & 1 && IsValidMenuAction(id - 1)) { @@ -989,7 +989,7 @@ static void HandleMenuActionInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); } } - else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) + else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { if (!(id & 1) && IsValidMenuAction(id + 1)) { @@ -997,13 +997,13 @@ static void HandleMenuActionInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); } } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if (sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8 != NULL) sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); sMenuActions[ACTION_CANCEL].func.void_u8(taskId); @@ -1143,7 +1143,7 @@ static void sub_81C64B4(u8 taskId) { sub_81C645C(data[8]); } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); ClearStdWindowAndFrameToTransparent(3, 0); @@ -1151,7 +1151,7 @@ static void sub_81C64B4(u8 taskId) ScheduleBgCopyTilemapToVram(1); sub_81C6350(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); ClearStdWindowAndFrameToTransparent(3, 0); @@ -1179,7 +1179,7 @@ static void sub_81C65CC(u8 taskId) u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition; u16 *selectedRow = &gPyramidBagCursorData.cursorPosition; - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); RemovePyramidBagItem(gSpecialVar_ItemId, data[8]); @@ -1220,7 +1220,7 @@ static void sub_81C66AC(u8 taskId) static void sub_81C66EC(u8 taskId) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); Task_CloseBattlePyramidBagMessage(taskId); @@ -1277,7 +1277,7 @@ static void Task_ItemSwapHandleInput(u8 taskId) s16 *data = gTasks[taskId].data; if (MenuHelpers_CallLinkSomething() != TRUE) { - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { PlaySE(SE_SELECT); ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition); @@ -1295,7 +1295,7 @@ static void Task_ItemSwapHandleInput(u8 taskId) break; case LIST_CANCEL: PlaySE(SE_SELECT); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) PerformItemSwap(taskId); else sub_81C6A14(taskId); diff --git a/src/battle_records.c b/src/battle_records.c index 680733527b..a8b9ead14b 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -356,7 +356,7 @@ static void Task_CloseTrainerHillRecordsOnButton(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); task->func = Task_BeginPaletteFade; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 690b26d49f..d43ddd5a2a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5362,21 +5362,21 @@ static void Cmd_yesnoboxlearnmove(void) BattleCreateYesNoCursorAt(0); break; case 1: - if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0) + if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); } - if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0) + if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 1; BattleCreateYesNoCursorAt(1); } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if (gBattleCommunication[1] == 0) @@ -5390,7 +5390,7 @@ static void Cmd_yesnoboxlearnmove(void) gBattleScripting.learnMoveState = 5; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); gBattleScripting.learnMoveState = 5; @@ -5479,21 +5479,21 @@ static void Cmd_yesnoboxstoplearningmove(void) BattleCreateYesNoCursorAt(0); break; case 1: - if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0) + if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); } - if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0) + if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 1; BattleCreateYesNoCursorAt(1); } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); @@ -5504,7 +5504,7 @@ static void Cmd_yesnoboxstoplearningmove(void) HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); @@ -5774,28 +5774,28 @@ static void Cmd_yesnobox(void) BattleCreateYesNoCursorAt(0); break; case 1: - if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0) + if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); } - if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0) + if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 1; BattleCreateYesNoCursorAt(1); } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { gBattleCommunication[CURSOR_POSITION] = 1; PlaySE(SE_SELECT); HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); gBattlescriptCurrInstr++; } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); @@ -10074,21 +10074,21 @@ static void Cmd_trygivecaughtmonnick(void) BattleCreateYesNoCursorAt(0); break; case 1: - if (gMain.newKeys & DPAD_UP && gBattleCommunication[CURSOR_POSITION] != 0) + if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 0; BattleCreateYesNoCursorAt(0); } - if (gMain.newKeys & DPAD_DOWN && gBattleCommunication[CURSOR_POSITION] == 0) + if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); gBattleCommunication[CURSOR_POSITION] = 1; BattleCreateYesNoCursorAt(1); } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if (gBattleCommunication[CURSOR_POSITION] == 0) @@ -10101,7 +10101,7 @@ static void Cmd_trygivecaughtmonnick(void) gBattleCommunication[MULTIUSE_STATE] = 4; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); gBattleCommunication[MULTIUSE_STATE] = 4; diff --git a/src/berry_crush.c b/src/berry_crush.c index 76d2d74500..671d0ad2ba 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1665,7 +1665,7 @@ static void Task_ShowBerryCrushRankings(u8 taskId) CopyWindowToVram(data[1], 3); break; case 2: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) break; else return; @@ -2498,9 +2498,9 @@ void sub_8023558(struct BerryCrushGame *r3) void sub_80236B8(struct BerryCrushGame *r5) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) r5->unk5C.unk02_2 = 1; - if (gMain.heldKeys & A_BUTTON) + if (JOY_HELD(A_BUTTON)) { if (r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5] < r5->unk28) ++r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5]; @@ -2966,7 +2966,7 @@ static u32 sub_8024048(struct BerryCrushGame *r5, u8 *r6) --r5->unk138.unk0; return 0; } - if (!(gMain.newKeys & A_BUTTON)) + if (!(JOY_NEW(A_BUTTON))) return 0; PlaySE(SE_SELECT); sub_802222C(r5); diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index dcc21d0368..4c4a010b22 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -190,13 +190,13 @@ static void berry_fix_main(void) berry_fix_mb_manager->state = 1; break; case 1: - if (berry_fix_text_update(5) == 5 && (gMain.newKeys & A_BUTTON)) + if (berry_fix_text_update(5) == 5 && (JOY_NEW(A_BUTTON))) { berry_fix_mb_manager->state = 2; } break; case 2: - if (berry_fix_text_update(0) == 0 && (gMain.newKeys & A_BUTTON)) + if (berry_fix_text_update(0) == 0 && (JOY_NEW(A_BUTTON))) { berry_fix_mb_manager->state = 3; } @@ -235,13 +235,13 @@ static void berry_fix_main(void) } break; case 6: - if (berry_fix_text_update(3) == 3 && gMain.newKeys & A_BUTTON) + if (berry_fix_text_update(3) == 3 && JOY_NEW(A_BUTTON)) { DoSoftReset(); } break; case 7: - if (berry_fix_text_update(4) == 4 && gMain.newKeys & A_BUTTON) + if (berry_fix_text_update(4) == 4 && JOY_NEW(A_BUTTON)) { berry_fix_mb_manager->state = 1; } diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index e5c89bdb71..089228b17b 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -536,12 +536,12 @@ static void Task_HandleInput(u8 taskId) { if (!gPaletteFade.active) { - u16 arrowKeys = gMain.newAndRepeatedKeys & DPAD_ANY; + u16 arrowKeys = JOY_REPEAT(DPAD_ANY); if (arrowKeys == DPAD_UP) TryChangeDisplayedBerry(taskId, -1); else if (arrowKeys == DPAD_DOWN) TryChangeDisplayedBerry(taskId, 1); - else if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + else if (JOY_NEW(A_BUTTON | B_BUTTON)) PrepareToCloseBerryTagScreen(taskId); } } diff --git a/src/cable_club.c b/src/cable_club.c index 93f87ec9bd..f02683c9d1 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -163,7 +163,7 @@ static bool32 CheckLinkErrored(u8 taskId) static bool32 CheckLinkCanceledBeforeConnection(u8 taskId) { - if ((gMain.newKeys & B_BUTTON) + if ((JOY_NEW(B_BUTTON)) && IsLinkConnectionEstablished() == FALSE) { gLinkType = 0; @@ -178,7 +178,7 @@ static bool32 CheckLinkCanceled(u8 taskId) if (IsLinkConnectionEstablished()) SetSuppressLinkErrorMessage(TRUE); - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { gLinkType = 0; gTasks[taskId].func = Task_LinkupFailed; @@ -277,7 +277,7 @@ static void Task_LinkupAwaitConfirmation(u8 taskId) UpdateLinkPlayerCountDisplay(taskId, linkPlayerCount); - if (!(gMain.newKeys & A_BUTTON)) + if (!(JOY_NEW(A_BUTTON))) return; if (linkPlayerCount < tMinPlayers) @@ -304,12 +304,12 @@ static void Task_LinkupTryConfirmation(u8 taskId) ShowFieldAutoScrollMessage(gText_ConfirmLinkWhenPlayersReady); gTasks[taskId].func = Task_LinkupConfirmWhenReady; } - else if (gMain.heldKeys & B_BUTTON) + else if (JOY_HELD(B_BUTTON)) { ShowFieldAutoScrollMessage(gText_ConfirmLinkWhenPlayersReady); gTasks[taskId].func = Task_LinkupConfirmWhenReady; } - else if (gMain.heldKeys & A_BUTTON) + else if (JOY_HELD(A_BUTTON)) { PlaySE(SE_SELECT); CheckShouldAdvanceLinkState(); diff --git a/src/contest.c b/src/contest.c index b961e6e1bb..f775b01b49 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1492,7 +1492,7 @@ static void Task_DisplayAppealNumberText(u8 taskId) static void Task_TryShowMoveSelectScreen(u8 taskId) { // Wait for button press to show move select screen - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON)) + if ((JOY_NEW(A_BUTTON)) || (gMain.newKeys == B_BUTTON)) { PlaySE(SE_SELECT); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) @@ -1558,7 +1558,7 @@ static void Task_HandleMoveSelectInput(u8 taskId) numMoves++; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); gTasks[taskId].func = Task_SelectedMove; diff --git a/src/contest_painting.c b/src/contest_painting.c index ccf97c4608..8832b59e89 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -248,7 +248,7 @@ static void HoldContestPainting(void) gContestPaintingFadeCounter--; break; case 1: - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) { gContestPaintingState++; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); diff --git a/src/credits.c b/src/credits.c index 97d1e2b2f4..41d1c16866 100644 --- a/src/credits.c +++ b/src/credits.c @@ -1142,7 +1142,7 @@ static void CB2_RunCreditsSequence(void) RunTasks(); AnimateSprites(); - if ((gMain.heldKeys & B_BUTTON) + if ((JOY_HELD(B_BUTTON)) && gHasHallOfFameRecords != 0 && gTasks[gUnknown_0203BCE2].func == Task_ProgressCreditTasks) { diff --git a/src/daycare.c b/src/daycare.c index d6b2e207f2..a438c8e857 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1236,7 +1236,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) { u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuListTaskId); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { switch (input) { @@ -1254,7 +1254,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) DestroyTask(taskId); EnableBothScriptContexts(); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU; DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); diff --git a/src/decoration.c b/src/decoration.c index 40cccbe5ef..87b3d651d8 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1147,7 +1147,7 @@ static void DontTossDecoration(u8 taskId) static void ReturnToDecorationItemsAfterInvalidSelection(u8 taskId) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearDialogWindowAndFrame(0, 0); AddDecorationWindow(WINDOW_DECORATION_CATEGORIES); @@ -1803,7 +1803,7 @@ static bool8 ApplyCursorMovement_IsInvalid(u8 taskId) static bool8 IsHoldingDirection(void) { - u16 heldKeys = gMain.heldKeys & DPAD_ANY; + u16 heldKeys = JOY_HELD(DPAD_ANY); if (heldKeys != DPAD_UP && heldKeys != DPAD_DOWN && heldKeys != DPAD_LEFT && heldKeys != DPAD_RIGHT) return FALSE; @@ -1827,13 +1827,14 @@ static void Task_SelectLocation(u8 taskId) sPlacePutAwayYesNoFunctions[tDecorationItemsMenuCommand].yesFunc(taskId); return; } - else if (tButton == B_BUTTON) + + if (tButton == B_BUTTON) { sPlacePutAwayYesNoFunctions[tDecorationItemsMenuCommand].noFunc(taskId); return; } - if ((gMain.heldKeys & DPAD_ANY) == DPAD_UP) + if ((JOY_HELD(DPAD_ANY)) == DPAD_UP) { sDecorationLastDirectionMoved = DIR_SOUTH; gSprites[sDecor_CameraSpriteObjectIdx1].data[2] = 0; @@ -1841,7 +1842,7 @@ static void Task_SelectLocation(u8 taskId) tCursorY--; } - if ((gMain.heldKeys & DPAD_ANY) == DPAD_DOWN) + if ((JOY_HELD(DPAD_ANY)) == DPAD_DOWN) { sDecorationLastDirectionMoved = DIR_NORTH; gSprites[sDecor_CameraSpriteObjectIdx1].data[2] = 0; @@ -1849,7 +1850,7 @@ static void Task_SelectLocation(u8 taskId) tCursorY++; } - if ((gMain.heldKeys & DPAD_ANY) == DPAD_LEFT) + if ((JOY_HELD(DPAD_ANY)) == DPAD_LEFT) { sDecorationLastDirectionMoved = DIR_WEST; gSprites[sDecor_CameraSpriteObjectIdx1].data[2] = -2; @@ -1857,7 +1858,7 @@ static void Task_SelectLocation(u8 taskId) tCursorX--; } - if ((gMain.heldKeys & DPAD_ANY) == DPAD_RIGHT) + if ((JOY_HELD(DPAD_ANY)) == DPAD_RIGHT) { sDecorationLastDirectionMoved = DIR_EAST; gSprites[sDecor_CameraSpriteObjectIdx1].data[2] = 2; @@ -1877,10 +1878,10 @@ static void Task_SelectLocation(u8 taskId) if (!tButton) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) tButton = A_BUTTON; - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) tButton = B_BUTTON; } } @@ -1895,7 +1896,7 @@ static void ContinueDecorating(u8 taskId) static void CantPlaceDecorationPrompt(u8 taskId) { - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) ContinueDecorating(taskId); } @@ -1928,7 +1929,7 @@ static void CopyTile(u8 *dest, u16 tile) case BG_TILE_H_FLIP(0) >> 10: for (i = 0; i < 8; i++) { - dest[4 * i] = (buffer[4 * (i + 1) - 1] >> 4) + ((buffer[4 * (i + 1) - 1] & 0x0F) << 4); + dest[4 * i + 0] = (buffer[4 * (i + 1) - 1] >> 4) + ((buffer[4 * (i + 1) - 1] & 0x0F) << 4); dest[4 * i + 1] = (buffer[4 * (i + 1) - 2] >> 4) + ((buffer[4 * (i + 1) - 2] & 0x0F) << 4); dest[4 * i + 2] = (buffer[4 * (i + 1) - 3] >> 4) + ((buffer[4 * (i + 1) - 3] & 0x0F) << 4); dest[4 * i + 3] = (buffer[4 * (i + 1) - 4] >> 4) + ((buffer[4 * (i + 1) - 4] & 0x0F) << 4); @@ -1937,7 +1938,7 @@ static void CopyTile(u8 *dest, u16 tile) case BG_TILE_V_FLIP(0) >> 10: for (i = 0; i < 8; i++) { - dest[4 * i] = buffer[4 * (7 - i)]; + dest[4 * i + 0] = buffer[4 * (7 - i) + 0]; dest[4 * i + 1] = buffer[4 * (7 - i) + 1]; dest[4 * i + 2] = buffer[4 * (7 - i) + 2]; dest[4 * i + 3] = buffer[4 * (7 - i) + 3]; @@ -2386,7 +2387,7 @@ static void AttemptPutAwayDecoration_(u8 taskId) static void ContinuePuttingAwayDecorationsPrompt(u8 taskId) { - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) ContinuePuttingAwayDecorations(taskId); } diff --git a/src/diploma.c b/src/diploma.c index 7eb3b0e81d..f243d09f96 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -107,7 +107,7 @@ static void Task_DiplomaFadeIn(u8 taskId) static void Task_DiplomaWaitForKeyPress(u8 taskId) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = Task_DiplomaFadeOut; diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 1e274a4a13..66eacc5f92 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -2354,19 +2354,19 @@ static void sub_8027554(void) { if (gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] == 0) { - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 2; gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; PlaySE(SE_M_CHARM); } - else if (gMain.newKeys & DPAD_LEFT) + else if (JOY_NEW(DPAD_LEFT)) { gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 3; gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; PlaySE(SE_M_CHARM); } - else if (gMain.newKeys & DPAD_RIGHT) + else if (JOY_NEW(DPAD_RIGHT)) { gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 1; gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; @@ -2652,7 +2652,7 @@ static void Task_ShowDodrioBerryPickingRecords(u8 taskId) data[0]++; break; case 2: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { rbox_fill_rectangle(data[1]); CopyWindowToVram(data[1], 1); @@ -4265,7 +4265,7 @@ static void sub_802988C(void) gUnknown_02022CF8->state++; break; case 4: - if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) + if (++gUnknown_02022CF8->unk301C >= 30 && JOY_NEW(A_BUTTON)) { gUnknown_02022CF8->unk301C = 0; PlaySE(SE_SELECT); @@ -4297,7 +4297,7 @@ static void sub_802988C(void) gUnknown_02022CF8->state++; break; case 8: - if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) + if (++gUnknown_02022CF8->unk301C >= 30 && JOY_NEW(A_BUTTON)) { gUnknown_02022CF8->unk301C = 0; PlaySE(SE_SELECT); @@ -4357,7 +4357,7 @@ static void sub_802988C(void) gUnknown_02022CF8->state++; break; case 11: - if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) + if (++gUnknown_02022CF8->unk301C >= 30 && JOY_NEW(A_BUTTON)) { gUnknown_02022CF8->unk301C = 0; PlaySE(SE_SELECT); @@ -4423,14 +4423,14 @@ static void sub_802A010(void) AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_SelectorArrow2, 0, ((y - 1) * 16) + 1, -1, NULL); CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 3); // Increment state only if A or B button have been pressed. - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if (gUnknown_02022CF8->unk3020 == 0) gUnknown_02022CF8->unk3020 = 1; gUnknown_02022CF8->state++; } - else if (gMain.newKeys & (DPAD_UP | DPAD_DOWN)) + else if (JOY_NEW(DPAD_UP | DPAD_DOWN)) { PlaySE(SE_SELECT); switch (gUnknown_02022CF8->unk3020) @@ -4446,7 +4446,7 @@ static void sub_802A010(void) break; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); gUnknown_02022CF8->unk3020 = 2; diff --git a/src/easy_chat.c b/src/easy_chat.c index 6dca3f56ae..2590eea1a3 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -1522,7 +1522,7 @@ static u16 sub_811AB68(void) { do { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { sub_811BF78(); sEasyChatScreen->state = 2; @@ -1531,30 +1531,30 @@ static u16 sub_811AB68(void) sEasyChatScreen->unk_0c = 0; return 9; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return sub_811B150(); } - else if (gMain.newKeys & START_BUTTON) + else if (JOY_NEW(START_BUTTON)) { return sub_811B1B4(); } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { sEasyChatScreen->mainCursorRow--; break; } - else if (gMain.newKeys & DPAD_LEFT) + else if (JOY_NEW(DPAD_LEFT)) { sEasyChatScreen->mainCursorColumn--; break; } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { sEasyChatScreen->mainCursorRow++; break; } - else if (gMain.newKeys & DPAD_RIGHT) + else if (JOY_NEW(DPAD_RIGHT)) { sEasyChatScreen->mainCursorColumn++; break; @@ -1594,7 +1594,7 @@ static u16 sub_811ACDC(void) { do { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { switch (sEasyChatScreen->mainCursorColumn) { @@ -1609,30 +1609,30 @@ static u16 sub_811ACDC(void) } } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { return sub_811B150(); } - else if (gMain.newKeys & START_BUTTON) + else if (JOY_NEW(START_BUTTON)) { return sub_811B1B4(); } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { sEasyChatScreen->mainCursorRow--; break; } - else if (gMain.newKeys & DPAD_LEFT) + else if (JOY_NEW(DPAD_LEFT)) { sEasyChatScreen->mainCursorColumn--; break; } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { sEasyChatScreen->mainCursorRow = 0; break; } - else if (gMain.newKeys & DPAD_RIGHT) + else if (JOY_NEW(DPAD_RIGHT)) { sEasyChatScreen->mainCursorColumn++; break; @@ -1665,10 +1665,10 @@ static u16 sub_811ACDC(void) static u16 sub_811AE44(void) { - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) return sub_811B32C(); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (sEasyChatScreen->unk_0a != -1) return sub_811B2B0(); @@ -1684,19 +1684,19 @@ static u16 sub_811AE44(void) } } - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) return sub_811B33C(); - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) return sub_811B528(2); - if (gMain.newAndRepeatedKeys & DPAD_DOWN) + if (JOY_REPEAT(DPAD_DOWN)) return sub_811B528(3); - if (gMain.newAndRepeatedKeys & DPAD_LEFT) + if (JOY_REPEAT(DPAD_LEFT)) return sub_811B528(1); - if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + if (JOY_REPEAT(DPAD_RIGHT)) return sub_811B528(0); return 0; @@ -1704,31 +1704,31 @@ static u16 sub_811AE44(void) static u16 sub_811AF00(void) { - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { sEasyChatScreen->state = 2; return 14; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) return sub_811B394(); - if (gMain.newKeys & START_BUTTON) + if (JOY_NEW(START_BUTTON)) return sub_811B794(4); - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) return sub_811B794(5); - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) return sub_811B794(2); - if (gMain.newAndRepeatedKeys & DPAD_DOWN) + if (JOY_REPEAT(DPAD_DOWN)) return sub_811B794(3); - if (gMain.newAndRepeatedKeys & DPAD_LEFT) + if (JOY_REPEAT(DPAD_LEFT)) return sub_811B794(1); - if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + if (JOY_REPEAT(DPAD_RIGHT)) return sub_811B794(0); return 0; @@ -1793,10 +1793,10 @@ static u16 sub_811B040(void) static u16 sub_811B08C(void) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) return 26; - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) return sub_811B150(); return 0; @@ -1804,7 +1804,7 @@ static u16 sub_811B08C(void) static u16 sub_811B0BC(void) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { sEasyChatScreen->state = sub_811B2A4(); return 7; diff --git a/src/ereader_screen.c b/src/ereader_screen.c index b4a9164b32..3f2cf3217f 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -137,7 +137,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1) { *arg0 = 1; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { *arg0 = 0; return 1; @@ -158,7 +158,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1) *arg1 = 0; *arg0 = 3; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { *arg0 = 0; return 1; @@ -288,7 +288,7 @@ static void sub_81D5084(u8 taskId) OpenEReaderLink(); data->unk8 = 6; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { sub_81D505C(&data->unk0); PlaySE(SE_SELECT); @@ -296,7 +296,7 @@ static void sub_81D5084(u8 taskId) } break; case 6: - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); CloseLink(); @@ -436,7 +436,7 @@ static void sub_81D5084(u8 taskId) } break; case 19: - if (IsFanfareTaskInactive() && (gMain.newKeys & (A_BUTTON | B_BUTTON))) + if (IsFanfareTaskInactive() && (JOY_NEW(A_BUTTON | B_BUTTON))) data->unk8 = 26; break; case 23: diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 47074cf261..22376a4783 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -858,21 +858,21 @@ static void Task_EvolutionScene(u8 taskID) } break; case 4: - if (gMain.newKeys & DPAD_UP && sEvoCursorPos != 0) + if (JOY_NEW(DPAD_UP) && sEvoCursorPos != 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(sEvoCursorPos); sEvoCursorPos = 0; BattleCreateYesNoCursorAt(0); } - if (gMain.newKeys & DPAD_DOWN && sEvoCursorPos == 0) + if (JOY_NEW(DPAD_DOWN) && sEvoCursorPos == 0) { PlaySE(SE_SELECT); BattleDestroyYesNoCursorAt(sEvoCursorPos); sEvoCursorPos = 1; BattleCreateYesNoCursorAt(1); } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); PlaySE(SE_SELECT); @@ -888,7 +888,7 @@ static void Task_EvolutionScene(u8 taskID) BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); } } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR); PlaySE(SE_SELECT); diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 194f110d86..f8c4e79f1b 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1788,7 +1788,7 @@ static bool8 Fishing_ShowDots(struct Task *task) AlignFishingAnimationFrames(); task->tFrameCounter++; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { task->tStep = FISHING_NO_BITE; if (task->tRoundsPlayed != 0) @@ -1877,7 +1877,7 @@ static bool8 Fishing_WaitForA(struct Task *task) task->tFrameCounter++; if (task->tFrameCounter >= reelTimeouts[task->tFishingRod]) task->tStep = FISHING_GOT_AWAY; - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) task->tStep++; return FALSE; } diff --git a/src/field_special_scene.c b/src/field_special_scene.c index bd6c833afb..6b41c54237 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -280,7 +280,7 @@ void Task_HandlePorthole(u8 taskId) } break; case IDLE_CHECK: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) data[1] = 1; if (!ScriptMovement_IsObjectMovementFinished(OBJ_EVENT_ID_PLAYER, location->mapNum, location->mapGroup)) return; diff --git a/src/frontier_pass.c b/src/frontier_pass.c index dfd5c0f2d6..1b80301490 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -937,14 +937,14 @@ static void Task_HandleFrontierPassInput(u8 taskId) { u8 var = FALSE; // Reused, first informs whether the cursor moves, then used as the new cursor area. - if (gMain.heldKeys & DPAD_UP && sPassGfx->cursorSprite->pos1.y >= 9) + if (JOY_HELD(DPAD_UP) && sPassGfx->cursorSprite->pos1.y >= 9) { sPassGfx->cursorSprite->pos1.y -= 2; if (sPassGfx->cursorSprite->pos1.y <= 7) sPassGfx->cursorSprite->pos1.y = 2; var = TRUE; } - if (gMain.heldKeys & DPAD_DOWN && sPassGfx->cursorSprite->pos1.y <= 135) + if (JOY_HELD(DPAD_DOWN) && sPassGfx->cursorSprite->pos1.y <= 135) { sPassGfx->cursorSprite->pos1.y += 2; if (sPassGfx->cursorSprite->pos1.y >= 137) @@ -952,14 +952,14 @@ static void Task_HandleFrontierPassInput(u8 taskId) var = TRUE; } - if (gMain.heldKeys & DPAD_LEFT && sPassGfx->cursorSprite->pos1.x >= 6) + if (JOY_HELD(DPAD_LEFT) && sPassGfx->cursorSprite->pos1.x >= 6) { sPassGfx->cursorSprite->pos1.x -= 2; if (sPassGfx->cursorSprite->pos1.x <= 4) sPassGfx->cursorSprite->pos1.x = 5; var = TRUE; } - if (gMain.heldKeys & DPAD_RIGHT && sPassGfx->cursorSprite->pos1.x <= 231) + if (JOY_HELD(DPAD_RIGHT) && sPassGfx->cursorSprite->pos1.x <= 231) { sPassGfx->cursorSprite->pos1.x += 2; if (sPassGfx->cursorSprite->pos1.x >= 233) @@ -969,7 +969,7 @@ static void Task_HandleFrontierPassInput(u8 taskId) if (!var) // Cursor did not change. { - if (sPassData->cursorArea != CURSOR_AREA_NOTHING && gMain.newKeys & A_BUTTON) + if (sPassData->cursorArea != CURSOR_AREA_NOTHING && JOY_NEW(A_BUTTON)) { if (sPassData->cursorArea <= CURSOR_AREA_RECORD) // Map, Card, Record { @@ -986,7 +986,7 @@ static void Task_HandleFrontierPassInput(u8 taskId) } } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_PC_OFF); SetMainCallback2(CB2_HideFrontierPass); @@ -1443,19 +1443,19 @@ static void Task_HandleFrontierMap(u8 taskId) break; return; case 1: - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_PC_OFF); data[0] = 4; } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (sMapData->cursorPos >= NUM_FRONTIER_FACILITIES - 1) HandleFrontierMapCursorMove(0); else data[0] = 2; } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { if (sMapData->cursorPos == 0) HandleFrontierMapCursorMove(1); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 1cfa794ae8..7b63950d1d 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -729,7 +729,7 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId) static void Task_Hof_ExitOnKeyPressed(u8 taskId) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { FadeOutBGM(4); gTasks[taskId].func = Task_Hof_HandlePaletteOnExit; @@ -991,7 +991,7 @@ static void Task_HofPC_HandleInput(u8 taskId) { u16 i; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (gTasks[taskId].tCurrTeamNo != 0) // prepare another team to view { @@ -1019,7 +1019,7 @@ static void Task_HofPC_HandleInput(u8 taskId) gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } } - else if (gMain.newKeys & B_BUTTON) // turn off hall of fame PC + else if (JOY_NEW(B_BUTTON)) // turn off hall of fame PC { if (IsCryPlayingOrClearCrySongs()) { @@ -1028,12 +1028,12 @@ static void Task_HofPC_HandleInput(u8 taskId) } gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } - else if (gMain.newKeys & DPAD_UP && gTasks[taskId].tCurrMonId != 0) // change mon -1 + else if (JOY_NEW(DPAD_UP) && gTasks[taskId].tCurrMonId != 0) // change mon -1 { gTasks[taskId].tCurrMonId--; gTasks[taskId].func = Task_HofPC_PrintMonInfo; } - else if (gMain.newKeys & DPAD_DOWN && gTasks[taskId].tCurrMonId < gTasks[taskId].tMonNo - 1) // change mon +1 + else if (JOY_NEW(DPAD_DOWN) && gTasks[taskId].tCurrMonId < gTasks[taskId].tMonNo - 1) // change mon +1 { gTasks[taskId].tCurrMonId++; gTasks[taskId].func = Task_HofPC_PrintMonInfo; @@ -1097,7 +1097,7 @@ static void Task_HofPC_PrintDataIsCorrupted(u8 taskId) static void Task_HofPC_ExitOnButtonPress(u8 taskId) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } diff --git a/src/item_menu.c b/src/item_menu.c index 394bd10588..9e0a8d5a72 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1167,7 +1167,7 @@ void Task_BagMenu_HandleInput(u8 taskId) SwitchBagPocket(taskId, MENU_CURSOR_DELTA_RIGHT, 0); return; default: - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { if (CanSwapItems() == TRUE) { @@ -1229,12 +1229,12 @@ static u8 GetSwitchBagPocketDirection(void) if (gBagMenu->pocketSwitchDisabled) return SWITCH_POCKET_NONE; LRKeys = GetLRKeysPressed(); - if ((gMain.newKeys & DPAD_LEFT) || LRKeys == MENU_L_PRESSED) + if ((JOY_NEW(DPAD_LEFT)) || LRKeys == MENU_L_PRESSED) { PlaySE(SE_SELECT); return SWITCH_POCKET_LEFT; } - if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == MENU_R_PRESSED) + if ((JOY_NEW(DPAD_RIGHT)) || LRKeys == MENU_R_PRESSED) { PlaySE(SE_SELECT); return SWITCH_POCKET_RIGHT; @@ -1388,7 +1388,7 @@ static void Task_HandleSwappingItemsInput(u8 taskId) if (MenuHelpers_CallLinkSomething() != TRUE) { - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { PlaySE(SE_SELECT); ListMenuGetScrollAndRow(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); @@ -1406,7 +1406,7 @@ static void Task_HandleSwappingItemsInput(u8 taskId) break; case LIST_CANCEL: PlaySE(SE_SELECT); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) sub_81AC498(taskId); else sub_81AC590(taskId); @@ -1645,7 +1645,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) if (MenuHelpers_CallLinkSomething() != TRUE) { s8 cursorPos = Menu_GetCursorPos(); - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { if (cursorPos > 0 && sub_81ACDFC(cursorPos - 2)) { @@ -1653,7 +1653,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); } } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (cursorPos < (gBagMenu->contextMenuNumItems - 2) && sub_81ACDFC(cursorPos + 2)) { @@ -1661,7 +1661,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); } } - else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) + else if ((JOY_NEW(DPAD_LEFT)) || GetLRKeysPressed() == MENU_L_PRESSED) { if ((cursorPos & 1) && sub_81ACDFC(cursorPos - 1)) { @@ -1669,7 +1669,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); } } - else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if ((JOY_NEW(DPAD_RIGHT)) || GetLRKeysPressed() == MENU_R_PRESSED) { if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1)) { @@ -1677,12 +1677,12 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); } } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); sItemMenuActions[gBagMenu->contextMenuItemsPtr[cursorPos]].func.void_u8(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); sItemMenuActions[ITEMMENUACTION_CANCEL].func.void_u8(taskId); @@ -1786,13 +1786,13 @@ void Task_ChooseHowManyToToss(u8 taskId) { PrintItemDepositAmount(gBagMenu->windowPointers[7], tItemCount); } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); BagMenu_RemoveWindow(7); BagMenu_TossItems(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); BagMenu_RemoveWindow(7); @@ -1818,7 +1818,7 @@ void Task_ActuallyToss(u8 taskId) u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); RemoveBagItem(gSpecialVar_ItemId, tItemCount); @@ -1886,7 +1886,7 @@ static void BagMenu_PrintItemCantBeHeld(u8 taskId) void sub_81AD350(u8 taskId) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); BagMenu_InitListsMenu(taskId); @@ -2060,13 +2060,13 @@ static void Task_SellHowManyDialogueHandleInput(u8 taskId) { PrintItemSoldAmount(gBagMenu->windowPointers[8], tItemCount, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * tItemCount); } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); BagMenu_RemoveWindow(8); DisplaySellItemPriceAndConfirm(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); BagMenu_PrintCursor_(data[0], 0); @@ -2108,7 +2108,7 @@ static void BagMenu_Sell_UpdateItemListAndMoney(u8 taskId) static void BagMenu_Sell_WaitForABPress(u8 taskId) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); RemoveMoneyWindow(); @@ -2144,13 +2144,13 @@ static void Task_ChooseHowManyToDeposit(u8 taskId) { PrintItemDepositAmount(gBagMenu->windowPointers[7], tItemCount); } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); BagMenu_RemoveWindow(7); BagMenu_TryDepositItem(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); BagMenu_PrintDescription(data[1]); @@ -2189,7 +2189,7 @@ static void BagMenu_Deposit_WaitForABPress(u8 taskId) { s16* data = gTasks[taskId].data; - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); BagMenu_PrintDescription(data[1]); diff --git a/src/item_use.c b/src/item_use.c index b1b90f3d5b..9ab755a5e3 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -792,7 +792,7 @@ static void BootUpSoundTMHM(u8 taskId) static void Task_ShowTMHMContainedMessage(u8 taskId) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]); StringExpandPlaceholders(gStringVar4, gText_TMHMContainedVar1); @@ -956,7 +956,7 @@ void ItemUseInBattle_PokeBall(u8 taskId) static void Task_CloseStatIncreaseMessage(u8 taskId) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { if (!InBattlePyramid()) Task_FadeAndCloseBagMenu(taskId); diff --git a/src/link.c b/src/link.c index cdaf58469f..9fd35a10b6 100644 --- a/src/link.c +++ b/src/link.c @@ -445,27 +445,27 @@ static void TestBlockTransfer(u8 nothing, u8 is, u8 used) static void LinkTestProcessKeyInput(void) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { gShouldAdvanceLinkState = 1; } - if (gMain.heldKeys & B_BUTTON) + if (JOY_HELD(B_BUTTON)) { InitBlockSend(gHeap + 0x4000, 0x00002004); } - if (gMain.newKeys & L_BUTTON) + if (JOY_NEW(L_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(2, 0, 0)); } - if (gMain.newKeys & START_BUTTON) + if (JOY_NEW(START_BUTTON)) { SetSuppressLinkErrorMessage(TRUE); } - if (gMain.newKeys & R_BUTTON) + if (JOY_NEW(R_BUTTON)) { TrySavingData(SAVE_LINK); } - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { SetCloseLinkCallback(); } @@ -1754,7 +1754,7 @@ static void CB2_PrintErrorMessage(void) { if (gWirelessCommType == 1) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_PIN); gWirelessCommType = 0; @@ -1764,7 +1764,7 @@ static void CB2_PrintErrorMessage(void) } else if (gWirelessCommType == 2) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { rfu_REQ_stopMode(); rfu_waitREQComplete(); diff --git a/src/list_menu.c b/src/list_menu.c index e3c4e11d27..3e5642e4cf 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -335,11 +335,11 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str break; case 1: sMysteryGiftLinkMenu.currItemId = ListMenu_ProcessInput(sMysteryGiftLinkMenu.listTaskId); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { sMysteryGiftLinkMenu.state = 2; } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { sMysteryGiftLinkMenu.currItemId = LIST_CANCEL; sMysteryGiftLinkMenu.state = 2; @@ -410,20 +410,20 @@ s32 ListMenu_ProcessInput(u8 listTaskId) { struct ListMenu *list = (void*) gTasks[listTaskId].data; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { return list->template.items[list->scrollOffset + list->selectedRow].id; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return LIST_CANCEL; } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (JOY_REPEAT(DPAD_UP)) { ListMenuChangeSelection(list, TRUE, 1, FALSE); return LIST_NOTHING_CHOSEN; } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { ListMenuChangeSelection(list, TRUE, 1, TRUE); return LIST_NOTHING_CHOSEN; @@ -439,10 +439,12 @@ s32 ListMenu_ProcessInput(u8 listTaskId) rightButton = FALSE; break; case LIST_MULTIPLE_SCROLL_DPAD: + // note: JOY_REPEAT won't match here leftButton = gMain.newAndRepeatedKeys & DPAD_LEFT; rightButton = gMain.newAndRepeatedKeys & DPAD_RIGHT; break; case LIST_MULTIPLE_SCROLL_L_R: + // same as above leftButton = gMain.newAndRepeatedKeys & L_BUTTON; rightButton = gMain.newAndRepeatedKeys & R_BUTTON; break; diff --git a/src/mail.c b/src/mail.c index ad784f61d1..04464f06b1 100644 --- a/src/mail.c +++ b/src/mail.c @@ -524,7 +524,7 @@ static void CB2_WaitForPaletteExitOnKeyPress(void) static void CB2_ExitOnKeyPress(void) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); sMailRead->callback2 = CB2_ExitMailReadFreeVars; diff --git a/src/main.c b/src/main.c index 454fefc5cf..ab0c232849 100644 --- a/src/main.c +++ b/src/main.c @@ -282,10 +282,10 @@ static void ReadKeys(void) // Remap L to A if the L=A option is enabled. if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) { - if (gMain.newKeys & L_BUTTON) + if (JOY_NEW(L_BUTTON)) gMain.newKeys |= A_BUTTON; - if (gMain.heldKeys & L_BUTTON) + if (JOY_HELD(L_BUTTON)) gMain.heldKeys |= A_BUTTON; } diff --git a/src/main_menu.c b/src/main_menu.c index 203461e6a0..5b39b6d456 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -695,7 +695,7 @@ static void Task_MainMenuCheckSaveFile(u8 taskId) static void Task_WaitForSaveFileErrorWindow(u8 taskId) { RunTextPrinters(); - if (!IsTextPrinterActive(7) && (gMain.newKeys & A_BUTTON)) + if (!IsTextPrinterActive(7) && (JOY_NEW(A_BUTTON))) { ClearWindowTilemap(7); ClearMainMenuWindowTilemap(&sWindowTemplates_MainMenu[7]); @@ -730,7 +730,7 @@ static void Task_MainMenuCheckBattery(u8 taskId) static void Task_WaitForBatteryDryErrorWindow(u8 taskId) { RunTextPrinters(); - if (!IsTextPrinterActive(7) && (gMain.newKeys & A_BUTTON)) + if (!IsTextPrinterActive(7) && (JOY_NEW(A_BUTTON))) { ClearWindowTilemap(7); ClearMainMenuWindowTilemap(&sWindowTemplates_MainMenu[7]); @@ -886,14 +886,14 @@ static bool8 HandleMainMenuInput(u8 taskId) { s16* data = gTasks[taskId].data; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); IsWirelessAdapterConnected(); // why bother calling this here? debug? Task_HandleMainMenuAPressed will check too BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_HandleMainMenuAPressed; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_WHITEALPHA); @@ -901,7 +901,7 @@ static bool8 HandleMainMenuInput(u8 taskId) SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 160)); gTasks[taskId].func = Task_HandleMainMenuBPressed; } - else if ((gMain.newKeys & DPAD_UP) && tCurrItem > 0) + else if ((JOY_NEW(DPAD_UP)) && tCurrItem > 0) { if (tMenuType == HAS_MYSTERY_EVENTS && tIsScrolled == TRUE && tCurrItem == 1) { @@ -913,7 +913,7 @@ static bool8 HandleMainMenuInput(u8 taskId) sCurrItemAndOptionMenuCheck = tCurrItem; return TRUE; } - else if ((gMain.newKeys & DPAD_DOWN) && tCurrItem < tItemCount - 1) + else if ((JOY_NEW(DPAD_DOWN)) && tCurrItem < tItemCount - 1) { if (tMenuType == HAS_MYSTERY_EVENTS && tCurrItem == 3 && tIsScrolled == FALSE) { @@ -1150,7 +1150,7 @@ static void Task_DisplayMainMenuInvalidActionError(u8 taskId) gTasks[taskId].tCurrItem++; break; case 3: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -1593,7 +1593,7 @@ static void Task_NewGameBirchSpeech_WaitForWhatsYourNameToPrint(u8 taskId) static void Task_NewGameBirchSpeech_WaitPressBeforeNameChoice(u8 taskId) { - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = Task_NewGameBirchSpeech_StartNamingScreen; diff --git a/src/match_call.c b/src/match_call.c index c9752495a2..a39739f765 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1252,7 +1252,7 @@ static bool32 sub_81962D8(u8 taskId) static bool32 sub_8196330(u8 taskId) { s16 *taskData = gTasks[taskId].data; - if (!ExecuteMatchCallTextPrinter(taskData[2]) && !IsSEPlaying() && gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (!ExecuteMatchCallTextPrinter(taskData[2]) && !IsSEPlaying() && JOY_NEW(A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(taskData[2], PIXEL_FILL(8)); CopyWindowToVram(taskData[2], 2); @@ -1345,7 +1345,7 @@ static void InitMatchCallTextPrinter(int windowId, const u8 *str) static bool32 ExecuteMatchCallTextPrinter(int windowId) { - if (gMain.heldKeys & A_BUTTON) + if (JOY_HELD(A_BUTTON)) gTextFlags.canABSpeedUpPrint = 1; else gTextFlags.canABSpeedUpPrint = 0; diff --git a/src/menu.c b/src/menu.c index f3334919c4..1a040cafc4 100644 --- a/src/menu.c +++ b/src/menu.c @@ -981,23 +981,23 @@ u8 Menu_GetCursorPos(void) s8 Menu_ProcessInput(void) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (!sMenu.APressMuted) PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return MENU_B_PRESSED; } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { PlaySE(SE_SELECT); Menu_MoveCursor(-1); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { PlaySE(SE_SELECT); Menu_MoveCursor(1); @@ -1011,23 +1011,23 @@ s8 Menu_ProcessInputNoWrap(void) { u8 oldPos = sMenu.cursorPos; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (!sMenu.APressMuted) PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return MENU_B_PRESSED; } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { if (oldPos != Menu_MoveCursorNoWrapAround(-1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (oldPos != Menu_MoveCursorNoWrapAround(1)) PlaySE(SE_SELECT); @@ -1039,23 +1039,23 @@ s8 Menu_ProcessInputNoWrap(void) s8 ProcessMenuInput_other(void) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (!sMenu.APressMuted) PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return MENU_B_PRESSED; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) { PlaySE(SE_SELECT); Menu_MoveCursor(-1); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) { PlaySE(SE_SELECT); Menu_MoveCursor(1); @@ -1407,34 +1407,34 @@ u8 ChangeGridMenuCursorPosition(s8 deltaX, s8 deltaY) s8 sub_8199284(void) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return MENU_B_PRESSED; } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) + else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) + else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); @@ -1448,34 +1448,34 @@ s8 Menu_ProcessInputGridLayout(void) { u8 oldPos = sMenu.cursorPos; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return MENU_B_PRESSED; } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { if (oldPos != ChangeGridMenuCursorPosition(0, -1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (oldPos != ChangeGridMenuCursorPosition(0, 1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) + else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) + else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(1, 0)) PlaySE(SE_SELECT); @@ -1487,34 +1487,34 @@ s8 Menu_ProcessInputGridLayout(void) s8 sub_81993D8(void) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return MENU_B_PRESSED; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); @@ -1529,34 +1529,34 @@ s8 sub_8199484(void) { u8 oldPos = sMenu.cursorPos; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return MENU_B_PRESSED; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) { if (oldPos != ChangeGridMenuCursorPosition(0, -1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) { if (oldPos != ChangeGridMenuCursorPosition(0, 1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(1, 0)) PlaySE(SE_SELECT); diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 69443d3099..b31d84a1e3 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -183,7 +183,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) { s16 valBefore = (*arg0); - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) { (*arg0)++; if ((*arg0) > arg1) @@ -199,7 +199,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) { (*arg0)--; if ((*arg0) <= 0) @@ -215,7 +215,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT) { (*arg0) += 10; if ((*arg0) > arg1) @@ -231,7 +231,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT) { (*arg0) -= 10; if ((*arg0) <= 0) @@ -255,9 +255,9 @@ u8 GetLRKeysPressed(void) { if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (gMain.newKeys & L_BUTTON) + if (JOY_NEW(L_BUTTON)) return MENU_L_PRESSED; - if (gMain.newKeys & R_BUTTON) + if (JOY_NEW(R_BUTTON)) return MENU_R_PRESSED; } @@ -268,9 +268,9 @@ u8 GetLRKeysPressedAndHeld(void) { if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (gMain.newAndRepeatedKeys & L_BUTTON) + if (JOY_REPEAT(L_BUTTON)) return MENU_L_PRESSED; - if (gMain.newAndRepeatedKeys & R_BUTTON) + if (JOY_REPEAT(R_BUTTON)) return MENU_R_PRESSED; } diff --git a/src/mon_markings.c b/src/mon_markings.c index e1897af760..a819d4f9ab 100644 --- a/src/mon_markings.c +++ b/src/mon_markings.c @@ -394,7 +394,7 @@ bool8 MonMarkingsMenuHandleInput(void) { u16 i; - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { s8 pos; PlaySE(SE_SELECT); @@ -404,7 +404,7 @@ bool8 MonMarkingsMenuHandleInput(void) return TRUE; } - if (gMain.newKeys & DPAD_DOWN) + if (JOY_NEW(DPAD_DOWN)) { s8 pos; PlaySE(SE_SELECT); @@ -414,7 +414,7 @@ bool8 MonMarkingsMenuHandleInput(void) return TRUE; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); @@ -433,7 +433,7 @@ bool8 MonMarkingsMenuHandleInput(void) return TRUE; } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); return FALSE; diff --git a/src/move_relearner.c b/src/move_relearner.c index 3e7caf133e..cd4da58354 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -732,7 +732,7 @@ static void DoMoveRelearnerMain(void) } break; case MENU_STATE_WAIT_FOR_A_BUTTON: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); sMoveRelearnerStruct->state = MENU_STATE_FADE_AND_RETURN; @@ -778,7 +778,7 @@ static void HandleInput(bool8 showContest) switch (itemId) { case LIST_NOTHING_CHOSEN: - if (!(gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysPressed()) + if (!(JOY_NEW(DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysPressed()) { break; } diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index 032cc33403..00dcbf0e3c 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -163,7 +163,7 @@ static void CB2_MysteryEventMenu(void) PrintMysteryMenuText(0, gText_PressAToLoadEvent, 1, 2, 1); gMain.state++; } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); CloseLink(); @@ -177,7 +177,7 @@ static void CB2_MysteryEventMenu(void) case 5: if (GetLinkPlayerCount_2() == 2) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); CheckShouldAdvanceLinkState(); @@ -187,7 +187,7 @@ static void CB2_MysteryEventMenu(void) CopyWindowToVram(1, 3); gMain.state++; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); CloseLink(); @@ -227,7 +227,7 @@ static void CB2_MysteryEventMenu(void) } } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); CloseLink(); @@ -274,7 +274,7 @@ static void CB2_MysteryEventMenu(void) } break; case 14: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); gMain.state++; diff --git a/src/mystery_gift.c b/src/mystery_gift.c index ca5ab1bafb..a23f159b2d 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -561,7 +561,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str) goto inc; case 1: DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); - if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) + if (({JOY_NEW(A_BUTTON | B_BUTTON);})) { inc: (*textState)++; @@ -595,7 +595,7 @@ bool32 unref_HideDownArrowAndWaitButton(u8 * textState) { case 0: HideDownArrow(); - if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) + if (({JOY_NEW(A_BUTTON | B_BUTTON);})) { (*textState)++; } @@ -930,7 +930,7 @@ static bool32 mevent_save_game(u8 * state) (*state)++; break; case 3: - if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) + if (({JOY_NEW(A_BUTTON | B_BUTTON);})) { (*state)++; } @@ -1458,11 +1458,11 @@ void task00_mystery_gift(u8 taskId) case 20: if (data->IsCardOrNews == 0) { - if (({gMain.newKeys & A_BUTTON;})) + if (({JOY_NEW(A_BUTTON);})) { data->state = 21; } - if (({gMain.newKeys & B_BUTTON;})) + if (({JOY_NEW(B_BUTTON);})) { data->state = 27; } diff --git a/src/option_menu.c b/src/option_menu.c index 1cf0bad2ed..b6440a89c0 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -271,16 +271,16 @@ static void Task_OptionMenuFadeIn(u8 taskId) static void Task_OptionMenuProcessInput(u8 taskId) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (gTasks[taskId].data[TD_MENUSELECTION] == MENUITEM_CANCEL) gTasks[taskId].func = Task_OptionMenuSave; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { gTasks[taskId].func = Task_OptionMenuSave; } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { if (gTasks[taskId].data[TD_MENUSELECTION] > 0) gTasks[taskId].data[TD_MENUSELECTION]--; @@ -288,7 +288,7 @@ static void Task_OptionMenuProcessInput(u8 taskId) gTasks[taskId].data[TD_MENUSELECTION] = MENUITEM_CANCEL; HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]); } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (gTasks[taskId].data[TD_MENUSELECTION] < MENUITEM_CANCEL) gTasks[taskId].data[TD_MENUSELECTION]++; @@ -405,7 +405,7 @@ static void DrawOptionMenuChoice(const u8 *text, u8 x, u8 y, u8 style) static u8 TextSpeed_ProcessInput(u8 selection) { - if (gMain.newKeys & DPAD_RIGHT) + if (JOY_NEW(DPAD_RIGHT)) { if (selection <= 1) selection++; @@ -414,7 +414,7 @@ static u8 TextSpeed_ProcessInput(u8 selection) sArrowPressed = TRUE; } - if (gMain.newKeys & DPAD_LEFT) + if (JOY_NEW(DPAD_LEFT)) { if (selection != 0) selection--; @@ -451,7 +451,7 @@ static void TextSpeed_DrawChoices(u8 selection) static u8 BattleScene_ProcessInput(u8 selection) { - if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) + if (JOY_NEW(DPAD_LEFT | DPAD_RIGHT)) { selection ^= 1; sArrowPressed = TRUE; @@ -474,7 +474,7 @@ static void BattleScene_DrawChoices(u8 selection) static u8 BattleStyle_ProcessInput(u8 selection) { - if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) + if (JOY_NEW(DPAD_LEFT | DPAD_RIGHT)) { selection ^= 1; sArrowPressed = TRUE; @@ -497,7 +497,7 @@ static void BattleStyle_DrawChoices(u8 selection) static u8 Sound_ProcessInput(u8 selection) { - if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) + if (JOY_NEW(DPAD_LEFT | DPAD_RIGHT)) { selection ^= 1; SetPokemonCryStereo(selection); @@ -521,7 +521,7 @@ static void Sound_DrawChoices(u8 selection) static u8 FrameType_ProcessInput(u8 selection) { - if (gMain.newKeys & DPAD_RIGHT) + if (JOY_NEW(DPAD_RIGHT)) { if (selection < WINDOW_FRAMES_COUNT - 1) selection++; @@ -532,7 +532,7 @@ static u8 FrameType_ProcessInput(u8 selection) LoadPalette(GetWindowFrameTilesPal(selection)->pal, 0x70, 0x20); sArrowPressed = TRUE; } - if (gMain.newKeys & DPAD_LEFT) + if (JOY_NEW(DPAD_LEFT)) { if (selection != 0) selection--; @@ -579,7 +579,7 @@ static void FrameType_DrawChoices(u8 selection) static u8 ButtonMode_ProcessInput(u8 selection) { - if (gMain.newKeys & DPAD_RIGHT) + if (JOY_NEW(DPAD_RIGHT)) { if (selection <= 1) selection++; @@ -588,7 +588,7 @@ static u8 ButtonMode_ProcessInput(u8 selection) sArrowPressed = TRUE; } - if (gMain.newKeys & DPAD_LEFT) + if (JOY_NEW(DPAD_LEFT)) { if (selection != 0) selection--; diff --git a/src/overworld.c b/src/overworld.c index 7ca67cfbc3..223e6e1522 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2453,20 +2453,19 @@ static void UpdateHeldKeyCode(u16 key) static u16 KeyInterCB_ReadButtons(u32 key) { - if (gMain.heldKeys & DPAD_UP) + if (JOY_HELD(DPAD_UP)) return LINK_KEY_CODE_DPAD_UP; - else if (gMain.heldKeys & DPAD_DOWN) + if (JOY_HELD(DPAD_DOWN)) return LINK_KEY_CODE_DPAD_DOWN; - else if (gMain.heldKeys & DPAD_LEFT) + if (JOY_HELD(DPAD_LEFT)) return LINK_KEY_CODE_DPAD_LEFT; - else if (gMain.heldKeys & DPAD_RIGHT) + if (JOY_HELD(DPAD_RIGHT)) return LINK_KEY_CODE_DPAD_RIGHT; - else if (gMain.newKeys & START_BUTTON) + if (JOY_NEW(START_BUTTON)) return LINK_KEY_CODE_START_BUTTON; - else if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) return LINK_KEY_CODE_A_BUTTON; - else - return LINK_KEY_CODE_EMPTY; + return LINK_KEY_CODE_EMPTY; } static u16 GetDirectionForDpadKey(u16 a1) @@ -2573,7 +2572,7 @@ static u16 sub_8087170(u32 keyOrPlayerId) { if (sPlayerTradingStates[keyOrPlayerId] == PLAYER_TRADING_STATE_UNK_2) { - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { SetKeyInterceptCallback(KeyInterCB_DoNothingAndKeepAlive); return LINK_KEY_CODE_UNK_7; diff --git a/src/party_menu.c b/src/party_menu.c index 6e22fa5427..cc69b1fcd3 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1410,7 +1410,7 @@ static u16 PartyMenuButtonHandler(s8 *slotPtr) break; } - if (gMain.newKeys & START_BUTTON) + if (JOY_NEW(START_BUTTON)) return 8; if (movementDir) @@ -1420,10 +1420,10 @@ static u16 PartyMenuButtonHandler(s8 *slotPtr) } // Pressed Cancel - if ((gMain.newKeys & A_BUTTON) && *slotPtr == PARTY_SIZE + 1) + if ((JOY_NEW(A_BUTTON)) && *slotPtr == PARTY_SIZE + 1) return 2; - return gMain.newKeys & (A_BUTTON | B_BUTTON); + return JOY_NEW(A_BUTTON | B_BUTTON); } static void UpdateCurrentPartySelection(s8 *slotPtr, s8 movementDir) @@ -3764,7 +3764,7 @@ static u16 GetFieldMoveMonSpecies(void) static void Task_CancelAfterAorBPress(u8 taskId) { - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) CursorCb_Cancel1(taskId); } @@ -4721,7 +4721,7 @@ static void Task_DoLearnedMoveFanfareAfterText(u8 taskId) static void Task_LearnNextMoveOrClosePartyMenu(u8 taskId) { - if (IsFanfareTaskInactive() && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) + if (IsFanfareTaskInactive() && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) { if (gPartyMenu.learnMoveState == 1) Task_TryLearningNextMove(taskId); @@ -4930,7 +4930,7 @@ static void UpdateMonDisplayInfoAfterRareCandy(u8 slot, struct Pokemon *mon) static void Task_DisplayLevelUpStatsPg1(u8 taskId) { - if (WaitFanfare(FALSE) && IsPartyMenuTextPrinterActive() != TRUE && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) + if (WaitFanfare(FALSE) && IsPartyMenuTextPrinterActive() != TRUE && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) { PlaySE(SE_SELECT); DisplayLevelUpStatsPg1(taskId); @@ -4940,7 +4940,7 @@ static void Task_DisplayLevelUpStatsPg1(u8 taskId) static void Task_DisplayLevelUpStatsPg2(u8 taskId) { - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) { PlaySE(SE_SELECT); DisplayLevelUpStatsPg2(taskId); @@ -4971,7 +4971,7 @@ static void Task_TryLearnNewMoves(u8 taskId) { u16 learnMove; - if (WaitFanfare(0) && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) + if (WaitFanfare(0) && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) { RemoveLevelUpStatsWindow(); learnMove = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], TRUE); @@ -5608,7 +5608,7 @@ static void Task_ValidateChosenHalfParty(u8 taskId) static void Task_ContinueChoosingHalfParty(u8 taskId) { - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) { PlaySE(SE_SELECT); DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); diff --git a/src/player_pc.c b/src/player_pc.c index fc0bd9f4c8..928aac706c 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -1134,7 +1134,7 @@ static void ItemStorage_ProcessInput(u8 taskId) s32 id; data = gTasks[taskId].data; - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); if ((playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos) != (playerPCItemPageInfo.count - 1)) @@ -1212,7 +1212,7 @@ static void sub_816C4FC(u8 taskId) s32 id; data = gTasks[taskId].data; - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); ItemStorage_DoItemSwap(taskId, FALSE); @@ -1227,7 +1227,7 @@ static void sub_816C4FC(u8 taskId) case LIST_NOTHING_CHOSEN: break; case LIST_CANCEL: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { ItemStorage_DoItemSwap(taskId, FALSE); } @@ -1332,7 +1332,7 @@ static void ItemStorage_HandleQuantityRolling(u8 taskId) sub_816C6BC(sub_816BC7C(4), data[2], STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3); else { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); sub_816BCC4(4); @@ -1341,7 +1341,7 @@ static void ItemStorage_HandleQuantityRolling(u8 taskId) else ItemStorage_DoItemToss(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); sub_816BCC4(4); @@ -1412,7 +1412,7 @@ static void ItemStorage_HandleRemoveItem(u8 taskId) s16 *data; data = gTasks[taskId].data; - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { RemovePCItem((playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove), data[2]); DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos)); @@ -1429,7 +1429,7 @@ static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId) s16 *data; data = gTasks[taskId].data; - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId)); ItemStorage_StartScrollIndicatorAndProcessInput(taskId); diff --git a/src/pokeblock.c b/src/pokeblock.c index 11fe832408..0bfb10632a 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -984,7 +984,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId) if (!gPaletteFade.active && MenuHelpers_CallLinkSomething() != TRUE) { - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); if (sSavedPokeblockData.lastItemPage + sSavedPokeblockData.lastItemPos != sPokeblockMenu->itemsNo - 1) @@ -1035,7 +1035,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId) if (MenuHelpers_CallLinkSomething() == TRUE) return; - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { PlaySE(SE_SELECT); ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); @@ -1069,7 +1069,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId) break; case LIST_CANCEL: // same id as STOW CASE field PlaySE(SE_SELECT); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) HandlePokeblocksSwap(taskId, FALSE); else HandlePokeblocksSwap(taskId, TRUE); @@ -1193,7 +1193,7 @@ static void TossPokeblockChoice_Yes(u8 taskId) static void HandleErasePokeblock(u8 taskId) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { s16 *data; u16 *lastPage, *lastPos; diff --git a/src/pokedex.c b/src/pokedex.c index 4390f47cb6..516cef6a72 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1672,7 +1672,7 @@ static void Task_HandlePokedexInput(u8 taskId) } else { - if ((gMain.newKeys & A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) + if ((JOY_NEW(A_BUTTON)) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) { UpdateSelectedMonSpriteId(); BeginNormalPaletteFade(~(1 << (gSprites[sPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), 0, 0, 0x10, RGB_BLACK); @@ -1681,7 +1681,7 @@ static void Task_HandlePokedexInput(u8 taskId) PlaySE(SE_PIN); FreeWindowAndBgBuffers(); } - else if (gMain.newKeys & START_BUTTON) + else if (JOY_NEW(START_BUTTON)) { sPokedexView->menuY = 0; sPokedexView->menuIsOpen = TRUE; @@ -1689,7 +1689,7 @@ static void Task_HandlePokedexInput(u8 taskId) gTasks[taskId].func = Task_HandlePokedexStartMenuInput; PlaySE(SE_SELECT); } - else if (gMain.newKeys & SELECT_BUTTON) + else if (JOY_NEW(SELECT_BUTTON)) { PlaySE(SE_SELECT); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); @@ -1703,7 +1703,7 @@ static void Task_HandlePokedexInput(u8 taskId) PlaySE(SE_PC_LOGIN); FreeWindowAndBgBuffers(); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_ClosePokedex; @@ -1736,7 +1736,7 @@ static void Task_HandlePokedexStartMenuInput(u8 taskId) } else { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { switch (sPokedexView->menuCursorPos) { @@ -1767,18 +1767,18 @@ static void Task_HandlePokedexStartMenuInput(u8 taskId) } //Exit menu when Start or B is pressed - if (gMain.newKeys & (START_BUTTON | B_BUTTON)) + if (JOY_NEW(START_BUTTON | B_BUTTON)) { sPokedexView->menuIsOpen = FALSE; gTasks[taskId].func = Task_HandlePokedexInput; PlaySE(SE_SELECT); } - else if ((gMain.newAndRepeatedKeys & DPAD_UP) && sPokedexView->menuCursorPos != 0) + else if ((JOY_REPEAT(DPAD_UP)) && sPokedexView->menuCursorPos != 0) { sPokedexView->menuCursorPos--; PlaySE(SE_SELECT); } - else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && sPokedexView->menuCursorPos < 3) + else if ((JOY_REPEAT(DPAD_DOWN)) && sPokedexView->menuCursorPos < 3) { sPokedexView->menuCursorPos++; PlaySE(SE_SELECT); @@ -1872,7 +1872,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) } else { - if ((gMain.newKeys & A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) + if ((JOY_NEW(A_BUTTON)) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) { u32 a; @@ -1884,7 +1884,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) PlaySE(SE_PIN); FreeWindowAndBgBuffers(); } - else if (gMain.newKeys & START_BUTTON) + else if (JOY_NEW(START_BUTTON)) { sPokedexView->menuY = 0; sPokedexView->menuIsOpen = TRUE; @@ -1892,7 +1892,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) gTasks[taskId].func = Task_HandleSearchResultsStartMenuInput; PlaySE(SE_SELECT); } - else if (gMain.newKeys & SELECT_BUTTON) + else if (JOY_NEW(SELECT_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].tTaskId = LoadSearchMenu(); @@ -1901,7 +1901,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) PlaySE(SE_PC_LOGIN); FreeWindowAndBgBuffers(); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].func = Task_ReturnToPokedexFromSearchResults; @@ -1933,7 +1933,7 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId) } else { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { switch (sPokedexView->menuCursorPos) { @@ -1969,18 +1969,18 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId) } //Exit menu when Start or B is pressed - if (gMain.newKeys & (START_BUTTON | B_BUTTON)) + if (JOY_NEW(START_BUTTON | B_BUTTON)) { sPokedexView->menuIsOpen = FALSE; gTasks[taskId].func = Task_HandleSearchResultsInput; PlaySE(SE_SELECT); } - else if ((gMain.newAndRepeatedKeys & DPAD_UP) && sPokedexView->menuCursorPos) + else if ((JOY_REPEAT(DPAD_UP)) && sPokedexView->menuCursorPos) { sPokedexView->menuCursorPos--; PlaySE(SE_SELECT); } - else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && sPokedexView->menuCursorPos < 4) + else if ((JOY_REPEAT(DPAD_DOWN)) && sPokedexView->menuCursorPos < 4) { sPokedexView->menuCursorPos++; PlaySE(SE_SELECT); @@ -2589,7 +2589,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) u16 startingPos; u8 scrollDir = 0; - if ((gMain.heldKeys & DPAD_UP) && (selectedMon > 0)) + if ((JOY_HELD(DPAD_UP)) && (selectedMon > 0)) { scrollDir = 1; selectedMon = GetNextPosition(1, selectedMon, 0, sPokedexView->pokemonListCount - 1); @@ -2597,7 +2597,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonListEntry(1, selectedMon, ignored); PlaySE(SE_DEX_SCROLL); } - else if ((gMain.heldKeys & DPAD_DOWN) && (selectedMon < sPokedexView->pokemonListCount - 1)) + else if ((JOY_HELD(DPAD_DOWN)) && (selectedMon < sPokedexView->pokemonListCount - 1)) { scrollDir = 2; selectedMon = GetNextPosition(0, selectedMon, 0, sPokedexView->pokemonListCount - 1); @@ -2605,7 +2605,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonListEntry(2, selectedMon, ignored); PlaySE(SE_DEX_SCROLL); } - else if ((gMain.newKeys & DPAD_LEFT) && (selectedMon > 0)) + else if ((JOY_NEW(DPAD_LEFT)) && (selectedMon > 0)) { startingPos = selectedMon; @@ -2616,7 +2616,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonSpritesAtPos(selectedMon, 0xE); PlaySE(SE_DEX_PAGE); } - else if ((gMain.newKeys & DPAD_RIGHT) && (selectedMon < sPokedexView->pokemonListCount - 1)) + else if ((JOY_NEW(DPAD_RIGHT)) && (selectedMon < sPokedexView->pokemonListCount - 1)) { startingPos = selectedMon; for (i = 0; i < 7; i++) @@ -2665,7 +2665,7 @@ static bool8 TryDoInfoScreenScroll(void) u16 nextPokemon; u16 selectedPokemon = sPokedexView->selectedPokemon; - if ((gMain.newKeys & DPAD_UP) && selectedPokemon) + if ((JOY_NEW(DPAD_UP)) && selectedPokemon) { nextPokemon = selectedPokemon; while (nextPokemon != 0) @@ -2688,7 +2688,7 @@ static bool8 TryDoInfoScreenScroll(void) return TRUE; } } - else if ((gMain.newKeys & DPAD_DOWN) && selectedPokemon < sPokedexView->pokemonListCount - 1) + else if ((JOY_NEW(DPAD_DOWN)) && selectedPokemon < sPokedexView->pokemonListCount - 1) { nextPokemon = selectedPokemon; while (nextPokemon < sPokedexView->pokemonListCount - 1) @@ -3355,14 +3355,14 @@ static void Task_HandleInfoScreenInput(u8 taskId) PlaySE(SE_DEX_SCROLL); return; } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = Task_ExitInfoScreen; PlaySE(SE_PC_OFF); return; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { switch (sPokedexView->selectedScreen) { @@ -3399,8 +3399,8 @@ static void Task_HandleInfoScreenInput(u8 taskId) } return; } - if (((gMain.newKeys & DPAD_LEFT) - || ((gMain.newKeys & L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if (((JOY_NEW(DPAD_LEFT)) + || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) && sPokedexView->selectedScreen > 0) { sPokedexView->selectedScreen--; @@ -3408,8 +3408,8 @@ static void Task_HandleInfoScreenInput(u8 taskId) PlaySE(SE_DEX_PAGE); return; } - if (((gMain.newKeys & DPAD_RIGHT) - || ((gMain.newKeys & R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if (((JOY_NEW(DPAD_RIGHT)) + || ((JOY_NEW(R_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) && sPokedexView->selectedScreen < CANCEL_SCREEN) { sPokedexView->selectedScreen++; @@ -3629,7 +3629,7 @@ static void Task_HandleCryScreenInput(u8 taskId) else LoadPlayArrowPalette(FALSE); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { LoadPlayArrowPalette(TRUE); CryScreenPlayButton(NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); @@ -3637,7 +3637,7 @@ static void Task_HandleCryScreenInput(u8 taskId) } else if (!gPaletteFade.active) { - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); m4aMPlayContinue(&gMPlayInfo_BGM); @@ -3646,8 +3646,8 @@ static void Task_HandleCryScreenInput(u8 taskId) PlaySE(SE_PC_OFF); return; } - if ((gMain.newKeys & DPAD_LEFT) - || ((gMain.newKeys & L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if ((JOY_NEW(DPAD_LEFT)) + || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); m4aMPlayContinue(&gMPlayInfo_BGM); @@ -3656,8 +3656,8 @@ static void Task_HandleCryScreenInput(u8 taskId) PlaySE(SE_DEX_PAGE); return; } - if ((gMain.newKeys & DPAD_RIGHT) - || ((gMain.newKeys & R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if ((JOY_NEW(DPAD_RIGHT)) + || ((JOY_NEW(R_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { if (!sPokedexListItem->owned) { @@ -3809,15 +3809,15 @@ static void Task_LoadSizeScreen(u8 taskId) static void Task_HandleSizeScreenInput(u8 taskId) { - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); sPokedexView->screenSwitchState = 1; gTasks[taskId].func = Task_SwitchScreensFromSizeScreen; PlaySE(SE_PC_OFF); } - else if ((gMain.newKeys & DPAD_LEFT) - || ((gMain.newKeys & L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + else if ((JOY_NEW(DPAD_LEFT)) + || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK); sPokedexView->screenSwitchState = 2; @@ -4009,7 +4009,7 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId) static void Task_HandleCaughtMonPageInput(u8 taskId) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { BeginNormalPaletteFade(0x0000FFFF, 0, 0, 16, RGB_BLACK); gSprites[gTasks[taskId].tMonSpriteId].callback = SpriteCB_SlideCaughtMonToCenter; @@ -4898,13 +4898,13 @@ static void Task_SwitchToSearchMenuTopBar(u8 taskId) static void Task_HandleSearchTopBarInput(u8 taskId) { - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_PC_OFF); gTasks[taskId].func = Task_ExitSearch; return; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { switch (gTasks[taskId].tTopBarItem) { @@ -4925,7 +4925,7 @@ static void Task_HandleSearchTopBarInput(u8 taskId) } return; } - if ((gMain.newKeys & DPAD_LEFT) && gTasks[taskId].tTopBarItem > SEARCH_TOPBAR_SEARCH) + if ((JOY_NEW(DPAD_LEFT)) && gTasks[taskId].tTopBarItem > SEARCH_TOPBAR_SEARCH) { PlaySE(SE_DEX_PAGE); gTasks[taskId].tTopBarItem--; @@ -4933,7 +4933,7 @@ static void Task_HandleSearchTopBarInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((gMain.newKeys & DPAD_RIGHT) && gTasks[taskId].tTopBarItem < SEARCH_TOPBAR_CANCEL) + if ((JOY_NEW(DPAD_RIGHT)) && gTasks[taskId].tTopBarItem < SEARCH_TOPBAR_CANCEL) { PlaySE(SE_DEX_PAGE); gTasks[taskId].tTopBarItem++; @@ -4972,14 +4972,14 @@ static void Task_HandleSearchMenuInput(u8 taskId) movementMap = sSearchMovementMap_SearchNatDex; } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_BALL); SetDefaultSearchModeAndOrder(taskId); gTasks[taskId].func = Task_SwitchToSearchMenuTopBar; return; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (gTasks[taskId].tMenuItem == SEARCH_OK) { @@ -5014,7 +5014,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) return; } - if ((gMain.newKeys & DPAD_LEFT) && movementMap[gTasks[taskId].tMenuItem][0] != 0xFF) + if ((JOY_NEW(DPAD_LEFT)) && movementMap[gTasks[taskId].tMenuItem][0] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][0]; @@ -5022,7 +5022,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((gMain.newKeys & DPAD_RIGHT) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) + if ((JOY_NEW(DPAD_RIGHT)) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][1]; @@ -5030,7 +5030,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((gMain.newKeys & DPAD_UP) && movementMap[gTasks[taskId].tMenuItem][2] != 0xFF) + if ((JOY_NEW(DPAD_UP)) && movementMap[gTasks[taskId].tMenuItem][2] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][2]; @@ -5038,7 +5038,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((gMain.newKeys & DPAD_DOWN) && movementMap[gTasks[taskId].tMenuItem][3] != 0xFF) + if ((JOY_NEW(DPAD_DOWN)) && movementMap[gTasks[taskId].tMenuItem][3] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][3]; @@ -5082,7 +5082,7 @@ static void Task_WaitAndCompleteSearch(u8 taskId) static void Task_SearchCompleteWaitForInput(u8 taskId) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (sPokedexView->pokemonListCount != 0) { @@ -5135,7 +5135,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) cursorPos = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; maxOption = sSearchOptions[menuItem].numOptions - 1; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_PIN); ClearSearchParameterBoxText(); @@ -5145,7 +5145,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) CopyBgTilemapBufferToVram(3); return; } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_BALL); ClearSearchParameterBoxText(); @@ -5158,7 +5158,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) return; } moved = FALSE; - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) { if (*cursorPos != 0) { @@ -5184,7 +5184,7 @@ static void Task_HandleSearchParameterInput(u8 taskId) } return; } - if (gMain.newAndRepeatedKeys & DPAD_DOWN) + if (JOY_REPEAT(DPAD_DOWN)) { if (*cursorPos < MAX_SEARCH_PARAM_CURSOR_POS && *cursorPos < maxOption) { diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index cfd5e67e45..7a3b38dc2a 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -723,12 +723,12 @@ static void Task_HandlePokedexAreaScreenInput(u8 taskId) return; break; case 1: - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { gTasks[taskId].data[1] = 1; PlaySE(SE_PC_OFF); } - else if (gMain.newKeys & DPAD_RIGHT || (gMain.newKeys & R_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + else if (JOY_NEW(DPAD_RIGHT) || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { gTasks[taskId].data[1] = 2; PlaySE(SE_DEX_PAGE); diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index d542759409..914752eb4c 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -1244,7 +1244,7 @@ static bool32 sub_802B8CC(void) break; // fall through case 1: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { sub_802C164(); sub_802AE14(3); @@ -1335,7 +1335,7 @@ static bool32 sub_802BA58(void) case 2: case 5: gUnknown_02022CFC->unk3C++; - if (gMain.newKeys & (A_BUTTON | B_BUTTON) || gUnknown_02022CFC->unk3C > 180) + if (JOY_NEW(A_BUTTON | B_BUTTON) || gUnknown_02022CFC->unk3C > 180) { sub_802DA14(); gUnknown_02022CFC->unkA++; @@ -3921,7 +3921,7 @@ static void Task_ShowPokemonJumpRecords(u8 taskId) data[0]++; break; case 2: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { rbox_fill_rectangle(data[1]); CopyWindowToVram(data[1], 1); diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 11c56706aa..6efca2562c 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -1755,10 +1755,10 @@ static void Task_PokemonStorageSystemPC(u8 taskId) { case MENU_NOTHING_CHOSEN: task->data[3] = task->data[1]; - if (gMain.newKeys & DPAD_UP && --task->data[3] < 0) + if (JOY_NEW(DPAD_UP) && --task->data[3] < 0) task->data[3] = 4; - if (gMain.newKeys & DPAD_DOWN && ++task->data[3] > 4) + if (JOY_NEW(DPAD_DOWN) && ++task->data[3] > 4) task->data[3] = 0; if (task->data[1] != task->data[3]) { @@ -1797,13 +1797,13 @@ static void Task_PokemonStorageSystemPC(u8 taskId) } break; case 3: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); task->data[0] = 2; } - else if (gMain.newKeys & DPAD_UP) + else if (JOY_NEW(DPAD_UP)) { if (--task->data[1] < 0) task->data[1] = 4; @@ -1813,7 +1813,7 @@ static void Task_PokemonStorageSystemPC(u8 taskId) AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); task->data[0] = 2; } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { if (++task->data[1] > 3) task->data[1] = 0; @@ -1975,22 +1975,22 @@ static void sub_80C78E4(void) static u8 HandleBoxChooseSelectionInput(void) { - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); return 201; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); return gUnknown_02039D04->curBox; } - if (gMain.newKeys & DPAD_LEFT) + if (JOY_NEW(DPAD_LEFT)) { PlaySE(SE_SELECT); sub_80C7BB4(); } - else if (gMain.newKeys & DPAD_RIGHT) + else if (JOY_NEW(DPAD_RIGHT)) { PlaySE(SE_SELECT); sub_80C7B80(); @@ -2392,7 +2392,7 @@ static void Cb_ReshowPSS(u8 taskId) } break; case 2: - if (!IsDma3ManagerBusyWithBgCopy() && gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (!IsDma3ManagerBusyWithBgCopy() && JOY_NEW(A_BUTTON | B_BUTTON)) { ClearBottomWindow(); sPSSData->state++; @@ -2614,7 +2614,7 @@ static void Cb_MainPSS(u8 taskId) } break; case 3: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sPSSData->state = 0; @@ -2631,7 +2631,7 @@ static void Cb_MainPSS(u8 taskId) sPSSData->state = 6; break; case 6: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -2857,7 +2857,7 @@ static void Cb_OnSelectedMon(u8 taskId) sPSSData->state = 6; break; case 6: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -2942,7 +2942,7 @@ static void Cb_WithdrawMon(u8 taskId) } break; case 1: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -3033,7 +3033,7 @@ static void Cb_DepositMenu(u8 taskId) } break; case 4: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); sPSSData->state = 1; @@ -3094,14 +3094,14 @@ static void Cb_ReleaseMon(u8 taskId) sPSSData->state++; break; case 4: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { PrintStorageActionText(PC_TEXT_BYE_BYE); sPSSData->state++; } break; case 5: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); if (sInPartyMenu) @@ -3133,14 +3133,14 @@ static void Cb_ReleaseMon(u8 taskId) sPSSData->state++; break; case 9: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { PrintStorageActionText(PC_TEXT_SURPRISE); sPSSData->state++; } break; case 10: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sub_80CC064(); @@ -3156,14 +3156,14 @@ static void Cb_ReleaseMon(u8 taskId) } break; case 12: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { PrintStorageActionText(PC_TEXT_WORRIED); sPSSData->state++; } break; case 13: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -3256,7 +3256,7 @@ static void Cb_GiveMovingItemToMon(u8 taskId) } break; case 3: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sPSSData->state++; @@ -3295,7 +3295,7 @@ static void Cb_ItemToBag(u8 taskId) } break; case 2: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sub_80CE00C(); @@ -3308,7 +3308,7 @@ static void Cb_ItemToBag(u8 taskId) SetPSSCallback(Cb_MainPSS); break; case 3: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -3348,7 +3348,7 @@ static void Cb_SwitchSelectedItem(u8 taskId) } break; case 3: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sPSSData->state++; @@ -3387,7 +3387,7 @@ static void Cb_ShowItemInfo(u8 taskId) sPSSData->state++; break; case 4: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { PlaySE(SE_WIN_OPEN); sPSSData->state++; @@ -3437,7 +3437,7 @@ static void Cb_CloseBoxWhileHoldingItem(u8 taskId) } break; case 2: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sPSSData->state = 5; @@ -3493,7 +3493,7 @@ static void Cb_PrintCantStoreMail(u8 taskId) sPSSData->state++; break; case 2: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); sPSSData->state++; @@ -3758,7 +3758,7 @@ static void Cb_OnCloseBoxPressed(u8 taskId) } break; case 1: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -3819,7 +3819,7 @@ static void Cb_OnBPressed(u8 taskId) } break; case 1: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) { ClearBottomWindow(); SetPSSCallback(Cb_MainPSS); @@ -5461,7 +5461,7 @@ static void sub_80CCA3C(const void *tilemap, s8 direction, u8 arg2) if (direction == 0) return; - else if (direction > 0) + if (direction > 0) x *= 1, x += 0x14; // x * 1 is needed to match, but can be safely removed as it makes no functional difference else x -= 4; @@ -6939,7 +6939,7 @@ static u8 InBoxInput_Normal(void) sPSSData->field_CD3 = 0; sPSSData->field_CD7 = 0; - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) { retVal = TRUE; if (sBoxCursorPosition >= IN_BOX_ROWS) @@ -6953,7 +6953,7 @@ static u8 InBoxInput_Normal(void) } break; } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { retVal = TRUE; cursorPosition += IN_BOX_ROWS; @@ -6967,7 +6967,7 @@ static u8 InBoxInput_Normal(void) } break; } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + else if (JOY_REPEAT(DPAD_LEFT)) { retVal = TRUE; if (sBoxCursorPosition % IN_BOX_ROWS != 0) @@ -6981,7 +6981,7 @@ static u8 InBoxInput_Normal(void) } break; } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_RIGHT)) { retVal = TRUE; if ((sBoxCursorPosition + 1) % IN_BOX_ROWS != 0) @@ -6995,7 +6995,7 @@ static u8 InBoxInput_Normal(void) } break; } - else if (gMain.newKeys & START_BUTTON) + else if (JOY_NEW(START_BUTTON)) { retVal = TRUE; cursorArea = CURSOR_AREA_BOX; @@ -7003,7 +7003,7 @@ static u8 InBoxInput_Normal(void) break; } - if ((gMain.newKeys & A_BUTTON) && sub_80CFA5C()) + if ((JOY_NEW(A_BUTTON)) && sub_80CFA5C()) { if (!sCanOnlyMove) return 8; @@ -7037,18 +7037,18 @@ static u8 InBoxInput_Normal(void) } } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) return 19; if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (gMain.heldKeys & L_BUTTON) + if (JOY_HELD(L_BUTTON)) return 10; - if (gMain.heldKeys & R_BUTTON) + if (JOY_HELD(R_BUTTON)) return 9; } - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { sub_80CFDC4(); return 0; @@ -7066,9 +7066,9 @@ static u8 InBoxInput_Normal(void) static u8 InBoxInput_GrabbingMultiple(void) { - if (gMain.heldKeys & A_BUTTON) + if (JOY_HELD(A_BUTTON)) { - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) { if (sBoxCursorPosition / IN_BOX_ROWS != 0) { @@ -7080,7 +7080,7 @@ static u8 InBoxInput_GrabbingMultiple(void) return 24; } } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { if (sBoxCursorPosition + IN_BOX_ROWS < IN_BOX_COUNT) { @@ -7092,7 +7092,7 @@ static u8 InBoxInput_GrabbingMultiple(void) return 24; } } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + else if (JOY_REPEAT(DPAD_LEFT)) { if (sBoxCursorPosition % IN_BOX_ROWS != 0) { @@ -7104,7 +7104,7 @@ static u8 InBoxInput_GrabbingMultiple(void) return 24; } } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_RIGHT)) { if ((sBoxCursorPosition + 1) % IN_BOX_ROWS != 0) { @@ -7141,7 +7141,7 @@ static u8 InBoxInput_GrabbingMultiple(void) static u8 InBoxInput_MovingMultiple(void) { - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) { if (sub_80D0580(0)) { @@ -7153,7 +7153,7 @@ static u8 InBoxInput_MovingMultiple(void) return 24; } } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { if (sub_80D0580(1)) { @@ -7165,7 +7165,7 @@ static u8 InBoxInput_MovingMultiple(void) return 24; } } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + else if (JOY_REPEAT(DPAD_LEFT)) { if (sub_80D0580(2)) { @@ -7177,7 +7177,7 @@ static u8 InBoxInput_MovingMultiple(void) return 10; } } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_RIGHT)) { if (sub_80D0580(3)) { @@ -7189,7 +7189,7 @@ static u8 InBoxInput_MovingMultiple(void) return 9; } } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { if (sub_80D0BC0()) { @@ -7202,7 +7202,7 @@ static u8 InBoxInput_MovingMultiple(void) return 24; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return 24; } @@ -7210,9 +7210,9 @@ static u8 InBoxInput_MovingMultiple(void) { if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (gMain.heldKeys & L_BUTTON) + if (JOY_HELD(L_BUTTON)) return 10; - if (gMain.heldKeys & R_BUTTON) + if (JOY_HELD(R_BUTTON)) return 9; } @@ -7237,7 +7237,7 @@ static u8 HandleInput_InParty(void) gotoBox = FALSE; retVal = 0; - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) { if (--cursorPosition < 0) cursorPosition = PARTY_SIZE; @@ -7245,7 +7245,7 @@ static u8 HandleInput_InParty(void) retVal = 1; break; } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { if (++cursorPosition > PARTY_SIZE) cursorPosition = 0; @@ -7253,14 +7253,14 @@ static u8 HandleInput_InParty(void) retVal = 1; break; } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT && sBoxCursorPosition != 0) + else if (JOY_REPEAT(DPAD_LEFT) && sBoxCursorPosition != 0) { retVal = 1; sPSSData->field_CD6 = sBoxCursorPosition; cursorPosition = 0; break; } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_RIGHT)) { if (sBoxCursorPosition == 0) { @@ -7276,7 +7276,7 @@ static u8 HandleInput_InParty(void) break; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (sBoxCursorPosition == PARTY_SIZE) { @@ -7312,7 +7312,7 @@ static u8 HandleInput_InParty(void) } } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { if (sPSSData->boxOption == BOX_OPTION_DEPOSIT) return 19; @@ -7326,7 +7326,7 @@ static u8 HandleInput_InParty(void) cursorArea = CURSOR_AREA_IN_BOX; cursorPosition = 0; } - else if (gMain.newKeys & SELECT_BUTTON) + else if (JOY_NEW(SELECT_BUTTON)) { sub_80CFDC4(); return 0; @@ -7355,7 +7355,7 @@ static u8 HandleInput_OnBox(void) sPSSData->field_CD2 = 0; sPSSData->field_CD7 = 0; - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) { retVal = 1; cursorArea = CURSOR_AREA_BUTTONS; @@ -7363,7 +7363,7 @@ static u8 HandleInput_OnBox(void) sPSSData->field_CD7 = 1; break; } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { retVal = 1; cursorArea = CURSOR_AREA_IN_BOX; @@ -7371,30 +7371,30 @@ static u8 HandleInput_OnBox(void) break; } - if (gMain.heldKeys & DPAD_LEFT) + if (JOY_HELD(DPAD_LEFT)) return 10; - if (gMain.heldKeys & DPAD_RIGHT) + if (JOY_HELD(DPAD_RIGHT)) return 9; if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (gMain.heldKeys & L_BUTTON) + if (JOY_HELD(L_BUTTON)) return 10; - if (gMain.heldKeys & R_BUTTON) + if (JOY_HELD(R_BUTTON)) return 9; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { sub_80CD1A8(FALSE); AddBoxMenu(); return 7; } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) return 19; - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { sub_80CFDC4(); return 0; @@ -7428,7 +7428,7 @@ static u8 HandleInput_OnButtons(void) sPSSData->field_CD2 = 0; sPSSData->field_CD7 = 0; - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) { retVal = 1; cursorArea = CURSOR_AREA_IN_BOX; @@ -7440,7 +7440,8 @@ static u8 HandleInput_OnButtons(void) sPSSData->field_CD7 = 1; break; } - else if (gMain.newAndRepeatedKeys & (DPAD_DOWN | START_BUTTON)) + + if (JOY_REPEAT(DPAD_DOWN | START_BUTTON)) { retVal = 1; cursorArea = CURSOR_AREA_BOX; @@ -7449,14 +7450,14 @@ static u8 HandleInput_OnButtons(void) break; } - if (gMain.newAndRepeatedKeys & DPAD_LEFT) + if (JOY_REPEAT(DPAD_LEFT)) { retVal = 1; if (--cursorPosition < 0) cursorPosition = 1; break; } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_RIGHT)) { retVal = 1; if (++cursorPosition > 1) @@ -7464,12 +7465,12 @@ static u8 HandleInput_OnButtons(void) break; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) return (cursorPosition == 0) ? 5 : 4; - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) return 19; - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { sub_80CFDC4(); return 0; @@ -7918,23 +7919,23 @@ static s16 sub_80D00AC(void) do { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { textId = Menu_GetCursorPos(); break; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); textId = -1; } - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { PlaySE(SE_SELECT); Menu_MoveCursor(-1); } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { PlaySE(SE_SELECT); Menu_MoveCursor(1); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 8ea25295cd..ad037a5f5d 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1496,23 +1496,23 @@ static void Task_HandleInput(u8 taskId) { if (MenuHelpers_CallLinkSomething() != TRUE && !gPaletteFade.active) { - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { ChangeSummaryPokemon(taskId, -1); } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { ChangeSummaryPokemon(taskId, 1); } - else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) + else if ((JOY_NEW(DPAD_LEFT)) || GetLRKeysPressed() == MENU_L_PRESSED) { ChangePage(taskId, -1); } - else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if ((JOY_NEW(DPAD_RIGHT)) || GetLRKeysPressed() == MENU_R_PRESSED) { ChangePage(taskId, 1); } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { if (sMonSummaryScreen->currPageIndex != PSS_PAGE_SKILLS) { @@ -1529,7 +1529,7 @@ static void Task_HandleInput(u8 taskId) } } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { StopPokemonAnimations(); PlaySE(SE_SELECT); @@ -1877,17 +1877,17 @@ static void Task_HandleInput_MoveSelect(u8 taskId) if (MenuHelpers_CallLinkSomething() != 1) { - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { data[0] = 4; ChangeSelectedMove(data, -1, &sMonSummaryScreen->firstMoveIndex); } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { data[0] = 4; ChangeSelectedMove(data, 1, &sMonSummaryScreen->firstMoveIndex); } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { if (sMonSummaryScreen->lockMovesFlag == TRUE || (sMonSummaryScreen->newMove == MOVE_NONE && sMonSummaryScreen->firstMoveIndex == MAX_MON_MOVES)) @@ -1905,7 +1905,7 @@ static void Task_HandleInput_MoveSelect(u8 taskId) PlaySE(SE_FAILURE); } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); CloseMoveSelectMode(taskId); @@ -2017,24 +2017,24 @@ static void Task_HandleInput_MovePositionSwitch(u8 taskId) if (MenuHelpers_CallLinkSomething() != TRUE) { - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { data[0] = 3; ChangeSelectedMove(&data[0], -1, &sMonSummaryScreen->secondMoveIndex); } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { data[0] = 3; ChangeSelectedMove(&data[0], 1, &sMonSummaryScreen->secondMoveIndex); } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { if (sMonSummaryScreen->firstMoveIndex == sMonSummaryScreen->secondMoveIndex) ExitMovePositionSwitchMode(taskId, FALSE); else ExitMovePositionSwitchMode(taskId, TRUE); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { ExitMovePositionSwitchMode(taskId, FALSE); } @@ -2160,25 +2160,25 @@ static void Task_HandleReplaceMoveInput(u8 taskId) { if (gPaletteFade.active != TRUE) { - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { data[0] = 4; ChangeSelectedMove(data, -1, &sMonSummaryScreen->firstMoveIndex); } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { data[0] = 4; ChangeSelectedMove(data, 1, &sMonSummaryScreen->firstMoveIndex); } - else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) + else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { ChangePage(taskId, -1); } - else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) + else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { ChangePage(taskId, 1); } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { if (CanReplaceMove() == TRUE) { @@ -2194,7 +2194,7 @@ static void Task_HandleReplaceMoveInput(u8 taskId) ShowCantForgetHMsWindow(taskId); } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { StopPokemonAnimations(); PlaySE(SE_SELECT); @@ -2234,7 +2234,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) u16 move; if (FuncIsActiveTask(Task_ShowPowerAccWindow) != 1) { - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { data[1] = 1; data[0] = 4; @@ -2242,7 +2242,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) data[1] = 0; gTasks[taskId].func = Task_HandleReplaceMoveInput; } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { data[1] = 1; data[0] = 4; @@ -2250,7 +2250,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) data[1] = 0; gTasks[taskId].func = Task_HandleReplaceMoveInput; } - else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) + else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { if (sMonSummaryScreen->currPageIndex != PSS_PAGE_BATTLE_MOVES) { @@ -2264,7 +2264,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) HandleAppealJamTilemap(9, -2, move); } } - else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) + else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { if (sMonSummaryScreen->currPageIndex != PSS_PAGE_CONTEST_MOVES) { @@ -2278,7 +2278,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) HandleAppealJamTilemap(9, -2, move); } } - else if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + else if (JOY_NEW(A_BUTTON | B_BUTTON)) { ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES); if (!gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_STATUS]].invisible) diff --git a/src/pokenav_match_call_1.c b/src/pokenav_match_call_1.c index f9ca66f377..fb44aaa876 100755 --- a/src/pokenav_match_call_1.c +++ b/src/pokenav_match_call_1.c @@ -79,16 +79,16 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) { int selection; - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) return POKENAV_MC_FUNC_UP; - if (gMain.newAndRepeatedKeys & DPAD_DOWN) + if (JOY_REPEAT(DPAD_DOWN)) return POKENAV_MC_FUNC_DOWN; - if (gMain.newAndRepeatedKeys & DPAD_LEFT) + if (JOY_REPEAT(DPAD_LEFT)) return POKENAV_MC_FUNC_PG_UP; - if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + if (JOY_REPEAT(DPAD_RIGHT)) return POKENAV_MC_FUNC_PG_DOWN; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { state->callback = CB2_HandleMatchCallOptionsInput; state->optionCursorPos = 0; @@ -108,7 +108,7 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) return POKENAV_MC_FUNC_SELECT; } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { if (GetPokenavMode() != POKENAV_MODE_FORCE_CALL_READY) { @@ -132,19 +132,19 @@ static u32 GetExitMatchCallMenuId(struct Pokenav3Struct *state) static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) { - if ((gMain.newKeys & DPAD_UP) && state->optionCursorPos) + if ((JOY_NEW(DPAD_UP)) && state->optionCursorPos) { state->optionCursorPos--; return POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR; } - if ((gMain.newKeys & DPAD_DOWN) && state->optionCursorPos < state->maxOptionId) + if ((JOY_NEW(DPAD_DOWN)) && state->optionCursorPos < state->maxOptionId) { state->optionCursorPos++; return POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { switch (state->matchCallOptions[state->optionCursorPos]) { @@ -166,7 +166,7 @@ static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) } } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { state->callback = CB2_HandleMatchCallInput; return POKENAV_MC_FUNC_CANCEL; @@ -177,12 +177,12 @@ static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state) static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *state) { - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) return POKENAV_MC_FUNC_CHECK_PAGE_UP; - if (gMain.newAndRepeatedKeys & DPAD_DOWN) + if (JOY_REPEAT(DPAD_DOWN)) return POKENAV_MC_FUNC_CHECK_PAGE_DOWN; - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { state->callback = CB2_HandleMatchCallInput; return POKENAV_MC_FUNC_EXIT_CHECK_PAGE; @@ -193,7 +193,7 @@ static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *state) static u32 CB2_HandleCallInput(struct Pokenav3Struct *state) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { state->callback = CB2_HandleMatchCallInput; return POKENAV_MC_FUNC_10; diff --git a/src/pokenav_match_call_2.c b/src/pokenav_match_call_2.c index 381fa24d8f..adcd889d37 100755 --- a/src/pokenav_match_call_2.c +++ b/src/pokenav_match_call_2.c @@ -1125,7 +1125,7 @@ static void PrintMatchCallMessage(struct Pokenav4Struct *state) static bool32 WaitForMatchCallMessageText(struct Pokenav4Struct *state) { - if (gMain.heldKeys & A_BUTTON) + if (JOY_HELD(A_BUTTON)) gTextFlags.canABSpeedUpPrint = 1; else gTextFlags.canABSpeedUpPrint = 0; diff --git a/src/pokenav_menu_handler_1.c b/src/pokenav_menu_handler_1.c index 35e7a84f90..c3a878b3f7 100644 --- a/src/pokenav_menu_handler_1.c +++ b/src/pokenav_menu_handler_1.c @@ -216,7 +216,7 @@ static u32 HandleMainMenuInput(struct Pokenav1Struct *state) if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { switch (sMenuItems[state->menuType][state->cursorPos]) { @@ -312,7 +312,7 @@ static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state) return -1; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return -1; } @@ -329,7 +329,7 @@ static u32 HandleCantOpenRibbonsInput(struct Pokenav1Struct *state) return POKENAV_MENU_FUNC_MOVE_CURSOR; } - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { state->callback = GetMainMenuInputHandler(); return POKENAV_MENU_FUNC_RESHOW_DESCRIPTION; @@ -363,7 +363,7 @@ static u32 HandleConditionMenuInput(struct Pokenav1Struct *state) return POKENAV_MENU_FUNC_RETURN_TO_MAIN; } } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { if (state->cursorPos != sLastCursorPositions[state->menuType]) { @@ -404,7 +404,7 @@ static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state) return POKENAV_MENU_FUNC_RETURN_TO_CONDITION; } } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { if (state->cursorPos != sLastCursorPositions[state->menuType]) { @@ -463,7 +463,7 @@ static void ReturnToConditionMenu(struct Pokenav1Struct *state) static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state) { - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { if (--state->cursorPos < 0) state->cursorPos = sLastCursorPositions[state->menuType]; @@ -471,7 +471,7 @@ static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state) state->currMenuItem = sMenuItems[state->menuType][state->cursorPos]; return TRUE; } - else if (gMain.newKeys & DPAD_DOWN) + else if (JOY_NEW(DPAD_DOWN)) { state->cursorPos++; if (state->cursorPos > sLastCursorPositions[state->menuType]) diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 2b846991e2..2dd2e44088 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -219,7 +219,7 @@ static u32 HandleRegionMapInput(struct Pokenav5Struct *state) static u32 HandleRegionMapInputZoomDisabled(struct Pokenav5Struct *state) { - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { state->callback = GetExitRegionMapMenuId; return POKENAV_MAP_FUNC_EXIT; diff --git a/src/region_map.c b/src/region_map.c index 3438ea3ed1..49b21be078 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -651,31 +651,31 @@ static u8 ProcessRegionMapInput_Full(void) input = MAP_INPUT_NONE; gRegionMap->cursorDeltaX = 0; gRegionMap->cursorDeltaY = 0; - if (gMain.heldKeys & DPAD_UP && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN) + if (JOY_HELD(DPAD_UP) && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN) { gRegionMap->cursorDeltaY = -1; input = MAP_INPUT_MOVE_START; } - if (gMain.heldKeys & DPAD_DOWN && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX) + if (JOY_HELD(DPAD_DOWN) && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX) { gRegionMap->cursorDeltaY = +1; input = MAP_INPUT_MOVE_START; } - if (gMain.heldKeys & DPAD_LEFT && gRegionMap->cursorPosX > MAPCURSOR_X_MIN) + if (JOY_HELD(DPAD_LEFT) && gRegionMap->cursorPosX > MAPCURSOR_X_MIN) { gRegionMap->cursorDeltaX = -1; input = MAP_INPUT_MOVE_START; } - if (gMain.heldKeys & DPAD_RIGHT && gRegionMap->cursorPosX < MAPCURSOR_X_MAX) + if (JOY_HELD(DPAD_RIGHT) && gRegionMap->cursorPosX < MAPCURSOR_X_MAX) { gRegionMap->cursorDeltaX = +1; input = MAP_INPUT_MOVE_START; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { input = MAP_INPUT_A_BUTTON; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { input = MAP_INPUT_B_BUTTON; } @@ -730,31 +730,31 @@ static u8 ProcessRegionMapInput_Zoomed(void) input = MAP_INPUT_NONE; gRegionMap->zoomedCursorDeltaX = 0; gRegionMap->zoomedCursorDeltaY = 0; - if (gMain.heldKeys & DPAD_UP && gRegionMap->scrollY > -0x34) + if (JOY_HELD(DPAD_UP) && gRegionMap->scrollY > -0x34) { gRegionMap->zoomedCursorDeltaY = -1; input = MAP_INPUT_MOVE_START; } - if (gMain.heldKeys & DPAD_DOWN && gRegionMap->scrollY < 0x3c) + if (JOY_HELD(DPAD_DOWN) && gRegionMap->scrollY < 0x3c) { gRegionMap->zoomedCursorDeltaY = +1; input = MAP_INPUT_MOVE_START; } - if (gMain.heldKeys & DPAD_LEFT && gRegionMap->scrollX > -0x2c) + if (JOY_HELD(DPAD_LEFT) && gRegionMap->scrollX > -0x2c) { gRegionMap->zoomedCursorDeltaX = -1; input = MAP_INPUT_MOVE_START; } - if (gMain.heldKeys & DPAD_RIGHT && gRegionMap->scrollX < 0xac) + if (JOY_HELD(DPAD_RIGHT) && gRegionMap->scrollX < 0xac) { gRegionMap->zoomedCursorDeltaX = +1; input = MAP_INPUT_MOVE_START; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { input = MAP_INPUT_A_BUTTON; } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { input = MAP_INPUT_B_BUTTON; } diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index 204eb6733b..d0e815816b 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -380,7 +380,7 @@ static void Task_ResetRtc_1(u8 taskId) u8 selection = data[2]; const struct ResetRtcStruct *selectionInfo = &sUnknown_08510428[selection - 1]; - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { gTasks[taskId].func = Task_ResetRtc_2; data[1] = 0; @@ -389,7 +389,7 @@ static void Task_ResetRtc_1(u8 taskId) return; } - if (gMain.newKeys & DPAD_RIGHT) + if (JOY_NEW(DPAD_RIGHT)) { if (selectionInfo->right) { @@ -399,7 +399,7 @@ static void Task_ResetRtc_1(u8 taskId) } } - if (gMain.newKeys & DPAD_LEFT) + if (JOY_NEW(DPAD_LEFT)) { if (selectionInfo->left) { @@ -411,7 +411,7 @@ static void Task_ResetRtc_1(u8 taskId) if (selection == 5) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { gLocalTime.days = data[3]; gLocalTime.hours = data[4]; @@ -423,7 +423,7 @@ static void Task_ResetRtc_1(u8 taskId) data[2] = 6; } } - else if (MoveTimeUpDown(&data[selectionInfo->dataIndex], selectionInfo->minVal, selectionInfo->maxVal, gMain.newAndRepeatedKeys & (DPAD_UP | DPAD_DOWN))) + else if (MoveTimeUpDown(&data[selectionInfo->dataIndex], selectionInfo->minVal, selectionInfo->maxVal, JOY_REPEAT(DPAD_UP | DPAD_DOWN))) { PlaySE(SE_SELECT); PrintTime(data[8], 0, 1, data[3], data[4], data[5], data[6]); @@ -532,12 +532,12 @@ static void Task_ShowResetRtcPrompt(u8 taskId) ScheduleBgCopyTilemapToVram(0); data[0]++; case 1: - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { DestroyTask(taskId); DoSoftReset(); } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); DestroyTask(taskId); @@ -620,7 +620,7 @@ static void Task_ResetRtcScreen(u8 taskId) } data[0] = 5; case 5: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 1, 0, 0x10, RGB_WHITEALPHA); data[0] = 6; diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index 7c824e82dd..9bf0e7ed4f 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -306,7 +306,7 @@ static void CB2_GameplayCannotBeContinued(void) { gSaveFailedClockInfo[CLOCK_RUNNING] = FALSE; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { FillWindowPixelBuffer(gSaveFailedWindowIds[TEXT_WIN_ID], PIXEL_FILL(1)); SaveFailedScreenTextPrint(gText_GamePlayCannotBeContinued, 1, 0); @@ -319,7 +319,7 @@ static void CB2_FadeAndReturnToTitleScreen(void) { gSaveFailedClockInfo[CLOCK_RUNNING] = FALSE; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); SetVBlankCallback(VBlankCB); diff --git a/src/scrcmd.c b/src/scrcmd.c index b71fa40ad8..ef0b3f86ba 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1325,9 +1325,9 @@ bool8 ScrCmd_closemessage(struct ScriptContext *ctx) static bool8 WaitForAorBPress(void) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) return TRUE; - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) return TRUE; return FALSE; } diff --git a/src/script_menu.c b/src/script_menu.c index 2b135e3012..425cdc251c 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -170,7 +170,7 @@ static void Task_HandleMultichoiceInput(u8 taskId) else selection = Menu_ProcessInput(); - if (gMain.newKeys & (DPAD_UP | DPAD_DOWN)) + if (JOY_NEW(DPAD_UP | DPAD_DOWN)) { DrawLinkServicesMultichoiceMenu(tMultichoiceId); } diff --git a/src/shop.c b/src/shop.c index 66f775fb0c..44ab0885ce 100755 --- a/src/shop.c +++ b/src/shop.c @@ -1017,7 +1017,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) } else { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); ClearStdWindowAndFrameToTransparent(4, 0); @@ -1030,7 +1030,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, gShopDataPtr->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6); BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, BuyMenuConfirmPurchase); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); ClearStdWindowAndFrameToTransparent(4, 0); @@ -1106,7 +1106,7 @@ static void Task_ReturnToItemListAfterItemPurchase(u8 taskId) { s16 *data = gTasks[taskId].data; - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); if (tItemId == ITEM_POKE_BALL && tItemCount > 9 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE) @@ -1122,7 +1122,7 @@ static void Task_ReturnToItemListAfterItemPurchase(u8 taskId) static void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId) { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); BuyMenuReturnToItemList(taskId); diff --git a/src/slot_machine.c b/src/slot_machine.c index 285b110af9..7cfd7d22e1 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1945,7 +1945,7 @@ static bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task) if (sSlotMachine->coins < MAX_COINS) sSlotMachine->coins++; task->data[1] = 8; - if (gMain.heldKeys & A_BUTTON) + if (JOY_HELD(A_BUTTON)) task->data[1] = 4; } if (IsFanfareTaskInactive() && JOY_NEW(START_BUTTON)) diff --git a/src/start_menu.c b/src/start_menu.c index 6a90946fe4..35eb53475b 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -550,19 +550,19 @@ void ShowStartMenu(void) static bool8 HandleStartMenuInput(void) { - if (gMain.newKeys & DPAD_UP) + if (JOY_NEW(DPAD_UP)) { PlaySE(SE_SELECT); sStartMenuCursorPos = Menu_MoveCursor(-1); } - if (gMain.newKeys & DPAD_DOWN) + if (JOY_NEW(DPAD_DOWN)) { PlaySE(SE_SELECT); sStartMenuCursorPos = Menu_MoveCursor(1); } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void == StartMenuPokedexCallback) @@ -584,7 +584,7 @@ static bool8 HandleStartMenuInput(void) return FALSE; } - if (gMain.newKeys & (START_BUTTON | B_BUTTON)) + if (JOY_NEW(START_BUTTON | B_BUTTON)) { RemoveExtraStartMenuWindows(); HideStartMenu(); @@ -906,12 +906,12 @@ static bool8 SaveSuccesTimer(void) { sSaveDialogTimer--; - if (gMain.heldKeys & A_BUTTON) + if (JOY_HELD(A_BUTTON)) { PlaySE(SE_SELECT); return TRUE; } - else if (sSaveDialogTimer == 0) + if (sSaveDialogTimer == 0) { return TRUE; } @@ -925,7 +925,7 @@ static bool8 SaveErrorTimer(void) { sSaveDialogTimer--; } - else if (gMain.heldKeys & A_BUTTON) + else if (JOY_HELD(A_BUTTON)) { return TRUE; } diff --git a/src/title_screen.c b/src/title_screen.c index 1086016856..1d6f90d74d 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -727,24 +727,24 @@ static void Task_TitleScreenPhase2(u8 taskId) // Show Rayquaza silhouette and process main title screen input static void Task_TitleScreenPhase3(u8 taskId) { - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & START_BUTTON)) + if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(START_BUTTON))) { FadeOutBGM(4); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_WHITEALPHA); SetMainCallback2(CB2_GoToMainMenu); } - else if ((gMain.heldKeys & CLEAR_SAVE_BUTTON_COMBO) == CLEAR_SAVE_BUTTON_COMBO) + else if (JOY_HELD(CLEAR_SAVE_BUTTON_COMBO) == CLEAR_SAVE_BUTTON_COMBO) { SetMainCallback2(CB2_GoToClearSaveDataScreen); } - else if ((gMain.heldKeys & RESET_RTC_BUTTON_COMBO) == RESET_RTC_BUTTON_COMBO + else if (JOY_HELD(RESET_RTC_BUTTON_COMBO) == RESET_RTC_BUTTON_COMBO && CanResetRTC() == TRUE) { FadeOutBGM(4); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); SetMainCallback2(CB2_GoToResetRtcScreen); } - else if ((gMain.heldKeys & BERRY_UPDATE_BUTTON_COMBO) == BERRY_UPDATE_BUTTON_COMBO) + else if (JOY_HELD(BERRY_UPDATE_BUTTON_COMBO) == BERRY_UPDATE_BUTTON_COMBO) { FadeOutBGM(4); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); diff --git a/src/trade.c b/src/trade.c index e61066dc57..5ba26842f1 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1352,24 +1352,24 @@ static void SetReadyToTrade(void) static void TradeMenuProcessInput(void) { - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) { TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 0); } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 1); } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + else if (JOY_REPEAT(DPAD_LEFT)) { TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 2); } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_RIGHT)) { TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 3); } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); @@ -1450,7 +1450,7 @@ static void TradeMenuProcessInput_SelectedMon(void) static void ChooseMonAfterButtonPress(void) { - if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) { PlaySE(SE_SELECT); TradeMenuChooseMon(); @@ -1625,7 +1625,7 @@ static void RedrawTradeMenuAfterPressA(void) { int i; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); rbox_fill_rectangle(0); @@ -1697,7 +1697,7 @@ static void LinkTradeWaitForQueue(void) static void PartnersMonWasInvalid(void) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0); sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; @@ -3727,7 +3727,7 @@ static bool8 AnimateTradeSequenceCable(void) { return TRUE; } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { sTradeData->state++; } @@ -4242,7 +4242,7 @@ static bool8 AnimateTradeSequenceWireless(void) { return TRUE; } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { sTradeData->state++; } diff --git a/src/trainer_card.c b/src/trainer_card.c index 9d6838176f..2d9ec2b090 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -438,13 +438,13 @@ static void Task_TrainerCard(u8 taskId) DrawTrainerCardWindow(1); sData->timeColonNeedDraw = FALSE; } - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { FlipTrainerCard(); PlaySE(SE_RG_CARD_FLIP); sData->mainState = STATE_WAIT_FLIP_TO_BACK; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE) { @@ -465,7 +465,7 @@ static void Task_TrainerCard(u8 taskId) } break; case STATE_HANDLE_INPUT_BACK: - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE) { @@ -483,7 +483,7 @@ static void Task_TrainerCard(u8 taskId) PlaySE(SE_RG_CARD_FLIP); } } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE) { diff --git a/src/union_room.c b/src/union_room.c index cb9c4018e3..9605805444 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -444,7 +444,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) break; case LL_STATE_AWAIT_PLAYERS: Leader_SetStateIfMemberListChanged(data, LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, LL_STATE_MEMBER_LEFT); - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { if (data->playerCount == 1) data->state = LL_STATE_SHUTDOWN_AND_FAIL; @@ -457,7 +457,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) && data->playerCount > GROUP_MIN(sPlayerActivityGroupSize) - 1 && GROUP_MAX(sPlayerActivityGroupSize) != 0 && sub_8012240() - && gMain.newKeys & START_BUTTON) + && JOY_NEW(START_BUTTON)) { data->state = LL_STATE_MEMBERS_OK_PROMPT; LinkRfu_StopManagerAndFinalizeSlots(); @@ -1004,7 +1004,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; case 0: id = ListMenu_ProcessInput(data->listTaskId); - if (gMain.newKeys & A_BUTTON && id != -1) + if (JOY_NEW(A_BUTTON) && id != -1) { // this unused variable along with the assignment is needed to match u32 activity = data->field_0->arr[id].gname_uname.gname.activity; @@ -1031,7 +1031,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) PlaySE(SE_WALL_HIT); } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { data->state = LG_STATE_CANCEL_CHOOSE_LEADER; } @@ -1134,7 +1134,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; } - if (RfuGetStatus() == RFU_STATUS_OK && gMain.newKeys & B_BUTTON) + if (RfuGetStatus() == RFU_STATUS_OK && JOY_NEW(B_BUTTON)) data->state = LG_STATE_ASK_LEAVE_GROUP; break; case LG_STATE_ASK_LEAVE_GROUP: @@ -1888,7 +1888,7 @@ static void Task_MEvent_Leader(u8 taskId) break; case 4: Leader_SetStateIfMemberListChanged(data, 5, 6); - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { data->state = 13; DestroyWirelessStatusIndicatorSprite(); @@ -2103,7 +2103,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) break; case 0: id = ListMenu_ProcessInput(data->listTaskId); - if (gMain.newKeys & A_BUTTON && id != -1) + if (JOY_NEW(A_BUTTON) && id != -1) { // this unused variable along with the assignment is needed to match u32 unusedVar; @@ -2125,7 +2125,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) PlaySE(SE_WALL_HIT); } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { data->state = 6; } @@ -2288,7 +2288,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) } } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { data->state = 6; data->refreshTimer = 0; @@ -2546,7 +2546,7 @@ static void Task_RunUnionRoom(u8 taskId) } else if (ScriptContext2_IsEnabled() != TRUE) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (TryInteractWithUnionRoomMember(uroom->field_0, &taskData[0], &taskData[1], uroom->spriteIds)) { @@ -2880,7 +2880,7 @@ static void Task_RunUnionRoom(u8 taskId) break; case UR_STATE_HANDLE_CONTACT_DATA: ReceiveUnionRoomActivityPacket(uroom); - if (UnionRoom_HandleContactFromOtherPlayer(uroom) && gMain.newKeys & B_BUTTON) + if (UnionRoom_HandleContactFromOtherPlayer(uroom) && JOY_NEW(B_BUTTON)) { sub_8011DE0(1); StringCopy(gStringVar4, sText_ChatEnded); diff --git a/src/union_room_chat.c b/src/union_room_chat.c index fd2a957915..75464529f8 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -1017,12 +1017,12 @@ static void Chat_HandleInput(void) switch (sChat->funcState) { case 0: - if (gMain.newKeys & START_BUTTON) + if (JOY_NEW(START_BUTTON)) { if (sChat->bufferCursorPos) SetChatFunction(CHAT_FUNC_SEND); } - else if (gMain.newKeys & SELECT_BUTTON) + else if (JOY_NEW(SELECT_BUTTON)) { SetChatFunction(CHAT_FUNC_SWITCH); } @@ -1039,14 +1039,14 @@ static void Chat_HandleInput(void) SetChatFunction(CHAT_FUNC_ASK_QUIT); } } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { AppendTextToMessage(); StartDisplaySubtask(CHATDISPLAY_FUNC_UPDATE_MSG, 0); StartDisplaySubtask(CHATDISPLAY_FUNC_CURSOR_BLINK, 1); sChat->funcState = 1; } - else if (gMain.newKeys & R_BUTTON) + else if (JOY_NEW(R_BUTTON)) { if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER) { @@ -1100,7 +1100,7 @@ static void Chat_Switch(void) shouldSwitchPages = FALSE; break; case MENU_NOTHING_CHOSEN: - if (gMain.newKeys & SELECT_BUTTON) + if (JOY_NEW(SELECT_BUTTON)) { PlaySE(SE_SELECT); Menu_MoveCursor(1); @@ -1420,13 +1420,13 @@ static void Chat_Register(void) } break; case 1: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { RegisterTextAtRow(); StartDisplaySubtask(CHATDISPLAY_FUNC_RETURN_TO_KB, 0); sChat->funcState = 3; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { StartDisplaySubtask(CHATDISPLAY_FUNC_CANCEL_REGISTER, 0); sChat->funcState = 4; @@ -1457,7 +1457,7 @@ static void Chat_Register(void) sChat->funcState = 6; break; case 6: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0); sChat->funcState = 4; @@ -1591,7 +1591,7 @@ static bool32 HandleDPadInput(void) { do { - if (gMain.newAndRepeatedKeys & DPAD_UP) + if (JOY_REPEAT(DPAD_UP)) { if (sChat->currentRow > 0) sChat->currentRow--; @@ -1599,7 +1599,7 @@ static bool32 HandleDPadInput(void) sChat->currentRow = sKeyboardPageMaxRow[sChat->currentPage]; break; } - if (gMain.newAndRepeatedKeys & DPAD_DOWN) + if (JOY_REPEAT(DPAD_DOWN)) { if (sChat->currentRow < sKeyboardPageMaxRow[sChat->currentPage]) sChat->currentRow++; @@ -1609,7 +1609,7 @@ static bool32 HandleDPadInput(void) } if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER) { - if (gMain.newAndRepeatedKeys & DPAD_LEFT) + if (JOY_REPEAT(DPAD_LEFT)) { if (sChat->currentCol > 0) sChat->currentCol--; @@ -1617,7 +1617,7 @@ static bool32 HandleDPadInput(void) sChat->currentCol = 4; break; } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_RIGHT)) { if (sChat->currentCol < 4) sChat->currentCol++; diff --git a/src/unk_text_util_2.c b/src/unk_text_util_2.c index 22db293e93..b92b34fbd2 100644 --- a/src/unk_text_util_2.c +++ b/src/unk_text_util_2.c @@ -19,14 +19,14 @@ u16 Font6Func(struct TextPrinter *textPrinter) switch (textPrinter->state) { case 0: - if (gMain.heldKeys & (A_BUTTON | B_BUTTON) && subStruct->hasPrintBeenSpedUp) + if (JOY_HELD(A_BUTTON | B_BUTTON) && subStruct->hasPrintBeenSpedUp) { textPrinter->delayCounter = 0; } if (textPrinter->delayCounter && textPrinter->textSpeed) { textPrinter->delayCounter --; - if (gTextFlags.canABSpeedUpPrint && gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (gTextFlags.canABSpeedUpPrint && JOY_NEW(A_BUTTON | B_BUTTON)) { subStruct->hasPrintBeenSpedUp = TRUE; textPrinter->delayCounter = 0; diff --git a/src/wallclock.c b/src/wallclock.c index bed04928e3..c38dd99e38 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -795,7 +795,7 @@ static void Task_SetClock_HandleInput(u8 taskId) { gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { gTasks[taskId].func = Task_SetClock_AskConfirm; } @@ -803,10 +803,10 @@ static void Task_SetClock_HandleInput(u8 taskId) { gTasks[taskId].tMoveDir = MOVE_NONE; - if (gMain.heldKeys & DPAD_LEFT) + if (JOY_HELD(DPAD_LEFT)) gTasks[taskId].tMoveDir = MOVE_BACKWARD; - if (gMain.heldKeys & DPAD_RIGHT) + if (JOY_HELD(DPAD_RIGHT)) gTasks[taskId].tMoveDir = MOVE_FORWARD; if (gTasks[taskId].tMoveDir != MOVE_NONE) @@ -878,7 +878,7 @@ static void Task_ViewClock_WaitFadeIn(u8 taskId) static void Task_ViewClock_HandleInput(u8 taskId) { InitClockWithRtc(taskId); - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) gTasks[taskId].func = Task_ViewClock_FadeOut; } From ca950a8daf6dd95ab5dacc51f250fea7b605361c Mon Sep 17 00:00:00 2001 From: aaaaaa123456789 Date: Mon, 2 Nov 2020 22:18:26 -0300 Subject: [PATCH 089/177] Solve merge conflicts from previous commit --- gflib/text.c | 2 +- src/menu.c | 8 ++++---- src/pokenav_conditions_1.c | 8 ++++---- src/pokenav_conditions_3.c | 2 +- src/pokenav_menu_handler_1.c | 10 +++++----- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 30c142fa88..4cbad13766 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -783,7 +783,7 @@ bool16 TextPrinterWait(struct TextPrinter *textPrinter) } else { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { result = TRUE; PlaySE(SE_SELECT); diff --git a/src/menu.c b/src/menu.c index 1a040cafc4..339106bfd1 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1069,23 +1069,23 @@ s8 Menu_ProcessInputNoWrapAround_other(void) { u8 oldPos = sMenu.cursorPos; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (!sMenu.APressMuted) PlaySE(SE_SELECT); return sMenu.cursorPos; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { return MENU_B_PRESSED; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) { if (oldPos != Menu_MoveCursorNoWrapAround(-1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) { if (oldPos != Menu_MoveCursorNoWrapAround(1)) PlaySE(SE_SELECT); diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c index 77d982d85b..c27cd410c6 100644 --- a/src/pokenav_conditions_1.c +++ b/src/pokenav_conditions_1.c @@ -88,13 +88,13 @@ u32 HandlePartyConditionInput(struct PokenavSub11 *structPtr) if (ret == PARTY_CONDITION_FUNC_NONE) { - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); structPtr->callback = GetConditionReturnCallback; ret = PARTY_CONDITION_FUNC_RETURN; } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { if (structPtr->searchMode == 0) { @@ -165,7 +165,7 @@ u8 ConditionGraphHandleDpadInput(struct PokenavSub11 *structPtr) struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); u8 ret = 0; - if (gMain.heldKeys & DPAD_UP) + if (JOY_HELD(DPAD_UP)) { if (structPtr->searchMode == 0 || monListPtr->currIndex != 0) { @@ -173,7 +173,7 @@ u8 ConditionGraphHandleDpadInput(struct PokenavSub11 *structPtr) ret = SwitchConditionSummaryIndex(1); } } - else if (gMain.heldKeys & DPAD_DOWN) + else if (JOY_HELD(DPAD_DOWN)) { if (structPtr->searchMode == 0 || monListPtr->currIndex < monListPtr->listCount - 1) { diff --git a/src/pokenav_conditions_3.c b/src/pokenav_conditions_3.c index c4beb924c2..d02d844d0d 100644 --- a/src/pokenav_conditions_3.c +++ b/src/pokenav_conditions_3.c @@ -196,7 +196,7 @@ static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr) structPtr->callback = ReturnToConditionSearchList; return CONDITION_SEARCH_FUNC_EXIT; } - else if (gMain.newKeys & A_BUTTON) + else if (JOY_NEW(A_BUTTON)) { structPtr->monList->currIndex = GetSelectedPokenavListIndex(); structPtr->isPartyCondition = 1; diff --git a/src/pokenav_menu_handler_1.c b/src/pokenav_menu_handler_1.c index c3a878b3f7..4792756c18 100644 --- a/src/pokenav_menu_handler_1.c +++ b/src/pokenav_menu_handler_1.c @@ -263,7 +263,7 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state) if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { if (sMenuItems[state->menuType][state->cursorPos] == POKENAV_MENUITEM_MATCH_CALL) { @@ -278,7 +278,7 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state) } } - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_FAILURE); return POKENAV_MENU_FUNC_NONE; @@ -293,7 +293,7 @@ static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state) if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { u32 menuItem = sMenuItems[state->menuType][state->cursorPos]; if (menuItem != POKENAV_MENUITEM_MATCH_CALL && menuItem != POKENAV_MENUITEM_SWITCH_OFF) @@ -343,7 +343,7 @@ static u32 HandleConditionMenuInput(struct Pokenav1Struct *state) if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { switch (sMenuItems[state->menuType][state->cursorPos]) { @@ -387,7 +387,7 @@ static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state) if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { u8 menuItem = sMenuItems[state->menuType][state->cursorPos]; if (menuItem != POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL) From c59a818462627fb839ca8b78fe62c5f442f27d8d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 4 Nov 2020 15:35:22 -0500 Subject: [PATCH 090/177] Fix battle factory on gcc 10 --- src/battle_factory_screen.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index a3fa275c5c..c10bbc5e4e 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1145,7 +1145,11 @@ static void CB2_InitSelectScreen(void) LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); LoadPalette(gUnknown_0861046C, 0xF0, 8); LoadPalette(gUnknown_0861046C, 0xE0, 10); + #if MODERN + if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) + #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) + #endif gPlttBufferUnfaded[228] = sFactorySelectScreen->unk2A4; LoadPalette(gUnknown_0861039C, 0x20, 4); gMain.state++; @@ -1167,7 +1171,11 @@ static void CB2_InitSelectScreen(void) SetVBlankCallback(Select_VblankCb); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); + #if MODERN + if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) + #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) + #endif { Select_SetWinRegs(88, 152, 32, 96); ShowBg(3); @@ -1181,7 +1189,11 @@ static void CB2_InitSelectScreen(void) gMain.state++; break; case 5: + #if MODERN + if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) + #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) + #endif sFactorySelectScreen->cursorPos = gLastViewedMonIndex; Select_InitMonsData(); Select_InitAllSprites(); @@ -3170,7 +3182,11 @@ static void CB2_InitSwapScreen(void) gMain.state++; break; case 5: + #if MODERN + if (sFactorySwapScreen && sFactorySwapScreen->fromSummaryScreen) + #else if (sFactorySwapScreen->fromSummaryScreen == TRUE) + #endif sFactorySwapScreen->cursorPos = gLastViewedMonIndex; gMain.state++; break; From 70ff0d1735918ecf7daba1e9a043ec15c2171c42 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 4 Nov 2020 16:43:59 -0500 Subject: [PATCH 091/177] Condense fix for battle factory on gcc 10 --- src/battle_factory_screen.c | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index c10bbc5e4e..99dfe7cf69 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1145,11 +1145,7 @@ static void CB2_InitSelectScreen(void) LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); LoadPalette(gUnknown_0861046C, 0xF0, 8); LoadPalette(gUnknown_0861046C, 0xE0, 10); - #if MODERN - if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) - #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) - #endif gPlttBufferUnfaded[228] = sFactorySelectScreen->unk2A4; LoadPalette(gUnknown_0861039C, 0x20, 4); gMain.state++; @@ -1171,11 +1167,7 @@ static void CB2_InitSelectScreen(void) SetVBlankCallback(Select_VblankCb); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); - #if MODERN - if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) - #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) - #endif { Select_SetWinRegs(88, 152, 32, 96); ShowBg(3); @@ -1189,11 +1181,7 @@ static void CB2_InitSelectScreen(void) gMain.state++; break; case 5: - #if MODERN - if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) - #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) - #endif sFactorySelectScreen->cursorPos = gLastViewedMonIndex; Select_InitMonsData(); Select_InitAllSprites(); @@ -1241,7 +1229,9 @@ static void CB2_InitSelectScreen(void) } } -static void Select_InitMonsData(void) +// This should be called at the top of CB2_InitSelectScreen +// sFactorySelectScreen is dereferenced prior to being allocated otherwise +static NOINLINE void Select_InitMonsData(void) { u8 i; @@ -3094,7 +3084,9 @@ static void sub_819D9EC(u8 taskId) } } -static void Swap_InitStruct(void) +// This should be called at the top of CB2_InitSelectScreen +// sFactorySwapScreen is dereferenced prior to being allocated otherwise +static NOINLINE void Swap_InitStruct(void) { if (sFactorySwapScreen == NULL) { @@ -3182,11 +3174,7 @@ static void CB2_InitSwapScreen(void) gMain.state++; break; case 5: - #if MODERN - if (sFactorySwapScreen && sFactorySwapScreen->fromSummaryScreen) - #else if (sFactorySwapScreen->fromSummaryScreen == TRUE) - #endif sFactorySwapScreen->cursorPos = gLastViewedMonIndex; gMain.state++; break; From c3080a5a2a4985f75155fba0bb307cdf7e90bfb5 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 4 Nov 2020 16:46:26 -0500 Subject: [PATCH 092/177] Fix typo --- src/battle_factory_screen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 99dfe7cf69..1242d6359a 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -3084,7 +3084,7 @@ static void sub_819D9EC(u8 taskId) } } -// This should be called at the top of CB2_InitSelectScreen +// This should be called at the top of CB2_InitSwapScreen // sFactorySwapScreen is dereferenced prior to being allocated otherwise static NOINLINE void Swap_InitStruct(void) { From 1220f0655c3aa028002bb54952ffc76d73b4dc7c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 4 Nov 2020 17:46:07 -0500 Subject: [PATCH 093/177] Revert to original battle factory gcc 10 fix --- src/battle_factory_screen.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 1242d6359a..c10bbc5e4e 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1145,7 +1145,11 @@ static void CB2_InitSelectScreen(void) LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); LoadPalette(gUnknown_0861046C, 0xF0, 8); LoadPalette(gUnknown_0861046C, 0xE0, 10); + #if MODERN + if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) + #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) + #endif gPlttBufferUnfaded[228] = sFactorySelectScreen->unk2A4; LoadPalette(gUnknown_0861039C, 0x20, 4); gMain.state++; @@ -1167,7 +1171,11 @@ static void CB2_InitSelectScreen(void) SetVBlankCallback(Select_VblankCb); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); + #if MODERN + if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) + #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) + #endif { Select_SetWinRegs(88, 152, 32, 96); ShowBg(3); @@ -1181,7 +1189,11 @@ static void CB2_InitSelectScreen(void) gMain.state++; break; case 5: + #if MODERN + if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) + #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) + #endif sFactorySelectScreen->cursorPos = gLastViewedMonIndex; Select_InitMonsData(); Select_InitAllSprites(); @@ -1229,9 +1241,7 @@ static void CB2_InitSelectScreen(void) } } -// This should be called at the top of CB2_InitSelectScreen -// sFactorySelectScreen is dereferenced prior to being allocated otherwise -static NOINLINE void Select_InitMonsData(void) +static void Select_InitMonsData(void) { u8 i; @@ -3084,9 +3094,7 @@ static void sub_819D9EC(u8 taskId) } } -// This should be called at the top of CB2_InitSwapScreen -// sFactorySwapScreen is dereferenced prior to being allocated otherwise -static NOINLINE void Swap_InitStruct(void) +static void Swap_InitStruct(void) { if (sFactorySwapScreen == NULL) { @@ -3174,7 +3182,11 @@ static void CB2_InitSwapScreen(void) gMain.state++; break; case 5: + #if MODERN + if (sFactorySwapScreen && sFactorySwapScreen->fromSummaryScreen) + #else if (sFactorySwapScreen->fromSummaryScreen == TRUE) + #endif sFactorySwapScreen->cursorPos = gLastViewedMonIndex; gMain.state++; break; From c70c44fa48282632ec7457d4f2bbb5a19a4d70c9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 6 Nov 2020 12:29:40 -0500 Subject: [PATCH 094/177] Simplify RAM reset adaptation for modern --- src/crt0.s | 4 ++++ src/main.c | 18 +----------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/src/crt0.s b/src/crt0.s index cb7c93a6bc..ba068f8d98 100644 --- a/src/crt0.s +++ b/src/crt0.s @@ -91,6 +91,10 @@ Init: @ 8000204 ldr r1, =INTR_VECTOR adr r0, IntrMain str r0, [r1] + .if MODERN + mov r0, #255 @ RESET_ALL + swi #1 << 16 + .endif @ MODERN ldr r1, =AgbMain + 1 mov lr, pc bx r1 diff --git a/src/main.c b/src/main.c index ab0c232849..9fd1d0a35f 100644 --- a/src/main.c +++ b/src/main.c @@ -85,25 +85,9 @@ void EnableVCountIntrAtLine150(void); void AgbMain() { -#if MODERN // Modern compilers are liberal with the stack on entry to this function, // so RegisterRamReset may crash if it resets IWRAM. - RegisterRamReset(RESET_ALL & ~RESET_IWRAM); - asm("mov\tr1, #0xC0\n" - "\tlsl\tr1, r1, #0x12\n" - "\tmov r2, #0xFC\n" - "\tlsl r2, r2, #0x7\n" - "\tadd\tr2, r1, r2\n" - "\tmov\tr0, #0\n" - "\tmov\tr3, r0\n" - "\tmov\tr4, r0\n" - "\tmov\tr5, r0\n" - ".LCU0:\n" - "\tstmia r1!, {r0, r3, r4, r5}\n" - "\tcmp\tr1, r2\n" - "\tbcc\t.LCU0\n" - ); -#else +#if !MODERN RegisterRamReset(RESET_ALL); #endif //MODERN *(vu16 *)BG_PLTT = 0x7FFF; From 3112cf5726424457c49307082c21fa3740bc0b3a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 6 Nov 2020 12:34:57 -0500 Subject: [PATCH 095/177] swi --> svc --- src/crt0.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crt0.s b/src/crt0.s index ba068f8d98..49f214f80d 100644 --- a/src/crt0.s +++ b/src/crt0.s @@ -93,7 +93,7 @@ Init: @ 8000204 str r0, [r1] .if MODERN mov r0, #255 @ RESET_ALL - swi #1 << 16 + svc #1 << 16 .endif @ MODERN ldr r1, =AgbMain + 1 mov lr, pc From 3b91735e63409f4c5fd88d9984b036a6304952f9 Mon Sep 17 00:00:00 2001 From: MCboy Date: Fri, 6 Nov 2020 22:59:46 +0330 Subject: [PATCH 096/177] use constants for ball throw count --- include/battle.h | 4 +++- src/tv.c | 11 ++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/include/battle.h b/include/battle.h index 8dad6bc251..a58f69cda7 100644 --- a/include/battle.h +++ b/include/battle.h @@ -12,6 +12,8 @@ #include "battle_util2.h" #include "battle_bg.h" +#include "pokeball.h" // i'm not sure about this one + #define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler]) #define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE) #define GET_BATTLER_SIDE2(battler) (GET_BATTLER_POSITION(battler) & BIT_SIDE) @@ -255,7 +257,7 @@ struct BattleResults u16 caughtMonSpecies; // 0x28 u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A u8 filler35; // 0x35 - u8 catchAttempts[11]; // 0x36 + u8 catchAttempts[POKEBALL_COUNT-1]; // 0x36 Doesn't include Master ball }; struct BattleTv_Side diff --git a/src/tv.c b/src/tv.c index 17af3edff4..b401de06f3 100644 --- a/src/tv.c +++ b/src/tv.c @@ -32,6 +32,7 @@ #include "decoration.h" #include "secret_base.h" #include "tv.h" +#include "pokeball.h" #include "data.h" #include "constants/battle_frontier.h" #include "constants/contest.h" @@ -963,7 +964,7 @@ void GabbyAndTyBeforeInterview(void) } if (!gBattleResults.usedMasterBall) { - for (i = 0; i < 11; i ++) + for (i = 0; i < POKEBALL_COUNT-1; i ++) { if (gBattleResults.catchAttempts[i]) { @@ -1135,7 +1136,7 @@ void PutPokemonTodayCaughtOnAir(void) sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows); if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_POKEMON_TODAY_CAUGHT, FALSE) != TRUE) { - for (i = 0; i < 11; i ++) + for (i = 0; i < POKEBALL_COUNT-1; i ++) { ct += gBattleResults.catchAttempts[i]; } @@ -1152,7 +1153,7 @@ void PutPokemonTodayCaughtOnAir(void) } else { - for (i = 0; i < 11; i ++) + for (i = 0; i < POKEBALL_COUNT-1; i ++) { ct += gBattleResults.catchAttempts[i]; } @@ -1203,7 +1204,7 @@ void PutPokemonTodayFailedOnTheAir(void) if (!rbernoulli(1, 1)) { - for (i = 0, ct = 0; i < 11; i ++) + for (i = 0, ct = 0; i < POKEBALL_COUNT-1; i ++) { ct += gBattleResults.catchAttempts[i]; } @@ -2228,7 +2229,7 @@ void sub_80EE184(void) show->breakingNews.kind = TVSHOW_BREAKING_NEWS; show->breakingNews.active = FALSE; balls = 0; - for (i = 0; i < 11; i ++) + for (i = 0; i < POKEBALL_COUNT-1; i ++) { balls += gBattleResults.catchAttempts[i]; } From e31158d017c71110d421864beee166d1facbebd9 Mon Sep 17 00:00:00 2001 From: MCboy Date: Fri, 6 Nov 2020 23:29:52 +0330 Subject: [PATCH 097/177] add spaces around - and remove comment from include in battle.h --- include/battle.h | 5 ++--- src/tv.c | 10 +++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/include/battle.h b/include/battle.h index a58f69cda7..820684a699 100644 --- a/include/battle.h +++ b/include/battle.h @@ -11,8 +11,7 @@ #include "battle_gfx_sfx_util.h" #include "battle_util2.h" #include "battle_bg.h" - -#include "pokeball.h" // i'm not sure about this one +#include "pokeball.h" #define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler]) #define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE) @@ -257,7 +256,7 @@ struct BattleResults u16 caughtMonSpecies; // 0x28 u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A u8 filler35; // 0x35 - u8 catchAttempts[POKEBALL_COUNT-1]; // 0x36 Doesn't include Master ball + u8 catchAttempts[POKEBALL_COUNT - 1]; // 0x36 Doesn't include Master ball }; struct BattleTv_Side diff --git a/src/tv.c b/src/tv.c index b401de06f3..748915c7a4 100644 --- a/src/tv.c +++ b/src/tv.c @@ -964,7 +964,7 @@ void GabbyAndTyBeforeInterview(void) } if (!gBattleResults.usedMasterBall) { - for (i = 0; i < POKEBALL_COUNT-1; i ++) + for (i = 0; i < POKEBALL_COUNT - 1; i ++) { if (gBattleResults.catchAttempts[i]) { @@ -1136,7 +1136,7 @@ void PutPokemonTodayCaughtOnAir(void) sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows); if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_POKEMON_TODAY_CAUGHT, FALSE) != TRUE) { - for (i = 0; i < POKEBALL_COUNT-1; i ++) + for (i = 0; i < POKEBALL_COUNT - 1; i ++) { ct += gBattleResults.catchAttempts[i]; } @@ -1153,7 +1153,7 @@ void PutPokemonTodayCaughtOnAir(void) } else { - for (i = 0; i < POKEBALL_COUNT-1; i ++) + for (i = 0; i < POKEBALL_COUNT - 1; i ++) { ct += gBattleResults.catchAttempts[i]; } @@ -1204,7 +1204,7 @@ void PutPokemonTodayFailedOnTheAir(void) if (!rbernoulli(1, 1)) { - for (i = 0, ct = 0; i < POKEBALL_COUNT-1; i ++) + for (i = 0, ct = 0; i < POKEBALL_COUNT - 1; i ++) { ct += gBattleResults.catchAttempts[i]; } @@ -2229,7 +2229,7 @@ void sub_80EE184(void) show->breakingNews.kind = TVSHOW_BREAKING_NEWS; show->breakingNews.active = FALSE; balls = 0; - for (i = 0; i < POKEBALL_COUNT-1; i ++) + for (i = 0; i < POKEBALL_COUNT - 1; i ++) { balls += gBattleResults.catchAttempts[i]; } From 4b748d32ccd7c35716ea7c1b3267b0b0ac53bca4 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Sat, 7 Nov 2020 18:21:17 -0500 Subject: [PATCH 098/177] Bugfix for ChooseMoveOrAction_Doubles. --- src/battle_ai_script_commands.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 4185f80177..2423cfe37e 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -450,7 +450,16 @@ static u8 ChooseMoveOrAction_Doubles(void) { s32 i; s32 j; +#ifndef BUGFIX s32 scriptsToRun; +#else + // the value assigned to this is a u32 (aiFlags) + // this becomes relevant because aiFlags can have bit 31 set + // and scriptsToRun is shifted + // this never happens in the vanilla game because bit 31 is + // only set when it's the first battle + u32 scriptsToRun; +#endif s16 bestMovePointsForTarget[MAX_BATTLERS_COUNT]; s8 mostViableTargetsArray[MAX_BATTLERS_COUNT]; u8 actionOrMoveIndex[MAX_BATTLERS_COUNT]; From 8a780977a8dd4b6990dc09aa4f5e7cb3782123c7 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Sun, 8 Nov 2020 20:13:21 -0500 Subject: [PATCH 099/177] Add missing files to .gitattributes. Only *.sed is required, all other files are listed to be explicit. --- .gitattributes | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.gitattributes b/.gitattributes index 4e8417c0c0..1f2aa0c6da 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,6 +10,14 @@ Makefile text eol=lf *.inc text eol=lf *.sha1 text eol=lf *.json text eol=lf +*.sed text eol=lf +*.cpp text eol=lf +.gitattributes text eol=lf +.gitignore text eol=lf +*.hpp text eol=lf +*.md text eol=lf +*.ps1 text eol=crlf +*.yml text eol=lf *.png binary *.bin binary From 5029c909797ec6a8b89124c76b3c6d34440d099d Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Thu, 12 Nov 2020 11:04:38 -0500 Subject: [PATCH 100/177] Missing inc files in asm/*.s and data/*.s will raise an actual error message. --- Makefile | 35 ++++++++++++++++++++++++----------- tools/scaninc/scaninc.cpp | 2 +- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 0035eb6267..1d16a7f294 100644 --- a/Makefile +++ b/Makefile @@ -136,6 +136,10 @@ C_ASM_OBJS := $(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o,$(C_ASM_SRCS)) ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS)) +# get all the data/*.s files EXCEPT the ones with specific rules +REGULAR_DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s) +REGULAR_DATA_ASM_SRCS := $(filter-out $(DATA_ASM_SUBDIR)/maps.s $(DATA_ASM_SUBDIR)/map_events.s, $(REGULAR_DATA_ASM_SRCS)) + DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s) DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS)) @@ -275,23 +279,32 @@ endif $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s $$(c_asm_dep) $(AS) $(ASFLAGS) -o $@ $< -ifeq ($(NODEP),1) -$(ASM_BUILDDIR)/%.o: asm_dep := -else -$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) -I "" $(ASM_SUBDIR)/$*.s) -endif +# The dep rules have to be explicit or else missing files won't be reported. +# As a side effect, they're evaluated immediately instead of when the rule is invoked. +# It doesn't look like $(shell) can be deferred so there might not be a better way. -$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep) + +ifeq ($(NODEP),1) +$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $(AS) $(ASFLAGS) -o $@ $< - -ifeq ($(NODEP),1) -$(DATA_ASM_BUILDDIR)/%.o: data_dep := else -$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) -I include -I "" $(DATA_ASM_SUBDIR)/$*.s) +define ASM_DEP +$1: $2 $$(shell $(SCANINC) -I include -I "" $2) + $$(AS) $$(ASFLAGS) -o $$@ $$< +endef +$(foreach src, $(ASM_SRCS), $(eval $(call ASM_DEP,$(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif -$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep) +ifeq ($(NODEP),1) +$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ +else +define DATA_ASM_DEP +$1: $2 $$(shell $(SCANINC) -I include -I "" $2) + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ +endef +$(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) +endif $(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s $(AS) $(ASFLAGS) -I sound -o $@ $< diff --git a/tools/scaninc/scaninc.cpp b/tools/scaninc/scaninc.cpp index a3e40c5d98..dcb16c0e79 100644 --- a/tools/scaninc/scaninc.cpp +++ b/tools/scaninc/scaninc.cpp @@ -108,7 +108,7 @@ int main(int argc, char **argv) break; } } - if (!exists && file.FileType() == SourceFileType::Asm) + if (!exists && (file.FileType() == SourceFileType::Asm || file.FileType() == SourceFileType::Inc)) { path = include; } From 3f157b5293b54466c5f4d54b600e9097163fc241 Mon Sep 17 00:00:00 2001 From: ExpoSeed <43502820+ExpoSeed@users.noreply.github.com> Date: Sun, 15 Nov 2020 16:24:19 -0600 Subject: [PATCH 101/177] Document bugged IV inheritance difference --- src/daycare.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/daycare.c b/src/daycare.c index a438c8e857..369fe14e82 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -548,7 +548,12 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) { // Randomly pick an IV from the available list and stop from being chosen again. selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)]; - RemoveIVIndexFromList(availableIVs, i); + // BUG: Instead of removing the IV that was just picked (like in RS and FRLG), this + // removes position 0 (HP) then position 1 (DEF), then position 2. This is why HP and DEF + // have a lower chance to be inherited in Emerald and why the IV picked for inheritance can + // be repeated. Uncomment the remove the existing expression to get the intended behavior and + // to match the other Gen 3 games. This bug was also in DP and never fixed until Platinum. + RemoveIVIndexFromList(availableIVs, i /*selectedIvs[i]*/); } // Determine which parent each of the selected IVs should inherit from. From e5f043ff72d7652f63ee574d9f0acf8f1a8ddbe7 Mon Sep 17 00:00:00 2001 From: ExpoSeed <43502820+ExpoSeed@users.noreply.github.com> Date: Sun, 15 Nov 2020 16:28:09 -0600 Subject: [PATCH 102/177] Fix grammar --- src/daycare.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/daycare.c b/src/daycare.c index 369fe14e82..fd6ed3a509 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -551,8 +551,8 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) // BUG: Instead of removing the IV that was just picked (like in RS and FRLG), this // removes position 0 (HP) then position 1 (DEF), then position 2. This is why HP and DEF // have a lower chance to be inherited in Emerald and why the IV picked for inheritance can - // be repeated. Uncomment the remove the existing expression to get the intended behavior and - // to match the other Gen 3 games. This bug was also in DP and never fixed until Platinum. + // be repeated. Uncomment the inline comment and remove the existing expression to get the + // intended behavior and to match the other Gen 3 games. RemoveIVIndexFromList(availableIVs, i /*selectedIvs[i]*/); } From cad5b57b42b400a7fee048a36a324947b0a12988 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 16 Nov 2020 15:36:38 -0300 Subject: [PATCH 103/177] sanityIsBagEgg -> sanityIsBadEgg Fixed a typo. Lunos#4026 --- src/pokemon_storage_system.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 6efca2562c..eb288c978c 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -6777,11 +6777,11 @@ static void SetCursorMonData(void *pokemon, u8 mode) { u8 *txtPtr; u16 gender; - bool8 sanityIsBagEgg; + bool8 sanityIsBadEgg; sPSSData->cursorMonItem = 0; gender = MON_MALE; - sanityIsBagEgg = FALSE; + sanityIsBadEgg = FALSE; if (mode == MODE_PARTY) { struct Pokemon *mon = (struct Pokemon *)pokemon; @@ -6789,8 +6789,8 @@ static void SetCursorMonData(void *pokemon, u8 mode) sPSSData->cursorMonSpecies = GetMonData(mon, MON_DATA_SPECIES2); if (sPSSData->cursorMonSpecies != SPECIES_NONE) { - sanityIsBagEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG); - if (sanityIsBagEgg) + sanityIsBadEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG); + if (sanityIsBadEgg) sPSSData->cursorMonIsEgg = TRUE; else sPSSData->cursorMonIsEgg = GetMonData(mon, MON_DATA_IS_EGG); @@ -6813,8 +6813,8 @@ static void SetCursorMonData(void *pokemon, u8 mode) if (sPSSData->cursorMonSpecies != SPECIES_NONE) { u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID); - sanityIsBagEgg = GetBoxMonData(boxMon, MON_DATA_SANITY_IS_BAD_EGG); - if (sanityIsBagEgg) + sanityIsBadEgg = GetBoxMonData(boxMon, MON_DATA_SANITY_IS_BAD_EGG); + if (sanityIsBadEgg) sPSSData->cursorMonIsEgg = TRUE; else sPSSData->cursorMonIsEgg = GetBoxMonData(boxMon, MON_DATA_IS_EGG); @@ -6846,7 +6846,7 @@ static void SetCursorMonData(void *pokemon, u8 mode) } else if (sPSSData->cursorMonIsEgg) { - if (sanityIsBagEgg) + if (sanityIsBadEgg) StringCopyPadded(sPSSData->cursorMonNickText, sPSSData->cursorMonNick, CHAR_SPACE, 5); else StringCopyPadded(sPSSData->cursorMonNickText, gText_EggNickname, CHAR_SPACE, 8); From 6f91f7e0e341ec410f0d231625cdb7aea1cb0359 Mon Sep 17 00:00:00 2001 From: kageru Date: Tue, 17 Nov 2020 17:21:34 +0100 Subject: [PATCH 104/177] Use more constants in Battle Tower code --- include/global.h | 3 ++- src/battle_tower.c | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/global.h b/include/global.h index 85166e0ecc..4ccd2be50a 100644 --- a/include/global.h +++ b/include/global.h @@ -328,11 +328,12 @@ struct BattleDomeTrainer }; #define DOME_TOURNAMENT_TRAINERS_COUNT 16 +#define BATTLE_TOWER_RECORD_COUNT 5 struct BattleFrontier { /*0x64C*/ struct EmeraldBattleTowerRecord towerPlayer; - /*0x738*/ struct EmeraldBattleTowerRecord towerRecords[5]; // From record mixing. + /*0x738*/ struct EmeraldBattleTowerRecord towerRecords[BATTLE_TOWER_RECORD_COUNT]; // From record mixing. /*0xBEB*/ struct BattleTowerInterview towerInterview; /*0xBEC*/ struct BattleTowerEReaderTrainer ereaderTrainer; /*0xCA8*/ u8 challengeStatus; diff --git a/src/battle_tower.c b/src/battle_tower.c index b7d03a5bca..6fc0cd5be7 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -999,7 +999,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void) return FALSE; winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode); - for (i = 0; i < 5; i++) + for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]); u32 recordHasData = 0; @@ -1010,7 +1010,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void) checksum += record[j]; } validMons = 0; - for (j = 0; j < 4; j++) + for (j = 0; j < MAX_FRONTIER_PARTY_SIZE; j++) { if (gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species != 0 && gSaveBlock2Ptr->frontier.towerRecords[i].party[j].level <= GetFrontierEnemyMonLevel(lvlMode)) @@ -1324,7 +1324,7 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) struct EmeraldBattleTowerRecord *newRecord = newRecordEm; // Needed to match. // Find a record slot of the same player and replace it. - for (i = 0; i < 5; i++) + for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { k = 0; for (j = 0; j < TRAINER_ID_LENGTH; j++) @@ -1350,19 +1350,19 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) if (k == PLAYER_NAME_LENGTH) break; } - if (i < 5) + if (i < BATTLE_TOWER_RECORD_COUNT) { gSaveBlock2Ptr->frontier.towerRecords[i] = *newRecord; return; } // Find an empty record slot. - for (i = 0; i < 5; i++) + for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { if (gSaveBlock2Ptr->frontier.towerRecords[i].winStreak == 0) break; } - if (i < 5) + if (i < BATTLE_TOWER_RECORD_COUNT) { gSaveBlock2Ptr->frontier.towerRecords[i] = *newRecord; return; @@ -1373,7 +1373,7 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) slotIds[0] = 0; slotsCount++; - for (i = 1; i < 5; i++) + for (i = 1; i < BATTLE_TOWER_RECORD_COUNT; i++) { for (j = 0; j < slotsCount; j++) { @@ -2240,7 +2240,7 @@ static void GetRecordMixFriendMultiPartnerParty(u16 trainerId) u16 species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL); count = 0; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) { if (gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].species != species1 && gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].species != species2 @@ -2362,7 +2362,7 @@ static void LoadMultiPartnerCandidatesData(void) } r10 = 0; - for (i = 0; i < 5; i++) + for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]); u32 recordHasData = 0; @@ -2379,7 +2379,7 @@ static void LoadMultiPartnerCandidatesData(void) && gSaveBlock2Ptr->frontier.towerRecords[i].checksum == checksum) { k = 0; - for (j = 0; j < 4; j++) + for (j = 0; j < MAX_FRONTIER_PARTY_SIZE; j++) { if (species1 != gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species && species2 != gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species @@ -2682,7 +2682,7 @@ static void ValidateBattleTowerRecordChecksums(void) if (gSaveBlock2Ptr->frontier.towerPlayer.checksum != checksum) ClearBattleTowerRecord(&gSaveBlock2Ptr->frontier.towerPlayer); - for (i = 0; i < 5; i++) + for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]); checksum = 0; From 68b53c743770ae34428b29a5eb988e3e58c82285 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 18 Nov 2020 20:53:42 -0500 Subject: [PATCH 105/177] Optimize Makefile, also add *.sna to gitignore. --- .gitignore | 1 + Makefile | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index ebf507247b..38c3e02d67 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,4 @@ porymap.project.cfg .vscode/ *.a .fuse_hidden* +*.sna diff --git a/Makefile b/Makefile index 1d16a7f294..cf569de805 100644 --- a/Makefile +++ b/Makefile @@ -137,8 +137,7 @@ ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS)) # get all the data/*.s files EXCEPT the ones with specific rules -REGULAR_DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s) -REGULAR_DATA_ASM_SRCS := $(filter-out $(DATA_ASM_SUBDIR)/maps.s $(DATA_ASM_SUBDIR)/map_events.s, $(REGULAR_DATA_ASM_SRCS)) +REGULAR_DATA_ASM_SRCS := $(filter-out $(DATA_ASM_SUBDIR)/maps.s $(DATA_ASM_SUBDIR)/map_events.s, $(wildcard $(DATA_ASM_SUBDIR)/*.s)) DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s) DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS)) @@ -301,6 +300,7 @@ $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s else define DATA_ASM_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) + #echo "hello" $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) From 70b6e05a47fc2e38d4f90cc2145f4d3d23a92793 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 18 Nov 2020 21:31:04 -0500 Subject: [PATCH 106/177] Remove useless comment. --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index cf569de805..07143e4ad4 100644 --- a/Makefile +++ b/Makefile @@ -300,7 +300,6 @@ $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s else define DATA_ASM_DEP $1: $2 $$(shell $(SCANINC) -I include -I "" $2) - #echo "hello" $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ endef $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) From bf65c1fb2505cad8c29ee4beceb1f41eab3151d2 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 23 Nov 2020 14:12:07 -0500 Subject: [PATCH 107/177] Name object event pals/tags --- .../{30.pal => birth_island_stone.pal} | 0 .../palettes/{08.pal => brendan.pal} | 0 .../{09.pal => brendan_reflection.pal} | 0 .../{10.pal => bridge_reflection.pal} | 0 .../palettes/{20.pal => cable_car.pal} | 0 .../palettes/{29.pal => deoxys.pal} | 0 .../palettes/{16.pal => enemy_zigzagoon.pal} | 0 .../palettes/{24.pal => groudon.pal} | 0 .../{25.pal => groudon_reflection.pal} | 0 .../palettes/{31.pal => ho_oh.pal} | 0 .../palettes/{22.pal => kyogre.pal} | 0 .../{23.pal => kyogre_reflection.pal} | 0 .../palettes/{32.pal => lugia.pal} | 0 .../palettes/{17.pal => may.pal} | 0 .../palettes/{18.pal => may_reflection.pal} | 0 .../palettes/{19.pal => moving_box.pal} | 0 .../palettes/{00.pal => npc_1.pal} | 0 .../palettes/{04.pal => npc_1_reflection.pal} | 0 .../palettes/{01.pal => npc_2.pal} | 0 .../palettes/{05.pal => npc_2_reflection.pal} | 0 .../palettes/{02.pal => npc_3.pal} | 0 .../palettes/{06.pal => npc_3_reflection.pal} | 0 .../palettes/{03.pal => npc_4.pal} | 0 .../palettes/{07.pal => npc_4_reflection.pal} | 0 .../{11.pal => player_underwater.pal} | 0 .../palettes/{27.pal => poochyena.pal} | 0 .../palettes/{12.pal => quinty_plump.pal} | 0 .../{13.pal => quinty_plump_reflection.pal} | 0 .../palettes/{28.pal => red_leaf.pal} | 0 .../{33.pal => ruby_sapphire_brendan.pal} | 0 .../{34.pal => ruby_sapphire_may.pal} | 0 .../palettes/{21.pal => ss_tidal.pal} | 0 .../palettes/{26.pal => submarine_shadow.pal} | 0 .../palettes/{14.pal => truck.pal} | 0 .../palettes/{15.pal => vigoroth.pal} | 0 include/global.fieldmap.h | 4 +- src/contest_util.c | 16 +- src/data/field_effects/field_effect_objects.h | 2 +- .../object_events/object_event_graphics.h | 128 ++--- .../object_event_graphics_info.h | 490 +++++++++--------- src/event_object_movement.c | 473 ++++++++--------- src/field_effect_helpers.c | 10 +- src/field_specials.c | 32 +- 43 files changed, 578 insertions(+), 577 deletions(-) rename graphics/object_events/palettes/{30.pal => birth_island_stone.pal} (100%) rename graphics/object_events/palettes/{08.pal => brendan.pal} (100%) rename graphics/object_events/palettes/{09.pal => brendan_reflection.pal} (100%) rename graphics/object_events/palettes/{10.pal => bridge_reflection.pal} (100%) rename graphics/object_events/palettes/{20.pal => cable_car.pal} (100%) rename graphics/object_events/palettes/{29.pal => deoxys.pal} (100%) rename graphics/object_events/palettes/{16.pal => enemy_zigzagoon.pal} (100%) rename graphics/object_events/palettes/{24.pal => groudon.pal} (100%) rename graphics/object_events/palettes/{25.pal => groudon_reflection.pal} (100%) rename graphics/object_events/palettes/{31.pal => ho_oh.pal} (100%) rename graphics/object_events/palettes/{22.pal => kyogre.pal} (100%) rename graphics/object_events/palettes/{23.pal => kyogre_reflection.pal} (100%) rename graphics/object_events/palettes/{32.pal => lugia.pal} (100%) rename graphics/object_events/palettes/{17.pal => may.pal} (100%) rename graphics/object_events/palettes/{18.pal => may_reflection.pal} (100%) rename graphics/object_events/palettes/{19.pal => moving_box.pal} (100%) rename graphics/object_events/palettes/{00.pal => npc_1.pal} (100%) rename graphics/object_events/palettes/{04.pal => npc_1_reflection.pal} (100%) rename graphics/object_events/palettes/{01.pal => npc_2.pal} (100%) rename graphics/object_events/palettes/{05.pal => npc_2_reflection.pal} (100%) rename graphics/object_events/palettes/{02.pal => npc_3.pal} (100%) rename graphics/object_events/palettes/{06.pal => npc_3_reflection.pal} (100%) rename graphics/object_events/palettes/{03.pal => npc_4.pal} (100%) rename graphics/object_events/palettes/{07.pal => npc_4_reflection.pal} (100%) rename graphics/object_events/palettes/{11.pal => player_underwater.pal} (100%) rename graphics/object_events/palettes/{27.pal => poochyena.pal} (100%) rename graphics/object_events/palettes/{12.pal => quinty_plump.pal} (100%) rename graphics/object_events/palettes/{13.pal => quinty_plump_reflection.pal} (100%) rename graphics/object_events/palettes/{28.pal => red_leaf.pal} (100%) rename graphics/object_events/palettes/{33.pal => ruby_sapphire_brendan.pal} (100%) rename graphics/object_events/palettes/{34.pal => ruby_sapphire_may.pal} (100%) rename graphics/object_events/palettes/{21.pal => ss_tidal.pal} (100%) rename graphics/object_events/palettes/{26.pal => submarine_shadow.pal} (100%) rename graphics/object_events/palettes/{14.pal => truck.pal} (100%) rename graphics/object_events/palettes/{15.pal => vigoroth.pal} (100%) diff --git a/graphics/object_events/palettes/30.pal b/graphics/object_events/palettes/birth_island_stone.pal similarity index 100% rename from graphics/object_events/palettes/30.pal rename to graphics/object_events/palettes/birth_island_stone.pal diff --git a/graphics/object_events/palettes/08.pal b/graphics/object_events/palettes/brendan.pal similarity index 100% rename from graphics/object_events/palettes/08.pal rename to graphics/object_events/palettes/brendan.pal diff --git a/graphics/object_events/palettes/09.pal b/graphics/object_events/palettes/brendan_reflection.pal similarity index 100% rename from graphics/object_events/palettes/09.pal rename to graphics/object_events/palettes/brendan_reflection.pal diff --git a/graphics/object_events/palettes/10.pal b/graphics/object_events/palettes/bridge_reflection.pal similarity index 100% rename from graphics/object_events/palettes/10.pal rename to graphics/object_events/palettes/bridge_reflection.pal diff --git a/graphics/object_events/palettes/20.pal b/graphics/object_events/palettes/cable_car.pal similarity index 100% rename from graphics/object_events/palettes/20.pal rename to graphics/object_events/palettes/cable_car.pal diff --git a/graphics/object_events/palettes/29.pal b/graphics/object_events/palettes/deoxys.pal similarity index 100% rename from graphics/object_events/palettes/29.pal rename to graphics/object_events/palettes/deoxys.pal diff --git a/graphics/object_events/palettes/16.pal b/graphics/object_events/palettes/enemy_zigzagoon.pal similarity index 100% rename from graphics/object_events/palettes/16.pal rename to graphics/object_events/palettes/enemy_zigzagoon.pal diff --git a/graphics/object_events/palettes/24.pal b/graphics/object_events/palettes/groudon.pal similarity index 100% rename from graphics/object_events/palettes/24.pal rename to graphics/object_events/palettes/groudon.pal diff --git a/graphics/object_events/palettes/25.pal b/graphics/object_events/palettes/groudon_reflection.pal similarity index 100% rename from graphics/object_events/palettes/25.pal rename to graphics/object_events/palettes/groudon_reflection.pal diff --git a/graphics/object_events/palettes/31.pal b/graphics/object_events/palettes/ho_oh.pal similarity index 100% rename from graphics/object_events/palettes/31.pal rename to graphics/object_events/palettes/ho_oh.pal diff --git a/graphics/object_events/palettes/22.pal b/graphics/object_events/palettes/kyogre.pal similarity index 100% rename from graphics/object_events/palettes/22.pal rename to graphics/object_events/palettes/kyogre.pal diff --git a/graphics/object_events/palettes/23.pal b/graphics/object_events/palettes/kyogre_reflection.pal similarity index 100% rename from graphics/object_events/palettes/23.pal rename to graphics/object_events/palettes/kyogre_reflection.pal diff --git a/graphics/object_events/palettes/32.pal b/graphics/object_events/palettes/lugia.pal similarity index 100% rename from graphics/object_events/palettes/32.pal rename to graphics/object_events/palettes/lugia.pal diff --git a/graphics/object_events/palettes/17.pal b/graphics/object_events/palettes/may.pal similarity index 100% rename from graphics/object_events/palettes/17.pal rename to graphics/object_events/palettes/may.pal diff --git a/graphics/object_events/palettes/18.pal b/graphics/object_events/palettes/may_reflection.pal similarity index 100% rename from graphics/object_events/palettes/18.pal rename to graphics/object_events/palettes/may_reflection.pal diff --git a/graphics/object_events/palettes/19.pal b/graphics/object_events/palettes/moving_box.pal similarity index 100% rename from graphics/object_events/palettes/19.pal rename to graphics/object_events/palettes/moving_box.pal diff --git a/graphics/object_events/palettes/00.pal b/graphics/object_events/palettes/npc_1.pal similarity index 100% rename from graphics/object_events/palettes/00.pal rename to graphics/object_events/palettes/npc_1.pal diff --git a/graphics/object_events/palettes/04.pal b/graphics/object_events/palettes/npc_1_reflection.pal similarity index 100% rename from graphics/object_events/palettes/04.pal rename to graphics/object_events/palettes/npc_1_reflection.pal diff --git a/graphics/object_events/palettes/01.pal b/graphics/object_events/palettes/npc_2.pal similarity index 100% rename from graphics/object_events/palettes/01.pal rename to graphics/object_events/palettes/npc_2.pal diff --git a/graphics/object_events/palettes/05.pal b/graphics/object_events/palettes/npc_2_reflection.pal similarity index 100% rename from graphics/object_events/palettes/05.pal rename to graphics/object_events/palettes/npc_2_reflection.pal diff --git a/graphics/object_events/palettes/02.pal b/graphics/object_events/palettes/npc_3.pal similarity index 100% rename from graphics/object_events/palettes/02.pal rename to graphics/object_events/palettes/npc_3.pal diff --git a/graphics/object_events/palettes/06.pal b/graphics/object_events/palettes/npc_3_reflection.pal similarity index 100% rename from graphics/object_events/palettes/06.pal rename to graphics/object_events/palettes/npc_3_reflection.pal diff --git a/graphics/object_events/palettes/03.pal b/graphics/object_events/palettes/npc_4.pal similarity index 100% rename from graphics/object_events/palettes/03.pal rename to graphics/object_events/palettes/npc_4.pal diff --git a/graphics/object_events/palettes/07.pal b/graphics/object_events/palettes/npc_4_reflection.pal similarity index 100% rename from graphics/object_events/palettes/07.pal rename to graphics/object_events/palettes/npc_4_reflection.pal diff --git a/graphics/object_events/palettes/11.pal b/graphics/object_events/palettes/player_underwater.pal similarity index 100% rename from graphics/object_events/palettes/11.pal rename to graphics/object_events/palettes/player_underwater.pal diff --git a/graphics/object_events/palettes/27.pal b/graphics/object_events/palettes/poochyena.pal similarity index 100% rename from graphics/object_events/palettes/27.pal rename to graphics/object_events/palettes/poochyena.pal diff --git a/graphics/object_events/palettes/12.pal b/graphics/object_events/palettes/quinty_plump.pal similarity index 100% rename from graphics/object_events/palettes/12.pal rename to graphics/object_events/palettes/quinty_plump.pal diff --git a/graphics/object_events/palettes/13.pal b/graphics/object_events/palettes/quinty_plump_reflection.pal similarity index 100% rename from graphics/object_events/palettes/13.pal rename to graphics/object_events/palettes/quinty_plump_reflection.pal diff --git a/graphics/object_events/palettes/28.pal b/graphics/object_events/palettes/red_leaf.pal similarity index 100% rename from graphics/object_events/palettes/28.pal rename to graphics/object_events/palettes/red_leaf.pal diff --git a/graphics/object_events/palettes/33.pal b/graphics/object_events/palettes/ruby_sapphire_brendan.pal similarity index 100% rename from graphics/object_events/palettes/33.pal rename to graphics/object_events/palettes/ruby_sapphire_brendan.pal diff --git a/graphics/object_events/palettes/34.pal b/graphics/object_events/palettes/ruby_sapphire_may.pal similarity index 100% rename from graphics/object_events/palettes/34.pal rename to graphics/object_events/palettes/ruby_sapphire_may.pal diff --git a/graphics/object_events/palettes/21.pal b/graphics/object_events/palettes/ss_tidal.pal similarity index 100% rename from graphics/object_events/palettes/21.pal rename to graphics/object_events/palettes/ss_tidal.pal diff --git a/graphics/object_events/palettes/26.pal b/graphics/object_events/palettes/submarine_shadow.pal similarity index 100% rename from graphics/object_events/palettes/26.pal rename to graphics/object_events/palettes/submarine_shadow.pal diff --git a/graphics/object_events/palettes/14.pal b/graphics/object_events/palettes/truck.pal similarity index 100% rename from graphics/object_events/palettes/14.pal rename to graphics/object_events/palettes/truck.pal diff --git a/graphics/object_events/palettes/15.pal b/graphics/object_events/palettes/vigoroth.pal similarity index 100% rename from graphics/object_events/palettes/15.pal rename to graphics/object_events/palettes/vigoroth.pal diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 4598e87faf..83123c8343 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -219,8 +219,8 @@ struct ObjectEvent struct ObjectEventGraphicsInfo { /*0x00*/ u16 tileTag; - /*0x02*/ u16 paletteTag1; - /*0x04*/ u16 paletteTag2; + /*0x02*/ u16 paletteTag; + /*0x04*/ u16 reflectionPaletteTag; /*0x06*/ u16 size; /*0x08*/ s16 width; /*0x0A*/ s16 height; diff --git a/src/contest_util.c b/src/contest_util.c index 21408c6735..9f95822923 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -166,10 +166,10 @@ static void SpriteCB_Confetti(struct Sprite *sprite); static void Task_ShowContestEntryMonPic(u8 taskId); static void Task_LinkContestWaitForConnection(u8 taskId); -extern const u16 gObjectEventPalette8[]; -extern const u16 gObjectEventPalette17[]; -extern const u16 gObjectEventPalette33[]; -extern const u16 gObjectEventPalette34[]; +extern const u16 gObjectEventPal_Brendan[]; +extern const u16 gObjectEventPal_May[]; +extern const u16 gObjectEventPal_RubySapphireBrendan[]; +extern const u16 gObjectEventPal_RubySapphireMay[]; static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal"); static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp"); @@ -2488,16 +2488,16 @@ void LoadLinkContestPlayerPalettes(void) if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) { if (gLinkPlayers[i].gender == MALE) - LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_RubySapphireBrendan, 0x160 + i * 0x10, 0x20); else - LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_RubySapphireMay, 0x160 + i * 0x10, 0x20); } else { if (gLinkPlayers[i].gender == MALE) - LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_Brendan, 0x160 + i * 0x10, 0x20); else - LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_May, 0x160 + i * 0x10, 0x20); } } } diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index 1626b9f323..4fc3ecff69 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -1286,4 +1286,4 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = { .callback = UpdateRayquazaSpotlightEffect, }; -static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPalette2, FLDEFF_PAL_TAG_UNKNOWN}; +static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPal_Npc3, FLDEFF_PAL_TAG_UNKNOWN}; diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 50fc6715c7..81d83a8563 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -1,26 +1,26 @@ const u32 gObjectEventPic_BrendanNormal[] = INCBIN_U32("graphics/object_events/pics/people/brendan/walking.4bpp"); const u32 gObjectEventPic_BrendanRunning[] = INCBIN_U32("graphics/object_events/pics/people/brendan/running.4bpp"); -const u16 gObjectEventPalette8[] = INCBIN_U16("graphics/object_events/palettes/08.gbapal"); +const u16 gObjectEventPal_Brendan[] = INCBIN_U16("graphics/object_events/palettes/brendan.gbapal"); const u32 gObjectEventPic_RubySapphireBrendanNormal[] = INCBIN_U32("graphics/object_events/pics/people/ruby_sapphire_brendan/walking.4bpp"); const u32 gObjectEventPic_RubySapphireBrendanRunning[] = INCBIN_U32("graphics/object_events/pics/people/ruby_sapphire_brendan/running.4bpp"); -const u16 gObjectEventPalette33[] = INCBIN_U16("graphics/object_events/palettes/33.gbapal"); -const u16 gObjectEventPaletteNull1[16] = {}; -const u16 gObjectEventPaletteNull2[16] = {}; -const u16 gObjectEventPaletteNull3[16] = {}; -const u16 gObjectEventPaletteNull4[16] = {}; -const u16 gObjectEventPaletteNull5[16] = {}; -const u16 gObjectEventPaletteNull6[16] = {}; -const u16 gObjectEventPaletteNull7[16] = {}; -const u16 gObjectEventPaletteNull8[16] = {}; -const u16 gObjectEventPaletteNull9[16] = {}; -const u16 gObjectEventPaletteNull10[16] = {}; -const u16 gObjectEventPaletteNull11[16] = {}; -const u16 gObjectEventPaletteNull12[16] = {}; -const u16 gObjectEventPaletteNull13[16] = {}; -const u16 gObjectEventPaletteNull14[16] = {}; -const u16 gObjectEventPaletteNull15[16] = {}; -const u16 gObjectEventPalette9[] = INCBIN_U16("graphics/object_events/palettes/09.gbapal"); -const u16 gObjectEventPalette10[] = INCBIN_U16("graphics/object_events/palettes/10.gbapal"); +const u16 gObjectEventPal_RubySapphireBrendan[] = INCBIN_U16("graphics/object_events/palettes/ruby_sapphire_brendan.gbapal"); +const u16 gObjectEventPal_Null1[16] = {}; +const u16 gObjectEventPal_Null2[16] = {}; +const u16 gObjectEventPal_Null3[16] = {}; +const u16 gObjectEventPal_Null4[16] = {}; +const u16 gObjectEventPal_Null5[16] = {}; +const u16 gObjectEventPal_Null6[16] = {}; +const u16 gObjectEventPal_Null7[16] = {}; +const u16 gObjectEventPal_Null8[16] = {}; +const u16 gObjectEventPal_Null9[16] = {}; +const u16 gObjectEventPal_Null10[16] = {}; +const u16 gObjectEventPal_Null11[16] = {}; +const u16 gObjectEventPal_Null12[16] = {}; +const u16 gObjectEventPal_Null13[16] = {}; +const u16 gObjectEventPal_Null14[16] = {}; +const u16 gObjectEventPal_Null15[16] = {}; +const u16 gObjectEventPal_BrendanReflection[] = INCBIN_U16("graphics/object_events/palettes/brendan_reflection.gbapal"); +const u16 gObjectEventPal_BridgeReflection[] = INCBIN_U16("graphics/object_events/palettes/bridge_reflection.gbapal"); const u32 gObjectEventPic_BrendanFieldMove[] = INCBIN_U32("graphics/object_events/pics/people/brendan/field_move.4bpp"); const u32 gObjectEventPic_BrendanSurfing[] = INCBIN_U32("graphics/object_events/pics/people/brendan/surfing.4bpp"); const u32 gObjectEventPic_BrendanMachBike[] = INCBIN_U32("graphics/object_events/pics/people/brendan/mach_bike.4bpp"); @@ -31,43 +31,43 @@ const u32 gObjectEventPic_BrendanDecorating[] = INCBIN_U32("graphics/object_even const u32 gObjectEventPic_MayDecorating[] = INCBIN_U32("graphics/object_events/pics/people/may/decorating.4bpp"); const u32 gObjectEventPic_BrendanUnderwater[] = INCBIN_U32("graphics/object_events/pics/people/brendan/underwater.4bpp"); const u32 gObjectEventPic_MayUnderwater[] = INCBIN_U32("graphics/object_events/pics/people/may/underwater.4bpp"); -const u16 gObjectEventPalette11[] = INCBIN_U16("graphics/object_events/palettes/11.gbapal"); +const u16 gObjectEventPal_PlayerUnderwater[] = INCBIN_U16("graphics/object_events/palettes/player_underwater.gbapal"); const u32 gObjectEventPic_MayNormal[] = INCBIN_U32("graphics/object_events/pics/people/may/walking.4bpp"); const u32 gObjectEventPic_MayRunning[] = INCBIN_U32("graphics/object_events/pics/people/may/running.4bpp"); -const u16 gObjectEventPalette17[] = INCBIN_U16("graphics/object_events/palettes/17.gbapal"); -const u16 gObjectEventPalette18[] = INCBIN_U16("graphics/object_events/palettes/18.gbapal"); +const u16 gObjectEventPal_May[] = INCBIN_U16("graphics/object_events/palettes/may.gbapal"); +const u16 gObjectEventPal_MayReflection[] = INCBIN_U16("graphics/object_events/palettes/may_reflection.gbapal"); const u32 gObjectEventPic_RubySapphireMayNormal[] = INCBIN_U32("graphics/object_events/pics/people/ruby_sapphire_may/walking.4bpp"); const u32 gObjectEventPic_RubySapphireMayRunning[] = INCBIN_U32("graphics/object_events/pics/people/ruby_sapphire_may/running.4bpp"); -const u16 gObjectEventPalette34[] = INCBIN_U16("graphics/object_events/palettes/34.gbapal"); +const u16 gObjectEventPal_RubySapphireMay[] = INCBIN_U16("graphics/object_events/palettes/ruby_sapphire_may.gbapal"); const u16 gUnusedObjectEventPalette[] = INCBIN_U16("graphics/object_events/palettes/unused_palette.gbapal"); -const u16 gObjectEventPaletteNull16[16] = {}; -const u16 gObjectEventPaletteNull17[16] = {}; -const u16 gObjectEventPaletteNull18[16] = {}; -const u16 gObjectEventPaletteNull19[16] = {}; -const u16 gObjectEventPaletteNull20[16] = {}; -const u16 gObjectEventPaletteNull21[16] = {}; -const u16 gObjectEventPaletteNull22[16] = {}; -const u16 gObjectEventPaletteNull23[16] = {}; -const u16 gObjectEventPaletteNull24[16] = {}; -const u16 gObjectEventPaletteNull25[16] = {}; -const u16 gObjectEventPaletteNull26[16] = {}; -const u16 gObjectEventPaletteNull27[16] = {}; -const u16 gObjectEventPaletteNull28[16] = {}; -const u16 gObjectEventPaletteNull29[16] = {}; +const u16 gObjectEventPal_Null16[16] = {}; +const u16 gObjectEventPal_Null17[16] = {}; +const u16 gObjectEventPal_Null18[16] = {}; +const u16 gObjectEventPal_Null19[16] = {}; +const u16 gObjectEventPal_Null20[16] = {}; +const u16 gObjectEventPal_Null21[16] = {}; +const u16 gObjectEventPal_Null22[16] = {}; +const u16 gObjectEventPal_Null23[16] = {}; +const u16 gObjectEventPal_Null24[16] = {}; +const u16 gObjectEventPal_Null25[16] = {}; +const u16 gObjectEventPal_Null26[16] = {}; +const u16 gObjectEventPal_Null27[16] = {}; +const u16 gObjectEventPal_Null28[16] = {}; +const u16 gObjectEventPal_Null29[16] = {}; const u32 gObjectEventPic_MayMachBike[] = INCBIN_U32("graphics/object_events/pics/people/may/mach_bike.4bpp"); const u32 gObjectEventPic_MayAcroBike[] = INCBIN_U32("graphics/object_events/pics/people/may/acro_bike.4bpp"); const u32 gObjectEventPic_MaySurfing[] = INCBIN_U32("graphics/object_events/pics/people/may/surfing.4bpp"); const u32 gObjectEventPic_MayFieldMove[] = INCBIN_U32("graphics/object_events/pics/people/may/field_move.4bpp"); const u32 gObjectEventPic_MayFishing[] = INCBIN_U32("graphics/object_events/pics/people/may/fishing.4bpp"); const u32 gObjectEventPic_MayWatering[] = INCBIN_U32("graphics/object_events/pics/people/may/watering.4bpp"); -const u16 gObjectEventPalette0[] = INCBIN_U16("graphics/object_events/palettes/00.gbapal"); -const u16 gObjectEventPalette1[] = INCBIN_U16("graphics/object_events/palettes/01.gbapal"); -const u16 gObjectEventPalette2[] = INCBIN_U16("graphics/object_events/palettes/02.gbapal"); -const u16 gObjectEventPalette3[] = INCBIN_U16("graphics/object_events/palettes/03.gbapal"); -const u16 gObjectEventPalette4[] = INCBIN_U16("graphics/object_events/palettes/04.gbapal"); -const u16 gObjectEventPalette5[] = INCBIN_U16("graphics/object_events/palettes/05.gbapal"); -const u16 gObjectEventPalette6[] = INCBIN_U16("graphics/object_events/palettes/06.gbapal"); -const u16 gObjectEventPalette7[] = INCBIN_U16("graphics/object_events/palettes/07.gbapal"); +const u16 gObjectEventPal_Npc1[] = INCBIN_U16("graphics/object_events/palettes/npc_1.gbapal"); +const u16 gObjectEventPal_Npc2[] = INCBIN_U16("graphics/object_events/palettes/npc_2.gbapal"); +const u16 gObjectEventPal_Npc3[] = INCBIN_U16("graphics/object_events/palettes/npc_3.gbapal"); +const u16 gObjectEventPal_Npc4[] = INCBIN_U16("graphics/object_events/palettes/npc_4.gbapal"); +const u16 gObjectEventPal_Npc1Reflection[] = INCBIN_U16("graphics/object_events/palettes/npc_1_reflection.gbapal"); +const u16 gObjectEventPal_Npc2Reflection[] = INCBIN_U16("graphics/object_events/palettes/npc_2_reflection.gbapal"); +const u16 gObjectEventPal_Npc3Reflection[] = INCBIN_U16("graphics/object_events/palettes/npc_3_reflection.gbapal"); +const u16 gObjectEventPal_Npc4Reflection[] = INCBIN_U16("graphics/object_events/palettes/npc_4_reflection.gbapal"); const u32 gObjectEventPic_NinjaBoy[] = INCBIN_U32("graphics/object_events/pics/people/ninja_boy.4bpp"); const u32 gObjectEventPic_Twin[] = INCBIN_U32("graphics/object_events/pics/people/twin.4bpp"); const u32 gObjectEventPic_Boy1[] = INCBIN_U32("graphics/object_events/pics/people/boy_1.4bpp"); @@ -177,10 +177,10 @@ const u32 gObjectEventPic_Wingull[] = INCBIN_U32("graphics/object_events/pics/po const u32 gObjectEventPic_TuberMSwimming[] = INCBIN_U32("graphics/object_events/pics/people/tuber_m_swimming.4bpp"); const u32 gObjectEventPic_Azurill[] = INCBIN_U32("graphics/object_events/pics/pokemon/azurill.4bpp"); const u32 gObjectEventPic_Mom[] = INCBIN_U32("graphics/object_events/pics/people/mom.4bpp"); -const u16 gObjectEventPalette22[] = INCBIN_U16("graphics/object_events/palettes/22.gbapal"); -const u16 gObjectEventPalette23[] = INCBIN_U16("graphics/object_events/palettes/23.gbapal"); -const u16 gObjectEventPalette24[] = INCBIN_U16("graphics/object_events/palettes/24.gbapal"); -const u16 gObjectEventPalette25[] = INCBIN_U16("graphics/object_events/palettes/25.gbapal"); +const u16 gObjectEventPal_Kyogre[] = INCBIN_U16("graphics/object_events/palettes/kyogre.gbapal"); +const u16 gObjectEventPal_KyogreReflection[] = INCBIN_U16("graphics/object_events/palettes/kyogre_reflection.gbapal"); +const u16 gObjectEventPal_Groudon[] = INCBIN_U16("graphics/object_events/palettes/groudon.gbapal"); +const u16 gObjectEventPal_GroudonReflection[] = INCBIN_U16("graphics/object_events/palettes/groudon_reflection.gbapal"); const u32 gObjectEventPic_UnusedNatuDoll[] = INCBIN_U32("graphics/object_events/pics/dolls/unused_natu_doll.4bpp"); const u32 gObjectEventPic_UnusedMagnemiteDoll[] = INCBIN_U32("graphics/object_events/pics/dolls/unused_magnemite_doll.4bpp"); const u32 gObjectEventPic_UnusedSquirtleDoll[] = INCBIN_U32("graphics/object_events/pics/dolls/unused_squirtle_doll.4bpp"); @@ -238,20 +238,20 @@ const u32 gObjectEventPic_PushableBoulder[] = INCBIN_U32("graphics/object_events const u32 gObjectEventPic_MrBrineysBoat[] = INCBIN_U32("graphics/object_events/pics/misc/mr_brineys_boat.4bpp"); const u32 gObjectEventPic_Fossil[] = INCBIN_U32("graphics/object_events/pics/misc/fossil.4bpp"); const u32 gObjectEventPic_SubmarineShadow[] = INCBIN_U32("graphics/object_events/pics/misc/submarine_shadow.4bpp"); -const u16 gObjectEventPalette26[] = INCBIN_U16("graphics/object_events/palettes/26.gbapal"); +const u16 gObjectEventPal_SubmarineShadow[] = INCBIN_U16("graphics/object_events/palettes/submarine_shadow.gbapal"); const u32 gObjectEventPic_Truck[] = INCBIN_U32("graphics/object_events/pics/misc/truck.4bpp"); -const u16 gObjectEventPalette14[] = INCBIN_U16("graphics/object_events/palettes/14.gbapal"); +const u16 gObjectEventPal_Truck[] = INCBIN_U16("graphics/object_events/palettes/truck.gbapal"); const u32 gObjectEventPic_Vigoroth[] = INCBIN_U32("graphics/object_events/pics/pokemon/vigoroth.4bpp"); -const u16 gObjectEventPalette15[] = INCBIN_U16("graphics/object_events/palettes/15.gbapal"); +const u16 gObjectEventPal_Vigoroth[] = INCBIN_U16("graphics/object_events/palettes/vigoroth.gbapal"); const u32 gObjectEventPic_BirchsBag[] = INCBIN_U32("graphics/object_events/pics/misc/birchs_bag.4bpp"); const u32 gObjectEventPic_EnemyZigzagoon[] = INCBIN_U32("graphics/object_events/pics/pokemon/enemy_zigzagoon.4bpp"); -const u16 gObjectEventPalette16[] = INCBIN_U16("graphics/object_events/palettes/16.gbapal"); +const u16 gObjectEventPal_EnemyZigzagoon[] = INCBIN_U16("graphics/object_events/palettes/enemy_zigzagoon.gbapal"); const u32 gObjectEventPic_Poochyena[] = INCBIN_U32("graphics/object_events/pics/pokemon/poochyena.4bpp"); -const u16 gObjectEventPalette27[] = INCBIN_U16("graphics/object_events/palettes/27.gbapal"); +const u16 gObjectEventPal_Poochyena[] = INCBIN_U16("graphics/object_events/palettes/poochyena.gbapal"); const u32 gObjectEventPic_CableCar[] = INCBIN_U32("graphics/object_events/pics/misc/cable_car.4bpp"); -const u16 gObjectEventPalette20[] = INCBIN_U16("graphics/object_events/palettes/20.gbapal"); +const u16 gObjectEventPal_CableCar[] = INCBIN_U16("graphics/object_events/palettes/cable_car.gbapal"); const u32 gObjectEventPic_SSTidal[] = INCBIN_U32("graphics/object_events/pics/misc/ss_tidal.4bpp"); -const u16 gObjectEventPalette21[] = INCBIN_U16("graphics/object_events/palettes/21.gbapal"); +const u16 gObjectEventPal_SSTidal[] = INCBIN_U16("graphics/object_events/palettes/ss_tidal.gbapal"); const u32 gFieldEffectObjectPic_Sparkle[] = INCBIN_U32("graphics/field_effects/pics/sparkle.4bpp"); const u32 gObjectEventPic_BerryTreeDirtPile[] = INCBIN_U32("graphics/object_events/pics/berry_trees/dirt_pile.4bpp"); const u32 gObjectEventPic_BerryTreeSprout[] = INCBIN_U32("graphics/object_events/pics/berry_trees/sprout.4bpp"); @@ -287,8 +287,8 @@ const u32 gObjectEventPic_DurinBerryTree[] = INCBIN_U32("graphics/object_events/ const u32 gObjectEventPic_TamatoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/tamato.4bpp"); const u32 gFieldEffectObjectPic_SurfBlob[] = INCBIN_U32("graphics/field_effects/pics/surf_blob.4bpp"); const u32 gObjectEventPic_QuintyPlump[] = INCBIN_U32("graphics/object_events/pics/people/quinty_plump.4bpp"); -const u16 gObjectEventPalette12[] = INCBIN_U16("graphics/object_events/palettes/12.gbapal"); -const u16 gObjectEventPalette13[] = INCBIN_U16("graphics/object_events/palettes/13.gbapal"); +const u16 gObjectEventPal_QuintyPlump[] = INCBIN_U16("graphics/object_events/palettes/quinty_plump.gbapal"); +const u16 gObjectEventPal_QuintyPlumpReflection[] = INCBIN_U16("graphics/object_events/palettes/quinty_plump_reflection.gbapal"); const u32 gFieldEffectObjectPic_ShadowSmall[] = INCBIN_U32("graphics/field_effects/pics/shadow_small.4bpp"); const u32 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effects/pics/shadow_medium.4bpp"); const u32 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_large.4bpp"); @@ -339,15 +339,15 @@ const u32 gObjectEventPic_Dusclops[] = INCBIN_U32("graphics/object_events/pics/p const u32 gObjectEventPic_MysteryEventDeliveryman[] = INCBIN_U32("graphics/object_events/pics/people/mystery_event_deliveryman.4bpp"); const u32 gObjectEventPic_UnionRoomAttendant[] = INCBIN_U32("graphics/object_events/pics/people/union_room_attendant.4bpp"); const u32 gObjectEventPic_MovingBox[] = INCBIN_U32("graphics/object_events/pics/misc/moving_box.4bpp"); -const u16 gObjectEventPalette19[] = INCBIN_U16("graphics/object_events/palettes/19.gbapal"); +const u16 gObjectEventPal_MovingBox[] = INCBIN_U16("graphics/object_events/palettes/moving_box.gbapal"); const u32 gObjectEventPic_Sudowoodo[] = INCBIN_U32("graphics/object_events/pics/pokemon/sudowoodo.4bpp"); const u32 gObjectEventPic_Mew[] = INCBIN_U32("graphics/object_events/pics/pokemon/mew.4bpp"); -const u16 gObjectEventPalette28[] = INCBIN_U16("graphics/object_events/palettes/28.gbapal"); +const u16 gObjectEventPal_RedLeaf[] = INCBIN_U16("graphics/object_events/palettes/red_leaf.gbapal"); const u32 gObjectEventPic_Red[] = INCBIN_U32("graphics/object_events/pics/people/red.4bpp"); const u32 gObjectEventPic_Leaf[] = INCBIN_U32("graphics/object_events/pics/people/leaf.4bpp"); -const u16 gObjectEventPalette30[] = INCBIN_U16("graphics/object_events/palettes/30.gbapal"); +const u16 gObjectEventPal_BirthIslandStone[] = INCBIN_U16("graphics/object_events/palettes/birth_island_stone.gbapal"); const u32 gObjectEventPic_BirthIslandStone[] = INCBIN_U32("graphics/object_events/pics/misc/birth_island_stone.4bpp"); -const u16 gObjectEventPalette29[] = INCBIN_U16("graphics/object_events/palettes/29.gbapal"); +const u16 gObjectEventPal_Deoxys[] = INCBIN_U16("graphics/object_events/palettes/deoxys.gbapal"); const u32 gObjectEventPic_Deoxys[] = INCBIN_U32("graphics/object_events/pics/pokemon/deoxys.4bpp"); const u32 gObjectEventPic_Anabel[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/anabel.4bpp"); const u32 gObjectEventPic_Tucker[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/tucker.4bpp"); @@ -357,6 +357,6 @@ const u32 gObjectEventPic_Noland[] = INCBIN_U32("graphics/object_events/pics/peo const u32 gObjectEventPic_Lucy[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/lucy.4bpp"); const u32 gObjectEventPic_Brandon[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/brandon.4bpp"); const u32 gObjectEventPic_Lugia[] = INCBIN_U32("graphics/object_events/pics/pokemon/lugia.4bpp"); -const u16 gObjectEventPalette32[] = INCBIN_U16("graphics/object_events/palettes/32.gbapal"); +const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal"); const u32 gObjectEventPic_HoOh[] = INCBIN_U32("graphics/object_events/pics/pokemon/ho_oh.4bpp"); -const u16 gObjectEventPalette31[] = INCBIN_U16("graphics/object_events/palettes/31.gbapal"); +const u16 gObjectEventPal_HoOh[] = INCBIN_U16("graphics/object_events/palettes/ho_oh.gbapal"); diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h index bb36c94366..7b0dc44cc4 100755 --- a/src/data/object_events/object_event_graphics_info.h +++ b/src/data/object_events/object_event_graphics_info.h @@ -1,245 +1,245 @@ -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanSurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_QuintyPlump = {0xFFFF, OBJ_EVENT_PAL_TAG_12, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_L, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_QuintyPlump, gObjectEventPicTable_QuintyPlump, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_NinjaBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_NinjaBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Twin = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Twin, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl1 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy2 = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl2 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LittleBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleGirl = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LittleGirl, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy3 = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl3 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RichBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RichBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman1 = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FatMan = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_FatMan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanF = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PokefanF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman2 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertM = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ExpertM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertF = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ExpertF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man2 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman3 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanM = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PokefanM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman4 = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman4, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cook = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Cook, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkReceptionist = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LinkReceptionist, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldMan = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_OldMan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_OldWoman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Camper = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Camper, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Picnicker = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Picnicker, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man3 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman5 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman5, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Youngster = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Youngster, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BugCatcher = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BugCatcher, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PsychicM = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PsychicM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SchoolKidM = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SchoolKidM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maniac = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Maniac, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HexManiac = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_HexManiac, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RayquazaStill, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerM = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SwimmerM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerF = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SwimmerF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BlackBelt = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BlackBelt, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Beauty = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Beauty, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scientist1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lass = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lass, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gentleman = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Gentleman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sailor = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sailor, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fisherman = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Fisherman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteM = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RunningTriathleteM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteF = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RunningTriathleteF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberF = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberM = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hiker = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Hiker, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteM = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_CyclingTriathleteM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteF = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_CyclingTriathleteF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nurse = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Nurse, gObjectEventPicTable_Nurse, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ItemBall = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ItemBall, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTree = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, NULL, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeEarlyStages = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeLateStages = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ProfBirch = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ProfBirch, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man4 = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man4, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man5 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man5, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterM = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ReporterM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterF = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ReporterF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Trader = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Storyteller = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Giddy = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan2 = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedNatuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedNatuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMagnemiteDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedMagnemiteDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedSquirtleDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedSquirtleDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedWooperDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedWooperDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPikachuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedPikachuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPorygon2Doll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedPorygon2Doll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CuttableTree = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_CuttableTree, gObjectEventPicTable_CuttableTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MartEmployee = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MartEmployee, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RooftopSaleWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RooftopSaleWoman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Teala = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Teala, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BreakableRock = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_BreakableRock, gObjectEventPicTable_BreakableRock, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PushableBoulder = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PushableBoulder, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MrBrineysBoat = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MrBrineysBoat, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MaySurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_MaySurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Truck = {0xFFFF, OBJ_EVENT_PAL_TAG_14, OBJ_EVENT_PAL_TAG_NONE, 1152, 48, 48, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_48x48, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Truck, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothCarryingBox = {0xFFFF, OBJ_EVENT_PAL_TAG_15, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_VigorothCarryingBox, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothFacingAway = {0xFFFF, OBJ_EVENT_PAL_TAG_15, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_VigorothFacingAway, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirchsBag = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BirchsBag, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_EnemyZigzagoon = {0xFFFF, OBJ_EVENT_PAL_TAG_16, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_EnemyZigzagoon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poochyena = {0xFFFF, OBJ_EVENT_PAL_TAG_27, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Poochyena, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Artist = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Artist, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanSurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMaySurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_MaySurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cameraman = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Cameraman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanUnderwater = {0xFFFF, OBJ_EVENT_PAL_TAG_11, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanUnderwater, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayUnderwater = {0xFFFF, OBJ_EVENT_PAL_TAG_11, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayUnderwater, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MovingBox = {0xFFFF, OBJ_EVENT_PAL_TAG_19, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 10, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MovingBox, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CableCar = {0xFFFF, OBJ_EVENT_PAL_TAG_20, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_CableCar, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist2 = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scientist2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DevonEmployee = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_DevonEmployee, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberM = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_AquaMemberM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberF = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_AquaMemberF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberM = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MagmaMemberM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberF = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MagmaMemberF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sidney = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sidney, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Phoebe = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Phoebe, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Glacia = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Glacia, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Drake = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Drake, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Roxanne = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Roxanne, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brawly = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Brawly, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wattson = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wattson, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Flannery = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Flannery, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Norman = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Norman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Winona = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Winona, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Liza = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Liza, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tate = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Tate, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wallace = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wallace, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Steven = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Steven, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wally = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wally, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireLittleBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireLittleBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFishing = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Fishing, gObjectEventPicTable_BrendanFishing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFishing = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Fishing, gObjectEventPicTable_MayFishing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HotSpringsOldWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_HotSpringsOldWoman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SSTidal = {0xFFFF, OBJ_EVENT_PAL_TAG_21, OBJ_EVENT_PAL_TAG_NONE, 1920, 96, 40, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, gObjectEventSpriteOamTables_96x40, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SSTidal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SubmarineShadow = {0xFFFF, OBJ_EVENT_PAL_TAG_26, OBJ_EVENT_PAL_TAG_NONE, 1408, 88, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, gObjectEventSpriteOamTables_88x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SubmarineShadow, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PichuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PichuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikachuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PikachuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MarillDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MarillDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TogepiDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TogepiDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyndaquilDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_CyndaquilDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ChikoritaDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ChikoritaDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TotodileDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TotodileDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_JigglypuffDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_JigglypuffDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MeowthDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MeowthDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ClefairyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ClefairyDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DittoDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DittoDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SmoochumDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SmoochumDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TreeckoDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TreeckoDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TorchicDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TorchicDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MudkipDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MudkipDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DuskullDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DuskullDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WynautDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_WynautDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BaltoyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BaltoyDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_KecleonDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AzurillDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_AzurillDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SkittyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SkittyDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwabluDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SwabluDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GulpinDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_GulpinDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LotadDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_LotadDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SeedotDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SeedotDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikaCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PikaCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RoundCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_RoundCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KissCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_KissCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ZigzagCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ZigzagCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SpinCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SpinCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DiamondCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DiamondCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BallCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BallCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GrassCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_GrassCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FireCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_FireCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WaterCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_WaterCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigSnorlaxDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigSnorlaxDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRhydonDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRhydonDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigLaprasDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigLaprasDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigVenusaurDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigVenusaurDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigCharizardDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigCharizardDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigBlastoiseDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigBlastoiseDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigWailmerDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigWailmerDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegirockDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegirockDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegiceDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegiceDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegisteelDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegisteelDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latias = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latios = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GameboyKid = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GameboyKid, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ContestJudge = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ContestJudge, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanWatering = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanWatering, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayWatering = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayWatering, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanDecorating = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BrendanDecorating, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayDecorating = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MayDecorating, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Archie = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Archie, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maxie = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Maxie, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre1 = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreFront, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GroudonFront, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre3 = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreSide, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon3 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Groudon3, gObjectEventPicTable_GroudonSide, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fossil = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Fossil, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regirock = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regice = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Registeel = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Skitty, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre2 = {0xFFFF, OBJ_EVENT_PAL_TAG_22, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreFront, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon2 = {0xFFFF, OBJ_EVENT_PAL_TAG_24, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GroudonFront, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza2 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Rayquaza2, gObjectEventPicTable_Rayquaza, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Zigzagoon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Pikachu, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Azumarill, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wingull, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon2 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_10, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberMSwimming, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Azurill, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Mom, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkBrendan = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkMay = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Juan = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Juan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scott = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scott, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MysteryEventDeliveryman = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MysteryEventDeliveryman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Statue = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Statue, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kirlia = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_S, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kirlia, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dusclops = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Dusclops, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnionRoomAttendant = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_UnionRoomAttendant, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Red = {0xFFFF, OBJ_EVENT_PAL_TAG_28, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Red, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Leaf = {0xFFFF, OBJ_EVENT_PAL_TAG_28, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Leaf, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sudowoodo = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sudowoodo, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mew = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Mew, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Deoxys = {0xFFFF, OBJ_EVENT_PAL_TAG_29, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Deoxys, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirthIslandStone = {0xFFFF, OBJ_EVENT_PAL_TAG_30, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BirthIslandStone, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Anabel = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Anabel, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tucker = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Tucker, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Greta = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Greta, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Spenser = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Spenser, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Noland = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Noland, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lucy = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lucy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brandon = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Brandon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireBrendan = {0xFFFF, OBJ_EVENT_PAL_TAG_33, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireBrendan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay = {0xFFFF, OBJ_EVENT_PAL_TAG_34, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireMay, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = {0xFFFF, OBJ_EVENT_PAL_TAG_32, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lugia, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = {0xFFFF, OBJ_EVENT_PAL_TAG_31, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_HoOh, gObjectEventPicTable_HoOh, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanSurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_QuintyPlump = {0xFFFF, OBJ_EVENT_PAL_TAG_QUINTY_PLUMP, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_L, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_QuintyPlump, gObjectEventPicTable_QuintyPlump, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_NinjaBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_NinjaBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Twin = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Twin, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LittleBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleGirl = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LittleGirl, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RichBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RichBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FatMan = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_FatMan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PokefanF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ExpertM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ExpertF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PokefanM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman4 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman4, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cook = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Cook, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkReceptionist = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LinkReceptionist, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldMan = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_OldMan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_OldWoman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Camper = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Camper, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Picnicker = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Picnicker, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman5 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman5, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Youngster = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Youngster, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BugCatcher = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BugCatcher, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PsychicM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PsychicM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SchoolKidM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SchoolKidM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maniac = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Maniac, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HexManiac = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_HexManiac, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RayquazaStill, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SwimmerM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SwimmerF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BlackBelt = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BlackBelt, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Beauty = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Beauty, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scientist1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lass = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lass, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gentleman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Gentleman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sailor = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sailor, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fisherman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Fisherman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RunningTriathleteM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RunningTriathleteF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hiker = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Hiker, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_CyclingTriathleteM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_CyclingTriathleteF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nurse = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Nurse, gObjectEventPicTable_Nurse, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ItemBall = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ItemBall, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTree = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, NULL, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeEarlyStages = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeLateStages = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ProfBirch = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ProfBirch, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man4 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man4, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man5 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man5, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ReporterM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ReporterF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Trader = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Storyteller = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Giddy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedNatuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedNatuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMagnemiteDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedMagnemiteDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedSquirtleDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedSquirtleDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedWooperDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedWooperDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPikachuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedPikachuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPorygon2Doll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedPorygon2Doll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CuttableTree = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_CuttableTree, gObjectEventPicTable_CuttableTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MartEmployee = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MartEmployee, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RooftopSaleWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RooftopSaleWoman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Teala = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Teala, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BreakableRock = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_BreakableRock, gObjectEventPicTable_BreakableRock, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PushableBoulder = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PushableBoulder, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MrBrineysBoat = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MrBrineysBoat, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MaySurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_MaySurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Truck = {0xFFFF, OBJ_EVENT_PAL_TAG_TRUCK, OBJ_EVENT_PAL_TAG_NONE, 1152, 48, 48, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_48x48, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Truck, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothCarryingBox = {0xFFFF, OBJ_EVENT_PAL_TAG_VIGOROTH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_VigorothCarryingBox, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothFacingAway = {0xFFFF, OBJ_EVENT_PAL_TAG_VIGOROTH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_VigorothFacingAway, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirchsBag = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BirchsBag, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_EnemyZigzagoon = {0xFFFF, OBJ_EVENT_PAL_TAG_ZIGZAGOON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_EnemyZigzagoon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poochyena = {0xFFFF, OBJ_EVENT_PAL_TAG_POOCHYENA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Poochyena, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Artist = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Artist, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanSurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMaySurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_MaySurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cameraman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Cameraman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanUnderwater = {0xFFFF, OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanUnderwater, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayUnderwater = {0xFFFF, OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayUnderwater, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MovingBox = {0xFFFF, OBJ_EVENT_PAL_TAG_MOVING_BOX, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 10, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MovingBox, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CableCar = {0xFFFF, OBJ_EVENT_PAL_TAG_CABLE_CAR, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_CableCar, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scientist2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DevonEmployee = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_DevonEmployee, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_AquaMemberM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_AquaMemberF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MagmaMemberM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MagmaMemberF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sidney = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sidney, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Phoebe = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Phoebe, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Glacia = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Glacia, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Drake = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Drake, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Roxanne = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Roxanne, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brawly = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Brawly, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wattson = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wattson, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Flannery = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Flannery, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Norman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Norman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Winona = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Winona, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Liza = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Liza, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tate = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Tate, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wallace = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wallace, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Steven = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Steven, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wally = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wally, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireLittleBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireLittleBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFishing = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Fishing, gObjectEventPicTable_BrendanFishing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFishing = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Fishing, gObjectEventPicTable_MayFishing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HotSpringsOldWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_HotSpringsOldWoman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SSTidal = {0xFFFF, OBJ_EVENT_PAL_TAG_SSTIDAL, OBJ_EVENT_PAL_TAG_NONE, 1920, 96, 40, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, gObjectEventSpriteOamTables_96x40, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SSTidal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SubmarineShadow = {0xFFFF, OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, OBJ_EVENT_PAL_TAG_NONE, 1408, 88, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, gObjectEventSpriteOamTables_88x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SubmarineShadow, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PichuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PichuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikachuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PikachuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MarillDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MarillDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TogepiDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TogepiDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyndaquilDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_CyndaquilDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ChikoritaDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ChikoritaDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TotodileDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TotodileDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_JigglypuffDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_JigglypuffDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MeowthDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MeowthDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ClefairyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ClefairyDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DittoDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DittoDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SmoochumDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SmoochumDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TreeckoDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TreeckoDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TorchicDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TorchicDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MudkipDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MudkipDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DuskullDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DuskullDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WynautDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_WynautDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BaltoyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BaltoyDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_KecleonDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AzurillDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_AzurillDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SkittyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SkittyDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwabluDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SwabluDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GulpinDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_GulpinDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LotadDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_LotadDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SeedotDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SeedotDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikaCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PikaCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RoundCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_RoundCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KissCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_KissCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ZigzagCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ZigzagCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SpinCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SpinCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DiamondCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DiamondCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BallCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BallCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GrassCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_GrassCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FireCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_FireCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WaterCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_WaterCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigSnorlaxDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigSnorlaxDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRhydonDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRhydonDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigLaprasDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigLaprasDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigVenusaurDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigVenusaurDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigCharizardDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigCharizardDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigBlastoiseDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigBlastoiseDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigWailmerDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigWailmerDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegirockDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegirockDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegiceDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegiceDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegisteelDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegisteelDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latias = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latios = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GameboyKid = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GameboyKid, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ContestJudge = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ContestJudge, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanWatering = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanWatering, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayWatering = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayWatering, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanDecorating = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BrendanDecorating, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayDecorating = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MayDecorating, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Archie = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Archie, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maxie = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Maxie, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreFront, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GroudonFront, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreSide, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Groudon3, gObjectEventPicTable_GroudonSide, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fossil = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Fossil, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regirock = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regice = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Registeel = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Skitty, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre2 = {0xFFFF, OBJ_EVENT_PAL_TAG_KYOGRE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreFront, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon2 = {0xFFFF, OBJ_EVENT_PAL_TAG_GROUDON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GroudonFront, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Rayquaza2, gObjectEventPicTable_Rayquaza, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Zigzagoon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Pikachu, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Azumarill, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wingull, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberMSwimming, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Azurill, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Mom, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkBrendan = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkMay = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Juan = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Juan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scott = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scott, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MysteryEventDeliveryman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MysteryEventDeliveryman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Statue = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Statue, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kirlia = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_S, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kirlia, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dusclops = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Dusclops, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnionRoomAttendant = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_UnionRoomAttendant, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Red = {0xFFFF, OBJ_EVENT_PAL_TAG_RED_LEAF, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Red, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Leaf = {0xFFFF, OBJ_EVENT_PAL_TAG_RED_LEAF, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Leaf, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sudowoodo = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sudowoodo, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mew = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Mew, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Deoxys = {0xFFFF, OBJ_EVENT_PAL_TAG_DEOXYS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Deoxys, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirthIslandStone = {0xFFFF, OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BirthIslandStone, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Anabel = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Anabel, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tucker = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Tucker, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Greta = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Greta, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Spenser = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Spenser, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Noland = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Noland, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lucy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lucy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brandon = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Brandon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireBrendan = {0xFFFF, OBJ_EVENT_PAL_TAG_RS_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireBrendan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay = {0xFFFF, OBJ_EVENT_PAL_TAG_RS_MAY, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireMay, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = {0xFFFF, OBJ_EVENT_PAL_TAG_LUGIA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lugia, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = {0xFFFF, OBJ_EVENT_PAL_TAG_HO_OH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_HoOh, gObjectEventPicTable_HoOh, gDummySpriteAffineAnimTable}; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 6d89adea65..c0f02acb25 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -401,42 +401,43 @@ const u8 gInitialMovementTypeFacingDirections[] = { [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = DIR_EAST, }; -#define OBJ_EVENT_PAL_TAG_0 0x1103 -#define OBJ_EVENT_PAL_TAG_1 0x1104 -#define OBJ_EVENT_PAL_TAG_2 0x1105 -#define OBJ_EVENT_PAL_TAG_3 0x1106 -#define OBJ_EVENT_PAL_TAG_4 0x1107 -#define OBJ_EVENT_PAL_TAG_5 0x1108 -#define OBJ_EVENT_PAL_TAG_6 0x1109 -#define OBJ_EVENT_PAL_TAG_7 0x110A -#define OBJ_EVENT_PAL_TAG_8 0x1100 -#define OBJ_EVENT_PAL_TAG_9 0x1101 -#define OBJ_EVENT_PAL_TAG_10 0x1102 -#define OBJ_EVENT_PAL_TAG_11 0x1115 -#define OBJ_EVENT_PAL_TAG_12 0x110B -#define OBJ_EVENT_PAL_TAG_13 0x110C -#define OBJ_EVENT_PAL_TAG_14 0x110D -#define OBJ_EVENT_PAL_TAG_15 0x110E -#define OBJ_EVENT_PAL_TAG_16 0x110F -#define OBJ_EVENT_PAL_TAG_17 0x1110 -#define OBJ_EVENT_PAL_TAG_18 0x1111 -#define OBJ_EVENT_PAL_TAG_19 0x1112 -#define OBJ_EVENT_PAL_TAG_20 0x1113 -#define OBJ_EVENT_PAL_TAG_21 0x1114 -#define OBJ_EVENT_PAL_TAG_22 0x1116 -#define OBJ_EVENT_PAL_TAG_23 0x1117 -#define OBJ_EVENT_PAL_TAG_24 0x1118 -#define OBJ_EVENT_PAL_TAG_25 0x1119 -#define OBJ_EVENT_PAL_TAG_26 0x111B -#define OBJ_EVENT_PAL_TAG_27 0x111C -#define OBJ_EVENT_PAL_TAG_28 0x111D -#define OBJ_EVENT_PAL_TAG_29 0x111E -#define OBJ_EVENT_PAL_TAG_30 0x111F -#define OBJ_EVENT_PAL_TAG_31 0x1120 -#define OBJ_EVENT_PAL_TAG_32 0x1121 -#define OBJ_EVENT_PAL_TAG_33 0x1122 -#define OBJ_EVENT_PAL_TAG_34 0x1123 -#define OBJ_EVENT_PAL_TAG_NONE 0x11FF +#define OBJ_EVENT_PAL_TAG_BRENDAN 0x1100 +#define OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION 0x1101 +#define OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION 0x1102 +#define OBJ_EVENT_PAL_TAG_NPC_1 0x1103 +#define OBJ_EVENT_PAL_TAG_NPC_2 0x1104 +#define OBJ_EVENT_PAL_TAG_NPC_3 0x1105 +#define OBJ_EVENT_PAL_TAG_NPC_4 0x1106 +#define OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION 0x1107 +#define OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION 0x1108 +#define OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION 0x1109 +#define OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION 0x110A +#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP 0x110B +#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION 0x110C +#define OBJ_EVENT_PAL_TAG_TRUCK 0x110D +#define OBJ_EVENT_PAL_TAG_VIGOROTH 0x110E +#define OBJ_EVENT_PAL_TAG_ZIGZAGOON 0x110F +#define OBJ_EVENT_PAL_TAG_MAY 0x1110 +#define OBJ_EVENT_PAL_TAG_MAY_REFLECTION 0x1111 +#define OBJ_EVENT_PAL_TAG_MOVING_BOX 0x1112 +#define OBJ_EVENT_PAL_TAG_CABLE_CAR 0x1113 +#define OBJ_EVENT_PAL_TAG_SSTIDAL 0x1114 +#define OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER 0x1115 +#define OBJ_EVENT_PAL_TAG_KYOGRE 0x1116 +#define OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION 0x1117 +#define OBJ_EVENT_PAL_TAG_GROUDON 0x1118 +#define OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION 0x1119 +#define OBJ_EVENT_PAL_TAG_UNUSED 0x111A +#define OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW 0x111B +#define OBJ_EVENT_PAL_TAG_POOCHYENA 0x111C +#define OBJ_EVENT_PAL_TAG_RED_LEAF 0x111D +#define OBJ_EVENT_PAL_TAG_DEOXYS 0x111E +#define OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE 0x111F +#define OBJ_EVENT_PAL_TAG_HO_OH 0x1120 +#define OBJ_EVENT_PAL_TAG_LUGIA 0x1121 +#define OBJ_EVENT_PAL_TAG_RS_BRENDAN 0x1122 +#define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123 +#define OBJ_EVENT_PAL_TAG_NONE 0x11FF #include "data/object_events/object_event_graphics_info_pointers.h" #include "data/field_effects/field_effect_object_template_pointers.h" @@ -446,224 +447,224 @@ const u8 gInitialMovementTypeFacingDirections[] = { #include "data/object_events/object_event_subsprites.h" #include "data/object_events/object_event_graphics_info.h" -const struct SpritePalette sObjectEventSpritePalettes[] = { - {gObjectEventPalette0, OBJ_EVENT_PAL_TAG_0}, - {gObjectEventPalette1, OBJ_EVENT_PAL_TAG_1}, - {gObjectEventPalette2, OBJ_EVENT_PAL_TAG_2}, - {gObjectEventPalette3, OBJ_EVENT_PAL_TAG_3}, - {gObjectEventPalette4, OBJ_EVENT_PAL_TAG_4}, - {gObjectEventPalette5, OBJ_EVENT_PAL_TAG_5}, - {gObjectEventPalette6, OBJ_EVENT_PAL_TAG_6}, - {gObjectEventPalette7, OBJ_EVENT_PAL_TAG_7}, - {gObjectEventPalette8, OBJ_EVENT_PAL_TAG_8}, - {gObjectEventPalette9, OBJ_EVENT_PAL_TAG_9}, - {gObjectEventPalette10, OBJ_EVENT_PAL_TAG_10}, - {gObjectEventPalette11, OBJ_EVENT_PAL_TAG_11}, - {gObjectEventPalette12, OBJ_EVENT_PAL_TAG_12}, - {gObjectEventPalette13, OBJ_EVENT_PAL_TAG_13}, - {gObjectEventPalette14, OBJ_EVENT_PAL_TAG_14}, - {gObjectEventPalette15, OBJ_EVENT_PAL_TAG_15}, - {gObjectEventPalette16, OBJ_EVENT_PAL_TAG_16}, - {gObjectEventPalette17, OBJ_EVENT_PAL_TAG_17}, - {gObjectEventPalette18, OBJ_EVENT_PAL_TAG_18}, - {gObjectEventPalette19, OBJ_EVENT_PAL_TAG_19}, - {gObjectEventPalette20, OBJ_EVENT_PAL_TAG_20}, - {gObjectEventPalette21, OBJ_EVENT_PAL_TAG_21}, - {gObjectEventPalette22, OBJ_EVENT_PAL_TAG_22}, - {gObjectEventPalette23, OBJ_EVENT_PAL_TAG_23}, - {gObjectEventPalette24, OBJ_EVENT_PAL_TAG_24}, - {gObjectEventPalette25, OBJ_EVENT_PAL_TAG_25}, - {gObjectEventPalette26, OBJ_EVENT_PAL_TAG_26}, - {gObjectEventPalette27, OBJ_EVENT_PAL_TAG_27}, - {gObjectEventPalette28, OBJ_EVENT_PAL_TAG_28}, - {gObjectEventPalette29, OBJ_EVENT_PAL_TAG_29}, - {gObjectEventPalette30, OBJ_EVENT_PAL_TAG_30}, - {gObjectEventPalette31, OBJ_EVENT_PAL_TAG_31}, - {gObjectEventPalette32, OBJ_EVENT_PAL_TAG_32}, - {gObjectEventPalette33, OBJ_EVENT_PAL_TAG_33}, - {gObjectEventPalette34, OBJ_EVENT_PAL_TAG_34}, - {NULL, 0x0000}, +static const struct SpritePalette sObjectEventSpritePalettes[] = { + {gObjectEventPal_Npc1, OBJ_EVENT_PAL_TAG_NPC_1}, + {gObjectEventPal_Npc2, OBJ_EVENT_PAL_TAG_NPC_2}, + {gObjectEventPal_Npc3, OBJ_EVENT_PAL_TAG_NPC_3}, + {gObjectEventPal_Npc4, OBJ_EVENT_PAL_TAG_NPC_4}, + {gObjectEventPal_Npc1Reflection, OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION}, + {gObjectEventPal_Npc2Reflection, OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION}, + {gObjectEventPal_Npc3Reflection, OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION}, + {gObjectEventPal_Npc4Reflection, OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION}, + {gObjectEventPal_Brendan, OBJ_EVENT_PAL_TAG_BRENDAN}, + {gObjectEventPal_BrendanReflection, OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION}, + {gObjectEventPal_BridgeReflection, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION}, + {gObjectEventPal_PlayerUnderwater, OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER}, + {gObjectEventPal_QuintyPlump, OBJ_EVENT_PAL_TAG_QUINTY_PLUMP}, + {gObjectEventPal_QuintyPlumpReflection, OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION}, + {gObjectEventPal_Truck, OBJ_EVENT_PAL_TAG_TRUCK}, + {gObjectEventPal_Vigoroth, OBJ_EVENT_PAL_TAG_VIGOROTH}, + {gObjectEventPal_EnemyZigzagoon, OBJ_EVENT_PAL_TAG_ZIGZAGOON}, + {gObjectEventPal_May, OBJ_EVENT_PAL_TAG_MAY}, + {gObjectEventPal_MayReflection, OBJ_EVENT_PAL_TAG_MAY_REFLECTION}, + {gObjectEventPal_MovingBox, OBJ_EVENT_PAL_TAG_MOVING_BOX}, + {gObjectEventPal_CableCar, OBJ_EVENT_PAL_TAG_CABLE_CAR}, + {gObjectEventPal_SSTidal, OBJ_EVENT_PAL_TAG_SSTIDAL}, + {gObjectEventPal_Kyogre, OBJ_EVENT_PAL_TAG_KYOGRE}, + {gObjectEventPal_KyogreReflection, OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION}, + {gObjectEventPal_Groudon, OBJ_EVENT_PAL_TAG_GROUDON}, + {gObjectEventPal_GroudonReflection, OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION}, + {gObjectEventPal_SubmarineShadow, OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW}, + {gObjectEventPal_Poochyena, OBJ_EVENT_PAL_TAG_POOCHYENA}, + {gObjectEventPal_RedLeaf, OBJ_EVENT_PAL_TAG_RED_LEAF}, + {gObjectEventPal_Deoxys, OBJ_EVENT_PAL_TAG_DEOXYS}, + {gObjectEventPal_BirthIslandStone, OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE}, + {gObjectEventPal_HoOh, OBJ_EVENT_PAL_TAG_HO_OH}, + {gObjectEventPal_Lugia, OBJ_EVENT_PAL_TAG_LUGIA}, + {gObjectEventPal_RubySapphireBrendan, OBJ_EVENT_PAL_TAG_RS_BRENDAN}, + {gObjectEventPal_RubySapphireMay, OBJ_EVENT_PAL_TAG_RS_MAY}, + {NULL, 0x0000}, }; -const u16 gPlayerReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_9, +static const u16 sReflectionPaletteTags_Brendan[] = { + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, }; -const u16 Unknown_0850BCF0[] = { - OBJ_EVENT_PAL_TAG_18, - OBJ_EVENT_PAL_TAG_18, - OBJ_EVENT_PAL_TAG_18, - OBJ_EVENT_PAL_TAG_18, +static const u16 sReflectionPaletteTags_May[] = { + OBJ_EVENT_PAL_TAG_MAY_REFLECTION, + OBJ_EVENT_PAL_TAG_MAY_REFLECTION, + OBJ_EVENT_PAL_TAG_MAY_REFLECTION, + OBJ_EVENT_PAL_TAG_MAY_REFLECTION, }; -const u16 gPlayerUnderwaterReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_11, - OBJ_EVENT_PAL_TAG_11, - OBJ_EVENT_PAL_TAG_11, - OBJ_EVENT_PAL_TAG_11, +static const u16 sReflectionPaletteTags_PlayerUnderwater[] = { + OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, + OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, + OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, + OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, }; -const struct PairedPalettes gPlayerReflectionPaletteSets[] = { - {OBJ_EVENT_PAL_TAG_8, gPlayerReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_17, Unknown_0850BCF0}, - {OBJ_EVENT_PAL_TAG_11, gPlayerUnderwaterReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_NONE, NULL}, +static const struct PairedPalettes sPlayerReflectionPaletteSets[] = { + {OBJ_EVENT_PAL_TAG_BRENDAN, sReflectionPaletteTags_Brendan}, + {OBJ_EVENT_PAL_TAG_MAY, sReflectionPaletteTags_May}, + {OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, sReflectionPaletteTags_PlayerUnderwater}, + {OBJ_EVENT_PAL_TAG_NONE, NULL}, }; -const u16 gQuintyPlumpReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_13, - OBJ_EVENT_PAL_TAG_13, - OBJ_EVENT_PAL_TAG_13, - OBJ_EVENT_PAL_TAG_13, +static const u16 sReflectionPaletteTags_QuintyPlump[] = { + OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION, + OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION, + OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION, + OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION, }; -const u16 gTruckReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_14, - OBJ_EVENT_PAL_TAG_14, - OBJ_EVENT_PAL_TAG_14, - OBJ_EVENT_PAL_TAG_14, +static const u16 sReflectionPaletteTags_Truck[] = { + OBJ_EVENT_PAL_TAG_TRUCK, + OBJ_EVENT_PAL_TAG_TRUCK, + OBJ_EVENT_PAL_TAG_TRUCK, + OBJ_EVENT_PAL_TAG_TRUCK, }; -const u16 gVigorothMoverReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_15, - OBJ_EVENT_PAL_TAG_15, - OBJ_EVENT_PAL_TAG_15, - OBJ_EVENT_PAL_TAG_15, +static const u16 sReflectionPaletteTags_VigorothMover[] = { + OBJ_EVENT_PAL_TAG_VIGOROTH, + OBJ_EVENT_PAL_TAG_VIGOROTH, + OBJ_EVENT_PAL_TAG_VIGOROTH, + OBJ_EVENT_PAL_TAG_VIGOROTH, }; -const u16 gMovingBoxReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_19, - OBJ_EVENT_PAL_TAG_19, - OBJ_EVENT_PAL_TAG_19, - OBJ_EVENT_PAL_TAG_19, +static const u16 sReflectionPaletteTags_MovingBox[] = { + OBJ_EVENT_PAL_TAG_MOVING_BOX, + OBJ_EVENT_PAL_TAG_MOVING_BOX, + OBJ_EVENT_PAL_TAG_MOVING_BOX, + OBJ_EVENT_PAL_TAG_MOVING_BOX, }; -const u16 gCableCarReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_20, - OBJ_EVENT_PAL_TAG_20, - OBJ_EVENT_PAL_TAG_20, - OBJ_EVENT_PAL_TAG_20, +static const u16 sReflectionPaletteTags_CableCar[] = { + OBJ_EVENT_PAL_TAG_CABLE_CAR, + OBJ_EVENT_PAL_TAG_CABLE_CAR, + OBJ_EVENT_PAL_TAG_CABLE_CAR, + OBJ_EVENT_PAL_TAG_CABLE_CAR, }; -const u16 gSSTidalReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_21, - OBJ_EVENT_PAL_TAG_21, - OBJ_EVENT_PAL_TAG_21, - OBJ_EVENT_PAL_TAG_21, +static const u16 sReflectionPaletteTags_SSTidal[] = { + OBJ_EVENT_PAL_TAG_SSTIDAL, + OBJ_EVENT_PAL_TAG_SSTIDAL, + OBJ_EVENT_PAL_TAG_SSTIDAL, + OBJ_EVENT_PAL_TAG_SSTIDAL, }; -const u16 gSubmarineShadowReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_26, - OBJ_EVENT_PAL_TAG_26, - OBJ_EVENT_PAL_TAG_26, - OBJ_EVENT_PAL_TAG_26, +static const u16 sReflectionPaletteTags_SubmarineShadow[] = { + OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, + OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, + OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, + OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, }; -const u16 Unknown_0850BD58[] = { // Kyogre2? - OBJ_EVENT_PAL_TAG_23, - OBJ_EVENT_PAL_TAG_23, - OBJ_EVENT_PAL_TAG_23, - OBJ_EVENT_PAL_TAG_23, +static const u16 sReflectionPaletteTags_Kyogre[] = { + OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION, + OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION, + OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION, + OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION, }; -const u16 Unknown_0850BD60[] = { // Groudon2? - OBJ_EVENT_PAL_TAG_25, - OBJ_EVENT_PAL_TAG_25, - OBJ_EVENT_PAL_TAG_25, - OBJ_EVENT_PAL_TAG_25, +static const u16 sReflectionPaletteTags_Groudon[] = { + OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION, + OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION, + OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION, + OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION, }; -const u16 Unknown_0850BD68[] = { // Invisible Keckleon? - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_6, +static const u16 sReflectionPaletteTags_Npc3[] = { // Only used by the Route 120 bridge Kecleon + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, }; -const u16 gRedLeafReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_28, - OBJ_EVENT_PAL_TAG_28, - OBJ_EVENT_PAL_TAG_28, - OBJ_EVENT_PAL_TAG_28, +static const u16 sReflectionPaletteTags_RedLeaf[] = { + OBJ_EVENT_PAL_TAG_RED_LEAF, + OBJ_EVENT_PAL_TAG_RED_LEAF, + OBJ_EVENT_PAL_TAG_RED_LEAF, + OBJ_EVENT_PAL_TAG_RED_LEAF, }; -const struct PairedPalettes gSpecialObjectReflectionPaletteSets[] = { - {OBJ_EVENT_PAL_TAG_8, gPlayerReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_17, Unknown_0850BCF0}, - {OBJ_EVENT_PAL_TAG_12, gQuintyPlumpReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_14, gTruckReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_15, gVigorothMoverReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_19, gMovingBoxReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_20, gCableCarReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_21, gSSTidalReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_22, Unknown_0850BD58}, - {OBJ_EVENT_PAL_TAG_24, Unknown_0850BD60}, - {OBJ_EVENT_PAL_TAG_2, Unknown_0850BD68}, - {OBJ_EVENT_PAL_TAG_26, gSubmarineShadowReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_28, gRedLeafReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_NONE, NULL}, +static const struct PairedPalettes sSpecialObjectReflectionPaletteSets[] = { + {OBJ_EVENT_PAL_TAG_BRENDAN, sReflectionPaletteTags_Brendan}, + {OBJ_EVENT_PAL_TAG_MAY, sReflectionPaletteTags_May}, + {OBJ_EVENT_PAL_TAG_QUINTY_PLUMP, sReflectionPaletteTags_QuintyPlump}, + {OBJ_EVENT_PAL_TAG_TRUCK, sReflectionPaletteTags_Truck}, + {OBJ_EVENT_PAL_TAG_VIGOROTH, sReflectionPaletteTags_VigorothMover}, + {OBJ_EVENT_PAL_TAG_MOVING_BOX, sReflectionPaletteTags_MovingBox}, + {OBJ_EVENT_PAL_TAG_CABLE_CAR, sReflectionPaletteTags_CableCar}, + {OBJ_EVENT_PAL_TAG_SSTIDAL, sReflectionPaletteTags_SSTidal}, + {OBJ_EVENT_PAL_TAG_KYOGRE, sReflectionPaletteTags_Kyogre}, + {OBJ_EVENT_PAL_TAG_GROUDON, sReflectionPaletteTags_Groudon}, + {OBJ_EVENT_PAL_TAG_NPC_3, sReflectionPaletteTags_Npc3}, + {OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, sReflectionPaletteTags_SubmarineShadow}, + {OBJ_EVENT_PAL_TAG_RED_LEAF, sReflectionPaletteTags_RedLeaf}, + {OBJ_EVENT_PAL_TAG_NONE, NULL}, }; -const u16 gObjectPaletteTags0[] = { - OBJ_EVENT_PAL_TAG_8, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_0, - OBJ_EVENT_PAL_TAG_1, - OBJ_EVENT_PAL_TAG_2, - OBJ_EVENT_PAL_TAG_3, - OBJ_EVENT_PAL_TAG_4, - OBJ_EVENT_PAL_TAG_5, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_7, +static const u16 sObjectPaletteTags0[] = { + OBJ_EVENT_PAL_TAG_BRENDAN, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_1, + OBJ_EVENT_PAL_TAG_NPC_2, + OBJ_EVENT_PAL_TAG_NPC_3, + OBJ_EVENT_PAL_TAG_NPC_4, + OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION, }; -const u16 gObjectPaletteTags1[] = { - OBJ_EVENT_PAL_TAG_8, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_0, - OBJ_EVENT_PAL_TAG_1, - OBJ_EVENT_PAL_TAG_2, - OBJ_EVENT_PAL_TAG_3, - OBJ_EVENT_PAL_TAG_4, - OBJ_EVENT_PAL_TAG_5, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_7, +static const u16 sObjectPaletteTags1[] = { + OBJ_EVENT_PAL_TAG_BRENDAN, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_1, + OBJ_EVENT_PAL_TAG_NPC_2, + OBJ_EVENT_PAL_TAG_NPC_3, + OBJ_EVENT_PAL_TAG_NPC_4, + OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION, }; -const u16 gObjectPaletteTags2[] = { - OBJ_EVENT_PAL_TAG_8, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_0, - OBJ_EVENT_PAL_TAG_1, - OBJ_EVENT_PAL_TAG_2, - OBJ_EVENT_PAL_TAG_3, - OBJ_EVENT_PAL_TAG_4, - OBJ_EVENT_PAL_TAG_5, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_7, +static const u16 sObjectPaletteTags2[] = { + OBJ_EVENT_PAL_TAG_BRENDAN, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_1, + OBJ_EVENT_PAL_TAG_NPC_2, + OBJ_EVENT_PAL_TAG_NPC_3, + OBJ_EVENT_PAL_TAG_NPC_4, + OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION, }; -const u16 gObjectPaletteTags3[] = { - OBJ_EVENT_PAL_TAG_8, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_0, - OBJ_EVENT_PAL_TAG_1, - OBJ_EVENT_PAL_TAG_2, - OBJ_EVENT_PAL_TAG_3, - OBJ_EVENT_PAL_TAG_4, - OBJ_EVENT_PAL_TAG_5, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_7, +static const u16 sObjectPaletteTags3[] = { + OBJ_EVENT_PAL_TAG_BRENDAN, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_1, + OBJ_EVENT_PAL_TAG_NPC_2, + OBJ_EVENT_PAL_TAG_NPC_3, + OBJ_EVENT_PAL_TAG_NPC_4, + OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION, }; -const u16 *const gObjectPaletteTagSets[] = { - gObjectPaletteTags0, - gObjectPaletteTags1, - gObjectPaletteTags2, - gObjectPaletteTags3, +static const u16 *const sObjectPaletteTagSets[] = { + sObjectPaletteTags0, + sObjectPaletteTags1, + sObjectPaletteTags2, + sObjectPaletteTags3, }; #include "data/object_events/berry_tree_graphics_tables.h" @@ -1367,16 +1368,16 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl paletteSlot = graphicsInfo->paletteSlot; if (paletteSlot == 0) { - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, 0); + LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, 0); } else if (paletteSlot == 10) { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, 10); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, 10); } else if (paletteSlot >= 16) { paletteSlot -= 16; - sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot); + sub_808EAB0(graphicsInfo->paletteTag, paletteSlot); } if (objectEvent->movementType == MOVEMENT_TYPE_INVISIBLE) @@ -1479,7 +1480,7 @@ static void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void ( const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); spriteTemplate->tileTag = graphicsInfo->tileTag; - spriteTemplate->paletteTag = graphicsInfo->paletteTag1; + spriteTemplate->paletteTag = graphicsInfo->paletteTag; spriteTemplate->oam = graphicsInfo->oam; spriteTemplate->anims = graphicsInfo->anims; spriteTemplate->images = graphicsInfo->images; @@ -1556,11 +1557,11 @@ u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction) sprite->data[1] = z; if (graphicsInfo->paletteSlot == 10) { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); } else if (graphicsInfo->paletteSlot >= 16) { - sub_808EAB0(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot | 0xf0); + sub_808EAB0(graphicsInfo->paletteTag, graphicsInfo->paletteSlot | 0xf0); } if (subspriteTables != NULL) { @@ -1696,16 +1697,16 @@ static void sub_808E1B8(u8 objectEventId, s16 x, s16 y) paletteSlot = graphicsInfo->paletteSlot; if (paletteSlot == 0) { - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot); + LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); } else if (paletteSlot == 10) { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); } else if (paletteSlot >= 16) { paletteSlot -= 16; - sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot); + sub_808EAB0(graphicsInfo->paletteTag, paletteSlot); } *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; spriteId = CreateSprite(&spriteTemplate, 0, 0, 0); @@ -1772,16 +1773,16 @@ void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) paletteSlot = graphicsInfo->paletteSlot; if (paletteSlot == 0) { - PatchObjectPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot); + PatchObjectPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); } else if (paletteSlot == 10) { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); } else if (paletteSlot >= 16) { paletteSlot -= 16; - sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot); + sub_808EAB0(graphicsInfo->paletteTag, paletteSlot); } sprite->oam.shape = graphicsInfo->oam->shape; sprite->oam.size = graphicsInfo->oam->size; @@ -2033,11 +2034,11 @@ void LoadPlayerObjectReflectionPalette(u16 tag, u8 slot) u8 i; PatchObjectPalette(tag, slot); - for (i = 0; gPlayerReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) + for (i = 0; sPlayerReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) { - if (gPlayerReflectionPaletteSets[i].tag == tag) + if (sPlayerReflectionPaletteSets[i].tag == tag) { - PatchObjectPalette(gPlayerReflectionPaletteSets[i].data[sCurrentReflectionType], gReflectionEffectPaletteMap[slot]); + PatchObjectPalette(sPlayerReflectionPaletteSets[i].data[sCurrentReflectionType], gReflectionEffectPaletteMap[slot]); return; } } @@ -2049,11 +2050,11 @@ void LoadSpecialObjectReflectionPalette(u16 tag, u8 slot) sCurrentSpecialObjectPaletteTag = tag; PatchObjectPalette(tag, slot); - for (i = 0; gSpecialObjectReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) + for (i = 0; sSpecialObjectReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) { - if (gSpecialObjectReflectionPaletteSets[i].tag == tag) + if (sSpecialObjectReflectionPaletteSets[i].tag == tag) { - PatchObjectPalette(gSpecialObjectReflectionPaletteSets[i].data[sCurrentReflectionType], gReflectionEffectPaletteMap[slot]); + PatchObjectPalette(sSpecialObjectReflectionPaletteSets[i].data[sCurrentReflectionType], gReflectionEffectPaletteMap[slot]); return; } } @@ -2504,12 +2505,12 @@ void InitObjectEventPalettes(u8 palSlot) sCurrentReflectionType = palSlot; if (palSlot == 1) { - PatchObjectPaletteRange(gObjectPaletteTagSets[sCurrentReflectionType], 0, 6); + PatchObjectPaletteRange(sObjectPaletteTagSets[sCurrentReflectionType], 0, 6); gReservedSpritePaletteCount = 8; } else { - PatchObjectPaletteRange(gObjectPaletteTagSets[sCurrentReflectionType], 0, 10); + PatchObjectPaletteRange(sObjectPaletteTagSets[sCurrentReflectionType], 0, 10); } } @@ -2519,13 +2520,13 @@ u16 GetObjectPaletteTag(u8 palSlot) if (palSlot < 10) { - return gObjectPaletteTagSets[sCurrentReflectionType][palSlot]; + return sObjectPaletteTagSets[sCurrentReflectionType][palSlot]; } - for (i = 0; gSpecialObjectReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) + for (i = 0; sSpecialObjectReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) { - if (gSpecialObjectReflectionPaletteSets[i].tag == sCurrentSpecialObjectPaletteTag) + if (sSpecialObjectReflectionPaletteSets[i].tag == sCurrentSpecialObjectPaletteTag) { - return gSpecialObjectReflectionPaletteSets[i].data[sCurrentReflectionType]; + return sSpecialObjectReflectionPaletteSets[i].data[sCurrentReflectionType]; } } return OBJ_EVENT_PAL_TAG_NONE; diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 886e023d1c..2322232b88 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -81,15 +81,15 @@ static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, const struct ObjectEventGraphicsInfo *graphicsInfo; graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - if (graphicsInfo->paletteTag2 != OBJ_EVENT_PAL_TAG_NONE) + if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE) { if (graphicsInfo->paletteSlot == 0) { - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, paletteIndex); + LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex); } else if (graphicsInfo->paletteSlot == 10) { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, paletteIndex); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex); } else { @@ -106,9 +106,9 @@ static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEven const struct ObjectEventGraphicsInfo *graphicsInfo; graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - if (graphicsInfo->paletteTag2 != OBJ_EVENT_PAL_TAG_NONE) + if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE) { - PatchObjectPalette(graphicsInfo->paletteTag2, paletteNum); + PatchObjectPalette(graphicsInfo->reflectionPaletteTag, paletteNum); UpdateSpritePaletteWithWeather(paletteNum); } } diff --git a/src/field_specials.c b/src/field_specials.c index b287a071a0..5ff6971825 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -86,10 +86,10 @@ static EWRAM_DATA u32 sBattleTowerMultiBattleTypeFlags = 0; struct ListMenuTemplate gScrollableMultichoice_ListMenuTemplate; -extern const u16 gObjectEventPalette8[]; -extern const u16 gObjectEventPalette17[]; -extern const u16 gObjectEventPalette33[]; -extern const u16 gObjectEventPalette34[]; +extern const u16 gObjectEventPal_Brendan[]; +extern const u16 gObjectEventPal_May[]; +extern const u16 gObjectEventPal_RubySapphireBrendan[]; +extern const u16 gObjectEventPal_RubySapphireMay[]; void TryLoseFansFromPlayTime(void); void SetPlayerGotFirstFans(void); @@ -621,18 +621,18 @@ static void LoadLinkPartnerObjectEventSpritePalette(u8 graphicsId, u8 localEvent switch (graphicsId) { - case OBJ_EVENT_GFX_LINK_RS_BRENDAN: - LoadPalette(gObjectEventPalette33, 0x100 + (adjustedPaletteNum << 4), 0x20); - break; - case OBJ_EVENT_GFX_LINK_RS_MAY: - LoadPalette(gObjectEventPalette34, 0x100 + (adjustedPaletteNum << 4), 0x20); - break; - case OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL: - LoadPalette(gObjectEventPalette8, 0x100 + (adjustedPaletteNum << 4), 0x20); - break; - case OBJ_EVENT_GFX_RIVAL_MAY_NORMAL: - LoadPalette(gObjectEventPalette17, 0x100 + (adjustedPaletteNum << 4), 0x20); - break; + case OBJ_EVENT_GFX_LINK_RS_BRENDAN: + LoadPalette(gObjectEventPal_RubySapphireBrendan, 0x100 + (adjustedPaletteNum << 4), 0x20); + break; + case OBJ_EVENT_GFX_LINK_RS_MAY: + LoadPalette(gObjectEventPal_RubySapphireMay, 0x100 + (adjustedPaletteNum << 4), 0x20); + break; + case OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL: + LoadPalette(gObjectEventPal_Brendan, 0x100 + (adjustedPaletteNum << 4), 0x20); + break; + case OBJ_EVENT_GFX_RIVAL_MAY_NORMAL: + LoadPalette(gObjectEventPal_May, 0x100 + (adjustedPaletteNum << 4), 0x20); + break; } } } From 513c7c5f45b3c79e710ea1e48298d8a7bf9bb591 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 23 Nov 2020 14:41:22 -0500 Subject: [PATCH 108/177] Clarify Kecleon objects --- data/maps/FortreeCity/map.json | 2 +- data/maps/LilycoveCity_House1/map.json | 2 +- data/maps/Route117/map.json | 2 +- data/maps/Route119/map.json | 4 ++-- data/maps/Route120/map.json | 20 +++++++++---------- data/maps/Route120/scripts.inc | 20 +++++++++---------- data/maps/SootopolisCity_House1/map.json | 2 +- include/constants/event_objects.h | 4 ++-- include/constants/flags.h | 4 ++-- src/data/lilycove_lady.h | 2 +- .../object_event_graphics_info.h | 4 ++-- .../object_event_graphics_info_pointers.h | 8 ++++---- 12 files changed, 37 insertions(+), 37 deletions(-) diff --git a/data/maps/FortreeCity/map.json b/data/maps/FortreeCity/map.json index 86d43693ac..fd23e6ffd6 100644 --- a/data/maps/FortreeCity/map.json +++ b/data/maps/FortreeCity/map.json @@ -104,7 +104,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 25, "y": 8, "elevation": 3, diff --git a/data/maps/LilycoveCity_House1/map.json b/data/maps/LilycoveCity_House1/map.json index bd6850f5a7..cbd7cdbdf6 100644 --- a/data/maps/LilycoveCity_House1/map.json +++ b/data/maps/LilycoveCity_House1/map.json @@ -28,7 +28,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 4, "y": 4, "elevation": 3, diff --git a/data/maps/Route117/map.json b/data/maps/Route117/map.json index d2f45e256f..dd923a7cdd 100644 --- a/data/maps/Route117/map.json +++ b/data/maps/Route117/map.json @@ -78,7 +78,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 39, "y": 4, "elevation": 3, diff --git a/data/maps/Route119/map.json b/data/maps/Route119/map.json index fa6391a34e..8d78d1065b 100644 --- a/data/maps/Route119/map.json +++ b/data/maps/Route119/map.json @@ -468,7 +468,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 31, "y": 6, "elevation": 3, @@ -481,7 +481,7 @@ "flag": "FLAG_HIDE_ROUTE_119_KECLEON_1" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 25, "y": 15, "elevation": 3, diff --git a/data/maps/Route120/map.json b/data/maps/Route120/map.json index 8a7e56ddc3..787f51361a 100644 --- a/data/maps/Route120/map.json +++ b/data/maps/Route120/map.json @@ -403,7 +403,7 @@ "flag": "FLAG_ITEM_ROUTE_120_HYPER_POTION" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 12, "y": 16, "elevation": 4, @@ -412,8 +412,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "Route120_EventScript_InvisibleBridgeKecleon", - "flag": "FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_INVISIBLE" + "script": "Route120_EventScript_BridgeKecleon", + "flag": "FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE" }, { "graphics_id": "OBJ_EVENT_GFX_STEVEN", @@ -481,7 +481,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_2", + "graphics_id": "OBJ_EVENT_GFX_KECLEON_BRIDGE_SHADOW", "x": 12, "y": 16, "elevation": 3, @@ -491,10 +491,10 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "0x0", - "flag": "FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_VISIBLE" + "flag": "FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_SHADOW" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 20, "y": 11, "elevation": 3, @@ -507,7 +507,7 @@ "flag": "FLAG_HIDE_ROUTE_120_KECLEON_1" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 27, "y": 2, "elevation": 3, @@ -520,7 +520,7 @@ "flag": "FLAG_HIDE_ROUTE_120_KECLEON_2" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 4, "y": 77, "elevation": 3, @@ -533,7 +533,7 @@ "flag": "FLAG_HIDE_ROUTE_120_KECLEON_3" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 7, "y": 51, "elevation": 3, @@ -546,7 +546,7 @@ "flag": "FLAG_HIDE_ROUTE_120_KECLEON_5" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 19, "y": 48, "elevation": 3, diff --git a/data/maps/Route120/scripts.inc b/data/maps/Route120/scripts.inc index 7ec3e1221d..0056acbd79 100644 --- a/data/maps/Route120/scripts.inc +++ b/data/maps/Route120/scripts.inc @@ -1,6 +1,6 @@ -.set LOCALID_INVISIBLE_BRIDGE_KECLEON, 30 +.set LOCALID_BRIDGE_KECLEON, 30 .set LOCALID_STEVEN, 31 -.set LOCALID_VISIBLE_BRIDGE_KECLEON, 36 +.set LOCALID_BRIDGE_KECLEON_SHADOW, 36 @ They use a second object which is identical to Kecleon but has a reflection palette tag for the bridge shadow Route120_MapScripts:: @ 81F53EC map_script MAP_SCRIPT_ON_RESUME, Route120_OnResume @@ -31,8 +31,8 @@ Route120_EventScript_RemoveBridgeKecleon:: @ 81F5449 specialvar VAR_RESULT, GetBattleOutcome compare VAR_RESULT, B_OUTCOME_CAUGHT goto_if_ne Common_EventScript_NopReturn - removeobject LOCALID_INVISIBLE_BRIDGE_KECLEON - removeobject LOCALID_VISIBLE_BRIDGE_KECLEON + removeobject LOCALID_BRIDGE_KECLEON + removeobject LOCALID_BRIDGE_KECLEON_SHADOW return Route120_EventScript_RemoveKecleon:: @ 81F5460 @@ -61,7 +61,7 @@ Route120_EventScript_SetBridgeClearMetatiles:: @ 81F54A3 return Route120_EventScript_SetBridgeKecleonMovement:: @ 81F54C8 - setobjectmovementtype LOCALID_VISIBLE_BRIDGE_KECLEON, MOVEMENT_TYPE_FACE_RIGHT + setobjectmovementtype LOCALID_BRIDGE_KECLEON_SHADOW, MOVEMENT_TYPE_FACE_RIGHT return Route120_OnTransition: @ 81F54CD @@ -205,9 +205,9 @@ Route120_EventScript_StevenBattleKecleon:: @ 81F568B delay 20 msgbox Route120_Text_StevenUsedDevonScope, MSGBOX_DEFAULT closemessage - applymovement LOCALID_INVISIBLE_BRIDGE_KECLEON, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_BRIDGE_KECLEON, Common_Movement_WalkInPlaceFastestRight waitmovement 0 - applymovement LOCALID_INVISIBLE_BRIDGE_KECLEON, Movement_KecleonAppears + applymovement LOCALID_BRIDGE_KECLEON, Movement_KecleonAppears waitmovement 0 waitse playmoncry SPECIES_KECLEON, 2 @@ -230,8 +230,8 @@ Route120_EventScript_StevenBattleKecleon:: @ 81F568B Route120_EventScript_RemoveBridgeKecleonPostBattle:: @ 81F571C fadescreenswapbuffers FADE_TO_BLACK - removeobject LOCALID_INVISIBLE_BRIDGE_KECLEON - removeobject LOCALID_VISIBLE_BRIDGE_KECLEON + removeobject LOCALID_BRIDGE_KECLEON + removeobject LOCALID_BRIDGE_KECLEON_SHADOW fadescreenswapbuffers FADE_FROM_BLACK goto Route120_EventScript_StevenGiveDeconScope end @@ -276,7 +276,7 @@ Route120_Movement_ApproachKecleonWest: @ 81F57B9 walk_left step_end -Route120_EventScript_InvisibleBridgeKecleon:: @ 81F57BC +Route120_EventScript_BridgeKecleon:: @ 81F57BC msgbox Kecleon_Text_SomethingUnseeable, MSGBOX_NPC end diff --git a/data/maps/SootopolisCity_House1/map.json b/data/maps/SootopolisCity_House1/map.json index 26c47c4323..29162b8675 100644 --- a/data/maps/SootopolisCity_House1/map.json +++ b/data/maps/SootopolisCity_House1/map.json @@ -28,7 +28,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 2, "y": 3, "elevation": 3, diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index ca312e9570..8e026ef2dc 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -205,7 +205,7 @@ #define OBJ_EVENT_GFX_REGICE 201 #define OBJ_EVENT_GFX_REGISTEEL 202 #define OBJ_EVENT_GFX_SKITTY 203 -#define OBJ_EVENT_GFX_KECLEON_1 204 +#define OBJ_EVENT_GFX_KECLEON 204 #define OBJ_EVENT_GFX_KYOGRE_2 205 #define OBJ_EVENT_GFX_GROUDON_2 206 #define OBJ_EVENT_GFX_RAYQUAZA_2 207 @@ -213,7 +213,7 @@ #define OBJ_EVENT_GFX_PIKACHU 209 #define OBJ_EVENT_GFX_AZUMARILL 210 #define OBJ_EVENT_GFX_WINGULL 211 -#define OBJ_EVENT_GFX_KECLEON_2 212 +#define OBJ_EVENT_GFX_KECLEON_BRIDGE_SHADOW 212 #define OBJ_EVENT_GFX_TUBER_M_SWIMMING 213 #define OBJ_EVENT_GFX_AZURILL 214 #define OBJ_EVENT_GFX_MOM 215 diff --git a/include/constants/flags.h b/include/constants/flags.h index a562b0670e..9be269105e 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1012,7 +1012,7 @@ #define FLAG_HIDE_MOSSDEEP_CITY_STEVENS_HOUSE_STEVEN 0x3C7 #define FLAG_HIDE_MOSSDEEP_CITY_STEVENS_HOUSE_BELDUM_POKEBALL 0x3C8 #define FLAG_HIDE_FORTREE_CITY_KECLEON 0x3C9 -#define FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_INVISIBLE 0x3CA +#define FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE 0x3CA #define FLAG_HIDE_LILYCOVE_CITY_RIVAL 0x3CB #define FLAG_HIDE_ROUTE_120_STEVEN 0x3CC #define FLAG_HIDE_SOOTOPOLIS_CITY_STEVEN 0x3CD @@ -1023,7 +1023,7 @@ #define FLAG_HIDE_AQUA_HIDEOUT_B1F_ELECTRODE_2 0x3D2 #define FLAG_HIDE_OLDALE_TOWN_RIVAL 0x3D3 #define FLAG_HIDE_UNDERWATER_SEA_FLOOR_CAVERN_STOLEN_SUBMARINE 0x3D4 -#define FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_VISIBLE 0x3D5 +#define FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_SHADOW 0x3D5 #define FLAG_HIDE_ROUTE_120_KECLEON_1 0x3D6 #define FLAG_HIDE_RUSTURF_TUNNEL_WANDA 0x3D7 #define FLAG_HIDE_VERDANTURF_TOWN_WANDAS_HOUSE_WANDA 0x3D8 diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h index cf6c0c6488..37bae7e951 100644 --- a/src/data/lilycove_lady.h +++ b/src/data/lilycove_lady.h @@ -8,7 +8,7 @@ static const u16 sContestLadyMonGfxId[] = OBJ_EVENT_GFX_ZIGZAGOON_1, OBJ_EVENT_GFX_SKITTY, OBJ_EVENT_GFX_POOCHYENA, - OBJ_EVENT_GFX_KECLEON_1, + OBJ_EVENT_GFX_KECLEON, OBJ_EVENT_GFX_PIKACHU }; diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h index 7b0dc44cc4..c6c78dca99 100755 --- a/src/data/object_events/object_event_graphics_info.h +++ b/src/data/object_events/object_event_graphics_info.h @@ -205,7 +205,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regirock = {0xFFFF const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regice = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Registeel = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Skitty, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre2 = {0xFFFF, OBJ_EVENT_PAL_TAG_KYOGRE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreFront, gObjectEventRotScalAnimTable_KyogreGroudon}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon2 = {0xFFFF, OBJ_EVENT_PAL_TAG_GROUDON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GroudonFront, gObjectEventRotScalAnimTable_KyogreGroudon}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Rayquaza2, gObjectEventPicTable_Rayquaza, gDummySpriteAffineAnimTable}; @@ -213,7 +213,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon = {0xFFF const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Pikachu, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Azumarill, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wingull, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonBridgeShadow = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberMSwimming, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Azurill, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Mom, gDummySpriteAffineAnimTable}; diff --git a/src/data/object_events/object_event_graphics_info_pointers.h b/src/data/object_events/object_event_graphics_info_pointers.h index c72b0279de..0ca70fa337 100755 --- a/src/data/object_events/object_event_graphics_info_pointers.h +++ b/src/data/object_events/object_event_graphics_info_pointers.h @@ -202,7 +202,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regirock; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regice; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Registeel; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon1; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre2; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon2; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza2; @@ -210,7 +210,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon2; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonBridgeShadow; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom; @@ -451,7 +451,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM [OBJ_EVENT_GFX_REGICE] = &gObjectEventGraphicsInfo_Regice, [OBJ_EVENT_GFX_REGISTEEL] = &gObjectEventGraphicsInfo_Registeel, [OBJ_EVENT_GFX_SKITTY] = &gObjectEventGraphicsInfo_Skitty, - [OBJ_EVENT_GFX_KECLEON_1] = &gObjectEventGraphicsInfo_Kecleon1, + [OBJ_EVENT_GFX_KECLEON] = &gObjectEventGraphicsInfo_Kecleon, [OBJ_EVENT_GFX_KYOGRE_2] = &gObjectEventGraphicsInfo_Kyogre2, [OBJ_EVENT_GFX_GROUDON_2] = &gObjectEventGraphicsInfo_Groudon2, [OBJ_EVENT_GFX_RAYQUAZA_2] = &gObjectEventGraphicsInfo_Rayquaza2, @@ -459,7 +459,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM [OBJ_EVENT_GFX_PIKACHU] = &gObjectEventGraphicsInfo_Pikachu, [OBJ_EVENT_GFX_AZUMARILL] = &gObjectEventGraphicsInfo_Azumarill, [OBJ_EVENT_GFX_WINGULL] = &gObjectEventGraphicsInfo_Wingull, - [OBJ_EVENT_GFX_KECLEON_2] = &gObjectEventGraphicsInfo_Kecleon2, + [OBJ_EVENT_GFX_KECLEON_BRIDGE_SHADOW] = &gObjectEventGraphicsInfo_KecleonBridgeShadow, [OBJ_EVENT_GFX_TUBER_M_SWIMMING] = &gObjectEventGraphicsInfo_TuberMSwimming, [OBJ_EVENT_GFX_AZURILL] = &gObjectEventGraphicsInfo_Azurill, [OBJ_EVENT_GFX_MOM] = &gObjectEventGraphicsInfo_Mom, From 9d056e865655af52c16be7c04df42be378259439 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 23 Nov 2020 14:45:16 -0500 Subject: [PATCH 109/177] Move object event pal declarations to graphics --- include/graphics.h | 6 ++++++ src/contest_util.c | 5 ----- src/field_specials.c | 6 +----- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index 32268d6dbd..936f95aa89 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -5014,4 +5014,10 @@ extern const u16 gPokenavMessageBox_Pal[]; extern const u32 gPokenavOptions_Gfx[]; extern const u16 gPokenavOptions_Pal[]; +// Object event pals +extern const u16 gObjectEventPal_Brendan[]; +extern const u16 gObjectEventPal_May[]; +extern const u16 gObjectEventPal_RubySapphireBrendan[]; +extern const u16 gObjectEventPal_RubySapphireMay[]; + #endif //GUARD_GRAPHICS_H diff --git a/src/contest_util.c b/src/contest_util.c index 9f95822923..9ddfdad1de 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -166,11 +166,6 @@ static void SpriteCB_Confetti(struct Sprite *sprite); static void Task_ShowContestEntryMonPic(u8 taskId); static void Task_LinkContestWaitForConnection(u8 taskId); -extern const u16 gObjectEventPal_Brendan[]; -extern const u16 gObjectEventPal_May[]; -extern const u16 gObjectEventPal_RubySapphireBrendan[]; -extern const u16 gObjectEventPal_RubySapphireMay[]; - static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal"); static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp"); static const u16 sMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal"); diff --git a/src/field_specials.c b/src/field_specials.c index 5ff6971825..51030a3878 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -16,6 +16,7 @@ #include "field_screen_effect.h" #include "field_specials.h" #include "field_weather.h" +#include "graphics.h" #include "international_string_util.h" #include "item_icon.h" #include "link.h" @@ -86,11 +87,6 @@ static EWRAM_DATA u32 sBattleTowerMultiBattleTypeFlags = 0; struct ListMenuTemplate gScrollableMultichoice_ListMenuTemplate; -extern const u16 gObjectEventPal_Brendan[]; -extern const u16 gObjectEventPal_May[]; -extern const u16 gObjectEventPal_RubySapphireBrendan[]; -extern const u16 gObjectEventPal_RubySapphireMay[]; - void TryLoseFansFromPlayTime(void); void SetPlayerGotFirstFans(void); u16 GetNumFansOfPlayerInTrainerFanClub(void); From 94cbd3ff1b916d045663f3c7dab2268b75c9bde2 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Thu, 26 Nov 2020 01:30:59 -0500 Subject: [PATCH 110/177] [LEAK INFORMED] match sub_819A080 --- src/menu.c | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/menu.c b/src/menu.c index dca8adc2d2..12bd71f333 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2016,7 +2016,7 @@ void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 src { int loopSrcY, loopDstY, loopSrcX, loopDstX, xEnd, yEnd, multiplierSrcY, multiplierDstY; const u8 *pixelsSrc; - u16 *pixelsDst; + u8 *pixelsDst; u16 toOrr; if (dst->width - dstX < width) @@ -2037,53 +2037,52 @@ void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 src for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++) { pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B); - pixelsDst = (void*) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)( loopDstY << 0x1d) >> 0x1B); + pixelsDst = (void*) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B); if ((uintptr_t )pixelsDst & 0x1) { - pixelsDst = (void*)(pixelsDst) - 1; + pixelsDst--; if (loopDstX & 0x1) { - toOrr = *pixelsDst & 0x0fff; + toOrr = *(vu16*)pixelsDst; + toOrr &= 0x0fff; if (loopSrcX & 0x1) - *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 8); + toOrr |= ((*pixelsSrc & 0xf0) << 8); else - *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 12); + toOrr |= ((*pixelsSrc & 0x0f) << 12); } else { - toOrr = *pixelsDst & 0xf0ff; + toOrr = *(vu16*)pixelsDst; + toOrr &= 0xf0ff; if (loopSrcX & 0x1) - *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 4); + toOrr |= ((*pixelsSrc & 0xf0) << 4); else - *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 8); + toOrr |= ((*pixelsSrc & 0x0f) << 8); } } else { if (loopDstX & 1) { - toOrr = *pixelsDst & 0xff0f; + toOrr = *(vu16*)pixelsDst; + toOrr &= 0xff0f; if (loopSrcX & 1) - *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 0); + toOrr |= ((*pixelsSrc & 0xf0) << 0); else - *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 4); + toOrr |= ((*pixelsSrc & 0x0f) << 4); } else { - toOrr = *pixelsDst & 0xfff0; + toOrr = *(vu16*)pixelsDst; + toOrr &= 0xfff0; if (loopSrcX & 1) - *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) >> 4); + toOrr |= ((*pixelsSrc & 0xf0) >> 4); else - *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) >> 0); + toOrr |= ((*pixelsSrc & 0x0f) >> 0); } } - - // Needed to match, urgh. - #ifndef NONMATCHING - asm("":::"r4"); - pixelsDst++;pixelsDst--; - #endif // NONMATCHING + *(vu16*)pixelsDst = toOrr; } } } From 54becd2303fa25db7e0db42525f44acc964c03e3 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Thu, 26 Nov 2020 01:35:08 -0500 Subject: [PATCH 111/177] whitespace --- src/menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/menu.c b/src/menu.c index 12bd71f333..4813f7b028 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2039,7 +2039,7 @@ void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 src pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B); pixelsDst = (void*) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B); - if ((uintptr_t )pixelsDst & 0x1) + if ((uintptr_t)pixelsDst & 0x1) { pixelsDst--; if (loopDstX & 0x1) From 0f04944b81088133754b675d4e715c4caa53161e Mon Sep 17 00:00:00 2001 From: Ashley Coleman Date: Thu, 26 Nov 2020 11:05:02 -0800 Subject: [PATCH 112/177] Rename graphics files for COOLTRAINER to match define --- ..._f_front_pic.png => cooltrainer_f_front_pic.png} | Bin ..._m_front_pic.png => cooltrainer_m_front_pic.png} | Bin .../{cool_trainer_f.pal => cooltrainer_f.pal} | 0 .../{cool_trainer_m.pal => cooltrainer_m.pal} | 0 src/data/graphics/trainers.h | 8 ++++---- 5 files changed, 4 insertions(+), 4 deletions(-) rename graphics/trainers/front_pics/{cool_trainer_f_front_pic.png => cooltrainer_f_front_pic.png} (100%) rename graphics/trainers/front_pics/{cool_trainer_m_front_pic.png => cooltrainer_m_front_pic.png} (100%) rename graphics/trainers/palettes/{cool_trainer_f.pal => cooltrainer_f.pal} (100%) rename graphics/trainers/palettes/{cool_trainer_m.pal => cooltrainer_m.pal} (100%) diff --git a/graphics/trainers/front_pics/cool_trainer_f_front_pic.png b/graphics/trainers/front_pics/cooltrainer_f_front_pic.png similarity index 100% rename from graphics/trainers/front_pics/cool_trainer_f_front_pic.png rename to graphics/trainers/front_pics/cooltrainer_f_front_pic.png diff --git a/graphics/trainers/front_pics/cool_trainer_m_front_pic.png b/graphics/trainers/front_pics/cooltrainer_m_front_pic.png similarity index 100% rename from graphics/trainers/front_pics/cool_trainer_m_front_pic.png rename to graphics/trainers/front_pics/cooltrainer_m_front_pic.png diff --git a/graphics/trainers/palettes/cool_trainer_f.pal b/graphics/trainers/palettes/cooltrainer_f.pal similarity index 100% rename from graphics/trainers/palettes/cool_trainer_f.pal rename to graphics/trainers/palettes/cooltrainer_f.pal diff --git a/graphics/trainers/palettes/cool_trainer_m.pal b/graphics/trainers/palettes/cooltrainer_m.pal similarity index 100% rename from graphics/trainers/palettes/cool_trainer_m.pal rename to graphics/trainers/palettes/cooltrainer_m.pal diff --git a/src/data/graphics/trainers.h b/src/data/graphics/trainers.h index 3de77d6ecb..206d73a881 100644 --- a/src/data/graphics/trainers.h +++ b/src/data/graphics/trainers.h @@ -7,8 +7,8 @@ const u32 gTrainerPalette_AquaGruntM[] = INCBIN_U32("graphics/trainers/palettes/ const u32 gTrainerFrontPic_PokemonBreederF[] = INCBIN_U32("graphics/trainers/front_pics/pokemon_breeder_f_front_pic.4bpp.lz"); const u32 gTrainerPalette_PokemonBreederF[] = INCBIN_U32("graphics/trainers/palettes/pokemon_breeder_f.gbapal.lz"); -const u32 gTrainerFrontPic_CoolTrainerM[] = INCBIN_U32("graphics/trainers/front_pics/cool_trainer_m_front_pic.4bpp.lz"); -const u32 gTrainerPalette_CoolTrainerM[] = INCBIN_U32("graphics/trainers/palettes/cool_trainer_m.gbapal.lz"); +const u32 gTrainerFrontPic_CoolTrainerM[] = INCBIN_U32("graphics/trainers/front_pics/cooltrainer_m_front_pic.4bpp.lz"); +const u32 gTrainerPalette_CoolTrainerM[] = INCBIN_U32("graphics/trainers/palettes/cooltrainer_m.gbapal.lz"); const u32 gTrainerFrontPic_BirdKeeper[] = INCBIN_U32("graphics/trainers/front_pics/bird_keeper_front_pic.4bpp.lz"); const u32 gTrainerPalette_BirdKeeper[] = INCBIN_U32("graphics/trainers/palettes/bird_keeper.gbapal.lz"); @@ -58,8 +58,8 @@ const u32 gTrainerPalette_TuberF[] = INCBIN_U32("graphics/trainers/palettes/tube const u32 gTrainerFrontPic_TuberM[] = INCBIN_U32("graphics/trainers/front_pics/tuber_m_front_pic.4bpp.lz"); const u32 gTrainerPalette_TuberM[] = INCBIN_U32("graphics/trainers/palettes/tuber_m.gbapal.lz"); -const u32 gTrainerFrontPic_CoolTrainerF[] = INCBIN_U32("graphics/trainers/front_pics/cool_trainer_f_front_pic.4bpp.lz"); -const u32 gTrainerPalette_CoolTrainerF[] = INCBIN_U32("graphics/trainers/palettes/cool_trainer_f.gbapal.lz"); +const u32 gTrainerFrontPic_CoolTrainerF[] = INCBIN_U32("graphics/trainers/front_pics/cooltrainer_f_front_pic.4bpp.lz"); +const u32 gTrainerPalette_CoolTrainerF[] = INCBIN_U32("graphics/trainers/palettes/cooltrainer_f.gbapal.lz"); const u32 gTrainerFrontPic_Lady[] = INCBIN_U32("graphics/trainers/front_pics/lady_front_pic.4bpp.lz"); const u32 gTrainerPalette_Lady[] = INCBIN_U32("graphics/trainers/palettes/lady.gbapal.lz"); From 076b2c2edc3688aa94f3e627ab68ceb49a80b3f1 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 30 Nov 2020 15:32:08 -0500 Subject: [PATCH 113/177] Designated initializers for gTrainerBackPicTable --- src/data.c | 5 ----- src/data/trainer_graphics/back_pic_tables.h | 20 ++++++++++++-------- src/data/trainer_graphics/front_pic_tables.h | 4 ++++ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/data.c b/src/data.c index 29d1835acc..4861da18b5 100644 --- a/src/data.c +++ b/src/data.c @@ -295,11 +295,6 @@ const union AnimCmd *const gUnknown_082FF70C[] = #define SPECIES_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species} #define SPECIES_SHINY_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species + SPECIES_SHINY_TAG} -#define TRAINER_SPRITE(trainerPic, sprite, size) [TRAINER_PIC_##trainerPic] = {sprite, size, TRAINER_PIC_##trainerPic} -#define TRAINER_PAL(trainerPic, pal) [TRAINER_PIC_##trainerPic] = {pal, TRAINER_PIC_##trainerPic} - -#define TRAINER_BACK_PAL(trainerPic, pal) [TRAINER_BACK_PIC_##trainerPic] = {pal, TRAINER_BACK_PIC_##trainerPic} - #include "data/pokemon_graphics/unknown_anims.h" #include "data/pokemon_graphics/front_pic_coordinates.h" #include "data/pokemon_graphics/still_front_pic_table.h" diff --git a/src/data/trainer_graphics/back_pic_tables.h b/src/data/trainer_graphics/back_pic_tables.h index 86efd7905c..1dbffba428 100644 --- a/src/data/trainer_graphics/back_pic_tables.h +++ b/src/data/trainer_graphics/back_pic_tables.h @@ -13,18 +13,22 @@ const struct MonCoords gTrainerBackPicCoords[] = // this table goes functionally unused, since none of these pics are compressed // and the place they would get extracted to gets overwritten later anyway // the casts are so they'll play nice with the strict struct definition +#define TRAINER_BACK_SPRITE(trainerPic, sprite, size) [TRAINER_BACK_PIC_##trainerPic] = {(const u32 *)sprite, size, TRAINER_BACK_PIC_##trainerPic} + const struct CompressedSpriteSheet gTrainerBackPicTable[] = { - (const u32 *)gTrainerBackPic_Brendan, 0x2000, TRAINER_BACK_PIC_BRENDAN, - (const u32 *)gTrainerBackPic_May, 0x2000, TRAINER_BACK_PIC_MAY, - (const u32 *)gTrainerBackPic_Red, 0x2800, TRAINER_BACK_PIC_RED, - (const u32 *)gTrainerBackPic_Leaf, 0x2800, TRAINER_BACK_PIC_LEAF, - (const u32 *)gTrainerBackPic_RubySapphireBrendan, 0x2000, TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN, - (const u32 *)gTrainerBackPic_RubySapphireMay, 0x2000, TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY, - (const u32 *)gTrainerBackPic_Wally, 0x2000, TRAINER_BACK_PIC_WALLY, - (const u32 *)gTrainerBackPic_Steven, 0x2000, TRAINER_BACK_PIC_STEVEN, + TRAINER_BACK_SPRITE(BRENDAN, gTrainerBackPic_Brendan, 0x2000), + TRAINER_BACK_SPRITE(MAY, gTrainerBackPic_May, 0x2000), + TRAINER_BACK_SPRITE(RED, gTrainerBackPic_Red, 0x2800), + TRAINER_BACK_SPRITE(LEAF, gTrainerBackPic_Leaf, 0x2800), + TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_BRENDAN, gTrainerBackPic_RubySapphireBrendan, 0x2000), + TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_MAY, gTrainerBackPic_RubySapphireMay, 0x2000), + TRAINER_BACK_SPRITE(WALLY, gTrainerBackPic_Wally, 0x2000), + TRAINER_BACK_SPRITE(STEVEN, gTrainerBackPic_Steven, 0x2000), }; +#define TRAINER_BACK_PAL(trainerPic, pal) [TRAINER_BACK_PIC_##trainerPic] = {pal, TRAINER_BACK_PIC_##trainerPic} + const struct CompressedSpritePalette gTrainerBackPicPaletteTable[] = { TRAINER_BACK_PAL(BRENDAN, gTrainerPalette_Brendan), diff --git a/src/data/trainer_graphics/front_pic_tables.h b/src/data/trainer_graphics/front_pic_tables.h index c3408b4c35..e751f3c1d2 100644 --- a/src/data/trainer_graphics/front_pic_tables.h +++ b/src/data/trainer_graphics/front_pic_tables.h @@ -95,6 +95,8 @@ const struct MonCoords gTrainerFrontPicCoords[] = [TRAINER_PIC_RS_MAY] = {.size = 8, .y_offset = 1}, }; +#define TRAINER_SPRITE(trainerPic, sprite, size) [TRAINER_PIC_##trainerPic] = {sprite, size, TRAINER_PIC_##trainerPic} + const struct CompressedSpriteSheet gTrainerFrontPicTable[] = { TRAINER_SPRITE(HIKER, gTrainerFrontPic_Hiker, 0x800), @@ -192,6 +194,8 @@ const struct CompressedSpriteSheet gTrainerFrontPicTable[] = TRAINER_SPRITE(RS_MAY, gTrainerFrontPic_RubySapphireMay, 0x800), }; +#define TRAINER_PAL(trainerPic, pal) [TRAINER_PIC_##trainerPic] = {pal, TRAINER_PIC_##trainerPic} + const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[] = { TRAINER_PAL(HIKER, gTrainerPalette_Hiker), From f95192ed87e4ff9d5be14477eb3e61b690f96fb6 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 8 Dec 2020 00:44:26 -0500 Subject: [PATCH 114/177] Define terminal species IDs relatively --- include/constants/species.h | 156 ++++++++++++++++++------------------ 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/include/constants/species.h b/include/constants/species.h index 8fa5cf77b0..983e1a7964 100644 --- a/include/constants/species.h +++ b/include/constants/species.h @@ -417,36 +417,36 @@ #define SPECIES_CHIMECHO 411 #define SPECIES_EGG 412 -#define SPECIES_UNOWN_B 413 -#define SPECIES_UNOWN_C 414 -#define SPECIES_UNOWN_D 415 -#define SPECIES_UNOWN_E 416 -#define SPECIES_UNOWN_F 417 -#define SPECIES_UNOWN_G 418 -#define SPECIES_UNOWN_H 419 -#define SPECIES_UNOWN_I 420 -#define SPECIES_UNOWN_J 421 -#define SPECIES_UNOWN_K 422 -#define SPECIES_UNOWN_L 423 -#define SPECIES_UNOWN_M 424 -#define SPECIES_UNOWN_N 425 -#define SPECIES_UNOWN_O 426 -#define SPECIES_UNOWN_P 427 -#define SPECIES_UNOWN_Q 428 -#define SPECIES_UNOWN_R 429 -#define SPECIES_UNOWN_S 430 -#define SPECIES_UNOWN_T 431 -#define SPECIES_UNOWN_U 432 -#define SPECIES_UNOWN_V 433 -#define SPECIES_UNOWN_W 434 -#define SPECIES_UNOWN_X 435 -#define SPECIES_UNOWN_Y 436 -#define SPECIES_UNOWN_Z 437 -#define SPECIES_UNOWN_EMARK 438 -#define SPECIES_UNOWN_QMARK 439 - #define NUM_SPECIES SPECIES_EGG +#define SPECIES_UNOWN_B (NUM_SPECIES + 1) +#define SPECIES_UNOWN_C (SPECIES_UNOWN_B + 1) +#define SPECIES_UNOWN_D (SPECIES_UNOWN_B + 2) +#define SPECIES_UNOWN_E (SPECIES_UNOWN_B + 3) +#define SPECIES_UNOWN_F (SPECIES_UNOWN_B + 4) +#define SPECIES_UNOWN_G (SPECIES_UNOWN_B + 5) +#define SPECIES_UNOWN_H (SPECIES_UNOWN_B + 6) +#define SPECIES_UNOWN_I (SPECIES_UNOWN_B + 7) +#define SPECIES_UNOWN_J (SPECIES_UNOWN_B + 8) +#define SPECIES_UNOWN_K (SPECIES_UNOWN_B + 9) +#define SPECIES_UNOWN_L (SPECIES_UNOWN_B + 10) +#define SPECIES_UNOWN_M (SPECIES_UNOWN_B + 11) +#define SPECIES_UNOWN_N (SPECIES_UNOWN_B + 12) +#define SPECIES_UNOWN_O (SPECIES_UNOWN_B + 13) +#define SPECIES_UNOWN_P (SPECIES_UNOWN_B + 14) +#define SPECIES_UNOWN_Q (SPECIES_UNOWN_B + 15) +#define SPECIES_UNOWN_R (SPECIES_UNOWN_B + 16) +#define SPECIES_UNOWN_S (SPECIES_UNOWN_B + 17) +#define SPECIES_UNOWN_T (SPECIES_UNOWN_B + 18) +#define SPECIES_UNOWN_U (SPECIES_UNOWN_B + 19) +#define SPECIES_UNOWN_V (SPECIES_UNOWN_B + 20) +#define SPECIES_UNOWN_W (SPECIES_UNOWN_B + 21) +#define SPECIES_UNOWN_X (SPECIES_UNOWN_B + 22) +#define SPECIES_UNOWN_Y (SPECIES_UNOWN_B + 23) +#define SPECIES_UNOWN_Z (SPECIES_UNOWN_B + 24) +#define SPECIES_UNOWN_EMARK (SPECIES_UNOWN_B + 25) +#define SPECIES_UNOWN_QMARK (SPECIES_UNOWN_B + 26) + // National Dex Index Defines #define NATIONAL_DEX_NONE 0 @@ -845,31 +845,31 @@ #define NATIONAL_DEX_COUNT NATIONAL_DEX_DEOXYS -#define NATIONAL_DEX_OLD_UNOWN_B 387 -#define NATIONAL_DEX_OLD_UNOWN_C 388 -#define NATIONAL_DEX_OLD_UNOWN_D 389 -#define NATIONAL_DEX_OLD_UNOWN_E 390 -#define NATIONAL_DEX_OLD_UNOWN_F 391 -#define NATIONAL_DEX_OLD_UNOWN_G 392 -#define NATIONAL_DEX_OLD_UNOWN_H 393 -#define NATIONAL_DEX_OLD_UNOWN_I 394 -#define NATIONAL_DEX_OLD_UNOWN_J 395 -#define NATIONAL_DEX_OLD_UNOWN_K 396 -#define NATIONAL_DEX_OLD_UNOWN_L 397 -#define NATIONAL_DEX_OLD_UNOWN_M 398 -#define NATIONAL_DEX_OLD_UNOWN_N 399 -#define NATIONAL_DEX_OLD_UNOWN_O 400 -#define NATIONAL_DEX_OLD_UNOWN_P 401 -#define NATIONAL_DEX_OLD_UNOWN_Q 402 -#define NATIONAL_DEX_OLD_UNOWN_R 403 -#define NATIONAL_DEX_OLD_UNOWN_S 404 -#define NATIONAL_DEX_OLD_UNOWN_T 405 -#define NATIONAL_DEX_OLD_UNOWN_U 406 -#define NATIONAL_DEX_OLD_UNOWN_V 407 -#define NATIONAL_DEX_OLD_UNOWN_W 408 -#define NATIONAL_DEX_OLD_UNOWN_X 409 -#define NATIONAL_DEX_OLD_UNOWN_Y 410 -#define NATIONAL_DEX_OLD_UNOWN_Z 411 +#define NATIONAL_DEX_OLD_UNOWN_B (NATIONAL_DEX_COUNT + 1) +#define NATIONAL_DEX_OLD_UNOWN_C (NATIONAL_DEX_OLD_UNOWN_B + 1) +#define NATIONAL_DEX_OLD_UNOWN_D (NATIONAL_DEX_OLD_UNOWN_B + 2) +#define NATIONAL_DEX_OLD_UNOWN_E (NATIONAL_DEX_OLD_UNOWN_B + 3) +#define NATIONAL_DEX_OLD_UNOWN_F (NATIONAL_DEX_OLD_UNOWN_B + 4) +#define NATIONAL_DEX_OLD_UNOWN_G (NATIONAL_DEX_OLD_UNOWN_B + 5) +#define NATIONAL_DEX_OLD_UNOWN_H (NATIONAL_DEX_OLD_UNOWN_B + 6) +#define NATIONAL_DEX_OLD_UNOWN_I (NATIONAL_DEX_OLD_UNOWN_B + 7) +#define NATIONAL_DEX_OLD_UNOWN_J (NATIONAL_DEX_OLD_UNOWN_B + 8) +#define NATIONAL_DEX_OLD_UNOWN_K (NATIONAL_DEX_OLD_UNOWN_B + 9) +#define NATIONAL_DEX_OLD_UNOWN_L (NATIONAL_DEX_OLD_UNOWN_B + 10) +#define NATIONAL_DEX_OLD_UNOWN_M (NATIONAL_DEX_OLD_UNOWN_B + 11) +#define NATIONAL_DEX_OLD_UNOWN_N (NATIONAL_DEX_OLD_UNOWN_B + 12) +#define NATIONAL_DEX_OLD_UNOWN_O (NATIONAL_DEX_OLD_UNOWN_B + 13) +#define NATIONAL_DEX_OLD_UNOWN_P (NATIONAL_DEX_OLD_UNOWN_B + 14) +#define NATIONAL_DEX_OLD_UNOWN_Q (NATIONAL_DEX_OLD_UNOWN_B + 15) +#define NATIONAL_DEX_OLD_UNOWN_R (NATIONAL_DEX_OLD_UNOWN_B + 16) +#define NATIONAL_DEX_OLD_UNOWN_S (NATIONAL_DEX_OLD_UNOWN_B + 17) +#define NATIONAL_DEX_OLD_UNOWN_T (NATIONAL_DEX_OLD_UNOWN_B + 18) +#define NATIONAL_DEX_OLD_UNOWN_U (NATIONAL_DEX_OLD_UNOWN_B + 19) +#define NATIONAL_DEX_OLD_UNOWN_V (NATIONAL_DEX_OLD_UNOWN_B + 20) +#define NATIONAL_DEX_OLD_UNOWN_W (NATIONAL_DEX_OLD_UNOWN_B + 21) +#define NATIONAL_DEX_OLD_UNOWN_X (NATIONAL_DEX_OLD_UNOWN_B + 22) +#define NATIONAL_DEX_OLD_UNOWN_Y (NATIONAL_DEX_OLD_UNOWN_B + 23) +#define NATIONAL_DEX_OLD_UNOWN_Z (NATIONAL_DEX_OLD_UNOWN_B + 24) // Hoenn Dex Index Defines @@ -1264,30 +1264,30 @@ #define HOENN_DEX_HO_OH 385 #define HOENN_DEX_CELEBI 386 -#define HOENN_DEX_OLD_UNOWN_B 387 -#define HOENN_DEX_OLD_UNOWN_C 388 -#define HOENN_DEX_OLD_UNOWN_D 389 -#define HOENN_DEX_OLD_UNOWN_E 390 -#define HOENN_DEX_OLD_UNOWN_F 391 -#define HOENN_DEX_OLD_UNOWN_G 392 -#define HOENN_DEX_OLD_UNOWN_H 393 -#define HOENN_DEX_OLD_UNOWN_I 394 -#define HOENN_DEX_OLD_UNOWN_J 395 -#define HOENN_DEX_OLD_UNOWN_K 396 -#define HOENN_DEX_OLD_UNOWN_L 397 -#define HOENN_DEX_OLD_UNOWN_M 398 -#define HOENN_DEX_OLD_UNOWN_N 399 -#define HOENN_DEX_OLD_UNOWN_O 400 -#define HOENN_DEX_OLD_UNOWN_P 401 -#define HOENN_DEX_OLD_UNOWN_Q 402 -#define HOENN_DEX_OLD_UNOWN_R 403 -#define HOENN_DEX_OLD_UNOWN_S 404 -#define HOENN_DEX_OLD_UNOWN_T 405 -#define HOENN_DEX_OLD_UNOWN_U 406 -#define HOENN_DEX_OLD_UNOWN_V 407 -#define HOENN_DEX_OLD_UNOWN_W 408 -#define HOENN_DEX_OLD_UNOWN_X 409 -#define HOENN_DEX_OLD_UNOWN_Y 410 -#define HOENN_DEX_OLD_UNOWN_Z 411 +#define HOENN_DEX_OLD_UNOWN_B (HOENN_DEX_CELEBI + 1) +#define HOENN_DEX_OLD_UNOWN_C (HOENN_DEX_OLD_UNOWN_B + 1) +#define HOENN_DEX_OLD_UNOWN_D (HOENN_DEX_OLD_UNOWN_B + 2) +#define HOENN_DEX_OLD_UNOWN_E (HOENN_DEX_OLD_UNOWN_B + 3) +#define HOENN_DEX_OLD_UNOWN_F (HOENN_DEX_OLD_UNOWN_B + 4) +#define HOENN_DEX_OLD_UNOWN_G (HOENN_DEX_OLD_UNOWN_B + 5) +#define HOENN_DEX_OLD_UNOWN_H (HOENN_DEX_OLD_UNOWN_B + 6) +#define HOENN_DEX_OLD_UNOWN_I (HOENN_DEX_OLD_UNOWN_B + 7) +#define HOENN_DEX_OLD_UNOWN_J (HOENN_DEX_OLD_UNOWN_B + 8) +#define HOENN_DEX_OLD_UNOWN_K (HOENN_DEX_OLD_UNOWN_B + 9) +#define HOENN_DEX_OLD_UNOWN_L (HOENN_DEX_OLD_UNOWN_B + 10) +#define HOENN_DEX_OLD_UNOWN_M (HOENN_DEX_OLD_UNOWN_B + 11) +#define HOENN_DEX_OLD_UNOWN_N (HOENN_DEX_OLD_UNOWN_B + 12) +#define HOENN_DEX_OLD_UNOWN_O (HOENN_DEX_OLD_UNOWN_B + 13) +#define HOENN_DEX_OLD_UNOWN_P (HOENN_DEX_OLD_UNOWN_B + 14) +#define HOENN_DEX_OLD_UNOWN_Q (HOENN_DEX_OLD_UNOWN_B + 15) +#define HOENN_DEX_OLD_UNOWN_R (HOENN_DEX_OLD_UNOWN_B + 16) +#define HOENN_DEX_OLD_UNOWN_S (HOENN_DEX_OLD_UNOWN_B + 17) +#define HOENN_DEX_OLD_UNOWN_T (HOENN_DEX_OLD_UNOWN_B + 18) +#define HOENN_DEX_OLD_UNOWN_U (HOENN_DEX_OLD_UNOWN_B + 19) +#define HOENN_DEX_OLD_UNOWN_V (HOENN_DEX_OLD_UNOWN_B + 20) +#define HOENN_DEX_OLD_UNOWN_W (HOENN_DEX_OLD_UNOWN_B + 21) +#define HOENN_DEX_OLD_UNOWN_X (HOENN_DEX_OLD_UNOWN_B + 22) +#define HOENN_DEX_OLD_UNOWN_Y (HOENN_DEX_OLD_UNOWN_B + 23) +#define HOENN_DEX_OLD_UNOWN_Z (HOENN_DEX_OLD_UNOWN_B + 24) #endif // GUARD_CONSTANTS_SPECIES_H From 76e40fe2dd9e3d68ff5211617ffda4bc7d4faa81 Mon Sep 17 00:00:00 2001 From: ExpoSeed <43502820+ExpoSeed@users.noreply.github.com> Date: Wed, 9 Dec 2020 16:45:27 -0600 Subject: [PATCH 115/177] Fix incorrect bug description --- src/daycare.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/daycare.c b/src/daycare.c index fd6ed3a509..d849b39f3a 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -547,13 +547,17 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) for (i = 0; i < INHERITED_IV_COUNT; i++) { // Randomly pick an IV from the available list and stop from being chosen again. - selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)]; - // BUG: Instead of removing the IV that was just picked (like in RS and FRLG), this + // BUG: Instead of removing the IV that was just picked, this // removes position 0 (HP) then position 1 (DEF), then position 2. This is why HP and DEF // have a lower chance to be inherited in Emerald and why the IV picked for inheritance can - // be repeated. Uncomment the inline comment and remove the existing expression to get the - // intended behavior and to match the other Gen 3 games. - RemoveIVIndexFromList(availableIVs, i /*selectedIvs[i]*/); + // be repeated. Amusingly, FRLG and RS also got this wrong. They remove selectedIvs[i], which + // is not an index! This means that it can sometimes remove the wrong stat. To fix, delete + // the following two lines and uncomment the rest of the block. + selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)]; + RemoveIVIndexFromList(availableIVs, i); + // u8 index = Random() % (NUM_STATS - i); + // selectedIvs[i] = availableIVs[index]; + // RemoveIVIndexFromList(availableIVs, index); } // Determine which parent each of the selected IVs should inherit from. From 54acea6083da645dd509a226cb1156be01236b80 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Fri, 11 Dec 2020 00:32:12 -0500 Subject: [PATCH 116/177] improve asmdiff.sh --- asmdiff.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/asmdiff.sh b/asmdiff.sh index 9e8749acff..6ea588131d 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,7 +1,11 @@ #!/bin/bash OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" -OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" +if [ $(($1)) -ge $((0x8000000)) ]; then + OPTIONS="--adjust-vma=0x8000000 --start-address=$(($1)) --stop-address=$(($1 + $2))" +else + OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" +fi $OBJDUMP $OPTIONS baserom.gba > baserom.dump $OBJDUMP $OPTIONS pokeemerald.gba > pokeemerald.dump diff -u baserom.dump pokeemerald.dump From 15ff55eee58bd246d60f97c7ade919519f645654 Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Fri, 11 Dec 2020 13:58:00 +0100 Subject: [PATCH 117/177] use better m4a variable/constant names --- constants/m4a_constants.inc | 166 +++++++++----- include/gba/m4a_internal.h | 189 +++++++++------- src/m4a.c | 226 +++++++++--------- src/m4a_1.s | 440 ++++++++++++++++++------------------ 4 files changed, 549 insertions(+), 472 deletions(-) diff --git a/constants/m4a_constants.inc b/constants/m4a_constants.inc index 62ca5bb55b..08d888acda 100644 --- a/constants/m4a_constants.inc +++ b/constants/m4a_constants.inc @@ -2,11 +2,41 @@ .equiv PCM_DMA_BUF_SIZE, 1584 + .equiv C_V, 0x40 + .equiv TONEDATA_TYPE_CGB, 0x07 .equiv TONEDATA_TYPE_FIX, 0x08 + .equiv TONEDATA_TYPE_REV, 0x10 + .equiv TONEDATA_TYPE_CMP, 0x20 .equiv TONEDATA_TYPE_SPL, 0x40 @ key split .equiv TONEDATA_TYPE_RHY, 0x80 @ rhythm + .equiv TONEDATA_P_S_PAN, 0xc0 + + .equiv SOUND_CHANNEL_SF_START, 0x80 + .equiv SOUND_CHANNEL_SF_STOP, 0x40 + .equiv SOUND_CHANNEL_SF_SPECIAL, 0x20 + .equiv SOUND_CHANNEL_SF_LOOP, 0x10 + .equiv SOUND_CHANNEL_SF_IEC, 0x04 + .equiv SOUND_CHANNEL_SF_ENV, 0x03 + .equiv SOUND_CHANNEL_SF_ENV_ATTACK, 0x03 + .equiv SOUND_CHANNEL_SF_ENV_DECAY, 0x02 + .equiv SOUND_CHANNEL_SF_ENV_SUSTAIN, 0x01 + .equiv SOUND_CHANNEL_SF_ENV_RELEASE, 0x00 + .equiv SOUND_CHANNEL_SF_ON, (SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_STOP | SOUND_CHANNEL_SF_IEC | SOUND_CHANNEL_SF_ENV) + + .equiv CGB_CHANNEL_MO_PIT, 0x02 + .equiv CGB_CHANNEL_MO_VOL, 0x01 + + .equiv WAVE_DATA_FLAG_LOOP, 0xC0 + + .equiv MPT_FLG_VOLSET, 0x01 + .equiv MPT_FLG_VOLCHG, 0x03 + .equiv MPT_FLG_PITSET, 0x04 + .equiv MPT_FLG_PITCHG, 0x0C + .equiv MPT_FLG_START, 0x40 + .equiv MPT_FLG_EXIST, 0x80 + .macro struct_begin .struct 0 .endm @@ -16,6 +46,28 @@ .struct \name + \size .endm + struct_begin + struct_field o_WaveData_type, 2 + struct_field o_WaveData_d1, 1 + struct_field o_WaveData_flags, 1 + struct_field o_WaveData_freq, 4 + struct_field o_WaveData_loopStart, 4 + struct_field o_WaveData_size, 4 + struct_field o_WaveData_data, 0 + struct_field WaveData_size, 0 + + struct_begin + struct_field o_ToneData_type, 1 + struct_field o_ToneData_key, 1 + struct_field o_ToneData_length, 1 + struct_field o_ToneData_pan_sweep, 1 + struct_field o_ToneData_wav, 4 + struct_field o_ToneData_attack, 1 + struct_field o_ToneData_decay, 1 + struct_field o_ToneData_sustain, 1 + struct_field o_ToneData_release, 1 + struct_field ToneData_size, 0 + struct_begin struct_field o_SoundInfo_ident, 4 struct_field o_SoundInfo_pcmDmaCounter, 1 @@ -32,8 +84,8 @@ struct_field o_SoundInfo_pcmFreq, 4 struct_field o_SoundInfo_divFreq, 4 struct_field o_SoundInfo_cgbChans, 4 - struct_field o_SoundInfo_func, 4 - struct_field o_SoundInfo_intp, 4 + struct_field o_SoundInfo_MPlayMainHead, 4 + struct_field o_SoundInfo_musicPlayerHead, 4 struct_field o_SoundInfo_CgbSound, 4 struct_field o_SoundInfo_CgbOscOff, 4 struct_field o_SoundInfo_MidiKeyToCgbFreq, 4 @@ -46,7 +98,7 @@ struct_field SoundInfo_size, 0 struct_begin - struct_field o_SoundChannel_status, 1 + struct_field o_SoundChannel_statusFlags, 1 struct_field o_SoundChannel_type, 1 struct_field o_SoundChannel_rightVolume, 1 struct_field o_SoundChannel_leftVolume, 1 @@ -54,29 +106,29 @@ struct_field o_SoundChannel_decay, 1 struct_field o_SoundChannel_sustain, 1 struct_field o_SoundChannel_release, 1 - struct_field o_SoundChannel_ky, 1 - struct_field o_SoundChannel_ev, 1 - struct_field o_SoundChannel_er, 1 - struct_field o_SoundChannel_el, 1 - struct_field o_SoundChannel_iev, 1 - struct_field o_SoundChannel_iel, 1 - struct_field o_SoundChannel_d1, 1 - struct_field o_SoundChannel_d2, 1 - struct_field o_SoundChannel_gt, 1 - struct_field o_SoundChannel_mk, 1 - struct_field o_SoundChannel_ve, 1 - struct_field o_SoundChannel_pr, 1 - struct_field o_SoundChannel_rp, 1 - struct_field o_SoundChannel_d3, 3 - struct_field o_SoundChannel_ct, 4 + struct_field o_SoundChannel_key, 1 + struct_field o_SoundChannel_envelopeVolume, 1 + struct_field o_SoundChannel_envelopeVolumeRight, 1 + struct_field o_SoundChannel_envelopeVolumeLeft, 1 + struct_field o_SoundChannel_pseudoEchoVolume, 1 + struct_field o_SoundChannel_pseudoEchoLength, 1 + struct_field o_SoundChannel_dummy1, 1 + struct_field o_SoundChannel_dummy2, 1 + struct_field o_SoundChannel_gateTime, 1 + struct_field o_SoundChannel_midiKey, 1 + struct_field o_SoundChannel_velocity, 1 + struct_field o_SoundChannel_priority, 1 + struct_field o_SoundChannel_rhythmPan, 1 + struct_field o_SoundChannel_dummy3, 3 + struct_field o_SoundChannel_count, 4 struct_field o_SoundChannel_fw, 4 - struct_field o_SoundChannel_freq, 4 + struct_field o_SoundChannel_frequency, 4 struct_field o_SoundChannel_wav, 4 - struct_field o_SoundChannel_cp, 4 + struct_field o_SoundChannel_currentPointer, 4 struct_field o_SoundChannel_track, 4 - struct_field o_SoundChannel_pp, 4 - struct_field o_SoundChannel_np, 4 - struct_field o_SoundChannel_d4, 4 + struct_field o_SoundChannel_prevChannelPointer, 4 + struct_field o_SoundChannel_nextChannelPointer, 4 + struct_field o_SoundChannel_dummy4, 4 struct_field o_SoundChannel_xpi, 2 struct_field o_SoundChannel_xpc, 2 struct_field SoundChannel_size, 0 @@ -112,8 +164,8 @@ struct_field o_MusicPlayerTrack_lfoDelay, 1 struct_field o_MusicPlayerTrack_lfoDelayC, 1 struct_field o_MusicPlayerTrack_priority, 1 - struct_field o_MusicPlayerTrack_echoVolume, 1 - struct_field o_MusicPlayerTrack_echoLength, 1 + struct_field o_MusicPlayerTrack_pseudoEchoVolume, 1 + struct_field o_MusicPlayerTrack_pseudoEchoLength, 1 struct_field o_MusicPlayerTrack_chan, 4 struct_field o_MusicPlayerTrack_ToneData_type, 1 struct_field o_MusicPlayerTrack_ToneData_key, 1 @@ -159,41 +211,41 @@ struct_field MusicPlayerInfo_size, 0 struct_begin - struct_field o_CgbChannel_sf, 1 - struct_field o_CgbChannel_ty, 1 + struct_field o_CgbChannel_statusFlags, 1 + struct_field o_CgbChannel_type, 1 struct_field o_CgbChannel_rightVolume, 1 struct_field o_CgbChannel_leftVolume, 1 - struct_field o_CgbChannel_at, 1 - struct_field o_CgbChannel_de, 1 - struct_field o_CgbChannel_su, 1 - struct_field o_CgbChannel_re, 1 - struct_field o_CgbChannel_ky, 1 - struct_field o_CgbChannel_ev, 1 - struct_field o_CgbChannel_eg, 1 - struct_field o_CgbChannel_ec, 1 - struct_field o_CgbChannel_echoVolume, 1 - struct_field o_CgbChannel_echoLength, 1 - struct_field o_CgbChannel_d1, 1 - struct_field o_CgbChannel_d2, 1 - struct_field o_CgbChannel_gt, 1 - struct_field o_CgbChannel_mk, 1 - struct_field o_CgbChannel_ve, 1 - struct_field o_CgbChannel_pr, 1 - struct_field o_CgbChannel_rp, 1 - struct_field o_CgbChannel_d3, 3 - struct_field o_CgbChannel_d5, 1 - struct_field o_CgbChannel_sg, 1 + struct_field o_CgbChannel_attack, 1 + struct_field o_CgbChannel_decay, 1 + struct_field o_CgbChannel_sustain, 1 + struct_field o_CgbChannel_release, 1 + struct_field o_CgbChannel_key, 1 + struct_field o_CgbChannel_envelopeVolume, 1 + struct_field o_CgbChannel_envelopeGoal, 1 + struct_field o_CgbChannel_envelopeCounter, 1 + struct_field o_CgbChannel_pseudoEchoVolume, 1 + struct_field o_CgbChannel_pseudoEchoLength, 1 + struct_field o_CgbChannel_dummy1, 1 + struct_field o_CgbChannel_dummy2, 1 + struct_field o_CgbChannel_gateTime, 1 + struct_field o_CgbChannel_midiKey, 1 + struct_field o_CgbChannel_velocity, 1 + struct_field o_CgbChannel_priority, 1 + struct_field o_CgbChannel_rhythmPan, 1 + struct_field o_CgbChannel_dummy3, 3 + struct_field o_CgbChannel_dummy5, 1 + struct_field o_CgbChannel_sustainGoal, 1 struct_field o_CgbChannel_n4, 1 struct_field o_CgbChannel_pan, 1 struct_field o_CgbChannel_panMask, 1 - struct_field o_CgbChannel_mo, 1 - struct_field o_CgbChannel_le, 1 - struct_field o_CgbChannel_sw, 1 - struct_field o_CgbChannel_fr, 4 - struct_field o_CgbChannel_wp, 4 - struct_field o_CgbChannel_cp, 4 - struct_field o_CgbChannel_tp, 4 - struct_field o_CgbChannel_pp, 4 - struct_field o_CgbChannel_np, 4 - struct_field o_CgbChannel_d4, 8 + struct_field o_CgbChannel_modify, 1 + struct_field o_CgbChannel_length, 1 + struct_field o_CgbChannel_sweep, 1 + struct_field o_CgbChannel_frequency, 4 + struct_field o_CgbChannel_wavePointer, 4 + struct_field o_CgbChannel_currentPointer, 4 + struct_field o_CgbChannel_track, 4 + struct_field o_CgbChannel_prevChannelPointer, 4 + struct_field o_CgbChannel_nextChannelPointer, 4 + struct_field o_CgbChannel_dummy4, 8 struct_field CgbChannel_size, 0 diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index e2836c6f6b..e09169ab89 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -67,52 +67,22 @@ struct ToneData u8 release; }; +#define SOUND_CHANNEL_SF_START 0x80 +#define SOUND_CHANNEL_SF_STOP 0x40 +#define SOUND_CHANNEL_SF_LOOP 0x10 +#define SOUND_CHANNEL_SF_IEC 0x04 +#define SOUND_CHANNEL_SF_ENV 0x03 +#define SOUND_CHANNEL_SF_ENV_ATTACK 0x03 +#define SOUND_CHANNEL_SF_ENV_DECAY 0x02 +#define SOUND_CHANNEL_SF_ENV_SUSTAIN 0x01 +#define SOUND_CHANNEL_SF_ON (SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_STOP | SOUND_CHANNEL_SF_IEC | SOUND_CHANNEL_SF_ENV) + +#define CGB_CHANNEL_MO_PIT 0x02 +#define CGB_CHANNEL_MO_VOL 0x01 + struct CgbChannel { - u8 sf; // 0x0 - u8 ty; // 0x1 - u8 rightVolume; // 0x2 - u8 leftVolume; // 0x3 - u8 at; // 0x4 - u8 de; // 0x5 - u8 su; // 0x6 - u8 re; // 0x7 - u8 ky; // 0x8 - u8 ev; // 0x9 - u8 eg; // 0xA - u8 ec; // 0xB - u8 echoVolume; // 0xC - u8 echoLength; // 0xD - u8 d1; // 0xE - u8 d2; // 0xF - u8 gt; // 0x10 - u8 mk; // 0x11 - u8 ve; // 0x12 - u8 pr; // 0x13 - u8 rp; // 0x14 - u8 d3[3]; // 0x15, 0x16, 0x17 - u8 d5; // 0x18 - u8 sg; // 0x19 - u8 n4; // 0x1A - u8 pan; // 0x1B - u8 panMask; // 0x1C - u8 mo; // 0x1D - u8 le; // 0x1E - u8 sw; // 0x1F - u32 fr; // 0x20 - u32 *wp; - u32 cp; - u32 tp; - u32 pp; - u32 np; - u8 d4[8]; -}; - -struct MusicPlayerTrack; - -struct SoundChannel -{ - u8 status; + u8 statusFlags; u8 type; u8 rightVolume; u8 leftVolume; @@ -120,29 +90,72 @@ struct SoundChannel u8 decay; u8 sustain; u8 release; - u8 ky; - u8 ev; - u8 er; - u8 el; - u8 echoVolume; - u8 echoLength; - u8 d1; - u8 d2; - u8 gt; - u8 mk; - u8 ve; - u8 pr; - u8 rp; - u8 d3[3]; - u32 ct; - u32 fw; - u32 freq; - struct WaveData *wav; - u32 cp; + u8 key; + u8 envelopeVolume; + u8 envelopeGoal; + u8 envelopeCounter; + u8 pseudoEchoVolume; + u8 pseudoEchoLength; + u8 dummy1; + u8 dummy2; + u8 gateTime; + u8 midiKey; + u8 velocity; + u8 priority; + u8 rhythmPan; + u8 dummy3[3]; + u8 dummy5; + u8 sustainGoal; + u8 n4; // NR[1-4]4 register (initial, length bit) + u8 pan; + u8 panMask; + u8 modify; + u8 length; + u8 sweep; + u32 frequency; + u32 *wavePointer; // instructs CgbMain to load targeted wave + u32 *currentPointer; // stores the currently loaded wave struct MusicPlayerTrack *track; - u32 pp; - u32 np; - u32 d4; + void *prevChannelPointer; + void *nextChannelPointer; + u8 dummy4[8]; +}; + +struct MusicPlayerTrack; + +struct SoundChannel +{ + u8 statusFlags; + u8 type; + u8 rightVolume; + u8 leftVolume; + u8 attack; + u8 decay; + u8 sustain; + u8 release; + u8 key; // midi key as it was translated into final pitch + u8 envelopeVolume; + u8 envelopeVolumeRight; + u8 envelopeVolumeLeft; + u8 pseudoEchoVolume; + u8 pseudoEchoLength; + u8 dummy1; + u8 dummy2; + u8 gateTime; + u8 midiKey; // midi key as it was used in the track data + u8 velocity; + u8 priority; + u8 rhythmPan; + u8 dummy3[3]; + u32 count; + u32 fw; + u32 frequency; + struct WaveData *wav; + s8 *currentPointer; + struct MusicPlayerTrack *track; + void *prevChannelPointer; + void *nextChannelPointer; + u32 dummy4; u16 xpi; u16 xpc; }; @@ -151,6 +164,16 @@ struct SoundChannel #define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer +struct MusicPlayerInfo; + +typedef void (*MPlayFunc)(); +typedef void (*PlyNoteFunc)(u32, struct MusicPlayerInfo *, struct MusicPlayerTrack *); +typedef void (*CgbSoundFunc)(void); +typedef void (*CgbOscOffFunc)(u8); +typedef u32 (*MidiKeyToCgbFreqFunc)(u8, u8, u8); +typedef void (*ExtVolPitFunc)(void); +typedef void (*MPlayMainFunc)(struct MusicPlayerInfo *); + struct SoundInfo { // This field is normally equal to ID_NUMBER but it is set to other @@ -168,7 +191,7 @@ struct SoundInfo u8 freq; u8 mode; - u8 c15; + u8 c15; // periodically counts from 14 downto 0 (15 states) u8 pcmDmaPeriod; // number of V-blanks per PCM DMA u8 maxLines; u8 gap[3]; @@ -176,14 +199,14 @@ struct SoundInfo s32 pcmFreq; s32 divFreq; struct CgbChannel *cgbChans; - u32 func; - u32 intp; - void (*CgbSound)(void); - void (*CgbOscOff)(u8); - u32 (*MidiKeyToCgbFreq)(u8, u8, u8); - u32 MPlayJumpTable; - u32 plynote; - u32 ExtVolPit; + MPlayMainFunc MPlayMainHead; + struct MusicPlayerInfo *musicPlayerHead; + CgbSoundFunc CgbSound; + CgbOscOffFunc CgbOscOff; + MidiKeyToCgbFreqFunc MidiKeyToCgbFreq; + MPlayFunc *MPlayJumpTable; + PlyNoteFunc plynote; + ExtVolPitFunc ExtVolPit; u8 gap2[16]; struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; @@ -270,8 +293,8 @@ struct MusicPlayerTrack u8 lfoDelay; u8 lfoDelayC; u8 priority; - u8 echoVolume; - u8 echoLength; + u8 pseudoEchoVolume; + u8 pseudoEchoLength; struct SoundChannel *chan; struct ToneData tone; u8 gap[10]; @@ -312,8 +335,8 @@ struct MusicPlayerInfo struct MusicPlayerTrack *tracks; struct ToneData *tone; u32 ident; - u32 func; - u32 intp; + MPlayMainFunc MPlayMainNext; + struct MusicPlayerInfo *musicPlayerNext; }; struct MusicPlayer @@ -351,7 +374,7 @@ extern struct MusicPlayerTrack gPokemonCryTracks[]; extern char SoundMainRAM[]; -extern void *gMPlayJumpTable[]; +extern MPlayFunc gMPlayJumpTable[]; typedef void (*XcmdFunc)(struct MusicPlayerInfo *, struct MusicPlayerTrack *); extern const XcmdFunc gXcmdTable[]; @@ -380,7 +403,7 @@ u32 umul3232H32(u32 multiplier, u32 multiplicand); void SoundMain(void); void SoundMainBTM(void); void TrackStop(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track); -void MPlayMain(void); +void MPlayMain(struct MusicPlayerInfo *); void RealClearChain(void *x); void MPlayContinue(struct MusicPlayerInfo *mplayInfo); @@ -400,7 +423,7 @@ void CgbOscOff(u8); void CgbModVol(struct CgbChannel *chan); u32 MidiKeyToCgbFreq(u8, u8, u8); void DummyFunc(void); -void MPlayJumpTableCopy(void **mplayJumpTable); +void MPlayJumpTableCopy(MPlayFunc *mplayJumpTable); void SampleFreqSet(u32 freq); void m4aSoundVSyncOn(void); void m4aSoundVSyncOff(void); @@ -448,7 +471,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_note(u32 note_cmd, struct MusicPlayerInfo *, struct MusicPlayerTrack *); // extended sound command handler functions void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); diff --git a/src/m4a.c b/src/m4a.c index f061ba9b96..3d564a5a19 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -10,7 +10,7 @@ BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0}; struct SoundInfo gSoundInfo; struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES]; struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES]; -void *gMPlayJumpTable[36]; +MPlayFunc gMPlayJumpTable[36]; struct CgbChannel gCgbChans[4]; struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2]; struct PokemonCrySong gPokemonCrySong; @@ -293,7 +293,7 @@ void MPlayExtender(struct CgbChannel *cgbChans) gMPlayJumpTable[32] = FadeOutBody; gMPlayJumpTable[33] = TrkVolPitSet; - soundInfo->cgbChans = (struct CgbChannel *)cgbChans; + soundInfo->cgbChans = cgbChans; soundInfo->CgbSound = CgbSound; soundInfo->CgbOscOff = CgbOscOff; soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq; @@ -301,13 +301,13 @@ void MPlayExtender(struct CgbChannel *cgbChans) CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4); - cgbChans[0].ty = 1; + cgbChans[0].type = 1; cgbChans[0].panMask = 0x11; - cgbChans[1].ty = 2; + cgbChans[1].type = 2; cgbChans[1].panMask = 0x22; - cgbChans[2].ty = 3; + cgbChans[2].type = 3; cgbChans[2].panMask = 0x44; - cgbChans[3].ty = 4; + cgbChans[3].type = 4; cgbChans[3].panMask = 0x88; soundInfo->ident = ident; @@ -362,15 +362,15 @@ void SoundInit(struct SoundInfo *soundInfo) soundInfo->maxChans = 8; soundInfo->masterVolume = 15; - soundInfo->plynote = (u32)ply_note; + soundInfo->plynote = ply_note; soundInfo->CgbSound = DummyFunc; - soundInfo->CgbOscOff = (void (*)(u8))DummyFunc; - soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc; - soundInfo->ExtVolPit = (u32)DummyFunc; + soundInfo->CgbOscOff = (CgbOscOffFunc)DummyFunc; + soundInfo->MidiKeyToCgbFreq = (MidiKeyToCgbFreqFunc)DummyFunc; + soundInfo->ExtVolPit = (ExtVolPitFunc)DummyFunc; MPlayJumpTableCopy(gMPlayJumpTable); - soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable; + soundInfo->MPlayJumpTable = gMPlayJumpTable; SampleFreqSet(SOUND_MODE_FREQ_13379); @@ -437,7 +437,7 @@ void m4aSoundMode(u32 mode) while (temp != 0) { - chan->status = 0; + chan->statusFlags = 0; temp--; chan++; } @@ -483,7 +483,7 @@ void SoundClear(void) while (i > 0) { - ((struct SoundChannel *)chan)->status = 0; + ((struct SoundChannel *)chan)->statusFlags = 0; i--; chan = (void *)((s32)chan + sizeof(struct SoundChannel)); } @@ -497,7 +497,7 @@ void SoundClear(void) while (i <= 4) { soundInfo->CgbOscOff(i); - ((struct CgbChannel *)chan)->sf = 0; + ((struct CgbChannel *)chan)->statusFlags = 0; i++; chan = (void *)((s32)chan + sizeof(struct CgbChannel)); } @@ -572,15 +572,18 @@ void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track tracks++; } - if (soundInfo->func != 0) + // append music player and MPlayMain to linked list + + if (soundInfo->MPlayMainHead != NULL) { - mplayInfo->func = soundInfo->func; - mplayInfo->intp = soundInfo->intp; - soundInfo->func = 0; + mplayInfo->MPlayMainNext = soundInfo->MPlayMainHead; + mplayInfo->musicPlayerNext = soundInfo->musicPlayerHead; + // NULL assignment semantically useless, but required for match + soundInfo->MPlayMainHead = NULL; } - soundInfo->intp = (u32)mplayInfo; - soundInfo->func = (u32)MPlayMain; + soundInfo->musicPlayerHead = mplayInfo; + soundInfo->MPlayMainHead = MPlayMain; soundInfo->ident = ID_NUMBER; mplayInfo->ident = ID_NUMBER; } @@ -884,7 +887,7 @@ void CgbModVol(struct CgbChannel *chan) if ((soundInfo->mode & 1) || !CgbPan(chan)) { chan->pan = 0xFF; - chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; + chan->envelopeGoal = (u32)(chan->rightVolume + chan->leftVolume) >> 4; } else { @@ -895,12 +898,12 @@ void CgbModVol(struct CgbChannel *chan) asm("" : : : "memory"); #endif - chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; - if (chan->eg > 15) - chan->eg = 15; + chan->envelopeGoal = (u32)(chan->rightVolume + chan->leftVolume) >> 4; + if (chan->envelopeGoal > 15) + chan->envelopeGoal = 15; } - chan->sg = (chan->eg * chan->su + 15) >> 4; + chan->sustainGoal = (chan->envelopeGoal * chan->sustain + 15) >> 4; chan->pan &= chan->panMask; } @@ -927,7 +930,7 @@ void CgbSound(void) for (ch = 1, channels = soundInfo->cgbChans; ch <= 4; ch++, channels++) { - if (!(channels->sf & 0xc7)) + if (!(channels->statusFlags & SOUND_CHANNEL_SF_ON)) continue; switch (ch) @@ -965,53 +968,53 @@ void CgbSound(void) prevC15 = soundInfo->c15; evAdd = *nrx2ptr; - if (channels->sf & 0x80) + if (channels->statusFlags & SOUND_CHANNEL_SF_START) { - if (!(channels->sf & 0x40)) + if (!(channels->statusFlags & SOUND_CHANNEL_SF_STOP)) { - channels->sf = 3; - channels->mo = 3; + channels->statusFlags = SOUND_CHANNEL_SF_ENV_ATTACK; + channels->modify = CGB_CHANNEL_MO_PIT | CGB_CHANNEL_MO_VOL; CgbModVol(channels); switch (ch) { case 1: - *nrx0ptr = channels->sw; + *nrx0ptr = channels->sweep; // fallthrough case 2: - *nrx1ptr = ((u32)channels->wp << 6) + channels->le; + *nrx1ptr = ((u32)channels->wavePointer << 6) + channels->length; goto loc_82E0E30; case 3: - if ((u32)channels->wp != channels->cp) + if (channels->wavePointer != channels->currentPointer) { *nrx0ptr = 0x40; - REG_WAVE_RAM0 = channels->wp[0]; - REG_WAVE_RAM1 = channels->wp[1]; - REG_WAVE_RAM2 = channels->wp[2]; - REG_WAVE_RAM3 = channels->wp[3]; - channels->cp = (u32)channels->wp; + REG_WAVE_RAM0 = channels->wavePointer[0]; + REG_WAVE_RAM1 = channels->wavePointer[1]; + REG_WAVE_RAM2 = channels->wavePointer[2]; + REG_WAVE_RAM3 = channels->wavePointer[3]; + channels->currentPointer = channels->wavePointer; } *nrx0ptr = 0; - *nrx1ptr = channels->le; - if (channels->le) - channels->n4 = -64; + *nrx1ptr = channels->length; + if (channels->length) + channels->n4 = 0xC0; else - channels->n4 = -128; + channels->n4 = 0x80; break; default: - *nrx1ptr = channels->le; - *nrx3ptr = (u32)channels->wp << 3; + *nrx1ptr = channels->length; + *nrx3ptr = (u32)channels->wavePointer << 3; loc_82E0E30: - evAdd = channels->at + 8; - if (channels->le) - channels->n4 = 64; + evAdd = channels->attack + 8; + if (channels->length) + channels->n4 = 0x40; else - channels->n4 = 0; + channels->n4 = 0x00; break; } - channels->ec = channels->at; - if ((s8)(channels->at & mask)) + channels->envelopeCounter = channels->attack; + if ((s8)(channels->attack & mask)) { - channels->ev = 0; + channels->envelopeVolume = 0; goto EC_MINUS; } else @@ -1024,28 +1027,28 @@ void CgbSound(void) goto loc_82E0E82; } } - else if (channels->sf & 0x04) + else if (channels->statusFlags & SOUND_CHANNEL_SF_IEC) { - channels->echoLength--; - if ((s8)(channels->echoLength & mask) <= 0) + channels->pseudoEchoLength--; + if ((s8)(channels->pseudoEchoLength & mask) <= 0) { loc_82E0E82: CgbOscOff(ch); - channels->sf = 0; + channels->statusFlags = 0; goto LAST_LABEL; } goto loc_82E0FD6; } - else if ((channels->sf & 0x40) && (channels->sf & 0x03)) + else if ((channels->statusFlags & SOUND_CHANNEL_SF_STOP) && (channels->statusFlags & SOUND_CHANNEL_SF_ENV)) { - channels->sf &= 0xfc; - channels->ec = channels->re; - if ((s8)(channels->re & mask)) + channels->statusFlags &= ~SOUND_CHANNEL_SF_ENV; + channels->envelopeCounter = channels->release; + if ((s8)(channels->release & mask)) { - channels->mo |= 1; + channels->modify |= CGB_CHANNEL_MO_VOL; if (ch != 3) { - evAdd = channels->re; + evAdd = channels->release; } goto EC_MINUS; } @@ -1057,24 +1060,24 @@ void CgbSound(void) else { loc_82E0ED0: - if (channels->ec == 0) + if (channels->envelopeCounter == 0) { if (ch == 3) { - channels->mo |= 1; + channels->modify |= CGB_CHANNEL_MO_VOL; } CgbModVol(channels); - if ((channels->sf & 0x3) == 0) + if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == 0) { - channels->ev--; - if ((s8)(channels->ev & mask) <= 0) + channels->envelopeVolume--; + if ((s8)(channels->envelopeVolume & mask) <= 0) { loc_82E0F02: - channels->ev = ((channels->eg * channels->echoVolume) + 0xFF) >> 8; - if (channels->ev) + channels->envelopeVolume = ((channels->envelopeGoal * channels->pseudoEchoVolume) + 0xFF) >> 8; + if (channels->envelopeVolume) { - channels->sf |= 0x4; - channels->mo |= 1; + channels->statusFlags |= SOUND_CHANNEL_SF_IEC; + channels->modify |= CGB_CHANNEL_MO_VOL; if (ch != 3) { evAdd = 8; @@ -1088,34 +1091,34 @@ void CgbSound(void) } else { - channels->ec = channels->re; + channels->envelopeCounter = channels->release; } } - else if ((channels->sf & 0x3) == 1) + else if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == 1) { loc_82E0F3A: - channels->ev = channels->sg; - channels->ec = 7; + channels->envelopeVolume = channels->sustainGoal; + channels->envelopeCounter = 7; } - else if ((channels->sf & 0x3) == 2) + else if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == 2) { - int ev, sg; + int envelopeVolume, sustainGoal; - channels->ev--; - ev = (s8)(channels->ev & mask); - sg = (s8)(channels->sg); - if (ev <= sg) + channels->envelopeVolume--; + envelopeVolume = (s8)(channels->envelopeVolume & mask); + sustainGoal = (s8)(channels->sustainGoal); + if (envelopeVolume <= sustainGoal) { loc_82E0F5A: - if (channels->su == 0) + if (channels->sustain == 0) { - channels->sf &= 0xfc; + channels->statusFlags &= ~SOUND_CHANNEL_SF_ENV; goto loc_82E0F02; } else { - channels->sf--; - channels->mo |= 1; + channels->statusFlags--; + channels->modify |= CGB_CHANNEL_MO_VOL; if (ch != 3) { evAdd = 8; @@ -1125,24 +1128,24 @@ void CgbSound(void) } else { - channels->ec = channels->de; + channels->envelopeCounter = channels->decay; } } else { - channels->ev++; - if ((u8)(channels->ev & mask) >= channels->eg) + channels->envelopeVolume++; + if ((u8)(channels->envelopeVolume & mask) >= channels->envelopeGoal) { loc_82E0F96: - channels->sf--; - channels->ec = channels->de; - if ((u8)(channels->ec & mask)) + channels->statusFlags--; + channels->envelopeCounter = channels->decay; + if ((u8)(channels->envelopeCounter & mask)) { - channels->mo |= 1; - channels->ev = channels->eg; + channels->modify |= CGB_CHANNEL_MO_VOL; + channels->envelopeVolume = channels->envelopeGoal; if (ch != 3) { - evAdd = channels->de; + evAdd = channels->decay; } } else @@ -1152,14 +1155,14 @@ void CgbSound(void) } else { - channels->ec = channels->at; + channels->envelopeCounter = channels->attack; } } } } EC_MINUS: - channels->ec--; + channels->envelopeCounter--; if (prevC15 == 0) { prevC15--; @@ -1167,39 +1170,39 @@ void CgbSound(void) } loc_82E0FD6: - if (channels->mo & 0x2) + if (channels->modify & CGB_CHANNEL_MO_PIT) { - if (ch < 4 && (channels->ty & 0x08)) + if (ch < 4 && (channels->type & TONEDATA_TYPE_FIX)) { int biasH = REG_SOUNDBIAS_H; if (biasH < 64) { - channels->fr = (channels->fr + 2) & 0x7fc; + channels->frequency = (channels->frequency + 2) & 0x7fc; } else if (biasH < 128) { - channels->fr = (channels->fr + 1) & 0x7fe; + channels->frequency = (channels->frequency + 1) & 0x7fe; } } if (ch != 4) { - *nrx3ptr = channels->fr; + *nrx3ptr = channels->frequency; } else { - *nrx3ptr = (*nrx3ptr & 0x08) | channels->fr; + *nrx3ptr = (*nrx3ptr & 0x08) | channels->frequency; } - channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->fr) + 1)); + channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->frequency) + 1)); *nrx4ptr = (s8)(channels->n4 & mask); } - if (channels->mo & 1) + if (channels->modify & 1) { REG_NR51 = (REG_NR51 & ~channels->panMask) | channels->pan; if (ch == 3) { - *nrx2ptr = gCgb3Vol[channels->ev]; + *nrx2ptr = gCgb3Vol[channels->envelopeVolume]; if (channels->n4 & 0x80) { *nrx0ptr = 0x80; @@ -1210,7 +1213,7 @@ void CgbSound(void) else { evAdd &= 0xf; - *nrx2ptr = (channels->ev << 4) + evAdd; + *nrx2ptr = (channels->envelopeVolume << 4) + evAdd; *nrx4ptr = channels->n4 | 0x80; if (ch == 1 && !(*nrx0ptr & 0x08)) { @@ -1220,7 +1223,7 @@ void CgbSound(void) } LAST_LABEL: - channels->mo = 0; + channels->modify = 0; } } @@ -1504,8 +1507,8 @@ void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *trac cond_true: { - void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]); - func(mplayInfo, track); + // *& is required for matching + (*&gMPlayJumpTable[1])(mplayInfo, track); return; } @@ -1523,8 +1526,7 @@ void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) { - void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]); - func(mplayInfo, track); + gMPlayJumpTable[0](mplayInfo, track); } #define READ_XCMD_BYTE(var, n) \ @@ -1580,13 +1582,13 @@ void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) { - track->echoVolume = *track->cmdPtr; + track->pseudoEchoVolume = *track->cmdPtr; track->cmdPtr++; } void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) { - track->echoLength = *track->cmdPtr; + track->pseudoEchoLength = *track->cmdPtr; track->cmdPtr++; } diff --git a/src/m4a_1.s b/src/m4a_1.s index cab4ed1748..d72336c182 100644 --- a/src/m4a_1.s +++ b/src/m4a_1.s @@ -48,10 +48,10 @@ SoundMain_2: adds r1, r2 SoundMain_3: str r1, [sp, 0x14] - ldr r3, [r0, o_SoundInfo_func] + ldr r3, [r0, o_SoundInfo_MPlayMainHead] cmp r3, 0 beq SoundMain_4 - ldr r0, [r0, o_SoundInfo_intp] + ldr r0, [r0, o_SoundInfo_musicPlayerHead] bl _081DD25E ldr r0, [sp, 0x18] SoundMain_4: @@ -169,74 +169,74 @@ _081DCF54: .pool _081DCF60: - ldrb r6, [r4, o_SoundChannel_status] - movs r0, 0xC7 + ldrb r6, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r6 bne _081DCF6A b _081DD240 _081DCF6A: - movs r0, 0x80 + movs r0, SOUND_CHANNEL_SF_START tst r0, r6 beq _081DCFA0 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r6 bne _081DCFB0 - movs r6, 0x3 - strb r6, [r4, o_SoundChannel_status] + movs r6, SOUND_CHANNEL_SF_ENV_ATTACK + strb r6, [r4, o_SoundChannel_statusFlags] adds r0, r3, 0 - adds r0, 0x10 - ldr r1, [r4, o_SoundChannel_ct] + adds r0, o_WaveData_data + ldr r1, [r4, o_SoundChannel_count] adds r0, r1 - str r0, [r4, o_SoundChannel_cp] - ldr r0, [r3, 0xC] + str r0, [r4, o_SoundChannel_currentPointer] + ldr r0, [r3, o_WaveData_size] subs r0, r1 - str r0, [r4, o_SoundChannel_ct] + str r0, [r4, o_SoundChannel_count] movs r5, 0 - strb r5, [r4, o_SoundChannel_ev] + strb r5, [r4, o_SoundChannel_envelopeVolume] str r5, [r4, o_SoundChannel_fw] - ldrb r2, [r3, 0x3] - movs r0, 0xC0 + ldrb r2, [r3, o_WaveData_flags] + movs r0, WAVE_DATA_FLAG_LOOP tst r0, r2 beq _081DCFF8 - movs r0, 0x10 + movs r0, SOUND_CHANNEL_SF_LOOP orrs r6, r0 - strb r6, [r4, o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] b _081DCFF8 _081DCFA0: - ldrb r5, [r4, o_SoundChannel_ev] - movs r0, 0x4 + ldrb r5, [r4, o_SoundChannel_envelopeVolume] + movs r0, SOUND_CHANNEL_SF_IEC tst r0, r6 beq _081DCFB6 - ldrb r0, [r4, o_SoundChannel_iel] + ldrb r0, [r4, o_SoundChannel_pseudoEchoLength] subs r0, 1 - strb r0, [r4, o_SoundChannel_iel] + strb r0, [r4, o_SoundChannel_pseudoEchoLength] bhi _081DD006 _081DCFB0: movs r0, 0 - strb r0, [r4, o_SoundChannel_status] + strb r0, [r4, o_SoundChannel_statusFlags] b _081DD240 _081DCFB6: - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r6 beq _081DCFD6 ldrb r0, [r4, o_SoundChannel_release] muls r5, r0 lsrs r5, 8 - ldrb r0, [r4, o_SoundChannel_iev] + ldrb r0, [r4, o_SoundChannel_pseudoEchoVolume] cmp r5, r0 bhi _081DD006 _081DCFC8: - ldrb r5, [r4, o_SoundChannel_iev] + ldrb r5, [r4, o_SoundChannel_pseudoEchoVolume] cmp r5, 0 beq _081DCFB0 - movs r0, 0x4 + movs r0, SOUND_CHANNEL_SF_IEC orrs r6, r0 - strb r6, [r4, o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] b _081DD006 _081DCFD6: - movs r2, 0x3 + movs r2, SOUND_CHANNEL_SF_ENV ands r2, r6 - cmp r2, 0x2 + cmp r2, SOUND_CHANNEL_SF_ENV_DECAY bne _081DCFF4 ldrb r0, [r4, o_SoundChannel_decay] muls r5, r0 @@ -247,10 +247,10 @@ _081DCFD6: adds r5, r0, 0 beq _081DCFC8 subs r6, 0x1 - strb r6, [r4, o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] b _081DD006 _081DCFF4: - cmp r2, 0x3 + cmp r2, SOUND_CHANNEL_SF_ENV_ATTACK bne _081DD006 _081DCFF8: ldrb r0, [r4, o_SoundChannel_attack] @@ -259,9 +259,9 @@ _081DCFF8: bcc _081DD006 movs r5, 0xFF subs r6, 0x1 - strb r6, [r4, o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] _081DD006: - strb r5, [r4, o_SoundChannel_ev] + strb r5, [r4, o_SoundChannel_envelopeVolume] ldr r0, [sp, 0x18] ldrb r0, [r0, o_SoundChannel_release] adds r0, 0x1 @@ -270,37 +270,37 @@ _081DD006: ldrb r0, [r4, o_SoundChannel_rightVolume] muls r0, r5 lsrs r0, 8 - strb r0, [r4, o_SoundChannel_er] + strb r0, [r4, o_SoundChannel_envelopeVolumeRight] ldrb r0, [r4, o_SoundChannel_leftVolume] muls r0, r5 lsrs r0, 8 - strb r0, [r4, o_SoundChannel_el] - movs r0, 0x10 + strb r0, [r4, o_SoundChannel_envelopeVolumeLeft] + movs r0, SOUND_CHANNEL_SF_LOOP ands r0, r6 str r0, [sp, 0x10] beq _081DD03A adds r0, r3, 0 - adds r0, 0x10 - ldr r1, [r3, 0x8] + adds r0, o_WaveData_data + ldr r1, [r3, o_WaveData_loopStart] adds r0, r1 str r0, [sp, 0xC] - ldr r0, [r3, 0xC] + ldr r0, [r3, o_WaveData_size] subs r0, r1 str r0, [sp, 0x10] _081DD03A: ldr r5, [sp, 0x8] - ldr r2, [r4, o_SoundChannel_ct] - ldr r3, [r4, o_SoundChannel_cp] + ldr r2, [r4, o_SoundChannel_count] + ldr r3, [r4, o_SoundChannel_currentPointer] adr r0, _081DD044 bx r0 .arm _081DD044: str r8, [sp] ldr r9, [r4, o_SoundChannel_fw] - ldrb r10, [r4, o_SoundChannel_er] - ldrb r11, [r4, o_SoundChannel_el] + ldrb r10, [r4, o_SoundChannel_envelopeVolumeRight] + ldrb r11, [r4, o_SoundChannel_envelopeVolumeLeft] ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x30 + tst r0, TONEDATA_TYPE_CMP | TONEDATA_TYPE_REV beq _081DD068 bl sub_82DF49C b _081DD228 @@ -324,7 +324,7 @@ _081DD07C: moveq r2, 0x4 _081DD0A8: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD0B0: ldrsb r0, [r3], 0x1 mul r1, r10, r0 @@ -335,7 +335,7 @@ _081DD0B0: add r7, r1, r7, ror 8 adds r5, r5, 0x40000000 bcc _081DD0B0 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 subs r8, r8, 0x4 bgt _081DD0A8 @@ -343,7 +343,7 @@ _081DD0B0: beq _081DD22C _081DD0EC: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD0F4: ldrsb r0, [r3], 0x1 mul r1, r10, r0 @@ -357,7 +357,7 @@ _081DD0F4: _081DD118: adds r5, r5, 0x40000000 bcc _081DD0F4 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 subs r8, r8, 0x4 bgt _081DD07C @@ -383,26 +383,26 @@ _081DD164: ldrne r3, [sp, 0xC] bne _081DD118 _081DD174: - strb r2, [r4, o_SoundChannel_status] + strb r2, [r4, o_SoundChannel_statusFlags] mov r0, r5, lsr 30 bic r5, r5, 0xC0000000 rsb r0, r0, 0x3 mov r0, r0, lsl 3 mov r6, r6, ror r0 mov r7, r7, ror r0 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 b _081DD234 _081DD19C: push {r4,r12} - ldr r1, [r4, o_SoundChannel_freq] + ldr r1, [r4, o_SoundChannel_frequency] mul r4, r12, r1 ldrsb r0, [r3] ldrsb r1, [r3, 0x1]! sub r1, r1, r0 _081DD1B4: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD1BC: mul lr, r9, r1 add lr, r0, lr, asr 23 @@ -427,7 +427,7 @@ _081DD1FC: _081DD208: adds r5, r5, 0x40000000 bcc _081DD1BC - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 subs r8, r8, 0x4 bgt _081DD1B4 @@ -436,8 +436,8 @@ _081DD208: _081DD228: str r9, [r4, o_SoundChannel_fw] _081DD22C: - str r2, [r4, o_SoundChannel_ct] - str r3, [r4, o_SoundChannel_cp] + str r2, [r4, o_SoundChannel_count] + str r3, [r4, o_SoundChannel_currentPointer] _081DD234: ldr r8, [sp] add r0, pc, 0x1 @@ -468,42 +468,42 @@ _081DD25E: arm_func_start sub_82DF49C sub_82DF49C: ldr r6, [r4, o_SoundChannel_wav] - ldrb r0, [r4, o_SoundChannel_status] - tst r0, 0x20 + ldrb r0, [r4, o_SoundChannel_statusFlags] + tst r0, SOUND_CHANNEL_SF_SPECIAL bne _081DD2B4 - orr r0, r0, 0x20 - strb r0, [r4, o_SoundChannel_status] + orr r0, r0, SOUND_CHANNEL_SF_SPECIAL + strb r0, [r4, o_SoundChannel_statusFlags] ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x10 + tst r0, TONEDATA_TYPE_REV beq _081DD29C - ldr r1, [r6, 0xC] + ldr r1, [r6, o_WaveData_size] add r1, r1, r6, lsl 1 add r1, r1, 0x20 sub r3, r1, r3 - str r3, [r4, o_SoundChannel_cp] + str r3, [r4, o_SoundChannel_currentPointer] _081DD29C: - ldrh r0, [r6] + ldrh r0, [r6, o_WaveData_type] cmp r0, 0 beq _081DD2B4 sub r3, r3, r6 sub r3, r3, 0x10 - str r3, [r4, o_SoundChannel_cp] + str r3, [r4, o_SoundChannel_currentPointer] _081DD2B4: push {r8,r12,lr} mov r10, r10, lsl 16 mov r11, r11, lsl 16 - ldr r1, [r4, o_SoundChannel_freq] + ldr r1, [r4, o_SoundChannel_frequency] ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x8 + tst r0, TONEDATA_TYPE_FIX movne r8, 0x800000 muleq r8, r12, r1 - ldrh r0, [r6] + ldrh r0, [r6, o_WaveData_type] cmp r0, 0 beq _081DD468 mov r0, 0xFF000000 str r0, [r4, o_SoundChannel_xpi] ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x10 + tst r0, TONEDATA_TYPE_REV bne _081DD3C0 bl sub_82DF758 mov r0, r1 @@ -512,7 +512,7 @@ _081DD2B4: sub r1, r1, r0 _081DD308: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD310: mul lr, r9, r1 add lr, r0, lr, asr 23 @@ -543,7 +543,7 @@ _081DD364: _081DD370: adds r5, r5, 0x40000000 bcc _081DD310 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 ldr r6, [sp] subs r6, r6, 0x4 @@ -556,7 +556,7 @@ _081DD398: cmp r0, 0 beq _081DD4F4 ldr r3, [r4, o_SoundChannel_wav] - ldr r3, [r3, 0x8] + ldr r3, [r3, o_WaveData_loopStart] rsb lr, r2, 0 _081DD3B0: adds r2, r2, r0 @@ -572,7 +572,7 @@ _081DD3C0: sub r1, r1, r0 _081DD3D8: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD3E0: mul lr, r9, r1 add lr, r0, lr, asr 23 @@ -603,7 +603,7 @@ _081DD434: _081DD440: adds r5, r5, 0x40000000 bcc _081DD3E0 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 ldr r6, [sp] subs r6, r6, 0x4 @@ -613,7 +613,7 @@ _081DD440: b _081DD4F0 _081DD468: ldrb r0, [r4, o_SoundChannel_type] - tst r0, 0x10 + tst r0, TONEDATA_TYPE_REV beq _081DD4F0 ldrsb r0, [r3, -0x1]! ldrsb r1, [r3, -0x1] @@ -653,7 +653,7 @@ _081DD4F0: pop {r8,r12,pc} _081DD4F4: mov r2, 0 - strb r2, [r4, o_SoundChannel_status] + strb r2, [r4, o_SoundChannel_statusFlags] mov r0, r5, lsr 30 bic r5, r5, 0xC0000000 rsb r0, r0, 0x3 @@ -723,24 +723,24 @@ SoundMainBTM: thumb_func_start RealClearChain RealClearChain: - ldr r3, [r0, 0x2C] + ldr r3, [r0, o_SoundChannel_track] cmp r3, 0 beq _081DD5E2 - ldr r1, [r0, 0x34] - ldr r2, [r0, 0x30] + ldr r1, [r0, o_SoundChannel_nextChannelPointer] + ldr r2, [r0, o_SoundChannel_prevChannelPointer] cmp r2, 0 beq _081DD5D6 - str r1, [r2, 0x34] + str r1, [r2, o_SoundChannel_nextChannelPointer] b _081DD5D8 _081DD5D6: - str r1, [r3, 0x20] + str r1, [r3, o_MusicPlayerTrack_chan] _081DD5D8: cmp r1, 0 beq _081DD5DE - str r2, [r1, 0x30] + str r2, [r1, o_SoundChannel_prevChannelPointer] _081DD5DE: movs r1, 0 - str r1, [r0, 0x2C] + str r1, [r0, o_SoundChannel_track] _081DD5E2: bx lr thumb_func_end RealClearChain @@ -753,22 +753,22 @@ ply_fine: cmp r4, 0 beq ply_fine_done ply_fine_loop: - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq ply_fine_ok - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP orrs r1, r0 - strb r1, [r4] + strb r1, [r4, o_SoundChannel_statusFlags] ply_fine_ok: adds r0, r4, 0 bl RealClearChain - ldr r4, [r4, 0x34] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne ply_fine_loop ply_fine_done: movs r0, 0 - strb r0, [r5] + strb r0, [r5, o_MusicPlayerTrack_flags] pop {r4,r5} pop {r0} bx r0 @@ -818,10 +818,10 @@ lt_MPlayJumpTableTemplate: .word gMPlayJumpTableTemplate thumb_func_start ld_r3_tp_adr_i ld_r3_tp_adr_i: - ldr r2, [r1, 0x40] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] _081DD64A: adds r3, r2, 0x1 - str r3, [r1, 0x40] + str r3, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] b chk_adr_r2 thumb_func_end ld_r3_tp_adr_i @@ -952,13 +952,13 @@ ply_voice: lsls r2, 2 ldr r3, [r0, o_MusicPlayerInfo_tone] adds r2, r3 - ldr r3, [r2] + ldr r3, [r2, o_ToneData_type] bl chk_adr_r2 str r3, [r1, o_MusicPlayerTrack_ToneData_type] - ldr r3, [r2, 0x4] + ldr r3, [r2, o_ToneData_wav] bl chk_adr_r2 str r3, [r1, o_MusicPlayerTrack_ToneData_wav] - ldr r3, [r2, 0x8] + ldr r3, [r2, o_ToneData_attack] bl chk_adr_r2 str r3, [r1, o_MusicPlayerTrack_ToneData_attack] bx r12 @@ -970,7 +970,7 @@ ply_vol: bl ld_r3_tp_adr_i strb r3, [r1, o_MusicPlayerTrack_vol] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0x3 + movs r2, MPT_FLG_VOLCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 @@ -980,10 +980,10 @@ ply_vol: ply_pan: mov r12, lr bl ld_r3_tp_adr_i - subs r3, 0x40 + subs r3, C_V strb r3, [r1, o_MusicPlayerTrack_pan] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0x3 + movs r2, MPT_FLG_VOLCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 @@ -993,10 +993,10 @@ ply_pan: ply_bend: mov r12, lr bl ld_r3_tp_adr_i - subs r3, 0x40 + subs r3, C_V strb r3, [r1, o_MusicPlayerTrack_bend] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xC + movs r2, MPT_FLG_PITCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 @@ -1008,7 +1008,7 @@ ply_bendr: bl ld_r3_tp_adr_i strb r3, [r1, o_MusicPlayerTrack_bendRange] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xC + movs r2, MPT_FLG_PITCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 @@ -1031,7 +1031,7 @@ ply_modt: beq _081DD7AA strb r3, [r1, o_MusicPlayerTrack_modT] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xF + movs r2, MPT_FLG_VOLCHG | MPT_FLG_PITCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] _081DD7AA: @@ -1042,10 +1042,10 @@ _081DD7AA: ply_tune: mov r12, lr bl ld_r3_tp_adr_i - subs r3, 0x40 + subs r3, C_V strb r3, [r1, o_MusicPlayerTrack_tune] ldrb r3, [r1, o_MusicPlayerTrack_flags] - movs r2, 0xC + movs r2, MPT_FLG_PITCHG orrs r3, r2 strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 @@ -1174,8 +1174,8 @@ _081DD874: movs r3, 0x1 movs r4, 0 _081DD87C: - ldrb r0, [r5] - movs r1, 0x80 + ldrb r0, [r5, o_MusicPlayerTrack_flags] + movs r1, MPT_FLG_EXIST tst r1, r0 bne _081DD886 b _081DD998 @@ -1187,36 +1187,36 @@ _081DD886: cmp r4, 0 beq _081DD8BA _081DD892: - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq _081DD8AE - ldrb r0, [r4, 0x10] + ldrb r0, [r4, o_SoundChannel_gateTime] cmp r0, 0 beq _081DD8B4 subs r0, 0x1 - strb r0, [r4, 0x10] + strb r0, [r4, o_SoundChannel_gateTime] bne _081DD8B4 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP orrs r1, r0 - strb r1, [r4] + strb r1, [r4, o_SoundChannel_statusFlags] b _081DD8B4 _081DD8AE: adds r0, r4, 0 bl ClearChain _081DD8B4: - ldr r4, [r4, 0x34] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne _081DD892 _081DD8BA: ldrb r3, [r5, o_MusicPlayerTrack_flags] - movs r0, 0x40 + movs r0, MPT_FLG_START tst r0, r3 beq _081DD938 adds r0, r5, 0 bl Clear64byte - movs r0, 0x80 - strb r0, [r5] + movs r0, MPT_FLG_EXIST + strb r0, [r5, o_MusicPlayerTrack_flags] movs r0, 0x2 strb r0, [r5, o_MusicPlayerTrack_bendRange] movs r0, 0x40 @@ -1319,10 +1319,10 @@ _081DD972: ldrb r1, [r5, o_MusicPlayerTrack_modT] cmp r1, 0 bne _081DD98E - movs r1, 0xC + movs r1, MPT_FLG_PITCHG b _081DD990 _081DD98E: - movs r1, 0x3 + movs r1, MPT_FLG_VOLCHG _081DD990: orrs r0, r1 strb r0, [r5, o_MusicPlayerTrack_flags] @@ -1332,7 +1332,7 @@ _081DD994: _081DD998: subs r6, 0x1 ble _081DD9A4 - movs r0, 0x50 + movs r0, MusicPlayerTrack_size adds r5, r0 lsls r3, 1 b _081DD87C @@ -1349,10 +1349,10 @@ _081DD9A4: _081DD9B6: str r4, [r7, o_MusicPlayerInfo_status] ldrh r0, [r7, o_MusicPlayerInfo_tempoC] - subs r0, 0x96 + subs r0, 150 _081DD9BC: strh r0, [r7, o_MusicPlayerInfo_tempoC] - cmp r0, 0x96 + cmp r0, 150 bcc _081DD9C4 b _081DD874 _081DD9C4: @@ -1363,7 +1363,7 @@ _081DD9C8: movs r1, 0x80 tst r1, r0 beq _081DDA62 - movs r1, 0xF + movs r1, MPT_FLG_VOLCHG | MPT_FLG_PITCHG tst r1, r0 beq _081DDA62 mov r9, r2 @@ -1374,8 +1374,8 @@ _081DD9C8: cmp r4, 0 beq _081DDA58 _081DD9E6: - ldrb r1, [r4, o_SoundChannel_status] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 bne _081DD9F6 adds r0, r4, 0 @@ -1383,26 +1383,26 @@ _081DD9E6: b _081DDA52 _081DD9F6: ldrb r0, [r4, o_SoundChannel_type] - movs r6, 0x7 + movs r6, TONEDATA_TYPE_CGB ands r6, r0 ldrb r3, [r5, o_MusicPlayerTrack_flags] - movs r0, 0x3 + movs r0, MPT_FLG_VOLCHG tst r0, r3 beq _081DDA14 bl ChnVolSetAsm cmp r6, 0 beq _081DDA14 - ldrb r0, [r4, o_CgbChannel_mo] + ldrb r0, [r4, o_CgbChannel_modify] movs r1, 0x1 orrs r0, r1 - strb r0, [r4, o_CgbChannel_mo] + strb r0, [r4, o_CgbChannel_modify] _081DDA14: ldrb r3, [r5, o_MusicPlayerTrack_flags] - movs r0, 0xC + movs r0, MPT_FLG_PITCHG tst r0, r3 beq _081DDA52 - ldrb r1, [r4, o_SoundChannel_ky] - movs r0, 0x8 + ldrb r1, [r4, o_SoundChannel_key] + movs r0, o_MusicPlayerTrack_keyM ldrsb r0, [r5, r0] adds r2, r1, r0 bpl _081DDA28 @@ -1416,20 +1416,20 @@ _081DDA28: ldrb r2, [r5, o_MusicPlayerTrack_pitM] adds r0, r6, 0 bl call_r3 - str r0, [r4, o_CgbChannel_fr] - ldrb r0, [r4, o_CgbChannel_mo] - movs r1, 0x2 + str r0, [r4, o_CgbChannel_frequency] + ldrb r0, [r4, o_CgbChannel_modify] + movs r1, CGB_CHANNEL_MO_PIT orrs r0, r1 - strb r0, [r4, o_CgbChannel_mo] + strb r0, [r4, o_CgbChannel_modify] b _081DDA52 _081DDA46: adds r1, r2, 0 ldrb r2, [r5, o_MusicPlayerTrack_pitM] ldr r0, [r4, o_SoundChannel_wav] bl MidiKeyToFreq - str r0, [r4, o_SoundChannel_freq] + str r0, [r4, o_SoundChannel_frequency] _081DDA52: - ldr r4, [r4, o_SoundChannel_np] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne _081DD9E6 _081DDA58: @@ -1441,7 +1441,7 @@ _081DDA58: _081DDA62: subs r2, 0x1 ble _081DDA6C - movs r0, 0x50 + movs r0, MusicPlayerTrack_size adds r5, r0 bgt _081DD9C8 _081DDA6C: @@ -1468,7 +1468,7 @@ TrackStop: push {r4-r6,lr} adds r5, r1, 0 ldrb r1, [r5, o_MusicPlayerTrack_flags] - movs r0, 0x80 + movs r0, MPT_FLG_EXIST tst r0, r1 beq TrackStop_Done ldr r4, [r5, o_MusicPlayerTrack_chan] @@ -1476,11 +1476,11 @@ TrackStop: beq TrackStop_3 movs r6, 0 TrackStop_Loop: - ldrb r0, [r4, o_SoundChannel_status] + ldrb r0, [r4, o_SoundChannel_statusFlags] cmp r0, 0 beq TrackStop_2 ldrb r0, [r4, o_SoundChannel_type] - movs r3, 0x7 + movs r3, TONEDATA_TYPE_CGB ands r0, r3 beq TrackStop_1 ldr r3, =SOUND_INFO_PTR @@ -1488,10 +1488,10 @@ TrackStop_Loop: ldr r3, [r3, o_SoundInfo_CgbOscOff] bl call_r3 TrackStop_1: - strb r6, [r4, o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] TrackStop_2: str r6, [r4, o_SoundChannel_track] - ldr r4, [r4, o_SoundChannel_np] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne TrackStop_Loop TrackStop_3: @@ -1505,31 +1505,31 @@ TrackStop_Done: thumb_func_start ChnVolSetAsm ChnVolSetAsm: - ldrb r1, [r4, 0x12] - movs r0, 0x14 + ldrb r1, [r4, o_SoundChannel_velocity] + movs r0, o_SoundChannel_rhythmPan ldrsb r2, [r4, r0] movs r3, 0x80 adds r3, r2 muls r3, r1 - ldrb r0, [r5, 0x10] + ldrb r0, [r5, o_MusicPlayerTrack_volMR] muls r0, r3 asrs r0, 14 cmp r0, 0xFF bls _081DDAE8 movs r0, 0xFF _081DDAE8: - strb r0, [r4, 0x2] + strb r0, [r4, o_SoundChannel_rightVolume] movs r3, 0x7F subs r3, r2 muls r3, r1 - ldrb r0, [r5, 0x11] + ldrb r0, [r5, o_MusicPlayerTrack_volML] muls r0, r3 asrs r0, 14 cmp r0, 0xFF bls _081DDAFC movs r0, 0xFF _081DDAFC: - strb r0, [r4, 0x3] + strb r0, [r4, o_SoundChannel_leftVolume] bx lr thumb_func_end ChnVolSetAsm @@ -1599,32 +1599,32 @@ _081DDB68: mov r9, r1 mov r6, r9 ldrb r1, [r6] - movs r0, 0xC0 + movs r0, TONEDATA_TYPE_SPL | TONEDATA_TYPE_RHY tst r0, r1 beq _081DDB80 b _081DDCEA _081DDB80: - movs r0, 0x80 + movs r0, TONEDATA_TYPE_RHY tst r0, r2 beq _081DDB9C - ldrb r1, [r6, 0x3] + ldrb r1, [r6, o_ToneData_pan_sweep] movs r0, 0x80 tst r0, r1 beq _081DDB94 - subs r1, 0xC0 + subs r1, TONEDATA_P_S_PAN lsls r1, 1 str r1, [sp, 0x14] _081DDB94: - ldrb r3, [r6, 0x1] + ldrb r3, [r6, o_SoundChannel_type] b _081DDB9C _081DDB98: mov r9, r4 - ldrb r3, [r5, 0x5] + ldrb r3, [r5, o_MusicPlayerTrack_key] _081DDB9C: str r3, [sp, 0x8] ldr r6, [sp] - ldrb r1, [r6, 0x9] - ldrb r0, [r5, 0x1D] + ldrb r1, [r6, o_MusicPlayerInfo_priority] + ldrb r0, [r5, o_MusicPlayerTrack_priority] adds r0, r1 cmp r0, 0xFF bls _081DDBAC @@ -1632,13 +1632,13 @@ _081DDB9C: _081DDBAC: str r0, [sp, 0x10] mov r6, r9 - ldrb r0, [r6] - movs r6, 0x7 + ldrb r0, [r6, o_ToneData_type] + movs r6, TONEDATA_TYPE_CGB ands r6, r0 str r6, [sp, 0xC] beq _081DDBEC ldr r0, [sp, 0x4] - ldr r4, [r0, 0x1C] + ldr r4, [r0, o_SoundInfo_cgbChans] cmp r4, 0 bne _081DDBC4 b _081DDCEA @@ -1646,21 +1646,21 @@ _081DDBC4: subs r6, 0x1 lsls r0, r6, 6 adds r4, r0 - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_CgbChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq _081DDC40 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r1 bne _081DDC40 - ldrb r1, [r4, 0x13] + ldrb r1, [r4, o_CgbChannel_priority] ldr r0, [sp, 0x10] cmp r1, r0 bcc _081DDC40 beq _081DDBE4 b _081DDCEA _081DDBE4: - ldr r0, [r4, 0x2C] + ldr r0, [r4, o_CgbChannel_track] cmp r0, r5 bcs _081DDC40 b _081DDCEA @@ -1670,35 +1670,35 @@ _081DDBEC: movs r2, 0 mov r8, r2 ldr r4, [sp, 0x4] - ldrb r3, [r4, 0x6] - adds r4, 0x50 + ldrb r3, [r4, o_SoundInfo_maxChans] + adds r4, o_SoundInfo_chans _081DDBFA: - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq _081DDC40 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r1 beq _081DDC14 cmp r2, 0 bne _081DDC18 adds r2, 0x1 - ldrb r6, [r4, 0x13] - ldr r7, [r4, 0x2C] + ldrb r6, [r4, o_SoundChannel_priority] + ldr r7, [r4, o_SoundChannel_track] b _081DDC32 _081DDC14: cmp r2, 0 bne _081DDC34 _081DDC18: - ldrb r0, [r4, 0x13] + ldrb r0, [r4, o_SoundChannel_priority] cmp r0, r6 bcs _081DDC24 adds r6, r0, 0 - ldr r7, [r4, 0x2C] + ldr r7, [r4, o_SoundChannel_track] b _081DDC32 _081DDC24: bhi _081DDC34 - ldr r0, [r4, 0x2C] + ldr r0, [r4, o_SoundChannel_track] cmp r0, r7 bls _081DDC30 adds r7, r0, 0 @@ -1708,7 +1708,7 @@ _081DDC30: _081DDC32: mov r8, r4 _081DDC34: - adds r4, 0x40 + adds r4, SoundChannel_size subs r3, 0x1 bgt _081DDBFA mov r4, r8 @@ -1718,17 +1718,17 @@ _081DDC40: adds r0, r4, 0 bl ClearChain movs r1, 0 - str r1, [r4, 0x30] - ldr r3, [r5, 0x20] - str r3, [r4, 0x34] + str r1, [r4, o_SoundChannel_prevChannelPointer] + ldr r3, [r5, o_MusicPlayerTrack_chan] + str r3, [r4, o_SoundChannel_nextChannelPointer] cmp r3, 0 beq _081DDC54 - str r4, [r3, 0x30] + str r4, [r3, o_SoundChannel_prevChannelPointer] _081DDC54: - str r4, [r5, 0x20] - str r5, [r4, 0x2C] - ldrb r0, [r5, 0x1B] - strb r0, [r5, 0x1C] + str r4, [r5, o_MusicPlayerTrack_chan] + str r5, [r4, o_SoundChannel_track] + ldrb r0, [r5, o_MusicPlayerTrack_lfoDelay] + strb r0, [r5, o_MusicPlayerTrack_lfoDelayC] cmp r0, r1 beq _081DDC66 adds r1, r5, 0 @@ -1737,26 +1737,26 @@ _081DDC66: ldr r0, [sp] adds r1, r5, 0 bl TrkVolPitSet - ldr r0, [r5, 0x4] - str r0, [r4, 0x10] + ldr r0, [r5, o_MusicPlayerTrack_gateTime] + str r0, [r4, o_SoundChannel_gateTime] ldr r0, [sp, 0x10] - strb r0, [r4, 0x13] + strb r0, [r4, o_SoundChannel_priority] ldr r0, [sp, 0x8] - strb r0, [r4, 0x8] + strb r0, [r4, o_SoundChannel_key] ldr r0, [sp, 0x14] - strb r0, [r4, 0x14] + strb r0, [r4, o_SoundChannel_rhythmPan] mov r6, r9 - ldrb r0, [r6] - strb r0, [r4, 0x1] - ldr r7, [r6, 0x4] - str r7, [r4, 0x24] - ldr r0, [r6, 0x8] - str r0, [r4, 0x4] - ldrh r0, [r5, 0x1E] - strh r0, [r4, 0xC] + ldrb r0, [r6, o_ToneData_type] + strb r0, [r4, o_SoundChannel_type] + ldr r7, [r6, o_ToneData_wav] + str r7, [r4, o_SoundChannel_wav] + ldr r0, [r6, o_ToneData_attack] + str r0, [r4, o_SoundChannel_attack] + ldrh r0, [r5, o_MusicPlayerTrack_pseudoEchoVolume] + strh r0, [r4, o_SoundChannel_pseudoEchoVolume] bl ChnVolSetAsm - ldrb r1, [r4, 0x8] - movs r0, 0x8 + ldrb r1, [r4, o_SoundChannel_key] + movs r0, o_MusicPlayerTrack_keyM ldrsb r0, [r5, r0] adds r3, r1, r0 bpl _081DDCA0 @@ -1766,9 +1766,9 @@ _081DDCA0: cmp r6, 0 beq _081DDCCE mov r6, r9 - ldrb r0, [r6, 0x2] - strb r0, [r4, 0x1E] - ldrb r1, [r6, 0x3] + ldrb r0, [r6, o_ToneData_length] + strb r0, [r4, o_CgbChannel_length] + ldrb r1, [r6, o_ToneData_pan_sweep] movs r0, 0x80 tst r0, r1 bne _081DDCBA @@ -1778,29 +1778,29 @@ _081DDCA0: _081DDCBA: movs r1, 0x8 _081DDCBC: - strb r1, [r4, 0x1F] - ldrb r2, [r5, 0x9] + strb r1, [r4, o_CgbChannel_sweep] + ldrb r2, [r5, o_MusicPlayerTrack_pitM] adds r1, r3, 0 ldr r0, [sp, 0xC] ldr r3, [sp, 0x4] - ldr r3, [r3, 0x30] + ldr r3, [r3, o_SoundInfo_MidiKeyToCgbFreq] bl call_r3 b _081DDCDC _081DDCCE: ldr r0, [r5, o_MusicPlayerTrack_unk_3C] - str r0, [r4, 0x18] - ldrb r2, [r5, 0x9] + str r0, [r4, o_SoundChannel_count] + ldrb r2, [r5, o_MusicPlayerTrack_pitM] adds r1, r3, 0 adds r0, r7, 0 bl MidiKeyToFreq _081DDCDC: - str r0, [r4, 0x20] - movs r0, 0x80 - strb r0, [r4] - ldrb r1, [r5] + str r0, [r4, o_SoundChannel_frequency] + movs r0, SOUND_CHANNEL_SF_START + strb r0, [r4, o_SoundChannel_statusFlags] + ldrb r1, [r5, o_MusicPlayerTrack_flags] movs r0, 0xF0 ands r0, r1 - strb r0, [r5] + strb r0, [r5, o_MusicPlayerTrack_flags] _081DDCEA: add sp, 0x18 pop {r0-r7} @@ -1830,23 +1830,23 @@ _081DDD18: ldr r1, [r1, o_MusicPlayerTrack_chan] cmp r1, 0 beq _081DDD40 - movs r4, 0x83 - movs r5, 0x40 + movs r4, SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_ENV + movs r5, SOUND_CHANNEL_SF_STOP _081DDD22: - ldrb r2, [r1, o_SoundChannel_status] + ldrb r2, [r1, o_SoundChannel_statusFlags] tst r2, r4 beq _081DDD3A tst r2, r5 bne _081DDD3A - ldrb r0, [r1, o_SoundChannel_mk] + ldrb r0, [r1, o_SoundChannel_midiKey] cmp r0, r3 bne _081DDD3A - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP orrs r2, r0 - strb r2, [r1, o_SoundChannel_status] + strb r2, [r1, o_SoundChannel_statusFlags] b _081DDD40 _081DDD3A: - ldr r1, [r1, o_SoundChannel_np] + ldr r1, [r1, o_SoundChannel_nextChannelPointer] cmp r1, 0 bne _081DDD22 _081DDD40: @@ -1862,10 +1862,10 @@ clear_modM: ldrb r2, [r1, o_MusicPlayerTrack_modT] cmp r2, 0 bne _081DDD54 - movs r2, 0xC + movs r2, MPT_FLG_PITCHG b _081DDD56 _081DDD54: - movs r2, 0x3 + movs r2, MPT_FLG_VOLCHG _081DDD56: ldrb r3, [r1, o_MusicPlayerTrack_flags] orrs r3, r2 From f177c736fc722a2168a105b595888a0e6a6d5c02 Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Fri, 11 Dec 2020 16:06:18 +0100 Subject: [PATCH 118/177] more CgbSound decipher work --- include/gba/m4a_internal.h | 4 ++ src/m4a.c | 109 +++++++++++++++++-------------------- 2 files changed, 53 insertions(+), 60 deletions(-) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index e09169ab89..6ec9e38540 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -75,11 +75,15 @@ struct ToneData #define SOUND_CHANNEL_SF_ENV_ATTACK 0x03 #define SOUND_CHANNEL_SF_ENV_DECAY 0x02 #define SOUND_CHANNEL_SF_ENV_SUSTAIN 0x01 +#define SOUND_CHANNEL_SF_ENV_RELEASE 0x00 #define SOUND_CHANNEL_SF_ON (SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_STOP | SOUND_CHANNEL_SF_IEC | SOUND_CHANNEL_SF_ENV) #define CGB_CHANNEL_MO_PIT 0x02 #define CGB_CHANNEL_MO_VOL 0x01 +#define CGB_NRx2_ENV_DIR_DEC 0x00 +#define CGB_NRx2_ENV_DIR_INC 0x08 + struct CgbChannel { u8 statusFlags; diff --git a/src/m4a.c b/src/m4a.c index 3d564a5a19..99feeadd73 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -911,7 +911,7 @@ void CgbSound(void) { s32 ch; struct CgbChannel *channels; - s32 evAdd; + s32 envelopeStepTimeAndDir; s32 prevC15; struct SoundInfo *soundInfo = SOUND_INFO_PTR; vu8 *nrx0ptr; @@ -933,6 +933,7 @@ void CgbSound(void) if (!(channels->statusFlags & SOUND_CHANNEL_SF_ON)) continue; + /* 1. determine hardware channel registers */ switch (ch) { case 1: @@ -966,8 +967,9 @@ void CgbSound(void) } prevC15 = soundInfo->c15; - evAdd = *nrx2ptr; + envelopeStepTimeAndDir = *nrx2ptr; + /* 2. calculate envelope volume */ if (channels->statusFlags & SOUND_CHANNEL_SF_START) { if (!(channels->statusFlags & SOUND_CHANNEL_SF_STOP)) @@ -982,7 +984,7 @@ void CgbSound(void) // fallthrough case 2: *nrx1ptr = ((u32)channels->wavePointer << 6) + channels->length; - goto loc_82E0E30; + goto init_env_step_time_dir; case 3: if (channels->wavePointer != channels->currentPointer) { @@ -1003,8 +1005,8 @@ void CgbSound(void) default: *nrx1ptr = channels->length; *nrx3ptr = (u32)channels->wavePointer << 3; - loc_82E0E30: - evAdd = channels->attack + 8; + init_env_step_time_dir: + envelopeStepTimeAndDir = channels->attack + CGB_NRx2_ENV_DIR_INC; if (channels->length) channels->n4 = 0x40; else @@ -1015,16 +1017,17 @@ void CgbSound(void) if ((s8)(channels->attack & mask)) { channels->envelopeVolume = 0; - goto EC_MINUS; + goto envelope_step_complete; } else { - goto loc_82E0F96; + // skip attack phase if attack is instantaneous (=0) + goto envelope_decay_start; } } else { - goto loc_82E0E82; + goto oscillator_off; } } else if (channels->statusFlags & SOUND_CHANNEL_SF_IEC) @@ -1032,12 +1035,12 @@ void CgbSound(void) channels->pseudoEchoLength--; if ((s8)(channels->pseudoEchoLength & mask) <= 0) { - loc_82E0E82: + oscillator_off: CgbOscOff(ch); channels->statusFlags = 0; - goto LAST_LABEL; + goto channel_complete; } - goto loc_82E0FD6; + goto envelope_complete; } else if ((channels->statusFlags & SOUND_CHANNEL_SF_STOP) && (channels->statusFlags & SOUND_CHANNEL_SF_ENV)) { @@ -1047,46 +1050,41 @@ void CgbSound(void) { channels->modify |= CGB_CHANNEL_MO_VOL; if (ch != 3) - { - evAdd = channels->release; - } - goto EC_MINUS; + envelopeStepTimeAndDir = channels->release | CGB_NRx2_ENV_DIR_DEC; + goto envelope_step_complete; } else { - goto loc_82E0F02; + goto envelope_pseudoecho_start; } } else { - loc_82E0ED0: + envelope_step_repeat: if (channels->envelopeCounter == 0) { if (ch == 3) - { channels->modify |= CGB_CHANNEL_MO_VOL; - } + CgbModVol(channels); - if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == 0) + if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == SOUND_CHANNEL_SF_ENV_RELEASE) { channels->envelopeVolume--; if ((s8)(channels->envelopeVolume & mask) <= 0) { - loc_82E0F02: + envelope_pseudoecho_start: channels->envelopeVolume = ((channels->envelopeGoal * channels->pseudoEchoVolume) + 0xFF) >> 8; if (channels->envelopeVolume) { channels->statusFlags |= SOUND_CHANNEL_SF_IEC; channels->modify |= CGB_CHANNEL_MO_VOL; if (ch != 3) - { - evAdd = 8; - } - goto loc_82E0FD6; + envelopeStepTimeAndDir = 0 | CGB_NRx2_ENV_DIR_INC; + goto envelope_complete; } else { - goto loc_82E0E82; + goto oscillator_off; } } else @@ -1094,13 +1092,13 @@ void CgbSound(void) channels->envelopeCounter = channels->release; } } - else if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == 1) + else if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == SOUND_CHANNEL_SF_ENV_SUSTAIN) { - loc_82E0F3A: + envelope_sustain: channels->envelopeVolume = channels->sustainGoal; channels->envelopeCounter = 7; } - else if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == 2) + else if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == SOUND_CHANNEL_SF_ENV_DECAY) { int envelopeVolume, sustainGoal; @@ -1109,21 +1107,19 @@ void CgbSound(void) sustainGoal = (s8)(channels->sustainGoal); if (envelopeVolume <= sustainGoal) { - loc_82E0F5A: + envelope_sustain_start: if (channels->sustain == 0) { channels->statusFlags &= ~SOUND_CHANNEL_SF_ENV; - goto loc_82E0F02; + goto envelope_pseudoecho_start; } else { channels->statusFlags--; channels->modify |= CGB_CHANNEL_MO_VOL; if (ch != 3) - { - evAdd = 8; - } - goto loc_82E0F3A; + envelopeStepTimeAndDir = 0 | CGB_NRx2_ENV_DIR_INC; + goto envelope_sustain; } } else @@ -1136,7 +1132,7 @@ void CgbSound(void) channels->envelopeVolume++; if ((u8)(channels->envelopeVolume & mask) >= channels->envelopeGoal) { - loc_82E0F96: + envelope_decay_start: channels->statusFlags--; channels->envelopeCounter = channels->decay; if ((u8)(channels->envelopeCounter & mask)) @@ -1144,13 +1140,11 @@ void CgbSound(void) channels->modify |= CGB_CHANNEL_MO_VOL; channels->envelopeVolume = channels->envelopeGoal; if (ch != 3) - { - evAdd = channels->decay; - } + envelopeStepTimeAndDir = channels->decay | CGB_NRx2_ENV_DIR_DEC; } else { - goto loc_82E0F5A; + goto envelope_sustain_start; } } else @@ -1161,43 +1155,40 @@ void CgbSound(void) } } - EC_MINUS: + envelope_step_complete: + // every 15 frames, envelope calculation has to be done twice + // to keep up with the hardware envelope rate (1/64 s) channels->envelopeCounter--; if (prevC15 == 0) { prevC15--; - goto loc_82E0ED0; + goto envelope_step_repeat; } - loc_82E0FD6: + envelope_complete: + /* 3. apply pitch to HW registers */ if (channels->modify & CGB_CHANNEL_MO_PIT) { if (ch < 4 && (channels->type & TONEDATA_TYPE_FIX)) { - int biasH = REG_SOUNDBIAS_H; + int dac_pwm_rate = REG_SOUNDBIAS_H; - if (biasH < 64) - { + if (dac_pwm_rate < 0x40) // if PWM rate = 32768 Hz channels->frequency = (channels->frequency + 2) & 0x7fc; - } - else if (biasH < 128) - { + else if (dac_pwm_rate < 0x80) // if PWM rate = 65536 Hz channels->frequency = (channels->frequency + 1) & 0x7fe; - } } + if (ch != 4) - { *nrx3ptr = channels->frequency; - } else - { *nrx3ptr = (*nrx3ptr & 0x08) | channels->frequency; - } channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->frequency) + 1)); *nrx4ptr = (s8)(channels->n4 & mask); } - if (channels->modify & 1) + /* 4. apply envelope & volume to HW registers */ + if (channels->modify & CGB_CHANNEL_MO_VOL ) { REG_NR51 = (REG_NR51 & ~channels->panMask) | channels->pan; if (ch == 3) @@ -1212,17 +1203,15 @@ void CgbSound(void) } else { - evAdd &= 0xf; - *nrx2ptr = (channels->envelopeVolume << 4) + evAdd; + envelopeStepTimeAndDir &= 0xf; + *nrx2ptr = (channels->envelopeVolume << 4) + envelopeStepTimeAndDir; *nrx4ptr = channels->n4 | 0x80; if (ch == 1 && !(*nrx0ptr & 0x08)) - { *nrx4ptr = channels->n4 | 0x80; - } } } - LAST_LABEL: + channel_complete: channels->modify = 0; } } From 91ccf9e34328d5d47f98172051a6460223249b40 Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Sat, 12 Dec 2020 13:07:56 +0100 Subject: [PATCH 119/177] fix typo --- include/gba/m4a_internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index 6ec9e38540..2d0e1bb1cd 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -195,7 +195,7 @@ struct SoundInfo u8 freq; u8 mode; - u8 c15; // periodically counts from 14 downto 0 (15 states) + u8 c15; // periodically counts from 14 down to 0 (15 states) u8 pcmDmaPeriod; // number of V-blanks per PCM DMA u8 maxLines; u8 gap[3]; From eaff64e223d88e20134392a1058faa4edc74f200 Mon Sep 17 00:00:00 2001 From: Michael Panzlaff Date: Sat, 12 Dec 2020 13:19:08 +0100 Subject: [PATCH 120/177] remove trailing spaces --- src/m4a.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/m4a.c b/src/m4a.c index 99feeadd73..e079ba4f63 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -1188,7 +1188,7 @@ void CgbSound(void) } /* 4. apply envelope & volume to HW registers */ - if (channels->modify & CGB_CHANNEL_MO_VOL ) + if (channels->modify & CGB_CHANNEL_MO_VOL) { REG_NR51 = (REG_NR51 & ~channels->panMask) | channels->pan; if (ch == 3) From 55bc2b4bb943d3c7d4e3c94609777df335db8cf2 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sat, 12 Dec 2020 12:09:26 -0300 Subject: [PATCH 121/177] Corrected small inconsistency in move flag names --- include/constants/pokemon.h | 4 +- src/battle_script_commands.c | 2 +- src/battle_util.c | 2 +- src/data/battle_moves.h | 340 +++++++++++++++++------------------ 4 files changed, 174 insertions(+), 174 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 4cf0bd4f03..bac914fec9 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -241,10 +241,10 @@ // Battle move flags #define FLAG_MAKES_CONTACT (1 << 0) #define FLAG_PROTECT_AFFECTED (1 << 1) -#define FLAG_MAGICCOAT_AFFECTED (1 << 2) +#define FLAG_MAGIC_COAT_AFFECTED (1 << 2) #define FLAG_SNATCH_AFFECTED (1 << 3) #define FLAG_MIRROR_MOVE_AFFECTED (1 << 4) -#define FLAG_KINGSROCK_AFFECTED (1 << 5) +#define FLAG_KINGS_ROCK_AFFECTED (1 << 5) // Growth rates #define GROWTH_MEDIUM_FAST 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d43ddd5a2a..53d8be47cd 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -953,7 +953,7 @@ static void Cmd_attackcanceler(void) gHitMarker |= HITMARKER_OBEYS; - if (gProtectStructs[gBattlerTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED) + if (gProtectStructs[gBattlerTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGIC_COAT_AFFECTED) { PressurePPLose(gBattlerAttacker, gBattlerTarget, MOVE_MAGIC_COAT); gProtectStructs[gBattlerTarget].bounceMove = 0; diff --git a/src/battle_util.c b/src/battle_util.c index 7025f0e3f5..a30145ea44 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3818,7 +3818,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED && (Random() % 100) < atkHoldEffectParam - && gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED + && gBattleMoves[gCurrentMove].flags & FLAG_KINGS_ROCK_AFFECTED && gBattleMons[gBattlerTarget].hp) { gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_FLINCH; diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 008d7d7845..f78fa2c8c7 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -23,7 +23,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_KARATE_CHOP] = @@ -36,7 +36,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DOUBLE_SLAP] = @@ -49,7 +49,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_COMET_PUNCH] = @@ -62,7 +62,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MEGA_PUNCH] = @@ -75,7 +75,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_PAY_DAY] = @@ -88,7 +88,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FIRE_PUNCH] = @@ -140,7 +140,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_VICE_GRIP] = @@ -153,7 +153,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_GUILLOTINE] = @@ -179,7 +179,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWORDS_DANCE] = @@ -205,7 +205,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_GUST] = @@ -218,7 +218,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_WING_ATTACK] = @@ -231,7 +231,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_WHIRLWIND] = @@ -257,7 +257,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BIND] = @@ -270,7 +270,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SLAM] = @@ -283,7 +283,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_VINE_WHIP] = @@ -296,7 +296,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_STOMP] = @@ -322,7 +322,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MEGA_KICK] = @@ -335,7 +335,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_JUMP_KICK] = @@ -348,7 +348,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ROLLING_KICK] = @@ -361,7 +361,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SAND_ATTACK] = @@ -374,7 +374,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_HEADBUTT] = @@ -400,7 +400,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FURY_ATTACK] = @@ -413,7 +413,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_HORN_DRILL] = @@ -439,7 +439,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BODY_SLAM] = @@ -465,7 +465,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TAKE_DOWN] = @@ -478,7 +478,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_THRASH] = @@ -491,7 +491,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DOUBLE_EDGE] = @@ -504,7 +504,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TAIL_WHIP] = @@ -517,7 +517,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_POISON_STING] = @@ -556,7 +556,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_LEER] = @@ -569,7 +569,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_BITE] = @@ -595,7 +595,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_ROAR] = @@ -621,7 +621,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_SUPERSONIC] = @@ -634,7 +634,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_SONIC_BOOM] = @@ -647,7 +647,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DISABLE] = @@ -725,7 +725,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_HYDRO_PUMP] = @@ -738,7 +738,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SURF] = @@ -751,7 +751,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ICE_BEAM] = @@ -829,7 +829,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_PECK] = @@ -842,7 +842,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DRILL_PECK] = @@ -855,7 +855,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SUBMISSION] = @@ -868,7 +868,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_LOW_KICK] = @@ -881,7 +881,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_COUNTER] = @@ -907,7 +907,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_STRENGTH] = @@ -920,7 +920,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ABSORB] = @@ -959,7 +959,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_GROWTH] = @@ -985,7 +985,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SOLAR_BEAM] = @@ -998,7 +998,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_POISON_POWDER] = @@ -1011,7 +1011,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_STUN_SPORE] = @@ -1024,7 +1024,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_SLEEP_POWDER] = @@ -1037,7 +1037,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_PETAL_DANCE] = @@ -1050,7 +1050,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_STRING_SHOT] = @@ -1063,7 +1063,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_DRAGON_RAGE] = @@ -1076,7 +1076,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FIRE_SPIN] = @@ -1089,7 +1089,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_THUNDER_SHOCK] = @@ -1128,7 +1128,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_THUNDER] = @@ -1154,7 +1154,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_EARTHQUAKE] = @@ -1167,7 +1167,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FISSURE] = @@ -1193,7 +1193,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TOXIC] = @@ -1206,7 +1206,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_CONFUSION] = @@ -1245,7 +1245,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_MEDITATE] = @@ -1284,7 +1284,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 1, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_RAGE] = @@ -1297,7 +1297,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TELEPORT] = @@ -1323,7 +1323,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MIMIC] = @@ -1349,7 +1349,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_DOUBLE_TEAM] = @@ -1414,7 +1414,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_CONFUSE_RAY] = @@ -1427,7 +1427,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_WITHDRAW] = @@ -1531,7 +1531,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_METRONOME] = @@ -1570,7 +1570,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_EGG_BOMB] = @@ -1583,7 +1583,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_LICK] = @@ -1661,7 +1661,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CLAMP] = @@ -1674,7 +1674,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWIFT] = @@ -1687,7 +1687,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SKULL_BASH] = @@ -1700,7 +1700,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SPIKE_CANNON] = @@ -1713,7 +1713,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CONSTRICT] = @@ -1778,7 +1778,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_GLARE] = @@ -1791,7 +1791,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_DREAM_EATER] = @@ -1817,7 +1817,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_BARRAGE] = @@ -1830,7 +1830,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_LEECH_LIFE] = @@ -1856,7 +1856,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_SKY_ATTACK] = @@ -1869,7 +1869,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TRANSFORM] = @@ -1921,7 +1921,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_FLASH] = @@ -1934,7 +1934,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_PSYWAVE] = @@ -1947,7 +1947,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SPLASH] = @@ -1986,7 +1986,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_EXPLOSION] = @@ -1999,7 +1999,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FURY_SWIPES] = @@ -2012,7 +2012,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BONEMERANG] = @@ -2025,7 +2025,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_REST] = @@ -2129,7 +2129,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SUBSTITUTE] = @@ -2155,7 +2155,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SKETCH] = @@ -2181,7 +2181,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_THIEF] = @@ -2207,7 +2207,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_MIND_READER] = @@ -2259,7 +2259,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CURSE] = @@ -2285,7 +2285,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CONVERSION_2] = @@ -2311,7 +2311,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_COTTON_SPORE] = @@ -2324,7 +2324,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_REVERSAL] = @@ -2337,7 +2337,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SPITE] = @@ -2389,7 +2389,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 1, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SCARY_FACE] = @@ -2402,7 +2402,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_FAINT_ATTACK] = @@ -2415,7 +2415,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWEET_KISS] = @@ -2428,7 +2428,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_BELLY_DRUM] = @@ -2584,7 +2584,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_LOCK_ON] = @@ -2610,7 +2610,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SANDSTORM] = @@ -2662,7 +2662,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_ROLLOUT] = @@ -2675,7 +2675,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FALSE_SWIPE] = @@ -2688,7 +2688,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWAGGER] = @@ -2701,7 +2701,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_MILK_DRINK] = @@ -2740,7 +2740,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_STEEL_WING] = @@ -2753,7 +2753,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MEAN_LOOK] = @@ -2766,7 +2766,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_ATTRACT] = @@ -2779,7 +2779,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_SLEEP_TALK] = @@ -2818,7 +2818,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_PRESENT] = @@ -2844,7 +2844,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SAFEGUARD] = @@ -2896,7 +2896,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DYNAMIC_PUNCH] = @@ -2922,7 +2922,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DRAGON_BREATH] = @@ -2935,7 +2935,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BATON_PASS] = @@ -2987,7 +2987,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWEET_SCENT] = @@ -3000,7 +3000,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_IRON_TAIL] = @@ -3039,7 +3039,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = -1, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MORNING_SUN] = @@ -3091,7 +3091,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CROSS_CHOP] = @@ -3104,7 +3104,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TWISTER] = @@ -3117,7 +3117,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_RAIN_DANCE] = @@ -3195,7 +3195,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 1, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ANCIENT_POWER] = @@ -3260,7 +3260,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BEAT_UP] = @@ -3273,7 +3273,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FAKE_OUT] = @@ -3299,7 +3299,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_STOCKPILE] = @@ -3325,7 +3325,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWALLOW] = @@ -3390,7 +3390,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_WILL_O_WISP] = @@ -3403,7 +3403,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_MEMENTO] = @@ -3637,7 +3637,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = -4, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BRICK_BREAK] = @@ -3650,7 +3650,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_YAWN] = @@ -3663,7 +3663,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_KNOCK_OFF] = @@ -3689,7 +3689,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ERUPTION] = @@ -3702,7 +3702,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SKILL_SWAP] = @@ -3793,7 +3793,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ARM_THRUST] = @@ -3806,7 +3806,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CAMOUFLAGE] = @@ -3871,7 +3871,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_TEETER_DANCE] = @@ -3923,7 +3923,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_NEEDLE_ARM] = @@ -4001,7 +4001,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_HYDRO_CANNON] = @@ -4014,7 +4014,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_METEOR_MASH] = @@ -4027,7 +4027,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ASTONISH] = @@ -4053,7 +4053,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_AROMATHERAPY] = @@ -4079,7 +4079,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_AIR_CUTTER] = @@ -4092,7 +4092,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_OVERHEAT] = @@ -4105,7 +4105,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ODOR_SLEUTH] = @@ -4144,7 +4144,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_METAL_SOUND] = @@ -4157,7 +4157,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_GRASS_WHISTLE] = @@ -4170,7 +4170,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_TICKLE] = @@ -4183,7 +4183,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_COSMIC_POWER] = @@ -4222,7 +4222,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SHADOW_PUNCH] = @@ -4235,7 +4235,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_EXTRASENSORY] = @@ -4261,7 +4261,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SAND_TOMB] = @@ -4274,7 +4274,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SHEER_COLD] = @@ -4300,7 +4300,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BULLET_SEED] = @@ -4313,7 +4313,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_AERIAL_ACE] = @@ -4326,7 +4326,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ICICLE_SPEAR] = @@ -4339,7 +4339,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_IRON_DEFENSE] = @@ -4365,7 +4365,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_HOWL] = @@ -4391,7 +4391,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FRENZY_PLANT] = @@ -4404,7 +4404,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BULK_UP] = @@ -4430,7 +4430,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MUD_SHOT] = @@ -4443,7 +4443,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_POISON_TAIL] = @@ -4456,7 +4456,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_COVET] = @@ -4482,7 +4482,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MAGICAL_LEAF] = @@ -4495,7 +4495,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_WATER_SPORT] = @@ -4534,7 +4534,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DRAGON_DANCE] = @@ -4560,7 +4560,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SHOCK_WAVE] = @@ -4573,7 +4573,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_WATER_PULSE] = @@ -4586,7 +4586,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DOOM_DESIRE] = @@ -4612,6 +4612,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, }; From abef3065d0c6f61607161d6a88a42f93824c6f77 Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Sat, 12 Dec 2020 20:29:20 -0800 Subject: [PATCH 122/177] =?UTF-8?q?Fix=20affine=20anim=20bug=20with=20Pok?= =?UTF-8?q?=C3=A9mon=20going=20in=20and=20out=20of=20balls=20without=20an?= =?UTF-8?q?=20intermediate=20screen=20transition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pokemon_animation.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index bfcf77b5c8..58c1742635 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -1041,6 +1041,15 @@ static void sub_817F77C(struct Sprite *sprite) sprite->oam.matrixNum |= (sprite->hFlip << 3); sprite->oam.affineMode = ST_OAM_AFFINE_OFF; } +#ifdef BUGFIX + else + { + // FIX: Reset these back to normal after they were changed so Poké Ball catch/release + // animations without a screen transition in between don't break + sprite->affineAnimPaused = FALSE; + sprite->affineAnims = gUnknown_082FF694; + } +#endif // BUGFIX } static void pokemonanimfunc_01(struct Sprite *sprite) From 81d95b9325ed2526ce638744408f453a8169abb4 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 12 Dec 2020 23:28:01 -0500 Subject: [PATCH 123/177] Use BUGFIX for some inline fixes --- data/battle_ai_scripts.s | 12 ++++++-- .../MossdeepCity_SpaceCenter_1F/scripts.inc | 6 +++- include/config.h | 6 ++-- src/battle_ai_script_commands.c | 6 ++-- src/battle_dome.c | 14 ++++++++-- src/battle_factory_screen.c | 6 +++- src/battle_pyramid.c | 8 ++++-- src/battle_tower.c | 28 +++++++++++++++---- src/battle_util.c | 7 +++-- src/berry_blender.c | 10 ++++++- src/contest_ai.c | 10 +++++-- src/daycare.c | 12 ++++---- src/field_effect.c | 13 +++++++-- src/frontier_pass.c | 3 ++ src/frontier_util.c | 14 ++++++++-- src/match_call.c | 10 +++++-- src/metatile_behavior.c | 9 ++++-- src/pokemon.c | 5 +++- src/pokemon_storage_system.c | 5 ++-- src/region_map.c | 4 +++ src/roulette.c | 5 ++-- src/union_room.c | 10 ++++++- 22 files changed, 157 insertions(+), 46 deletions(-) diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s index 1c7bff51c8..d1dd1caed0 100644 --- a/data/battle_ai_scripts.s +++ b/data/battle_ai_scripts.s @@ -2324,14 +2324,18 @@ AI_CV_SemiInvulnerable: @ BUG: The scripts for checking type-resistance to weather for semi-invulnerable moves are swapped @ The result is that the AI is encouraged to stall while taking damage from weather -@ To fix, swap _CheckSandstormTypes/_CheckIceType in the below script AI_CV_SemiInvulnerable2: if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_SemiInvulnerable_TryEncourage if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_SemiInvulnerable_TryEncourage if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_SemiInvulnerable_TryEncourage get_weather + .ifdef BUGFIX + if_equal AI_WEATHER_HAIL, AI_CV_SemiInvulnerable_CheckIceType + if_equal AI_WEATHER_SANDSTORM, AI_CV_SemiInvulnerable_CheckSandstormTypes + .else if_equal AI_WEATHER_HAIL, AI_CV_SemiInvulnerable_CheckSandstormTypes if_equal AI_WEATHER_SANDSTORM, AI_CV_SemiInvulnerable_CheckIceType + .endif goto AI_CV_SemiInvulnerable5 AI_CV_SemiInvulnerable_CheckSandstormTypes: @@ -2398,9 +2402,13 @@ AI_CV_Hail_ScoreDown1: AI_CV_Hail_End: end -@ BUG: Facade score is increased if the target is statused, but should be if the user is. Replace AI_TARGET with AI_USER +@ BUG: Facade score is increased if the target is statused, but should be if the user is AI_CV_Facade: + .ifdef BUGFIX + if_not_status AI_USER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End + .else if_not_status AI_TARGET, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End + .endif score +1 AI_CV_Facade_End: end diff --git a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc index 667f441146..eb081dbbbb 100644 --- a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc @@ -247,7 +247,11 @@ MossdeepCity_SpaceCenter_1F_EventScript_Grunt2:: @ 822321F copyobjectxytoperm LOCALID_STAIR_GRUNT switch VAR_FACING case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsWest - case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast @ BUG: This was meant to be case DIR_EAST + #ifdef BUGFIX + case DIR_EAST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast + #else + case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast + #endif applymovement LOCALID_STAIR_GRUNT, MossdeepCity_SpaceCenter_1F_Movement_MoveGruntFromStairs waitmovement 0 setvar VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 2 diff --git a/include/config.h b/include/config.h index 4f97a12a3b..34ce302e52 100644 --- a/include/config.h +++ b/include/config.h @@ -15,9 +15,6 @@ // printing system. Use NoCashGBAPrint() and NoCashGBAPrintf() like you // would normally use AGBPrint() and AGBPrintf(). -// NOTE: Don't try to enable assert right now as many pointers -// still exist in defines and WILL likely result in a broken ROM. - #define ENGLISH #ifdef ENGLISH @@ -34,4 +31,7 @@ #endif #endif +// Uncomment to fix some identified minor bugs +//#define BUGFIX + #endif // GUARD_CONFIG_H diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 2423cfe37e..651f9da2a8 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1613,8 +1613,10 @@ static void Cmd_if_status_not_in_party(void) if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) { - gAIScriptPtr += 10; // UB: Still bugged in Emerald. Uncomment the return statement to fix. - // return; + gAIScriptPtr += 10; + #ifdef BUGFIX + return; + #endif } } diff --git a/src/battle_dome.c b/src/battle_dome.c index ce2f3cde6a..0d1bee8cf0 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -863,7 +863,9 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 372, }, - // UB: No DUMMY_WIN_TEMPLATE at the array's end. + #ifdef UBFIX + DUMMY_WIN_TEMPLATE, + #endif }; static const struct ScanlineEffectParams sTourneyTreeScanlineEffectParams = @@ -2526,7 +2528,11 @@ static void CreateDomeOpponentMon(u8 monPartyId, u16 tournamentTrainerId, u8 tou { int i; u8 friendship = MAX_FRIENDSHIP; - u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using (DOME_TRAINERS[tournamentTrainerId].trainerId) instead of (tournamentTrainerId). As a result, all Pokemon have ivs of 3. + #ifdef BUGFIX + u8 fixedIv = GetDomeTrainerMonIvs(DOME_TRAINERS[tournamentTrainerId].trainerId); + #else + u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Using the wrong ID. As a result, all Pokemon have ivs of 3. + #endif u8 level = SetFacilityPtrsGetLevel(); CreateMonWithEVSpreadNatureOTID(&gEnemyParty[monPartyId], gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].species, @@ -5964,6 +5970,10 @@ static void DecideRoundWinners(u8 roundId) else if (tournamentId2 != 0xFF) { // BUG: points1 and points2 are not cleared at the beginning of the loop resulting in not fair results. + #ifdef BUGFIX + points1 = 0; + points2 = 0; + #endif // Calculate points for both trainers. for (monId1 = 0; monId1 < FRONTIER_PARTY_SIZE; monId1++) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index c10bbc5e4e..ba1e390060 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -3905,7 +3905,11 @@ static void Swap_ShowSummaryMonSprite(void) personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, personality, otId, TRUE, 88, 32, 15, 0xFFFF); // BUG: otId and personality should be switched. + #ifdef BUGFIX + sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + #else + sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, personality, otId, TRUE, 88, 32, 15, 0xFFFF); + #endif gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecX = 0; gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecY = 0; diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 1b220f145a..ac6d95338a 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -1757,7 +1757,9 @@ static bool8 SetPyramidObjectPositionsInAndNearSquare(u8 objType, u8 squareId) r7 &= 1; } - // free(floorLayoutOffsets); BUG: floorLayoutOffsets memory not freed + #ifdef BUGFIX + free(floorLayoutOffsets); + #endif return (numObjects / 2) > numPlacedObjects; } @@ -1809,7 +1811,9 @@ static bool8 SetPyramidObjectPositionsNearSquare(u8 objType, u8 squareId) if (r8 == 4) break; } - // free(floorLayoutOffsets); BUG: floorLayoutOffsets memory not freed + #ifdef BUGFIX + free(floorLayoutOffsets); + #endif return (numObjects / 2) > numPlacedObjects; } diff --git a/src/battle_tower.c b/src/battle_tower.c index 6fc0cd5be7..d7123f3d20 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1336,10 +1336,15 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) { for (k = 0; k < PLAYER_NAME_LENGTH; k++) { - // BUG: Wrong variable used, 'j' instead of 'k'. + #ifdef BUGFIX + if (gSaveBlock2Ptr->frontier.towerRecords[i].name[k] != newRecord->name[k]) + break; + if (newRecord->name[k] == EOS) + #else if (gSaveBlock2Ptr->frontier.towerRecords[i].name[j] != newRecord->name[j]) break; if (newRecord->name[j] == EOS) + #endif { k = PLAYER_NAME_LENGTH; break; @@ -2956,7 +2961,12 @@ static void FillPartnerParty(u16 trainerId) sStevenMons[i].species, sStevenMons[i].level, sStevenMons[i].fixedIV, - TRUE, i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures. + TRUE, + #ifdef BUGFIX + j, + #else + i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures. + #endif OT_ID_PRESET, STEVEN_OTID); for (j = 0; j < PARTY_SIZE; j++) SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_HP_EV + j, &sStevenMons[i].evs[j]); @@ -3062,9 +3072,12 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em { dst->lvlMode = src->lvlMode; dst->winStreak = src->winStreak; - // BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries. - // Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald) + // UB: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries. + #ifdef UBFIX + for (i = 0; i < ARRAY_COUNT(sRubyFacilityClassToEmerald); i++) + #else for (i = 0; i < FACILITY_CLASSES_COUNT; i++) + #endif { if (sRubyFacilityClassToEmerald[i][0] == src->facilityClass) break; @@ -3112,9 +3125,12 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru { dst->lvlMode = src->lvlMode; dst->winStreak = src->winStreak; - // BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries. - // Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald) instead + // UB: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries. + #ifdef UBFIX + for (i = 0; i < ARRAY_COUNT(sRubyFacilityClassToEmerald); i++) + #else for (i = 0; i < FACILITY_CLASSES_COUNT; i++) + #endif { if (sRubyFacilityClassToEmerald[i][1] == src->facilityClass) break; diff --git a/src/battle_util.c b/src/battle_util.c index a30145ea44..e929de091c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -536,9 +536,12 @@ void HandleAction_ThrowPokeblock(void) gBattleStruct->safariPkblThrowCounter++; if (gBattleStruct->safariEscapeFactor > 1) { - // BUG: The safariEscapeFactor is unintetionally able to become 0 (but it can not become negative!). This causes the pokeblock throw glitch. - // To fix that change the < in the if statement below to <=. + // BUG: safariEscapeFactor can become 0 below. This causes the pokeblock throw glitch. + #ifdef BUGFIX + if (gBattleStruct->safariEscapeFactor <= sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]) + #else if (gBattleStruct->safariEscapeFactor < sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]) + #endif gBattleStruct->safariEscapeFactor = 1; else gBattleStruct->safariEscapeFactor -= sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]; diff --git a/src/berry_blender.c b/src/berry_blender.c index 16ba42bd72..573affbd51 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -1852,7 +1852,9 @@ static void Task_HandleOpponent1(u8 taskId) gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; // BUG: Overrwrote above assignment. Opponent 1 can't get Best at low speed + #ifndef BUGFIX gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; + #endif } else if (sBerryBlender->speed < 1500) { @@ -2131,11 +2133,17 @@ static void UpdateOpponentScores(void) sBerryBlender->scores[i][SCORE_MISS]++; } - // BUG: Should [i][BLENDER_COMM_SCORE] below, not [BLENDER_COMM_SCORE][i] + // BUG: Should be [i][BLENDER_COMM_SCORE] below, not [BLENDER_COMM_SCORE][i] // As a result the music tempo updates if any player misses, but only if 1 specific player hits + #ifdef BUGFIX + if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_MISS + || gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_BEST + || gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_GOOD) + #else if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_MISS || gRecvCmds[BLENDER_COMM_SCORE][i] == LINKCMD_BLENDER_SCORE_BEST || gRecvCmds[BLENDER_COMM_SCORE][i] == LINKCMD_BLENDER_SCORE_GOOD) + #endif { if (sBerryBlender->speed > 1500) m4aMPlayTempoControl(&gMPlayInfo_BGM, ((sBerryBlender->speed - 750) / 20) + 256); diff --git a/src/contest_ai.c b/src/contest_ai.c index 2f048718ff..8fe339790a 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -1734,8 +1734,9 @@ static void ContestAICmd_if_user_doesnt_have_exciting_move(void) // they're checking for an effect. Checking for a specific effect would make more sense, // but given that effects are normally read as a single byte and this reads 2 bytes, it // seems reading a move was intended and the AI script is using it incorrectly. -// In any case, to fix it to correctly check for effects replace the u16 move assignment with -// u16 move = gContestMoves[gContestMons[eContestAI.contestantId].moves[i]].effect; +// The fix below aligns the function with how it's used by the script, rather than the apparent +// intention of its usage + static void ContestAICmd_check_user_has_move(void) { int hasMove = FALSE; @@ -1744,7 +1745,12 @@ static void ContestAICmd_check_user_has_move(void) for (i = 0; i < MAX_MON_MOVES; i++) { + #ifdef BUGFIX + u16 move = gContestMoves[gContestMons[eContestAI.contestantId].moves[i]].effect; + #else u16 move = gContestMons[eContestAI.contestantId].moves[i]; + #endif + if (move == targetMove) { hasMove = TRUE; diff --git a/src/daycare.c b/src/daycare.c index d849b39f3a..96f62d5bf7 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -551,13 +551,15 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) // removes position 0 (HP) then position 1 (DEF), then position 2. This is why HP and DEF // have a lower chance to be inherited in Emerald and why the IV picked for inheritance can // be repeated. Amusingly, FRLG and RS also got this wrong. They remove selectedIvs[i], which - // is not an index! This means that it can sometimes remove the wrong stat. To fix, delete - // the following two lines and uncomment the rest of the block. + // is not an index! This means that it can sometimes remove the wrong stat. + #ifndef BUGFIX selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)]; RemoveIVIndexFromList(availableIVs, i); - // u8 index = Random() % (NUM_STATS - i); - // selectedIvs[i] = availableIVs[index]; - // RemoveIVIndexFromList(availableIVs, index); + #else + u8 index = Random() % (NUM_STATS - i); + selectedIvs[i] = availableIVs[index]; + RemoveIVIndexFromList(availableIVs, index); + #endif } // Determine which parent each of the selected IVs should inherit from. diff --git a/src/field_effect.c b/src/field_effect.c index 41f1a899ce..5a18557eb9 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -3846,7 +3846,6 @@ bool8 FldEff_MoveDeoxysRock(struct Sprite* sprite) static void Task_MoveDeoxysRock(u8 taskId) { - // BUG: Possible divide by zero s16 *data = gTasks[taskId].data; struct Sprite *sprite = &gSprites[data[1]]; switch (data[0]) @@ -3854,8 +3853,16 @@ static void Task_MoveDeoxysRock(u8 taskId) case 0: data[4] = sprite->pos1.x << 4; data[5] = sprite->pos1.y << 4; - data[6] = (data[2] * 16 - data[4]) / data[8]; - data[7] = (data[3] * 16 - data[5]) / data[8]; + + // UB: Possible divide by zero + #ifdef UBFIX + #define DIVISOR (data[8] ? data[8] : 1); + #else + #define DIVISOR (data[8]) + #endif + + data[6] = (data[2] * 16 - data[4]) / DIVISOR; + data[7] = (data[3] * 16 - data[5]) / DIVISOR; data[0]++; case 1: if (data[8] != 0) diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 1b80301490..cf170b3500 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -983,6 +983,9 @@ static void Task_HandleFrontierPassInput(u8 taskId) SetMainCallback2(CB2_HideFrontierPass); DestroyTask(taskId); // BUG. The function should return here. Otherwise, it can play the same sound twice and destroy the same task twice. + #ifdef BUGFIX + return; + #endif } } diff --git a/src/frontier_util.c b/src/frontier_util.c index 83c9341d50..5955d9bf72 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -2383,13 +2383,21 @@ void ClearRankingHallRecords(void) { s32 i, j, k; + // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + #ifdef BUGFIX + u8 zero = 0; + #define ZERO (&zero) + #else + #define ZERO 0 + #endif + for (i = 0; i < HALL_FACILITIES_COUNT; i++) { for (j = 0; j < 2; j++) { for (k = 0; k < 3; k++) { - CopyTrainerId(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyTrainerId(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, ZERO); gSaveBlock2Ptr->hallRecords1P[i][j][k].name[0] = EOS; gSaveBlock2Ptr->hallRecords1P[i][j][k].winStreak = 0; } @@ -2400,8 +2408,8 @@ void ClearRankingHallRecords(void) { for (k = 0; k < 3; k++) { - CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id1, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. - CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id2, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id1, ZERO); + CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id2, ZERO); gSaveBlock2Ptr->hallRecords2P[j][k].name1[0] = EOS; gSaveBlock2Ptr->hallRecords2P[j][k].name2[0] = EOS; gSaveBlock2Ptr->hallRecords2P[j][k].winStreak = 0; diff --git a/src/match_call.c b/src/match_call.c index a39739f765..723562ade1 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1817,10 +1817,13 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) } *topicTextId = 3; break; + #ifdef BUGFIX + case FRONTIER_FACILITY_PIKE: + #else case FRONTIER_FACILITY_FACTORY: + #endif for (i = 0; i < 2; i++) { - // BUG: should be looking at battle factory records. if (streak < gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]) streak = gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]; } @@ -1848,12 +1851,15 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) } *topicTextId = 2; break; + #ifdef BUGFIX + case FRONTIER_FACILITY_FACTORY: + #else case FRONTIER_FACILITY_PIKE: + #endif for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { - // BUG: should be looking at battle pike records. if (streak < gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[i][j]) streak = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[i][j]; } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 51cc65c221..2a9304a4d8 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -970,10 +970,13 @@ bool8 MetatileBehavior_IsUnableToEmerge(u8 metatileBehavior) { // BUG: The player is unintentionally able to emerge on water doors. // Also the narrower underwater door in the underwater tileset has the wrong metatile behavior. This causes the dive glitch. - // To fix that add || metatileBehavior == MB_WATER_DOOR to the if statement below and - // change the metatile behavior of the narrower water door with porymaps tileset editor. + // To fix change the metatile behavior of the narrower water door with porymap's tileset editor. if (metatileBehavior == MB_NO_SURFACING - || metatileBehavior == MB_SEAWEED_NO_SURFACING) + || metatileBehavior == MB_SEAWEED_NO_SURFACING + #ifdef BUGFIX + || metatileBehavior == MB_WATER_DOOR + #endif + ) return TRUE; else return FALSE; diff --git a/src/pokemon.c b/src/pokemon.c index 3621284d69..7c546fcd55 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2861,8 +2861,11 @@ void CalculateMonStats(struct Pokemon *mon) currentHP = newMaxHP; else if (currentHP != 0) // BUG: currentHP is unintentionally able to become <= 0 after the instruction below. This causes the pomeg berry glitch. - // To fix that set currentHP = 1 if currentHP <= 0. currentHP += newMaxHP - oldMaxHP; + #ifdef BUGFIX + if (currentHP <= 0) + currentHP = 1; + #endif else return; } diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index eb288c978c..db8f3d2bb4 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -9329,10 +9329,11 @@ u32 GetBoxMonLevelAt(u8 boxId, u8 boxPosition) { u32 lvl; - // BUG: Missed 'else' statement. if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT && GetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], MON_DATA_SANITY_HAS_SPECIES)) lvl = GetLevelFromBoxMonExp(&gPokemonStoragePtr->boxes[boxId][boxPosition]); - // else + #ifdef BUGFIX + else + #endif lvl = 0; return lvl; diff --git a/src/region_map.c b/src/region_map.c index 49b21be078..c2a5b4e9c3 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -131,7 +131,11 @@ static const u16 sRegionMap_SpecialPlaceLocations[][2] = { {MAPSEC_UNDERWATER_105, MAPSEC_ROUTE_105}, {MAPSEC_UNDERWATER_124, MAPSEC_ROUTE_124}, + #ifdef BUGFIX + {MAPSEC_UNDERWATER_125, MAPSEC_ROUTE_125}, + #else {MAPSEC_UNDERWATER_125, MAPSEC_ROUTE_129}, // BUG: Map will incorrectly display the name of Route 129 when diving on Route 125 (for Marine Cave only) + #endif {MAPSEC_UNDERWATER_126, MAPSEC_ROUTE_126}, {MAPSEC_UNDERWATER_127, MAPSEC_ROUTE_127}, {MAPSEC_UNDERWATER_128, MAPSEC_ROUTE_128}, diff --git a/src/roulette.c b/src/roulette.c index b4d1c44631..4173edcdbe 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -463,8 +463,9 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 0xC5 }, - // BUG: Array not terminated properly - //DUMMY_WIN_TEMPLATE + #ifdef UBFIX + DUMMY_WIN_TEMPLATE, + #endif }; static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = diff --git a/src/union_room.c b/src/union_room.c index 3e80ffe37a..479792a7c6 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -478,7 +478,11 @@ static void Task_TryBecomeLinkLeader(u8 taskId) // BUG: sPlayerActivityGroupSize was meant below, not gPlayerCurrActivity // This will be false for all but ACTIVITY_BATTLE_DOUBLE and ACTIVITY_DECLINE // All this changes is which of two texts gets printed + #ifdef BUGFIX + id = (GROUP_MAX(sPlayerActivityGroupSize) == 2) ? 0 : 1; + #else id = (GROUP_MAX(gPlayerCurrActivity) == 2) ? 1 : 0; + #endif if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id])) { data->playerCount = sub_8013398(data->field_0); @@ -1320,7 +1324,11 @@ static bool32 IsPartnerActivityAcceptable(u32 activity, u32 linkGroup) if (linkGroup == 0xFF) return TRUE; - if (linkGroup <= ARRAY_COUNT(sAcceptedActivityIds)) // UB: <= may access data outside the array + #ifdef UBFIX + if (linkGroup < ARRAY_COUNT(sAcceptedActivityIds)) + #else + if (linkGroup <= ARRAY_COUNT(sAcceptedActivityIds)) + #endif { const u8 *bytes = sAcceptedActivityIds[linkGroup]; From b1197ac2da952ca289d9e5ca37b49fd05207f65b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 12 Dec 2020 23:57:25 -0500 Subject: [PATCH 124/177] UBFIX for if_status_not_in_party --- src/battle_ai_script_commands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 651f9da2a8..952868e116 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1614,7 +1614,7 @@ static void Cmd_if_status_not_in_party(void) if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) { gAIScriptPtr += 10; - #ifdef BUGFIX + #ifdef UBFIX return; #endif } From 1aca3786347e8317e01323914e6782ea3d809256 Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Sat, 12 Dec 2020 21:08:15 -0800 Subject: [PATCH 125/177] Fix name of SetDexNumberColor --- src/pokemon_summary_screen.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index ad037a5f5d..578b9768eb 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -2578,7 +2578,7 @@ static void DrawPokerusCuredSymbol(struct Pokemon *mon) // This checks if the mo ScheduleBgCopyTilemapToVram(3); } -static void SetDexNumberColor(bool8 isMonShiny) +static void SetMonPicBackgroundPalette(bool8 isMonShiny) { if (!isMonShiny) SetBgTilemapPalette(3, 1, 4, 8, 8, 0); @@ -2715,12 +2715,12 @@ static void PrintNotEggInfo(void) if (!IsMonShiny(mon)) { PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 1); - SetDexNumberColor(FALSE); + SetMonPicBackgroundPalette(FALSE); } else { PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 7); - SetDexNumberColor(TRUE); + SetMonPicBackgroundPalette(TRUE); } PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER); } @@ -2728,9 +2728,9 @@ static void PrintNotEggInfo(void) { ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER); if (!IsMonShiny(mon)) - SetDexNumberColor(FALSE); + SetMonPicBackgroundPalette(FALSE); else - SetDexNumberColor(TRUE); + SetMonPicBackgroundPalette(TRUE); } StringCopy(gStringVar1, gText_LevelSymbol); ConvertIntToDecimalStringN(gStringVar2, summary->level, STR_CONV_MODE_LEFT_ALIGN, 3); From 56ec5c65a89a3f13fa30ec5fca055346c9470ee4 Mon Sep 17 00:00:00 2001 From: Sierra A <6080951+Sierraffinity@users.noreply.github.com> Date: Sat, 12 Dec 2020 22:41:46 -0800 Subject: [PATCH 126/177] Update bugs_and_glitches.md --- docs/bugs_and_glitches.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 3d294f5cfd..d5531caf23 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -1,7 +1,7 @@ # Bugs and Glitches -These are known bugs and glitches in the original Pokémon Emerald game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash. +These are known bugs and glitches in the original Pokémon Emerald game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash. Defining the `BUGFIX` preprocessor variable will fix some of these automatically. Fixes are written in the `diff` format. If you've used Git before, this should look familiar: @@ -60,7 +60,7 @@ void CB2_InitTitleScreen(void) SetGpuReg(REG_OFFSET_BLDY, 0); ... ``` -This matches with the code of FR/LG and does what GF originally wanted to do. +This matches what FRLG does and obtains the seed differently than RS, independently of the RTC. ## Scrolling through items in the bag causes the image to flicker @@ -95,3 +95,21 @@ Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/p if (a != -2) ... ``` + +## Pokémon that have an affine transform as part of their entry animation glitch when going in and out of Poké Balls without a screen transition in between + +**Fix:** Edit sub_817F77C in [src/pokemon_animation.c](https://github.com/pret/pokeemerald/blob/master/src/pokemon_animation.c#L1028) and remove the ifdef/endif lines: + +```diff + ... +-#ifdef BUGFIX + else + { + // FIX: Reset these back to normal after they were changed so Poké Ball catch/release + // animations without a screen transition in between don't break + sprite->affineAnimPaused = FALSE; + sprite->affineAnims = gUnknown_082FF694; + } +-#endif // BUGFIX +} +``` From f24307346f1d8f0540aefc84db7463bfaa85e3ee Mon Sep 17 00:00:00 2001 From: Sierra A <6080951+Sierraffinity@users.noreply.github.com> Date: Sat, 12 Dec 2020 22:42:02 -0800 Subject: [PATCH 127/177] Update bugs_and_glitches.md --- docs/bugs_and_glitches.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index d5531caf23..670950c1cf 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -98,7 +98,7 @@ Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/p ## Pokémon that have an affine transform as part of their entry animation glitch when going in and out of Poké Balls without a screen transition in between -**Fix:** Edit sub_817F77C in [src/pokemon_animation.c](https://github.com/pret/pokeemerald/blob/master/src/pokemon_animation.c#L1028) and remove the ifdef/endif lines: +**Fix:** Edit `sub_817F77C` in [src/pokemon_animation.c](https://github.com/pret/pokeemerald/blob/master/src/pokemon_animation.c#L1028) and remove the ifdef/endif lines: ```diff ... From 70310686419fb34a16b5dfba27b6cd15f65913cc Mon Sep 17 00:00:00 2001 From: Sierra A <6080951+Sierraffinity@users.noreply.github.com> Date: Sat, 12 Dec 2020 22:42:29 -0800 Subject: [PATCH 128/177] Update bugs_and_glitches.md --- docs/bugs_and_glitches.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 670950c1cf..285718598b 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -98,7 +98,7 @@ Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/p ## Pokémon that have an affine transform as part of their entry animation glitch when going in and out of Poké Balls without a screen transition in between -**Fix:** Edit `sub_817F77C` in [src/pokemon_animation.c](https://github.com/pret/pokeemerald/blob/master/src/pokemon_animation.c#L1028) and remove the ifdef/endif lines: +**Fix:** Edit `sub_817F77C` in [src/pokemon_animation.c](https://github.com/pret/pokeemerald/blob/master/src/pokemon_animation.c#L1028): ```diff ... From 581306db7b38a71682c7c4d4320cb79a4d888269 Mon Sep 17 00:00:00 2001 From: Tim Gates Date: Sun, 13 Dec 2020 22:14:50 +1100 Subject: [PATCH 129/177] docs: fix simple typo, redunant -> redundant There is a small typo in include/constants/battle_frontier.h. Should read `redundant` rather than `redunant`. --- include/constants/battle_frontier.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h index 1a60714e8b..bbe6db81c9 100644 --- a/include/constants/battle_frontier.h +++ b/include/constants/battle_frontier.h @@ -51,7 +51,7 @@ #define MAX_BATTLE_FRONTIER_POINTS 9999 #define MAX_STREAK 9999 -// These sets of facility ids would be redunant if the order was consistent +// These sets of facility ids would be redundant if the order was consistent // The order is important for this set so that all the non-link records can be continuous #define RANKING_HALL_BATTLE_TOWER_SINGLES 0 #define RANKING_HALL_BATTLE_TOWER_DOUBLES 1 From f7a729df3079041d3cc462a44919150f4ebdf19f Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 13 Dec 2020 16:16:48 -0500 Subject: [PATCH 130/177] BUGFIX implies UBFIX --- include/config.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/config.h b/include/config.h index 34ce302e52..4c231a84de 100644 --- a/include/config.h +++ b/include/config.h @@ -23,15 +23,15 @@ #define UNITS_METRIC #endif +// Uncomment to fix some identified minor bugs +//#define BUGFIX + // Various undefined behavior bugs may or may not prevent compilation with // newer compilers. So always fix them when using a modern compiler. -#if MODERN +#if MODERN || defined(BUGFIX) #ifndef UBFIX #define UBFIX #endif #endif -// Uncomment to fix some identified minor bugs -//#define BUGFIX - #endif // GUARD_CONFIG_H From 6faa63347a9ad99d90f81c24fa41531cd20656bb Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 14 Dec 2020 21:41:30 -0500 Subject: [PATCH 131/177] document reuse of variables in link mode --- src/overworld.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/overworld.c b/src/overworld.c index dbc923e7b7..3a7eb34de2 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2908,6 +2908,9 @@ static void ZeroObjectEvent(struct ObjectEvent *objEvent) memset(objEvent, 0, sizeof(struct ObjectEvent)); } +// Note: Emerald reuses the direction and range variables during Link mode +// as special gender and direction values. The types and placement +// conflict with the usual Event Object struct, thus the definitions. #define linkGender(obj) obj->singleMovementActive // not even one can reference *byte* aligned bitfield members... #define linkDirection(obj) ((u8*)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX From 266a23b32712f6a81bc8ffeeb4dac145894747ad Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 14 Dec 2020 21:44:25 -0500 Subject: [PATCH 132/177] fix indentation --- src/menu_specialized.c | 87 +++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/src/menu_specialized.c b/src/menu_specialized.c index c1088d9f7e..7de9638931 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -903,60 +903,59 @@ static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId) } else { - boxMon = GetBoxedMonPtr(box, mon); gender = GetBoxMonGender(boxMon); level = GetLevelFromBoxMonExp(boxMon); } - if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species])) - gender = MON_GENDERLESS; + if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species])) + gender = MON_GENDERLESS; - for (str = dst; *str != EOS; str++) - ; + for (str = dst; *str != EOS; str++) + ; - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_SKIP; - *(str++) = 60; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_SKIP; + *(str++) = 60; - switch (gender) - { - default: - *(str++) = CHAR_SPACE; - break; - case MON_MALE: - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_COLOR; - *(str++) = TEXT_COLOR_RED; - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_SHADOW; - *(str++) = TEXT_COLOR_LIGHT_RED; - *(str++) = CHAR_MALE; - break; - case MON_FEMALE: - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_COLOR; - *(str++) = TEXT_COLOR_GREEN; - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_SHADOW; - *(str++) = TEXT_COLOR_LIGHT_GREEN; - *(str++) = CHAR_FEMALE; - break; - } - - *(str++) = EXT_CTRL_CODE_BEGIN; - *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - *(str++) = TEXT_COLOR_BLUE; - *(str++) = TEXT_COLOR_TRANSPARENT; - *(str++) = TEXT_COLOR_LIGHT_BLUE; - *(str++) = CHAR_SLASH; - *(str++) = CHAR_EXTRA_SYMBOL; - *(str++) = CHAR_LV_2; - str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3); + switch (gender) + { + default: *(str++) = CHAR_SPACE; - *str = EOS; + break; + case MON_MALE: + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_COLOR; + *(str++) = TEXT_COLOR_RED; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_SHADOW; + *(str++) = TEXT_COLOR_LIGHT_RED; + *(str++) = CHAR_MALE; + break; + case MON_FEMALE: + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_COLOR; + *(str++) = TEXT_COLOR_GREEN; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_SHADOW; + *(str++) = TEXT_COLOR_LIGHT_GREEN; + *(str++) = CHAR_FEMALE; + break; + } - return str; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + *(str++) = TEXT_COLOR_BLUE; + *(str++) = TEXT_COLOR_TRANSPARENT; + *(str++) = TEXT_COLOR_LIGHT_BLUE; + *(str++) = CHAR_SLASH; + *(str++) = CHAR_EXTRA_SYMBOL; + *(str++) = CHAR_LV_2; + str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3); + *(str++) = CHAR_SPACE; + *str = EOS; + + return str; } // Buffers the string in src to dest up to n chars. If src is less than n chars, fill with spaces From 68b456e7f951fa31412cff10a5a47c3f963ae61b Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 14 Dec 2020 21:51:38 -0500 Subject: [PATCH 133/177] name a2 --- src/overworld.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/overworld.c b/src/overworld.c index 3a7eb34de2..70d63680c3 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2948,13 +2948,13 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1 ObjectEventUpdateZCoord(objEvent); } -static void sub_80877DC(u8 linkPlayerId, u8 a2) +static void sub_80877DC(u8 linkPlayerId, u8 dir) { if (gLinkPlayerObjectEvents[linkPlayerId].active) { u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId; struct ObjectEvent *objEvent = &gObjectEvents[objEventId]; - linkDirection(objEvent) = a2; + linkDirection(objEvent) = dir; } } From 69cfe5ad01f135e16c330891d3b6d9fc7853e632 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 14 Dec 2020 21:54:19 -0500 Subject: [PATCH 134/177] use direction constant --- src/overworld.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/overworld.c b/src/overworld.c index 70d63680c3..72aa17929b 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2931,7 +2931,7 @@ static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 gender) objEvent->active = 1; linkGender(objEvent) = gender; - linkDirection(objEvent) = 2; + linkDirection(objEvent) = DIR_NORTH; objEvent->spriteId = 64; InitLinkPlayerObjectEventPos(objEvent, x, y); From 49bdaeb940afc98e3f98b24c9a5afe1bb8d5d86b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 16 Dec 2020 14:10:30 -0500 Subject: [PATCH 135/177] Remove redundant modern CFLAGS --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index 42837b4d30..78a2c2a4fc 100644 --- a/Makefile +++ b/Makefile @@ -69,7 +69,6 @@ OBJ_DIR := build/emerald LIBPATH := -L ../../tools/agbcc/lib else CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet -override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mcpu=arm7tdmi -fno-toplevel-reorder -Wno-pointer-to-int-cast -g override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g ROM := pokeemerald_modern.gba OBJ_DIR := build/modern From 14e2898a29e2cfddb4d1ca16cc0c3ec3e02689d7 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 20 Dec 2020 02:54:33 -0500 Subject: [PATCH 136/177] fix structs and some function logic (currently does not match) --- src/berry_crush.c | 826 +++++++++++++++++++++------------------------- 1 file changed, 383 insertions(+), 443 deletions(-) diff --git a/src/berry_crush.c b/src/berry_crush.c index 985bf8d285..bd6a12ba53 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -40,22 +40,27 @@ struct BerryCrushGame_Player { - u16 unk0; - u16 unk2; - union - { - u8 as_2d_bytes[2][8]; - u16 as_hwords[8]; - } unk4; - u8 unk14[12]; + u8 unk0[PLAYER_NAME_LENGTH + 1 + 4]; + u16 unkC; + u16 unkE; + u16 unk10; + u16 unk12; + u16 unk14; + u16 unk16; + u16 unk18; + u16 unk1A; + u8 unk1B; + u8 unk1C; }; -struct __attribute__((packed, aligned(2))) BerryCrushGame_4E +struct BerryCrushGame_4E { u16 unk0; u16 filler2; u8 unk4_0:1; u8 unk4_1:1; + u8 unk4_2:1; + u8 unk4_3:5; s8 unk5; u16 unk6; u16 unk8; @@ -63,54 +68,44 @@ struct __attribute__((packed, aligned(2))) BerryCrushGame_4E u16 unkC; }; -struct __attribute__((packed)) BerryCrushGame_40 +struct BerryCrushGame_40 { - u8 unk0[2]; - u16 unk2[6]; - struct BerryCrushGame_4E unkE; + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC; + s16 unkE; }; -struct BerryCrushGame_5C +struct BerryCrushGame_5A { u16 unk00; u8 unk02_0:1; u8 unk02_1:1; u8 unk02_2:1; u8 unk02_3:5; - u8 unk03; + s8 unk03; u16 unk04; u16 unk06; u16 unk08; u16 unk0A; }; -union BerryCrushGame_68 +struct BerryCrushGame_66 { - struct BerryCrushGame_68_x - { - struct BerryCrushGame_68_x_SubStruct - { - s32 unk00; - u16 unk04; - s16 unk06; - u16 unk08; - u16 unk0A; - u16 unk0C[2][5]; - u8 filler20[16]; - } unk00; - u8 unk30[12]; - struct BerryCrushGame_Player others[4]; - u8 fillerBC[20]; - } as_four_players; - struct BerryCrushGame_68_y - { - u8 filler00[28]; - struct BerryCrushGame_Player unk1C[5]; - u8 fillerBC[20]; - } as_five_players; + u32 unk00; + u16 unk04; + u16 unk06; + u16 unk08; + u16 unk0A; + u16 unk0C[2][5]; + u8 filler20[2][8]; }; -struct BerryCrushGame_138_C +struct BerryCrushGame_136_C { u8 unk0; u8 unk1; @@ -121,7 +116,7 @@ struct BerryCrushGame_138_C s16 unkA; }; -struct BerryCrushGame_138 +struct BerryCrushGame_136 { u8 unk0; u8 unk1; @@ -130,7 +125,7 @@ struct BerryCrushGame_138 s16 unk4; s16 unk6; s16 unk8; - const struct BerryCrushGame_138_C *unkC[5]; + const struct BerryCrushGame_136_C *unkC[5]; struct Sprite *unk20; struct Sprite *unk24[5]; struct Sprite *unk38[5]; @@ -140,6 +135,7 @@ struct BerryCrushGame_138 u8 filler81; u8 unk82; u8 unk83[5]; + u16 unk88[4][0x800]; }; struct BerryCrushGame @@ -160,7 +156,7 @@ struct BerryCrushGame u16 unk16; s16 unk18; s16 unk1A; - int unk1C; + s32 unk1C; s32 unk20; u8 unk24; u8 unk25_0:1; @@ -178,14 +174,12 @@ struct BerryCrushGame s16 unk32; s16 unk34; u8 unk36[0xA]; - struct BerryCrushGame_40 unk40; - struct BerryCrushGame_5C unk5C; - union BerryCrushGame_68 unk68; - struct BerryCrushGame_138 unk138; - u8 unk1C0[0x1000]; - u8 unk11C0[0x1000]; - u8 unk21C0[0x1000]; - u8 unk31C0[0x1000]; + u16 unk40[6]; + u16 unk4C[7]; + struct BerryCrushGame_5A unk5A; + struct BerryCrushGame_66 unk66; + struct BerryCrushGame_Player unk96[5]; + struct BerryCrushGame_136 unk136; }; static void VBlankCB(void); @@ -200,9 +194,9 @@ void sub_8022600(struct BerryCrushGame *); void sub_80226D0(struct BerryCrushGame *); void sub_8022730(struct BerryCrushGame *); void sub_8022960(struct BerryCrushGame *); -void sub_8022524(struct BerryCrushGame_138 *, u16); +void sub_8022524(struct BerryCrushGame_136 *, u16); void sub_8022B28(struct Sprite *); -void sub_8022554(struct BerryCrushGame_138 *r0); +void sub_8022554(struct BerryCrushGame_136 *r0); void sub_8024578(struct BerryCrushGame *); void sub_8024644(u8 *, u32, u32, u32, u32); static void sub_8022A20(struct Sprite *sprite); @@ -452,7 +446,7 @@ static const u8 gUnknown_082F417C[][5] = {0, 1, 3, 2, 4}, }; -static const struct BerryCrushGame_138_C gUnknown_082F4190[] = +static const struct BerryCrushGame_136_C gUnknown_082F4190[] = { { .unk0 = 0, @@ -887,7 +881,7 @@ static void GetBerryFromBag(void) else RemoveBagItem(gSpecialVar_ItemId, 1); - gBerryCrushGame->unk68.as_four_players.others[gBerryCrushGame->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX; + gBerryCrushGame->unk96[gBerryCrushGame->unk8].unkC = gSpecialVar_ItemId - FIRST_BERRY_INDEX; gBerryCrushGame->unkE = 1; gBerryCrushGame->unkF = 9; BerryCrush_SetPaletteFadeParams(gBerryCrushGame->unk36, 0, -1, 0, 16, 0, 0); @@ -916,10 +910,10 @@ static void BerryCrush_SaveResults(void) { u32 var0, var1; - var0 = gBerryCrushGame->unk68.as_four_players.unk00.unk04; + var0 = gBerryCrushGame->unk66.unk04; var0 = Q_24_8(var0); var0 = MathUtil_Div32(var0, Q_24_8(60)); - var1 = gBerryCrushGame->unk68.as_four_players.unk00.unk0A; + var1 = gBerryCrushGame->unk66.unk0A; var1 = Q_24_8(var1); var1 = MathUtil_Div32(var1, var0) & 0xFFFF; gBerryCrushGame->unk16 = var1; @@ -955,7 +949,7 @@ static void BerryCrush_SaveResults(void) break; } - gBerryCrushGame->unk1C = gBerryCrushGame->unk68.as_four_players.unk00.unk00; + gBerryCrushGame->unk1C = gBerryCrushGame->unk66.unk00; if (GiveBerryPowder(gBerryCrushGame->unk1C)) return; @@ -985,22 +979,16 @@ static void MainTask(u8 taskId) sub_8021450(gBerryCrushGame); } -#define PLAYER_UNK14(game, i) \ - ((u8 *)(game) \ - + offsetof(struct BerryCrushGame, unk68) \ - + offsetof(struct BerryCrushGame_68_x, unk30) \ - + sizeof(struct BerryCrushGame_Player) * (i)) - static void ParseName_Options(struct BerryCrushGame *arg0) { u8 i = 0; for (; i < arg0->unk9; i++) - StringCopy(PLAYER_UNK14(arg0, i), gLinkPlayers[i].name); + StringCopy(arg0->unk96[i].unk0, gLinkPlayers[i].name); for (; i < 5; i++) { - memset(PLAYER_UNK14(arg0, i), 1, PLAYER_NAME_LENGTH); - arg0->unk68.as_five_players.unk1C[i].unk14[PLAYER_NAME_LENGTH] = EOS; + memset(arg0->unk96[i].unk0, 1, PLAYER_NAME_LENGTH); + arg0->unk96[i].unk0[PLAYER_NAME_LENGTH] = EOS; } switch (gSaveBlock2Ptr->optionsTextSpeed) @@ -1046,9 +1034,9 @@ s32 InitBerryCrushDisplay(void) case 3: ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_082F32C8, ARRAY_COUNT(gUnknown_082F32C8)); - SetBgTilemapBuffer(1, game->unk1C0); - SetBgTilemapBuffer(2, game->unk21C0); - SetBgTilemapBuffer(3, game->unk31C0); + SetBgTilemapBuffer(1, game->unk136.unk88[0]); + SetBgTilemapBuffer(2, game->unk136.unk88[2]); + SetBgTilemapBuffer(3, game->unk136.unk88[3]); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(2, 0, 0); @@ -1182,7 +1170,7 @@ static int sub_8021450(struct BerryCrushGame *arg0) SetGpuReg(REG_OFFSET_BG1VOFS, -gSpriteCoordOffsetY); if (arg0->unk12 == 7) { - sub_8022524(&arg0->unk138, arg0->unk28); + sub_8022524(&arg0->unk136, arg0->unk28); } return 0; @@ -1196,7 +1184,7 @@ void sub_8021488(struct BerryCrushGame *arg0) gSpriteCoordOffsetY = -104; } -void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) +void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_136 *arg1) { u8 i; u8 spriteId; @@ -1212,7 +1200,7 @@ void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) &gUnknown_082F436C, gUnknown_082F41E8[i], gUnknown_082F41E8[i], - arg0->unk68.as_four_players.others[i].unk0 + 133); + arg0->unk96[i].unkC + 133); arg1->unk38[i] = &gSprites[spriteId]; arg1->unk38[i]->oam.priority = 3; arg1->unk38[i]->affineAnimPaused = TRUE; @@ -1271,7 +1259,7 @@ void sub_8021608(struct Sprite *sprite) } } -void sub_80216A8(struct BerryCrushGame *arg0, __attribute__((unused)) struct BerryCrushGame_138 *arg1) +void sub_80216A8(struct BerryCrushGame *arg0, __attribute__((unused)) struct BerryCrushGame_136 *arg1) { u8 i; for (i = 0; i < arg0->unk9; i++) @@ -1281,7 +1269,7 @@ void sub_80216A8(struct BerryCrushGame *arg0, __attribute__((unused)) struct Ber } } -void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) +void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_136 *arg1) { u8 sp4; struct BerryCrushGame_4E *var4E; @@ -1289,7 +1277,7 @@ void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) u16 var, var2; sp4 = 0; - var4E = &arg0->unk40.unkE; + var4E = (struct BerryCrushGame_4E *)arg0->unk40; for (i = 0; i < arg0->unk9; i++) { var = var4E->unkA >> (i * 3); @@ -1353,7 +1341,7 @@ void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) } } -bool32 sub_80218D4(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) +bool32 sub_80218D4(struct BerryCrushGame *arg0, struct BerryCrushGame_136 *arg1) { u8 i; @@ -1375,7 +1363,7 @@ bool32 sub_80218D4(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) return TRUE; } -void sub_8021944(struct BerryCrushGame_138 *arg0, u16 arg1) +void sub_8021944(struct BerryCrushGame_136 *arg0, u16 arg1) { u8 i = 0; u32 r7 = 0; @@ -1408,7 +1396,7 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) u8 r2; s32 r3; u8 r7; - union BerryCrushGame_68 * sp24 = &sp0C->unk68; + struct BerryCrushGame_66 * sp24 = &sp0C->unk66; u32 xOffset; s32 r6; @@ -1427,19 +1415,19 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) switch (sp10) { case 0: - sp1C = sp24->as_five_players.unk1C[0].unk4.as_2d_bytes[sp10][r8]; - if (r8 != 0 && sp24->as_four_players.unk00.unk0C[sp10][r8] != sp24->as_four_players.unk00.unk0C[sp10][r8 - 1]) + sp1C = sp24->filler20[sp10][r8]; + if (r8 != 0 && sp24->unk0C[sp10][r8] != sp24->unk0C[sp10][r8 - 1]) sp20 = r8; - ConvertIntToDecimalStringN(gStringVar4, sp24->as_four_players.unk00.unk0C[sp10][r8], STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar4, sp24->unk0C[sp10][r8], STR_CONV_MODE_RIGHT_ALIGN, 4); StringAppend(gStringVar4, gUnknown_082F43B4[sp10]); break; case 1: - sp1C = sp24->as_five_players.unk1C[0].unk4.as_2d_bytes[sp10][r8]; - if (r8 != 0 && sp24->as_four_players.unk00.unk0C[sp10][r8] != sp24->as_four_players.unk00.unk0C[sp10][r8 - 1]) + sp1C = sp24->filler20[sp10][r8]; + if (r8 != 0 && sp24->unk0C[sp10][r8] != sp24->unk0C[sp10][r8 - 1]) sp20 = r8; - ConvertIntToDecimalStringN(gStringVar1, sp24->as_four_players.unk00.unk0C[sp10][r8] >> 4, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, sp24->unk0C[sp10][r8] >> 4, STR_CONV_MODE_RIGHT_ALIGN, 3); r3 = 0; - r7 = sp24->as_four_players.unk00.unk0C[sp10][r8] & 15; + r7 = sp24->unk0C[sp10][r8] & 15; for (r2 = 0; r2 < 4; ++r2) if ((r7 >> (3 - r2)) & 1) r3 += sPressingSpeedConversionTable[r2]; @@ -1450,7 +1438,7 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) case 2: sp1C = r8; sp20 = r8; - r2 = sp0C->unk68.as_five_players.unk1C[r8].unk14[12]; + r2 = sp0C->unk96[r8].unkC; if (r2 >= LAST_BERRY_INDEX - FIRST_BERRY_INDEX + 2) r2 = 0; StringCopy(gStringVar1, gBerries[r2].name); @@ -1458,15 +1446,15 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) break; } xOffset = GetStringRightAlignXOffset(2, gStringVar4, sp14 - 4); - AddTextPrinterParameterized3(sp0C->unk138.unk82, 2, xOffset, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(sp0C->unk136.unk82, 2, xOffset, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); if (sp1C == sp0C->unk8) StringCopy(gStringVar3, gText_1DotBlueF700); else StringCopy(gStringVar3, gText_1DotF700); gStringVar3[0] = sp20 + CHAR_1; - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, PLAYER_UNK14(sp0C, sp1C)); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sp0C->unk96[sp1C].unk0); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gStringVar3); - AddTextPrinterParameterized3(sp0C->unk138.unk82, 2, 4, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(sp0C->unk136.unk82, 2, 4, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); } } @@ -1475,28 +1463,28 @@ void sub_8021D34(struct BerryCrushGame *r8) u8 r10 = 0; u8 r6 = 0; u32 sp0C = 0; - union BerryCrushGame_68 *sp10 = &r8->unk68; - u8 r7 = GetWindowAttribute(r8->unk138.unk82, WINDOW_HEIGHT) * 8 - 42; + struct BerryCrushGame_66 *sp10 = &r8->unk66; + u8 r7 = GetWindowAttribute(r8->unk136.unk82, WINDOW_HEIGHT) * 8 - 42; - sub_8021944(&r8->unk138, sp10->as_four_players.unk00.unk04); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimeColon); + sub_8021944(&r8->unk136, sp10->unk04); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimeColon); r6 = 176 - (u8)GetStringWidth(2, gText_SpaceSec, -1); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceSec); - ConvertIntToDecimalStringN(gStringVar1, r8->unk138.unk6, STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, r8->unk138.unk8, STR_CONV_MODE_LEADING_ZEROS, 2); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceSec); + ConvertIntToDecimalStringN(gStringVar1, r8->unk136.unk6, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar2, r8->unk136.unk8, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_XDotY2); r6 -= GetStringWidth(2, gStringVar4, -1); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); r6 -= GetStringWidth(2, gText_SpaceMin, -1); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceMin); - ConvertIntToDecimalStringN(gStringVar1, r8->unk138.unk4, STR_CONV_MODE_LEADING_ZEROS, 1); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceMin); + ConvertIntToDecimalStringN(gStringVar1, r8->unk136.unk4, STR_CONV_MODE_LEADING_ZEROS, 1); StringExpandPlaceholders(gStringVar4, gText_StrVar1); r6 -= GetStringWidth(2, gStringVar4, -1); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); r7 += 14; - AddTextPrinterParameterized3(r8->unk138.unk82, 2, 0, r7, sBerryCrushTextColorTable[0], 0, gText_PressingSpeed); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, 0, r7, sBerryCrushTextColorTable[0], 0, gText_PressingSpeed); r6 = 176 - (u8)GetStringWidth(2, gText_TimesPerSec, -1); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimesPerSec); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimesPerSec); for (; r10 < 8; ++r10) if (((u8)r8->unk16 >> (7 - r10)) & 1) sp0C += *(r10 + sPressingSpeedConversionTable); // It's accessed in a different way here for unknown reason @@ -1505,18 +1493,18 @@ void sub_8021D34(struct BerryCrushGame *r8) StringExpandPlaceholders(gStringVar4, gText_XDotY3); r6 -= GetStringWidth(2, gStringVar4, -1); if (r8->unk25_1) - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[5], 0, gStringVar4); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[5], 0, gStringVar4); else - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); r7 += 14; - AddTextPrinterParameterized3(r8->unk138.unk82, 2, 0, r7, sBerryCrushTextColorTable[0], 0, gText_Silkiness); - ConvertIntToDecimalStringN(gStringVar1, sp10->as_four_players.unk00.unk08, STR_CONV_MODE_RIGHT_ALIGN, 3); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, 0, r7, sBerryCrushTextColorTable[0], 0, gText_Silkiness); + ConvertIntToDecimalStringN(gStringVar1, sp10->unk08, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_Var1Percent); r6 = 176 - (u8)GetStringWidth(2, gStringVar4, -1); - AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); } -bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_138 *r6) +bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_136 *r6) { u8 r5; struct WindowTemplate template; @@ -1551,7 +1539,7 @@ bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_138 *r6) r6->unk80 = 5; return FALSE; case 12: - sub_80219C8(r6->unk82, 20, 4, gUnknown_082F43B4[r4->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7] + 3]); + sub_80219C8(r6->unk82, 20, 4, gUnknown_082F43B4[r4->unk66.filler20[0][7] + 3]); sub_8021A28(r4, 1, 0xA0, 8 * gUnknown_082F3344[0][r5]); r6->unk80 = 5; return FALSE; @@ -1575,8 +1563,8 @@ bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_138 *r6) void sub_802222C(struct BerryCrushGame *r4) { - ClearStdWindowAndFrameToTransparent(r4->unk138.unk82, 1); - RemoveWindow(r4->unk138.unk82); + ClearStdWindowAndFrameToTransparent(r4->unk136.unk82, 1); + RemoveWindow(r4->unk136.unk82); sub_8022600(r4); } @@ -1694,7 +1682,7 @@ void ShowBerryCrushRankings(void) gTasks[taskId].data[5] = gSaveBlock2Ptr->berryCrush.berryCrushResults[3]; } -void sub_8022524(struct BerryCrushGame_138 *r4, u16 r1) +void sub_8022524(struct BerryCrushGame_136 *r4, u16 r1) { sub_8021944(r4, r1); DigitObjUtil_PrintNumOn(0, r4->unk4); @@ -1702,7 +1690,7 @@ void sub_8022524(struct BerryCrushGame_138 *r4, u16 r1) DigitObjUtil_PrintNumOn(2, r4->unk8); } -void sub_8022554(struct BerryCrushGame_138 *r0) +void sub_8022554(struct BerryCrushGame_136 *r0) { r0->unk78[0]->invisible = TRUE; r0->unk78[1]->invisible = TRUE; @@ -1717,10 +1705,10 @@ void sub_8022588(struct BerryCrushGame *r5) for (r6 = 0; r6 < r5->unk9; ++r6) { - r5->unk138.unkC[r6] = &gUnknown_082F4190[gUnknown_082F417C[r5->unk9 - 2][r6]]; - r5->unk138.unk83[r6] = AddWindow(&gUnknown_082F32F4[r5->unk138.unkC[r6]->unk0]); - PutWindowTilemap(r5->unk138.unk83[r6]); - FillWindowPixelBuffer(r5->unk138.unk83[r6], 0); + r5->unk136.unkC[r6] = &gUnknown_082F4190[gUnknown_082F417C[r5->unk9 - 2][r6]]; + r5->unk136.unk83[r6] = AddWindow(&gUnknown_082F32F4[r5->unk136.unkC[r6]->unk0]); + PutWindowTilemap(r5->unk136.unk83[r6]); + FillWindowPixelBuffer(r5->unk136.unk83[r6], 0); } } @@ -1731,36 +1719,36 @@ void sub_8022600(struct BerryCrushGame *r6) for (r7 = 0; r7 < r6->unk9; ++r7) { - PutWindowTilemap(r6->unk138.unk83[r7]); + PutWindowTilemap(r6->unk136.unk83[r7]); if (r7 == r6->unk8) { AddTextPrinterParameterized4( - r6->unk138.unk83[r7], + r6->unk136.unk83[r7], 2, - 36 - GetStringWidth(2, PLAYER_UNK14(r6, r7), 0) / 2u, + 36 - GetStringWidth(2, r6->unk96[r7].unk0, 0) / 2u, 1, 0, 0, sBerryCrushTextColorTable[1], 0, - PLAYER_UNK14(r6, r7) + r6->unk96[r7].unk0 ); } else { AddTextPrinterParameterized4( - r6->unk138.unk83[r7], + r6->unk136.unk83[r7], 2, - 36 - GetStringWidth(2, PLAYER_UNK14(r6, r7), 0) / 2u, + 36 - GetStringWidth(2, r6->unk96[r7].unk0, 0) / 2u, 1, 0, 0, sBerryCrushTextColorTable[2], 0, - PLAYER_UNK14(r6, r7) + r6->unk96[r7].unk0 ); } - CopyWindowToVram(r6->unk138.unk83[r7], 3); + CopyWindowToVram(r6->unk136.unk83[r7], 3); } CopyBgTilemapBufferToVram(0); } @@ -1768,17 +1756,18 @@ void sub_8022600(struct BerryCrushGame *r6) void sub_80226D0(struct BerryCrushGame *r6) { u8 r5 = 0; - u8 * r4; + u16 * r4; - LZ77UnCompWram(gUnknown_08DE3FD4, gDecompressionBuffer); // required for matching + LZ77UnCompWram(gUnknown_08DE3FD4, gDecompressionBuffer); + r4 = (u16 *)gDecompressionBuffer; - for (r4 = gDecompressionBuffer; r5 < r6->unk9; ++r5) + for (; r5 < r6->unk9; ++r5) { CopyToBgTilemapBufferRect( 3, - &r4[r6->unk138.unkC[r5]->unk0 * 40], - r6->unk138.unkC[r5]->unk1, - r6->unk138.unkC[r5]->unk2, + &r4[r6->unk136.unkC[r5]->unk0 * 40], + r6->unk136.unkC[r5]->unk1, + r6->unk136.unkC[r5]->unk2, 10, 2 ); @@ -1799,25 +1788,25 @@ void sub_8022730(struct BerryCrushGame *r6) LoadCompressedSpriteSheet(&gUnknown_082F41F4[r5]); LoadSpritePalettes(gUnknown_082F421C); r2 = CreateSprite(&gUnknown_082F430C, 120, 88, 5); - r6->unk138.unk20 = &gSprites[r2]; - r6->unk138.unk20->oam.priority = 3; - r6->unk138.unk20->coordOffsetEnabled = TRUE; - r6->unk138.unk20->animPaused = TRUE; + r6->unk136.unk20 = &gSprites[r2]; + r6->unk136.unk20->oam.priority = 3; + r6->unk136.unk20->coordOffsetEnabled = TRUE; + r6->unk136.unk20->animPaused = TRUE; for (r5 = 0; r5 < r6->unk9; ++r5) { r2 = CreateSprite( &gUnknown_082F4324, - r6->unk138.unkC[r5]->unk4 + 120, - r6->unk138.unkC[r5]->unk6 + 32, + r6->unk136.unkC[r5]->unk4 + 120, + r6->unk136.unkC[r5]->unk6 + 32, 0 ); - r6->unk138.unk24[r5] = &gSprites[r2]; - r6->unk138.unk24[r5]->oam.priority = 1; - r6->unk138.unk24[r5]->invisible = TRUE; - r6->unk138.unk24[r5]->coordOffsetEnabled = TRUE; - r6->unk138.unk24[r5]->animPaused = TRUE; + r6->unk136.unk24[r5] = &gSprites[r2]; + r6->unk136.unk24[r5]->oam.priority = 1; + r6->unk136.unk24[r5]->invisible = TRUE; + r6->unk136.unk24[r5]->coordOffsetEnabled = TRUE; + r6->unk136.unk24[r5]->animPaused = TRUE; } - for (r5 = 0; r5 < ARRAY_COUNT(r6->unk138.unk4C); ++r5) + for (r5 = 0; r5 < ARRAY_COUNT(r6->unk136.unk4C); ++r5) { r2 = CreateSprite( &gUnknown_082F433C, @@ -1825,13 +1814,13 @@ void sub_8022730(struct BerryCrushGame *r6) gUnknown_082F41D2[r5][1] + 136, 6 ); - r6->unk138.unk4C[r5] = &gSprites[r2]; - r6->unk138.unk4C[r5]->oam.priority = 3; - r6->unk138.unk4C[r5]->invisible = TRUE; - r6->unk138.unk4C[r5]->animPaused = TRUE; - r6->unk138.unk4C[r5]->data[0] = r5; + r6->unk136.unk4C[r5] = &gSprites[r2]; + r6->unk136.unk4C[r5]->oam.priority = 3; + r6->unk136.unk4C[r5]->invisible = TRUE; + r6->unk136.unk4C[r5]->animPaused = TRUE; + r6->unk136.unk4C[r5]->data[0] = r5; } - for (r5 = 0; r5 < ARRAY_COUNT(r6->unk138.unk78); ++r5) + for (r5 = 0; r5 < ARRAY_COUNT(r6->unk136.unk78); ++r5) { r2 = CreateSprite( &gUnknown_082F4354, @@ -1839,16 +1828,16 @@ void sub_8022730(struct BerryCrushGame *r6) 8, 0 ); - r6->unk138.unk78[r5] = &gSprites[r2]; - r6->unk138.unk78[r5]->oam.priority = 0; - r6->unk138.unk78[r5]->invisible = FALSE; - r6->unk138.unk78[r5]->animPaused = FALSE; + r6->unk136.unk78[r5] = &gSprites[r2]; + r6->unk136.unk78[r5]->oam.priority = 0; + r6->unk136.unk78[r5]->invisible = FALSE; + r6->unk136.unk78[r5]->animPaused = FALSE; } DigitObjUtil_CreatePrinter(0, 0, &gUnknown_082F4384[0]); DigitObjUtil_CreatePrinter(1, 0, &gUnknown_082F4384[1]); DigitObjUtil_CreatePrinter(2, 0, &gUnknown_082F4384[2]); if (r6->unk12 == 1) - sub_8022554(&r6->unk138); + sub_8022554(&r6->unk136); } void sub_8022960(struct BerryCrushGame *r5) @@ -1862,17 +1851,17 @@ void sub_8022960(struct BerryCrushGame *r5) FreeSpritePaletteByTag(4); FreeSpritePaletteByTag(2); FreeSpritePaletteByTag(1); - for (; r4 < ARRAY_COUNT(r5->unk138.unk78); ++r4) - DestroySprite(r5->unk138.unk78[r4]); + for (; r4 < ARRAY_COUNT(r5->unk136.unk78); ++r4) + DestroySprite(r5->unk136.unk78[r4]); DigitObjUtil_DeletePrinter(2); DigitObjUtil_DeletePrinter(1); DigitObjUtil_DeletePrinter(0); - for (r4 = 0; r4 < ARRAY_COUNT(r5->unk138.unk4C); ++r4) - DestroySprite(r5->unk138.unk4C[r4]); + for (r4 = 0; r4 < ARRAY_COUNT(r5->unk136.unk4C); ++r4) + DestroySprite(r5->unk136.unk4C[r4]); for (r4 = 0; r4 < r5->unk9; ++r4) - DestroySprite(r5->unk138.unk24[r4]); - if (r5->unk138.unk20->inUse) - DestroySprite(r5->unk138.unk20); + DestroySprite(r5->unk136.unk24[r4]); + if (r5->unk136.unk20->inUse) + DestroySprite(r5->unk136.unk20); } static void sub_8022A20(struct Sprite *sprite) @@ -2165,9 +2154,9 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2) case 2: if (!IsLinkTaskFinished()) return 0; - memset(r5->unk40.unk2, 0, sizeof(r5->unk40.unk2)); - r5->unk40.unk2[0] = r5->unk68.as_four_players.others[r5->unk8].unk0; - SendBlock(0, r5->unk40.unk2, 2); + memset(r5->unk40, 0, sizeof(r5->unk40)); + r5->unk40[0] = r5->unk96[r5->unk8].unkC; + SendBlock(0, r5->unk40, 2); break; case 3: if (!IsLinkTaskFinished()) @@ -2179,11 +2168,11 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2) return 0; for (r3 = 0; r3 < r5->unk9; ++r3) { - r5->unk68.as_four_players.others[r3].unk0 = gBlockRecvBuffer[r3][0]; - if (r5->unk68.as_four_players.others[r3].unk0 > 0xB0) - r5->unk68.as_four_players.others[r3].unk0 = 0; - r5->unk18 += gUnknown_0858AB24[r5->unk68.as_four_players.others[r3].unk0].unk0; - r5->unk1C += gUnknown_0858AB24[r5->unk68.as_four_players.others[r3].unk0].unk1; + r5->unk96[r3].unkC = gBlockRecvBuffer[r3][0]; + if (r5->unk96[r3].unkC > 0xB0) + r5->unk96[r3].unkC = 0; + r5->unk18 += gUnknown_0858AB24[r5->unk96[r3].unkC].unk0; + r5->unk1C += gUnknown_0858AB24[r5->unk96[r3].unkC].unk1; } r5->unk10 = 0; ResetBlockReceivedFlags(); @@ -2205,41 +2194,41 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r switch (r4->unkC) { case 0: - sub_80214A8(r4, &r4->unk138); + sub_80214A8(r4, &r4->unk136); Rfu_SetLinkStandbyCallback(); break; case 1: if (!IsLinkTaskFinished()) return 0; - r4->unk138.unk0 = 0; - r4->unk138.unk1 = 0; - r4->unk138.unk2 = 0; - r4->unk138.unk3 = 0; + r4->unk136.unk0 = 0; + r4->unk136.unk1 = 0; + r4->unk136.unk2 = 0; + r4->unk136.unk3 = 0; break; case 2: - r4->unk138.unk38[r4->unk138.unk0]->callback = sub_8021608; - r4->unk138.unk38[r4->unk138.unk0]->affineAnimPaused = FALSE; + r4->unk136.unk38[r4->unk136.unk0]->callback = sub_8021608; + r4->unk136.unk38[r4->unk136.unk0]->affineAnimPaused = FALSE; PlaySE(SE_BALL_THROW); break; case 3: - if (r4->unk138.unk38[r4->unk138.unk0]->callback == sub_8021608) + if (r4->unk136.unk38[r4->unk136.unk0]->callback == sub_8021608) return 0; - r4->unk138.unk38[r4->unk138.unk0] = NULL; - ++r4->unk138.unk0; + r4->unk136.unk38[r4->unk136.unk0] = NULL; + ++r4->unk136.unk0; Rfu_SetLinkStandbyCallback(); break; case 4: if (!IsLinkTaskFinished()) return 0; - if (r4->unk138.unk0 < r4->unk9) + if (r4->unk136.unk0 < r4->unk9) { r4->unkC = 2; return 0; } - r4->unk138.unk0 = 0; + r4->unk136.unk0 = 0; break; case 5: - sub_80216A8(r4, &r4->unk138); + sub_80216A8(r4, &r4->unk136); Rfu_SetLinkStandbyCallback(); break; case 6: @@ -2264,24 +2253,24 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r if (r4->unk2A < 0) return 0; r4->unk2A = 0; - r4->unk138.unk1 = 4; - r4->unk138.unk0 = 0; - r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0]; + r4->unk136.unk1 = 4; + r4->unk136.unk0 = 0; + r4->unk136.unk2 = gUnknown_082F326C[r4->unk136.unk1][0]; PlaySE(SE_M_STRENGTH); break; case 1: - r4->unk2C = gUnknown_082F326C[r4->unk138.unk1][r4->unk138.unk0]; + r4->unk2C = gUnknown_082F326C[r4->unk136.unk1][r4->unk136.unk0]; SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); - ++r4->unk138.unk0; - if (r4->unk138.unk0 < r4->unk138.unk2) + ++r4->unk136.unk0; + if (r4->unk136.unk0 < r4->unk136.unk2) return 0; - if (r4->unk138.unk1 == 0) + if (r4->unk136.unk1 == 0) break; - --r4->unk138.unk1; - r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0]; - r4->unk138.unk0 = 0; + --r4->unk136.unk1; + r4->unk136.unk2 = gUnknown_082F326C[r4->unk136.unk1][0]; + r4->unk136.unk0 = 0; return 0; case 2: r4->unk2C = 0; @@ -2321,10 +2310,10 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r case 3: if (!IsLinkTaskFinished()) return 0; - r4->unk138.unk0 = 0; - r4->unk138.unk1 = 0; - r4->unk138.unk2 = 0; - r4->unk138.unk3 = 0; + r4->unk136.unk0 = 0; + r4->unk136.unk1 = 0; + r4->unk136.unk2 = 0; + r4->unk136.unk3 = 0; r4->unk10 = 0; if (r4->unk8 == 0) sub_8022BEC(13, 1, NULL); @@ -2341,45 +2330,44 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r void sub_802339C(struct BerryCrushGame *r4) { u8 r8 = 0; - u16 r3; - u16 *r2; u8 r7 = 0; + u16 r3 = 0; s32 r2_ = 0; - s32 r0; + struct BerryCrushGame_4E *r2; - for (r7 = 0; r7 < r4->unk9; ++r7) + for (r7 = 0; r7 < r4->unk9; r7++) { - r2 = gRecvCmds[r7]; - if ((r2[0] & 0xFF00) == RFUCMD_SEND_PACKET - && r2[1] == 2) + r2 = (struct BerryCrushGame_4E *)gRecvCmds[r7]; + if ((r2->unk0 & 0xFF00) == RFUCMD_SEND_PACKET + && r2->filler2 == 2) { - if ((u8)r2[2] & 4) + if (r2->unk4_2) { - r4->unk5C.unk02_3 |= gUnknown_082F325C[r7]; - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] = 1; - ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[3]; + r4->unk5A.unk02_3 |= gUnknown_082F325C[r7]; + r4->unk96[r7].unk1C = 1; + ++r4->unk96[r7].unk16; ++r8; - r3 = r4->unk28 - r4->unk68.as_four_players.others[r7].unk2; - if (r3 >= r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] - 1 - && r3 <= r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] + 1) + r3 = r4->unk28 - r4->unk96[r7].unkE; + if (r3 >= r4->unk96[r7].unk12 - 1 && r3 <= r4->unk96[r7].unk12 + 1) { - ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[0]; - r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] = r3; - if (r4->unk68.as_four_players.others[r7].unk4.as_hwords[0] > r4->unk68.as_four_players.others[r7].unk4.as_hwords[2]) - r4->unk68.as_four_players.others[r7].unk4.as_hwords[2] = r4->unk68.as_four_players.others[r7].unk4.as_hwords[0]; + ++r4->unk96[r7].unk10; + r4->unk96[r7].unk12 = r3; + if (r4->unk96[r7].unk10 > r4->unk96[r7].unk14) + r4->unk96[r7].unk14 = r4->unk96[r7].unk10; } else { - r4->unk68.as_four_players.others[r7].unk4.as_hwords[0] = 0; - r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] = r3; + r4->unk96[r7].unk10 = 0; + r4->unk96[r7].unk12 = r3; } - r4->unk68.as_four_players.others[r7].unk2 = r4->unk28; - if (++r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][4] > 2) - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][4] = 0; + r4->unk96[r7].unkE = r4->unk28; + ++r4->unk96[r7].unk1B; + if (r4->unk96[r7].unk1B > 2) + r4->unk96[r7].unk1B = 0; } else { - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] = 0; + r4->unk96[r7].unk1C = 0; } } } @@ -2387,10 +2375,10 @@ void sub_802339C(struct BerryCrushGame *r4) { for (r7 = 0; r7 < r4->unk9; ++r7) { - if (r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] != 0) + if (r4->unk96[r7].unk1C != 0) { - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] |= 2; - ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[4]; + r4->unk96[r7].unk1C |= 2; + ++r4->unk96[r7].unk18; } } } @@ -2400,19 +2388,18 @@ void sub_802339C(struct BerryCrushGame *r4) r8 += gUnknown_082F3264[r8 - 1]; r4->unk34 += r8; r4->unk1A += r8; - r0 = r4->unk18; - r2_ = r4->unk1A; - if (r0 - r2_ > 0) + if (r4->unk18 - r4->unk1A > 0) { - r2_ = Q_24_8(r2_); + r2_ = (s32)r4->unk1A; + r2_ <<= 8; r2_ = MathUtil_Div32(r2_, r4->unk20); - r2_ = Q_24_8_TO_INT(r2_); - r4->unk24 = r2_; + r2_ >>= 8; + r4->unk24 = (u8)r2_; } else { r4->unk24 = 32; - r4->unk5C.unk02_0 = 1; + r4->unk5A.unk02_0 = 1; } } } @@ -2421,86 +2408,83 @@ void sub_8023558(struct BerryCrushGame *r3) { u8 r6 = 0; u16 r1 = 0; + u16 r2 = 0; u8 r4 = 0; for (r4 = 0; r4 < r3->unk9; ++r4) { - if (r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] != 0) + if (r3->unk96[r4].unk1C != 0) { ++r6; - r1 = r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][4] + 1; - if (r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] & 2) + r1 = r3->unk96[r4].unk1B + 1; + if (r3->unk96[r4].unk1C & 2) r1 |= 4; r1 <<= 3 * r4; - r3->unk5C.unk08 |= r1; + r3->unk5A.unk08 |= r1; } } - r3->unk5C.unk04 = r3->unk24; + r2 = (u16)r3->unk24; + r3->unk5A.unk04 = r2; if (r6 == 0) { - if (r3->unk138.unk3 != 0) - ++r3->unk138.unk0; + if (r3->unk136.unk3 != 0) + ++r3->unk136.unk0; + } + else if (r3->unk136.unk3 != 0) + { + if (r6 != r3->unk136.unk1) + { + r3->unk136.unk1 = r6 - 1; + r3->unk136.unk2 = gUnknown_082F3290[r6 - 1][0]; + } else - goto SET_UNK5F_0; + { + ++r3->unk136.unk0; + } } else { - if (r3->unk138.unk3 != 0) - { - if (r6 != r3->unk138.unk1) - { - r3->unk138.unk1 = r6 - 1; - r3->unk138.unk2 = gUnknown_082F3290[r6 - 1][0]; - } - else - { - ++r3->unk138.unk0; - } - } - else - { - r3->unk138.unk0 = 0; - r3->unk138.unk1 = r6 - 1; - r3->unk138.unk2 = gUnknown_082F3290[r6 - 1][0]; - r3->unk138.unk3 = 1; - } + r3->unk136.unk0 = 0; + r3->unk136.unk1 = r6 - 1; + r3->unk136.unk2 = gUnknown_082F3290[r6 - 1][0]; + r3->unk136.unk3 = 1; } - if (r3->unk138.unk3 != 0) + + if (r3->unk136.unk3 != 0) { - if (r3->unk138.unk0 >= r3->unk138.unk2) + if (r3->unk136.unk0 >= r3->unk136.unk2) { - r3->unk138.unk0 = 0; - r3->unk138.unk1 = 0; - r3->unk138.unk2 = 0; - r3->unk138.unk3 = 0; + r3->unk136.unk0 = 0; + r3->unk136.unk1 = 0; + r3->unk136.unk2 = 0; + r3->unk136.unk3 = 0; r1 = 0; } else { - r1 = gUnknown_082F3290[r3->unk138.unk1][r3->unk138.unk0 + 1]; + r1 = gUnknown_082F3290[r3->unk136.unk1][r3->unk136.unk0 + 1]; } - r3->unk5C.unk03 = r1; + r3->unk5A.unk03 = (u8)r1; } else { - SET_UNK5F_0: - r3->unk5C.unk03 = 0; + r3->unk5A.unk03 = 0; } - r3->unk5C.unk06 = r3->unk26; + r3->unk5A.unk06 = r3->unk26; } void sub_80236B8(struct BerryCrushGame *r5) { if (JOY_NEW(A_BUTTON)) - r5->unk5C.unk02_2 = 1; + r5->unk5A.unk02_2 = 1; if (JOY_HELD(A_BUTTON)) { - if (r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5] < r5->unk28) - ++r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5]; + if (r5->unk96[r5->unk8].unk1A < r5->unk28) + ++r5->unk96[r5->unk8].unk1A; } - if (r5->unk8 != 0 && r5->unk5C.unk02_2 == 0) + if (r5->unk8 != 0 && r5->unk5A.unk02_2 == 0) return; - r5->unk5C.unk00 = 2; + r5->unk5A.unk00 = 2; if (r5->unk28 % 30 == 0) { if (r5->unk2E > gUnknown_082F4444[r5->unk9 - 2]) @@ -2539,7 +2523,7 @@ void sub_80236B8(struct BerryCrushGame *r5) sub_8011AC8(); r5->unk10 = 0; } - else if (r5->unk5C.unk02_3 == 0) + else if (r5->unk5A.unk02_3 == 0) { sub_8011AC8(); r5->unk10 = 0; @@ -2548,53 +2532,47 @@ void sub_80236B8(struct BerryCrushGame *r5) } if (r5->unk28 >= 36000) - r5->unk5C.unk02_0 = 1; - r5->unk5C.unk02_1 = r5->unk25_4; - r5->unk5C.unk0A = r5->unk25_5; - memcpy(r5->unk40.unk2, &r5->unk5C, sizeof(r5->unk40.unk2)); - Rfu_SendPacket(r5->unk40.unk2); + r5->unk5A.unk02_0 = 1; + r5->unk5A.unk02_1 = r5->unk25_4; + r5->unk5A.unk0A = r5->unk25_5; + memcpy(r5->unk40, &r5->unk5A, sizeof(r5->unk40)); + Rfu_SendPacket(r5->unk40); } void sub_802385C(struct BerryCrushGame *r5) { - struct BerryCrushGame_4E *r4_; -#ifndef NONMATCHING - register u32 r4 asm("r4"); - register u32 r0 asm("r0"); + u8 r4 = 0; + struct BerryCrushGame_4E *r4_ = NULL; - for (r4 = 0; r4 < r5->unk9; r4 = (u8)r0) - { - r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0; - r0 = r4 + 1; - } -#else - u8 r4; - - for (r4 = 0; r4 < r5->unk9; ++r4) - r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0; -#endif - if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET - || gRecvCmds[0][1] != 2) + for (r4 = 0; r4 < r5->unk9; r4++) + r5->unk96[r4].unk1C = 0; + if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET) { r5->unk25_2 = 0; + return; } - else + if (gRecvCmds[0][1] != 2) { - r4_ = &r5->unk40.unkE; - memcpy(r4_, gRecvCmds, sizeof(struct BerryCrushGame_4E)); - r5->unk2A = r4_->unk6; - r5->unk2C = r4_->unk5; - r5->unk28 = r4_->unk8; - sub_80216E0(r5, &r5->unk138); - if (r4_->unk4_0) - r5->unk25_3 = 1; + r5->unk25_2 = 0; + return; + } + + memcpy(r5->unk4C, gRecvCmds[0], 14); + r4_ = (struct BerryCrushGame_4E *)&r5->unk4C; + r5->unk2A = r4_->unk6; + r5->unk2C = (s16)r4_->unk5; + r5->unk28 = r4_->unk8; + sub_80216E0(r5, &(r5->unk136)); + if (r4_->unk4_0) + { + r5->unk25_3 = 1; } } static u32 sub_80238F0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1) { - memset(&r4->unk5C, 0, sizeof(r4->unk5C)); - memset(&r4->unk40.unkE, 0, sizeof(r4->unk40.unkE)); + memset(&r4->unk5A, 0, sizeof(r4->unk5A)); + memset(&r4->unk4C, 0, sizeof(r4->unk4C)); sub_802385C(r4); SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); @@ -2626,8 +2604,8 @@ static u32 sub_80238F0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 static u32 sub_8023998(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1) { - memset(&r4->unk5C, 0, sizeof(r4->unk5C)); - memset(&r4->unk40.unkE, 0, sizeof(r4->unk40.unkE)); + memset(&r4->unk5A, 0, sizeof(r4->unk5A)); + memset(&r4->unk4C, 0, sizeof(r4->unk4C)); sub_802385C(r4); SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); @@ -2662,28 +2640,28 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 r4->unk12 = 8; PlaySE(SE_M_STRENGTH); BlendPalettes(0xFFFFFFFF, 8, RGB(31, 31, 0)); - r4->unk138.unk0 = 2; + r4->unk136.unk0 = 2; break; case 1: - if (--r4->unk138.unk0 != 255) + if (--r4->unk136.unk0 != 255) return 0; BlendPalettes(0xFFFFFFFF, 0, RGB(31, 31, 0)); - r4->unk138.unk1 = 4; - r4->unk138.unk0 = 0; - r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0]; + r4->unk136.unk1 = 4; + r4->unk136.unk0 = 0; + r4->unk136.unk2 = gUnknown_082F326C[r4->unk136.unk1][0]; break; case 2: - r4->unk2C = gUnknown_082F326C[r4->unk138.unk1][r4->unk138.unk0]; + r4->unk2C = gUnknown_082F326C[r4->unk136.unk1][r4->unk136.unk0]; SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); - if (++r4->unk138.unk0 < r4->unk138.unk2) + if (++r4->unk136.unk0 < r4->unk136.unk2) return 0; - if (r4->unk138.unk1 != 0) + if (r4->unk136.unk1 != 0) { - --r4->unk138.unk1; - r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0]; - r4->unk138.unk0 = 0; + --r4->unk136.unk1; + r4->unk136.unk2 = gUnknown_082F326C[r4->unk136.unk1][0]; + r4->unk136.unk0 = 0; return 0; } break; @@ -2694,7 +2672,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 SetGpuReg(REG_OFFSET_BG3VOFS, 0); break; case 4: - if (!sub_80218D4(r4, &r4->unk138)) + if (!sub_80218D4(r4, &r4->unk136)) return 0; Rfu_SetLinkStandbyCallback(); r4->unk10 = 0; @@ -2719,16 +2697,16 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6) r5->unk12 = 9; PlaySE(SE_FAILURE); BlendPalettes(0xFFFFFFFF, 8, RGB(31, 0, 0)); - r5->unk138.unk0 = 4; + r5->unk136.unk0 = 4; break; case 1: - if (--r5->unk138.unk0 != 255) + if (--r5->unk136.unk0 != 255) return 0; BlendPalettes(0xFFFFFFFF, 0, RGB(31, 0, 0)); - r5->unk138.unk0 = 0; + r5->unk136.unk0 = 0; break; case 2: - if (!sub_80218D4(r5, &r5->unk138)) + if (!sub_80218D4(r5, &r5->unk136)) return 0; Rfu_SetLinkStandbyCallback(); r5->unk10 = 0; @@ -2753,19 +2731,19 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6) static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1) { - u8 r8, r4_; + u8 r8, r4_, r3; s32 r2; s32 r4; - u8 r6; // ??? + u16 r6; switch (r7->unkC) { case 0: - memset(r7->unk40.unk2, 0, 2 * sizeof(u16)); - if (r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5] > r7->unk28) - r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5] = r7->unk28; - r7->unk40.unk2[0] = r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5]; - SendBlock(0, r7->unk40.unk2, 2); + memset(r7->unk40, 0, sizeof(r7->unk40)); + if (r7->unk96[r7->unk8].unk1A > r7->unk28) + r7->unk96[r7->unk8].unk1A = r7->unk28; + r7->unk40[0] = r7->unk96[r7->unk8].unk1A; + SendBlock(0, r7->unk40, 2); break; case 1: if (!IsLinkTaskFinished()) @@ -2776,9 +2754,9 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 if (GetBlockReceivedStatus() != gUnknown_082F4448[r7->unk9 - 2]) return 0; for (r8 = 0; r8 < r7->unk9; ++r8) - r7->unk68.as_four_players.others[r8].unk4.as_hwords[5] = gBlockRecvBuffer[r8][0]; + r7->unk96[r8].unk1A = gBlockRecvBuffer[r8][0]; r7->unk10 = 0; - r7->unk40.unk2[0] = 0; + r7->unk40[0] = 0; ResetBlockReceivedFlags(); if (r7->unk8 == 0) r7->unkC = 3; @@ -2786,38 +2764,34 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 r7->unkC = 6; return 0; case 3: - memset( - &r7->unk68, - 0, - sizeof(struct BerryCrushGame_68_x_SubStruct) - ); - r7->unk68.as_four_players.unk00.unk04 = r7->unk28; - r7->unk68.as_four_players.unk00.unk06 = r7->unk18 / (r7->unk28 / 60); + memset(&r7->unk66, 0, sizeof(struct BerryCrushGame_66)); + r7->unk66.unk04 = r7->unk28; + r7->unk66.unk06 = r7->unk18 / (r7->unk28 / 60); r2 = MathUtil_Mul32(Q_24_8(r7->unk30), Q_24_8(50)); r2 = MathUtil_Div32(r2, Q_24_8(r7->unk32)) + Q_24_8(50); r2 = Q_24_8_TO_INT(r2); - r7->unk68.as_four_players.unk00.unk08 = r2 & 0x7F; + r7->unk66.unk08 = r2 & 0x7F; r2 = Q_24_8(r2); r2 = MathUtil_Div32(r2, Q_24_8(100)); r4 = Q_24_8(r7->unk1C * r7->unk9); r4 = MathUtil_Mul32(r4, r2); - r7->unk68.as_four_players.unk00.unk00 = r4 >> 8; - r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7] = Random() % 3; - for (r6 = 0, r8 = 0; r8 < r7->unk9; ++r8) + r7->unk66.unk00 = r4 >> 8; + r7->unk66.filler20[0][7] = Random() % 3; + for (r8 = 0; r8 < r7->unk9; ++r8) { - r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][r8] = r8; - r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[1][r8] = r8; - r7->unk68.as_four_players.unk00.unk0C[0][r8] = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; - r7->unk68.as_four_players.unk00.unk0A += r7->unk68.as_four_players.unk00.unk0C[0][r8]; - switch (r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7]) + r7->unk66.filler20[0][r8] = r8; + r7->unk66.filler20[1][r8] = r8; + r7->unk66.unk0C[0][r8] = r7->unk96[r8].unk16; + r7->unk66.unk0A += r7->unk66.unk0C[0][r8]; + switch (r7->unk66.filler20[0][7]) { case 0: - if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0) + if (r7->unk96[r8].unk16 != 0) { - r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[2]; + r2 = r7->unk96[r8].unk14; r2 = Q_24_8(r2); r2 = MathUtil_Mul32(r2, Q_24_8(100)); - r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; + r4 = r7->unk96[r8].unk16; r4 = Q_24_8(r4); r4 = MathUtil_Div32(r2, r4); } @@ -2827,12 +2801,12 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 } break; case 1: - if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0) + if (r7->unk96[r8].unk16 != 0) { - r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[4]; + r2 = r7->unk96[r8].unk18; r2 = Q_24_8(r2); r2 = MathUtil_Mul32(r2, Q_24_8(100)); - r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; + r4 = r7->unk96[r8].unk16; r4 = Q_24_8(r4); r4 = MathUtil_Div32(r2, r4); } @@ -2842,17 +2816,17 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 } break; case 2: - if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] == 0) + if (r7->unk96[r8].unk16 == 0) { r4 = 0; } - else if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[5] >= r7->unk28) + else if (r7->unk96[r8].unk1A >= r7->unk28) { r4 = 0x6400; } else { - r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[5]; + r2 = r7->unk96[r8].unk1A; r2 = Q_24_8(r2); r2 = MathUtil_Mul32(r2, Q_24_8(100)); r4 = r7->unk28; @@ -2862,51 +2836,35 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 break; } r4 >>= 4; - r7->unk68.as_four_players.unk00.unk0C[1][r8] = r4; + r7->unk66.unk0C[1][r8] = r4; } break; case 4: - for (r6 = 0, r8 = 0; r8 < r7->unk9 - 1; ++r8) + for (r8 = 0; r8 < r7->unk9 - 1; ++r8) { for (r4_ = r7->unk9 - 1; r4_ > r8; --r4_) { - u16 r0; - u8 r3; - u16 *sp00 = r7->unk68.as_four_players.unk00.unk0C[0]; - u8 *sp04 = r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0]; - u8 *r10 = r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[1]; - u16 *r9 = r7->unk68.as_four_players.unk00.unk0C[1]; - s32 r12 = r4_ - 1; - u16 *p1 = sp00 + r12; // these have to be here - u16 *p2 = sp00 + r4_; // to swap operands. macro? - - if (*p1 < *p2) + if (r7->unk66.unk0C[0][r4_ - 1] < r7->unk66.unk0C[0][r4_]) { - r0 = sp00[r4_]; - sp00[r4_] = sp00[r12]; - sp00[r12] = r0; - r3 = sp04[r4_]; - sp04[r4_] = sp04[r12]; - sp04[r12] = r3; + r6 = r7->unk66.unk0C[0][r4_]; + r7->unk66.unk0C[0][r4_] = r7->unk66.unk0C[0][r4_ - 1]; + r7->unk66.unk0C[0][r4_ - 1] = r6; + r3 = r7->unk66.filler20[0][r4_]; + r7->unk66.filler20[0][r4_] = r7->unk66.filler20[0][r4_ - 1]; + r7->unk66.filler20[0][r4_ - 1] = r3; } - p1 = r9 + r12; - p2 = r9 + r4_; - if (*p1 < *p2) + if (r7->unk66.unk0C[1][r4_ - 1] < r7->unk66.unk0C[1][r4_]) { - r0 = r9[r4_]; - r9[r4_] = r9[r12]; - r9[r12] = r0; - r3 = r10[r4_]; - r10[r4_] = r10[r12]; - r10[r12] = r3; + r6 = r7->unk66.unk0C[1][r4_]; + r7->unk66.unk0C[1][r4_] = r7->unk66.unk0C[1][r4_ - 1]; + r7->unk66.unk0C[1][r4_ - 1] = r6; + r3 = r7->unk66.filler20[1][r4_]; + r7->unk66.filler20[1][r4_] = r7->unk66.filler20[1][r4_ - 1]; + r7->unk66.filler20[1][r4_ - 1] = r3; } } } - SendBlock( - 0, - &r7->unk68, - sizeof(struct BerryCrushGame_68_x_SubStruct) - ); + SendBlock(0,&r7->unk66, sizeof(struct BerryCrushGame_66)); break; case 5: if (!IsLinkTaskFinished()) @@ -2916,16 +2874,8 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 case 6: if (GetBlockReceivedStatus() != 1) return 0; - memset( - &r7->unk68, - 0, - sizeof(struct BerryCrushGame_68_x_SubStruct) - ); - memcpy( - &r7->unk68, - gBlockRecvBuffer, - sizeof(struct BerryCrushGame_68_x_SubStruct) - ); + memset(&r7->unk66, 0, sizeof(struct BerryCrushGame_66)); + memcpy(&r7->unk66, gBlockRecvBuffer, sizeof(struct BerryCrushGame_66)); ResetBlockReceivedFlags(); r7->unk10 = 0; break; @@ -2946,17 +2896,17 @@ static u32 sub_8024048(struct BerryCrushGame *r5, u8 *r6) switch (r5->unkC) { case 0: - if (!sub_8022070(r5, &r5->unk138)) + if (!sub_8022070(r5, &r5->unk136)) return 0; break; case 1: CopyBgTilemapBufferToVram(0); - r5->unk138.unk0 = 30; + r5->unk136.unk0 = 30; break; case 2: - if (r5->unk138.unk0 != 0) + if (r5->unk136.unk0 != 0) { - --r5->unk138.unk0; + --r5->unk136.unk0; return 0; } if (!(JOY_NEW(A_BUTTON))) @@ -2991,7 +2941,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4) { case 0: if (r5->unk28 >= 36000) - sub_8022554(&r5->unk138); + sub_8022554(&r5->unk136); sub_8024644(r4, 8, 0, 0, 1); r5->unkE = 19; sub_8022BEC(3, 1, NULL); @@ -3024,12 +2974,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4) static u32 sub_8024228(struct BerryCrushGame *r5, u8 *r6) { - s32 r4; -#ifndef NONMATCHING - register s32 r0 asm("r0"); -#else - s32 r0; -#endif + s8 r4; switch (r5->unkC) { @@ -3037,16 +2982,16 @@ static u32 sub_8024228(struct BerryCrushGame *r5, u8 *r6) sub_8024644(r6, 4, 0, 0, 1); r5->unkE = 20; sub_8022BEC(3, 1, NULL); - r0 = 0; - r5->unkC = r0; // dunno what it's doing because it's already in case 0 + r5->unkC = 0; // dunno what it's doing because it's already in case 0 return 0; case 1: DisplayYesNoMenuDefaultYes(); break; case 2: - if ((r4 = Menu_ProcessInputNoWrapClearOnChoose()) != -2) + r4 = Menu_ProcessInputNoWrapClearOnChoose(); + if (r4 != -2) { - memset(r5->unk40.unk2, 0, sizeof(r5->unk40.unk2)); + memset(r5->unk40, 0, sizeof(r5->unk40)); if (r4 == 0) { if (HasAtLeastOneBerry()) @@ -3082,9 +3027,9 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 case 1: if (!IsLinkTaskFinished()) return 0; - r4->unk40.unk2[0] = r4->unk14; - r4->unk40.unkE.unk0 = 0; - SendBlock(0, r4->unk40.unk2, sizeof(u16)); + r4->unk40[0] = r4->unk14; + r4->unk4C[0] = 0; + SendBlock(0, r4->unk40, sizeof(u16)); break; case 2: if (!IsLinkTaskFinished()) @@ -3095,14 +3040,14 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 if (GetBlockReceivedStatus() != gUnknown_082F4448[r4->unk9 - 2]) return 0; for (; r5 < r4->unk9; ++r5) - r4->unk40.unkE.unk0 += gBlockRecvBuffer[r5][0]; - if (r4->unk40.unkE.unk0 != 0) + r4->unk4C[0] += gBlockRecvBuffer[r5][0]; + if (r4->unk4C != 0) sub_8022BEC(23, 1, NULL); else sub_8022BEC(22, 1, NULL); ResetBlockReceivedFlags(); - r4->unk40.unk2[0] = 0; - r4->unk40.unkE.unk0 = 0; + r4->unk40[0] = 0; + r4->unk4C[0] = 0; r4->unk10 = 0; r4->unkC = 0; return 0; @@ -3156,11 +3101,11 @@ static u32 sub_8024444(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1 case 1: if (IsTextPrinterActive(0)) return 0; - r5->unk138.unk0 = 120; + r5->unk136.unk0 = 120; break; case 2: - if (r5->unk138.unk0 != 0) - --r5->unk138.unk0; + if (r5->unk136.unk0 != 0) + --r5->unk136.unk0; else { sub_8022BEC(24, 1, NULL); @@ -3202,11 +3147,6 @@ static u32 sub_8024568(__attribute__((unused)) struct BerryCrushGame *r0, __attr return 0; } -#if MODERN -// TODO remove this as soon as the code below is understood -// add a UBFIX if required (code buggy?) -__attribute__((optimize("no-aggressive-loop-optimizations"))) -#endif void sub_8024578(struct BerryCrushGame *r4) { u8 r5 = 0; @@ -3233,18 +3173,18 @@ void sub_8024578(struct BerryCrushGame *r4) r4->unk32 = -1; r4->unk30 = 0; r4->unk34 = 0; - for (; r5 < 5; ++r5) // why is it 5 instead of 4? fillerBC isn't sufficient for one player + for (; r5 < 5; ++r5) { - r4->unk68.as_four_players.others[r5].unk0 = -1; - r4->unk68.as_four_players.others[r5].unk2 = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[0] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[1] = 1; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[2] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[3] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[4] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[5] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][4] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][5] = 0; + r4->unk96[r5].unkC = -1; + r4->unk96[r5].unkE = 0; + r4->unk96[r5].unk10 = 0; + r4->unk96[r5].unk12 = 1; + r4->unk96[r5].unk14 = 0; + r4->unk96[r5].unk16 = 0; + r4->unk96[r5].unk18 = 0; + r4->unk96[r5].unk1A = 0; + r4->unk96[r5].unk1B = 0; + r4->unk96[r5].unk1C = 0; } } From 3203bac053553b5d1e129b6242fc60df3ca2996f Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 20 Dec 2020 23:15:35 -0500 Subject: [PATCH 137/177] fix struct --- src/berry_crush.c | 588 +++++++++++++++++++++++----------------------- 1 file changed, 294 insertions(+), 294 deletions(-) diff --git a/src/berry_crush.c b/src/berry_crush.c index bd6a12ba53..3a43b60ab6 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -80,7 +80,7 @@ struct BerryCrushGame_40 s16 unkE; }; -struct BerryCrushGame_5A +struct BerryCrushGame_5C { u16 unk00; u8 unk02_0:1; @@ -94,7 +94,7 @@ struct BerryCrushGame_5A u16 unk0A; }; -struct BerryCrushGame_66 +struct BerryCrushGame_68 { u32 unk00; u16 unk04; @@ -105,7 +105,7 @@ struct BerryCrushGame_66 u8 filler20[2][8]; }; -struct BerryCrushGame_136_C +struct BerryCrushGame_138_C { u8 unk0; u8 unk1; @@ -116,7 +116,7 @@ struct BerryCrushGame_136_C s16 unkA; }; -struct BerryCrushGame_136 +struct BerryCrushGame_138 { u8 unk0; u8 unk1; @@ -125,7 +125,7 @@ struct BerryCrushGame_136 s16 unk4; s16 unk6; s16 unk8; - const struct BerryCrushGame_136_C *unkC[5]; + const struct BerryCrushGame_138_C *unkC[5]; struct Sprite *unk20; struct Sprite *unk24[5]; struct Sprite *unk38[5]; @@ -173,13 +173,13 @@ struct BerryCrushGame s16 unk30; s16 unk32; s16 unk34; - u8 unk36[0xA]; - u16 unk40[6]; - u16 unk4C[7]; - struct BerryCrushGame_5A unk5A; - struct BerryCrushGame_66 unk66; - struct BerryCrushGame_Player unk96[5]; - struct BerryCrushGame_136 unk136; + u8 unk36[0xC]; + u16 unk42[6]; + u16 unk4E[7]; + struct BerryCrushGame_5C unk5C; + struct BerryCrushGame_68 unk68; + struct BerryCrushGame_Player unk98[5]; + struct BerryCrushGame_138 unk138; }; static void VBlankCB(void); @@ -194,9 +194,9 @@ void sub_8022600(struct BerryCrushGame *); void sub_80226D0(struct BerryCrushGame *); void sub_8022730(struct BerryCrushGame *); void sub_8022960(struct BerryCrushGame *); -void sub_8022524(struct BerryCrushGame_136 *, u16); +void sub_8022524(struct BerryCrushGame_138 *, u16); void sub_8022B28(struct Sprite *); -void sub_8022554(struct BerryCrushGame_136 *r0); +void sub_8022554(struct BerryCrushGame_138 *r0); void sub_8024578(struct BerryCrushGame *); void sub_8024644(u8 *, u32, u32, u32, u32); static void sub_8022A20(struct Sprite *sprite); @@ -446,7 +446,7 @@ static const u8 gUnknown_082F417C[][5] = {0, 1, 3, 2, 4}, }; -static const struct BerryCrushGame_136_C gUnknown_082F4190[] = +static const struct BerryCrushGame_138_C gUnknown_082F4190[] = { { .unk0 = 0, @@ -881,7 +881,7 @@ static void GetBerryFromBag(void) else RemoveBagItem(gSpecialVar_ItemId, 1); - gBerryCrushGame->unk96[gBerryCrushGame->unk8].unkC = gSpecialVar_ItemId - FIRST_BERRY_INDEX; + gBerryCrushGame->unk98[gBerryCrushGame->unk8].unkC = gSpecialVar_ItemId - FIRST_BERRY_INDEX; gBerryCrushGame->unkE = 1; gBerryCrushGame->unkF = 9; BerryCrush_SetPaletteFadeParams(gBerryCrushGame->unk36, 0, -1, 0, 16, 0, 0); @@ -910,10 +910,10 @@ static void BerryCrush_SaveResults(void) { u32 var0, var1; - var0 = gBerryCrushGame->unk66.unk04; + var0 = gBerryCrushGame->unk68.unk04; var0 = Q_24_8(var0); var0 = MathUtil_Div32(var0, Q_24_8(60)); - var1 = gBerryCrushGame->unk66.unk0A; + var1 = gBerryCrushGame->unk68.unk0A; var1 = Q_24_8(var1); var1 = MathUtil_Div32(var1, var0) & 0xFFFF; gBerryCrushGame->unk16 = var1; @@ -949,7 +949,7 @@ static void BerryCrush_SaveResults(void) break; } - gBerryCrushGame->unk1C = gBerryCrushGame->unk66.unk00; + gBerryCrushGame->unk1C = gBerryCrushGame->unk68.unk00; if (GiveBerryPowder(gBerryCrushGame->unk1C)) return; @@ -984,11 +984,11 @@ static void ParseName_Options(struct BerryCrushGame *arg0) u8 i = 0; for (; i < arg0->unk9; i++) - StringCopy(arg0->unk96[i].unk0, gLinkPlayers[i].name); + StringCopy(arg0->unk98[i].unk0, gLinkPlayers[i].name); for (; i < 5; i++) { - memset(arg0->unk96[i].unk0, 1, PLAYER_NAME_LENGTH); - arg0->unk96[i].unk0[PLAYER_NAME_LENGTH] = EOS; + memset(arg0->unk98[i].unk0, 1, PLAYER_NAME_LENGTH); + arg0->unk98[i].unk0[PLAYER_NAME_LENGTH] = EOS; } switch (gSaveBlock2Ptr->optionsTextSpeed) @@ -1034,9 +1034,9 @@ s32 InitBerryCrushDisplay(void) case 3: ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_082F32C8, ARRAY_COUNT(gUnknown_082F32C8)); - SetBgTilemapBuffer(1, game->unk136.unk88[0]); - SetBgTilemapBuffer(2, game->unk136.unk88[2]); - SetBgTilemapBuffer(3, game->unk136.unk88[3]); + SetBgTilemapBuffer(1, game->unk138.unk88[0]); + SetBgTilemapBuffer(2, game->unk138.unk88[2]); + SetBgTilemapBuffer(3, game->unk138.unk88[3]); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(2, 0, 0); @@ -1170,7 +1170,7 @@ static int sub_8021450(struct BerryCrushGame *arg0) SetGpuReg(REG_OFFSET_BG1VOFS, -gSpriteCoordOffsetY); if (arg0->unk12 == 7) { - sub_8022524(&arg0->unk136, arg0->unk28); + sub_8022524(&arg0->unk138, arg0->unk28); } return 0; @@ -1184,7 +1184,7 @@ void sub_8021488(struct BerryCrushGame *arg0) gSpriteCoordOffsetY = -104; } -void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_136 *arg1) +void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) { u8 i; u8 spriteId; @@ -1200,7 +1200,7 @@ void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_136 *arg1) &gUnknown_082F436C, gUnknown_082F41E8[i], gUnknown_082F41E8[i], - arg0->unk96[i].unkC + 133); + arg0->unk98[i].unkC + 133); arg1->unk38[i] = &gSprites[spriteId]; arg1->unk38[i]->oam.priority = 3; arg1->unk38[i]->affineAnimPaused = TRUE; @@ -1259,7 +1259,7 @@ void sub_8021608(struct Sprite *sprite) } } -void sub_80216A8(struct BerryCrushGame *arg0, __attribute__((unused)) struct BerryCrushGame_136 *arg1) +void sub_80216A8(struct BerryCrushGame *arg0, __attribute__((unused)) struct BerryCrushGame_138 *arg1) { u8 i; for (i = 0; i < arg0->unk9; i++) @@ -1269,7 +1269,7 @@ void sub_80216A8(struct BerryCrushGame *arg0, __attribute__((unused)) struct Ber } } -void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_136 *arg1) +void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) { u8 sp4; struct BerryCrushGame_4E *var4E; @@ -1277,7 +1277,7 @@ void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_136 *arg1) u16 var, var2; sp4 = 0; - var4E = (struct BerryCrushGame_4E *)arg0->unk40; + var4E = (struct BerryCrushGame_4E *)arg0->unk4E; for (i = 0; i < arg0->unk9; i++) { var = var4E->unkA >> (i * 3); @@ -1341,7 +1341,7 @@ void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_136 *arg1) } } -bool32 sub_80218D4(struct BerryCrushGame *arg0, struct BerryCrushGame_136 *arg1) +bool32 sub_80218D4(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) { u8 i; @@ -1363,7 +1363,7 @@ bool32 sub_80218D4(struct BerryCrushGame *arg0, struct BerryCrushGame_136 *arg1) return TRUE; } -void sub_8021944(struct BerryCrushGame_136 *arg0, u16 arg1) +void sub_8021944(struct BerryCrushGame_138 *arg0, u16 arg1) { u8 i = 0; u32 r7 = 0; @@ -1388,7 +1388,7 @@ void sub_80219C8(u8 windowId, u8 left, u8 colorId, const u8 *string) AddTextPrinterParameterized3(windowId, 2, left, 0, sBerryCrushTextColorTable[colorId], 0, string); } -void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) +void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) //////// { u8 r8; u8 sp1C = 0; @@ -1396,7 +1396,7 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) u8 r2; s32 r3; u8 r7; - struct BerryCrushGame_66 * sp24 = &sp0C->unk66; + struct BerryCrushGame_68 * sp24 = &sp0C->unk68; u32 xOffset; s32 r6; @@ -1438,7 +1438,7 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) case 2: sp1C = r8; sp20 = r8; - r2 = sp0C->unk96[r8].unkC; + r2 = sp0C->unk98[r8].unkC; if (r2 >= LAST_BERRY_INDEX - FIRST_BERRY_INDEX + 2) r2 = 0; StringCopy(gStringVar1, gBerries[r2].name); @@ -1446,15 +1446,15 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) break; } xOffset = GetStringRightAlignXOffset(2, gStringVar4, sp14 - 4); - AddTextPrinterParameterized3(sp0C->unk136.unk82, 2, xOffset, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(sp0C->unk138.unk82, 2, xOffset, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); if (sp1C == sp0C->unk8) StringCopy(gStringVar3, gText_1DotBlueF700); else StringCopy(gStringVar3, gText_1DotF700); gStringVar3[0] = sp20 + CHAR_1; - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sp0C->unk96[sp1C].unk0); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sp0C->unk98[sp1C].unk0); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gStringVar3); - AddTextPrinterParameterized3(sp0C->unk136.unk82, 2, 4, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(sp0C->unk138.unk82, 2, 4, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); } } @@ -1463,28 +1463,28 @@ void sub_8021D34(struct BerryCrushGame *r8) u8 r10 = 0; u8 r6 = 0; u32 sp0C = 0; - struct BerryCrushGame_66 *sp10 = &r8->unk66; - u8 r7 = GetWindowAttribute(r8->unk136.unk82, WINDOW_HEIGHT) * 8 - 42; + struct BerryCrushGame_68 *sp10 = &r8->unk68; + u8 r7 = GetWindowAttribute(r8->unk138.unk82, WINDOW_HEIGHT) * 8 - 42; - sub_8021944(&r8->unk136, sp10->unk04); - AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimeColon); + sub_8021944(&r8->unk138, sp10->unk04); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimeColon); r6 = 176 - (u8)GetStringWidth(2, gText_SpaceSec, -1); - AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceSec); - ConvertIntToDecimalStringN(gStringVar1, r8->unk136.unk6, STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, r8->unk136.unk8, STR_CONV_MODE_LEADING_ZEROS, 2); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceSec); + ConvertIntToDecimalStringN(gStringVar1, r8->unk138.unk6, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar2, r8->unk138.unk8, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_XDotY2); r6 -= GetStringWidth(2, gStringVar4, -1); - AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); r6 -= GetStringWidth(2, gText_SpaceMin, -1); - AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceMin); - ConvertIntToDecimalStringN(gStringVar1, r8->unk136.unk4, STR_CONV_MODE_LEADING_ZEROS, 1); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceMin); + ConvertIntToDecimalStringN(gStringVar1, r8->unk138.unk4, STR_CONV_MODE_LEADING_ZEROS, 1); StringExpandPlaceholders(gStringVar4, gText_StrVar1); r6 -= GetStringWidth(2, gStringVar4, -1); - AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); r7 += 14; - AddTextPrinterParameterized3(r8->unk136.unk82, 2, 0, r7, sBerryCrushTextColorTable[0], 0, gText_PressingSpeed); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, 0, r7, sBerryCrushTextColorTable[0], 0, gText_PressingSpeed); r6 = 176 - (u8)GetStringWidth(2, gText_TimesPerSec, -1); - AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimesPerSec); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimesPerSec); for (; r10 < 8; ++r10) if (((u8)r8->unk16 >> (7 - r10)) & 1) sp0C += *(r10 + sPressingSpeedConversionTable); // It's accessed in a different way here for unknown reason @@ -1493,18 +1493,18 @@ void sub_8021D34(struct BerryCrushGame *r8) StringExpandPlaceholders(gStringVar4, gText_XDotY3); r6 -= GetStringWidth(2, gStringVar4, -1); if (r8->unk25_1) - AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[5], 0, gStringVar4); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[5], 0, gStringVar4); else - AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); r7 += 14; - AddTextPrinterParameterized3(r8->unk136.unk82, 2, 0, r7, sBerryCrushTextColorTable[0], 0, gText_Silkiness); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, 0, r7, sBerryCrushTextColorTable[0], 0, gText_Silkiness); ConvertIntToDecimalStringN(gStringVar1, sp10->unk08, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_Var1Percent); r6 = 176 - (u8)GetStringWidth(2, gStringVar4, -1); - AddTextPrinterParameterized3(r8->unk136.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); + AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); } -bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_136 *r6) +bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_138 *r6) { u8 r5; struct WindowTemplate template; @@ -1539,7 +1539,7 @@ bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_136 *r6) r6->unk80 = 5; return FALSE; case 12: - sub_80219C8(r6->unk82, 20, 4, gUnknown_082F43B4[r4->unk66.filler20[0][7] + 3]); + sub_80219C8(r6->unk82, 20, 4, gUnknown_082F43B4[r4->unk68.filler20[0][7] + 3]); sub_8021A28(r4, 1, 0xA0, 8 * gUnknown_082F3344[0][r5]); r6->unk80 = 5; return FALSE; @@ -1563,8 +1563,8 @@ bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_136 *r6) void sub_802222C(struct BerryCrushGame *r4) { - ClearStdWindowAndFrameToTransparent(r4->unk136.unk82, 1); - RemoveWindow(r4->unk136.unk82); + ClearStdWindowAndFrameToTransparent(r4->unk138.unk82, 1); + RemoveWindow(r4->unk138.unk82); sub_8022600(r4); } @@ -1682,7 +1682,7 @@ void ShowBerryCrushRankings(void) gTasks[taskId].data[5] = gSaveBlock2Ptr->berryCrush.berryCrushResults[3]; } -void sub_8022524(struct BerryCrushGame_136 *r4, u16 r1) +void sub_8022524(struct BerryCrushGame_138 *r4, u16 r1) { sub_8021944(r4, r1); DigitObjUtil_PrintNumOn(0, r4->unk4); @@ -1690,7 +1690,7 @@ void sub_8022524(struct BerryCrushGame_136 *r4, u16 r1) DigitObjUtil_PrintNumOn(2, r4->unk8); } -void sub_8022554(struct BerryCrushGame_136 *r0) +void sub_8022554(struct BerryCrushGame_138 *r0) { r0->unk78[0]->invisible = TRUE; r0->unk78[1]->invisible = TRUE; @@ -1705,10 +1705,10 @@ void sub_8022588(struct BerryCrushGame *r5) for (r6 = 0; r6 < r5->unk9; ++r6) { - r5->unk136.unkC[r6] = &gUnknown_082F4190[gUnknown_082F417C[r5->unk9 - 2][r6]]; - r5->unk136.unk83[r6] = AddWindow(&gUnknown_082F32F4[r5->unk136.unkC[r6]->unk0]); - PutWindowTilemap(r5->unk136.unk83[r6]); - FillWindowPixelBuffer(r5->unk136.unk83[r6], 0); + r5->unk138.unkC[r6] = &gUnknown_082F4190[gUnknown_082F417C[r5->unk9 - 2][r6]]; + r5->unk138.unk83[r6] = AddWindow(&gUnknown_082F32F4[r5->unk138.unkC[r6]->unk0]); + PutWindowTilemap(r5->unk138.unk83[r6]); + FillWindowPixelBuffer(r5->unk138.unk83[r6], 0); } } @@ -1719,36 +1719,36 @@ void sub_8022600(struct BerryCrushGame *r6) for (r7 = 0; r7 < r6->unk9; ++r7) { - PutWindowTilemap(r6->unk136.unk83[r7]); + PutWindowTilemap(r6->unk138.unk83[r7]); if (r7 == r6->unk8) { AddTextPrinterParameterized4( - r6->unk136.unk83[r7], + r6->unk138.unk83[r7], 2, - 36 - GetStringWidth(2, r6->unk96[r7].unk0, 0) / 2u, + 36 - GetStringWidth(2, r6->unk98[r7].unk0, 0) / 2u, 1, 0, 0, sBerryCrushTextColorTable[1], 0, - r6->unk96[r7].unk0 + r6->unk98[r7].unk0 ); } else { AddTextPrinterParameterized4( - r6->unk136.unk83[r7], + r6->unk138.unk83[r7], 2, - 36 - GetStringWidth(2, r6->unk96[r7].unk0, 0) / 2u, + 36 - GetStringWidth(2, r6->unk98[r7].unk0, 0) / 2u, 1, 0, 0, sBerryCrushTextColorTable[2], 0, - r6->unk96[r7].unk0 + r6->unk98[r7].unk0 ); } - CopyWindowToVram(r6->unk136.unk83[r7], 3); + CopyWindowToVram(r6->unk138.unk83[r7], 3); } CopyBgTilemapBufferToVram(0); } @@ -1765,9 +1765,9 @@ void sub_80226D0(struct BerryCrushGame *r6) { CopyToBgTilemapBufferRect( 3, - &r4[r6->unk136.unkC[r5]->unk0 * 40], - r6->unk136.unkC[r5]->unk1, - r6->unk136.unkC[r5]->unk2, + &r4[r6->unk138.unkC[r5]->unk0 * 40], + r6->unk138.unkC[r5]->unk1, + r6->unk138.unkC[r5]->unk2, 10, 2 ); @@ -1788,25 +1788,25 @@ void sub_8022730(struct BerryCrushGame *r6) LoadCompressedSpriteSheet(&gUnknown_082F41F4[r5]); LoadSpritePalettes(gUnknown_082F421C); r2 = CreateSprite(&gUnknown_082F430C, 120, 88, 5); - r6->unk136.unk20 = &gSprites[r2]; - r6->unk136.unk20->oam.priority = 3; - r6->unk136.unk20->coordOffsetEnabled = TRUE; - r6->unk136.unk20->animPaused = TRUE; + r6->unk138.unk20 = &gSprites[r2]; + r6->unk138.unk20->oam.priority = 3; + r6->unk138.unk20->coordOffsetEnabled = TRUE; + r6->unk138.unk20->animPaused = TRUE; for (r5 = 0; r5 < r6->unk9; ++r5) { r2 = CreateSprite( &gUnknown_082F4324, - r6->unk136.unkC[r5]->unk4 + 120, - r6->unk136.unkC[r5]->unk6 + 32, + r6->unk138.unkC[r5]->unk4 + 120, + r6->unk138.unkC[r5]->unk6 + 32, 0 ); - r6->unk136.unk24[r5] = &gSprites[r2]; - r6->unk136.unk24[r5]->oam.priority = 1; - r6->unk136.unk24[r5]->invisible = TRUE; - r6->unk136.unk24[r5]->coordOffsetEnabled = TRUE; - r6->unk136.unk24[r5]->animPaused = TRUE; + r6->unk138.unk24[r5] = &gSprites[r2]; + r6->unk138.unk24[r5]->oam.priority = 1; + r6->unk138.unk24[r5]->invisible = TRUE; + r6->unk138.unk24[r5]->coordOffsetEnabled = TRUE; + r6->unk138.unk24[r5]->animPaused = TRUE; } - for (r5 = 0; r5 < ARRAY_COUNT(r6->unk136.unk4C); ++r5) + for (r5 = 0; r5 < ARRAY_COUNT(r6->unk138.unk4C); ++r5) { r2 = CreateSprite( &gUnknown_082F433C, @@ -1814,13 +1814,13 @@ void sub_8022730(struct BerryCrushGame *r6) gUnknown_082F41D2[r5][1] + 136, 6 ); - r6->unk136.unk4C[r5] = &gSprites[r2]; - r6->unk136.unk4C[r5]->oam.priority = 3; - r6->unk136.unk4C[r5]->invisible = TRUE; - r6->unk136.unk4C[r5]->animPaused = TRUE; - r6->unk136.unk4C[r5]->data[0] = r5; + r6->unk138.unk4C[r5] = &gSprites[r2]; + r6->unk138.unk4C[r5]->oam.priority = 3; + r6->unk138.unk4C[r5]->invisible = TRUE; + r6->unk138.unk4C[r5]->animPaused = TRUE; + r6->unk138.unk4C[r5]->data[0] = r5; } - for (r5 = 0; r5 < ARRAY_COUNT(r6->unk136.unk78); ++r5) + for (r5 = 0; r5 < ARRAY_COUNT(r6->unk138.unk78); ++r5) { r2 = CreateSprite( &gUnknown_082F4354, @@ -1828,16 +1828,16 @@ void sub_8022730(struct BerryCrushGame *r6) 8, 0 ); - r6->unk136.unk78[r5] = &gSprites[r2]; - r6->unk136.unk78[r5]->oam.priority = 0; - r6->unk136.unk78[r5]->invisible = FALSE; - r6->unk136.unk78[r5]->animPaused = FALSE; + r6->unk138.unk78[r5] = &gSprites[r2]; + r6->unk138.unk78[r5]->oam.priority = 0; + r6->unk138.unk78[r5]->invisible = FALSE; + r6->unk138.unk78[r5]->animPaused = FALSE; } DigitObjUtil_CreatePrinter(0, 0, &gUnknown_082F4384[0]); DigitObjUtil_CreatePrinter(1, 0, &gUnknown_082F4384[1]); DigitObjUtil_CreatePrinter(2, 0, &gUnknown_082F4384[2]); if (r6->unk12 == 1) - sub_8022554(&r6->unk136); + sub_8022554(&r6->unk138); } void sub_8022960(struct BerryCrushGame *r5) @@ -1851,17 +1851,17 @@ void sub_8022960(struct BerryCrushGame *r5) FreeSpritePaletteByTag(4); FreeSpritePaletteByTag(2); FreeSpritePaletteByTag(1); - for (; r4 < ARRAY_COUNT(r5->unk136.unk78); ++r4) - DestroySprite(r5->unk136.unk78[r4]); + for (; r4 < ARRAY_COUNT(r5->unk138.unk78); ++r4) + DestroySprite(r5->unk138.unk78[r4]); DigitObjUtil_DeletePrinter(2); DigitObjUtil_DeletePrinter(1); DigitObjUtil_DeletePrinter(0); - for (r4 = 0; r4 < ARRAY_COUNT(r5->unk136.unk4C); ++r4) - DestroySprite(r5->unk136.unk4C[r4]); + for (r4 = 0; r4 < ARRAY_COUNT(r5->unk138.unk4C); ++r4) + DestroySprite(r5->unk138.unk4C[r4]); for (r4 = 0; r4 < r5->unk9; ++r4) - DestroySprite(r5->unk136.unk24[r4]); - if (r5->unk136.unk20->inUse) - DestroySprite(r5->unk136.unk20); + DestroySprite(r5->unk138.unk24[r4]); + if (r5->unk138.unk20->inUse) + DestroySprite(r5->unk138.unk20); } static void sub_8022A20(struct Sprite *sprite) @@ -2154,9 +2154,9 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2) case 2: if (!IsLinkTaskFinished()) return 0; - memset(r5->unk40, 0, sizeof(r5->unk40)); - r5->unk40[0] = r5->unk96[r5->unk8].unkC; - SendBlock(0, r5->unk40, 2); + memset(r5->unk42, 0, sizeof(r5->unk42)); + r5->unk42[0] = r5->unk98[r5->unk8].unkC; + SendBlock(0, r5->unk42, 2); break; case 3: if (!IsLinkTaskFinished()) @@ -2168,11 +2168,11 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2) return 0; for (r3 = 0; r3 < r5->unk9; ++r3) { - r5->unk96[r3].unkC = gBlockRecvBuffer[r3][0]; - if (r5->unk96[r3].unkC > 0xB0) - r5->unk96[r3].unkC = 0; - r5->unk18 += gUnknown_0858AB24[r5->unk96[r3].unkC].unk0; - r5->unk1C += gUnknown_0858AB24[r5->unk96[r3].unkC].unk1; + r5->unk98[r3].unkC = gBlockRecvBuffer[r3][0]; + if (r5->unk98[r3].unkC > 0xB0) + r5->unk98[r3].unkC = 0; + r5->unk18 += gUnknown_0858AB24[r5->unk98[r3].unkC].unk0; + r5->unk1C += gUnknown_0858AB24[r5->unk98[r3].unkC].unk1; } r5->unk10 = 0; ResetBlockReceivedFlags(); @@ -2194,41 +2194,41 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r switch (r4->unkC) { case 0: - sub_80214A8(r4, &r4->unk136); + sub_80214A8(r4, &r4->unk138); Rfu_SetLinkStandbyCallback(); break; case 1: if (!IsLinkTaskFinished()) return 0; - r4->unk136.unk0 = 0; - r4->unk136.unk1 = 0; - r4->unk136.unk2 = 0; - r4->unk136.unk3 = 0; + r4->unk138.unk0 = 0; + r4->unk138.unk1 = 0; + r4->unk138.unk2 = 0; + r4->unk138.unk3 = 0; break; case 2: - r4->unk136.unk38[r4->unk136.unk0]->callback = sub_8021608; - r4->unk136.unk38[r4->unk136.unk0]->affineAnimPaused = FALSE; + r4->unk138.unk38[r4->unk138.unk0]->callback = sub_8021608; + r4->unk138.unk38[r4->unk138.unk0]->affineAnimPaused = FALSE; PlaySE(SE_BALL_THROW); break; case 3: - if (r4->unk136.unk38[r4->unk136.unk0]->callback == sub_8021608) + if (r4->unk138.unk38[r4->unk138.unk0]->callback == sub_8021608) return 0; - r4->unk136.unk38[r4->unk136.unk0] = NULL; - ++r4->unk136.unk0; + r4->unk138.unk38[r4->unk138.unk0] = NULL; + ++r4->unk138.unk0; Rfu_SetLinkStandbyCallback(); break; case 4: if (!IsLinkTaskFinished()) return 0; - if (r4->unk136.unk0 < r4->unk9) + if (r4->unk138.unk0 < r4->unk9) { r4->unkC = 2; return 0; } - r4->unk136.unk0 = 0; + r4->unk138.unk0 = 0; break; case 5: - sub_80216A8(r4, &r4->unk136); + sub_80216A8(r4, &r4->unk138); Rfu_SetLinkStandbyCallback(); break; case 6: @@ -2253,24 +2253,24 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r if (r4->unk2A < 0) return 0; r4->unk2A = 0; - r4->unk136.unk1 = 4; - r4->unk136.unk0 = 0; - r4->unk136.unk2 = gUnknown_082F326C[r4->unk136.unk1][0]; + r4->unk138.unk1 = 4; + r4->unk138.unk0 = 0; + r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0]; PlaySE(SE_M_STRENGTH); break; case 1: - r4->unk2C = gUnknown_082F326C[r4->unk136.unk1][r4->unk136.unk0]; + r4->unk2C = gUnknown_082F326C[r4->unk138.unk1][r4->unk138.unk0]; SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); - ++r4->unk136.unk0; - if (r4->unk136.unk0 < r4->unk136.unk2) + ++r4->unk138.unk0; + if (r4->unk138.unk0 < r4->unk138.unk2) return 0; - if (r4->unk136.unk1 == 0) + if (r4->unk138.unk1 == 0) break; - --r4->unk136.unk1; - r4->unk136.unk2 = gUnknown_082F326C[r4->unk136.unk1][0]; - r4->unk136.unk0 = 0; + --r4->unk138.unk1; + r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0]; + r4->unk138.unk0 = 0; return 0; case 2: r4->unk2C = 0; @@ -2310,10 +2310,10 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r case 3: if (!IsLinkTaskFinished()) return 0; - r4->unk136.unk0 = 0; - r4->unk136.unk1 = 0; - r4->unk136.unk2 = 0; - r4->unk136.unk3 = 0; + r4->unk138.unk0 = 0; + r4->unk138.unk1 = 0; + r4->unk138.unk2 = 0; + r4->unk138.unk3 = 0; r4->unk10 = 0; if (r4->unk8 == 0) sub_8022BEC(13, 1, NULL); @@ -2343,31 +2343,31 @@ void sub_802339C(struct BerryCrushGame *r4) { if (r2->unk4_2) { - r4->unk5A.unk02_3 |= gUnknown_082F325C[r7]; - r4->unk96[r7].unk1C = 1; - ++r4->unk96[r7].unk16; + r4->unk5C.unk02_3 |= gUnknown_082F325C[r7]; + r4->unk98[r7].unk1C = 1; + ++r4->unk98[r7].unk16; ++r8; - r3 = r4->unk28 - r4->unk96[r7].unkE; - if (r3 >= r4->unk96[r7].unk12 - 1 && r3 <= r4->unk96[r7].unk12 + 1) + r3 = r4->unk28 - r4->unk98[r7].unkE; + if (r3 >= r4->unk98[r7].unk12 - 1 && r3 <= r4->unk98[r7].unk12 + 1) { - ++r4->unk96[r7].unk10; - r4->unk96[r7].unk12 = r3; - if (r4->unk96[r7].unk10 > r4->unk96[r7].unk14) - r4->unk96[r7].unk14 = r4->unk96[r7].unk10; + ++r4->unk98[r7].unk10; + r4->unk98[r7].unk12 = r3; + if (r4->unk98[r7].unk10 > r4->unk98[r7].unk14) + r4->unk98[r7].unk14 = r4->unk98[r7].unk10; } else { - r4->unk96[r7].unk10 = 0; - r4->unk96[r7].unk12 = r3; + r4->unk98[r7].unk10 = 0; + r4->unk98[r7].unk12 = r3; } - r4->unk96[r7].unkE = r4->unk28; - ++r4->unk96[r7].unk1B; - if (r4->unk96[r7].unk1B > 2) - r4->unk96[r7].unk1B = 0; + r4->unk98[r7].unkE = r4->unk28; + ++r4->unk98[r7].unk1B; + if (r4->unk98[r7].unk1B > 2) + r4->unk98[r7].unk1B = 0; } else { - r4->unk96[r7].unk1C = 0; + r4->unk98[r7].unk1C = 0; } } } @@ -2375,10 +2375,10 @@ void sub_802339C(struct BerryCrushGame *r4) { for (r7 = 0; r7 < r4->unk9; ++r7) { - if (r4->unk96[r7].unk1C != 0) + if (r4->unk98[r7].unk1C != 0) { - r4->unk96[r7].unk1C |= 2; - ++r4->unk96[r7].unk18; + r4->unk98[r7].unk1C |= 2; + ++r4->unk98[r7].unk18; } } } @@ -2399,7 +2399,7 @@ void sub_802339C(struct BerryCrushGame *r4) else { r4->unk24 = 32; - r4->unk5A.unk02_0 = 1; + r4->unk5C.unk02_0 = 1; } } } @@ -2413,78 +2413,78 @@ void sub_8023558(struct BerryCrushGame *r3) for (r4 = 0; r4 < r3->unk9; ++r4) { - if (r3->unk96[r4].unk1C != 0) + if (r3->unk98[r4].unk1C != 0) { ++r6; - r1 = r3->unk96[r4].unk1B + 1; - if (r3->unk96[r4].unk1C & 2) + r1 = r3->unk98[r4].unk1B + 1; + if (r3->unk98[r4].unk1C & 2) r1 |= 4; r1 <<= 3 * r4; - r3->unk5A.unk08 |= r1; + r3->unk5C.unk08 |= r1; } } r2 = (u16)r3->unk24; - r3->unk5A.unk04 = r2; + r3->unk5C.unk04 = r2; if (r6 == 0) { - if (r3->unk136.unk3 != 0) - ++r3->unk136.unk0; + if (r3->unk138.unk3 != 0) + ++r3->unk138.unk0; } - else if (r3->unk136.unk3 != 0) + else if (r3->unk138.unk3 != 0) { - if (r6 != r3->unk136.unk1) + if (r6 != r3->unk138.unk1) { - r3->unk136.unk1 = r6 - 1; - r3->unk136.unk2 = gUnknown_082F3290[r6 - 1][0]; + r3->unk138.unk1 = r6 - 1; + r3->unk138.unk2 = gUnknown_082F3290[r6 - 1][0]; } else { - ++r3->unk136.unk0; + ++r3->unk138.unk0; } } else { - r3->unk136.unk0 = 0; - r3->unk136.unk1 = r6 - 1; - r3->unk136.unk2 = gUnknown_082F3290[r6 - 1][0]; - r3->unk136.unk3 = 1; + r3->unk138.unk0 = 0; + r3->unk138.unk1 = r6 - 1; + r3->unk138.unk2 = gUnknown_082F3290[r6 - 1][0]; + r3->unk138.unk3 = 1; } - if (r3->unk136.unk3 != 0) + if (r3->unk138.unk3 != 0) { - if (r3->unk136.unk0 >= r3->unk136.unk2) + if (r3->unk138.unk0 >= r3->unk138.unk2) { - r3->unk136.unk0 = 0; - r3->unk136.unk1 = 0; - r3->unk136.unk2 = 0; - r3->unk136.unk3 = 0; + r3->unk138.unk0 = 0; + r3->unk138.unk1 = 0; + r3->unk138.unk2 = 0; + r3->unk138.unk3 = 0; r1 = 0; } else { - r1 = gUnknown_082F3290[r3->unk136.unk1][r3->unk136.unk0 + 1]; + r1 = gUnknown_082F3290[r3->unk138.unk1][r3->unk138.unk0 + 1]; } - r3->unk5A.unk03 = (u8)r1; + r3->unk5C.unk03 = (u8)r1; } else { - r3->unk5A.unk03 = 0; + r3->unk5C.unk03 = 0; } - r3->unk5A.unk06 = r3->unk26; + r3->unk5C.unk06 = r3->unk26; } void sub_80236B8(struct BerryCrushGame *r5) { if (JOY_NEW(A_BUTTON)) - r5->unk5A.unk02_2 = 1; + r5->unk5C.unk02_2 = 1; if (JOY_HELD(A_BUTTON)) { - if (r5->unk96[r5->unk8].unk1A < r5->unk28) - ++r5->unk96[r5->unk8].unk1A; + if (r5->unk98[r5->unk8].unk1A < r5->unk28) + ++r5->unk98[r5->unk8].unk1A; } - if (r5->unk8 != 0 && r5->unk5A.unk02_2 == 0) + if (r5->unk8 != 0 && r5->unk5C.unk02_2 == 0) return; - r5->unk5A.unk00 = 2; + r5->unk5C.unk00 = 2; if (r5->unk28 % 30 == 0) { if (r5->unk2E > gUnknown_082F4444[r5->unk9 - 2]) @@ -2523,7 +2523,7 @@ void sub_80236B8(struct BerryCrushGame *r5) sub_8011AC8(); r5->unk10 = 0; } - else if (r5->unk5A.unk02_3 == 0) + else if (r5->unk5C.unk02_3 == 0) { sub_8011AC8(); r5->unk10 = 0; @@ -2532,11 +2532,11 @@ void sub_80236B8(struct BerryCrushGame *r5) } if (r5->unk28 >= 36000) - r5->unk5A.unk02_0 = 1; - r5->unk5A.unk02_1 = r5->unk25_4; - r5->unk5A.unk0A = r5->unk25_5; - memcpy(r5->unk40, &r5->unk5A, sizeof(r5->unk40)); - Rfu_SendPacket(r5->unk40); + r5->unk5C.unk02_0 = 1; + r5->unk5C.unk02_1 = r5->unk25_4; + r5->unk5C.unk0A = r5->unk25_5; + memcpy(r5->unk42, &r5->unk5C, sizeof(r5->unk42)); + Rfu_SendPacket(r5->unk42); } void sub_802385C(struct BerryCrushGame *r5) @@ -2545,7 +2545,7 @@ void sub_802385C(struct BerryCrushGame *r5) struct BerryCrushGame_4E *r4_ = NULL; for (r4 = 0; r4 < r5->unk9; r4++) - r5->unk96[r4].unk1C = 0; + r5->unk98[r4].unk1C = 0; if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET) { r5->unk25_2 = 0; @@ -2557,12 +2557,12 @@ void sub_802385C(struct BerryCrushGame *r5) return; } - memcpy(r5->unk4C, gRecvCmds[0], 14); - r4_ = (struct BerryCrushGame_4E *)&r5->unk4C; + memcpy(r5->unk4E, gRecvCmds[0], 14); + r4_ = (struct BerryCrushGame_4E *)&r5->unk4E; r5->unk2A = r4_->unk6; r5->unk2C = (s16)r4_->unk5; r5->unk28 = r4_->unk8; - sub_80216E0(r5, &(r5->unk136)); + sub_80216E0(r5, &(r5->unk138)); if (r4_->unk4_0) { r5->unk25_3 = 1; @@ -2571,8 +2571,8 @@ void sub_802385C(struct BerryCrushGame *r5) static u32 sub_80238F0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1) { - memset(&r4->unk5A, 0, sizeof(r4->unk5A)); - memset(&r4->unk4C, 0, sizeof(r4->unk4C)); + memset(&r4->unk5C, 0, sizeof(r4->unk5C)); + memset(&r4->unk4E, 0, sizeof(r4->unk4E)); sub_802385C(r4); SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); @@ -2604,8 +2604,8 @@ static u32 sub_80238F0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 static u32 sub_8023998(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1) { - memset(&r4->unk5A, 0, sizeof(r4->unk5A)); - memset(&r4->unk4C, 0, sizeof(r4->unk4C)); + memset(&r4->unk5C, 0, sizeof(r4->unk5C)); + memset(&r4->unk4E, 0, sizeof(r4->unk4E)); sub_802385C(r4); SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); @@ -2640,28 +2640,28 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 r4->unk12 = 8; PlaySE(SE_M_STRENGTH); BlendPalettes(0xFFFFFFFF, 8, RGB(31, 31, 0)); - r4->unk136.unk0 = 2; + r4->unk138.unk0 = 2; break; case 1: - if (--r4->unk136.unk0 != 255) + if (--r4->unk138.unk0 != 255) return 0; BlendPalettes(0xFFFFFFFF, 0, RGB(31, 31, 0)); - r4->unk136.unk1 = 4; - r4->unk136.unk0 = 0; - r4->unk136.unk2 = gUnknown_082F326C[r4->unk136.unk1][0]; + r4->unk138.unk1 = 4; + r4->unk138.unk0 = 0; + r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0]; break; case 2: - r4->unk2C = gUnknown_082F326C[r4->unk136.unk1][r4->unk136.unk0]; + r4->unk2C = gUnknown_082F326C[r4->unk138.unk1][r4->unk138.unk0]; SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); - if (++r4->unk136.unk0 < r4->unk136.unk2) + if (++r4->unk138.unk0 < r4->unk138.unk2) return 0; - if (r4->unk136.unk1 != 0) + if (r4->unk138.unk1 != 0) { - --r4->unk136.unk1; - r4->unk136.unk2 = gUnknown_082F326C[r4->unk136.unk1][0]; - r4->unk136.unk0 = 0; + --r4->unk138.unk1; + r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0]; + r4->unk138.unk0 = 0; return 0; } break; @@ -2672,7 +2672,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 SetGpuReg(REG_OFFSET_BG3VOFS, 0); break; case 4: - if (!sub_80218D4(r4, &r4->unk136)) + if (!sub_80218D4(r4, &r4->unk138)) return 0; Rfu_SetLinkStandbyCallback(); r4->unk10 = 0; @@ -2697,16 +2697,16 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6) r5->unk12 = 9; PlaySE(SE_FAILURE); BlendPalettes(0xFFFFFFFF, 8, RGB(31, 0, 0)); - r5->unk136.unk0 = 4; + r5->unk138.unk0 = 4; break; case 1: - if (--r5->unk136.unk0 != 255) + if (--r5->unk138.unk0 != 255) return 0; BlendPalettes(0xFFFFFFFF, 0, RGB(31, 0, 0)); - r5->unk136.unk0 = 0; + r5->unk138.unk0 = 0; break; case 2: - if (!sub_80218D4(r5, &r5->unk136)) + if (!sub_80218D4(r5, &r5->unk138)) return 0; Rfu_SetLinkStandbyCallback(); r5->unk10 = 0; @@ -2739,11 +2739,11 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 switch (r7->unkC) { case 0: - memset(r7->unk40, 0, sizeof(r7->unk40)); - if (r7->unk96[r7->unk8].unk1A > r7->unk28) - r7->unk96[r7->unk8].unk1A = r7->unk28; - r7->unk40[0] = r7->unk96[r7->unk8].unk1A; - SendBlock(0, r7->unk40, 2); + memset(r7->unk42, 0, sizeof(r7->unk42)); + if (r7->unk98[r7->unk8].unk1A > r7->unk28) + r7->unk98[r7->unk8].unk1A = r7->unk28; + r7->unk42[0] = r7->unk98[r7->unk8].unk1A; + SendBlock(0, r7->unk42, 2); break; case 1: if (!IsLinkTaskFinished()) @@ -2754,9 +2754,9 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 if (GetBlockReceivedStatus() != gUnknown_082F4448[r7->unk9 - 2]) return 0; for (r8 = 0; r8 < r7->unk9; ++r8) - r7->unk96[r8].unk1A = gBlockRecvBuffer[r8][0]; + r7->unk98[r8].unk1A = gBlockRecvBuffer[r8][0]; r7->unk10 = 0; - r7->unk40[0] = 0; + r7->unk42[0] = 0; ResetBlockReceivedFlags(); if (r7->unk8 == 0) r7->unkC = 3; @@ -2764,34 +2764,34 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 r7->unkC = 6; return 0; case 3: - memset(&r7->unk66, 0, sizeof(struct BerryCrushGame_66)); - r7->unk66.unk04 = r7->unk28; - r7->unk66.unk06 = r7->unk18 / (r7->unk28 / 60); + memset(&r7->unk68, 0, sizeof(struct BerryCrushGame_68)); + r7->unk68.unk04 = r7->unk28; + r7->unk68.unk06 = r7->unk18 / (r7->unk28 / 60); r2 = MathUtil_Mul32(Q_24_8(r7->unk30), Q_24_8(50)); r2 = MathUtil_Div32(r2, Q_24_8(r7->unk32)) + Q_24_8(50); r2 = Q_24_8_TO_INT(r2); - r7->unk66.unk08 = r2 & 0x7F; + r7->unk68.unk08 = r2 & 0x7F; r2 = Q_24_8(r2); r2 = MathUtil_Div32(r2, Q_24_8(100)); r4 = Q_24_8(r7->unk1C * r7->unk9); r4 = MathUtil_Mul32(r4, r2); - r7->unk66.unk00 = r4 >> 8; - r7->unk66.filler20[0][7] = Random() % 3; + r7->unk68.unk00 = r4 >> 8; + r7->unk68.filler20[0][7] = Random() % 3; for (r8 = 0; r8 < r7->unk9; ++r8) { - r7->unk66.filler20[0][r8] = r8; - r7->unk66.filler20[1][r8] = r8; - r7->unk66.unk0C[0][r8] = r7->unk96[r8].unk16; - r7->unk66.unk0A += r7->unk66.unk0C[0][r8]; - switch (r7->unk66.filler20[0][7]) + r7->unk68.filler20[0][r8] = r8; + r7->unk68.filler20[1][r8] = r8; + r7->unk68.unk0C[0][r8] = r7->unk98[r8].unk16; + r7->unk68.unk0A += r7->unk68.unk0C[0][r8]; + switch (r7->unk68.filler20[0][7]) { case 0: - if (r7->unk96[r8].unk16 != 0) + if (r7->unk98[r8].unk16 != 0) { - r2 = r7->unk96[r8].unk14; + r2 = r7->unk98[r8].unk14; r2 = Q_24_8(r2); r2 = MathUtil_Mul32(r2, Q_24_8(100)); - r4 = r7->unk96[r8].unk16; + r4 = r7->unk98[r8].unk16; r4 = Q_24_8(r4); r4 = MathUtil_Div32(r2, r4); } @@ -2801,12 +2801,12 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 } break; case 1: - if (r7->unk96[r8].unk16 != 0) + if (r7->unk98[r8].unk16 != 0) { - r2 = r7->unk96[r8].unk18; + r2 = r7->unk98[r8].unk18; r2 = Q_24_8(r2); r2 = MathUtil_Mul32(r2, Q_24_8(100)); - r4 = r7->unk96[r8].unk16; + r4 = r7->unk98[r8].unk16; r4 = Q_24_8(r4); r4 = MathUtil_Div32(r2, r4); } @@ -2816,17 +2816,17 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 } break; case 2: - if (r7->unk96[r8].unk16 == 0) + if (r7->unk98[r8].unk16 == 0) { r4 = 0; } - else if (r7->unk96[r8].unk1A >= r7->unk28) + else if (r7->unk98[r8].unk1A >= r7->unk28) { r4 = 0x6400; } else { - r2 = r7->unk96[r8].unk1A; + r2 = r7->unk98[r8].unk1A; r2 = Q_24_8(r2); r2 = MathUtil_Mul32(r2, Q_24_8(100)); r4 = r7->unk28; @@ -2836,7 +2836,7 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 break; } r4 >>= 4; - r7->unk66.unk0C[1][r8] = r4; + r7->unk68.unk0C[1][r8] = r4; } break; case 4: @@ -2844,27 +2844,27 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 { for (r4_ = r7->unk9 - 1; r4_ > r8; --r4_) { - if (r7->unk66.unk0C[0][r4_ - 1] < r7->unk66.unk0C[0][r4_]) + if (r7->unk68.unk0C[0][r4_ - 1] < r7->unk68.unk0C[0][r4_]) { - r6 = r7->unk66.unk0C[0][r4_]; - r7->unk66.unk0C[0][r4_] = r7->unk66.unk0C[0][r4_ - 1]; - r7->unk66.unk0C[0][r4_ - 1] = r6; - r3 = r7->unk66.filler20[0][r4_]; - r7->unk66.filler20[0][r4_] = r7->unk66.filler20[0][r4_ - 1]; - r7->unk66.filler20[0][r4_ - 1] = r3; + r6 = r7->unk68.unk0C[0][r4_]; + r7->unk68.unk0C[0][r4_] = r7->unk68.unk0C[0][r4_ - 1]; + r7->unk68.unk0C[0][r4_ - 1] = r6; + r3 = r7->unk68.filler20[0][r4_]; + r7->unk68.filler20[0][r4_] = r7->unk68.filler20[0][r4_ - 1]; + r7->unk68.filler20[0][r4_ - 1] = r3; } - if (r7->unk66.unk0C[1][r4_ - 1] < r7->unk66.unk0C[1][r4_]) + if (r7->unk68.unk0C[1][r4_ - 1] < r7->unk68.unk0C[1][r4_]) { - r6 = r7->unk66.unk0C[1][r4_]; - r7->unk66.unk0C[1][r4_] = r7->unk66.unk0C[1][r4_ - 1]; - r7->unk66.unk0C[1][r4_ - 1] = r6; - r3 = r7->unk66.filler20[1][r4_]; - r7->unk66.filler20[1][r4_] = r7->unk66.filler20[1][r4_ - 1]; - r7->unk66.filler20[1][r4_ - 1] = r3; + r6 = r7->unk68.unk0C[1][r4_]; + r7->unk68.unk0C[1][r4_] = r7->unk68.unk0C[1][r4_ - 1]; + r7->unk68.unk0C[1][r4_ - 1] = r6; + r3 = r7->unk68.filler20[1][r4_]; + r7->unk68.filler20[1][r4_] = r7->unk68.filler20[1][r4_ - 1]; + r7->unk68.filler20[1][r4_ - 1] = r3; } } } - SendBlock(0,&r7->unk66, sizeof(struct BerryCrushGame_66)); + SendBlock(0,&r7->unk68, sizeof(struct BerryCrushGame_68)); break; case 5: if (!IsLinkTaskFinished()) @@ -2874,8 +2874,8 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 case 6: if (GetBlockReceivedStatus() != 1) return 0; - memset(&r7->unk66, 0, sizeof(struct BerryCrushGame_66)); - memcpy(&r7->unk66, gBlockRecvBuffer, sizeof(struct BerryCrushGame_66)); + memset(&r7->unk68, 0, sizeof(struct BerryCrushGame_68)); + memcpy(&r7->unk68, gBlockRecvBuffer, sizeof(struct BerryCrushGame_68)); ResetBlockReceivedFlags(); r7->unk10 = 0; break; @@ -2896,17 +2896,17 @@ static u32 sub_8024048(struct BerryCrushGame *r5, u8 *r6) switch (r5->unkC) { case 0: - if (!sub_8022070(r5, &r5->unk136)) + if (!sub_8022070(r5, &r5->unk138)) return 0; break; case 1: CopyBgTilemapBufferToVram(0); - r5->unk136.unk0 = 30; + r5->unk138.unk0 = 30; break; case 2: - if (r5->unk136.unk0 != 0) + if (r5->unk138.unk0 != 0) { - --r5->unk136.unk0; + --r5->unk138.unk0; return 0; } if (!(JOY_NEW(A_BUTTON))) @@ -2941,7 +2941,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4) { case 0: if (r5->unk28 >= 36000) - sub_8022554(&r5->unk136); + sub_8022554(&r5->unk138); sub_8024644(r4, 8, 0, 0, 1); r5->unkE = 19; sub_8022BEC(3, 1, NULL); @@ -2991,7 +2991,7 @@ static u32 sub_8024228(struct BerryCrushGame *r5, u8 *r6) r4 = Menu_ProcessInputNoWrapClearOnChoose(); if (r4 != -2) { - memset(r5->unk40, 0, sizeof(r5->unk40)); + memset(r5->unk42, 0, sizeof(r5->unk42)); if (r4 == 0) { if (HasAtLeastOneBerry()) @@ -3027,9 +3027,9 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 case 1: if (!IsLinkTaskFinished()) return 0; - r4->unk40[0] = r4->unk14; - r4->unk4C[0] = 0; - SendBlock(0, r4->unk40, sizeof(u16)); + r4->unk42[0] = r4->unk14; + r4->unk4E[0] = 0; + SendBlock(0, r4->unk42, sizeof(u16)); break; case 2: if (!IsLinkTaskFinished()) @@ -3040,14 +3040,14 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 if (GetBlockReceivedStatus() != gUnknown_082F4448[r4->unk9 - 2]) return 0; for (; r5 < r4->unk9; ++r5) - r4->unk4C[0] += gBlockRecvBuffer[r5][0]; - if (r4->unk4C != 0) + r4->unk4E[0] += gBlockRecvBuffer[r5][0]; + if (r4->unk4E != 0) sub_8022BEC(23, 1, NULL); else sub_8022BEC(22, 1, NULL); ResetBlockReceivedFlags(); - r4->unk40[0] = 0; - r4->unk4C[0] = 0; + r4->unk42[0] = 0; + r4->unk4E[0] = 0; r4->unk10 = 0; r4->unkC = 0; return 0; @@ -3101,11 +3101,11 @@ static u32 sub_8024444(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1 case 1: if (IsTextPrinterActive(0)) return 0; - r5->unk136.unk0 = 120; + r5->unk138.unk0 = 120; break; case 2: - if (r5->unk136.unk0 != 0) - --r5->unk136.unk0; + if (r5->unk138.unk0 != 0) + --r5->unk138.unk0; else { sub_8022BEC(24, 1, NULL); @@ -3175,16 +3175,16 @@ void sub_8024578(struct BerryCrushGame *r4) r4->unk34 = 0; for (; r5 < 5; ++r5) { - r4->unk96[r5].unkC = -1; - r4->unk96[r5].unkE = 0; - r4->unk96[r5].unk10 = 0; - r4->unk96[r5].unk12 = 1; - r4->unk96[r5].unk14 = 0; - r4->unk96[r5].unk16 = 0; - r4->unk96[r5].unk18 = 0; - r4->unk96[r5].unk1A = 0; - r4->unk96[r5].unk1B = 0; - r4->unk96[r5].unk1C = 0; + r4->unk98[r5].unkC = -1; + r4->unk98[r5].unkE = 0; + r4->unk98[r5].unk10 = 0; + r4->unk98[r5].unk12 = 1; + r4->unk98[r5].unk14 = 0; + r4->unk98[r5].unk16 = 0; + r4->unk98[r5].unk18 = 0; + r4->unk98[r5].unk1A = 0; + r4->unk98[r5].unk1B = 0; + r4->unk98[r5].unk1C = 0; } } From b3f9a08ba6d17c9a91d715ca356a252713599dbb Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 21 Dec 2020 20:24:36 -0500 Subject: [PATCH 138/177] fix sub_8021A28 --- src/berry_crush.c | 200 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 193 insertions(+), 7 deletions(-) diff --git a/src/berry_crush.c b/src/berry_crush.c index 3a43b60ab6..cdaa585c4c 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1388,7 +1388,193 @@ void sub_80219C8(u8 windowId, u8 left, u8 colorId, const u8 *string) AddTextPrinterParameterized3(windowId, 2, left, 0, sBerryCrushTextColorTable[colorId], 0, string); } -void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) //////// +#include "global.h" +#include "battle_anim.h" +#include "berry.h" +#include "berry_powder.h" +#include "bg.h" +#include "decompress.h" +#include "dynamic_placeholder_text_util.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "international_string_util.h" +#include "item_icon.h" +#include "item_menu.h" +#include "link.h" +#include "link_rfu.h" +#include "main.h" +#include "malloc.h" +#include "math_util.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "random.h" +#include "save.h" +#include "scanline_effect.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trig.h" +#include "window.h" +#include "constants/items.h" +#include "constants/rgb.h" +#include "constants/songs.h" + +struct BerryCrushGame_Player +{ + u8 unk0[PLAYER_NAME_LENGTH + 1 + 4]; + u16 unkC; + u16 unkE; + u16 unk10; + u16 unk12; + u16 unk14; + u16 unk16; + u16 unk18; + u16 unk1A; + u8 unk1B; + u8 unk1C; +}; + +struct BerryCrushGame_4E +{ + u16 unk0; + u16 filler2; + u8 unk4_0:1; + u8 unk4_1:1; + u8 unk4_2:1; + u8 unk4_3:5; + s8 unk5; + u16 unk6; + u16 unk8; + u16 unkA; + u16 unkC; +}; + +struct BerryCrushGame_40 +{ + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC; + s16 unkE; +}; + +struct BerryCrushGame_5C +{ + u16 unk00; + u8 unk02_0:1; + u8 unk02_1:1; + u8 unk02_2:1; + u8 unk02_3:5; + s8 unk03; + u16 unk04; + u16 unk06; + u16 unk08; + u16 unk0A; +}; + +struct BerryCrushGame_68 +{ + u32 unk00; + u16 unk04; + u16 unk06; + u16 unk08; + u16 unk0A; + u16 unk0C[2][5]; + u8 filler20[2][8]; +}; + +struct BerryCrushGame_138_C +{ + u8 unk0; + u8 unk1; + u8 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; +}; + +struct BerryCrushGame_138 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + s16 unk4; + s16 unk6; + s16 unk8; + const struct BerryCrushGame_138_C *unkC[5]; + struct Sprite *unk20; + struct Sprite *unk24[5]; + struct Sprite *unk38[5]; + struct Sprite *unk4C[11]; + struct Sprite *unk78[2]; + u8 unk80; + u8 filler81; + u8 unk82; + u8 unk83[5]; + u16 unk88[4][0x800]; +}; + +struct BerryCrushGame +{ + MainCallback unk0; + u32 (* unk4)(struct BerryCrushGame *, u8 *); + u8 unk8; + u8 unk9; + u8 mainTask; + u8 unkB; + u8 unkC; + u8 unkD; + u8 unkE; + u8 unkF; + u16 unk10; + u16 unk12; + u16 unk14; + u16 unk16; + s16 unk18; + s16 unk1A; + s32 unk1C; + s32 unk20; + u8 unk24; + u8 unk25_0:1; + u8 unk25_1:1; + u8 unk25_2:1; + u8 unk25_3:1; + u8 unk25_4:1; + u8 unk25_5:3; + u16 unk26; + u16 unk28; + s16 unk2A; + s16 unk2C; + s16 unk2E; + s16 unk30; + s16 unk32; + s16 unk34; + u8 unk36[0xC]; + u16 unk42[6]; + u16 unk4E[7]; + struct BerryCrushGame_5C unk5C; + struct BerryCrushGame_68 unk68; + struct BerryCrushGame_Player unk98[5]; + struct BerryCrushGame_138 unk138; +}; + +extern const u8 *const gUnknown_082F43B4[]; +extern const u32 sPressingSpeedConversionTable[]; +extern const u8 sBerryCrushTextColorTable[][3]; + +void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) { u8 r8; u8 sp1C = 0; @@ -1426,12 +1612,12 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) ////// if (r8 != 0 && sp24->unk0C[sp10][r8] != sp24->unk0C[sp10][r8 - 1]) sp20 = r8; ConvertIntToDecimalStringN(gStringVar1, sp24->unk0C[sp10][r8] >> 4, STR_CONV_MODE_RIGHT_ALIGN, 3); - r3 = 0; + xOffset = 0; r7 = sp24->unk0C[sp10][r8] & 15; for (r2 = 0; r2 < 4; ++r2) if ((r7 >> (3 - r2)) & 1) - r3 += sPressingSpeedConversionTable[r2]; - r7 = r3 / 1000000u; + xOffset += sPressingSpeedConversionTable[r2]; + r7 = xOffset / 1000000u; ConvertIntToDecimalStringN(gStringVar2, r7, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gUnknown_082F43B4[sp10]); break; @@ -1442,11 +1628,11 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) ////// if (r2 >= LAST_BERRY_INDEX - FIRST_BERRY_INDEX + 2) r2 = 0; StringCopy(gStringVar1, gBerries[r2].name); - StringExpandPlaceholders(gStringVar4, gUnknown_082F43B4[2]); + StringExpandPlaceholders(gStringVar4, gUnknown_082F43B4[sp10]); break; } - xOffset = GetStringRightAlignXOffset(2, gStringVar4, sp14 - 4); - AddTextPrinterParameterized3(sp0C->unk138.unk82, 2, xOffset, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); + r3 = GetStringRightAlignXOffset(2, gStringVar4, sp14 - 4); + AddTextPrinterParameterized3(sp0C->unk138.unk82, 2, r3, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); if (sp1C == sp0C->unk8) StringCopy(gStringVar3, gText_1DotBlueF700); else From 01ea4793901df345be937391b76f0df0bf9f84a1 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 21 Dec 2020 20:25:59 -0500 Subject: [PATCH 139/177] oops --- src/berry_crush.c | 186 ---------------------------------------------- 1 file changed, 186 deletions(-) diff --git a/src/berry_crush.c b/src/berry_crush.c index cdaa585c4c..68fdb9c860 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1388,192 +1388,6 @@ void sub_80219C8(u8 windowId, u8 left, u8 colorId, const u8 *string) AddTextPrinterParameterized3(windowId, 2, left, 0, sBerryCrushTextColorTable[colorId], 0, string); } -#include "global.h" -#include "battle_anim.h" -#include "berry.h" -#include "berry_powder.h" -#include "bg.h" -#include "decompress.h" -#include "dynamic_placeholder_text_util.h" -#include "event_data.h" -#include "gpu_regs.h" -#include "graphics.h" -#include "international_string_util.h" -#include "item_icon.h" -#include "item_menu.h" -#include "link.h" -#include "link_rfu.h" -#include "main.h" -#include "malloc.h" -#include "math_util.h" -#include "menu.h" -#include "overworld.h" -#include "palette.h" -#include "random.h" -#include "save.h" -#include "scanline_effect.h" -#include "script.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "strings.h" -#include "task.h" -#include "text.h" -#include "text_window.h" -#include "trig.h" -#include "window.h" -#include "constants/items.h" -#include "constants/rgb.h" -#include "constants/songs.h" - -struct BerryCrushGame_Player -{ - u8 unk0[PLAYER_NAME_LENGTH + 1 + 4]; - u16 unkC; - u16 unkE; - u16 unk10; - u16 unk12; - u16 unk14; - u16 unk16; - u16 unk18; - u16 unk1A; - u8 unk1B; - u8 unk1C; -}; - -struct BerryCrushGame_4E -{ - u16 unk0; - u16 filler2; - u8 unk4_0:1; - u8 unk4_1:1; - u8 unk4_2:1; - u8 unk4_3:5; - s8 unk5; - u16 unk6; - u16 unk8; - u16 unkA; - u16 unkC; -}; - -struct BerryCrushGame_40 -{ - s16 unk0; - s16 unk2; - s16 unk4; - s16 unk6; - s16 unk8; - s16 unkA; - s16 unkC; - s16 unkE; -}; - -struct BerryCrushGame_5C -{ - u16 unk00; - u8 unk02_0:1; - u8 unk02_1:1; - u8 unk02_2:1; - u8 unk02_3:5; - s8 unk03; - u16 unk04; - u16 unk06; - u16 unk08; - u16 unk0A; -}; - -struct BerryCrushGame_68 -{ - u32 unk00; - u16 unk04; - u16 unk06; - u16 unk08; - u16 unk0A; - u16 unk0C[2][5]; - u8 filler20[2][8]; -}; - -struct BerryCrushGame_138_C -{ - u8 unk0; - u8 unk1; - u8 unk2; - s16 unk4; - s16 unk6; - s16 unk8; - s16 unkA; -}; - -struct BerryCrushGame_138 -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - s16 unk4; - s16 unk6; - s16 unk8; - const struct BerryCrushGame_138_C *unkC[5]; - struct Sprite *unk20; - struct Sprite *unk24[5]; - struct Sprite *unk38[5]; - struct Sprite *unk4C[11]; - struct Sprite *unk78[2]; - u8 unk80; - u8 filler81; - u8 unk82; - u8 unk83[5]; - u16 unk88[4][0x800]; -}; - -struct BerryCrushGame -{ - MainCallback unk0; - u32 (* unk4)(struct BerryCrushGame *, u8 *); - u8 unk8; - u8 unk9; - u8 mainTask; - u8 unkB; - u8 unkC; - u8 unkD; - u8 unkE; - u8 unkF; - u16 unk10; - u16 unk12; - u16 unk14; - u16 unk16; - s16 unk18; - s16 unk1A; - s32 unk1C; - s32 unk20; - u8 unk24; - u8 unk25_0:1; - u8 unk25_1:1; - u8 unk25_2:1; - u8 unk25_3:1; - u8 unk25_4:1; - u8 unk25_5:3; - u16 unk26; - u16 unk28; - s16 unk2A; - s16 unk2C; - s16 unk2E; - s16 unk30; - s16 unk32; - s16 unk34; - u8 unk36[0xC]; - u16 unk42[6]; - u16 unk4E[7]; - struct BerryCrushGame_5C unk5C; - struct BerryCrushGame_68 unk68; - struct BerryCrushGame_Player unk98[5]; - struct BerryCrushGame_138 unk138; -}; - -extern const u8 *const gUnknown_082F43B4[]; -extern const u32 sPressingSpeedConversionTable[]; -extern const u8 sBerryCrushTextColorTable[][3]; - void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) { u8 r8; From 45a1156dc833896ed17a51c06a4d7c1b3276a98c Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Mon, 21 Dec 2020 22:36:28 -0500 Subject: [PATCH 140/177] fix remaining functions, finally matches --- src/berry_crush.c | 109 +++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 55 deletions(-) diff --git a/src/berry_crush.c b/src/berry_crush.c index 68fdb9c860..289c53da97 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1756,12 +1756,11 @@ void sub_8022600(struct BerryCrushGame *r6) void sub_80226D0(struct BerryCrushGame *r6) { u8 r5 = 0; - u16 * r4; + u8 * r4; LZ77UnCompWram(gUnknown_08DE3FD4, gDecompressionBuffer); - r4 = (u16 *)gDecompressionBuffer; - for (; r5 < r6->unk9; ++r5) + for (r4 = gDecompressionBuffer; r5 < r6->unk9; ++r5) { CopyToBgTilemapBufferRect( 3, @@ -2331,77 +2330,77 @@ void sub_802339C(struct BerryCrushGame *r4) { u8 r8 = 0; u8 r7 = 0; - u16 r3 = 0; + u16 r3; s32 r2_ = 0; struct BerryCrushGame_4E *r2; for (r7 = 0; r7 < r4->unk9; r7++) { r2 = (struct BerryCrushGame_4E *)gRecvCmds[r7]; - if ((r2->unk0 & 0xFF00) == RFUCMD_SEND_PACKET - && r2->filler2 == 2) + if ((r2->unk0 & 0xFF00) != RFUCMD_SEND_PACKET) + continue; + if (r2->filler2 != 2) + continue; + + if (r2->unk4_2) { - if (r2->unk4_2) + r4->unk5C.unk02_3 |= gUnknown_082F325C[r7]; + r4->unk98[r7].unk1C = 1; + ++r4->unk98[r7].unk16; + ++r8; + r3 = r4->unk28 - r4->unk98[r7].unkE; + if (r3 >= r4->unk98[r7].unk12 - 1 && r3 <= r4->unk98[r7].unk12 + 1) { - r4->unk5C.unk02_3 |= gUnknown_082F325C[r7]; - r4->unk98[r7].unk1C = 1; - ++r4->unk98[r7].unk16; - ++r8; - r3 = r4->unk28 - r4->unk98[r7].unkE; - if (r3 >= r4->unk98[r7].unk12 - 1 && r3 <= r4->unk98[r7].unk12 + 1) - { - ++r4->unk98[r7].unk10; - r4->unk98[r7].unk12 = r3; - if (r4->unk98[r7].unk10 > r4->unk98[r7].unk14) - r4->unk98[r7].unk14 = r4->unk98[r7].unk10; - } - else - { - r4->unk98[r7].unk10 = 0; - r4->unk98[r7].unk12 = r3; - } - r4->unk98[r7].unkE = r4->unk28; - ++r4->unk98[r7].unk1B; - if (r4->unk98[r7].unk1B > 2) - r4->unk98[r7].unk1B = 0; + ++r4->unk98[r7].unk10; + r4->unk98[r7].unk12 = r3; + if (r4->unk98[r7].unk10 > r4->unk98[r7].unk14) + r4->unk98[r7].unk14 = r4->unk98[r7].unk10; } else { - r4->unk98[r7].unk1C = 0; + r4->unk98[r7].unk10 = 0; + r4->unk98[r7].unk12 = r3; } + r4->unk98[r7].unkE = r4->unk28; + ++r4->unk98[r7].unk1B; + if (r4->unk98[r7].unk1B > 2) + r4->unk98[r7].unk1B = 0; } + else + { + r4->unk98[r7].unk1C = 0; + } + } if (r8 > 1) { for (r7 = 0; r7 < r4->unk9; ++r7) { - if (r4->unk98[r7].unk1C != 0) - { - r4->unk98[r7].unk1C |= 2; - ++r4->unk98[r7].unk18; - } + if (!r4->unk98[r7].unk1C) + continue; + r4->unk98[r7].unk1C |= 2; + ++r4->unk98[r7].unk18; } } - if (r8 != 0) + if (r8 == 0) + return; + + r4->unk2E += r8; + r8 += gUnknown_082F3264[r8 - 1]; + r4->unk34 += r8; + r4->unk1A += r8; + if (r4->unk18 - r4->unk1A > 0) { - r4->unk2E += r8; - r8 += gUnknown_082F3264[r8 - 1]; - r4->unk34 += r8; - r4->unk1A += r8; - if (r4->unk18 - r4->unk1A > 0) - { - r2_ = (s32)r4->unk1A; - r2_ <<= 8; - r2_ = MathUtil_Div32(r2_, r4->unk20); - r2_ >>= 8; - r4->unk24 = (u8)r2_; - } - else - { - r4->unk24 = 32; - r4->unk5C.unk02_0 = 1; - } + r2_ = (s32)r4->unk1A; + r2_ <<= 8; + r2_ = MathUtil_Div32(r2_, r4->unk20); + r2_ >>= 8; + r4->unk24 = (u8)r2_; + return; } + + r4->unk24 = 32; + r4->unk5C.unk02_0 = 1; } void sub_8023558(struct BerryCrushGame *r3) @@ -2739,7 +2738,7 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 switch (r7->unkC) { case 0: - memset(r7->unk42, 0, sizeof(r7->unk42)); + memset(r7->unk42, 0, 2 * sizeof(u16)); if (r7->unk98[r7->unk8].unk1A > r7->unk28) r7->unk98[r7->unk8].unk1A = r7->unk28; r7->unk42[0] = r7->unk98[r7->unk8].unk1A; @@ -2974,7 +2973,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4) static u32 sub_8024228(struct BerryCrushGame *r5, u8 *r6) { - s8 r4; + s8 r4 = 0; switch (r5->unkC) { @@ -3041,7 +3040,7 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 return 0; for (; r5 < r4->unk9; ++r5) r4->unk4E[0] += gBlockRecvBuffer[r5][0]; - if (r4->unk4E != 0) + if (r4->unk4E[0] != 0) sub_8022BEC(23, 1, NULL); else sub_8022BEC(22, 1, NULL); From 254b4e621ce2b1a468c8251f5207823171af1007 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Tue, 22 Dec 2020 00:08:15 -0500 Subject: [PATCH 141/177] change "filler" to "unk", remove newline --- src/berry_crush.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/berry_crush.c b/src/berry_crush.c index 289c53da97..90bc7150d2 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -56,7 +56,7 @@ struct BerryCrushGame_Player struct BerryCrushGame_4E { u16 unk0; - u16 filler2; + u16 unk2; u8 unk4_0:1; u8 unk4_1:1; u8 unk4_2:1; @@ -102,7 +102,7 @@ struct BerryCrushGame_68 u16 unk08; u16 unk0A; u16 unk0C[2][5]; - u8 filler20[2][8]; + u8 unk20[2][8]; }; struct BerryCrushGame_138_C @@ -1415,14 +1415,14 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) switch (sp10) { case 0: - sp1C = sp24->filler20[sp10][r8]; + sp1C = sp24->unk20[sp10][r8]; if (r8 != 0 && sp24->unk0C[sp10][r8] != sp24->unk0C[sp10][r8 - 1]) sp20 = r8; ConvertIntToDecimalStringN(gStringVar4, sp24->unk0C[sp10][r8], STR_CONV_MODE_RIGHT_ALIGN, 4); StringAppend(gStringVar4, gUnknown_082F43B4[sp10]); break; case 1: - sp1C = sp24->filler20[sp10][r8]; + sp1C = sp24->unk20[sp10][r8]; if (r8 != 0 && sp24->unk0C[sp10][r8] != sp24->unk0C[sp10][r8 - 1]) sp20 = r8; ConvertIntToDecimalStringN(gStringVar1, sp24->unk0C[sp10][r8] >> 4, STR_CONV_MODE_RIGHT_ALIGN, 3); @@ -1539,7 +1539,7 @@ bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_138 *r6) r6->unk80 = 5; return FALSE; case 12: - sub_80219C8(r6->unk82, 20, 4, gUnknown_082F43B4[r4->unk68.filler20[0][7] + 3]); + sub_80219C8(r6->unk82, 20, 4, gUnknown_082F43B4[r4->unk68.unk20[0][7] + 3]); sub_8021A28(r4, 1, 0xA0, 8 * gUnknown_082F3344[0][r5]); r6->unk80 = 5; return FALSE; @@ -2339,7 +2339,7 @@ void sub_802339C(struct BerryCrushGame *r4) r2 = (struct BerryCrushGame_4E *)gRecvCmds[r7]; if ((r2->unk0 & 0xFF00) != RFUCMD_SEND_PACKET) continue; - if (r2->filler2 != 2) + if (r2->unk2 != 2) continue; if (r2->unk4_2) @@ -2370,7 +2370,6 @@ void sub_802339C(struct BerryCrushGame *r4) { r4->unk98[r7].unk1C = 0; } - } if (r8 > 1) { @@ -2775,14 +2774,14 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 r4 = Q_24_8(r7->unk1C * r7->unk9); r4 = MathUtil_Mul32(r4, r2); r7->unk68.unk00 = r4 >> 8; - r7->unk68.filler20[0][7] = Random() % 3; + r7->unk68.unk20[0][7] = Random() % 3; for (r8 = 0; r8 < r7->unk9; ++r8) { - r7->unk68.filler20[0][r8] = r8; - r7->unk68.filler20[1][r8] = r8; + r7->unk68.unk20[0][r8] = r8; + r7->unk68.unk20[1][r8] = r8; r7->unk68.unk0C[0][r8] = r7->unk98[r8].unk16; r7->unk68.unk0A += r7->unk68.unk0C[0][r8]; - switch (r7->unk68.filler20[0][7]) + switch (r7->unk68.unk20[0][7]) { case 0: if (r7->unk98[r8].unk16 != 0) @@ -2848,18 +2847,18 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 r6 = r7->unk68.unk0C[0][r4_]; r7->unk68.unk0C[0][r4_] = r7->unk68.unk0C[0][r4_ - 1]; r7->unk68.unk0C[0][r4_ - 1] = r6; - r3 = r7->unk68.filler20[0][r4_]; - r7->unk68.filler20[0][r4_] = r7->unk68.filler20[0][r4_ - 1]; - r7->unk68.filler20[0][r4_ - 1] = r3; + r3 = r7->unk68.unk20[0][r4_]; + r7->unk68.unk20[0][r4_] = r7->unk68.unk20[0][r4_ - 1]; + r7->unk68.unk20[0][r4_ - 1] = r3; } if (r7->unk68.unk0C[1][r4_ - 1] < r7->unk68.unk0C[1][r4_]) { r6 = r7->unk68.unk0C[1][r4_]; r7->unk68.unk0C[1][r4_] = r7->unk68.unk0C[1][r4_ - 1]; r7->unk68.unk0C[1][r4_ - 1] = r6; - r3 = r7->unk68.filler20[1][r4_]; - r7->unk68.filler20[1][r4_] = r7->unk68.filler20[1][r4_ - 1]; - r7->unk68.filler20[1][r4_ - 1] = r3; + r3 = r7->unk68.unk20[1][r4_]; + r7->unk68.unk20[1][r4_] = r7->unk68.unk20[1][r4_ - 1]; + r7->unk68.unk20[1][r4_ - 1] = r3; } } } From 769ddf22c266c2bf41d3353c5972bca8fa49c085 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 24 Dec 2020 16:18:47 -0500 Subject: [PATCH 142/177] Label remaining subs in battle_tower.c --- asm/macros/battle_frontier/battle_tower.inc | 6 +- .../scripts.inc | 2 +- include/battle_tower.h | 2 +- include/constants/battle_tower.h | 2 +- include/pokemon.h | 4 +- include/recorded_battle.h | 2 +- src/battle_main.c | 2 +- src/battle_tower.c | 62 +++++++++++-------- src/pokemon.c | 23 ++++--- src/recorded_battle.c | 2 +- 10 files changed, 60 insertions(+), 47 deletions(-) diff --git a/asm/macros/battle_frontier/battle_tower.inc b/asm/macros/battle_frontier/battle_tower.inc index 71e795b1d1..ccc777c507 100644 --- a/asm/macros/battle_frontier/battle_tower.inc +++ b/asm/macros/battle_frontier/battle_tower.inc @@ -72,9 +72,9 @@ special CallBattleTowerFunc .endm - @ Unknown. Destroys some link task if using wireless link. Wait for link? - .macro tower_unklink - setvar VAR_0x8004, BATTLE_TOWER_FUNC_13 + @ Attempts to close link connection. Used when finishing a link multi challenge. + .macro tower_closelink + setvar VAR_0x8004, BATTLE_TOWER_FUNC_TRY_CLOSE_LINK special CallBattleTowerFunc .endm diff --git a/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc index 493588b4dd..cc623e2166 100644 --- a/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc @@ -443,7 +443,7 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyMultis:: @ 82421F2 end BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyLinkMultis:: @ 82421FC - tower_unklink + tower_closelink warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, 255, 18, 6 waitstate end diff --git a/include/battle_tower.h b/include/battle_tower.h index 30649719b4..a803145927 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -83,6 +83,6 @@ u8 GetFrontierEnemyMonLevel(u8 lvlMode); s32 GetHighestLevelInPlayerParty(void); u8 FacilityClassToGraphicsId(u8 facilityClass); bool32 ValidateBattleTowerRecord(u8 recordId); // unused -void sub_8166188(void); +void TrySetLinkBattleTowerEnemyPartyLevel(void); #endif //GUARD_BATTLE_TOWER_H diff --git a/include/constants/battle_tower.h b/include/constants/battle_tower.h index b372c3ad5c..f661ddc0bc 100644 --- a/include/constants/battle_tower.h +++ b/include/constants/battle_tower.h @@ -14,7 +14,7 @@ #define BATTLE_TOWER_FUNC_LOAD_PARTNERS 10 #define BATTLE_TOWER_FUNC_PARTNER_MSG 11 #define BATTLE_TOWER_FUNC_LOAD_LINK_OPPONENTS 12 -#define BATTLE_TOWER_FUNC_13 13 +#define BATTLE_TOWER_FUNC_TRY_CLOSE_LINK 13 #define BATTLE_TOWER_FUNC_SET_PARTNER_GFX 14 #define BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA 15 diff --git a/include/pokemon.h b/include/pokemon.h index a956b9c406..497e8070b4 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -275,7 +275,7 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src); void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50); void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); -void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest); +void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); bool8 sub_80688F8(u8 caseId, u8 battlerId); void SetDeoxysStats(void); @@ -381,7 +381,7 @@ void ClearBattleMonForms(void); u16 GetBattleBGM(void); void PlayBattleBGM(void); void PlayMapChosenOrBattleBGM(u16 songId); -void sub_806E694(u16 songId); +void CreateTask_PlayMapChosenOrBattleBGM(u16 songId); const u32 *GetMonFrontSpritePal(struct Pokemon *mon); const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality); const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon); diff --git a/include/recorded_battle.h b/include/recorded_battle.h index 84c5c2ea29..252b25502f 100644 --- a/include/recorded_battle.h +++ b/include/recorded_battle.h @@ -30,7 +30,7 @@ void sub_818603C(u8 arg0); u32 GetAiScriptsInRecordedBattle(void); void sub_8186444(void); bool8 sub_8186450(void); -void sub_8186468(u8 *dst); +void GetRecordedBattleRecordMixFriendName(u8 *dst); u8 GetRecordedBattleRecordMixFriendClass(void); u8 GetRecordedBattleApprenticeId(void); u8 GetRecordedBattleRecordMixFriendLanguage(void); diff --git a/src/battle_main.c b/src/battle_main.c index 5bc80f61e8..29a8f560a1 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1357,7 +1357,7 @@ static void CB2_HandleStartMultiPartnerBattle(void) case 16: if (BattleInitAllSprites(&gBattleCommunication[SPRITES_INIT_STATE1], &gBattleCommunication[SPRITES_INIT_STATE2])) { - sub_8166188(); + TrySetLinkBattleTowerEnemyPartyLevel(); gPreBattleCallback1 = gMain.callback1; gMain.callback1 = BattleMainCB1; SetMainCallback2(BattleMainCB2); diff --git a/src/battle_tower.c b/src/battle_tower.c index d7123f3d20..ee75feeb43 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -57,12 +57,12 @@ static void SetTowerBattleWon(void); static void AwardBattleTowerRibbons(void); static void SaveTowerChallenge(void); static void GetOpponentIntroSpeech(void); -static void nullsub_61(void); -static void nullsub_116(void); +static void BattleTowerNop1(void); +static void BattleTowerNop2(void); static void LoadMultiPartnerCandidatesData(void); static void ShowPartnerCandidateMessage(void); static void LoadLinkMultiOpponentsData(void); -static void sub_8164DCC(void); +static void TowerTryCloseLink(void); static void SetMultiPartnerGfx(void); static void SetTowerInterviewData(void); static void ValidateBattleTowerRecordChecksums(void); @@ -811,12 +811,12 @@ static void (* const sBattleTowerFuncs[])(void) = [BATTLE_TOWER_FUNC_GIVE_RIBBONS] = AwardBattleTowerRibbons, [BATTLE_TOWER_FUNC_SAVE] = SaveTowerChallenge, [BATTLE_TOWER_FUNC_GET_OPPONENT_INTRO] = GetOpponentIntroSpeech, - [BATTLE_TOWER_FUNC_NOP] = nullsub_61, - [BATTLE_TOWER_FUNC_NOP2] = nullsub_116, + [BATTLE_TOWER_FUNC_NOP] = BattleTowerNop1, + [BATTLE_TOWER_FUNC_NOP2] = BattleTowerNop2, [BATTLE_TOWER_FUNC_LOAD_PARTNERS] = LoadMultiPartnerCandidatesData, [BATTLE_TOWER_FUNC_PARTNER_MSG] = ShowPartnerCandidateMessage, [BATTLE_TOWER_FUNC_LOAD_LINK_OPPONENTS] = LoadLinkMultiOpponentsData, - [BATTLE_TOWER_FUNC_13] = sub_8164DCC, + [BATTLE_TOWER_FUNC_TRY_CLOSE_LINK] = TowerTryCloseLink, [BATTLE_TOWER_FUNC_SET_PARTNER_GFX] = SetMultiPartnerGfx, [BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA] = SetTowerInterviewData, }; @@ -1547,7 +1547,7 @@ void GetFrontierTrainerName(u8 *dst, u16 trainerId) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) { - sub_8186468(dst); + GetRecordedBattleRecordMixFriendName(dst); return; } else @@ -2059,7 +2059,7 @@ void DoSpecialTrainerBattle(void) if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) FillFrontierTrainerParty(DOME_BATTLE_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); - sub_806E694(0); + CreateTask_PlayMapChosenOrBattleBGM(0); BattleTransition_StartOnField(GetSpecialBattleTransition(3)); break; case SPECIAL_BATTLE_PALACE: @@ -2139,7 +2139,7 @@ static void SaveCurrentWinStreak(void) gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = winStreak; } -static void sub_8163EE4(void) +static void SaveBattleTowerRecord(void) { s32 i; u8 lvlMode, battleMode, class; @@ -2178,7 +2178,7 @@ static void sub_8163EE4(void) for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) { if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0) - sub_80686FC(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], &playerRecord->party[i]); + ConvertPokemonToBattleTowerPokemon(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], &playerRecord->party[i]); } playerRecord->language = gGameLanguage; @@ -2193,7 +2193,7 @@ static void SaveTowerChallenge(void) s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7); if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0)) - sub_8163EE4(); + SaveBattleTowerRecord(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); @@ -2201,12 +2201,12 @@ static void SaveTowerChallenge(void) SaveGameFrontier(); } -static void nullsub_61(void) +static void BattleTowerNop1(void) { } -static void nullsub_116(void) +static void BattleTowerNop2(void) { } @@ -2410,7 +2410,7 @@ static void LoadMultiPartnerCandidatesData(void) } } -static void sub_81646BC(u16 trainerId, u16 monId) +static void GetPotentialPartnerMoveAndSpecies(u16 trainerId, u16 monId) { u16 move = 0; u16 species = 0; @@ -2445,6 +2445,14 @@ static void sub_81646BC(u16 trainerId, u16 monId) StringCopy(gStringVar2, gSpeciesNames[species]); } +// For multi battles in the Battle Tower, the player may choose a partner by talking to them +// These partners can be an NPC or a former/record-mixed Apprentice +// When talked to, their response consists of: +// PARTNER_MSGID_INTRO - A greeting +// PARTNER_MSGID_MON1 - Naming one pokemon on their team, and a move it has +// PARTNER_MSGID_MON2_ASK - Naming a second pokemon on their team, a move it has, and asking if they'd like to be their partner +// PARTNER_MSGID_ACCEPT - If the player agrees to be their partner +// PARTNER_MSGID_REJECT - If the player declines to be their partner static void ShowPartnerCandidateMessage(void) { s32 i, j, partnerId; @@ -2487,11 +2495,11 @@ static void ShowPartnerCandidateMessage(void) break; case PARTNER_MSGID_MON1: monId = gSaveBlock2Ptr->frontier.trainerIds[8 + k * 2]; - sub_81646BC(trainerId, monId); + GetPotentialPartnerMoveAndSpecies(trainerId, monId); break; case PARTNER_MSGID_MON2_ASK: monId = gSaveBlock2Ptr->frontier.trainerIds[9 + k * 2]; - sub_81646BC(trainerId, monId); + GetPotentialPartnerMoveAndSpecies(trainerId, monId); break; case PARTNER_MSGID_ACCEPT: gPartnerTrainerId = trainerId; @@ -2643,7 +2651,7 @@ static void LoadLinkMultiOpponentsData(void) } } -static void sub_8164DCC(void) +static void TowerTryCloseLink(void) { if (gWirelessCommType != 0) SetCloseLinkCallback(); @@ -2838,7 +2846,7 @@ static void FillEReaderTrainerWithPlayerData(void) } for (i = 0; i < 3; i++) - sub_80686FC(&gPlayerParty[i], &ereaderTrainer->party[i]); + ConvertPokemonToBattleTowerPokemon(&gPlayerParty[i], &ereaderTrainer->party[i]); SetEReaderTrainerChecksum(ereaderTrainer); } @@ -3292,16 +3300,16 @@ static u8 GetFrontierTrainerFixedIvs(u16 trainerId) return fixedIv; } -static u16 sub_8165D40(void) +static u16 GetBattleTentTrainerId(void) { u32 facility = VarGet(VAR_FRONTIER_FACILITY); - if (facility == FRONTIER_FACILITY_PALACE) - return Random() % 30; - else if (facility == FRONTIER_FACILITY_ARENA) - return Random() % 30; - else if (facility == FRONTIER_FACILITY_FACTORY) - return Random() % 30; + if (facility == FRONTIER_FACILITY_PALACE) // Verdanturf Tent; uses Palace mechanics + return Random() % NUM_BATTLE_TENT_TRAINERS; + else if (facility == FRONTIER_FACILITY_ARENA) // Fallarbor Tent; uses Arena mechanics + return Random() % NUM_BATTLE_TENT_TRAINERS; + else if (facility == FRONTIER_FACILITY_FACTORY) // Slateport Tent; uses Factory mechanics + return Random() % NUM_BATTLE_TENT_TRAINERS; else if (facility == FRONTIER_FACILITY_TOWER) return 0; else @@ -3348,7 +3356,7 @@ static void SetNextBattleTentOpponent(void) do { - trainerId = sub_8165D40(); + trainerId = GetBattleTentTrainerId(); for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId) @@ -3511,7 +3519,7 @@ bool32 ValidateBattleTowerRecord(u8 recordId) // unused } } -void sub_8166188(void) +void TrySetLinkBattleTowerEnemyPartyLevel(void) { if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) { diff --git a/src/pokemon.c b/src/pokemon.c index 4753735503..b5eee16b23 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -57,7 +57,7 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon); static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType); static void EncryptBoxMon(struct BoxPokemon *boxMon); static void DecryptBoxMon(struct BoxPokemon *boxMon); -static void sub_806E6CC(u8 taskId); +static void Task_PlayMapChosenOrBattleBGM(u8 taskId); static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId); static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); static bool8 ShouldSkipFriendshipChange(void); @@ -2578,7 +2578,7 @@ void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, CalculateMonStats(mon); } -void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest) +void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest) { s32 i; u16 heldItem; @@ -2587,7 +2587,7 @@ void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest) heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); if (heldItem == ITEM_ENIGMA_BERRY) - heldItem = 0; + heldItem = ITEM_NONE; dest->heldItem = heldItem; @@ -6334,26 +6334,31 @@ void PlayMapChosenOrBattleBGM(u16 songId) PlayNewMapMusic(GetBattleBGM()); } -void sub_806E694(u16 songId) +// Identical to PlayMapChosenOrBattleBGM, but uses a task instead +// Only used by Battle Dome +#define tSongId data[0] +void CreateTask_PlayMapChosenOrBattleBGM(u16 songId) { u8 taskId; ResetMapMusic(); m4aMPlayAllStop(); - taskId = CreateTask(sub_806E6CC, 0); - gTasks[taskId].data[0] = songId; + taskId = CreateTask(Task_PlayMapChosenOrBattleBGM, 0); + gTasks[taskId].tSongId = songId; } -static void sub_806E6CC(u8 taskId) +static void Task_PlayMapChosenOrBattleBGM(u8 taskId) { - if (gTasks[taskId].data[0]) - PlayNewMapMusic(gTasks[taskId].data[0]); + if (gTasks[taskId].tSongId) + PlayNewMapMusic(gTasks[taskId].tSongId); else PlayNewMapMusic(GetBattleBGM()); DestroyTask(taskId); } +#undef tSongId + const u32 *GetMonFrontSpritePal(struct Pokemon *mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 5a0579f709..881c2d3ec8 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -846,7 +846,7 @@ bool8 sub_8186450(void) return (sUnknown_0203CCD0 == 0); } -void sub_8186468(u8 *dst) +void GetRecordedBattleRecordMixFriendName(u8 *dst) { s32 i; From b155c307eadea2e5bd168abfce7df677d0edba8f Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Sat, 26 Dec 2020 17:23:36 -0800 Subject: [PATCH 143/177] Add UBFIX for null deref in CameraObjectReset2 --- src/event_object_movement.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 1d06ddc84d..12ef4acdc0 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -2275,7 +2275,18 @@ u8 CameraObjectGetFollowedObjectId(void) void CameraObjectReset2(void) { + // UB: Possible null dereference +#ifdef UBFIX + struct Sprite *cameraObject; + + cameraObject = FindCameraObject(); + if (cameraObject != NULL) + { + cameraObject->data[1] = 2; + } +#else FindCameraObject()->data[1] = 2; +#endif // UBFIX } u8 CopySprite(struct Sprite *sprite, s16 x, s16 y, u8 subpriority) From 86fdd033c62d54d679f2c28b5f446e2ef2df7e3e Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Sat, 26 Dec 2020 17:39:24 -0800 Subject: [PATCH 144/177] Add UBFIX for null derefs in sub_8088950 --- src/fieldmap.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/fieldmap.c b/src/fieldmap.c index 49337ebbec..296c4edf25 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -797,15 +797,33 @@ bool8 CameraMove(int x, int y) struct MapConnection *sub_8088950(u8 direction, int x, int y) { int count; - struct MapConnection *connection; int i; - count = gMapHeader.connections->count; - connection = gMapHeader.connections->connections; + struct MapConnection *connection; + const struct MapConnections *connections = gMapHeader.connections; + // UB: Multiple possible null dereferences +#ifdef UBFIX + if (connections != NULL) + { + count = connections->count; + connection = connections->connections; + if (connection != NULL) + { + for (i = 0; i < count; i++, connection++) + { + if (connection->direction == direction && sub_80889A8(direction, x, y, connection) == TRUE) + return connection; + } + } + } +#else + count = connections->count; + connection = connections->connections; for (i = 0; i < count; i++, connection++) { if (connection->direction == direction && sub_80889A8(direction, x, y, connection) == TRUE) return connection; } +#endif return NULL; } From bafbf9240d0f91ee3c38ca4652e3c54b9c503c9b Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Sat, 26 Dec 2020 17:47:36 -0800 Subject: [PATCH 145/177] Add UBFIX for null deref in sub_80D08CC --- src/pokemon_storage_system.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index db8f3d2bb4..4be1cf729f 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -8408,8 +8408,13 @@ static void sub_80D08CC(void) for (j = sMoveMonsPtr->minRow; j < rowCount; j++) { struct BoxPokemon *boxMon = GetBoxedMonPtr(boxId, boxPosition); - + // UB: possible null dereference +#ifdef UBFIX + if (boxMon != NULL) + sMoveMonsPtr->boxMons[monArrayId] = *boxMon; +#else sMoveMonsPtr->boxMons[monArrayId] = *boxMon; +#endif monArrayId++; boxPosition++; } From 127bb97c0e5c50b9f22715bdf4e958937f7ef992 Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Sat, 26 Dec 2020 18:25:21 -0800 Subject: [PATCH 146/177] Add UBFIX for division by zero in SpriteCB_PokedexListMonSprite --- src/pokedex.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/pokedex.c b/src/pokedex.c index 516cef6a72..691abd649f 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -3037,7 +3037,15 @@ static void SpriteCB_PokedexListMonSprite(struct Sprite *sprite) u32 var; sprite->pos2.y = gSineTable[(u8)sprite->data[5]] * 76 / 256; + // UB: possible division by zero +#ifdef UBFIX + if (gSineTable[sprite->data[5] + 64] != 0) + var = 0x10000 / gSineTable[sprite->data[5] + 64]; + else + var = 0xFFFF; +#else var = 0x10000 / gSineTable[sprite->data[5] + 64]; +#endif //UBFIX if (var > 0xFFFF) var = 0xFFFF; SetOamMatrix(sprite->data[1] + 1, 0x100, 0, 0, var); From 2f426e0e7d70217d50f281484a6772c25e2e39b0 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 29 Dec 2020 16:51:44 -0500 Subject: [PATCH 147/177] Index battle controller cmd tables --- include/battle_controllers.h | 26 ++-- src/battle_controller_link_opponent.c | 138 ++++++++++----------- src/battle_controller_link_partner.c | 138 ++++++++++----------- src/battle_controller_opponent.c | 140 +++++++++++----------- src/battle_controller_player.c | 140 +++++++++++----------- src/battle_controller_player_partner.c | 140 +++++++++++----------- src/battle_controller_recorded_opponent.c | 138 ++++++++++----------- src/battle_controller_recorded_player.c | 138 ++++++++++----------- src/battle_controller_safari.c | 130 ++++++++++---------- src/battle_controller_wally.c | 130 ++++++++++---------- src/battle_controllers.c | 40 +++---- 11 files changed, 649 insertions(+), 649 deletions(-) diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 32918fefba..5b1ada11a4 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -85,8 +85,8 @@ enum struct UnusedControllerStruct { - u8 field_0:7; - u8 flag_x80:1; + u8 unk:7; + u8 flag:1; }; struct HpAndStatus @@ -145,19 +145,19 @@ enum CONTROLLER_STATUSXOR, CONTROLLER_DATATRANSFER, CONTROLLER_DMA3TRANSFER, - CONTROLLER_31, + CONTROLLER_PLAYBGM, CONTROLLER_32, CONTROLLER_TWORETURNVALUES, CONTROLLER_CHOSENMONRETURNVALUE, CONTROLLER_ONERETURNVALUE, CONTROLLER_ONERETURNVALUE_DUPLICATE, - CONTROLLER_37, - CONTROLLER_38, - CONTROLLER_39, - CONTROLLER_40, + CONTROLLER_CLEARUNKVAR, + CONTROLLER_SETUNKVAR, + CONTROLLER_CLEARUNKFLAG, + CONTROLLER_TOGGLEUNKFLAG, CONTROLLER_HITANIMATION, CONTROLLER_42, - CONTROLLER_EFFECTIVENESSSOUND, + CONTROLLER_PLAYSE, CONTROLLER_PLAYFANFAREORBGM, CONTROLLER_FAINTINGCRY, CONTROLLER_INTROSLIDE, @@ -175,7 +175,7 @@ enum CONTROLLER_CMDS_COUNT }; -extern struct UnusedControllerStruct gUnknown_02022D0C; +extern struct UnusedControllerStruct gUnusedControllerStruct; // general functions void HandleLinkBattleSetup(void); @@ -222,10 +222,10 @@ void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2); void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c); void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1); void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b); -void BtlController_EmitCmd37(u8 bufferId); // unused -void BtlController_EmitCmd38(u8 bufferId, u8 b); // unused -void BtlController_EmitCmd39(u8 bufferId); // unused -void BtlController_EmitCmd40(u8 bufferId); // unused +void BtlController_EmitClearUnkVar(u8 bufferId); // unused +void BtlController_EmitSetUnkVar(u8 bufferId, u8 b); // unused +void BtlController_EmitClearUnkFlag(u8 bufferId); // unused +void BtlController_EmitToggleUnkFlag(u8 bufferId); // unused void BtlController_EmitHitAnimation(u8 bufferId); void BtlController_EmitCmd42(u8 bufferId); void BtlController_EmitPlaySE(u8 bufferId, u16 songId); diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 1041f6fda0..269b4c1b4a 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -69,10 +69,10 @@ static void LinkOpponentHandleTwoReturnValues(void); static void LinkOpponentHandleChosenMonReturnValue(void); static void LinkOpponentHandleOneReturnValue(void); static void LinkOpponentHandleOneReturnValue_Duplicate(void); -static void LinkOpponentHandleCmd37(void); -static void LinkOpponentHandleCmd38(void); -static void LinkOpponentHandleCmd39(void); -static void LinkOpponentHandleCmd40(void); +static void LinkOpponentHandleClearUnkVar(void); +static void LinkOpponentHandleSetUnkVar(void); +static void LinkOpponentHandleClearUnkFlag(void); +static void LinkOpponentHandleToggleUnkFlag(void); static void LinkOpponentHandleHitAnimation(void); static void LinkOpponentHandleCmd42(void); static void LinkOpponentHandlePlaySE(void); @@ -104,63 +104,63 @@ static void sub_806782C(void); static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - LinkOpponentHandleGetMonData, - LinkOpponentHandleGetRawMonData, - LinkOpponentHandleSetMonData, - LinkOpponentHandleSetRawMonData, - LinkOpponentHandleLoadMonSprite, - LinkOpponentHandleSwitchInAnim, - LinkOpponentHandleReturnMonToBall, - LinkOpponentHandleDrawTrainerPic, - LinkOpponentHandleTrainerSlide, - LinkOpponentHandleTrainerSlideBack, - LinkOpponentHandleFaintAnimation, - LinkOpponentHandlePaletteFade, - LinkOpponentHandleSuccessBallThrowAnim, - LinkOpponentHandleBallThrowAnim, - LinkOpponentHandlePause, - LinkOpponentHandleMoveAnimation, - LinkOpponentHandlePrintString, - LinkOpponentHandlePrintSelectionString, - LinkOpponentHandleChooseAction, - LinkOpponentHandleUnknownYesNoBox, - LinkOpponentHandleChooseMove, - LinkOpponentHandleChooseItem, - LinkOpponentHandleChoosePokemon, - LinkOpponentHandleCmd23, - LinkOpponentHandleHealthBarUpdate, - LinkOpponentHandleExpUpdate, - LinkOpponentHandleStatusIconUpdate, - LinkOpponentHandleStatusAnimation, - LinkOpponentHandleStatusXor, - LinkOpponentHandleDataTransfer, - LinkOpponentHandleDMA3Transfer, - LinkOpponentHandlePlayBGM, - LinkOpponentHandleCmd32, - LinkOpponentHandleTwoReturnValues, - LinkOpponentHandleChosenMonReturnValue, - LinkOpponentHandleOneReturnValue, - LinkOpponentHandleOneReturnValue_Duplicate, - LinkOpponentHandleCmd37, - LinkOpponentHandleCmd38, - LinkOpponentHandleCmd39, - LinkOpponentHandleCmd40, - LinkOpponentHandleHitAnimation, - LinkOpponentHandleCmd42, - LinkOpponentHandlePlaySE, - LinkOpponentHandlePlayFanfareOrBGM, - LinkOpponentHandleFaintingCry, - LinkOpponentHandleIntroSlide, - LinkOpponentHandleIntroTrainerBallThrow, - LinkOpponentHandleDrawPartyStatusSummary, - LinkOpponentHandleHidePartyStatusSummary, - LinkOpponentHandleEndBounceEffect, - LinkOpponentHandleSpriteInvisibility, - LinkOpponentHandleBattleAnimation, - LinkOpponentHandleLinkStandbyMsg, - LinkOpponentHandleResetActionMoveSelection, - LinkOpponentHandleCmd55, - LinkOpponentCmdEnd + [CONTROLLER_GETMONDATA] = LinkOpponentHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = LinkOpponentHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = LinkOpponentHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = LinkOpponentHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = LinkOpponentHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = LinkOpponentHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = LinkOpponentHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = LinkOpponentHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = LinkOpponentHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = LinkOpponentHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = LinkOpponentHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = LinkOpponentHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = LinkOpponentHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = LinkOpponentHandleBallThrowAnim, + [CONTROLLER_PAUSE] = LinkOpponentHandlePause, + [CONTROLLER_MOVEANIMATION] = LinkOpponentHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = LinkOpponentHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkOpponentHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = LinkOpponentHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = LinkOpponentHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = LinkOpponentHandleChooseMove, + [CONTROLLER_OPENBAG] = LinkOpponentHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = LinkOpponentHandleChoosePokemon, + [CONTROLLER_23] = LinkOpponentHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = LinkOpponentHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = LinkOpponentHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = LinkOpponentHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = LinkOpponentHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = LinkOpponentHandleStatusXor, + [CONTROLLER_DATATRANSFER] = LinkOpponentHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = LinkOpponentHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = LinkOpponentHandlePlayBGM, + [CONTROLLER_32] = LinkOpponentHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = LinkOpponentHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = LinkOpponentHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = LinkOpponentHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkOpponentHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = LinkOpponentHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = LinkOpponentHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = LinkOpponentHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = LinkOpponentHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = LinkOpponentHandleHitAnimation, + [CONTROLLER_42] = LinkOpponentHandleCmd42, + [CONTROLLER_PLAYSE] = LinkOpponentHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = LinkOpponentHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = LinkOpponentHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = LinkOpponentHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = LinkOpponentHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkOpponentHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkOpponentHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = LinkOpponentHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = LinkOpponentHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = LinkOpponentHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = LinkOpponentHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = LinkOpponentHandleResetActionMoveSelection, + [CONTROLLER_55] = LinkOpponentHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = LinkOpponentCmdEnd }; static void nullsub_28(void) @@ -1604,27 +1604,27 @@ static void LinkOpponentHandleOneReturnValue_Duplicate(void) LinkOpponentBufferExecCompleted(); } -static void LinkOpponentHandleCmd37(void) +static void LinkOpponentHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; LinkOpponentBufferExecCompleted(); } -static void LinkOpponentHandleCmd38(void) +static void LinkOpponentHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; LinkOpponentBufferExecCompleted(); } -static void LinkOpponentHandleCmd39(void) +static void LinkOpponentHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; LinkOpponentBufferExecCompleted(); } -static void LinkOpponentHandleCmd40(void) +static void LinkOpponentHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; LinkOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index af81b06d5b..d3037bb905 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -67,10 +67,10 @@ static void LinkPartnerHandleTwoReturnValues(void); static void LinkPartnerHandleChosenMonReturnValue(void); static void LinkPartnerHandleOneReturnValue(void); static void LinkPartnerHandleOneReturnValue_Duplicate(void); -static void LinkPartnerHandleCmd37(void); -static void LinkPartnerHandleCmd38(void); -static void LinkPartnerHandleCmd39(void); -static void LinkPartnerHandleCmd40(void); +static void LinkPartnerHandleClearUnkVar(void); +static void LinkPartnerHandleSetUnkVar(void); +static void LinkPartnerHandleClearUnkFlag(void); +static void LinkPartnerHandleToggleUnkFlag(void); static void LinkPartnerHandleHitAnimation(void); static void LinkPartnerHandleCmd42(void); static void LinkPartnerHandlePlaySE(void); @@ -101,63 +101,63 @@ static void sub_814DE9C(void); static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - LinkPartnerHandleGetMonData, - LinkPartnerHandleGetRawMonData, - LinkPartnerHandleSetMonData, - LinkPartnerHandleSetRawMonData, - LinkPartnerHandleLoadMonSprite, - LinkPartnerHandleSwitchInAnim, - LinkPartnerHandleReturnMonToBall, - LinkPartnerHandleDrawTrainerPic, - LinkPartnerHandleTrainerSlide, - LinkPartnerHandleTrainerSlideBack, - LinkPartnerHandleFaintAnimation, - LinkPartnerHandlePaletteFade, - LinkPartnerHandleSuccessBallThrowAnim, - LinkPartnerHandleBallThrowAnim, - LinkPartnerHandlePause, - LinkPartnerHandleMoveAnimation, - LinkPartnerHandlePrintString, - LinkPartnerHandlePrintSelectionString, - LinkPartnerHandleChooseAction, - LinkPartnerHandleUnknownYesNoBox, - LinkPartnerHandleChooseMove, - LinkPartnerHandleChooseItem, - LinkPartnerHandleChoosePokemon, - LinkPartnerHandleCmd23, - LinkPartnerHandleHealthBarUpdate, - LinkPartnerHandleExpUpdate, - LinkPartnerHandleStatusIconUpdate, - LinkPartnerHandleStatusAnimation, - LinkPartnerHandleStatusXor, - LinkPartnerHandleDataTransfer, - LinkPartnerHandleDMA3Transfer, - LinkPartnerHandlePlayBGM, - LinkPartnerHandleCmd32, - LinkPartnerHandleTwoReturnValues, - LinkPartnerHandleChosenMonReturnValue, - LinkPartnerHandleOneReturnValue, - LinkPartnerHandleOneReturnValue_Duplicate, - LinkPartnerHandleCmd37, - LinkPartnerHandleCmd38, - LinkPartnerHandleCmd39, - LinkPartnerHandleCmd40, - LinkPartnerHandleHitAnimation, - LinkPartnerHandleCmd42, - LinkPartnerHandlePlaySE, - LinkPartnerHandlePlayFanfareOrBGM, - LinkPartnerHandleFaintingCry, - LinkPartnerHandleIntroSlide, - LinkPartnerHandleIntroTrainerBallThrow, - LinkPartnerHandleDrawPartyStatusSummary, - LinkPartnerHandleHidePartyStatusSummary, - LinkPartnerHandleEndBounceEffect, - LinkPartnerHandleSpriteInvisibility, - LinkPartnerHandleBattleAnimation, - LinkPartnerHandleLinkStandbyMsg, - LinkPartnerHandleResetActionMoveSelection, - LinkPartnerHandleCmd55, - LinkPartnerCmdEnd + [CONTROLLER_GETMONDATA] = LinkPartnerHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = LinkPartnerHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = LinkPartnerHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = LinkPartnerHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = LinkPartnerHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = LinkPartnerHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = LinkPartnerHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = LinkPartnerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = LinkPartnerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = LinkPartnerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = LinkPartnerHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = LinkPartnerHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = LinkPartnerHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = LinkPartnerHandleBallThrowAnim, + [CONTROLLER_PAUSE] = LinkPartnerHandlePause, + [CONTROLLER_MOVEANIMATION] = LinkPartnerHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = LinkPartnerHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkPartnerHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = LinkPartnerHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = LinkPartnerHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = LinkPartnerHandleChooseMove, + [CONTROLLER_OPENBAG] = LinkPartnerHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = LinkPartnerHandleChoosePokemon, + [CONTROLLER_23] = LinkPartnerHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = LinkPartnerHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = LinkPartnerHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = LinkPartnerHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = LinkPartnerHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = LinkPartnerHandleStatusXor, + [CONTROLLER_DATATRANSFER] = LinkPartnerHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = LinkPartnerHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = LinkPartnerHandlePlayBGM, + [CONTROLLER_32] = LinkPartnerHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = LinkPartnerHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = LinkPartnerHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = LinkPartnerHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkPartnerHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = LinkPartnerHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = LinkPartnerHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = LinkPartnerHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = LinkPartnerHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = LinkPartnerHandleHitAnimation, + [CONTROLLER_42] = LinkPartnerHandleCmd42, + [CONTROLLER_PLAYSE] = LinkPartnerHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = LinkPartnerHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = LinkPartnerHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = LinkPartnerHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = LinkPartnerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkPartnerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkPartnerHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = LinkPartnerHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = LinkPartnerHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = LinkPartnerHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = LinkPartnerHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = LinkPartnerHandleResetActionMoveSelection, + [CONTROLLER_55] = LinkPartnerHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = LinkPartnerCmdEnd }; static void SpriteCB_Null2(void) @@ -1428,27 +1428,27 @@ static void LinkPartnerHandleOneReturnValue_Duplicate(void) LinkPartnerBufferExecCompleted(); } -static void LinkPartnerHandleCmd37(void) +static void LinkPartnerHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; LinkPartnerBufferExecCompleted(); } -static void LinkPartnerHandleCmd38(void) +static void LinkPartnerHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; LinkPartnerBufferExecCompleted(); } -static void LinkPartnerHandleCmd39(void) +static void LinkPartnerHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; LinkPartnerBufferExecCompleted(); } -static void LinkPartnerHandleCmd40(void) +static void LinkPartnerHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; LinkPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index f186bf3ff6..9fe8caf632 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -74,10 +74,10 @@ static void OpponentHandleTwoReturnValues(void); static void OpponentHandleChosenMonReturnValue(void); static void OpponentHandleOneReturnValue(void); static void OpponentHandleOneReturnValue_Duplicate(void); -static void OpponentHandleCmd37(void); -static void OpponentHandleCmd38(void); -static void OpponentHandleCmd39(void); -static void OpponentHandleCmd40(void); +static void OpponentHandleClearUnkVar(void); +static void OpponentHandleSetUnkVar(void); +static void OpponentHandleClearUnkFlag(void); +static void OpponentHandleToggleUnkFlag(void); static void OpponentHandleHitAnimation(void); static void OpponentHandleCmd42(void); static void OpponentHandlePlaySE(void); @@ -109,67 +109,67 @@ static void sub_8062A2C(void); static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - OpponentHandleGetMonData, - OpponentHandleGetRawMonData, - OpponentHandleSetMonData, - OpponentHandleSetRawMonData, - OpponentHandleLoadMonSprite, - OpponentHandleSwitchInAnim, - OpponentHandleReturnMonToBall, - OpponentHandleDrawTrainerPic, - OpponentHandleTrainerSlide, - OpponentHandleTrainerSlideBack, - OpponentHandleFaintAnimation, - OpponentHandlePaletteFade, - OpponentHandleSuccessBallThrowAnim, - OpponentHandleBallThrow, - OpponentHandlePause, - OpponentHandleMoveAnimation, - OpponentHandlePrintString, - OpponentHandlePrintSelectionString, - OpponentHandleChooseAction, - OpponentHandleUnknownYesNoBox, - OpponentHandleChooseMove, - OpponentHandleChooseItem, - OpponentHandleChoosePokemon, - OpponentHandleCmd23, - OpponentHandleHealthBarUpdate, - OpponentHandleExpUpdate, - OpponentHandleStatusIconUpdate, - OpponentHandleStatusAnimation, - OpponentHandleStatusXor, - OpponentHandleDataTransfer, - OpponentHandleDMA3Transfer, - OpponentHandlePlayBGM, - OpponentHandleCmd32, - OpponentHandleTwoReturnValues, - OpponentHandleChosenMonReturnValue, - OpponentHandleOneReturnValue, - OpponentHandleOneReturnValue_Duplicate, - OpponentHandleCmd37, - OpponentHandleCmd38, - OpponentHandleCmd39, - OpponentHandleCmd40, - OpponentHandleHitAnimation, - OpponentHandleCmd42, - OpponentHandlePlaySE, - OpponentHandlePlayFanfareOrBGM, - OpponentHandleFaintingCry, - OpponentHandleIntroSlide, - OpponentHandleIntroTrainerBallThrow, - OpponentHandleDrawPartyStatusSummary, - OpponentHandleHidePartyStatusSummary, - OpponentHandleEndBounceEffect, - OpponentHandleSpriteInvisibility, - OpponentHandleBattleAnimation, - OpponentHandleLinkStandbyMsg, - OpponentHandleResetActionMoveSelection, - OpponentHandleCmd55, - OpponentCmdEnd + [CONTROLLER_GETMONDATA] = OpponentHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = OpponentHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = OpponentHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = OpponentHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = OpponentHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = OpponentHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = OpponentHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = OpponentHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = OpponentHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = OpponentHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = OpponentHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = OpponentHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = OpponentHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = OpponentHandleBallThrow, + [CONTROLLER_PAUSE] = OpponentHandlePause, + [CONTROLLER_MOVEANIMATION] = OpponentHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = OpponentHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = OpponentHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = OpponentHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = OpponentHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = OpponentHandleChooseMove, + [CONTROLLER_OPENBAG] = OpponentHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = OpponentHandleChoosePokemon, + [CONTROLLER_23] = OpponentHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = OpponentHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = OpponentHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = OpponentHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = OpponentHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = OpponentHandleStatusXor, + [CONTROLLER_DATATRANSFER] = OpponentHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = OpponentHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = OpponentHandlePlayBGM, + [CONTROLLER_32] = OpponentHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = OpponentHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = OpponentHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = OpponentHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = OpponentHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = OpponentHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = OpponentHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = OpponentHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = OpponentHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = OpponentHandleHitAnimation, + [CONTROLLER_42] = OpponentHandleCmd42, + [CONTROLLER_PLAYSE] = OpponentHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = OpponentHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = OpponentHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = OpponentHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = OpponentHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = OpponentHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = OpponentHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = OpponentHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = OpponentHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = OpponentHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = OpponentHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = OpponentHandleResetActionMoveSelection, + [CONTROLLER_55] = OpponentHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = OpponentCmdEnd }; // unknown unused data -static const u8 sUnknown_0831C7AC[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20}; +static const u8 sUnused[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20}; static void nullsub_26(void) { @@ -1769,27 +1769,27 @@ static void OpponentHandleOneReturnValue_Duplicate(void) OpponentBufferExecCompleted(); } -static void OpponentHandleCmd37(void) +static void OpponentHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; OpponentBufferExecCompleted(); } -static void OpponentHandleCmd38(void) +static void OpponentHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; OpponentBufferExecCompleted(); } -static void OpponentHandleCmd39(void) +static void OpponentHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; OpponentBufferExecCompleted(); } -static void OpponentHandleCmd40(void) +static void OpponentHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; OpponentBufferExecCompleted(); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 7c34efd443..c1d7fc2a43 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -75,10 +75,10 @@ static void PlayerHandleTwoReturnValues(void); static void PlayerHandleChosenMonReturnValue(void); static void PlayerHandleOneReturnValue(void); static void PlayerHandleOneReturnValue_Duplicate(void); -static void PlayerHandleCmd37(void); -static void PlayerHandleCmd38(void); -static void PlayerHandleCmd39(void); -static void PlayerHandleCmd40(void); +static void PlayerHandleClearUnkVar(void); +static void PlayerHandleSetUnkVar(void); +static void PlayerHandleClearUnkFlag(void); +static void PlayerHandleToggleUnkFlag(void); static void PlayerHandleHitAnimation(void); static void PlayerHandleCmd42(void); static void PlayerHandlePlaySE(void); @@ -125,69 +125,69 @@ static void sub_805CE38(void); static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - PlayerHandleGetMonData, - PlayerHandleGetRawMonData, - PlayerHandleSetMonData, - PlayerHandleSetRawMonData, - PlayerHandleLoadMonSprite, - PlayerHandleSwitchInAnim, - PlayerHandleReturnMonToBall, - PlayerHandleDrawTrainerPic, - PlayerHandleTrainerSlide, - PlayerHandleTrainerSlideBack, - PlayerHandleFaintAnimation, - PlayerHandlePaletteFade, - PlayerHandleSuccessBallThrowAnim, - PlayerHandleBallThrowAnim, - PlayerHandlePause, - PlayerHandleMoveAnimation, - PlayerHandlePrintString, - PlayerHandlePrintSelectionString, - PlayerHandleChooseAction, - PlayerHandleUnknownYesNoBox, - PlayerHandleChooseMove, - PlayerHandleChooseItem, - PlayerHandleChoosePokemon, - PlayerHandleCmd23, - PlayerHandleHealthBarUpdate, - PlayerHandleExpUpdate, - PlayerHandleStatusIconUpdate, - PlayerHandleStatusAnimation, - PlayerHandleStatusXor, - PlayerHandleDataTransfer, - PlayerHandleDMA3Transfer, - PlayerHandlePlayBGM, - PlayerHandleCmd32, - PlayerHandleTwoReturnValues, - PlayerHandleChosenMonReturnValue, - PlayerHandleOneReturnValue, - PlayerHandleOneReturnValue_Duplicate, - PlayerHandleCmd37, - PlayerHandleCmd38, - PlayerHandleCmd39, - PlayerHandleCmd40, - PlayerHandleHitAnimation, - PlayerHandleCmd42, - PlayerHandlePlaySE, - PlayerHandlePlayFanfareOrBGM, - PlayerHandleFaintingCry, - PlayerHandleIntroSlide, - PlayerHandleIntroTrainerBallThrow, - PlayerHandleDrawPartyStatusSummary, - PlayerHandleHidePartyStatusSummary, - PlayerHandleEndBounceEffect, - PlayerHandleSpriteInvisibility, - PlayerHandleBattleAnimation, - PlayerHandleLinkStandbyMsg, - PlayerHandleResetActionMoveSelection, - PlayerHandleCmd55, - PlayerCmdEnd + [CONTROLLER_GETMONDATA] = PlayerHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = PlayerHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = PlayerHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = PlayerHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = PlayerHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = PlayerHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = PlayerHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = PlayerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = PlayerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = PlayerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = PlayerHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = PlayerHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = PlayerHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = PlayerHandleBallThrowAnim, + [CONTROLLER_PAUSE] = PlayerHandlePause, + [CONTROLLER_MOVEANIMATION] = PlayerHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = PlayerHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = PlayerHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = PlayerHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = PlayerHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = PlayerHandleChooseMove, + [CONTROLLER_OPENBAG] = PlayerHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = PlayerHandleChoosePokemon, + [CONTROLLER_23] = PlayerHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = PlayerHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = PlayerHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = PlayerHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = PlayerHandleStatusXor, + [CONTROLLER_DATATRANSFER] = PlayerHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = PlayerHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = PlayerHandlePlayBGM, + [CONTROLLER_32] = PlayerHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = PlayerHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = PlayerHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = PlayerHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = PlayerHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = PlayerHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = PlayerHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = PlayerHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = PlayerHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = PlayerHandleHitAnimation, + [CONTROLLER_42] = PlayerHandleCmd42, + [CONTROLLER_PLAYSE] = PlayerHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = PlayerHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = PlayerHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = PlayerHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = PlayerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = PlayerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = PlayerHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = PlayerHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = PlayerHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = PlayerHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = PlayerHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = PlayerHandleResetActionMoveSelection, + [CONTROLLER_55] = PlayerHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = PlayerCmdEnd }; static const u8 sTargetIdentities[] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT}; // unknown unused data -static const u8 sUnknown_0831C5FC[] = {0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58}; +static const u8 sUnused[] = {0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58}; void nullsub_21(void) { @@ -2822,27 +2822,27 @@ static void PlayerHandleOneReturnValue_Duplicate(void) PlayerBufferExecCompleted(); } -static void PlayerHandleCmd37(void) +static void PlayerHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; PlayerBufferExecCompleted(); } -static void PlayerHandleCmd38(void) +static void PlayerHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; PlayerBufferExecCompleted(); } -static void PlayerHandleCmd39(void) +static void PlayerHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; PlayerBufferExecCompleted(); } -static void PlayerHandleCmd40(void) +static void PlayerHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; PlayerBufferExecCompleted(); } diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index af6b739ccf..d826d2183a 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -65,10 +65,10 @@ static void PlayerPartnerHandleTwoReturnValues(void); static void PlayerPartnerHandleChosenMonReturnValue(void); static void PlayerPartnerHandleOneReturnValue(void); static void PlayerPartnerHandleOneReturnValue_Duplicate(void); -static void PlayerPartnerHandleCmd37(void); -static void PlayerPartnerHandleCmd38(void); -static void PlayerPartnerHandleCmd39(void); -static void PlayerPartnerHandleCmd40(void); +static void PlayerPartnerHandleClearUnkVar(void); +static void PlayerPartnerHandleSetUnkVar(void); +static void PlayerPartnerHandleClearUnkFlag(void); +static void PlayerPartnerHandleToggleUnkFlag(void); static void PlayerPartnerHandleHitAnimation(void); static void PlayerPartnerHandleCmd42(void); static void PlayerPartnerHandlePlaySE(void); @@ -105,67 +105,67 @@ static void sub_81BE498(void); static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - PlayerPartnerHandleGetMonData, - PlayerPartnerHandleGetRawMonData, - PlayerPartnerHandleSetMonData, - PlayerPartnerHandleSetRawMonData, - PlayerPartnerHandleLoadMonSprite, - PlayerPartnerHandleSwitchInAnim, - PlayerPartnerHandleReturnMonToBall, - PlayerPartnerHandleDrawTrainerPic, - PlayerPartnerHandleTrainerSlide, - PlayerPartnerHandleTrainerSlideBack, - PlayerPartnerHandleFaintAnimation, - PlayerPartnerHandlePaletteFade, - PlayerPartnerHandleSuccessBallThrowAnim, - PlayerPartnerHandleBallThrowAnim, - PlayerPartnerHandlePause, - PlayerPartnerHandleMoveAnimation, - PlayerPartnerHandlePrintString, - PlayerPartnerHandlePrintSelectionString, - PlayerPartnerHandleChooseAction, - PlayerPartnerHandleUnknownYesNoBox, - PlayerPartnerHandleChooseMove, - PlayerPartnerHandleChooseItem, - PlayerPartnerHandleChoosePokemon, - PlayerPartnerHandleCmd23, - PlayerPartnerHandleHealthBarUpdate, - PlayerPartnerHandleExpUpdate, - PlayerPartnerHandleStatusIconUpdate, - PlayerPartnerHandleStatusAnimation, - PlayerPartnerHandleStatusXor, - PlayerPartnerHandleDataTransfer, - PlayerPartnerHandleDMA3Transfer, - PlayerPartnerHandlePlayBGM, - PlayerPartnerHandleCmd32, - PlayerPartnerHandleTwoReturnValues, - PlayerPartnerHandleChosenMonReturnValue, - PlayerPartnerHandleOneReturnValue, - PlayerPartnerHandleOneReturnValue_Duplicate, - PlayerPartnerHandleCmd37, - PlayerPartnerHandleCmd38, - PlayerPartnerHandleCmd39, - PlayerPartnerHandleCmd40, - PlayerPartnerHandleHitAnimation, - PlayerPartnerHandleCmd42, - PlayerPartnerHandlePlaySE, - PlayerPartnerHandlePlayFanfareOrBGM, - PlayerPartnerHandleFaintingCry, - PlayerPartnerHandleIntroSlide, - PlayerPartnerHandleIntroTrainerBallThrow, - PlayerPartnerHandleDrawPartyStatusSummary, - PlayerPartnerHandleHidePartyStatusSummary, - PlayerPartnerHandleEndBounceEffect, - PlayerPartnerHandleSpriteInvisibility, - PlayerPartnerHandleBattleAnimation, - PlayerPartnerHandleLinkStandbyMsg, - PlayerPartnerHandleResetActionMoveSelection, - PlayerPartnerHandleCmd55, - PlayerPartnerCmdEnd + [CONTROLLER_GETMONDATA] = PlayerPartnerHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = PlayerPartnerHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = PlayerPartnerHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = PlayerPartnerHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = PlayerPartnerHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = PlayerPartnerHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = PlayerPartnerHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = PlayerPartnerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = PlayerPartnerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = PlayerPartnerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = PlayerPartnerHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = PlayerPartnerHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = PlayerPartnerHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = PlayerPartnerHandleBallThrowAnim, + [CONTROLLER_PAUSE] = PlayerPartnerHandlePause, + [CONTROLLER_MOVEANIMATION] = PlayerPartnerHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = PlayerPartnerHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = PlayerPartnerHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = PlayerPartnerHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = PlayerPartnerHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = PlayerPartnerHandleChooseMove, + [CONTROLLER_OPENBAG] = PlayerPartnerHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = PlayerPartnerHandleChoosePokemon, + [CONTROLLER_23] = PlayerPartnerHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = PlayerPartnerHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = PlayerPartnerHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = PlayerPartnerHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = PlayerPartnerHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = PlayerPartnerHandleStatusXor, + [CONTROLLER_DATATRANSFER] = PlayerPartnerHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = PlayerPartnerHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = PlayerPartnerHandlePlayBGM, + [CONTROLLER_32] = PlayerPartnerHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = PlayerPartnerHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = PlayerPartnerHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = PlayerPartnerHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = PlayerPartnerHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = PlayerPartnerHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = PlayerPartnerHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = PlayerPartnerHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = PlayerPartnerHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = PlayerPartnerHandleHitAnimation, + [CONTROLLER_42] = PlayerPartnerHandleCmd42, + [CONTROLLER_PLAYSE] = PlayerPartnerHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = PlayerPartnerHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = PlayerPartnerHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = PlayerPartnerHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = PlayerPartnerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = PlayerPartnerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = PlayerPartnerHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = PlayerPartnerHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = PlayerPartnerHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = PlayerPartnerHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = PlayerPartnerHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = PlayerPartnerHandleResetActionMoveSelection, + [CONTROLLER_55] = PlayerPartnerHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = PlayerPartnerCmdEnd }; // unknown unused data -static const u8 sUnknown_08617254[] = +static const u8 sUnused[] = { 0x83, 0x4d, 0xf3, 0x5f, 0x6f, 0x4f, 0xeb, 0x3e, 0x67, 0x2e, 0x10, 0x46, 0x8c, 0x3d, 0x28, 0x35, @@ -1679,27 +1679,27 @@ static void PlayerPartnerHandleOneReturnValue_Duplicate(void) PlayerPartnerBufferExecCompleted(); } -static void PlayerPartnerHandleCmd37(void) +static void PlayerPartnerHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; PlayerPartnerBufferExecCompleted(); } -static void PlayerPartnerHandleCmd38(void) +static void PlayerPartnerHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; PlayerPartnerBufferExecCompleted(); } -static void PlayerPartnerHandleCmd39(void) +static void PlayerPartnerHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; PlayerPartnerBufferExecCompleted(); } -static void PlayerPartnerHandleCmd40(void) +static void PlayerPartnerHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; PlayerPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index ca7cd4adc6..63e1ff7a0f 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -69,10 +69,10 @@ static void RecordedOpponentHandleTwoReturnValues(void); static void RecordedOpponentHandleChosenMonReturnValue(void); static void RecordedOpponentHandleOneReturnValue(void); static void RecordedOpponentHandleOneReturnValue_Duplicate(void); -static void RecordedOpponentHandleCmd37(void); -static void RecordedOpponentHandleCmd38(void); -static void RecordedOpponentHandleCmd39(void); -static void RecordedOpponentHandleCmd40(void); +static void RecordedOpponentHandleClearUnkVar(void); +static void RecordedOpponentHandleSetUnkVar(void); +static void RecordedOpponentHandleClearUnkFlag(void); +static void RecordedOpponentHandleToggleUnkFlag(void); static void RecordedOpponentHandleHitAnimation(void); static void RecordedOpponentHandleCmd42(void); static void RecordedOpponentHandlePlaySE(void); @@ -104,63 +104,63 @@ static void sub_818975C(void); static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - RecordedOpponentHandleGetMonData, - RecordedOpponentHandleGetRawMonData, - RecordedOpponentHandleSetMonData, - RecordedOpponentHandleSetRawMonData, - RecordedOpponentHandleLoadMonSprite, - RecordedOpponentHandleSwitchInAnim, - RecordedOpponentHandleReturnMonToBall, - RecordedOpponentHandleDrawTrainerPic, - RecordedOpponentHandleTrainerSlide, - RecordedOpponentHandleTrainerSlideBack, - RecordedOpponentHandleFaintAnimation, - RecordedOpponentHandlePaletteFade, - RecordedOpponentHandleSuccessBallThrowAnim, - RecordedOpponentHandleBallThrowAnim, - RecordedOpponentHandlePause, - RecordedOpponentHandleMoveAnimation, - RecordedOpponentHandlePrintString, - RecordedOpponentHandlePrintSelectionString, - RecordedOpponentHandleChooseAction, - RecordedOpponentHandleUnknownYesNoBox, - RecordedOpponentHandleChooseMove, - RecordedOpponentHandleChooseItem, - RecordedOpponentHandleChoosePokemon, - RecordedOpponentHandleCmd23, - RecordedOpponentHandleHealthBarUpdate, - RecordedOpponentHandleExpUpdate, - RecordedOpponentHandleStatusIconUpdate, - RecordedOpponentHandleStatusAnimation, - RecordedOpponentHandleStatusXor, - RecordedOpponentHandleDataTransfer, - RecordedOpponentHandleDMA3Transfer, - RecordedOpponentHandlePlayBGM, - RecordedOpponentHandleCmd32, - RecordedOpponentHandleTwoReturnValues, - RecordedOpponentHandleChosenMonReturnValue, - RecordedOpponentHandleOneReturnValue, - RecordedOpponentHandleOneReturnValue_Duplicate, - RecordedOpponentHandleCmd37, - RecordedOpponentHandleCmd38, - RecordedOpponentHandleCmd39, - RecordedOpponentHandleCmd40, - RecordedOpponentHandleHitAnimation, - RecordedOpponentHandleCmd42, - RecordedOpponentHandlePlaySE, - RecordedOpponentHandlePlayFanfareOrBGM, - RecordedOpponentHandleFaintingCry, - RecordedOpponentHandleIntroSlide, - RecordedOpponentHandleIntroTrainerBallThrow, - RecordedOpponentHandleDrawPartyStatusSummary, - RecordedOpponentHandleHidePartyStatusSummary, - RecordedOpponentHandleEndBounceEffect, - RecordedOpponentHandleSpriteInvisibility, - RecordedOpponentHandleBattleAnimation, - RecordedOpponentHandleLinkStandbyMsg, - RecordedOpponentHandleResetActionMoveSelection, - RecordedOpponentHandleCmd55, - RecordedOpponentCmdEnd + [CONTROLLER_GETMONDATA] = RecordedOpponentHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = RecordedOpponentHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = RecordedOpponentHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = RecordedOpponentHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = RecordedOpponentHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = RecordedOpponentHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = RecordedOpponentHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = RecordedOpponentHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = RecordedOpponentHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = RecordedOpponentHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = RecordedOpponentHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = RecordedOpponentHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = RecordedOpponentHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = RecordedOpponentHandleBallThrowAnim, + [CONTROLLER_PAUSE] = RecordedOpponentHandlePause, + [CONTROLLER_MOVEANIMATION] = RecordedOpponentHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = RecordedOpponentHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = RecordedOpponentHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = RecordedOpponentHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = RecordedOpponentHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = RecordedOpponentHandleChooseMove, + [CONTROLLER_OPENBAG] = RecordedOpponentHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = RecordedOpponentHandleChoosePokemon, + [CONTROLLER_23] = RecordedOpponentHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = RecordedOpponentHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = RecordedOpponentHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = RecordedOpponentHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = RecordedOpponentHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = RecordedOpponentHandleStatusXor, + [CONTROLLER_DATATRANSFER] = RecordedOpponentHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = RecordedOpponentHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = RecordedOpponentHandlePlayBGM, + [CONTROLLER_32] = RecordedOpponentHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = RecordedOpponentHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = RecordedOpponentHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = RecordedOpponentHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = RecordedOpponentHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = RecordedOpponentHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = RecordedOpponentHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = RecordedOpponentHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = RecordedOpponentHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = RecordedOpponentHandleHitAnimation, + [CONTROLLER_42] = RecordedOpponentHandleCmd42, + [CONTROLLER_PLAYSE] = RecordedOpponentHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = RecordedOpponentHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = RecordedOpponentHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = RecordedOpponentHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = RecordedOpponentHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = RecordedOpponentHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = RecordedOpponentHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = RecordedOpponentHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = RecordedOpponentHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = RecordedOpponentHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = RecordedOpponentHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = RecordedOpponentHandleResetActionMoveSelection, + [CONTROLLER_55] = RecordedOpponentHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = RecordedOpponentCmdEnd }; static void nullsub_70(void) @@ -1544,27 +1544,27 @@ static void RecordedOpponentHandleOneReturnValue_Duplicate(void) RecordedOpponentBufferExecCompleted(); } -static void RecordedOpponentHandleCmd37(void) +static void RecordedOpponentHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; RecordedOpponentBufferExecCompleted(); } -static void RecordedOpponentHandleCmd38(void) +static void RecordedOpponentHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; RecordedOpponentBufferExecCompleted(); } -static void RecordedOpponentHandleCmd39(void) +static void RecordedOpponentHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; RecordedOpponentBufferExecCompleted(); } -static void RecordedOpponentHandleCmd40(void) +static void RecordedOpponentHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; RecordedOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 72af27d5ec..3d4faf0cd0 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -65,10 +65,10 @@ static void RecordedPlayerHandleTwoReturnValues(void); static void RecordedPlayerHandleChosenMonReturnValue(void); static void RecordedPlayerHandleOneReturnValue(void); static void RecordedPlayerHandleOneReturnValue_Duplicate(void); -static void RecordedPlayerHandleCmd37(void); -static void RecordedPlayerHandleCmd38(void); -static void RecordedPlayerHandleCmd39(void); -static void RecordedPlayerHandleCmd40(void); +static void RecordedPlayerHandleClearUnkVar(void); +static void RecordedPlayerHandleSetUnkVar(void); +static void RecordedPlayerHandleClearUnkFlag(void); +static void RecordedPlayerHandleToggleUnkFlag(void); static void RecordedPlayerHandleHitAnimation(void); static void RecordedPlayerHandleCmd42(void); static void RecordedPlayerHandlePlaySE(void); @@ -99,63 +99,63 @@ static void sub_818CDF4(void); static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - RecordedPlayerHandleGetMonData, - RecordedPlayerHandleGetRawMonData, - RecordedPlayerHandleSetMonData, - RecordedPlayerHandleSetRawMonData, - RecordedPlayerHandleLoadMonSprite, - RecordedPlayerHandleSwitchInAnim, - RecordedPlayerHandleReturnMonToBall, - RecordedPlayerHandleDrawTrainerPic, - RecordedPlayerHandleTrainerSlide, - RecordedPlayerHandleTrainerSlideBack, - RecordedPlayerHandleFaintAnimation, - RecordedPlayerHandlePaletteFade, - RecordedPlayerHandleSuccessBallThrowAnim, - RecordedPlayerHandleBallThrowAnim, - RecordedPlayerHandlePause, - RecordedPlayerHandleMoveAnimation, - RecordedPlayerHandlePrintString, - RecordedPlayerHandlePrintSelectionString, - RecordedPlayerHandleChooseAction, - RecordedPlayerHandleUnknownYesNoBox, - RecordedPlayerHandleChooseMove, - RecordedPlayerHandleChooseItem, - RecordedPlayerHandleChoosePokemon, - RecordedPlayerHandleCmd23, - RecordedPlayerHandleHealthBarUpdate, - RecordedPlayerHandleExpUpdate, - RecordedPlayerHandleStatusIconUpdate, - RecordedPlayerHandleStatusAnimation, - RecordedPlayerHandleStatusXor, - RecordedPlayerHandleDataTransfer, - RecordedPlayerHandleDMA3Transfer, - RecordedPlayerHandlePlayBGM, - RecordedPlayerHandleCmd32, - RecordedPlayerHandleTwoReturnValues, - RecordedPlayerHandleChosenMonReturnValue, - RecordedPlayerHandleOneReturnValue, - RecordedPlayerHandleOneReturnValue_Duplicate, - RecordedPlayerHandleCmd37, - RecordedPlayerHandleCmd38, - RecordedPlayerHandleCmd39, - RecordedPlayerHandleCmd40, - RecordedPlayerHandleHitAnimation, - RecordedPlayerHandleCmd42, - RecordedPlayerHandlePlaySE, - RecordedPlayerHandlePlayFanfareOrBGM, - RecordedPlayerHandleFaintingCry, - RecordedPlayerHandleIntroSlide, - RecordedPlayerHandleIntroTrainerBallThrow, - RecordedPlayerHandleDrawPartyStatusSummary, - RecordedPlayerHandleHidePartyStatusSummary, - RecordedPlayerHandleEndBounceEffect, - RecordedPlayerHandleSpriteInvisibility, - RecordedPlayerHandleBattleAnimation, - RecordedPlayerHandleLinkStandbyMsg, - RecordedPlayerHandleResetActionMoveSelection, - RecordedPlayerHandleCmd55, - RecordedPlayerCmdEnd + [CONTROLLER_GETMONDATA] = RecordedPlayerHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = RecordedPlayerHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = RecordedPlayerHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = RecordedPlayerHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = RecordedPlayerHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = RecordedPlayerHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = RecordedPlayerHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = RecordedPlayerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = RecordedPlayerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = RecordedPlayerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = RecordedPlayerHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = RecordedPlayerHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = RecordedPlayerHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = RecordedPlayerHandleBallThrowAnim, + [CONTROLLER_PAUSE] = RecordedPlayerHandlePause, + [CONTROLLER_MOVEANIMATION] = RecordedPlayerHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = RecordedPlayerHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = RecordedPlayerHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = RecordedPlayerHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = RecordedPlayerHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = RecordedPlayerHandleChooseMove, + [CONTROLLER_OPENBAG] = RecordedPlayerHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = RecordedPlayerHandleChoosePokemon, + [CONTROLLER_23] = RecordedPlayerHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = RecordedPlayerHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = RecordedPlayerHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = RecordedPlayerHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = RecordedPlayerHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = RecordedPlayerHandleStatusXor, + [CONTROLLER_DATATRANSFER] = RecordedPlayerHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = RecordedPlayerHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = RecordedPlayerHandlePlayBGM, + [CONTROLLER_32] = RecordedPlayerHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = RecordedPlayerHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = RecordedPlayerHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = RecordedPlayerHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = RecordedPlayerHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = RecordedPlayerHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = RecordedPlayerHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = RecordedPlayerHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = RecordedPlayerHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = RecordedPlayerHandleHitAnimation, + [CONTROLLER_42] = RecordedPlayerHandleCmd42, + [CONTROLLER_PLAYSE] = RecordedPlayerHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = RecordedPlayerHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = RecordedPlayerHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = RecordedPlayerHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = RecordedPlayerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = RecordedPlayerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = RecordedPlayerHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = RecordedPlayerHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = RecordedPlayerHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = RecordedPlayerHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = RecordedPlayerHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = RecordedPlayerHandleResetActionMoveSelection, + [CONTROLLER_55] = RecordedPlayerHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = RecordedPlayerCmdEnd }; static void nullsub_120(void) @@ -1561,27 +1561,27 @@ static void RecordedPlayerHandleOneReturnValue_Duplicate(void) RecordedPlayerBufferExecCompleted(); } -static void RecordedPlayerHandleCmd37(void) +static void RecordedPlayerHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; RecordedPlayerBufferExecCompleted(); } -static void RecordedPlayerHandleCmd38(void) +static void RecordedPlayerHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; RecordedPlayerBufferExecCompleted(); } -static void RecordedPlayerHandleCmd39(void) +static void RecordedPlayerHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; RecordedPlayerBufferExecCompleted(); } -static void RecordedPlayerHandleCmd40(void) +static void RecordedPlayerHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; RecordedPlayerBufferExecCompleted(); } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 9cb427e129..b5a8b1bb66 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -62,10 +62,10 @@ static void SafariHandleTwoReturnValues(void); static void SafariHandleChosenMonReturnValue(void); static void SafariHandleOneReturnValue(void); static void SafariHandleOneReturnValue_Duplicate(void); -static void SafariHandleCmd37(void); -static void SafariHandleCmd38(void); -static void SafariHandleCmd39(void); -static void SafariHandleCmd40(void); +static void SafariHandleClearUnkVar(void); +static void SafariHandleSetUnkVar(void); +static void SafariHandleClearUnkFlag(void); +static void SafariHandleToggleUnkFlag(void); static void SafariHandleHitAnimation(void); static void SafariHandleCmd42(void); static void SafariHandlePlaySE(void); @@ -89,63 +89,63 @@ static void CompleteWhenChosePokeblock(void); static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - SafariHandleGetMonData, - SafariHandleGetRawMonData, - SafariHandleSetMonData, - SafariHandleSetRawMonData, - SafariHandleLoadMonSprite, - SafariHandleSwitchInAnim, - SafariHandleReturnMonToBall, - SafariHandleDrawTrainerPic, - SafariHandleTrainerSlide, - SafariHandleTrainerSlideBack, - SafariHandleFaintAnimation, - SafariHandlePaletteFade, - SafariHandleSuccessBallThrowAnim, - SafariHandleBallThrowAnim, - SafariHandlePause, - SafariHandleMoveAnimation, - SafariHandlePrintString, - SafariHandlePrintSelectionString, - SafariHandleChooseAction, - SafariHandleUnknownYesNoBox, - SafariHandleChooseMove, - SafariHandleChooseItem, - SafariHandleChoosePokemon, - SafariHandleCmd23, - SafariHandleHealthBarUpdate, - SafariHandleExpUpdate, - SafariHandleStatusIconUpdate, - SafariHandleStatusAnimation, - SafariHandleStatusXor, - SafariHandleDataTransfer, - SafariHandleDMA3Transfer, - SafariHandlePlayBGM, - SafariHandleCmd32, - SafariHandleTwoReturnValues, - SafariHandleChosenMonReturnValue, - SafariHandleOneReturnValue, - SafariHandleOneReturnValue_Duplicate, - SafariHandleCmd37, - SafariHandleCmd38, - SafariHandleCmd39, - SafariHandleCmd40, - SafariHandleHitAnimation, - SafariHandleCmd42, - SafariHandlePlaySE, - SafariHandlePlayFanfareOrBGM, - SafariHandleFaintingCry, - SafariHandleIntroSlide, - SafariHandleIntroTrainerBallThrow, - SafariHandleDrawPartyStatusSummary, - SafariHandleHidePartyStatusSummary, - SafariHandleEndBounceEffect, - SafariHandleSpriteInvisibility, - SafariHandleBattleAnimation, - SafariHandleLinkStandbyMsg, - SafariHandleResetActionMoveSelection, - SafariHandleCmd55, - SafariCmdEnd + [CONTROLLER_GETMONDATA] = SafariHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = SafariHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = SafariHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = SafariHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = SafariHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = SafariHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = SafariHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = SafariHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = SafariHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = SafariHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = SafariHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = SafariHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = SafariHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = SafariHandleBallThrowAnim, + [CONTROLLER_PAUSE] = SafariHandlePause, + [CONTROLLER_MOVEANIMATION] = SafariHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = SafariHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = SafariHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = SafariHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = SafariHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = SafariHandleChooseMove, + [CONTROLLER_OPENBAG] = SafariHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = SafariHandleChoosePokemon, + [CONTROLLER_23] = SafariHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = SafariHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = SafariHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = SafariHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = SafariHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = SafariHandleStatusXor, + [CONTROLLER_DATATRANSFER] = SafariHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = SafariHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = SafariHandlePlayBGM, + [CONTROLLER_32] = SafariHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = SafariHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = SafariHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = SafariHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = SafariHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = SafariHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = SafariHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = SafariHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = SafariHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = SafariHandleHitAnimation, + [CONTROLLER_42] = SafariHandleCmd42, + [CONTROLLER_PLAYSE] = SafariHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = SafariHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = SafariHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = SafariHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = SafariHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = SafariHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = SafariHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = SafariHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = SafariHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = SafariHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = SafariHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = SafariHandleResetActionMoveSelection, + [CONTROLLER_55] = SafariHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = SafariCmdEnd }; static void SpriteCB_Null4(void) @@ -553,22 +553,22 @@ static void SafariHandleOneReturnValue_Duplicate(void) SafariBufferExecCompleted(); } -static void SafariHandleCmd37(void) +static void SafariHandleClearUnkVar(void) { SafariBufferExecCompleted(); } -static void SafariHandleCmd38(void) +static void SafariHandleSetUnkVar(void) { SafariBufferExecCompleted(); } -static void SafariHandleCmd39(void) +static void SafariHandleClearUnkFlag(void) { SafariBufferExecCompleted(); } -static void SafariHandleCmd40(void) +static void SafariHandleToggleUnkFlag(void) { SafariBufferExecCompleted(); } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index aa50bc159d..83a977073f 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -70,10 +70,10 @@ static void WallyHandleTwoReturnValues(void); static void WallyHandleChosenMonReturnValue(void); static void WallyHandleOneReturnValue(void); static void WallyHandleOneReturnValue_Duplicate(void); -static void WallyHandleCmd37(void); -static void WallyHandleCmd38(void); -static void WallyHandleCmd39(void); -static void WallyHandleCmd40(void); +static void WallyHandleClearUnkVar(void); +static void WallyHandleSetUnkVar(void); +static void WallyHandleClearUnkFlag(void); +static void WallyHandleToggleUnkFlag(void); static void WallyHandleHitAnimation(void); static void WallyHandleCmd42(void); static void WallyHandlePlaySE(void); @@ -102,63 +102,63 @@ static void sub_816AC04(u8 taskId); static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - WallyHandleGetMonData, - WallyHandleGetRawMonData, - WallyHandleSetMonData, - WallyHandleSetRawMonData, - WallyHandleLoadMonSprite, - WallyHandleSwitchInAnim, - WallyHandleReturnMonToBall, - WallyHandleDrawTrainerPic, - WallyHandleTrainerSlide, - WallyHandleTrainerSlideBack, - WallyHandleFaintAnimation, - WallyHandlePaletteFade, - WallyHandleSuccessBallThrowAnim, - WallyHandleBallThrowAnim, - WallyHandlePause, - WallyHandleMoveAnimation, - WallyHandlePrintString, - WallyHandlePrintSelectionString, - WallyHandleChooseAction, - WallyHandleUnknownYesNoBox, - WallyHandleChooseMove, - WallyHandleChooseItem, - WallyHandleChoosePokemon, - WallyHandleCmd23, - WallyHandleHealthBarUpdate, - WallyHandleExpUpdate, - WallyHandleStatusIconUpdate, - WallyHandleStatusAnimation, - WallyHandleStatusXor, - WallyHandleDataTransfer, - WallyHandleDMA3Transfer, - WallyHandlePlayBGM, - WallyHandleCmd32, - WallyHandleTwoReturnValues, - WallyHandleChosenMonReturnValue, - WallyHandleOneReturnValue, - WallyHandleOneReturnValue_Duplicate, - WallyHandleCmd37, - WallyHandleCmd38, - WallyHandleCmd39, - WallyHandleCmd40, - WallyHandleHitAnimation, - WallyHandleCmd42, - WallyHandlePlaySE, - WallyHandlePlayFanfareOrBGM, - WallyHandleFaintingCry, - WallyHandleIntroSlide, - WallyHandleIntroTrainerBallThrow, - WallyHandleDrawPartyStatusSummary, - WallyHandleHidePartyStatusSummary, - WallyHandleEndBounceEffect, - WallyHandleSpriteInvisibility, - WallyHandleBattleAnimation, - WallyHandleLinkStandbyMsg, - WallyHandleResetActionMoveSelection, - WallyHandleCmd55, - WallyCmdEnd + [CONTROLLER_GETMONDATA] = WallyHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = WallyHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = WallyHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = WallyHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = WallyHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = WallyHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = WallyHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = WallyHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = WallyHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = WallyHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = WallyHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = WallyHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = WallyHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = WallyHandleBallThrowAnim, + [CONTROLLER_PAUSE] = WallyHandlePause, + [CONTROLLER_MOVEANIMATION] = WallyHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = WallyHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = WallyHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = WallyHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = WallyHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = WallyHandleChooseMove, + [CONTROLLER_OPENBAG] = WallyHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = WallyHandleChoosePokemon, + [CONTROLLER_23] = WallyHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = WallyHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = WallyHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = WallyHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = WallyHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = WallyHandleStatusXor, + [CONTROLLER_DATATRANSFER] = WallyHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = WallyHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = WallyHandlePlayBGM, + [CONTROLLER_32] = WallyHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = WallyHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = WallyHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = WallyHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = WallyHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = WallyHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = WallyHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = WallyHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = WallyHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = WallyHandleHitAnimation, + [CONTROLLER_42] = WallyHandleCmd42, + [CONTROLLER_PLAYSE] = WallyHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = WallyHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = WallyHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = WallyHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = WallyHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = WallyHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = WallyHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = WallyHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = WallyHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = WallyHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = WallyHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = WallyHandleResetActionMoveSelection, + [CONTROLLER_55] = WallyHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = WallyCmdEnd }; static void SpriteCB_Null7(void) @@ -1346,22 +1346,22 @@ static void WallyHandleOneReturnValue_Duplicate(void) WallyBufferExecCompleted(); } -static void WallyHandleCmd37(void) +static void WallyHandleClearUnkVar(void) { WallyBufferExecCompleted(); } -static void WallyHandleCmd38(void) +static void WallyHandleSetUnkVar(void) { WallyBufferExecCompleted(); } -static void WallyHandleCmd39(void) +static void WallyHandleClearUnkFlag(void) { WallyBufferExecCompleted(); } -static void WallyHandleCmd40(void) +static void WallyHandleToggleUnkFlag(void) { WallyBufferExecCompleted(); } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 3ebc5d3bd8..a95bb2f6a8 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -17,7 +17,7 @@ static EWRAM_DATA u8 sLinkSendTaskId = 0; static EWRAM_DATA u8 sLinkReceiveTaskId = 0; static EWRAM_DATA u8 sUnknown_02022D0A = 0; -EWRAM_DATA struct UnusedControllerStruct gUnknown_02022D0C = {}; +EWRAM_DATA struct UnusedControllerStruct gUnusedControllerStruct = {}; // Debug? Unused code that writes to it, never read static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {}; // this file's funcionts @@ -1282,7 +1282,7 @@ void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataPara { s32 i; - sBattleBuffersTransferData[0] = CONTROLLER_31; + sBattleBuffersTransferData[0] = CONTROLLER_PLAYBGM; sBattleBuffersTransferData[1] = songId; sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8; for (i = 0; i < songId; i++) // ???? @@ -1340,37 +1340,37 @@ void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitCmd37(u8 bufferId) +void BtlController_EmitClearUnkVar(u8 bufferId) { - sBattleBuffersTransferData[0] = CONTROLLER_37; - sBattleBuffersTransferData[1] = CONTROLLER_37; - sBattleBuffersTransferData[2] = CONTROLLER_37; - sBattleBuffersTransferData[3] = CONTROLLER_37; + sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKVAR; + sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKVAR; + sBattleBuffersTransferData[2] = CONTROLLER_CLEARUNKVAR; + sBattleBuffersTransferData[3] = CONTROLLER_CLEARUNKVAR; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitCmd38(u8 bufferId, u8 b) +void BtlController_EmitSetUnkVar(u8 bufferId, u8 b) { - sBattleBuffersTransferData[0] = CONTROLLER_38; + sBattleBuffersTransferData[0] = CONTROLLER_SETUNKVAR; sBattleBuffersTransferData[1] = b; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2); } -void BtlController_EmitCmd39(u8 bufferId) +void BtlController_EmitClearUnkFlag(u8 bufferId) { - sBattleBuffersTransferData[0] = CONTROLLER_39; - sBattleBuffersTransferData[1] = CONTROLLER_39; - sBattleBuffersTransferData[2] = CONTROLLER_39; - sBattleBuffersTransferData[3] = CONTROLLER_39; + sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKFLAG; + sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKFLAG; + sBattleBuffersTransferData[2] = CONTROLLER_CLEARUNKFLAG; + sBattleBuffersTransferData[3] = CONTROLLER_CLEARUNKFLAG; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitCmd40(u8 bufferId) +void BtlController_EmitToggleUnkFlag(u8 bufferId) { - sBattleBuffersTransferData[0] = CONTROLLER_40; - sBattleBuffersTransferData[1] = CONTROLLER_40; - sBattleBuffersTransferData[2] = CONTROLLER_40; - sBattleBuffersTransferData[3] = CONTROLLER_40; + sBattleBuffersTransferData[0] = CONTROLLER_TOGGLEUNKFLAG; + sBattleBuffersTransferData[1] = CONTROLLER_TOGGLEUNKFLAG; + sBattleBuffersTransferData[2] = CONTROLLER_TOGGLEUNKFLAG; + sBattleBuffersTransferData[3] = CONTROLLER_TOGGLEUNKFLAG; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } @@ -1394,7 +1394,7 @@ void BtlController_EmitCmd42(u8 bufferId) void BtlController_EmitPlaySE(u8 bufferId, u16 songId) { - sBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND; + sBattleBuffersTransferData[0] = CONTROLLER_PLAYSE; sBattleBuffersTransferData[1] = songId; sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8; sBattleBuffersTransferData[3] = 0; From 0bf49198f62484284994f6f54c68597608013eb2 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 28 Dec 2020 17:32:08 -0500 Subject: [PATCH 148/177] Resume factory screen doc --- include/graphics.h | 5 + include/strings.h | 27 + src/battle_factory_screen.c | 1995 ++++++++++++++++++----------------- 3 files changed, 1046 insertions(+), 981 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index d9189622a4..b5e9396d09 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -5013,4 +5013,9 @@ extern const u16 gPokenavMessageBox_Pal[]; extern const u32 gPokenavOptions_Gfx[]; extern const u16 gPokenavOptions_Pal[]; +// Battle Factory Screen +extern const u8 gFrontierFactorySelectMenu_Gfx[]; +extern const u8 gFrontierFactorySelectMenu_Tilemap[]; +extern const u16 gFrontierFactorySelectMenu_Pal[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/strings.h b/include/strings.h index 7018f9e0d3..294ab8aa6f 100644 --- a/include/strings.h +++ b/include/strings.h @@ -2988,4 +2988,31 @@ extern const u8 gText_SavingDontTurnOff2[]; extern const u8 gText_BlenderMaxSpeedRecord[]; extern const u8 gText_234Players[]; +// Battle Factory Screen +extern const u8 gText_RentalPkmn2[]; +extern const u8 gText_SelectFirstPkmn[]; +extern const u8 gText_SelectSecondPkmn[]; +extern const u8 gText_SelectThirdPkmn[]; +extern const u8 gText_TheseThreePkmnOkay[]; +extern const u8 gText_CantSelectSamePkmn[]; +extern const u8 gText_Summary[]; +extern const u8 gText_Rechoose[]; +extern const u8 gText_Deselect[]; +extern const u8 gText_Rent[]; +extern const u8 gText_Others2[]; +extern const u8 gText_Yes2[]; +extern const u8 gText_Yes3[]; +extern const u8 gText_No2[]; +extern const u8 gText_No3[]; +extern const u8 gText_QuitSwapping[]; +extern const u8 gText_AcceptThisPkmn[]; +extern const u8 gText_SelectPkmnToAccept[]; +extern const u8 gText_SelectPkmnToSwap[]; +extern const u8 gText_PkmnSwap[]; +extern const u8 gText_Swap[]; +extern const u8 gText_Summary2[]; +extern const u8 gText_PkmnForSwap[]; +extern const u8 gText_SamePkmnInPartyAlready[]; +extern const u8 gText_Cancel3[]; + #endif // GUARD_STRINGS_H diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 46e2fa28c5..13edf6fef9 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -25,26 +25,21 @@ #include "util.h" #include "trainer_pokemon_sprites.h" #include "starter_choose.h" +#include "strings.h" +#include "graphics.h" #include "constants/battle_frontier.h" #include "constants/songs.h" #include "constants/rgb.h" -// Select_ refers to the first Pokemon selection screen where you choose 3 Pokemon. +// Select_ refers to the first Pokemon selection screen where you choose your initial 3 rental Pokemon. // Swap_ refers to the subsequent selection screens where you can swap a Pokemon with one from the beaten trainer -// 'Action' refers to the 3 Selectable mons, Cancel, Pknm for swap windows. -#define ACTIONS_PLAYER_SCREEN 0 -#define ACTIONS_ENEMY_SCREEN 1 +// Note that, generally, "Action" will refer to the immediate actions that can be taken on each screen, +// i.e. selecting a pokemon or selecting the Cancel button +// The "Options menu" will refer to the popup menu that shows when some actions have been selected -#define SELECTMENU_SUMMARY 0 -#define SELECTMENU_RENT 1 -#define SELECTMENU_OTHERS 2 -#define SELECTMENU_OPTIONS_COUNT 3 - -#define SWAPMENU_SUMMARY 0 -#define SWAPMENU_SWAP 1 -#define SWAPMENU_RECHOOSE 2 -#define SWAPMENU_OPTIONS_COUNT 3 +#define SWAP_PLAYER_SCREEN 0 // The screen where the player selects which of their pokemon to swap away +#define SWAP_ENEMY_SCREEN 1 // The screen where the player selects which new pokemon from the defeated party to swap for #define SELECTABLE_MONS_COUNT 6 @@ -64,18 +59,28 @@ #define GFXTAG_ACTION_HIGHLIGHT_RIGHT 0x6C #define GFXTAG_MON_PIC_BG_ANIM 0x6D +// Tasks in this file universally use data[0] as a state for switches +#define tState data[0] + +// States for both Select/Swap versions of Task_FadeSpeciesName +enum { + FADESTATE_INIT, + FADESTATE_RUN, + FADESTATE_DELAY +}; + struct FactorySelectableMon { u16 monId; - u16 spriteId; + u16 ballSpriteId; u8 selectedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon struct Pokemon monData; }; -struct UnkFactoryStruct +struct FactoryMonPic { - u8 field0; - u8 field1; + u8 monSpriteId; + u8 bgSpriteId; }; struct FactorySelectScreen @@ -88,17 +93,17 @@ struct FactorySelectScreen u8 selectingMonsState; bool8 fromSummaryScreen; u8 yesNoCursorPos; - u8 unused8; + u8 unused; struct FactorySelectableMon mons[SELECTABLE_MONS_COUNT]; - struct UnkFactoryStruct unk294[FRONTIER_PARTY_SIZE]; - bool8 unk2A0; + struct FactoryMonPic monPics[FRONTIER_PARTY_SIZE]; // Array so all chosen mons can be shown at once + bool8 monPicAnimating; u8 fadeSpeciesNameTaskId; - bool8 unk2A2; + bool8 fadeSpeciesNameActive; u16 speciesNameColorBackup; - bool8 unk2A6; - u8 unk2A7; - u8 unk2A8; - u8 unk2A9; + bool8 fadeSpeciesNameFadeOut; + u8 fadeSpeciesNameCoeffDelay; + u8 fadeSpeciesNameCoeff; + u8 faceSpeciesNameDelay; }; struct SwapScreenAction @@ -115,8 +120,8 @@ struct FactorySwapScreen u8 cursorPos; u8 cursorSpriteId; u8 ballSpriteIds[FRONTIER_PARTY_SIZE]; - u8 unk8[2][3]; - u8 unkE[2][2]; + u8 pkmnForSwapButtonSpriteIds[2][3]; // For this and sprite ID array below, [0][i] is the button background, [1][i] is the button highlight + u8 cancelButtonSpriteIds[2][2]; u8 playerMonId; u8 enemyMonId; bool8 inEnemyScreen; @@ -127,20 +132,27 @@ struct FactorySwapScreen u8 unused1C[4]; bool8 monSwapped; u8 fadeSpeciesNameTaskId; - bool8 unk22; - u16 unk24; - bool8 unk26; - u8 unk27; - u8 unk28; - u8 unk29; - struct UnkFactoryStruct unk2C; - bool8 unk30; + bool8 fadeSpeciesNameActive; + u16 speciesNameColorBackup; + bool8 fadeSpeciesNameFadeOut; + u8 fadeSpeciesNameCoeffDelay; + u8 fadeSpeciesNameCoeff; + u8 faceSpeciesNameDelay; + struct FactoryMonPic monPic; + bool8 monPicAnimating; }; -// This file's functions. -static void SpriteCB_Pokeball(struct Sprite *sprite); +static void SpriteCB_Pokeball(struct Sprite *); +static void SpriteCB_OpenMonPic(struct Sprite *); +static void OpenMonPic(u8 *, bool8 *, bool8); +static void HideMonPic(struct FactoryMonPic, bool8 *); +static void CloseMonPic(struct FactoryMonPic, bool8 *, bool8); +static void Task_OpenMonPic(u8); +static void Task_CloseMonPic(u8); + +// Select screen static void CB2_InitSelectScreen(void); -static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V); +static void Select_SetWinRegs(s16, s16, s16, s16); static void Select_InitMonsData(void); static void Select_InitAllSprites(void); static void Select_ReshowMonSprite(void); @@ -155,35 +167,34 @@ static void sub_819C568(void); static void Select_ShowMenuOptions(void); static void Select_PrintMenuOptions(void); static void Select_PrintYesNoOptions(void); -static void Task_SelectFadeSpeciesName(u8 taskId); -static void sub_819C1D0(u8 taskId); -static void Task_HandleSelectionScreenChooseMons(u8 taskId); -static void Task_HandleSelectionScreenMenu(u8 taskId); -static void CreateFrontierFactorySelectableMons(u8 firstMonId); -static void CreateTentFactorySelectableMons(u8 firstMonId); -static void Select_SetBallSpritePaletteNum(u8 id); -static void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1); -static void sub_819B958(u8 windowId); -static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen); -static void CloseMonPic(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen); +static void Select_Task_FadeSpeciesName(u8); +static void sub_819C1D0(u8); +static void Select_Task_HandleChooseMons(u8); +static void Select_Task_HandleMenu(u8); +static void CreateFrontierFactorySelectableMons(u8); +static void CreateSlateportTentSelectableMons(u8); +static void Select_SetBallSpritePaletteNum(u8); +static void sub_819B958(u8); static u8 Select_RunMenuOptionFunc(void); static u8 sub_819BC9C(void); static u8 Select_OptionSummary(void); static u8 Select_OptionOthers(void); static u8 Select_OptionRentDeselect(void); -static bool32 Select_AreSpeciesValid(u16 monId); +static bool32 Select_AreSpeciesValid(u16); + +// Swap screen +static void CB2_InitSwapScreen(void); static void Swap_DestroyAllSprites(void); static void Swap_ShowYesNoOptions(void); -static void sub_819E8EC(void); +static void Swap_HideActionButtonHighlights(void); static void sub_819EAC0(void); -static void Swap_UpdateYesNoCursorPosition(s8 direction); -static void Swap_UpdateMenuCursorPosition(s8 direction); -static void sub_819EA64(u8 windowId); -static void sub_819D770(u8 taskId); -static void Task_HandleSwapScreenChooseMons(u8 taskId); -static void sub_819D588(u8 taskId); -static void Task_CloseMonPic(u8 taskId); -static void Swap_PrintOnInfoWindow(const u8 *str); +static void Swap_UpdateYesNoCursorPosition(s8); +static void Swap_UpdateMenuCursorPosition(s8); +static void Swap_ErasePopupMenu(u8); +static void sub_819D770(u8); +static void Swap_Task_HandleChooseMons(u8); +static void sub_819D588(u8); +static void Swap_PrintOnInfoWindow(const u8 *); static void Swap_ShowMenuOptions(void); static void Swap_PrintMenuOptions(void); static void Swap_PrintYesNoOptions(void); @@ -195,28 +206,25 @@ static void Swap_InitAllSprites(void); static void Swap_PrintPkmnSwap(void); static void sub_819EADC(void); static void sub_819EAF8(void); -static void CB2_InitSwapScreen(void); static void Swap_ShowSummaryMonSprite(void); -static void Swap_UpdateActionCursorPosition(s8 direction); -static void Swap_UpdateBallCursorPosition(s8 direction); -static void Swap_RunMenuOptionFunc(u8 taskId); -static void Swap_OptionSwap(u8 taskId); -static void Swap_OptionSummary(u8 taskId); -static void Swap_OptionRechoose(u8 taskId); -static void Swap_RunActionFunc(u8 taskId); -static void Task_OpenMonPic(u8 taskId); -static void Task_SwapCantHaveSameMons(u8 taskId); +static void Swap_UpdateActionCursorPosition(s8); +static void Swap_UpdateBallCursorPosition(s8); +static void Swap_RunMenuOptionFunc(u8); +static void Swap_OptionSwap(u8); +static void Swap_OptionSummary(u8); +static void Swap_OptionRechoose(u8); +static void Swap_RunActionFunc(u8); +static void Swap_TaskCantHaveSameMons(u8); static void Swap_CreateMonSprite(void); static void Swap_PrintActionStrings(void); static void Swap_PrintActionStrings2(void); -static void Swap_PrintOneActionString(u8 which); -static void Swap_InitActions(u8 id); -static void sub_819E838(u8 arg0); -static bool8 Swap_AlreadyHasSameSpecies(u8 monId); -static void SpriteCB_OpenMonPic(struct Sprite *sprite); -static void Swap_ActionMon(u8 taskId); -static void Swap_ActionCancel(u8 taskId); -static void Swap_ActionPkmnForSwap(u8 taskId); +static void Swap_PrintOneActionString(u8); +static void Swap_InitActions(u8); +static void Swap_HighlightActionButton(u8); +static bool8 Swap_AlreadyHasSameSpecies(u8); +static void Swap_ActionMon(u8); +static void Swap_ActionCancel(u8); +static void Swap_ActionPkmnForSwap(u8); // Ewram variables static EWRAM_DATA u8 *sSelectMenuTilesetBuffer = NULL; @@ -276,7 +284,7 @@ static const struct SpritePalette sSelect_SpritePalettes[] = {}, }; -u8 static (* const sSelect_MenuOptionFuncs[SELECTMENU_OPTIONS_COUNT])(void) = +u8 static (* const sSelect_MenuOptionFuncs[])(void) = { Select_OptionSummary, Select_OptionRentDeselect, @@ -314,9 +322,18 @@ static const struct BgTemplate sSelect_BgTemplates[] = }, }; +enum { + SELECT_WIN_TITLE, + SELECT_WIN_SPECIES, + SELECT_WIN_INFO, + SELECT_WIN_OPTIONS, + SELECT_WIN_YES_NO, + SELECT_WIN_MON_CATEGORY, +}; + static const struct WindowTemplate sSelect_WindowTemplates[] = { - { + [SELECT_WIN_TITLE] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 2, @@ -325,7 +342,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x0001, }, - { + [SELECT_WIN_SPECIES] = { .bg = 0, .tilemapLeft = 19, .tilemapTop = 2, @@ -334,7 +351,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .paletteNum = 14, .baseBlock = 0x0019, }, - { + [SELECT_WIN_INFO] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 15, @@ -343,7 +360,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x002f, }, - { + [SELECT_WIN_OPTIONS] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 14, @@ -352,7 +369,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x006b, }, - { + [SELECT_WIN_YES_NO] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 14, @@ -361,7 +378,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x009b, }, - { + [SELECT_WIN_MON_CATEGORY] = { .bg = 0, .tilemapLeft = 15, .tilemapTop = 0, @@ -679,7 +696,7 @@ static const struct OamData sOam_Swap_MenuHighlight = .affineParam = 0, }; -static const struct OamData gUnknown_086106F0 = +static const struct OamData sOam_Swap_MonPicBgAnim = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -702,7 +719,7 @@ static const union AnimCmd sAnim_Swap_Interface[] = ANIMCMD_END, }; -static const union AnimCmd gUnknown_08610700[] = +static const union AnimCmd sAnim_Swap_MonPicBgAnim[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, @@ -741,9 +758,9 @@ static const union AnimCmd * const sAnims_Swap_Interface[] = sAnim_Swap_Interface, }; -static const union AnimCmd * const gUnknown_0861075C[] = +static const union AnimCmd * const sAnims_Swap_MonPicBgAnim[] = { - gUnknown_08610700, + sAnim_Swap_MonPicBgAnim, }; static const union AnimCmd * const sAnims_Swap_Pokeball[] = @@ -788,7 +805,7 @@ static const union AffineAnimCmd gUnknown_08610818[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd * const gUnknown_08610828[] = +static const union AffineAnimCmd * const sAffineAnims_Swap_MonPicBgAnim[] = { gUnknown_08610768, gUnknown_086107C8, @@ -843,14 +860,14 @@ static const struct SpriteTemplate sSpriteTemplate_Swap_MonPicBgAnim = { .tileTag = GFXTAG_MON_PIC_BG_ANIM, .paletteTag = PALTAG_MON_PIC_BG, - .oam = &gUnknown_086106F0, - .anims = gUnknown_0861075C, + .oam = &sOam_Swap_MonPicBgAnim, + .anims = sAnims_Swap_MonPicBgAnim, .images = NULL, - .affineAnims = gUnknown_08610828, + .affineAnims = sAffineAnims_Swap_MonPicBgAnim, .callback = SpriteCallbackDummy }; -void static (* const sSwap_MenuOptionFuncs[SWAPMENU_OPTIONS_COUNT])(u8 taskId) = +void static (* const sSwap_MenuOptionFuncs[])(u8 taskId) = { Swap_OptionSummary, Swap_OptionSwap, @@ -897,9 +914,21 @@ static const struct BgTemplate sSwap_BgTemplates[4] = }, }; +enum { + SWAP_WIN_TITLE, + SWAP_WIN_SPECIES, + SWAP_WIN_INFO, + SWAP_WIN_OPTIONS, + SWAP_WIN_YES_NO, + SWAP_WIN_5, + SWAP_WIN_6, + SWAP_WIN_7, + SWAP_WIN_MON_CATEGORY, +}; + static const struct WindowTemplate sSwap_WindowTemplates[] = { - { + [SWAP_WIN_TITLE] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 2, @@ -908,7 +937,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x0001, }, - { + [SWAP_WIN_SPECIES] = { .bg = 2, .tilemapLeft = 19, .tilemapTop = 2, @@ -917,7 +946,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 14, .baseBlock = 0x0019, }, - { + [SWAP_WIN_INFO] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 15, @@ -926,7 +955,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x002f, }, - { + [SWAP_WIN_OPTIONS] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 14, @@ -935,7 +964,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x006b, }, - { + [SWAP_WIN_YES_NO] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 14, @@ -944,7 +973,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x00a1, }, - { + [SWAP_WIN_5] = { .bg = 2, .tilemapLeft = 21, .tilemapTop = 15, @@ -953,7 +982,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 14, .baseBlock = 0x006b, }, - { + [SWAP_WIN_6] = { .bg = 2, .tilemapLeft = 10, .tilemapTop = 2, @@ -962,7 +991,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 14, .baseBlock = 0x00c1, }, - { + [SWAP_WIN_7] = { .bg = 0, .tilemapLeft = 19, .tilemapTop = 2, @@ -971,7 +1000,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x00c9, }, - { + [SWAP_WIN_MON_CATEGORY] = { .bg = 0, .tilemapLeft = 15, .tilemapTop = 0, @@ -987,55 +1016,27 @@ static const u16 sSwapText_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_ static const u8 sSwapMenuOptionsTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_TRANSPARENT}; static const u8 sSwapSpeciesNameTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_TRANSPARENT}; +#define SWAPACTION_MON 1 +#define SWAPACTION_PKMN_FOR_SWAP 2 +#define SWAPACTION_CANCEL 3 + static const struct SwapScreenAction sSwap_PlayerScreenActions[] = { - {.id = 1, .func = Swap_ActionMon}, - {.id = 1, .func = Swap_ActionMon}, - {.id = 1, .func = Swap_ActionMon}, - {.id = 3, .func = Swap_ActionCancel}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_CANCEL, .func = Swap_ActionCancel}, }; static const struct SwapScreenAction sSwap_EnemyScreenActions[] = { - {.id = 1, .func = Swap_ActionMon}, - {.id = 1, .func = Swap_ActionMon}, - {.id = 1, .func = Swap_ActionMon}, - {.id = 2, .func = Swap_ActionPkmnForSwap}, - {.id = 3, .func = Swap_ActionCancel}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_PKMN_FOR_SWAP, .func = Swap_ActionPkmnForSwap}, + {.id = SWAPACTION_CANCEL, .func = Swap_ActionCancel}, }; -// gfx -extern const u8 gFrontierFactorySelectMenu_Gfx[]; -extern const u8 gFrontierFactorySelectMenu_Tilemap[]; -extern const u16 gFrontierFactorySelectMenu_Pal[]; - -// text -extern const u8 gText_RentalPkmn2[]; -extern const u8 gText_SelectFirstPkmn[]; -extern const u8 gText_SelectSecondPkmn[]; -extern const u8 gText_SelectThirdPkmn[]; -extern const u8 gText_TheseThreePkmnOkay[]; -extern const u8 gText_CantSelectSamePkmn[]; -extern const u8 gText_Summary[]; -extern const u8 gText_Rechoose[]; -extern const u8 gText_Deselect[]; -extern const u8 gText_Rent[]; -extern const u8 gText_Others2[]; -extern const u8 gText_Yes2[]; -extern const u8 gText_Yes3[]; -extern const u8 gText_No2[]; -extern const u8 gText_No3[]; -extern const u8 gText_QuitSwapping[]; -extern const u8 gText_AcceptThisPkmn[]; -extern const u8 gText_SelectPkmnToAccept[]; -extern const u8 gText_SelectPkmnToSwap[]; -extern const u8 gText_PkmnSwap[]; -extern const u8 gText_Swap[]; -extern const u8 gText_Summary2[]; -extern const u8 gText_PkmnForSwap[]; -extern const u8 gText_SamePkmnInPartyAlready[]; -extern const u8 gText_Cancel3[]; - static void SpriteCB_Pokeball(struct Sprite *sprite) { if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED)) @@ -1166,7 +1167,7 @@ static void CB2_InitSelectScreen(void) ShowBg(0); ShowBg(1); SetVBlankCallback(VBlankCB_SelectScreen); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); if (sFactorySelectScreen->fromSummaryScreen == TRUE) { @@ -1192,38 +1193,38 @@ static void CB2_InitSelectScreen(void) break; case 6: Select_PrintSelectMonString(); - PutWindowTilemap(2); + PutWindowTilemap(SELECT_WIN_INFO); gMain.state++; break; case 7: Select_PrintMonCategory(); - PutWindowTilemap(5); + PutWindowTilemap(SELECT_WIN_MON_CATEGORY); gMain.state++; break; case 8: Select_PrintMonSpecies(); - PutWindowTilemap(1); + PutWindowTilemap(SELECT_WIN_SPECIES); gMain.state++; break; case 9: Select_PrintRentalPkmnString(); - PutWindowTilemap(0); + PutWindowTilemap(SELECT_WIN_TITLE); gMain.state++; break; case 10: - sFactorySelectScreen->fadeSpeciesNameTaskId = CreateTask(Task_SelectFadeSpeciesName, 0); + sFactorySelectScreen->fadeSpeciesNameTaskId = CreateTask(Select_Task_FadeSpeciesName, 0); if (!sFactorySelectScreen->fromSummaryScreen) { - gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].data[0] = 0; - taskId = CreateTask(Task_HandleSelectionScreenChooseMons, 0); - gTasks[taskId].data[0] = 0; + gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = 0; + taskId = CreateTask(Select_Task_HandleChooseMons, 0); + gTasks[taskId].tState = 0; } else { - gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].data[0] = 1; - sFactorySelectScreen->unk2A2 = FALSE; - taskId = CreateTask(Task_HandleSelectionScreenMenu, 0); - gTasks[taskId].data[0] = 13; + gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = 1; + sFactorySelectScreen->fadeSpeciesNameActive = FALSE; + taskId = CreateTask(Select_Task_HandleMenu, 0); + gTasks[taskId].tState = 13; } SetMainCallback2(CB2_SelectScreen); break; @@ -1247,7 +1248,7 @@ static void Select_InitMonsData(void) if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) CreateFrontierFactorySelectableMons(0); else - CreateTentFactorySelectableMons(0); + CreateSlateportTentSelectableMons(0); } static void Select_InitAllSprites(void) @@ -1257,12 +1258,12 @@ static void Select_InitAllSprites(void) for (i = 0; i < SELECTABLE_MONS_COUNT; i++) { - sFactorySelectScreen->mons[i].spriteId = CreateSprite(&sSpriteTemplate_Select_Pokeball, (35 * i) + 32, 64, 1); - gSprites[sFactorySelectScreen->mons[i].spriteId].data[0] = 0; + sFactorySelectScreen->mons[i].ballSpriteId = CreateSprite(&sSpriteTemplate_Select_Pokeball, (35 * i) + 32, 64, 1); + gSprites[sFactorySelectScreen->mons[i].ballSpriteId].data[0] = 0; Select_SetBallSpritePaletteNum(i); } cursorPos = sFactorySelectScreen->cursorPos; - x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; + x = gSprites[sFactorySelectScreen->mons[cursorPos].ballSpriteId].pos1.x; sFactorySelectScreen->cursorSpriteId = CreateSprite(&sSpriteTemplate_Select_Arrow, x, 88, 0); sFactorySelectScreen->menuCursor1SpriteId = CreateSprite(&sSpriteTemplate_Select_MenuHighlightLeft, 176, 112, 0); sFactorySelectScreen->menuCursor2SpriteId = CreateSprite(&sSpriteTemplate_Select_MenuHighlightRight, 176, 144, 0); @@ -1281,7 +1282,7 @@ static void Select_DestroyAllSprites(void) u8 i; for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - DestroySprite(&gSprites[sFactorySelectScreen->mons[i].spriteId]); + DestroySprite(&gSprites[sFactorySelectScreen->mons[i].ballSpriteId]); DestroySprite(&gSprites[sFactorySelectScreen->cursorSpriteId]); DestroySprite(&gSprites[sFactorySelectScreen->menuCursor1SpriteId]); @@ -1307,14 +1308,14 @@ static void Select_UpdateBallCursorPosition(s8 direction) } cursorPos = sFactorySelectScreen->cursorPos; - gSprites[sFactorySelectScreen->cursorSpriteId].pos1.x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; + gSprites[sFactorySelectScreen->cursorSpriteId].pos1.x = gSprites[sFactorySelectScreen->mons[cursorPos].ballSpriteId].pos1.x; } static void Select_UpdateMenuCursorPosition(s8 direction) { if (direction > 0) // Move cursor down. { - if (sFactorySelectScreen->menuCursorPos != SELECTMENU_OPTIONS_COUNT - 1) + if (sFactorySelectScreen->menuCursorPos != ARRAY_COUNT(sSelect_MenuOptionFuncs) - 1) sFactorySelectScreen->menuCursorPos++; else sFactorySelectScreen->menuCursorPos = 0; @@ -1324,7 +1325,7 @@ static void Select_UpdateMenuCursorPosition(s8 direction) if (sFactorySelectScreen->menuCursorPos != 0) sFactorySelectScreen->menuCursorPos--; else - sFactorySelectScreen->menuCursorPos = SELECTMENU_OPTIONS_COUNT - 1; + sFactorySelectScreen->menuCursorPos = ARRAY_COUNT(sSelect_MenuOptionFuncs) - 1; } gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; @@ -1381,7 +1382,7 @@ static void Select_HandleMonSelectionChange(void) sFactorySelectScreen->selectingMonsState++; } - gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].oam.paletteNum = paletteNum; + gSprites[sFactorySelectScreen->mons[cursorPos].ballSpriteId].oam.paletteNum = paletteNum; } static void Select_SetBallSpritePaletteNum(u8 id) @@ -1393,33 +1394,33 @@ static void Select_SetBallSpritePaletteNum(u8 id) else palNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY); - gSprites[sFactorySelectScreen->mons[id].spriteId].oam.paletteNum = palNum; + gSprites[sFactorySelectScreen->mons[id].ballSpriteId].oam.paletteNum = palNum; } -static void Task_FromSelectScreenToSummaryScreen(u8 taskId) +static void Select_Task_OpenSummaryScreen(u8 taskId) { u8 i; u8 currMonId; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 6: gPlttBufferUnfaded[228] = gPlttBufferFaded[228]; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].data[0] = 7; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].tState = 7; break; case 7: if (!gPaletteFade.active) { DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); - sub_819F444(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0); + HideMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating); Select_DestroyAllSprites(); FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); FREE_AND_SET_NULL(sSelectMonPicBgTilesetBuffer); FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); FREE_AND_SET_NULL(sSelectMonPicBgTilemapBuffer); FreeAllWindowBuffers(); - gTasks[taskId].data[0] = 8; + gTasks[taskId].tState = 8; } break; case 8: @@ -1435,152 +1436,154 @@ static void Task_FromSelectScreenToSummaryScreen(u8 taskId) } } -static void Task_CloseSelectionScreen(u8 taskId) +static void Select_Task_Exit(u8 taskId) { - if (sFactorySelectScreen->unk2A0 != TRUE) + if (sFactorySelectScreen->monPicAnimating == TRUE) + return; + + switch (gTasks[taskId].tState) { - switch (gTasks[taskId].data[0]) + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].tState++; + break; + case 1: + if (!UpdatePaletteFade()) { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].data[0]++; - break; - case 1: - if (!UpdatePaletteFade()) - { - Select_CopyMonsToPlayerParty(); - DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); - Select_DestroyAllSprites(); - FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); - FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); - FREE_AND_SET_NULL(sSelectMonPicBgTilemapBuffer); - FREE_AND_SET_NULL(sFactorySelectScreen); - FreeAllWindowBuffers(); - SetMainCallback2(CB2_ReturnToFieldContinueScript); - DestroyTask(taskId); - } - break; + Select_CopyMonsToPlayerParty(); + DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); + Select_DestroyAllSprites(); + FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); + FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); + FREE_AND_SET_NULL(sSelectMonPicBgTilemapBuffer); + FREE_AND_SET_NULL(sFactorySelectScreen); + FreeAllWindowBuffers(); + SetMainCallback2(CB2_ReturnToFieldContinueScript); + DestroyTask(taskId); } + break; } } -static void Task_HandleSelectionScreenYesNo(u8 taskId) +static void Select_Task_HandleYesNo(u8 taskId) { - if (sFactorySelectScreen->unk2A0 != TRUE) + if (sFactorySelectScreen->monPicAnimating == TRUE) + return; + + switch (gTasks[taskId].tState) { - switch (gTasks[taskId].data[0]) + case 10: + sub_819C4B4(); + gTasks[taskId].tState = 4; + break; + case 4: + Select_ShowYesNoOptions(); + gTasks[taskId].tState = 5; + break; + case 5: + if (JOY_NEW(A_BUTTON)) { - case 10: - sub_819C4B4(); - gTasks[taskId].data[0] = 4; - break; - case 4: - Select_ShowYesNoOptions(); - gTasks[taskId].data[0] = 5; - break; - case 5: - if (gMain.newKeys & A_BUTTON) + PlaySE(SE_SELECT); + if (sFactorySelectScreen->yesNoCursorPos == 0) { - PlaySE(SE_SELECT); - if (sFactorySelectScreen->yesNoCursorPos == 0) - { - sub_819C568(); - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = Task_CloseSelectionScreen; - } - else - { - sub_819B958(4); - sub_819BC9C(); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; - } + // Selected Yes + sub_819C568(); + gTasks[taskId].tState = 0; + gTasks[taskId].func = Select_Task_Exit; } - else if (gMain.newKeys & B_BUTTON) + else { - PlaySE(SE_SELECT); - sub_819B958(4); + // Selected No + sub_819B958(SELECT_WIN_YES_NO); sub_819BC9C(); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = 1; + gTasks[taskId].func = Select_Task_HandleChooseMons; } - else if (gMain.newAndRepeatedKeys & DPAD_UP) - { - PlaySE(SE_SELECT); - Select_UpdateYesNoCursorPosition(-1); - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - Select_UpdateYesNoCursorPosition(1); - } - break; } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_819B958(SELECT_WIN_YES_NO); + sub_819BC9C(); + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = 1; + gTasks[taskId].func = Select_Task_HandleChooseMons; + } + else if (JOY_REPEAT(DPAD_UP)) + { + PlaySE(SE_SELECT); + Select_UpdateYesNoCursorPosition(-1); + } + else if (JOY_REPEAT(DPAD_DOWN)) + { + PlaySE(SE_SELECT); + Select_UpdateYesNoCursorPosition(1); + } + break; } } -static void Task_HandleSelectionScreenMenu(u8 taskId) +static void Select_Task_HandleMenu(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 2: if (!sFactorySelectScreen->fromSummaryScreen) - sub_819F2B4(&sFactorySelectScreen->unk294[1].field1, &sFactorySelectScreen->unk2A0, FALSE); - gTasks[taskId].data[0] = 9; + OpenMonPic(&sFactorySelectScreen->monPics[1].bgSpriteId, &sFactorySelectScreen->monPicAnimating, FALSE); + gTasks[taskId].tState = 9; break; case 9: - if (sFactorySelectScreen->unk2A0 != TRUE) + if (sFactorySelectScreen->monPicAnimating != TRUE) { Select_ShowMenuOptions(); sFactorySelectScreen->fromSummaryScreen = FALSE; - gTasks[taskId].data[0] = 3; + gTasks[taskId].tState = 3; } break; case 3: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { u8 retVal; PlaySE(SE_SELECT); retVal = Select_RunMenuOptionFunc(); if (retVal == 1) { - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = 1; + gTasks[taskId].func = Select_Task_HandleChooseMons; } else if (retVal == 2) { - gTasks[taskId].data[0] = 10; - gTasks[taskId].func = Task_HandleSelectionScreenYesNo; + gTasks[taskId].tState = 10; + gTasks[taskId].func = Select_Task_HandleYesNo; } else if (retVal == 3) { - gTasks[taskId].data[0] = 11; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + gTasks[taskId].tState = 11; + gTasks[taskId].func = Select_Task_HandleChooseMons; } else { - gTasks[taskId].data[0] = 6; - gTasks[taskId].func = Task_FromSelectScreenToSummaryScreen; + gTasks[taskId].tState = 6; + gTasks[taskId].func = Select_Task_OpenSummaryScreen; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - CloseMonPic(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); - sub_819B958(3); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); + sub_819B958(SELECT_WIN_OPTIONS); + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = 1; + gTasks[taskId].func = Select_Task_HandleChooseMons; } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (JOY_REPEAT(DPAD_UP)) { PlaySE(SE_SELECT); Select_UpdateMenuCursorPosition(-1); } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { PlaySE(SE_SELECT); Select_UpdateMenuCursorPosition(1); @@ -1595,63 +1598,63 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; } sFactorySelectScreen->fromSummaryScreen = FALSE; - gTasks[taskId].data[0] = 3; + gTasks[taskId].tState = 3; } break; case 13: Select_ShowMenuOptions(); - gTasks[taskId].data[0] = 12; + gTasks[taskId].tState = 12; break; } } -static void Task_HandleSelectionScreenChooseMons(u8 taskId) +static void Select_Task_HandleChooseMons(u8 taskId) { - if (sFactorySelectScreen->unk2A0 != TRUE) + if (sFactorySelectScreen->monPicAnimating == TRUE) + return; + + switch (gTasks[taskId].tState) { - switch (gTasks[taskId].data[0]) + case 0: + if (!gPaletteFade.active) { - case 0: - if (!gPaletteFade.active) - { - gTasks[taskId].data[0] = 1; - sFactorySelectScreen->unk2A2 = TRUE; - } - break; - case 1: - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sFactorySelectScreen->unk2A2 = FALSE; - gTasks[taskId].data[0] = 2; - gTasks[taskId].func = Task_HandleSelectionScreenMenu; - } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) - { - PlaySE(SE_SELECT); - Select_UpdateBallCursorPosition(-1); - Select_PrintMonCategory(); - Select_PrintMonSpecies(); - } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) - { - PlaySE(SE_SELECT); - Select_UpdateBallCursorPosition(1); - Select_PrintMonCategory(); - Select_PrintMonSpecies(); - } - break; - case 11: - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - CloseMonPic(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); - Select_PrintSelectMonString(); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - } - break; + gTasks[taskId].tState = 1; + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; } + break; + case 1: + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sFactorySelectScreen->fadeSpeciesNameActive = FALSE; + gTasks[taskId].tState = 2; + gTasks[taskId].func = Select_Task_HandleMenu; + } + else if (JOY_REPEAT(DPAD_LEFT)) + { + PlaySE(SE_SELECT); + Select_UpdateBallCursorPosition(-1); + Select_PrintMonCategory(); + Select_PrintMonSpecies(); + } + else if (JOY_REPEAT(DPAD_RIGHT)) + { + PlaySE(SE_SELECT); + Select_UpdateBallCursorPosition(1); + Select_PrintMonCategory(); + Select_PrintMonSpecies(); + } + break; + case 11: + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); + Select_PrintSelectMonString(); + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = 1; + } + break; } } @@ -1699,7 +1702,7 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId) } } -static void CreateTentFactorySelectableMons(u8 firstMonId) +static void CreateSlateportTentSelectableMons(u8 firstMonId) { u8 i, j; u8 ivs = 0; @@ -1793,9 +1796,9 @@ static void sub_819B958(u8 windowId) static void Select_PrintRentalPkmnString(void) { - FillWindowPixelBuffer(0, PIXEL_FILL(0)); - AddTextPrinterParameterized(0, 1, gText_RentalPkmn2, 2, 1, 0, NULL); - CopyWindowToVram(0, 3); + FillWindowPixelBuffer(SELECT_WIN_TITLE, PIXEL_FILL(0)); + AddTextPrinterParameterized(SELECT_WIN_TITLE, 1, gText_RentalPkmn2, 2, 1, 0, NULL); + CopyWindowToVram(SELECT_WIN_TITLE, 3); } static void Select_PrintMonSpecies(void) @@ -1804,19 +1807,19 @@ static void Select_PrintMonSpecies(void) u8 x; u8 monId = sFactorySelectScreen->cursorPos; - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(SELECT_WIN_SPECIES, PIXEL_FILL(0)); species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(1, 1, x, 1, sSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(1, 2); + AddTextPrinterParameterized3(SELECT_WIN_SPECIES, 1, x, 1, sSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SELECT_WIN_SPECIES, 2); } static void Select_PrintSelectMonString(void) { const u8 *str = NULL; - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(SELECT_WIN_INFO, PIXEL_FILL(0)); if (sFactorySelectScreen->selectingMonsState == 1) str = gText_SelectFirstPkmn; else if (sFactorySelectScreen->selectingMonsState == 2) @@ -1826,40 +1829,40 @@ static void Select_PrintSelectMonString(void) else str = gText_TheseThreePkmnOkay; - AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); - CopyWindowToVram(2, 2); + AddTextPrinterParameterized(SELECT_WIN_INFO, 1, str, 2, 5, 0, NULL); + CopyWindowToVram(SELECT_WIN_INFO, 2); } static void Select_PrintCantSelectSameMon(void) { - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized(2, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); - CopyWindowToVram(2, 2); + FillWindowPixelBuffer(SELECT_WIN_INFO, PIXEL_FILL(0)); + AddTextPrinterParameterized(SELECT_WIN_INFO, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); + CopyWindowToVram(SELECT_WIN_INFO, 2); } static void Select_PrintMenuOptions(void) { u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId; - PutWindowTilemap(3); - FillWindowPixelBuffer(3, PIXEL_FILL(0)); - AddTextPrinterParameterized3(3, 1, 7, 1, sMenuOptionTextColors, 0, gText_Summary); + PutWindowTilemap(SELECT_WIN_OPTIONS); + FillWindowPixelBuffer(SELECT_WIN_OPTIONS, PIXEL_FILL(0)); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 1, sMenuOptionTextColors, 0, gText_Summary); if (selectedId != 0) - AddTextPrinterParameterized3(3, 1, 7, 17, sMenuOptionTextColors, 0, gText_Deselect); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 17, sMenuOptionTextColors, 0, gText_Deselect); else - AddTextPrinterParameterized3(3, 1, 7, 17, sMenuOptionTextColors, 0, gText_Rent); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 17, sMenuOptionTextColors, 0, gText_Rent); - AddTextPrinterParameterized3(3, 1, 7, 33, sMenuOptionTextColors, 0, gText_Others2); - CopyWindowToVram(3, 3); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 33, sMenuOptionTextColors, 0, gText_Others2); + CopyWindowToVram(SELECT_WIN_OPTIONS, 3); } static void Select_PrintYesNoOptions(void) { - PutWindowTilemap(4); - FillWindowPixelBuffer(4, PIXEL_FILL(0)); - AddTextPrinterParameterized3(4, 1, 7, 1, sMenuOptionTextColors, 0, gText_Yes2); - AddTextPrinterParameterized3(4, 1, 7, 17, sMenuOptionTextColors, 0, gText_No2); - CopyWindowToVram(4, 3); + PutWindowTilemap(SELECT_WIN_YES_NO); + FillWindowPixelBuffer(SELECT_WIN_YES_NO, PIXEL_FILL(0)); + AddTextPrinterParameterized3(SELECT_WIN_YES_NO, 1, 7, 1, sMenuOptionTextColors, 0, gText_Yes2); + AddTextPrinterParameterized3(SELECT_WIN_YES_NO, 1, 7, 17, sMenuOptionTextColors, 0, gText_No2); + CopyWindowToVram(SELECT_WIN_YES_NO, 3); } static u8 Select_RunMenuOptionFunc(void) @@ -1875,15 +1878,15 @@ static u8 Select_OptionRentDeselect(void) if (selectedId == 0 && !Select_AreSpeciesValid(monId)) { Select_PrintCantSelectSameMon(); - sub_819B958(3); + sub_819B958(SELECT_WIN_OPTIONS); return 3; } else { - CloseMonPic(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); + CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); Select_HandleMonSelectionChange(); Select_PrintSelectMonString(); - sub_819B958(3); + sub_819B958(SELECT_WIN_OPTIONS); if (sFactorySelectScreen->selectingMonsState > 3) return 2; else @@ -1896,7 +1899,7 @@ static u8 sub_819BC9C(void) sub_819C568(); Select_HandleMonSelectionChange(); Select_PrintSelectMonString(); - sub_819B958(3); + sub_819B958(SELECT_WIN_OPTIONS); if (sFactorySelectScreen->selectingMonsState > 3) return 2; else @@ -1910,8 +1913,8 @@ static u8 Select_OptionSummary(void) static u8 Select_OptionOthers(void) { - CloseMonPic(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); - sub_819B958(3); + CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); + sub_819B958(SELECT_WIN_OPTIONS); return 1; } @@ -1923,17 +1926,17 @@ static void Select_PrintMonCategory(void) u8 monId = sFactorySelectScreen->cursorPos; if (monId < SELECTABLE_MONS_COUNT) { - PutWindowTilemap(5); - FillWindowPixelBuffer(5, PIXEL_FILL(0)); + PutWindowTilemap(SELECT_WIN_MON_CATEGORY); + FillWindowPixelBuffer(SELECT_WIN_MON_CATEGORY, PIXEL_FILL(0)); species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); x = GetStringRightAlignXOffset(1, text, 0x76); - AddTextPrinterParameterized(5, 1, text, x, 1, 0, NULL); - CopyWindowToVram(5, 2); + AddTextPrinterParameterized(SELECT_WIN_MON_CATEGORY, 1, text, x, 1, 0, NULL); + CopyWindowToVram(SELECT_WIN_MON_CATEGORY, 2); } } -static void Summary_CreateMonSprite(void) +static void Select_CreateMonSprite(void) { u8 monId = sFactorySelectScreen->cursorPos; struct Pokemon *mon = &sFactorySelectScreen->mons[monId].monData; @@ -1941,16 +1944,16 @@ static void Summary_CreateMonSprite(void) u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySelectScreen->unk294[1].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; + sFactorySelectScreen->monPics[1].monSpriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecY = 0; - sFactorySelectScreen->unk2A0 = FALSE; + sFactorySelectScreen->monPicAnimating = FALSE; } -static void sub_819BE20(bool8 arg0) +static void Select_SetMonPicAnimating(bool8 animating) { - sFactorySelectScreen->unk2A0 = arg0; + sFactorySelectScreen->monPicAnimating = animating; } static void Select_ReshowMonSprite(void) @@ -1959,19 +1962,19 @@ static void Select_ReshowMonSprite(void) u16 species; u32 personality, otId; - sFactorySelectScreen->unk294[1].field1 = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 120, 64, 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 2); + sFactorySelectScreen->monPics[1].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 120, 64, 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[1].bgSpriteId], 2); mon = &sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monData; species = GetMonData(mon, MON_DATA_SPECIES, NULL); personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySelectScreen->unk294[1].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; + sFactorySelectScreen->monPics[1].monSpriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecY = 0; - gSprites[sFactorySelectScreen->unk294[1].field1].invisible = TRUE; + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].invisible = TRUE; } static void Select_ShowChosenMonsSprites(void) @@ -1989,14 +1992,14 @@ static void Select_ShowChosenMonsSprites(void) u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySelectScreen->unk294[i].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, (i * 72) + 16, 32, i + 13, 0xFFFF); - gSprites[sFactorySelectScreen->unk294[i].field0].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->unk294[i].field0].centerToCornerVecY = 0; + sFactorySelectScreen->monPics[i].monSpriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, (i * 72) + 16, 32, i + 13, 0xFFFF); + gSprites[sFactorySelectScreen->monPics[i].monSpriteId].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->monPics[i].monSpriteId].centerToCornerVecY = 0; break; } } } - sFactorySelectScreen->unk2A0 = FALSE; + sFactorySelectScreen->monPicAnimating = FALSE; } static void sub_819C040(struct Sprite *sprite) @@ -2004,12 +2007,12 @@ static void sub_819C040(struct Sprite *sprite) u8 taskId; if (sprite->affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[0].field1].affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[2].field1].affineAnimEnded) + && gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].affineAnimEnded + && gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].affineAnimEnded) { sprite->invisible = TRUE; - gSprites[sFactorySelectScreen->unk294[0].field1].invisible = TRUE; - gSprites[sFactorySelectScreen->unk294[2].field1].invisible = TRUE; + gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].invisible = TRUE; + gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].invisible = TRUE; taskId = CreateTask(sub_819C1D0, 1); gTasks[taskId].func(taskId); @@ -2021,34 +2024,46 @@ static void sub_819C040(struct Sprite *sprite) static void sub_819C100(struct Sprite *sprite) { if (sprite->affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[0].field1].affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[2].field1].affineAnimEnded) + && gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].affineAnimEnded + && gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].affineAnimEnded) { FreeOamMatrix(sprite->oam.matrixNum); - FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[0].field1].oam.matrixNum); - FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[2].field1].oam.matrixNum); + FreeOamMatrix(gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].oam.matrixNum); + FreeOamMatrix(gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].oam.matrixNum); - sFactorySelectScreen->unk2A0 = FALSE; + sFactorySelectScreen->monPicAnimating = FALSE; - DestroySprite(&gSprites[sFactorySelectScreen->unk294[0].field1]); - DestroySprite(&gSprites[sFactorySelectScreen->unk294[2].field1]); + DestroySprite(&gSprites[sFactorySelectScreen->monPics[0].bgSpriteId]); + DestroySprite(&gSprites[sFactorySelectScreen->monPics[2].bgSpriteId]); DestroySprite(sprite); } } +// Task data for sub_819C1D0, sub_819C2D4, Task_CloseMonPic, and Task_OpenMonPic +#define tWinLeft data[3] +#ifndef UBFIX +#define tWinRight data[24] // UB: Typo? Likely meant data[4], 24 is out of bounds +#else +#define tWinRight data[4] +#endif +#define tWinTop data[5] +#define tWinBottom data[8] +#define tSpriteId data[6] // TODO: Clarify, what sprite +#define tIsSwapScreen data[7] + static void sub_819C1D0(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: - task->data[3] = 16; - task->data[24] = 224; // BUG: writing outside the array's bounds. - task->data[5] = 64; - task->data[8] = 65; + task->tWinLeft = 16; + task->tWinRight = DISPLAY_WIDTH - 16; + task->tWinTop = 64; + task->tWinBottom = 65; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); break; @@ -2058,16 +2073,16 @@ static void sub_819C1D0(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); break; case 2: - task->data[5] -= 4; - task->data[8] += 4; - if (task->data[5] <= 32 || task->data[8] >= 96) + task->tWinTop -= 4; + task->tWinBottom += 4; + if (task->tWinTop <= 32 || task->tWinBottom >= 96) { - task->data[5] = 32; - task->data[8] = 96; + task->tWinTop = 32; + task->tWinBottom = 96; ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] != 32) + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + if (task->tWinTop != 32) return; break; default: @@ -2075,80 +2090,80 @@ static void sub_819C1D0(u8 taskId) Select_ShowChosenMonsSprites(); return; } - task->data[0]++; + task->tState++; } static void sub_819C2D4(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { default: HideBg(3); - gSprites[sFactorySelectScreen->unk294[1].field1].invisible = FALSE; - gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C100; - gSprites[sFactorySelectScreen->unk294[0].field1].invisible = FALSE; - gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; - gSprites[sFactorySelectScreen->unk294[2].field1].invisible = FALSE; - gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[0].field1], 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[2].field1], 1); + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = sub_819C100; + gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].callback = SpriteCallbackDummy; + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[1].bgSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[0].bgSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[2].bgSpriteId], 1); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); DestroyTask(taskId); break; case 0: - task->data[3] = 16; - task->data[24] = 224; // BUG: writing outside the array's bounds. - task->data[5] = 32; - task->data[8] = 96; + task->tWinLeft = 16; + task->tWinRight = DISPLAY_WIDTH - 16; + task->tWinTop = 32; + task->tWinBottom = 96; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); - task->data[0]++; + task->tState++; break; case 1: - task->data[5] += 4; - task->data[8] -= 4; - if (task->data[5] >= 64 || task->data[8] <= 65) + task->tWinTop += 4; + task->tWinBottom -= 4; + if (task->tWinTop >= 64 || task->tWinBottom <= 65) { - task->data[5] = 64; - task->data[8] = 65; + task->tWinTop = 64; + task->tWinBottom = 65; } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] == 64) - task->data[0]++; + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + if (task->tWinTop == 64) + task->tState++; break; } } static void sub_819C4B4(void) { - sFactorySelectScreen->unk294[1].field1 = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 120, 64, 1); - sFactorySelectScreen->unk294[0].field1 = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 44, 64, 1); - sFactorySelectScreen->unk294[2].field1 = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 196, 64, 1); + sFactorySelectScreen->monPics[1].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 120, 64, 1); + sFactorySelectScreen->monPics[0].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 44, 64, 1); + sFactorySelectScreen->monPics[2].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 196, 64, 1); - gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C040; - gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; - gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = sub_819C040; + gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].callback = SpriteCallbackDummy; - sFactorySelectScreen->unk2A0 = TRUE; + sFactorySelectScreen->monPicAnimating = TRUE; } static void sub_819C568(void) { u8 taskId; - FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[0].field0); - FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[1].field0); - FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[2].field0); + FreeAndDestroyMonPicSprite(sFactorySelectScreen->monPics[0].monSpriteId); + FreeAndDestroyMonPicSprite(sFactorySelectScreen->monPics[1].monSpriteId); + FreeAndDestroyMonPicSprite(sFactorySelectScreen->monPics[2].monSpriteId); taskId = CreateTask(sub_819C2D4, 1); gTasks[taskId].func(taskId); - sFactorySelectScreen->unk2A0 = TRUE; + sFactorySelectScreen->monPicAnimating = TRUE; } static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V) @@ -2183,56 +2198,56 @@ static bool32 Select_AreSpeciesValid(u16 monId) return TRUE; } -static void Task_SelectFadeSpeciesName(u8 taskId) +static void Select_Task_FadeSpeciesName(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { - case 0: - sFactorySelectScreen->unk2A7 = 0; - sFactorySelectScreen->unk2A8 = 0; - sFactorySelectScreen->unk2A6 = TRUE; - gTasks[taskId].data[0] = 1; + case FADESTATE_INIT: + sFactorySelectScreen->fadeSpeciesNameCoeffDelay = 0; + sFactorySelectScreen->fadeSpeciesNameCoeff = 0; + sFactorySelectScreen->fadeSpeciesNameFadeOut = TRUE; + gTasks[taskId].tState = FADESTATE_RUN; break; - case 1: - if (sFactorySelectScreen->unk2A2) + case FADESTATE_RUN: + if (sFactorySelectScreen->fadeSpeciesNameActive) { - if (sFactorySelectScreen->unk2A9) + if (sFactorySelectScreen->faceSpeciesNameDelay) { - gTasks[taskId].data[0] = 2; + gTasks[taskId].tState = FADESTATE_DELAY; } else { - sFactorySelectScreen->unk2A7++; - if (sFactorySelectScreen->unk2A7 > 6) + sFactorySelectScreen->fadeSpeciesNameCoeffDelay++; + if (sFactorySelectScreen->fadeSpeciesNameCoeffDelay > 6) { - sFactorySelectScreen->unk2A7 = 0; - if (!sFactorySelectScreen->unk2A6) - sFactorySelectScreen->unk2A8--; + sFactorySelectScreen->fadeSpeciesNameCoeffDelay = 0; + if (!sFactorySelectScreen->fadeSpeciesNameFadeOut) + sFactorySelectScreen->fadeSpeciesNameCoeff--; else - sFactorySelectScreen->unk2A8++; + sFactorySelectScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySelectScreen->unk2A8, 0); - if (sFactorySelectScreen->unk2A8 > 5) + BlendPalettes(0x4000, sFactorySelectScreen->fadeSpeciesNameCoeff, 0); + if (sFactorySelectScreen->fadeSpeciesNameCoeff > 5) { - sFactorySelectScreen->unk2A6 = FALSE; + sFactorySelectScreen->fadeSpeciesNameFadeOut = FALSE; } - else if (sFactorySelectScreen->unk2A8 == 0) + else if (sFactorySelectScreen->fadeSpeciesNameCoeff == 0) { - gTasks[taskId].data[0] = 2; - sFactorySelectScreen->unk2A6 = TRUE; + gTasks[taskId].tState = FADESTATE_DELAY; + sFactorySelectScreen->fadeSpeciesNameFadeOut = TRUE; } } } break; - case 2: - if (sFactorySelectScreen->unk2A9 > 14) + case FADESTATE_DELAY: + if (sFactorySelectScreen->faceSpeciesNameDelay > 14) { - sFactorySelectScreen->unk2A9 = 0; - gTasks[taskId].data[0] = 1; + sFactorySelectScreen->faceSpeciesNameDelay = 0; + gTasks[taskId].tState = FADESTATE_RUN; } else { - sFactorySelectScreen->unk2A9++; + sFactorySelectScreen->faceSpeciesNameDelay++; } break; } @@ -2269,246 +2284,256 @@ static void CopySwappedMonData(void) gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].abilityNum = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId].box, MON_DATA_ABILITY_NUM, NULL); } -static void Task_FromSwapScreenToSummaryScreen(u8 taskId) +static void Swap_Task_OpenSummaryScreen(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 6: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].data[0] = 7; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].tState = 7; break; case 7: if (!gPaletteFade.active) { DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); - sub_819F444(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30); + HideMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating); Swap_DestroyAllSprites(); FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); FREE_AND_SET_NULL(sSwapMonPicBgTilesetBuffer); FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); FREE_AND_SET_NULL(sSwapMonPicBgTilemapBuffer); FreeAllWindowBuffers(); - gTasks[taskId].data[0] = 8; + gTasks[taskId].tState = 8; } break; case 8: DestroyTask(taskId); sFactorySwapScreen->fromSummaryScreen = TRUE; - sFactorySwapScreen->unk24 = gPlttBufferUnfaded[244]; + sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[244]; ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, sFactorySwapScreen->cursorPos, FRONTIER_PARTY_SIZE - 1, CB2_InitSwapScreen); break; } } -static void Task_CloseSwapScreen(u8 taskId) +static void Swap_Task_Exit(u8 taskId) { - if (sFactorySwapScreen->unk30 != TRUE) + if (sFactorySwapScreen->monPicAnimating == TRUE) + return; + + switch (gTasks[taskId].tState) { - switch (gTasks[taskId].data[0]) + case 0: + // Set return value for script + // TRUE if player kept their current pokemon + if (sFactorySwapScreen->monSwapped == TRUE) { - case 0: - // Set return value for script - // TRUE if player kept their current pokemon - if (sFactorySwapScreen->monSwapped == TRUE) - { - gTasks[taskId].data[0]++; - gSpecialVar_Result = FALSE; - } - else - { - gTasks[taskId].data[0] = 2; - gSpecialVar_Result = TRUE; - } - break; - case 1: - if (sFactorySwapScreen->monSwapped == TRUE) - { - sFactorySwapScreen->enemyMonId = sFactorySwapScreen->cursorPos; - CopySwappedMonData(); - } - gTasks[taskId].data[0]++; - break; - case 2: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].data[0]++; - break; - case 3: - if (!UpdatePaletteFade()) - { - DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); - Swap_DestroyAllSprites(); - FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); - FREE_AND_SET_NULL(sSwapMonPicBgTilesetBuffer); - FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); - FREE_AND_SET_NULL(sSwapMonPicBgTilemapBuffer); - FREE_AND_SET_NULL(sFactorySwapScreen); - FreeAllWindowBuffers(); - SetMainCallback2(CB2_ReturnToFieldContinueScript); - DestroyTask(taskId); - } - break; + gTasks[taskId].tState++; + gSpecialVar_Result = FALSE; } + else + { + gTasks[taskId].tState = 2; + gSpecialVar_Result = TRUE; + } + break; + case 1: + if (sFactorySwapScreen->monSwapped == TRUE) + { + sFactorySwapScreen->enemyMonId = sFactorySwapScreen->cursorPos; + CopySwappedMonData(); + } + gTasks[taskId].tState++; + break; + case 2: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].tState++; + break; + case 3: + if (!UpdatePaletteFade()) + { + DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); + Swap_DestroyAllSprites(); + FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); + FREE_AND_SET_NULL(sSwapMonPicBgTilesetBuffer); + FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); + FREE_AND_SET_NULL(sSwapMonPicBgTilemapBuffer); + FREE_AND_SET_NULL(sFactorySwapScreen); + FreeAllWindowBuffers(); + SetMainCallback2(CB2_ReturnToFieldContinueScript); + DestroyTask(taskId); + } + break; } } -static void Task_HandleSwapScreenYesNo(u8 taskId) +#define STATE_SHOW_YES_NO 4 +#define STATE_HANDLE_INPUT 5 + +#define tSaidYes data[1] +#define tFollowUpTaskState data[5] +#define tFollowUpTaskPtrHi data[6] +#define tFollowUpTaskPtrLo data[7] + +static void Swap_Task_HandleYesNo(u8 taskId) { u16 loPtr, hiPtr; - if (sFactorySwapScreen->unk30 != TRUE) + if (sFactorySwapScreen->monPicAnimating == TRUE) + return; + + switch (gTasks[taskId].tState) { - switch (gTasks[taskId].data[0]) + case STATE_SHOW_YES_NO: + Swap_ShowYesNoOptions(); + gTasks[taskId].tState = STATE_HANDLE_INPUT; + break; + case STATE_HANDLE_INPUT: + if (JOY_NEW(A_BUTTON)) { - case 4: - Swap_ShowYesNoOptions(); - gTasks[taskId].data[0] = 5; - break; - case 5: - if (gMain.newKeys & A_BUTTON) + PlaySE(SE_SELECT); + if (sFactorySwapScreen->yesNoCursorPos == 0) { - PlaySE(SE_SELECT); - if (sFactorySwapScreen->yesNoCursorPos == 0) - { - gTasks[taskId].data[1] = 1; - hiPtr = gTasks[taskId].data[6]; - loPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); - } - else - { - gTasks[taskId].data[1] = 0; - sub_819EA64(4); - hiPtr = gTasks[taskId].data[6]; - loPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); - } - } - else if (gMain.newKeys & B_BUTTON) - { - PlaySE(SE_SELECT); - gTasks[taskId].data[1] = 0; - sub_819EA64(4); - hiPtr = gTasks[taskId].data[6]; - loPtr = gTasks[taskId].data[7]; + // Selected Yes + gTasks[taskId].tSaidYes = TRUE; + hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; + loPtr = gTasks[taskId].tFollowUpTaskPtrLo; gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else { - PlaySE(SE_SELECT); - Swap_UpdateYesNoCursorPosition(-1); + // Selected No + gTasks[taskId].tSaidYes = FALSE; + Swap_ErasePopupMenu(SWAP_WIN_YES_NO); + hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; + loPtr = gTasks[taskId].tFollowUpTaskPtrLo; + gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - PlaySE(SE_SELECT); - Swap_UpdateYesNoCursorPosition(1); - } - break; } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + gTasks[taskId].tSaidYes = FALSE; + Swap_ErasePopupMenu(SWAP_WIN_YES_NO); + hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; + loPtr = gTasks[taskId].tFollowUpTaskPtrLo; + gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + } + else if (JOY_REPEAT(DPAD_UP)) + { + PlaySE(SE_SELECT); + Swap_UpdateYesNoCursorPosition(-1); + } + else if (JOY_REPEAT(DPAD_DOWN)) + { + PlaySE(SE_SELECT); + Swap_UpdateYesNoCursorPosition(1); + } + break; } } -static void sub_819CBDC(u8 taskId) +static void Swap_HandleQuitSwappingResposne(u8 taskId) { - if (gTasks[taskId].data[1] == 1) + if (gTasks[taskId].tSaidYes == TRUE) { - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = Task_CloseSwapScreen; + gTasks[taskId].tState = 0; + gTasks[taskId].func = Swap_Task_Exit; } else { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); + gTasks[taskId].tFollowUpTaskState = 1; gTasks[taskId].func = sub_819D770; } } -static void sub_819CC24(u8 taskId) +static void Swap_AskQuitSwapping(u8 taskId) { - if (gTasks[taskId].data[0] == 0) + if (gTasks[taskId].tState == 0) { Swap_PrintOnInfoWindow(gText_QuitSwapping); sFactorySwapScreen->monSwapped = FALSE; - gTasks[taskId].data[0] = 4; - gTasks[taskId].data[6] = (u32)(sub_819CBDC) >> 16; - gTasks[taskId].data[7] = (u32)(sub_819CBDC); - gTasks[taskId].func = Task_HandleSwapScreenYesNo; + gTasks[taskId].tState = STATE_SHOW_YES_NO; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_HandleQuitSwappingResposne) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_HandleQuitSwappingResposne); + gTasks[taskId].func = Swap_Task_HandleYesNo; } } -static void sub_819CC74(u8 taskId) +static void Swap_HandleAcceptMonResponse(u8 taskId) { - CloseMonPic(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - if (gTasks[taskId].data[1] == 1) + CloseMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating, TRUE); + if (gTasks[taskId].tSaidYes == TRUE) { - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = Task_CloseSwapScreen; + gTasks[taskId].tState = 0; + gTasks[taskId].func = Swap_Task_Exit; } else { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); + gTasks[taskId].tFollowUpTaskState = 1; gTasks[taskId].func = sub_819D770; } } -static void sub_819CCD4(u8 taskId) +static void Swap_AskAcceptMon(u8 taskId) { - if (gTasks[taskId].data[0] == 0) + if (gTasks[taskId].tState == 0) { - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); + OpenMonPic(&sFactorySwapScreen->monPic.bgSpriteId, &sFactorySwapScreen->monPicAnimating, TRUE); Swap_PrintOnInfoWindow(gText_AcceptThisPkmn); sFactorySwapScreen->monSwapped = TRUE; - gTasks[taskId].data[0] = 4; - gTasks[taskId].data[6] = (u32)(sub_819CC74) >> 16; - gTasks[taskId].data[7] = (u32)(sub_819CC74); - gTasks[taskId].func = Task_HandleSwapScreenYesNo; + gTasks[taskId].tState = STATE_SHOW_YES_NO; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_HandleAcceptMonResponse) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_HandleAcceptMonResponse); + gTasks[taskId].func = Swap_Task_HandleYesNo; } } -static void Task_HandleSwapScreenMenu(u8 taskId) +static void Swap_Task_HandleMenu(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 2: if (!sFactorySwapScreen->fromSummaryScreen) - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); - gTasks[taskId].data[0] = 9; + OpenMonPic(&sFactorySwapScreen->monPic.bgSpriteId, &sFactorySwapScreen->monPicAnimating, TRUE); + gTasks[taskId].tState = 9; break; case 9: - if (sFactorySwapScreen->unk30 != TRUE) + if (sFactorySwapScreen->monPicAnimating != TRUE) { Swap_ShowMenuOptions(); - gTasks[taskId].data[0] = 3; + gTasks[taskId].tState = 3; } break; case 3: - if (sFactorySwapScreen->unk30 != TRUE) + if (sFactorySwapScreen->monPicAnimating != TRUE) { - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); Swap_RunMenuOptionFunc(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - CloseMonPic(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - sub_819EA64(3); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; + CloseMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating, TRUE); + Swap_ErasePopupMenu(SWAP_WIN_OPTIONS); + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); + gTasks[taskId].tFollowUpTaskState = 1; gTasks[taskId].func = sub_819D770; } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (JOY_REPEAT(DPAD_UP)) { Swap_UpdateMenuCursorPosition(-1); } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { Swap_UpdateMenuCursorPosition(1); } @@ -2517,57 +2542,57 @@ static void Task_HandleSwapScreenMenu(u8 taskId) } } -static void Task_HandleSwapScreenChooseMons(u8 taskId) +static void Swap_Task_HandleChooseMons(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (!gPaletteFade.active) { - sFactorySwapScreen->unk22 = TRUE; - gTasks[taskId].data[0] = 1; + sFactorySwapScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = 1; } break; case 1: - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sFactorySwapScreen->unk22 = FALSE; + sFactorySwapScreen->fadeSpeciesNameActive = FALSE; Swap_PrintMonSpecies2(); sub_819EAC0(); Swap_RunActionFunc(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sFactorySwapScreen->unk22 = FALSE; + sFactorySwapScreen->fadeSpeciesNameActive = FALSE; Swap_PrintMonSpecies2(); sub_819EAC0(); - gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 16; - gTasks[taskId].data[7] = (u32)(sub_819CC24); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[5] = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_AskQuitSwapping) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_AskQuitSwapping); + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskState = 0; gTasks[taskId].func = sub_819D588; } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + else if (JOY_REPEAT(DPAD_LEFT)) { Swap_UpdateBallCursorPosition(-1); Swap_PrintMonCategory(); Swap_PrintMonSpecies(); } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + else if (JOY_REPEAT(DPAD_RIGHT)) { Swap_UpdateBallCursorPosition(1); Swap_PrintMonCategory(); Swap_PrintMonSpecies(); } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + else if (JOY_REPEAT(DPAD_DOWN)) { Swap_UpdateActionCursorPosition(1); Swap_PrintMonCategory(); Swap_PrintMonSpecies(); } - else if (gMain.newAndRepeatedKeys & DPAD_UP) + else if (JOY_REPEAT(DPAD_UP)) { Swap_UpdateActionCursorPosition(-1); Swap_PrintMonCategory(); @@ -2577,88 +2602,88 @@ static void Task_HandleSwapScreenChooseMons(u8 taskId) } } -static void Task_SwapFadeSpeciesName(u8 taskId) +static void Swap_Task_FadeSpeciesName(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { - case 0: - sFactorySwapScreen->unk27 = 0; - sFactorySwapScreen->unk28 = 0; - sFactorySwapScreen->unk26 = TRUE; - gTasks[taskId].data[0] = 1; + case FADESTATE_INIT: + sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; + sFactorySwapScreen->fadeSpeciesNameCoeff = 0; + sFactorySwapScreen->fadeSpeciesNameFadeOut = TRUE; + gTasks[taskId].tState = FADESTATE_RUN; break; - case 1: - if (sFactorySwapScreen->unk22) + case FADESTATE_RUN: + if (sFactorySwapScreen->fadeSpeciesNameActive) { - if (sFactorySwapScreen->unk29) + if (sFactorySwapScreen->faceSpeciesNameDelay) { - gTasks[taskId].data[0] = 2; + gTasks[taskId].tState = FADESTATE_DELAY; } else { - sFactorySwapScreen->unk27++; - if (sFactorySwapScreen->unk27 > 6) + sFactorySwapScreen->fadeSpeciesNameCoeffDelay++; + if (sFactorySwapScreen->fadeSpeciesNameCoeffDelay > 6) { - sFactorySwapScreen->unk27 = 0; - if (!sFactorySwapScreen->unk26) - sFactorySwapScreen->unk28--; + sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; + if (!sFactorySwapScreen->fadeSpeciesNameFadeOut) + sFactorySwapScreen->fadeSpeciesNameCoeff--; else - sFactorySwapScreen->unk28++; + sFactorySwapScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySwapScreen->unk28, 0); - if (sFactorySwapScreen->unk28 > 5) + BlendPalettes(0x4000, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); + if (sFactorySwapScreen->fadeSpeciesNameCoeff > 5) { - sFactorySwapScreen->unk26 = FALSE; + sFactorySwapScreen->fadeSpeciesNameFadeOut = FALSE; } - else if (sFactorySwapScreen->unk28 == 0) + else if (sFactorySwapScreen->fadeSpeciesNameCoeff == 0) { - gTasks[taskId].data[0] = 2; - sFactorySwapScreen->unk26 = TRUE; + gTasks[taskId].tState = FADESTATE_DELAY; + sFactorySwapScreen->fadeSpeciesNameFadeOut = TRUE; } } } break; - case 2: - if (sFactorySwapScreen->unk29 > 14) + case FADESTATE_DELAY: + if (sFactorySwapScreen->faceSpeciesNameDelay > 14) { - sFactorySwapScreen->unk29 = 0; - gTasks[taskId].data[0] = 1; + sFactorySwapScreen->faceSpeciesNameDelay = 0; + gTasks[taskId].tState = FADESTATE_RUN; } else { - sFactorySwapScreen->unk29++; + sFactorySwapScreen->faceSpeciesNameDelay++; } break; } } -static void Task_SwapFadeSpeciesName2(u8 taskId) +static void Swap_Task_FadeSpeciesName2(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - sFactorySwapScreen->unk27 = 0; + sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; gTasks[taskId].data[4] = 0; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 1: LoadPalette(&gPlttBufferUnfaded[0xF0], 0xE0, 0xA); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 2: - if (sFactorySwapScreen->unk28 > 15) + if (sFactorySwapScreen->fadeSpeciesNameCoeff > 15) { gTasks[taskId].data[4] = 1; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } - sFactorySwapScreen->unk27++; - if (sFactorySwapScreen->unk27 > 3) + sFactorySwapScreen->fadeSpeciesNameCoeffDelay++; + if (sFactorySwapScreen->fadeSpeciesNameCoeffDelay > 3) { - sFactorySwapScreen->unk27 = 0; + sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; gPlttBufferUnfaded[244] = gPlttBufferFaded[228]; - sFactorySwapScreen->unk28++; + sFactorySwapScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySwapScreen->unk28, 0); + BlendPalettes(0x4000, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); break; } } @@ -2669,13 +2694,13 @@ static void sub_819D12C(u8 taskId) u8 var_2C; bool8 destroyTask; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; gTasks[taskId].data[3] = 0; - gTasks[taskId].data[0] = 1; + gTasks[taskId].tState = 1; break; case 1: var_2C = 0; @@ -2721,7 +2746,7 @@ static void sub_819D12C(u8 taskId) destroyTask = FALSE; } - if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x - 16 > 240) + if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x - 16 > DISPLAY_WIDTH) { var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = -16; @@ -2751,50 +2776,50 @@ static void sub_819D324(u8 taskId) if (gTasks[taskId].data[2] == 1) r4 *= -1; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - currPosX = gSprites[sFactorySwapScreen->unk8[0][0]].pos1.x; + currPosX = gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][0]].pos1.x; if (!gTasks[taskId].data[2]) { - if (currPosX + r4 < 240) + if (currPosX + r4 < DISPLAY_WIDTH) { r1 = TRUE; } else { r1 = FALSE; - posX = 240; + posX = DISPLAY_WIDTH; } } else { - if (currPosX + r4 > 160) + if (currPosX + r4 > DISPLAY_HEIGHT) { r1 = TRUE; } else { r1 = FALSE; - posX = 160; + posX = DISPLAY_HEIGHT; } } if (r1 == TRUE) { - for (i = 0; i < 3; i++) + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); i++) { - for (j = 0; j < 2; j++) - gSprites[sFactorySwapScreen->unk8[j][i]].pos1.x += r4; + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds); j++) + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][i]].pos1.x += r4; } } else { - for (j = 0; j < 2; j++) + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds); j++) { - gSprites[sFactorySwapScreen->unk8[j][0]].pos1.x = posX; - gSprites[sFactorySwapScreen->unk8[j][1]].pos1.x = posX + 16; - gSprites[sFactorySwapScreen->unk8[j][2]].pos1.x = posX + 48; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][0]].pos1.x = posX; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][1]].pos1.x = posX + 16; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][2]].pos1.x = posX + 48; } taskId2 = gTasks[taskId].data[1]; gTasks[taskId2].data[3] = 1; @@ -2802,46 +2827,46 @@ static void sub_819D324(u8 taskId) } break; case 1: - currPosX = gSprites[sFactorySwapScreen->unkE[0][0]].pos1.x; + currPosX = gSprites[sFactorySwapScreen->cancelButtonSpriteIds[0][0]].pos1.x; if (!gTasks[taskId].data[2]) { - if (currPosX + r4 < 240) + if (currPosX + r4 < DISPLAY_WIDTH) { r1 = TRUE; } else { r1 = FALSE; - posX = 240; + posX = DISPLAY_WIDTH; } } else { - if (currPosX + r4 > 192) + if (currPosX + r4 > DISPLAY_HEIGHT + 32) { r1 = TRUE; } else { r1 = FALSE; - posX = 192; + posX = DISPLAY_HEIGHT + 32; } } if (r1 == TRUE) { - for (i = 0; i < 2; i++) + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds); i++) { - for (j = 0; j < 2; j++) - gSprites[sFactorySwapScreen->unkE[j][i]].pos1.x += r4; + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0]); j++) + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[j][i]].pos1.x += r4; } } else { - for (j = 0; j < 2; j++) + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds); j++) { - gSprites[sFactorySwapScreen->unkE[j][0]].pos1.x = posX; - gSprites[sFactorySwapScreen->unkE[j][1]].pos1.x = posX + 16; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[j][0]].pos1.x = posX; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[j][1]].pos1.x = posX + 16; } taskId2 = gTasks[taskId].data[1]; gTasks[taskId2].data[4] = 1; @@ -2854,39 +2879,39 @@ static void sub_819D324(u8 taskId) static void sub_819D588(u8 taskId) { u8 anotherTaskId; - u16 loPtr, hiPtr; + u16 hiPtr, loPtr; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); Swap_PrintActionStrings(); - PutWindowTilemap(5); - gTasks[taskId].data[0]++; + PutWindowTilemap(SWAP_WIN_5); + gTasks[taskId].tState++; break; case 1: - sub_819EA64(3); - gTasks[taskId].data[0]++; + Swap_ErasePopupMenu(SWAP_WIN_OPTIONS); + gTasks[taskId].tState++; break; case 2: - BeginNormalPaletteFade(0x4000, 0, 0, 0x10, sPokeballGray_Pal[37]); - gTasks[taskId].data[0]++; + BeginNormalPaletteFade(0x4000, 0, 0, 16, sPokeballGray_Pal[37]); + gTasks[taskId].tState++; break; case 3: if (!gPaletteFade.active) { - FillWindowPixelBuffer(5, PIXEL_FILL(0)); - CopyWindowToVram(5, 2); + FillWindowPixelBuffer(SWAP_WIN_5, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_5, 2); if (sFactorySwapScreen->inEnemyScreen == TRUE) { anotherTaskId = CreateTask(sub_819D324, 0); gTasks[taskId].data[3] = 0; gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 0; + gTasks[anotherTaskId].tState = 0; gTasks[anotherTaskId].data[2] = 0; gTasks[anotherTaskId].data[3] = 6; gTasks[taskId].data[2] = 5; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } else { @@ -2894,10 +2919,10 @@ static void sub_819D588(u8 taskId) gTasks[taskId].data[3] = 1; gTasks[taskId].data[4] = 0; gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].tState = 1; gTasks[anotherTaskId].data[2] = 0; gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0] += 2; + gTasks[taskId].tState += 2; } } break; @@ -2907,10 +2932,10 @@ static void sub_819D588(u8 taskId) anotherTaskId = CreateTask(sub_819D324, 0); gTasks[taskId].data[4] = 0; gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].tState = 1; gTasks[anotherTaskId].data[2] = 0; gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } else { @@ -2920,10 +2945,10 @@ static void sub_819D588(u8 taskId) case 5: if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) { - gTasks[taskId].data[0] = gTasks[taskId].data[5]; - loPtr = gTasks[taskId].data[6]; - hiPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void *)((loPtr << 0x10) | (hiPtr)); + gTasks[taskId].tState = gTasks[taskId].tFollowUpTaskState; + hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; + loPtr = gTasks[taskId].tFollowUpTaskPtrLo; + gTasks[taskId].func = (void *)((hiPtr << 16) | (loPtr)); } break; } @@ -2932,11 +2957,11 @@ static void sub_819D588(u8 taskId) static void sub_819D770(u8 taskId) { u8 anotherTaskId; - u16 loPtr, hiPtr; - if (sFactorySwapScreen->unk30 == TRUE) + u16 hiPtr, loPtr; + if (sFactorySwapScreen->monPicAnimating == TRUE) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (sFactorySwapScreen->inEnemyScreen == TRUE) @@ -2944,11 +2969,11 @@ static void sub_819D770(u8 taskId) anotherTaskId = CreateTask(sub_819D324, 0); gTasks[taskId].data[3] = 0; gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 0; + gTasks[anotherTaskId].tState = 0; gTasks[anotherTaskId].data[2] = 1; gTasks[anotherTaskId].data[3] = 6; gTasks[taskId].data[2] = 10; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } else { @@ -2956,10 +2981,10 @@ static void sub_819D770(u8 taskId) gTasks[taskId].data[3] = 1; gTasks[taskId].data[4] = 0; gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].tState = 1; gTasks[anotherTaskId].data[2] = 1; gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0] += 2; + gTasks[taskId].tState += 2; } break; case 1: @@ -2968,10 +2993,10 @@ static void sub_819D770(u8 taskId) anotherTaskId = CreateTask(sub_819D324, 0); gTasks[taskId].data[4] = 0; gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].tState = 1; gTasks[anotherTaskId].data[2] = 1; gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } else { @@ -2983,30 +3008,30 @@ static void sub_819D770(u8 taskId) { gPlttBufferFaded[226] = sPokeballGray_Pal[37]; Swap_PrintActionStrings(); - PutWindowTilemap(5); - gTasks[taskId].data[0]++; + PutWindowTilemap(SWAP_WIN_5); + gTasks[taskId].tState++; } break; case 3: - BeginNormalPaletteFade(0x4000, 0, 0x10, 0, sPokeballGray_Pal[37]); - gTasks[taskId].data[0]++; + BeginNormalPaletteFade(0x4000, 0, 16, 0, sPokeballGray_Pal[37]); + gTasks[taskId].tState++; break; case 4: if (!gPaletteFade.active) { Swap_PrintOneActionString(0); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 5: Swap_PrintOneActionString(1); - PutWindowTilemap(3); - gTasks[taskId].data[0]++; + PutWindowTilemap(SWAP_WIN_OPTIONS); + gTasks[taskId].tState++; break; case 6: - FillWindowPixelBuffer(5, PIXEL_FILL(0)); - CopyWindowToVram(5, 2); - gTasks[taskId].data[0]++; + FillWindowPixelBuffer(SWAP_WIN_5, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_5, 2); + gTasks[taskId].tState++; break; case 7: if (!sFactorySwapScreen->inEnemyScreen) @@ -3016,16 +3041,16 @@ static void sub_819D770(u8 taskId) if (sFactorySwapScreen->cursorPos < FRONTIER_PARTY_SIZE) gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; Swap_PrintMonCategory(); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 8: Swap_PrintMonSpecies3(); sub_819EADC(); - sFactorySwapScreen->unk22 = TRUE; - gTasks[taskId].data[0] = gTasks[taskId].data[5]; - loPtr = gTasks[taskId].data[6]; - hiPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void *)((loPtr << 0x10) | (hiPtr)); + sFactorySwapScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = gTasks[taskId].tFollowUpTaskState; + hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; + loPtr = gTasks[taskId].tFollowUpTaskPtrLo; + gTasks[taskId].func = (void *)((hiPtr << 16) | (loPtr)); break; } } @@ -3033,24 +3058,24 @@ static void sub_819D770(u8 taskId) static void sub_819D9EC(u8 taskId) { u8 i; - if (sFactorySwapScreen->unk30 == TRUE) + if (sFactorySwapScreen->monPicAnimating == TRUE) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: Swap_PrintMonSpecies3(); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 1: sub_819EADC(); gSprites[sFactorySwapScreen->cursorSpriteId].invisible = TRUE; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 2: CreateTask(sub_819D12C, 0); - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Task_SwapFadeSpeciesName2; - gTasks[taskId].data[0]++; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Swap_Task_FadeSpeciesName2; + gTasks[taskId].tState++; break; case 3: if (!FuncIsActiveTask(sub_819D12C) && gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[4] == 1) @@ -3058,28 +3083,30 @@ static void sub_819D9EC(u8 taskId) sub_819EAC0(); if (!sFactorySwapScreen->inEnemyScreen) { - Swap_InitActions(ACTIONS_ENEMY_SCREEN); + Swap_InitActions(SWAP_ENEMY_SCREEN); } else { - Swap_InitActions(ACTIONS_PLAYER_SCREEN); - for (i = 0; i < 3; i++) - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; + Swap_InitActions(SWAP_PLAYER_SCREEN); + + // Hide "Pkmn for Swap" button + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); i++) + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][i]].invisible = TRUE; } gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x; - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Task_SwapFadeSpeciesName; - sFactorySwapScreen->unk27 = 0; - sFactorySwapScreen->unk28 = 6; - sFactorySwapScreen->unk26 = FALSE; - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 1; - gTasks[taskId].data[0]++; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Swap_Task_FadeSpeciesName; + sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; + sFactorySwapScreen->fadeSpeciesNameCoeff = 6; + sFactorySwapScreen->fadeSpeciesNameFadeOut = FALSE; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = 1; + gTasks[taskId].tState++; } break; case 4: - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); + gTasks[taskId].tFollowUpTaskState = 1; gTasks[taskId].func = sub_819D770; break; } @@ -3091,7 +3118,7 @@ static void Swap_InitStruct(void) { sFactorySwapScreen = AllocZeroed(sizeof(*sFactorySwapScreen)); sFactorySwapScreen->cursorPos = 0; - sFactorySwapScreen->unk30 = FALSE; + sFactorySwapScreen->monPicAnimating = FALSE; sFactorySwapScreen->fromSummaryScreen = FALSE; } } @@ -3182,28 +3209,28 @@ static void CB2_InitSwapScreen(void) Swap_InitAllSprites(); if (sFactorySwapScreen->fromSummaryScreen == TRUE) Swap_ShowSummaryMonSprite(); - Swap_InitActions(ACTIONS_PLAYER_SCREEN); + Swap_InitActions(SWAP_PLAYER_SCREEN); gMain.state++; break; case 7: Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); - PutWindowTilemap(2); + PutWindowTilemap(SWAP_WIN_INFO); gMain.state++; break; case 8: Swap_PrintMonCategory(); - PutWindowTilemap(8); + PutWindowTilemap(SWAP_WIN_MON_CATEGORY); gMain.state++; break; case 9: if (!sFactorySwapScreen->fromSummaryScreen) Swap_PrintMonSpecies(); - PutWindowTilemap(1); + PutWindowTilemap(SWAP_WIN_SPECIES); gMain.state++; break; case 10: Swap_PrintPkmnSwap(); - PutWindowTilemap(0); + PutWindowTilemap(SWAP_WIN_TITLE); gMain.state++; break; case 11: @@ -3216,11 +3243,11 @@ static void CB2_InitSwapScreen(void) break; case 13: Swap_PrintActionStrings2(); - PutWindowTilemap(3); + PutWindowTilemap(SWAP_WIN_OPTIONS); gMain.state++; break; case 14: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); ShowBg(0); ShowBg(1); @@ -3238,20 +3265,20 @@ static void CB2_InitSwapScreen(void) gMain.state++; break; case 15: - sFactorySwapScreen->fadeSpeciesNameTaskId = CreateTask(Task_SwapFadeSpeciesName, 0); + sFactorySwapScreen->fadeSpeciesNameTaskId = CreateTask(Swap_Task_FadeSpeciesName, 0); if (!sFactorySwapScreen->fromSummaryScreen) { - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 0; - taskId = CreateTask(Task_HandleSwapScreenChooseMons, 0); - gTasks[taskId].data[0] = 0; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = 0; + taskId = CreateTask(Swap_Task_HandleChooseMons, 0); + gTasks[taskId].tState = 0; } else { sub_819EAF8(); - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 1; - sFactorySwapScreen->unk22 = FALSE; - taskId = CreateTask(Task_HandleSwapScreenMenu, 0); - gTasks[taskId].data[0] = 2; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = 1; + sFactorySwapScreen->fadeSpeciesNameActive = FALSE; + taskId = CreateTask(Swap_Task_HandleMenu, 0); + gTasks[taskId].tState = 2; } SetMainCallback2(Swap_CB2); break; @@ -3283,73 +3310,73 @@ static void Swap_InitAllSprites(void) gSprites[sFactorySwapScreen->menuCursor2SpriteId].centerToCornerVecY = 0; if (sFactorySwapScreen->fromSummaryScreen == TRUE) - x = 240; + x = DISPLAY_WIDTH; else - x = 192; + x = DISPLAY_WIDTH - 48; // Unusual way to create sprites // The sprite template for the selector arrow is re-used // with the tiles swapped out spriteTemplate = sSpriteTemplate_Swap_Arrow; spriteTemplate.tileTag = GFXTAG_ACTION_BOX_LEFT; - sFactorySwapScreen->unk8[0][0] = CreateSprite(&spriteTemplate, 240, 120, 10); + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][0] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH, 120, 10); spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; spriteTemplate.tileTag = GFXTAG_ACTION_BOX_RIGHT; - sFactorySwapScreen->unk8[0][1] = CreateSprite(&spriteTemplate, 256, 120, 10); - sFactorySwapScreen->unk8[0][2] = CreateSprite(&spriteTemplate, 288, 120, 10); + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][1] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH + 16, 120, 10); + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][2] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH + 48, 120, 10); spriteTemplate = sSpriteTemplate_Swap_Arrow; spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_LEFT; - sFactorySwapScreen->unk8[1][0] = CreateSprite(&spriteTemplate, 240, 120, 1); + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][0] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH, 120, 1); spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_MIDDLE; - sFactorySwapScreen->unk8[1][1] = CreateSprite(&spriteTemplate, 256, 120, 1); + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][1] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH + 16, 120, 1); spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_RIGHT; - sFactorySwapScreen->unk8[1][2] = CreateSprite(&spriteTemplate, 288, 120, 1); + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][2] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH + 48, 120, 1); spriteTemplate = sSpriteTemplate_Swap_Arrow; spriteTemplate.tileTag = GFXTAG_ACTION_BOX_LEFT; - sFactorySwapScreen->unkE[0][0] = CreateSprite(&spriteTemplate, x, 144, 10); + sFactorySwapScreen->cancelButtonSpriteIds[0][0] = CreateSprite(&spriteTemplate, x, 144, 10); spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; spriteTemplate.tileTag = GFXTAG_ACTION_BOX_RIGHT; - sFactorySwapScreen->unkE[0][1] = CreateSprite(&spriteTemplate, x + 16, 144, 10); + sFactorySwapScreen->cancelButtonSpriteIds[0][1] = CreateSprite(&spriteTemplate, x + 16, 144, 10); spriteTemplate = sSpriteTemplate_Swap_Arrow; spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_LEFT; - sFactorySwapScreen->unkE[1][0] = CreateSprite(&spriteTemplate, x, 144, 1); + sFactorySwapScreen->cancelButtonSpriteIds[1][0] = CreateSprite(&spriteTemplate, x, 144, 1); spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_RIGHT; - sFactorySwapScreen->unkE[1][1] = CreateSprite(&spriteTemplate, x + 16, 144, 1); + sFactorySwapScreen->cancelButtonSpriteIds[1][1] = CreateSprite(&spriteTemplate, x + 16, 144, 1); for (i = 0; i < 2; i++) { - gSprites[sFactorySwapScreen->unk8[i][0]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk8[i][0]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unk8[i][1]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk8[i][1]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unk8[i][2]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk8[i][2]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unkE[i][0]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unkE[i][0]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unkE[i][1]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unkE[i][1]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][0]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][0]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][1]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][1]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][2]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][2]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][0]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][0]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][1]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][1]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unk8[i][0]].invisible = TRUE; - gSprites[sFactorySwapScreen->unk8[i][1]].invisible = TRUE; - gSprites[sFactorySwapScreen->unk8[i][2]].invisible = TRUE; - gSprites[sFactorySwapScreen->unkE[i][0]].invisible = TRUE; - gSprites[sFactorySwapScreen->unkE[i][1]].invisible = TRUE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][0]].invisible = TRUE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][1]].invisible = TRUE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][2]].invisible = TRUE; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][0]].invisible = TRUE; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][1]].invisible = TRUE; } - gSprites[sFactorySwapScreen->unkE[0][0]].invisible = FALSE; - gSprites[sFactorySwapScreen->unkE[0][1]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[0][0]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[0][1]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[0][2]].invisible = FALSE; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[0][0]].invisible = FALSE; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[0][1]].invisible = FALSE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][0]].invisible = FALSE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][1]].invisible = FALSE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][2]].invisible = FALSE; } static void Swap_DestroyAllSprites(void) @@ -3361,15 +3388,15 @@ static void Swap_DestroyAllSprites(void) DestroySprite(&gSprites[sFactorySwapScreen->cursorSpriteId]); DestroySprite(&gSprites[sFactorySwapScreen->menuCursor1SpriteId]); DestroySprite(&gSprites[sFactorySwapScreen->menuCursor2SpriteId]); - for (i = 0; i < 2; i++) + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds); i++) { - for (j = 0; j < 3; j++) - DestroySprite(&gSprites[sFactorySwapScreen->unk8[i][j]]); + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); j++) + DestroySprite(&gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][j]]); } - for (i = 0; i < 2; i++) + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds); i++) { - for (j = 0; j < 2; j++) - DestroySprite(&gSprites[sFactorySwapScreen->unkE[i][j]]); + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0]); j++) + DestroySprite(&gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][j]]); } } @@ -3377,14 +3404,16 @@ static void Swap_HandleActionCursorChange(u8 cursorId) { if (cursorId < FRONTIER_PARTY_SIZE) { + // Cursor is on one of the pokemon gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; - sub_819E8EC(); + Swap_HideActionButtonHighlights(); gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[cursorId]].pos1.x; } else { + // Cursor is on an action button gSprites[sFactorySwapScreen->cursorSpriteId].invisible = TRUE; - sub_819E838(sFactorySwapScreen->actionsData[cursorId].id); + Swap_HighlightActionButton(sFactorySwapScreen->actionsData[cursorId].id); } } @@ -3464,7 +3493,7 @@ static void Swap_UpdateMenuCursorPosition(s8 direction) PlaySE(SE_SELECT); if (direction > 0) // Move cursor down. { - if (sFactorySwapScreen->menuCursorPos != SWAPMENU_OPTIONS_COUNT - 1) + if (sFactorySwapScreen->menuCursorPos != ARRAY_COUNT(sSwap_MenuOptionFuncs) - 1) sFactorySwapScreen->menuCursorPos++; else sFactorySwapScreen->menuCursorPos = 0; @@ -3474,43 +3503,52 @@ static void Swap_UpdateMenuCursorPosition(s8 direction) if (sFactorySwapScreen->menuCursorPos != 0) sFactorySwapScreen->menuCursorPos--; else - sFactorySwapScreen->menuCursorPos = SWAPMENU_OPTIONS_COUNT - 1; + sFactorySwapScreen->menuCursorPos = ARRAY_COUNT(sSwap_MenuOptionFuncs) - 1; } gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; } -static void sub_819E838(u8 arg0) +static void Swap_HighlightActionButton(u8 actionId) { u8 i; - for (i = 0; i < 3; i++) + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); i++) { - if (arg0 == 2) + if (actionId == SWAPACTION_PKMN_FOR_SWAP) { - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = FALSE; - if (i < 2) - gSprites[sFactorySwapScreen->unkE[1][i]].invisible = TRUE; + // Show button highlight on "Pkmn for Swap" + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][i]].invisible = FALSE; + + // Hide button highlight on Cancel + if (i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0])) + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[1][i]].invisible = TRUE; } - else if (arg0 == 3) + else if (actionId == SWAPACTION_CANCEL) { - if (i < 2) - gSprites[sFactorySwapScreen->unkE[1][i]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; + // Show button highlight on Cancel + if (i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0])) + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[1][i]].invisible = FALSE; + + // Hide button highlight on "Pkmn for Swap" + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][i]].invisible = TRUE; } } } -static void sub_819E8EC(void) +static void Swap_HideActionButtonHighlights(void) { u8 i; - for (i = 0; i < 3; i++) + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); i++) { - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; - if (i < 2) - gSprites[sFactorySwapScreen->unkE[1][i]].invisible = TRUE; + // Hide button highlight on "Pkmn for Swap" + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][i]].invisible = TRUE; + + // Hide button highlight on Cancel + if (i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0])) + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[1][i]].invisible = TRUE; } } @@ -3547,7 +3585,7 @@ static void Swap_ShowYesNoOptions(void) Swap_PrintYesNoOptions(); } -static void sub_819EA64(u8 windowId) +static void Swap_ErasePopupMenu(u8 windowId) { gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = TRUE; gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = TRUE; @@ -3558,31 +3596,31 @@ static void sub_819EA64(u8 windowId) static void sub_819EAC0(void) { - PutWindowTilemap(1); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - CopyWindowToVram(1, 2); + PutWindowTilemap(SWAP_WIN_SPECIES); + FillWindowPixelBuffer(SWAP_WIN_SPECIES, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_SPECIES, 2); } static void sub_819EADC(void) { - PutWindowTilemap(7); - FillWindowPixelBuffer(7, PIXEL_FILL(0)); - CopyWindowToVram(7, 2); + PutWindowTilemap(SWAP_WIN_7); + FillWindowPixelBuffer(SWAP_WIN_7, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_7, 2); } static void sub_819EAF8(void) { sub_819EAC0(); - PutWindowTilemap(5); - FillWindowPixelBuffer(5, PIXEL_FILL(0)); - CopyWindowToVram(5, 2); + PutWindowTilemap(SWAP_WIN_5); + FillWindowPixelBuffer(SWAP_WIN_5, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_5, 2); } static void Swap_PrintPkmnSwap(void) { - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, 1, gText_PkmnSwap, 2, 1, 0, NULL); - CopyWindowToVram(0, 3); + FillWindowPixelBuffer(SWAP_WIN_TITLE, PIXEL_FILL(1)); + AddTextPrinterParameterized(SWAP_WIN_TITLE, 1, gText_PkmnSwap, 2, 1, 0, NULL); + CopyWindowToVram(SWAP_WIN_TITLE, 3); } static void Swap_PrintMonSpecies(void) @@ -3590,10 +3628,10 @@ static void Swap_PrintMonSpecies(void) u16 species; u8 x; - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(SWAP_WIN_SPECIES, PIXEL_FILL(0)); if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(1, 2); + CopyWindowToVram(SWAP_WIN_SPECIES, 2); } else { @@ -3604,35 +3642,35 @@ static void Swap_PrintMonSpecies(void) species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(1, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(1, 3); + AddTextPrinterParameterized3(SWAP_WIN_SPECIES, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SWAP_WIN_SPECIES, 3); } } static void Swap_PrintOnInfoWindow(const u8 *str) { - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); - CopyWindowToVram(2, 2); + FillWindowPixelBuffer(SWAP_WIN_INFO, PIXEL_FILL(0)); + AddTextPrinterParameterized(SWAP_WIN_INFO, 1, str, 2, 5, 0, NULL); + CopyWindowToVram(SWAP_WIN_INFO, 2); } static void Swap_PrintMenuOptions(void) { - PutWindowTilemap(3); - FillWindowPixelBuffer(3, PIXEL_FILL(0)); - AddTextPrinterParameterized3(3, 1, 15, 1, sSwapMenuOptionsTextColors, 0, gText_Summary2); - AddTextPrinterParameterized3(3, 1, 15, 17, sSwapMenuOptionsTextColors, 0, gText_Swap); - AddTextPrinterParameterized3(3, 1, 15, 33, sSwapMenuOptionsTextColors, 0, gText_Rechoose); - CopyWindowToVram(3, 3); + PutWindowTilemap(SWAP_WIN_OPTIONS); + FillWindowPixelBuffer(SWAP_WIN_OPTIONS, PIXEL_FILL(0)); + AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, 1, 15, 1, sSwapMenuOptionsTextColors, 0, gText_Summary2); + AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, 1, 15, 17, sSwapMenuOptionsTextColors, 0, gText_Swap); + AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, 1, 15, 33, sSwapMenuOptionsTextColors, 0, gText_Rechoose); + CopyWindowToVram(SWAP_WIN_OPTIONS, 3); } static void Swap_PrintYesNoOptions(void) { - PutWindowTilemap(4); - FillWindowPixelBuffer(4, PIXEL_FILL(0)); - AddTextPrinterParameterized3(4, 1, 7, 1, sSwapMenuOptionsTextColors, 0, gText_Yes3); - AddTextPrinterParameterized3(4, 1, 7, 17, sSwapMenuOptionsTextColors, 0, gText_No3); - CopyWindowToVram(4, 3); + PutWindowTilemap(SWAP_WIN_YES_NO); + FillWindowPixelBuffer(SWAP_WIN_YES_NO, PIXEL_FILL(0)); + AddTextPrinterParameterized3(SWAP_WIN_YES_NO, 1, 7, 1, sSwapMenuOptionsTextColors, 0, gText_Yes3); + AddTextPrinterParameterized3(SWAP_WIN_YES_NO, 1, 7, 17, sSwapMenuOptionsTextColors, 0, gText_No3); + CopyWindowToVram(SWAP_WIN_YES_NO, 3); } static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) @@ -3643,30 +3681,30 @@ static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) static void Swap_PrintActionStrings(void) { - FillWindowPixelBuffer(5, PIXEL_FILL(0)); + FillWindowPixelBuffer(SWAP_WIN_5, PIXEL_FILL(0)); switch (sFactorySwapScreen->inEnemyScreen) { case TRUE: - Swap_PrintActionString(gText_PkmnForSwap, 0, 5); + Swap_PrintActionString(gText_PkmnForSwap, 0, SWAP_WIN_5); case FALSE: - Swap_PrintActionString(gText_Cancel3, 24, 5); + Swap_PrintActionString(gText_Cancel3, 24, SWAP_WIN_5); break; } - CopyWindowToVram(5, 3); + CopyWindowToVram(SWAP_WIN_5, 3); } static void Swap_PrintActionStrings2(void) { - FillWindowPixelBuffer(3, PIXEL_FILL(0)); + FillWindowPixelBuffer(SWAP_WIN_OPTIONS, PIXEL_FILL(0)); switch (sFactorySwapScreen->inEnemyScreen) { case TRUE: - Swap_PrintActionString(gText_PkmnForSwap, 8, 3); + Swap_PrintActionString(gText_PkmnForSwap, 8, SWAP_WIN_OPTIONS); case FALSE: - Swap_PrintActionString(gText_Cancel3, 32, 3); + Swap_PrintActionString(gText_Cancel3, 32, SWAP_WIN_OPTIONS); break; } - CopyWindowToVram(3, 3); + CopyWindowToVram(SWAP_WIN_OPTIONS, 3); } static void Swap_PrintOneActionString(u8 which) @@ -3675,13 +3713,13 @@ static void Swap_PrintOneActionString(u8 which) { case 0: if (sFactorySwapScreen->inEnemyScreen == TRUE) - Swap_PrintActionString(gText_PkmnForSwap, 8, 3); + Swap_PrintActionString(gText_PkmnForSwap, 8, SWAP_WIN_OPTIONS); break; case 1: - Swap_PrintActionString(gText_Cancel3, 32, 3); + Swap_PrintActionString(gText_Cancel3, 32, SWAP_WIN_OPTIONS); break; } - CopyWindowToVram(3, 3); + CopyWindowToVram(SWAP_WIN_OPTIONS, 3); } static void Swap_PrintMonSpecies2(void) @@ -3694,14 +3732,14 @@ static void Swap_PrintMonSpecies2(void) if (!sFactorySwapScreen->fromSummaryScreen) pal[4] = gPlttBufferFaded[228]; else - pal[4] = sFactorySwapScreen->unk24; + pal[4] = sFactorySwapScreen->speciesNameColorBackup; LoadPalette(pal, 0xF0, sizeof(sSwapText_Pal)); - PutWindowTilemap(7); - FillWindowPixelBuffer(7, PIXEL_FILL(0)); + PutWindowTilemap(SWAP_WIN_7); + FillWindowPixelBuffer(SWAP_WIN_7, PIXEL_FILL(0)); if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(7, 3); + CopyWindowToVram(SWAP_WIN_7, 3); } else { @@ -3712,8 +3750,8 @@ static void Swap_PrintMonSpecies2(void) species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(7, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(7, 3); + AddTextPrinterParameterized3(SWAP_WIN_7, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SWAP_WIN_7, 3); } } @@ -3723,11 +3761,11 @@ static void Swap_PrintMonSpecies3(void) u8 x; LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); - CpuCopy16(gPlttBufferUnfaded + 240, gPlttBufferFaded + 224, 10); + CpuCopy16(&gPlttBufferUnfaded[240], &gPlttBufferFaded[224], 10); if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(1, 2); + CopyWindowToVram(SWAP_WIN_SPECIES, 2); } else { @@ -3738,8 +3776,8 @@ static void Swap_PrintMonSpecies3(void) species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(1, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(1, 3); + AddTextPrinterParameterized3(SWAP_WIN_SPECIES, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SWAP_WIN_SPECIES, 3); } } @@ -3750,22 +3788,22 @@ static void Swap_PrintMonCategory(void) u8 x; u8 monId = sFactorySwapScreen->cursorPos; - FillWindowPixelBuffer(8, PIXEL_FILL(0)); + FillWindowPixelBuffer(SWAP_WIN_MON_CATEGORY, PIXEL_FILL(0)); if (monId >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(8, 2); + CopyWindowToVram(SWAP_WIN_MON_CATEGORY, 2); } else { - PutWindowTilemap(8); + PutWindowTilemap(SWAP_WIN_MON_CATEGORY); if (!sFactorySwapScreen->inEnemyScreen) species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); else species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); x = GetStringRightAlignXOffset(1, text, 0x76); - AddTextPrinterParameterized(8, 1, text, x, 1, 0, NULL); - CopyWindowToVram(8, 2); + AddTextPrinterParameterized(SWAP_WIN_MON_CATEGORY, 1, text, x, 1, 0, NULL); + CopyWindowToVram(SWAP_WIN_MON_CATEGORY, 2); } } @@ -3775,13 +3813,13 @@ static void Swap_InitActions(u8 id) { switch (id) { - case ACTIONS_PLAYER_SCREEN: + case SWAP_PLAYER_SCREEN: sFactorySwapScreen->inEnemyScreen = FALSE; sFactorySwapScreen->cursorPos = 0; sFactorySwapScreen->actionsCount = ARRAY_COUNT(sSwap_PlayerScreenActions); sFactorySwapScreen->actionsData = sSwap_PlayerScreenActions; break; - case ACTIONS_ENEMY_SCREEN: + case SWAP_ENEMY_SCREEN: sFactorySwapScreen->inEnemyScreen = TRUE; sFactorySwapScreen->cursorPos = 0; sFactorySwapScreen->actionsCount = ARRAY_COUNT(sSwap_EnemyScreenActions); @@ -3799,27 +3837,27 @@ static void Swap_RunMenuOptionFunc(u8 taskId) static void Swap_OptionSwap(u8 taskId) { - CloseMonPic(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + CloseMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating, TRUE); sFactorySwapScreen->playerMonId = sFactorySwapScreen->cursorPos; - sub_819EA64(3); - gTasks[taskId].data[0] = 0; + Swap_ErasePopupMenu(SWAP_WIN_OPTIONS); + gTasks[taskId].tState = 0; gTasks[taskId].func = sub_819D9EC; } static void Swap_OptionSummary(u8 taskId) { - gTasks[taskId].data[0] = 6; - gTasks[taskId].func = Task_FromSwapScreenToSummaryScreen; + gTasks[taskId].tState = 6; + gTasks[taskId].func = Swap_Task_OpenSummaryScreen; } static void Swap_OptionRechoose(u8 taskId) { - CloseMonPic(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - sub_819EA64(3); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; + CloseMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating, TRUE); + Swap_ErasePopupMenu(SWAP_WIN_OPTIONS); + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); + gTasks[taskId].tFollowUpTaskState = 1; gTasks[taskId].func = sub_819D770; } @@ -3831,19 +3869,19 @@ static void Swap_RunActionFunc(u8 taskId) static void Swap_ActionCancel(u8 taskId) { - gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 0x10; - gTasks[taskId].data[7] = (u32)(sub_819CC24); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[5] = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_AskQuitSwapping) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_AskQuitSwapping); + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskState = 0; gTasks[taskId].func = sub_819D588; } static void Swap_ActionPkmnForSwap(u8 taskId) { - gTasks[taskId].data[6] = (u32)(sub_819D9EC) >> 0x10; - gTasks[taskId].data[7] = (u32)(sub_819D9EC); - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[0] = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(sub_819D9EC) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(sub_819D9EC); + gTasks[taskId].tFollowUpTaskState = 0; + gTasks[taskId].tState = 0; gTasks[taskId].func = sub_819D588; } @@ -3851,34 +3889,36 @@ static void Swap_ActionMon(u8 taskId) { if (!sFactorySwapScreen->inEnemyScreen) { - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenMenu) >> 0x10; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenMenu); - gTasks[taskId].data[5] = 2; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleMenu) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleMenu); + gTasks[taskId].tFollowUpTaskState = 2; } else if (Swap_AlreadyHasSameSpecies(sFactorySwapScreen->cursorPos) == TRUE) { - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = Task_SwapCantHaveSameMons; + OpenMonPic(&sFactorySwapScreen->monPic.bgSpriteId, &sFactorySwapScreen->monPicAnimating, TRUE); + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskState = 1; + gTasks[taskId].func = Swap_TaskCantHaveSameMons; return; } else { - gTasks[taskId].data[6] = (u32)(sub_819CCD4) >> 0x10; - gTasks[taskId].data[7] = (u32)(sub_819CCD4); - gTasks[taskId].data[5] = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_AskAcceptMon) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_AskAcceptMon); + gTasks[taskId].tFollowUpTaskState = 0; } - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; gTasks[taskId].func = sub_819D588; } -static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen) +#define sIsSwapScreen data[7] + +static void OpenMonPic(u8 *spriteId, bool8 *animating, bool8 swapScreen) { - *arg0 = CreateSprite(&sSpriteTemplate_Swap_MonPicBgAnim, 120, 64, 1); - gSprites[*arg0].callback = SpriteCB_OpenMonPic; - gSprites[*arg0].data[7] = swapScreen; - *arg1 = TRUE; + *spriteId = CreateSprite(&sSpriteTemplate_Swap_MonPicBgAnim, 120, 64, 1); + gSprites[*spriteId].callback = SpriteCB_OpenMonPic; + gSprites[*spriteId].sIsSwapScreen = swapScreen; + *animating = TRUE; } static void Swap_ShowSummaryMonSprite(void) @@ -3887,86 +3927,79 @@ static void Swap_ShowSummaryMonSprite(void) u16 species; u32 personality, otId; - sFactorySwapScreen->unk2C.field1 = CreateSprite(&sSpriteTemplate_Swap_MonPicBgAnim, 120, 64, 1); - StartSpriteAffineAnim(&gSprites[sFactorySwapScreen->unk2C.field1], 2); + sFactorySwapScreen->monPic.bgSpriteId = CreateSprite(&sSpriteTemplate_Swap_MonPicBgAnim, 120, 64, 1); + StartSpriteAffineAnim(&gSprites[sFactorySwapScreen->monPic.bgSpriteId], 2); mon = &gPlayerParty[sFactorySwapScreen->cursorPos]; species = GetMonData(mon, MON_DATA_SPECIES, NULL); personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, personality, otId, TRUE, 88, 32, 15, 0xFFFF); // BUG: otId and personality should be switched. - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecY = 0; + sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite_HandleDeoxys(species, personality, otId, TRUE, 88, 32, 15, 0xFFFF); // BUG: otId and personality should be switched. + gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unk2C.field1].invisible = TRUE; + gSprites[sFactorySwapScreen->monPic.bgSpriteId].invisible = TRUE; } -#define tState data[0] -#define tWinLeft data[3] -#define tWinRight data[24] // UB: Copied typo? Should be data[4], 24 is out of bounds -#define tWinTop data[5] -#define tWinBottom data[8] -#define tIsSwapScreen data[7] - -static void CloseMonPic(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen) +static void CloseMonPic(struct FactoryMonPic pic, bool8 *animating, bool8 swapScreen) { u8 taskId; - FreeAndDestroyMonPicSprite(arg0.field0); + FreeAndDestroyMonPicSprite(pic.monSpriteId); taskId = CreateTask(Task_CloseMonPic, 1); gTasks[taskId].tIsSwapScreen = swapScreen; - gTasks[taskId].data[6] = arg0.field1; + gTasks[taskId].tSpriteId = pic.bgSpriteId; gTasks[taskId].func(taskId); - *arg1 = TRUE; + *animating = TRUE; } -static void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1) +static void HideMonPic(struct FactoryMonPic pic, bool8 *animating) { - FreeAndDestroyMonPicSprite(arg0.field0); - FreeOamMatrix(gSprites[arg0.field1].oam.matrixNum); - DestroySprite(&gSprites[arg0.field1]); - *arg1 = FALSE; + FreeAndDestroyMonPicSprite(pic.monSpriteId); + FreeOamMatrix(gSprites[pic.bgSpriteId].oam.matrixNum); + DestroySprite(&gSprites[pic.bgSpriteId]); + *animating = FALSE; } -static void Task_SwapCantHaveSameMons(u8 taskId) +static void Swap_TaskCantHaveSameMons(u8 taskId) { - if (sFactorySwapScreen->unk30 == TRUE) + if (sFactorySwapScreen->monPicAnimating == TRUE) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: Swap_PrintOnInfoWindow(gText_SamePkmnInPartyAlready); sFactorySwapScreen->monSwapped = FALSE; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 1: - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - CloseMonPic(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - gTasks[taskId].data[0]++; + CloseMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating, TRUE); + gTasks[taskId].tState++; } break; case 2: - if (sFactorySwapScreen->unk30 != TRUE) + if (sFactorySwapScreen->monPicAnimating != TRUE) { - FillWindowPixelBuffer(5, PIXEL_FILL(0)); - CopyWindowToVram(5, 2); - gTasks[taskId].data[0]++; + FillWindowPixelBuffer(SWAP_WIN_5, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_5, 2); + gTasks[taskId].tState++; } break; case 3: Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 4: Swap_PrintMonSpecies3(); sub_819EADC(); - sFactorySwapScreen->unk22 = TRUE; - gTasks[taskId].data[0] = gTasks[taskId].data[5]; - gTasks[taskId].func = Task_HandleSwapScreenChooseMons; + sFactorySwapScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = gTasks[taskId].tFollowUpTaskState; + gTasks[taskId].func = Swap_Task_HandleChooseMons; break; } } @@ -3992,7 +4025,7 @@ static void SpriteCB_OpenMonPic(struct Sprite *sprite) { sprite->invisible = TRUE; taskId = CreateTask(Task_OpenMonPic, 1); - gTasks[taskId].tIsSwapScreen = sprite->data[7]; + gTasks[taskId].tIsSwapScreen = sprite->sIsSwapScreen; gTasks[taskId].func(taskId); sprite->callback = SpriteCallbackDummy; } @@ -4003,10 +4036,10 @@ static void sub_819F654(struct Sprite *sprite) if (sprite->affineAnimEnded) { FreeOamMatrix(sprite->oam.matrixNum); - if (sprite->data[7] == TRUE) - sFactorySwapScreen->unk30 = FALSE; + if (sprite->sIsSwapScreen == TRUE) + sFactorySwapScreen->monPicAnimating = FALSE; else - sub_819BE20(FALSE); + Select_SetMonPicAnimating(FALSE); DestroySprite(sprite); } } @@ -4014,16 +4047,16 @@ static void sub_819F654(struct Sprite *sprite) static void Task_OpenMonPic(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: task->tWinLeft = 88; - task->tWinRight = 152; // BUG: writing outside the array's bounds. - task->data[5] = 64; - task->data[8] = 65; + task->tWinRight = DISPLAY_WIDTH - 88; + task->tWinTop = 64; + task->tWinBottom = 65; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); break; @@ -4033,15 +4066,15 @@ static void Task_OpenMonPic(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); break; case 2: - task->data[5] -= 4; - task->data[8] += 4; - if (task->data[5] <= 32 || task->data[8] >= 96) + task->tWinTop -= 4; + task->tWinBottom += 4; + if (task->tWinTop <= 32 || task->tWinBottom >= 96) { - task->data[5] = 32; - task->data[8] = 96; + task->tWinTop = 32; + task->tWinBottom = 96; } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] != 32) + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + if (task->tWinTop != 32) return; break; default: @@ -4050,10 +4083,10 @@ static void Task_OpenMonPic(u8 taskId) if (gTasks[taskId].tIsSwapScreen == TRUE) Swap_CreateMonSprite(); else - Summary_CreateMonSprite(); + Select_CreateMonSprite(); return; } - task->data[0]++; + task->tState++; } static void Task_CloseMonPic(u8 taskId) @@ -4063,36 +4096,36 @@ static void Task_CloseMonPic(u8 taskId) { default: HideBg(3); - gSprites[task->data[6]].data[7] = task->tIsSwapScreen; - gSprites[task->data[6]].invisible = FALSE; - gSprites[task->data[6]].callback = sub_819F654; - StartSpriteAffineAnim(&gSprites[task->data[6]], 1); + gSprites[task->tSpriteId].sIsSwapScreen = task->tIsSwapScreen; + gSprites[task->tSpriteId].invisible = FALSE; + gSprites[task->tSpriteId].callback = sub_819F654; + StartSpriteAffineAnim(&gSprites[task->tSpriteId], 1); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); DestroyTask(taskId); break; case 0: task->tWinLeft = 88; - task->tWinRight = 152; - task->data[5] = 32; - task->data[8] = 96; + task->tWinRight = DISPLAY_WIDTH - 88; + task->tWinTop = 32; + task->tWinBottom = 96; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); - task->data[0]++; + task->tState++; break; case 1: - task->data[5] += 4; - task->data[8] -= 4; - if (task->data[5] >= 64 || task->data[8] <= 65) + task->tWinTop += 4; + task->tWinBottom -= 4; + if (task->tWinTop >= 64 || task->tWinBottom <= 65) { - task->data[5] = 64; - task->data[8] = 65; + task->tWinTop = 64; + task->tWinBottom = 65; } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] == 64) - task->data[0]++; + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + if (task->tWinTop == 64) + task->tState++; break; } } @@ -4112,9 +4145,9 @@ static void Swap_CreateMonSprite(void) personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecY = 0; + sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecY = 0; - sFactorySwapScreen->unk30 = FALSE; + sFactorySwapScreen->monPicAnimating = FALSE; } From 7ae78dc7738168bebb74c1ac43f600d1fb3688ea Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 30 Dec 2020 17:35:33 -0500 Subject: [PATCH 149/177] Finish factory select screen doc --- src/battle_factory_screen.c | 289 +++++++++++++++++++++--------------- 1 file changed, 168 insertions(+), 121 deletions(-) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 13edf6fef9..0fc578b3f7 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -43,21 +43,25 @@ #define SELECTABLE_MONS_COUNT 6 -#define PALTAG_BALL_GRAY 0x64 -#define PALTAG_BALL_SELECTED 0x65 -#define PALTAG_INTERFACE 0x66 -#define PALTAG_MON_PIC_BG 0x67 +enum { + PALTAG_BALL_GRAY = 100, + PALTAG_BALL_SELECTED, + PALTAG_INTERFACE, + PALTAG_MON_PIC_BG, +}; -#define GFXTAG_BALL 0x64 -#define GFXTAG_ARROW 0x65 -#define GFXTAG_MENU_HIGHLIGHT_LEFT 0x66 -#define GFXTAG_MENU_HIGHLIGHT_RIGHT 0x67 -#define GFXTAG_ACTION_BOX_LEFT 0x68 -#define GFXTAG_ACTION_BOX_RIGHT 0x69 -#define GFXTAG_ACTION_HIGHLIGHT_LEFT 0x6A -#define GFXTAG_ACTION_HIGHLIGHT_MIDDLE 0x6B -#define GFXTAG_ACTION_HIGHLIGHT_RIGHT 0x6C -#define GFXTAG_MON_PIC_BG_ANIM 0x6D +enum { + GFXTAG_BALL = 100, + GFXTAG_ARROW, + GFXTAG_MENU_HIGHLIGHT_LEFT, + GFXTAG_MENU_HIGHLIGHT_RIGHT, + GFXTAG_ACTION_BOX_LEFT, + GFXTAG_ACTION_BOX_RIGHT, + GFXTAG_ACTION_HIGHLIGHT_LEFT, + GFXTAG_ACTION_HIGHLIGHT_MIDDLE, + GFXTAG_ACTION_HIGHLIGHT_RIGHT, + GFXTAG_MON_PIC_BG_ANIM, +}; // Tasks in this file universally use data[0] as a state for switches #define tState data[0] @@ -69,6 +73,14 @@ enum { FADESTATE_DELAY }; +// Return states for the Select Actions +enum { + SELECT_SUMMARY, + SELECT_CONTINUE_CHOOSING, + SELECT_CONFIRM_MONS, + SELECT_INVALID_MON, +}; + struct FactorySelectableMon { u16 monId; @@ -129,7 +141,7 @@ struct FactorySwapScreen u8 yesNoCursorPos; u8 actionsCount; const struct SwapScreenAction *actionsData; - u8 unused1C[4]; + u8 unused[4]; bool8 monSwapped; u8 fadeSpeciesNameTaskId; bool8 fadeSpeciesNameActive; @@ -161,22 +173,22 @@ static void Select_PrintMonSpecies(void); static void Select_PrintMonCategory(void); static void Select_PrintRentalPkmnString(void); static void Select_CopyMonsToPlayerParty(void); -static void sub_819C4B4(void); +static void Select_ShowChosenMons(void); static void Select_ShowYesNoOptions(void); -static void sub_819C568(void); +static void Select_HideChosenMons(void); static void Select_ShowMenuOptions(void); static void Select_PrintMenuOptions(void); static void Select_PrintYesNoOptions(void); static void Select_Task_FadeSpeciesName(u8); -static void sub_819C1D0(u8); +static void Select_Task_OpenChosenMonPics(u8); static void Select_Task_HandleChooseMons(u8); static void Select_Task_HandleMenu(u8); static void CreateFrontierFactorySelectableMons(u8); static void CreateSlateportTentSelectableMons(u8); static void Select_SetBallSpritePaletteNum(u8); -static void sub_819B958(u8); +static void Select_ErasePopupMenu(u8); static u8 Select_RunMenuOptionFunc(void); -static u8 sub_819BC9C(void); +static u8 Select_DeclineChosenMons(void); static u8 Select_OptionSummary(void); static u8 Select_OptionOthers(void); static u8 Select_OptionRentDeselect(void); @@ -226,7 +238,6 @@ static void Swap_ActionMon(u8); static void Swap_ActionCancel(u8); static void Swap_ActionPkmnForSwap(u8); -// Ewram variables static EWRAM_DATA u8 *sSelectMenuTilesetBuffer = NULL; static EWRAM_DATA u8 *sSelectMonPicBgTilesetBuffer = NULL; static EWRAM_DATA u8 *sSelectMenuTilemapBuffer = NULL; @@ -1092,6 +1103,26 @@ void DoBattleFactorySelectScreen(void) SetMainCallback2(CB2_InitSelectScreen); } +// States for the main tasks of the Select_ functions after initialization, including: +// Select_Task_OpenSummaryScreen, Select_Task_HandleYesNo, Select_Task_HandleMenu, and Select_Task_HandleChooseMons +// Unnecessarily complicated, could easily have just kept states numbered in each task always starting at 0 +// There's only one instance (Select_Task_HandleChooseMons) where a non-initial case is used +// Select_Task_Exit has its own straightforward states +#define STATE_CHOOSE_MONS_INIT 0 +#define STATE_CHOOSE_MONS_HANDLE_INPUT 1 +#define STATE_MENU_INIT 2 +#define STATE_MENU_HANDLE_INPUT 3 +#define STATE_YESNO_SHOW_OPTIONS 4 +#define STATE_YESNO_HANDLE_INPUT 5 +#define STATE_SUMMARY_FADE 6 +#define STATE_SUMMARY_CLEAN 7 +#define STATE_SUMMARY_SHOW 8 +#define STATE_MENU_SHOW_OPTIONS 9 +#define STATE_YESNO_SHOW_MONS 10 +#define STATE_CHOOSE_MONS_INVALID 11 +#define STATE_MENU_REINIT 12 +#define STATE_MENU_RESHOW 13 + static void CB2_InitSelectScreen(void) { u8 taskId; @@ -1217,14 +1248,14 @@ static void CB2_InitSelectScreen(void) { gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = 0; taskId = CreateTask(Select_Task_HandleChooseMons, 0); - gTasks[taskId].tState = 0; + gTasks[taskId].tState = STATE_CHOOSE_MONS_INIT; } else { gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = 1; sFactorySelectScreen->fadeSpeciesNameActive = FALSE; taskId = CreateTask(Select_Task_HandleMenu, 0); - gTasks[taskId].tState = 13; + gTasks[taskId].tState = STATE_MENU_RESHOW; } SetMainCallback2(CB2_SelectScreen); break; @@ -1360,11 +1391,12 @@ static void Select_HandleMonSelectionChange(void) if (sFactorySelectScreen->mons[cursorPos].selectedId) // Deselect a mon. { paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY); - if (sFactorySelectScreen->selectingMonsState == 3 && sFactorySelectScreen->mons[cursorPos].selectedId == 1) + if (sFactorySelectScreen->selectingMonsState == FRONTIER_PARTY_SIZE + && sFactorySelectScreen->mons[cursorPos].selectedId == 1) { for (i = 0; i < SELECTABLE_MONS_COUNT; i++) { - if (sFactorySelectScreen->mons[i].selectedId == 2) + if (sFactorySelectScreen->mons[i].selectedId == FRONTIER_PARTY_SIZE - 1) break; } if (i == SELECTABLE_MONS_COUNT) @@ -1404,12 +1436,12 @@ static void Select_Task_OpenSummaryScreen(u8 taskId) switch (gTasks[taskId].tState) { - case 6: + case STATE_SUMMARY_FADE: gPlttBufferUnfaded[228] = gPlttBufferFaded[228]; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gTasks[taskId].tState = 7; + gTasks[taskId].tState = STATE_SUMMARY_CLEAN; break; - case 7: + case STATE_SUMMARY_CLEAN: if (!gPaletteFade.active) { DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); @@ -1420,10 +1452,10 @@ static void Select_Task_OpenSummaryScreen(u8 taskId) FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); FREE_AND_SET_NULL(sSelectMonPicBgTilemapBuffer); FreeAllWindowBuffers(); - gTasks[taskId].tState = 8; + gTasks[taskId].tState = STATE_SUMMARY_SHOW; } break; - case 8: + case STATE_SUMMARY_SHOW: sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[228]; DestroyTask(taskId); sFactorySelectScreen->fromSummaryScreen = TRUE; @@ -1465,6 +1497,7 @@ static void Select_Task_Exit(u8 taskId) } } +// Handles the Yes/No prompt when confirming the 3 selected rental pokemon static void Select_Task_HandleYesNo(u8 taskId) { if (sFactorySelectScreen->monPicAnimating == TRUE) @@ -1472,42 +1505,43 @@ static void Select_Task_HandleYesNo(u8 taskId) switch (gTasks[taskId].tState) { - case 10: - sub_819C4B4(); - gTasks[taskId].tState = 4; + case STATE_YESNO_SHOW_MONS: + Select_ShowChosenMons(); + gTasks[taskId].tState = STATE_YESNO_SHOW_OPTIONS; break; - case 4: + case STATE_YESNO_SHOW_OPTIONS: Select_ShowYesNoOptions(); - gTasks[taskId].tState = 5; + gTasks[taskId].tState = STATE_YESNO_HANDLE_INPUT; break; - case 5: + case STATE_YESNO_HANDLE_INPUT: if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if (sFactorySelectScreen->yesNoCursorPos == 0) { - // Selected Yes - sub_819C568(); + // Selected Yes, confirmed selected pokemon + Select_HideChosenMons(); gTasks[taskId].tState = 0; gTasks[taskId].func = Select_Task_Exit; } else { - // Selected No - sub_819B958(SELECT_WIN_YES_NO); - sub_819BC9C(); + // Selected No, continue choosing pokemon + Select_ErasePopupMenu(SELECT_WIN_YES_NO); + Select_DeclineChosenMons(); sFactorySelectScreen->fadeSpeciesNameActive = TRUE; - gTasks[taskId].tState = 1; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; gTasks[taskId].func = Select_Task_HandleChooseMons; } } else if (JOY_NEW(B_BUTTON)) { + // Pressed B, Continue choosing pokemon PlaySE(SE_SELECT); - sub_819B958(SELECT_WIN_YES_NO); - sub_819BC9C(); + Select_ErasePopupMenu(SELECT_WIN_YES_NO); + Select_DeclineChosenMons(); sFactorySelectScreen->fadeSpeciesNameActive = TRUE; - gTasks[taskId].tState = 1; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; gTasks[taskId].func = Select_Task_HandleChooseMons; } else if (JOY_REPEAT(DPAD_UP)) @@ -1524,48 +1558,49 @@ static void Select_Task_HandleYesNo(u8 taskId) } } +// Handles the popup menu that shows when a pokemon is selected static void Select_Task_HandleMenu(u8 taskId) { switch (gTasks[taskId].tState) { - case 2: + case STATE_MENU_INIT: if (!sFactorySelectScreen->fromSummaryScreen) OpenMonPic(&sFactorySelectScreen->monPics[1].bgSpriteId, &sFactorySelectScreen->monPicAnimating, FALSE); - gTasks[taskId].tState = 9; + gTasks[taskId].tState = STATE_MENU_SHOW_OPTIONS; break; - case 9: + case STATE_MENU_SHOW_OPTIONS: if (sFactorySelectScreen->monPicAnimating != TRUE) { Select_ShowMenuOptions(); sFactorySelectScreen->fromSummaryScreen = FALSE; - gTasks[taskId].tState = 3; + gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT; } break; - case 3: + case STATE_MENU_HANDLE_INPUT: if (JOY_NEW(A_BUTTON)) { u8 retVal; PlaySE(SE_SELECT); retVal = Select_RunMenuOptionFunc(); - if (retVal == 1) + if (retVal == SELECT_CONTINUE_CHOOSING) { sFactorySelectScreen->fadeSpeciesNameActive = TRUE; - gTasks[taskId].tState = 1; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; gTasks[taskId].func = Select_Task_HandleChooseMons; } - else if (retVal == 2) + else if (retVal == SELECT_CONFIRM_MONS) { - gTasks[taskId].tState = 10; + gTasks[taskId].tState = STATE_YESNO_SHOW_MONS; gTasks[taskId].func = Select_Task_HandleYesNo; } - else if (retVal == 3) + else if (retVal == SELECT_INVALID_MON) { - gTasks[taskId].tState = 11; + gTasks[taskId].tState = STATE_CHOOSE_MONS_INVALID; gTasks[taskId].func = Select_Task_HandleChooseMons; } - else + else // SELECT_SUMMARY { - gTasks[taskId].tState = 6; + gTasks[taskId].tState = STATE_SUMMARY_FADE; gTasks[taskId].func = Select_Task_OpenSummaryScreen; } } @@ -1573,9 +1608,9 @@ static void Select_Task_HandleMenu(u8 taskId) { PlaySE(SE_SELECT); CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); - sub_819B958(SELECT_WIN_OPTIONS); + Select_ErasePopupMenu(SELECT_WIN_OPTIONS); sFactorySelectScreen->fadeSpeciesNameActive = TRUE; - gTasks[taskId].tState = 1; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; gTasks[taskId].func = Select_Task_HandleChooseMons; } else if (JOY_REPEAT(DPAD_UP)) @@ -1589,7 +1624,7 @@ static void Select_Task_HandleMenu(u8 taskId) Select_UpdateMenuCursorPosition(1); } break; - case 12: + case STATE_MENU_REINIT: if (!gPaletteFade.active) { if (sFactorySelectScreen->fromSummaryScreen == TRUE) @@ -1598,16 +1633,17 @@ static void Select_Task_HandleMenu(u8 taskId) gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; } sFactorySelectScreen->fromSummaryScreen = FALSE; - gTasks[taskId].tState = 3; + gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT; } break; - case 13: + case STATE_MENU_RESHOW: Select_ShowMenuOptions(); - gTasks[taskId].tState = 12; + gTasks[taskId].tState = STATE_MENU_REINIT; break; } } +// Handles input on the main selection screen, when no popup menu is open static void Select_Task_HandleChooseMons(u8 taskId) { if (sFactorySelectScreen->monPicAnimating == TRUE) @@ -1615,19 +1651,19 @@ static void Select_Task_HandleChooseMons(u8 taskId) switch (gTasks[taskId].tState) { - case 0: + case STATE_CHOOSE_MONS_INIT: if (!gPaletteFade.active) { - gTasks[taskId].tState = 1; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; sFactorySelectScreen->fadeSpeciesNameActive = TRUE; } break; - case 1: + case STATE_CHOOSE_MONS_HANDLE_INPUT: if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); sFactorySelectScreen->fadeSpeciesNameActive = FALSE; - gTasks[taskId].tState = 2; + gTasks[taskId].tState = STATE_MENU_INIT; gTasks[taskId].func = Select_Task_HandleMenu; } else if (JOY_REPEAT(DPAD_LEFT)) @@ -1645,14 +1681,14 @@ static void Select_Task_HandleChooseMons(u8 taskId) Select_PrintMonSpecies(); } break; - case 11: + case STATE_CHOOSE_MONS_INVALID: if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); Select_PrintSelectMonString(); sFactorySelectScreen->fadeSpeciesNameActive = TRUE; - gTasks[taskId].tState = 1; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; } break; } @@ -1785,7 +1821,7 @@ static void Select_ShowYesNoOptions(void) Select_PrintYesNoOptions(); } -static void sub_819B958(u8 windowId) +static void Select_ErasePopupMenu(u8 windowId) { gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = TRUE; gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = TRUE; @@ -1878,29 +1914,29 @@ static u8 Select_OptionRentDeselect(void) if (selectedId == 0 && !Select_AreSpeciesValid(monId)) { Select_PrintCantSelectSameMon(); - sub_819B958(SELECT_WIN_OPTIONS); - return 3; + Select_ErasePopupMenu(SELECT_WIN_OPTIONS); + return SELECT_INVALID_MON; } else { CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); Select_HandleMonSelectionChange(); Select_PrintSelectMonString(); - sub_819B958(SELECT_WIN_OPTIONS); - if (sFactorySelectScreen->selectingMonsState > 3) - return 2; + Select_ErasePopupMenu(SELECT_WIN_OPTIONS); + if (sFactorySelectScreen->selectingMonsState > FRONTIER_PARTY_SIZE) + return SELECT_CONFIRM_MONS; else - return 1; + return SELECT_CONTINUE_CHOOSING; } } -static u8 sub_819BC9C(void) +static u8 Select_DeclineChosenMons(void) { - sub_819C568(); + Select_HideChosenMons(); Select_HandleMonSelectionChange(); Select_PrintSelectMonString(); - sub_819B958(SELECT_WIN_OPTIONS); - if (sFactorySelectScreen->selectingMonsState > 3) + Select_ErasePopupMenu(SELECT_WIN_OPTIONS); + if (sFactorySelectScreen->selectingMonsState > FRONTIER_PARTY_SIZE) return 2; else return 1; @@ -1908,14 +1944,14 @@ static u8 sub_819BC9C(void) static u8 Select_OptionSummary(void) { - return 0; + return SELECT_SUMMARY; } static u8 Select_OptionOthers(void) { CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); - sub_819B958(SELECT_WIN_OPTIONS); - return 1; + Select_ErasePopupMenu(SELECT_WIN_OPTIONS); + return SELECT_CONTINUE_CHOOSING; } static void Select_PrintMonCategory(void) @@ -1977,7 +2013,7 @@ static void Select_ReshowMonSprite(void) gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].invisible = TRUE; } -static void Select_ShowChosenMonsSprites(void) +static void Select_CreateChosenMonsSprites(void) { u8 i, j; @@ -2002,10 +2038,11 @@ static void Select_ShowChosenMonsSprites(void) sFactorySelectScreen->monPicAnimating = FALSE; } -static void sub_819C040(struct Sprite *sprite) +static void SpriteCB_OpenChosenMonPics(struct Sprite *sprite) { u8 taskId; + // Current sprite is monPics[1] if (sprite->affineAnimEnded && gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].affineAnimEnded && gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].affineAnimEnded) @@ -2014,15 +2051,16 @@ static void sub_819C040(struct Sprite *sprite) gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].invisible = TRUE; gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].invisible = TRUE; - taskId = CreateTask(sub_819C1D0, 1); + taskId = CreateTask(Select_Task_OpenChosenMonPics, 1); gTasks[taskId].func(taskId); sprite->callback = SpriteCallbackDummy; } } -static void sub_819C100(struct Sprite *sprite) +static void SpriteCB_CloseChosenMonPics(struct Sprite *sprite) { + // Current sprite is monPics[1] if (sprite->affineAnimEnded && gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].affineAnimEnded && gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].affineAnimEnded) @@ -2039,7 +2077,7 @@ static void sub_819C100(struct Sprite *sprite) } } -// Task data for sub_819C1D0, sub_819C2D4, Task_CloseMonPic, and Task_OpenMonPic +// Task data for Select_Task_OpenChosenMonPics, Select_Task_CloseChosenMonPics, Task_CloseMonPic, and Task_OpenMonPic #define tWinLeft data[3] #ifndef UBFIX #define tWinRight data[24] // UB: Typo? Likely meant data[4], 24 is out of bounds @@ -2051,7 +2089,7 @@ static void sub_819C100(struct Sprite *sprite) #define tSpriteId data[6] // TODO: Clarify, what sprite #define tIsSwapScreen data[7] -static void sub_819C1D0(u8 taskId) +static void Select_Task_OpenChosenMonPics(u8 taskId) { struct Task *task = &gTasks[taskId]; switch (task->tState) @@ -2087,31 +2125,17 @@ static void sub_819C1D0(u8 taskId) break; default: DestroyTask(taskId); - Select_ShowChosenMonsSprites(); + Select_CreateChosenMonsSprites(); return; } task->tState++; } -static void sub_819C2D4(u8 taskId) +static void Select_Task_CloseChosenMonPics(u8 taskId) { struct Task *task = &gTasks[taskId]; switch (task->tState) { - default: - HideBg(3); - gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].invisible = FALSE; - gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = sub_819C100; - gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].invisible = FALSE; - gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].callback = SpriteCallbackDummy; - gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].invisible = FALSE; - gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].callback = SpriteCallbackDummy; - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[1].bgSpriteId], 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[0].bgSpriteId], 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[2].bgSpriteId], 1); - ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - DestroyTask(taskId); - break; case 0: task->tWinLeft = 16; task->tWinRight = DISPLAY_WIDTH - 16; @@ -2136,23 +2160,37 @@ static void sub_819C2D4(u8 taskId) if (task->tWinTop == 64) task->tState++; break; + default: + HideBg(3); + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = SpriteCB_CloseChosenMonPics; + gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].callback = SpriteCallbackDummy; + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[1].bgSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[0].bgSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[2].bgSpriteId], 1); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + break; } } -static void sub_819C4B4(void) +static void Select_ShowChosenMons(void) { sFactorySelectScreen->monPics[1].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 120, 64, 1); sFactorySelectScreen->monPics[0].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 44, 64, 1); sFactorySelectScreen->monPics[2].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 196, 64, 1); - gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = sub_819C040; + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = SpriteCB_OpenChosenMonPics; gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].callback = SpriteCallbackDummy; gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].callback = SpriteCallbackDummy; sFactorySelectScreen->monPicAnimating = TRUE; } -static void sub_819C568(void) +static void Select_HideChosenMons(void) { u8 taskId; @@ -2160,7 +2198,7 @@ static void sub_819C568(void) FreeAndDestroyMonPicSprite(sFactorySelectScreen->monPics[1].monSpriteId); FreeAndDestroyMonPicSprite(sFactorySelectScreen->monPics[2].monSpriteId); - taskId = CreateTask(sub_819C2D4, 1); + taskId = CreateTask(Select_Task_CloseChosenMonPics, 1); gTasks[taskId].func(taskId); sFactorySelectScreen->monPicAnimating = TRUE; @@ -2194,7 +2232,6 @@ static bool32 Select_AreSpeciesValid(u16 monId) } } } - return TRUE; } @@ -2494,6 +2531,9 @@ static void Swap_AskAcceptMon(u8 taskId) } } +#undef STATE_SHOW_YES_NO +#undef STATE_HANDLE_INPUT + static void Swap_Task_HandleMenu(u8 taskId) { switch (gTasks[taskId].tState) @@ -2688,6 +2728,7 @@ static void Swap_Task_FadeSpeciesName2(u8 taskId) } } +// TODO static void sub_819D12C(u8 taskId) { s8 i; @@ -4031,7 +4072,7 @@ static void SpriteCB_OpenMonPic(struct Sprite *sprite) } } -static void sub_819F654(struct Sprite *sprite) +static void SpriteCB_CloseMonPic(struct Sprite *sprite) { if (sprite->affineAnimEnded) { @@ -4050,6 +4091,7 @@ static void Task_OpenMonPic(u8 taskId) switch (task->tState) { case 0: + // Init task->tWinLeft = 88; task->tWinRight = DISPLAY_WIDTH - 88; task->tWinTop = 64; @@ -4061,11 +4103,13 @@ static void Task_OpenMonPic(u8 taskId) SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); break; case 1: + // Show mon pic bg ShowBg(3); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); break; case 2: + // Animate mon pic bg task->tWinTop -= 4; task->tWinBottom += 4; if (task->tWinTop <= 32 || task->tWinBottom >= 96) @@ -4094,16 +4138,8 @@ static void Task_CloseMonPic(u8 taskId) struct Task *task = &gTasks[taskId]; switch (task->tState) { - default: - HideBg(3); - gSprites[task->tSpriteId].sIsSwapScreen = task->tIsSwapScreen; - gSprites[task->tSpriteId].invisible = FALSE; - gSprites[task->tSpriteId].callback = sub_819F654; - StartSpriteAffineAnim(&gSprites[task->tSpriteId], 1); - ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - DestroyTask(taskId); - break; case 0: + // Init task->tWinLeft = 88; task->tWinRight = DISPLAY_WIDTH - 88; task->tWinTop = 32; @@ -4116,6 +4152,7 @@ static void Task_CloseMonPic(u8 taskId) task->tState++; break; case 1: + // Animate bg task->tWinTop += 4; task->tWinBottom -= 4; if (task->tWinTop >= 64 || task->tWinBottom <= 65) @@ -4127,6 +4164,16 @@ static void Task_CloseMonPic(u8 taskId) if (task->tWinTop == 64) task->tState++; break; + default: + // Hide bg + HideBg(3); + gSprites[task->tSpriteId].sIsSwapScreen = task->tIsSwapScreen; + gSprites[task->tSpriteId].invisible = FALSE; + gSprites[task->tSpriteId].callback = SpriteCB_CloseMonPic; + StartSpriteAffineAnim(&gSprites[task->tSpriteId], 1); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + break; } } From ef7832a55cbf8ef0262ba63400afcf5648e8b0be Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Wed, 30 Dec 2020 17:36:53 -0800 Subject: [PATCH 150/177] Change how mon affine transform fix is handled --- src/pokeball.c | 5 +++++ src/pokemon_animation.c | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pokeball.c b/src/pokeball.c index 92081a296e..916c86287f 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1133,6 +1133,11 @@ static void sub_80767D4(struct Sprite *sprite) AnimateBallOpenParticlesForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6); sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5); sprite->callback = sub_807687C; +#ifdef BUGFIX + // FIX: If this is used on a sprite that has previously had an affine animation, it will not + // play the shrink anim properly due to being paused. Works together with the fix to `sub_817F77C`. + gSprites[r7].affineAnimPaused = FALSE; +#endif // BUGFIX StartSpriteAffineAnim(&gSprites[r7], 2); AnimateSprite(&gSprites[r7]); gSprites[r7].data[1] = 0; diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 58c1742635..c4077aff46 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -1046,7 +1046,6 @@ static void sub_817F77C(struct Sprite *sprite) { // FIX: Reset these back to normal after they were changed so Poké Ball catch/release // animations without a screen transition in between don't break - sprite->affineAnimPaused = FALSE; sprite->affineAnims = gUnknown_082FF694; } #endif // BUGFIX From 093610b46e99b517a416ccd5a572054dff09801b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 31 Dec 2020 00:26:14 -0500 Subject: [PATCH 151/177] Finish factory swap screen doc --- src/battle_factory_screen.c | 511 +++++++++++++++++++++--------------- 1 file changed, 295 insertions(+), 216 deletions(-) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 0fc578b3f7..9e0df2c77e 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -199,25 +199,25 @@ static void CB2_InitSwapScreen(void); static void Swap_DestroyAllSprites(void); static void Swap_ShowYesNoOptions(void); static void Swap_HideActionButtonHighlights(void); -static void sub_819EAC0(void); +static void Swap_EraseSpeciesWindow(void); static void Swap_UpdateYesNoCursorPosition(s8); static void Swap_UpdateMenuCursorPosition(s8); static void Swap_ErasePopupMenu(u8); -static void sub_819D770(u8); +static void Swap_Task_ScreenInfoTransitionIn(u8); static void Swap_Task_HandleChooseMons(u8); -static void sub_819D588(u8); +static void Swap_Task_ScreenInfoTransitionOut(u8); static void Swap_PrintOnInfoWindow(const u8 *); static void Swap_ShowMenuOptions(void); static void Swap_PrintMenuOptions(void); static void Swap_PrintYesNoOptions(void); static void Swap_PrintMonSpecies(void); -static void Swap_PrintMonSpecies2(void); -static void Swap_PrintMonSpecies3(void); +static void Swap_PrintMonSpeciesAtFade(void); +static void Swap_PrintMonSpeciesForTransition(void); static void Swap_PrintMonCategory(void); static void Swap_InitAllSprites(void); static void Swap_PrintPkmnSwap(void); -static void sub_819EADC(void); -static void sub_819EAF8(void); +static void Swap_EraseSpeciesAtFadeWindow(void); +static void Swap_EraseActionFadeWindow(void); static void Swap_ShowSummaryMonSprite(void); static void Swap_UpdateActionCursorPosition(s8); static void Swap_UpdateBallCursorPosition(s8); @@ -931,9 +931,9 @@ enum { SWAP_WIN_INFO, SWAP_WIN_OPTIONS, SWAP_WIN_YES_NO, - SWAP_WIN_5, - SWAP_WIN_6, - SWAP_WIN_7, + SWAP_WIN_ACTION_FADE, // Used for action text fading out during screen transition + SWAP_WIN_UNUSED, + SWAP_WIN_SPECIES_AT_FADE, // Used to print species name stopped at current fade level SWAP_WIN_MON_CATEGORY, }; @@ -984,7 +984,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x00a1, }, - [SWAP_WIN_5] = { + [SWAP_WIN_ACTION_FADE] = { .bg = 2, .tilemapLeft = 21, .tilemapTop = 15, @@ -993,7 +993,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 14, .baseBlock = 0x006b, }, - [SWAP_WIN_6] = { + [SWAP_WIN_UNUSED] = { .bg = 2, .tilemapLeft = 10, .tilemapTop = 2, @@ -1002,7 +1002,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 14, .baseBlock = 0x00c1, }, - [SWAP_WIN_7] = { + [SWAP_WIN_SPECIES_AT_FADE] = { .bg = 0, .tilemapLeft = 19, .tilemapTop = 2, @@ -1103,6 +1103,7 @@ void DoBattleFactorySelectScreen(void) SetMainCallback2(CB2_InitSelectScreen); } +// Main select states // States for the main tasks of the Select_ functions after initialization, including: // Select_Task_OpenSummaryScreen, Select_Task_HandleYesNo, Select_Task_HandleMenu, and Select_Task_HandleChooseMons // Unnecessarily complicated, could easily have just kept states numbered in each task always starting at 0 @@ -1246,13 +1247,13 @@ static void CB2_InitSelectScreen(void) sFactorySelectScreen->fadeSpeciesNameTaskId = CreateTask(Select_Task_FadeSpeciesName, 0); if (!sFactorySelectScreen->fromSummaryScreen) { - gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = 0; + gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = FADESTATE_INIT; taskId = CreateTask(Select_Task_HandleChooseMons, 0); gTasks[taskId].tState = STATE_CHOOSE_MONS_INIT; } else { - gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = 1; + gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = FADESTATE_RUN; sFactorySelectScreen->fadeSpeciesNameActive = FALSE; taskId = CreateTask(Select_Task_HandleMenu, 0); gTasks[taskId].tState = STATE_MENU_RESHOW; @@ -1694,6 +1695,21 @@ static void Select_Task_HandleChooseMons(u8 taskId) } } +#undef STATE_CHOOSE_MONS_INIT +#undef STATE_CHOOSE_MONS_HANDLE_INPUT +#undef STATE_MENU_INIT +#undef STATE_MENU_HANDLE_INPUT +#undef STATE_YESNO_SHOW_OPTIONS +#undef STATE_YESNO_HANDLE_INPUT +#undef STATE_SUMMARY_FADE +#undef STATE_SUMMARY_CLEAN +#undef STATE_SUMMARY_SHOW +#undef STATE_MENU_SHOW_OPTIONS +#undef STATE_YESNO_SHOW_MONS +#undef STATE_CHOOSE_MONS_INVALID +#undef STATE_MENU_REINIT +#undef STATE_MENU_RESHOW + static void CreateFrontierFactorySelectableMons(u8 firstMonId) { u8 i, j = 0; @@ -2321,15 +2337,30 @@ static void CopySwappedMonData(void) gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].abilityNum = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId].box, MON_DATA_ABILITY_NUM, NULL); } +// Main swap states +// States for the main tasks of the Swap_ functions after initialization, including: +// Swap_Task_OpenSummaryScreen, Swap_Task_HandleYesNo, Swap_Task_HandleMenu, and Swap_Task_HandleChooseMons +// Tasks sharing states was unnecessary, see "Main select states" +#define STATE_CHOOSE_MONS_INIT 0 +#define STATE_CHOOSE_MONS_HANDLE_INPUT 1 +#define STATE_MENU_INIT 2 +#define STATE_MENU_HANDLE_INPUT 3 +#define STATE_YESNO_SHOW 4 +#define STATE_YESNO_HANDLE_INPUT 5 +#define STATE_SUMMARY_FADE 6 +#define STATE_SUMMARY_CLEAN 7 +#define STATE_SUMMARY_SHOW 8 +#define STATE_MENU_SHOW_OPTIONS 9 + static void Swap_Task_OpenSummaryScreen(u8 taskId) { switch (gTasks[taskId].tState) { - case 6: + case STATE_SUMMARY_FADE: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gTasks[taskId].tState = 7; + gTasks[taskId].tState = STATE_SUMMARY_CLEAN; break; - case 7: + case STATE_SUMMARY_CLEAN: if (!gPaletteFade.active) { DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); @@ -2340,10 +2371,10 @@ static void Swap_Task_OpenSummaryScreen(u8 taskId) FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); FREE_AND_SET_NULL(sSwapMonPicBgTilemapBuffer); FreeAllWindowBuffers(); - gTasks[taskId].tState = 8; + gTasks[taskId].tState = STATE_SUMMARY_SHOW; } break; - case 8: + case STATE_SUMMARY_SHOW: DestroyTask(taskId); sFactorySwapScreen->fromSummaryScreen = TRUE; sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[244]; @@ -2403,10 +2434,7 @@ static void Swap_Task_Exit(u8 taskId) } } -#define STATE_SHOW_YES_NO 4 -#define STATE_HANDLE_INPUT 5 - -#define tSaidYes data[1] +#define tSaidYes data[1] #define tFollowUpTaskState data[5] #define tFollowUpTaskPtrHi data[6] #define tFollowUpTaskPtrLo data[7] @@ -2420,11 +2448,11 @@ static void Swap_Task_HandleYesNo(u8 taskId) switch (gTasks[taskId].tState) { - case STATE_SHOW_YES_NO: + case STATE_YESNO_SHOW: Swap_ShowYesNoOptions(); - gTasks[taskId].tState = STATE_HANDLE_INPUT; + gTasks[taskId].tState = STATE_YESNO_HANDLE_INPUT; break; - case STATE_HANDLE_INPUT: + case STATE_YESNO_HANDLE_INPUT: if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); @@ -2481,8 +2509,8 @@ static void Swap_HandleQuitSwappingResposne(u8 taskId) gTasks[taskId].tState = 0; gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); - gTasks[taskId].tFollowUpTaskState = 1; - gTasks[taskId].func = sub_819D770; + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionIn; } } @@ -2492,7 +2520,7 @@ static void Swap_AskQuitSwapping(u8 taskId) { Swap_PrintOnInfoWindow(gText_QuitSwapping); sFactorySwapScreen->monSwapped = FALSE; - gTasks[taskId].tState = STATE_SHOW_YES_NO; + gTasks[taskId].tState = STATE_YESNO_SHOW; gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_HandleQuitSwappingResposne) >> 16; gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_HandleQuitSwappingResposne); gTasks[taskId].func = Swap_Task_HandleYesNo; @@ -2512,8 +2540,8 @@ static void Swap_HandleAcceptMonResponse(u8 taskId) gTasks[taskId].tState = 0; gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); - gTasks[taskId].tFollowUpTaskState = 1; - gTasks[taskId].func = sub_819D770; + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionIn; } } @@ -2524,33 +2552,30 @@ static void Swap_AskAcceptMon(u8 taskId) OpenMonPic(&sFactorySwapScreen->monPic.bgSpriteId, &sFactorySwapScreen->monPicAnimating, TRUE); Swap_PrintOnInfoWindow(gText_AcceptThisPkmn); sFactorySwapScreen->monSwapped = TRUE; - gTasks[taskId].tState = STATE_SHOW_YES_NO; + gTasks[taskId].tState = STATE_YESNO_SHOW; gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_HandleAcceptMonResponse) >> 16; gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_HandleAcceptMonResponse); gTasks[taskId].func = Swap_Task_HandleYesNo; } } -#undef STATE_SHOW_YES_NO -#undef STATE_HANDLE_INPUT - static void Swap_Task_HandleMenu(u8 taskId) { switch (gTasks[taskId].tState) { - case 2: + case STATE_MENU_INIT: if (!sFactorySwapScreen->fromSummaryScreen) OpenMonPic(&sFactorySwapScreen->monPic.bgSpriteId, &sFactorySwapScreen->monPicAnimating, TRUE); - gTasks[taskId].tState = 9; + gTasks[taskId].tState = STATE_MENU_SHOW_OPTIONS; break; - case 9: + case STATE_MENU_SHOW_OPTIONS: if (sFactorySwapScreen->monPicAnimating != TRUE) { Swap_ShowMenuOptions(); - gTasks[taskId].tState = 3; + gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT; } break; - case 3: + case STATE_MENU_HANDLE_INPUT: if (sFactorySwapScreen->monPicAnimating != TRUE) { if (JOY_NEW(A_BUTTON)) @@ -2566,8 +2591,8 @@ static void Swap_Task_HandleMenu(u8 taskId) gTasks[taskId].tState = 0; gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); - gTasks[taskId].tFollowUpTaskState = 1; - gTasks[taskId].func = sub_819D770; + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionIn; } else if (JOY_REPEAT(DPAD_UP)) { @@ -2582,37 +2607,40 @@ static void Swap_Task_HandleMenu(u8 taskId) } } +// Handles input on the two main swap screens (choosing a current pokeon to get rid of, and choosing a new pokemon to receive) static void Swap_Task_HandleChooseMons(u8 taskId) { switch (gTasks[taskId].tState) { - case 0: + case STATE_CHOOSE_MONS_INIT: if (!gPaletteFade.active) { sFactorySwapScreen->fadeSpeciesNameActive = TRUE; - gTasks[taskId].tState = 1; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; } break; - case 1: + case STATE_CHOOSE_MONS_HANDLE_INPUT: if (JOY_NEW(A_BUTTON)) { + // Run whatever action is currently selected (a pokeball, the Cancel button, etc.) PlaySE(SE_SELECT); sFactorySwapScreen->fadeSpeciesNameActive = FALSE; - Swap_PrintMonSpecies2(); - sub_819EAC0(); + Swap_PrintMonSpeciesAtFade(); + Swap_EraseSpeciesWindow(); Swap_RunActionFunc(taskId); } else if (JOY_NEW(B_BUTTON)) { + // Ask if player wants to quit swapping PlaySE(SE_SELECT); sFactorySwapScreen->fadeSpeciesNameActive = FALSE; - Swap_PrintMonSpecies2(); - sub_819EAC0(); + Swap_PrintMonSpeciesAtFade(); + Swap_EraseSpeciesWindow(); gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_AskQuitSwapping) >> 16; gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_AskQuitSwapping); gTasks[taskId].tState = 0; gTasks[taskId].tFollowUpTaskState = 0; - gTasks[taskId].func = sub_819D588; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionOut; } else if (JOY_REPEAT(DPAD_LEFT)) { @@ -2697,13 +2725,15 @@ static void Swap_Task_FadeSpeciesName(u8 taskId) } } -static void Swap_Task_FadeSpeciesName2(u8 taskId) +#define tFadeOutFinished data[4] + +static void Swap_Task_FadeOutSpeciesName(u8 taskId) { switch (gTasks[taskId].tState) { case 0: sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tFadeOutFinished = FALSE; gTasks[taskId].tState++; break; case 1: @@ -2713,7 +2743,7 @@ static void Swap_Task_FadeSpeciesName2(u8 taskId) case 2: if (sFactorySwapScreen->fadeSpeciesNameCoeff > 15) { - gTasks[taskId].data[4] = 1; + gTasks[taskId].tFadeOutFinished = TRUE; gTasks[taskId].tState++; } sFactorySwapScreen->fadeSpeciesNameCoeffDelay++; @@ -2728,31 +2758,33 @@ static void Swap_Task_FadeSpeciesName2(u8 taskId) } } -// TODO -static void sub_819D12C(u8 taskId) +// Slide current pokeballs offscreen to the right and new pokeballs onscreen from +// the left during transition between player's/enemy's party screens +#define tBallCycled(i) data[(i) + 1] +static void Swap_Task_SlideCycleBalls(u8 taskId) { s8 i; - u8 var_2C; - bool8 destroyTask; + u8 lastX; + bool8 finished; switch (gTasks[taskId].tState) { case 0: - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; + gTasks[taskId].tBallCycled(0) = FALSE; + gTasks[taskId].tBallCycled(1) = FALSE; + gTasks[taskId].tBallCycled(2) = FALSE; gTasks[taskId].tState = 1; break; case 1: - var_2C = 0; + lastX = 0; for (i = FRONTIER_PARTY_SIZE - 1; i >= 0; i--) { if (i != FRONTIER_PARTY_SIZE - 1) { - u8 posX = var_2C - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; - if (posX == 16 || gTasks[taskId].data[i + 2] == 1) + u8 posX = lastX - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + if (posX == 16 || gTasks[taskId].tBallCycled(i + 1) == TRUE) { - var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + lastX = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x += 10; } else if (posX > 16) @@ -2762,164 +2794,190 @@ static void sub_819D12C(u8 taskId) } else { - var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + lastX = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x += 10; } - if (gTasks[taskId].data[i + 1] == 1) + if (gTasks[taskId].tBallCycled(i) == TRUE) { + // New ball coming in from left, check if it has reached dest if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x > (i * 48) + 72) { + // Overshot dest, set x and finish gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = (i * 48) + 72; - destroyTask = TRUE; + finished = TRUE; } else if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x == (i * 48) + 72) { - destroyTask = TRUE; + finished = TRUE; } else { - destroyTask = FALSE; + finished = FALSE; } } else { - destroyTask = FALSE; + finished = FALSE; } if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x - 16 > DISPLAY_WIDTH) { - var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + // Ball is offscreen right, cycle its palette and move to left side of screen + lastX = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = -16; if (sFactorySwapScreen->inEnemyScreen == TRUE) gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED); else gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY); - gTasks[taskId].data[i + 1] = 1; + gTasks[taskId].tBallCycled(i) = TRUE; } } - if (destroyTask == TRUE) + if (finished == TRUE) DestroyTask(taskId); break; } } -static void sub_819D324(u8 taskId) +// For sliding the action buttons (Cancel, Pkmn for Swap) on/off screen + +#define SLIDE_BUTTON_PKMN 0 +#define SLIDE_BUTTON_CANCEL 1 + +#define tTaskId data[1] +#define tSlidingOn data[2] +#define tXIncrement data[3] + +// Data to be used by the task that creates this task +#define tSecondSlideDelay data[2] +#define tSlideFinishedPkmn data[3] +#define tSlideFinishedCancel data[4] + +static void Swap_Task_SlideButtonOnOffScreen(u8 taskId) { u8 i, j; s32 posX = 0; - s8 r4 = gTasks[taskId].data[3]; - bool8 r1; + s8 deltaX = gTasks[taskId].tXIncrement; + bool8 sliding; s16 currPosX; - u8 taskId2; + u8 prevTaskId; - if (gTasks[taskId].data[2] == 1) - r4 *= -1; + if (gTasks[taskId].tSlidingOn == TRUE) + deltaX *= -1; switch (gTasks[taskId].tState) { - case 0: + case SLIDE_BUTTON_PKMN: currPosX = gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][0]].pos1.x; - if (!gTasks[taskId].data[2]) + if (!gTasks[taskId].tSlidingOn) { - if (currPosX + r4 < DISPLAY_WIDTH) + // Sliding "Pkmn for Swap" offscreen + if (currPosX + deltaX < DISPLAY_WIDTH) { - r1 = TRUE; + sliding = TRUE; } else { - r1 = FALSE; + sliding = FALSE; posX = DISPLAY_WIDTH; } } else { - if (currPosX + r4 > DISPLAY_HEIGHT) + // Sliding "Pkmn for Swap" onscreen + if (currPosX + deltaX > 160) { - r1 = TRUE; + sliding = TRUE; } else { - r1 = FALSE; - posX = DISPLAY_HEIGHT; + sliding = FALSE; + posX = 160; } } - if (r1 == TRUE) + if (sliding == TRUE) { + // Do movement for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); i++) { for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds); j++) - gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][i]].pos1.x += r4; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][i]].pos1.x += deltaX; } } else { + // Set final position for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds); j++) { gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][0]].pos1.x = posX; gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][1]].pos1.x = posX + 16; gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][2]].pos1.x = posX + 48; } - taskId2 = gTasks[taskId].data[1]; - gTasks[taskId2].data[3] = 1; + prevTaskId = gTasks[taskId].tTaskId; + gTasks[prevTaskId].tSlideFinishedPkmn = TRUE; DestroyTask(taskId); } break; - case 1: + case SLIDE_BUTTON_CANCEL: currPosX = gSprites[sFactorySwapScreen->cancelButtonSpriteIds[0][0]].pos1.x; - if (!gTasks[taskId].data[2]) + if (!gTasks[taskId].tSlidingOn) { - if (currPosX + r4 < DISPLAY_WIDTH) + // Sliding "Cancel" offscreen + if (currPosX + deltaX < DISPLAY_WIDTH) { - r1 = TRUE; + sliding = TRUE; } else { - r1 = FALSE; + sliding = FALSE; posX = DISPLAY_WIDTH; } } else { - if (currPosX + r4 > DISPLAY_HEIGHT + 32) + // Sliding "Cancel" onscreen + if (currPosX + deltaX > 192) { - r1 = TRUE; + sliding = TRUE; } else { - r1 = FALSE; - posX = DISPLAY_HEIGHT + 32; + sliding = FALSE; + posX = 192; } } - if (r1 == TRUE) + if (sliding == TRUE) { + // Do movement for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds); i++) { for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0]); j++) - gSprites[sFactorySwapScreen->cancelButtonSpriteIds[j][i]].pos1.x += r4; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[j][i]].pos1.x += deltaX; } } else { + // Set final position for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds); j++) { gSprites[sFactorySwapScreen->cancelButtonSpriteIds[j][0]].pos1.x = posX; gSprites[sFactorySwapScreen->cancelButtonSpriteIds[j][1]].pos1.x = posX + 16; } - taskId2 = gTasks[taskId].data[1]; - gTasks[taskId2].data[4] = 1; + prevTaskId = gTasks[taskId].tTaskId; + gTasks[prevTaskId].tSlideFinishedCancel = TRUE; DestroyTask(taskId); } break; } } -static void sub_819D588(u8 taskId) +// Slide action buttons offscreen +static void Swap_Task_ScreenInfoTransitionOut(u8 taskId) { - u8 anotherTaskId; + u8 slideTaskId; u16 hiPtr, loPtr; switch (gTasks[taskId].tState) @@ -2927,7 +2985,7 @@ static void sub_819D588(u8 taskId) case 0: LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); Swap_PrintActionStrings(); - PutWindowTilemap(SWAP_WIN_5); + PutWindowTilemap(SWAP_WIN_ACTION_FADE); gTasks[taskId].tState++; break; case 1: @@ -2941,50 +2999,54 @@ static void sub_819D588(u8 taskId) case 3: if (!gPaletteFade.active) { - FillWindowPixelBuffer(SWAP_WIN_5, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_5, 2); + FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); if (sFactorySwapScreen->inEnemyScreen == TRUE) { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].tState = 0; - gTasks[anotherTaskId].data[2] = 0; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[2] = 5; + // Start "Pkmn for Swap" button slide offscreen + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedPkmn = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_PKMN; + gTasks[slideTaskId].tSlidingOn = FALSE; + gTasks[slideTaskId].tXIncrement = 6; + gTasks[taskId].tSecondSlideDelay = 5; gTasks[taskId].tState++; } else { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 1; - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].tState = 1; - gTasks[anotherTaskId].data[2] = 0; - gTasks[anotherTaskId].data[3] = 6; + // Start "Cancel" button slide offscreen + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedPkmn = TRUE; + gTasks[taskId].tSlideFinishedCancel = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_CANCEL; + gTasks[slideTaskId].tSlidingOn = FALSE; + gTasks[slideTaskId].tXIncrement = 6; gTasks[taskId].tState += 2; } } break; case 4: - if (gTasks[taskId].data[2] == 0) + // Start "Cancel" button slide offscreen for screens with both buttons + if (gTasks[taskId].tSecondSlideDelay == 0) { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].tState = 1; - gTasks[anotherTaskId].data[2] = 0; - gTasks[anotherTaskId].data[3] = 6; + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedCancel = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_CANCEL; + gTasks[slideTaskId].tSlidingOn = FALSE; + gTasks[slideTaskId].tXIncrement = 6; gTasks[taskId].tState++; } else { - gTasks[taskId].data[2]--; + gTasks[taskId].tSecondSlideDelay--; } break; case 5: - if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) + if (gTasks[taskId].tSlideFinishedPkmn == TRUE + && gTasks[taskId].tSlideFinishedCancel == TRUE) { gTasks[taskId].tState = gTasks[taskId].tFollowUpTaskState; hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; @@ -2995,9 +3057,10 @@ static void sub_819D588(u8 taskId) } } -static void sub_819D770(u8 taskId) +// Slide action buttons onscreen, reprint swap dialogue and mon info +static void Swap_Task_ScreenInfoTransitionIn(u8 taskId) { - u8 anotherTaskId; + u8 slideTaskId; u16 hiPtr, loPtr; if (sFactorySwapScreen->monPicAnimating == TRUE) return; @@ -3007,49 +3070,53 @@ static void sub_819D770(u8 taskId) case 0: if (sFactorySwapScreen->inEnemyScreen == TRUE) { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].tState = 0; - gTasks[anotherTaskId].data[2] = 1; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[2] = 10; + // Start "Pkmn for Swap" button slide onscreen + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedPkmn = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_PKMN; + gTasks[slideTaskId].tSlidingOn = TRUE; + gTasks[slideTaskId].tXIncrement = 6; + gTasks[taskId].tSecondSlideDelay = 10; gTasks[taskId].tState++; } else { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 1; - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].tState = 1; - gTasks[anotherTaskId].data[2] = 1; - gTasks[anotherTaskId].data[3] = 6; + // Start "Cancel" button slide onscreen + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedPkmn = TRUE; + gTasks[taskId].tSlideFinishedCancel = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_CANCEL; + gTasks[slideTaskId].tSlidingOn = TRUE; + gTasks[slideTaskId].tXIncrement = 6; gTasks[taskId].tState += 2; } break; case 1: - if (gTasks[taskId].data[2] == 0) + // Start "Cancel" button slide onscreen for screens with both buttons + if (gTasks[taskId].tSecondSlideDelay == 0) { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].tState = 1; - gTasks[anotherTaskId].data[2] = 1; - gTasks[anotherTaskId].data[3] = 6; + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedCancel = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_CANCEL; + gTasks[slideTaskId].tSlidingOn = TRUE; + gTasks[slideTaskId].tXIncrement = 6; gTasks[taskId].tState++; } else { - gTasks[taskId].data[2]--; + gTasks[taskId].tSecondSlideDelay--; } break; case 2: - if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) + if (gTasks[taskId].tSlideFinishedPkmn == TRUE + && gTasks[taskId].tSlideFinishedCancel == TRUE) { gPlttBufferFaded[226] = sPokeballGray_Pal[37]; Swap_PrintActionStrings(); - PutWindowTilemap(SWAP_WIN_5); + PutWindowTilemap(SWAP_WIN_ACTION_FADE); gTasks[taskId].tState++; } break; @@ -3070,8 +3137,8 @@ static void sub_819D770(u8 taskId) gTasks[taskId].tState++; break; case 6: - FillWindowPixelBuffer(SWAP_WIN_5, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_5, 2); + FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); gTasks[taskId].tState++; break; case 7: @@ -3085,8 +3152,8 @@ static void sub_819D770(u8 taskId) gTasks[taskId].tState++; break; case 8: - Swap_PrintMonSpecies3(); - sub_819EADC(); + Swap_PrintMonSpeciesForTransition(); + Swap_EraseSpeciesAtFadeWindow(); sFactorySwapScreen->fadeSpeciesNameActive = TRUE; gTasks[taskId].tState = gTasks[taskId].tFollowUpTaskState; hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; @@ -3096,7 +3163,14 @@ static void sub_819D770(u8 taskId) } } -static void sub_819D9EC(u8 taskId) +#undef tTaskId +#undef tSlidingOn +#undef tXIncrement +#undef tSlideFinishedPkmn +#undef tSlideFinishedCancel + +// For switching between the swap screens with the player's / enemy's parties +static void Swap_Task_SwitchPartyScreen(u8 taskId) { u8 i; if (sFactorySwapScreen->monPicAnimating == TRUE) @@ -3105,23 +3179,24 @@ static void sub_819D9EC(u8 taskId) switch (gTasks[taskId].tState) { case 0: - Swap_PrintMonSpecies3(); + Swap_PrintMonSpeciesForTransition(); gTasks[taskId].tState++; break; case 1: - sub_819EADC(); + Swap_EraseSpeciesAtFadeWindow(); gSprites[sFactorySwapScreen->cursorSpriteId].invisible = TRUE; gTasks[taskId].tState++; break; case 2: - CreateTask(sub_819D12C, 0); - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Swap_Task_FadeSpeciesName2; + CreateTask(Swap_Task_SlideCycleBalls, 0); + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Swap_Task_FadeOutSpeciesName; gTasks[taskId].tState++; break; case 3: - if (!FuncIsActiveTask(sub_819D12C) && gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[4] == 1) + if (!FuncIsActiveTask(Swap_Task_SlideCycleBalls) + && gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tFadeOutFinished == TRUE) { - sub_819EAC0(); + Swap_EraseSpeciesWindow(); if (!sFactorySwapScreen->inEnemyScreen) { Swap_InitActions(SWAP_ENEMY_SCREEN); @@ -3139,7 +3214,7 @@ static void sub_819D9EC(u8 taskId) sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; sFactorySwapScreen->fadeSpeciesNameCoeff = 6; sFactorySwapScreen->fadeSpeciesNameFadeOut = FALSE; - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = 1; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = FADESTATE_RUN; gTasks[taskId].tState++; } break; @@ -3147,12 +3222,14 @@ static void sub_819D9EC(u8 taskId) gTasks[taskId].tState = 0; gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); - gTasks[taskId].tFollowUpTaskState = 1; - gTasks[taskId].func = sub_819D770; + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionIn; break; } } +#undef tFadeOutFinished + static void Swap_InitStruct(void) { if (sFactorySwapScreen == NULL) @@ -3279,7 +3356,7 @@ static void CB2_InitSwapScreen(void) break; case 12: if (sFactorySwapScreen->fromSummaryScreen) - Swap_PrintMonSpecies2(); + Swap_PrintMonSpeciesAtFade(); gMain.state++; break; case 13: @@ -3309,17 +3386,17 @@ static void CB2_InitSwapScreen(void) sFactorySwapScreen->fadeSpeciesNameTaskId = CreateTask(Swap_Task_FadeSpeciesName, 0); if (!sFactorySwapScreen->fromSummaryScreen) { - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = 0; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = FADESTATE_INIT; taskId = CreateTask(Swap_Task_HandleChooseMons, 0); - gTasks[taskId].tState = 0; + gTasks[taskId].tState = STATE_CHOOSE_MONS_INIT; } else { - sub_819EAF8(); - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = 1; + Swap_EraseActionFadeWindow(); + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = FADESTATE_RUN; sFactorySwapScreen->fadeSpeciesNameActive = FALSE; taskId = CreateTask(Swap_Task_HandleMenu, 0); - gTasks[taskId].tState = 2; + gTasks[taskId].tState = STATE_MENU_INIT; } SetMainCallback2(Swap_CB2); break; @@ -3635,26 +3712,26 @@ static void Swap_ErasePopupMenu(u8 windowId) ClearWindowTilemap(windowId); } -static void sub_819EAC0(void) +static void Swap_EraseSpeciesWindow(void) { PutWindowTilemap(SWAP_WIN_SPECIES); FillWindowPixelBuffer(SWAP_WIN_SPECIES, PIXEL_FILL(0)); CopyWindowToVram(SWAP_WIN_SPECIES, 2); } -static void sub_819EADC(void) +static void Swap_EraseSpeciesAtFadeWindow(void) { - PutWindowTilemap(SWAP_WIN_7); - FillWindowPixelBuffer(SWAP_WIN_7, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_7, 2); + PutWindowTilemap(SWAP_WIN_SPECIES_AT_FADE); + FillWindowPixelBuffer(SWAP_WIN_SPECIES_AT_FADE, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, 2); } -static void sub_819EAF8(void) +static void Swap_EraseActionFadeWindow(void) { - sub_819EAC0(); - PutWindowTilemap(SWAP_WIN_5); - FillWindowPixelBuffer(SWAP_WIN_5, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_5, 2); + Swap_EraseSpeciesWindow(); + PutWindowTilemap(SWAP_WIN_ACTION_FADE); + FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); } static void Swap_PrintPkmnSwap(void) @@ -3722,16 +3799,16 @@ static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) static void Swap_PrintActionStrings(void) { - FillWindowPixelBuffer(SWAP_WIN_5, PIXEL_FILL(0)); + FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); switch (sFactorySwapScreen->inEnemyScreen) { case TRUE: - Swap_PrintActionString(gText_PkmnForSwap, 0, SWAP_WIN_5); + Swap_PrintActionString(gText_PkmnForSwap, 0, SWAP_WIN_ACTION_FADE); case FALSE: - Swap_PrintActionString(gText_Cancel3, 24, SWAP_WIN_5); + Swap_PrintActionString(gText_Cancel3, 24, SWAP_WIN_ACTION_FADE); break; } - CopyWindowToVram(SWAP_WIN_5, 3); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, 3); } static void Swap_PrintActionStrings2(void) @@ -3763,7 +3840,8 @@ static void Swap_PrintOneActionString(u8 which) CopyWindowToVram(SWAP_WIN_OPTIONS, 3); } -static void Swap_PrintMonSpecies2(void) +// For printing the species name once its selected. Keep the current fade but don't keep fading in and out +static void Swap_PrintMonSpeciesAtFade(void) { u16 species; u8 x; @@ -3776,11 +3854,11 @@ static void Swap_PrintMonSpecies2(void) pal[4] = sFactorySwapScreen->speciesNameColorBackup; LoadPalette(pal, 0xF0, sizeof(sSwapText_Pal)); - PutWindowTilemap(SWAP_WIN_7); - FillWindowPixelBuffer(SWAP_WIN_7, PIXEL_FILL(0)); + PutWindowTilemap(SWAP_WIN_SPECIES_AT_FADE); + FillWindowPixelBuffer(SWAP_WIN_SPECIES_AT_FADE, PIXEL_FILL(0)); if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(SWAP_WIN_7, 3); + CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, 3); } else { @@ -3791,12 +3869,13 @@ static void Swap_PrintMonSpecies2(void) species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(SWAP_WIN_7, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(SWAP_WIN_7, 3); + AddTextPrinterParameterized3(SWAP_WIN_SPECIES_AT_FADE, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, 3); } } -static void Swap_PrintMonSpecies3(void) +// Reprints the species name over the faded one after a transition +static void Swap_PrintMonSpeciesForTransition(void) { u16 species; u8 x; @@ -3882,12 +3961,12 @@ static void Swap_OptionSwap(u8 taskId) sFactorySwapScreen->playerMonId = sFactorySwapScreen->cursorPos; Swap_ErasePopupMenu(SWAP_WIN_OPTIONS); gTasks[taskId].tState = 0; - gTasks[taskId].func = sub_819D9EC; + gTasks[taskId].func = Swap_Task_SwitchPartyScreen; } static void Swap_OptionSummary(u8 taskId) { - gTasks[taskId].tState = 6; + gTasks[taskId].tState = STATE_SUMMARY_FADE; gTasks[taskId].func = Swap_Task_OpenSummaryScreen; } @@ -3898,8 +3977,8 @@ static void Swap_OptionRechoose(u8 taskId) gTasks[taskId].tState = 0; gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); - gTasks[taskId].tFollowUpTaskState = 1; - gTasks[taskId].func = sub_819D770; + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionIn; } static void Swap_RunActionFunc(u8 taskId) @@ -3914,16 +3993,16 @@ static void Swap_ActionCancel(u8 taskId) gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_AskQuitSwapping); gTasks[taskId].tState = 0; gTasks[taskId].tFollowUpTaskState = 0; - gTasks[taskId].func = sub_819D588; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionOut; } static void Swap_ActionPkmnForSwap(u8 taskId) { - gTasks[taskId].tFollowUpTaskPtrHi = (u32)(sub_819D9EC) >> 16; - gTasks[taskId].tFollowUpTaskPtrLo = (u32)(sub_819D9EC); + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_SwitchPartyScreen) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_SwitchPartyScreen); gTasks[taskId].tFollowUpTaskState = 0; gTasks[taskId].tState = 0; - gTasks[taskId].func = sub_819D588; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionOut; } static void Swap_ActionMon(u8 taskId) @@ -3932,13 +4011,13 @@ static void Swap_ActionMon(u8 taskId) { gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleMenu) >> 16; gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleMenu); - gTasks[taskId].tFollowUpTaskState = 2; + gTasks[taskId].tFollowUpTaskState = STATE_MENU_INIT; } else if (Swap_AlreadyHasSameSpecies(sFactorySwapScreen->cursorPos) == TRUE) { OpenMonPic(&sFactorySwapScreen->monPic.bgSpriteId, &sFactorySwapScreen->monPicAnimating, TRUE); gTasks[taskId].tState = 0; - gTasks[taskId].tFollowUpTaskState = 1; + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; gTasks[taskId].func = Swap_TaskCantHaveSameMons; return; } @@ -3949,7 +4028,7 @@ static void Swap_ActionMon(u8 taskId) gTasks[taskId].tFollowUpTaskState = 0; } gTasks[taskId].tState = 0; - gTasks[taskId].func = sub_819D588; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionOut; } #define sIsSwapScreen data[7] @@ -4026,8 +4105,8 @@ static void Swap_TaskCantHaveSameMons(u8 taskId) case 2: if (sFactorySwapScreen->monPicAnimating != TRUE) { - FillWindowPixelBuffer(SWAP_WIN_5, PIXEL_FILL(0)); - CopyWindowToVram(SWAP_WIN_5, 2); + FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); gTasks[taskId].tState++; } break; @@ -4036,8 +4115,8 @@ static void Swap_TaskCantHaveSameMons(u8 taskId) gTasks[taskId].tState++; break; case 4: - Swap_PrintMonSpecies3(); - sub_819EADC(); + Swap_PrintMonSpeciesForTransition(); + Swap_EraseSpeciesAtFadeWindow(); sFactorySwapScreen->fadeSpeciesNameActive = TRUE; gTasks[taskId].tState = gTasks[taskId].tFollowUpTaskState; gTasks[taskId].func = Swap_Task_HandleChooseMons; From 84fbcc9dd615e10f3f0c12c4bad8134872ea6c19 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 31 Dec 2020 00:44:43 -0500 Subject: [PATCH 152/177] Fix modern -> UBFIX macro change --- src/battle_factory_screen.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 1ceff5b984..86e3b02336 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1179,7 +1179,7 @@ static void CB2_InitSelectScreen(void) LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); LoadPalette(sSelectText_Pal, 0xF0, 8); LoadPalette(sSelectText_Pal, 0xE0, 10); -#if UBFIX +#ifdef UBFIX if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) @@ -1205,7 +1205,7 @@ static void CB2_InitSelectScreen(void) SetVBlankCallback(VBlankCB_SelectScreen); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); -#if UBFIX +#ifdef UBFIX if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) @@ -1223,7 +1223,7 @@ static void CB2_InitSelectScreen(void) gMain.state++; break; case 5: -#if UBFIX +#ifdef UBFIX if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) #else if (sFactorySelectScreen->fromSummaryScreen == TRUE) @@ -3330,7 +3330,7 @@ static void CB2_InitSwapScreen(void) gMain.state++; break; case 5: -#if UBFIX +#ifdef UBFIX if (sFactorySwapScreen && sFactorySwapScreen->fromSummaryScreen) #else if (sFactorySwapScreen->fromSummaryScreen == TRUE) From ef60edd933a45da68d2d5444cc4b125c9e53958d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 31 Dec 2020 14:27:46 -0500 Subject: [PATCH 153/177] Remove deadnaming, sync BgEvent --- berry_fix/payload/include/global.fieldmap.h | 17 +++++------------ tools/gbafix/gbafix.c | 8 ++++---- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/berry_fix/payload/include/global.fieldmap.h b/berry_fix/payload/include/global.fieldmap.h index f876e5a567..d5ab0812e5 100644 --- a/berry_fix/payload/include/global.fieldmap.h +++ b/berry_fix/payload/include/global.fieldmap.h @@ -79,23 +79,16 @@ struct CoordEvent struct BgEvent { - /*0x00*/u16 x; - /*0x02*/u16 y; - /*0x04*/u8 elevation; - /*0x05*/u8 kind; - /*0x08*/union { // carried over from diego's FR/LG work, seems to be the same struct - // in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union. + u16 x, y; + u8 elevation; + u8 kind; // The "kind" field determines how to access bgUnion union below. + union { u8 *script; - - // hidden item type struct { u16 item; - u16 hiddenItemId; // flag offset to determine flag lookup + u16 hiddenItemId; } hiddenItem; - - // secret base type u32 secretBaseId; - } bgUnion; }; diff --git a/tools/gbafix/gbafix.c b/tools/gbafix/gbafix.c index 598e43aa08..d62a9c661a 100644 --- a/tools/gbafix/gbafix.c +++ b/tools/gbafix/gbafix.c @@ -28,14 +28,14 @@ // gbafix.c //--------------------------------------------------------------------------------- /* - Gameboy Advance ROM fixer (by Dark Fader / BlackThunder / WinterMute / Diegoisawesome) + Gameboy Advance ROM fixer (by Dark Fader / BlackThunder / WinterMute / Sierraffinity) Validates header of GBA roms. History ------- v1.07 - added support for ELF input, (PikalaxALT) - v1.06 - added output silencing, (Diegoisawesome) - v1.05 - added debug offset argument, (Diegoisawesome) + v1.06 - added output silencing, (Sierraffinity) + v1.05 - added debug offset argument, (Sierraffinity) v1.04 - converted to plain C, (WinterMute) v1.03 - header.fixed, header.device_type v1.02 - redefined the options (rgbfix style), checksum=0 @@ -146,7 +146,7 @@ int main(int argc, char *argv[]) // show syntax if (argc <= 1) { - printf("GBA ROM fixer v"VER" by Dark Fader / BlackThunder / WinterMute / Diegoisawesome \n"); + printf("GBA ROM fixer v"VER" by Dark Fader / BlackThunder / WinterMute / Sierraffinity \n"); printf("Syntax: gbafix [-p] [-t[title]] [-c] [-m] [-r] [-d] [--silent]\n"); printf("\n"); printf("parameters:\n"); From 8cad412ae2c9001cfaeb0b59abfa72ff8890bc79 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 1 Jan 2021 13:34:25 -0500 Subject: [PATCH 154/177] Label a few flash effect functions --- src/field_screen_effect.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 9becd21666..dc911f9f70 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -914,7 +914,7 @@ static void UpdateOrbFlashEffect(u8 taskId) } } -static void sub_80AFF90(u8 taskId) +static void Task_WaitForFlashUpdate(u8 taskId) { if (!FuncIsActiveTask(UpdateFlashLevelEffect)) { @@ -923,13 +923,13 @@ static void sub_80AFF90(u8 taskId) } } -static void sub_80AFFB8(void) +static void StartWaitForFlashUpdate(void) { - if (!FuncIsActiveTask(sub_80AFF90)) - CreateTask(sub_80AFF90, 80); + if (!FuncIsActiveTask(Task_WaitForFlashUpdate)) + CreateTask(Task_WaitForFlashUpdate, 80); } -static u8 sub_80AFFDC(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta) +static u8 StartUpdateFlashLevelEffect(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta) { u8 taskId = CreateTask(UpdateFlashLevelEffect, 80); s16 *data = gTasks[taskId].data; @@ -948,7 +948,7 @@ static u8 sub_80AFFDC(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 dest return taskId; } -static u8 sub_80B003C(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta) +static u8 StartUpdateOrbFlashEffect(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta) { u8 taskId = CreateTask(UpdateOrbFlashEffect, 80); s16 *data = gTasks[taskId].data; @@ -972,14 +972,15 @@ static u8 sub_80B003C(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 dest #undef tFlashRadiusDelta #undef tClearScanlineEffect +// A higher flashLevel value is a smaller flash radius (more darkness). 0 is full brightness void AnimateFlash(u8 flashLevel) { u8 curFlashLevel = Overworld_GetFlashLevel(); - u8 value = 0; + bool8 fullBrightness = FALSE; if (!flashLevel) - value = 1; - sub_80AFFDC(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 1); - sub_80AFFB8(); + fullBrightness = TRUE; + StartUpdateFlashLevelEffect(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], fullBrightness, 1); + StartWaitForFlashUpdate(); ScriptContext2_Enable(); } @@ -1148,7 +1149,7 @@ static void Task_OrbEffect(u8 taskId) case 1: sub_8199DF0(0, PIXEL_FILL(1), 0, 1); LoadOrbEffectPalette(tBlueOrb); - sub_80B003C(tCenterX, tCenterY, 1, 160, 1, 2); + StartUpdateOrbFlashEffect(tCenterX, tCenterY, 1, 160, 1, 2); tState = 2; break; case 2: From c711a2f73ba9fbea609c378298a429f99274dab9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 1 Jan 2021 15:34:21 -0500 Subject: [PATCH 155/177] Document warp spin functions --- data/script_cmd_table.inc | 2 +- include/field_player_avatar.h | 10 +- include/field_screen_effect.h | 4 +- src/field_control_avatar.c | 3 +- src/field_player_avatar.c | 172 ++++++++++++++++++---------------- src/field_screen_effect.c | 143 ++++++++++++++-------------- src/scrcmd.c | 8 +- 7 files changed, 178 insertions(+), 164 deletions(-) diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 0971358a14..7edb5c4b71 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -209,7 +209,7 @@ gScriptCmdTable:: @ 81DB67C .4byte ScrCmd_checkmonobedience @ 0xce .4byte ScrCmd_gotoram @ 0xcf .4byte ScrCmd_nop1 @ 0xd0 - .4byte ScrCmd_warpD1 @ 0xd1 + .4byte ScrCmd_warpspinenter @ 0xd1 .4byte ScrCmd_setmonmetlocation @ 0xd2 .4byte ScrCmd_moverotatingtileobjects @ 0xd3 .4byte ScrCmd_turnrotatingtileobjects @ 0xd4 diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 722fe44448..aa1a2e0dc6 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -36,7 +36,7 @@ void sub_808BCE8(void); void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d); void sub_808B864(void); void sub_808BCF4(void); -void sub_808D074(u8); +void SetSpinStartFacingDir(u8); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8); void SetPlayerAvatarFieldMove(void); @@ -57,10 +57,10 @@ void PlayerWheelieMove(u8 direction); void PlayerPopWheelieWhileMoving(u8 direction); void PlayerUseAcroBikeOnBumpySlope(u8 direction); void PlayerEndWheelieWhileMoving(u8 direction); -void sub_808D194(void); -void sub_808D1C8(void); -bool32 sub_808D1B4(void); -bool32 sub_808D1E8(void); +void DoPlayerSpinEntrance(void); +void DoPlayerSpinExit(void); +bool32 IsPlayerSpinEntranceActive(void); +bool32 IsPlayerSpinExitActive(void); void SetPlayerInvisibility(bool8 invisible); u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y); void StartFishing(u8 rod); diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index 951bf07886..deb80f3dd9 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -35,8 +35,8 @@ void DoCableClubWarp(void); void DoContestHallWarp(void); void AnimateFlash(u8 flashLevel); void WriteBattlePyramidViewScanlineEffectBuffer(void); -void sub_80B0244(void); -void sub_80B0268(void); +void DoSpinEnterWarp(void); +void DoSpinExitWarp(void); void DoOrbEffect(void); void FadeOutOrbEffect(void); void sub_80B05B4(void); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index fab14c5776..a811901a9e 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -730,7 +730,8 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB } if (MetatileBehavior_IsWarpOrBridge(metatileBehavior) == TRUE) { - sub_80B0268(); + // Maybe unused? This MB is used by log bridges, but there's never a warp event on them + DoSpinExitWarp(); return TRUE; } if (MetatileBehavior_IsMtPyreHole(metatileBehavior) == TRUE) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index f57cc99794..cc4c03c9d1 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -31,7 +31,7 @@ #include "constants/songs.h" #include "constants/trainer_types.h" -static EWRAM_DATA u8 gUnknown_0203734C = 0; +static EWRAM_DATA u8 sSpinStartFacingDir = 0; EWRAM_DATA struct ObjectEvent gObjectEvents[OBJECT_EVENTS_COUNT] = {}; EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {}; @@ -138,7 +138,7 @@ static u8 Fishing_PutRodAway(struct Task *task); static u8 Fishing_EndNoMon(struct Task *task); static void AlignFishingAnimationFrames(void); -static u8 sub_808D38C(struct ObjectEvent *object, s16 *a1); +static u8 TrySpinPlayerForWarp(struct ObjectEvent *object, s16 *a1); // .rodata @@ -2050,54 +2050,64 @@ static void AlignFishingAnimationFrames(void) SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y); } -void sub_808D074(u8 a0) +void SetSpinStartFacingDir(u8 direction) { - gUnknown_0203734C = a0; + sSpinStartFacingDir = direction; } -static u8 sub_808D080(void) +static u8 GetSpinStartFacingDir(void) { - if (gUnknown_0203734C == 0) - { - return 1; - } - return gUnknown_0203734C; + if (sSpinStartFacingDir == DIR_NONE) + return DIR_SOUTH; + + return sSpinStartFacingDir; } -static void sub_808D094(u8 taskId) +// Task data for Task_DoPlayerSpinEntrance and Task_DoPlayerSpinExit +#define tState data[0] +#define tSpinDelayTimer data[1] +#define tSpeed data[2] +#define tCurY data[3] +#define tDestY data[4] +#define tStartDir data[5] +#define tPriority data[6] +#define tSubpriority data[7] +#define tGroundTimer data[8] + +static void Task_DoPlayerSpinExit(u8 taskId) { struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[object->spriteId]; s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { - case 0: + case 0: // Init if (!ObjectEventClearHeldMovementIfFinished(object)) - { return; - } - sub_808D074(object->facingDirection); - data[1] = 0; - data[2] = 1; - data[3] = (u16)(sprite->pos1.y + sprite->pos2.y) << 4; + SetSpinStartFacingDir(object->facingDirection); + tSpinDelayTimer = 0; + tSpeed = 1; + tCurY = (u16)(sprite->pos1.y + sprite->pos2.y) << 4; sprite->pos2.y = 0; CameraObjectReset2(); object->fixedPriority = TRUE; sprite->oam.priority = 0; sprite->subpriority = 0; sprite->subspriteMode = SUBSPRITES_OFF; - data[0]++; - case 1: - sub_808D38C(object, &data[1]); - data[3] -= data[2]; - data[2] += 3; - sprite->pos1.y = data[3] >> 4; + tState++; + case 1: // Spin while rising + TrySpinPlayerForWarp(object, &tSpinDelayTimer); + + // Rise and accelerate + tCurY -= tSpeed; + tSpeed += 3; + sprite->pos1.y = tCurY >> 4; + + // Check if offscreen if (sprite->pos1.y + (s16)gTotalCameraPixelOffsetY < -32) - { - data[0]++; - } + tState++; break; case 2: DestroyTask(taskId); @@ -2105,84 +2115,86 @@ static void sub_808D094(u8 taskId) } } -static void sub_808D1FC(u8 taskId); +static void Task_DoPlayerSpinEntrance(u8 taskId); -void sub_808D194(void) +void DoPlayerSpinEntrance(void) { - sub_808D1FC(CreateTask(sub_808D1FC, 0)); + Task_DoPlayerSpinEntrance(CreateTask(Task_DoPlayerSpinEntrance, 0)); } -bool32 sub_808D1B4(void) +bool32 IsPlayerSpinEntranceActive(void) { - return FuncIsActiveTask(sub_808D1FC); + return FuncIsActiveTask(Task_DoPlayerSpinEntrance); } -void sub_808D1C8(void) +void DoPlayerSpinExit(void) { - sub_808D094(CreateTask(sub_808D094, 0)); + Task_DoPlayerSpinExit(CreateTask(Task_DoPlayerSpinExit, 0)); } -bool32 sub_808D1E8(void) +bool32 IsPlayerSpinExitActive(void) { - return FuncIsActiveTask(sub_808D094); + return FuncIsActiveTask(Task_DoPlayerSpinExit); } -static const u8 gUnknown_084975BC[] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; +static const u8 sSpinDirections[] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; -static void sub_808D1FC(u8 taskId) +static void Task_DoPlayerSpinEntrance(u8 taskId) { struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[object->spriteId]; s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: - data[5] = sub_808D080(); - ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(gUnknown_084975BC[data[5]])); - data[1] = 0; - data[2] = 116; - data[4] = sprite->pos1.y; - data[6] = sprite->oam.priority; - data[7] = sprite->subpriority; - data[3] = -((u16)sprite->pos2.y + 32) * 16; + // Because the spin start facing direction is never set for this + // warp type, the player will always exit the warp facing South. + // This may have been intentional, unclear + tStartDir = GetSpinStartFacingDir(); + ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(sSpinDirections[tStartDir])); + tSpinDelayTimer = 0; + tSpeed = 116; + tDestY = sprite->pos1.y; + tPriority = sprite->oam.priority; + tSubpriority = sprite->subpriority; + tCurY = -((u16)sprite->pos2.y + 32) * 16; sprite->pos2.y = 0; CameraObjectReset2(); object->fixedPriority = TRUE; sprite->oam.priority = 1; sprite->subpriority = 0; sprite->subspriteMode = SUBSPRITES_OFF; - data[0]++; - case 1: - sub_808D38C(object, &data[1]); - data[3] += data[2]; - data[2] -= 3; - if (data[2] < 4) + tState++; + case 1: // Spin while descending + TrySpinPlayerForWarp(object, &tSpinDelayTimer); + + // Fall and decelerate + tCurY += tSpeed; + tSpeed -= 3; + if (tSpeed < 4) + tSpeed = 4; + sprite->pos1.y = tCurY >> 4; + + // Check if reached dest + if (sprite->pos1.y >= tDestY) { - data[2] = 4; - } - sprite->pos1.y = data[3] >> 4; - if (sprite->pos1.y >= data[4]) - { - sprite->pos1.y = data[4]; - data[8] = 0; - data[0]++; + sprite->pos1.y = tDestY; + tGroundTimer = 0; + tState++; } break; - case 2: - sub_808D38C(object, &data[1]); - data[8]++; - if (data[8] > 8) - { - data[0]++; - } + case 2: // Spin on ground + TrySpinPlayerForWarp(object, &tSpinDelayTimer); + if (++tGroundTimer > 8) + tState++; break; - case 3: - if (data[5] == sub_808D38C(object, &data[1])) + case 3: // Spin until facing original direction + if (tStartDir == TrySpinPlayerForWarp(object, &tSpinDelayTimer)) { object->fixedPriority = 0; - sprite->oam.priority = data[6]; - sprite->subpriority = data[7]; + sprite->oam.priority = tPriority; + sprite->subpriority = tSubpriority; CameraObjectReset1(); DestroyTask(taskId); } @@ -2190,19 +2202,15 @@ static void sub_808D1FC(u8 taskId) } } -static u8 sub_808D38C(struct ObjectEvent *object, s16 *a1) +static u8 TrySpinPlayerForWarp(struct ObjectEvent *object, s16 *delayTimer) { - if (*a1 < 8 && ++(*a1) < 8) - { + if (*delayTimer < 8 && ++(*delayTimer) < 8) return object->facingDirection; - } if (!ObjectEventCheckHeldMovementStatus(object)) - { return object->facingDirection; - } - ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(gUnknown_084975BC[object->facingDirection])); - *a1 = 0; - return gUnknown_084975BC[object->facingDirection]; + ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(sSpinDirections[object->facingDirection])); + *delayTimer = 0; + return sSpinDirections[object->facingDirection]; } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index dc911f9f70..4676776d1c 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -42,11 +42,14 @@ static void Task_DoContestHallWarp(u8); static void FillPalBufferWhite(void); static void Task_ExitDoor(u8); static bool32 WaitForWeatherFadeIn(void); -static void Task_TeleportTileWarpExit(u8 taskId); +static void Task_SpinEnterWarp(u8 taskId); static void Task_WarpAndLoadMap(u8 taskId); static void Task_DoDoorWarp(u8 taskId); static void Task_EnableScriptAfterMusicFade(u8 taskId); +// data[0] is used universally by tasks in this file as a state for switches +#define tState data[0] + // const static const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 }; const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelPixelRadii) - 1; @@ -156,17 +159,17 @@ static void Task_ReturnToFieldCableLink(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: task->data[1] = CreateTask_ReestablishCableClubLink(); - task->data[0]++; + task->tState++; break; case 1: if (gTasks[task->data[1]].isActive != TRUE) { WarpFadeInScreen(); - task->data[0]++; + task->tState++; } break; case 2: @@ -191,11 +194,11 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: SetLinkStandbyCallback(); - task->data[0]++; + task->tState++; break; case 1: if (!IsLinkTaskFinished()) @@ -206,7 +209,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId) else { WarpFadeInScreen(); - task->data[0]++; + task->tState++; } break; case 2: @@ -224,16 +227,16 @@ void Task_ReturnToFieldRecordMixing(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: SetLinkStandbyCallback(); - task->data[0]++; + task->tState++; break; case 1: if (IsLinkTaskFinished()) { - task->data[0]++; + task->tState++; } break; case 2: @@ -295,12 +298,12 @@ void FieldCB_WarpExitFadeFromBlack(void) ScriptContext2_Enable(); } -static void FieldCB_TeleportTileWarpExit(void) +static void FieldCB_SpinEnterWarp(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); PlaySE(SE_WARP_OUT); - CreateTask(Task_TeleportTileWarpExit, 10); + CreateTask(Task_SpinEnterWarp, 10); ScriptContext2_Enable(); } @@ -320,14 +323,14 @@ static void Task_ExitDoor(u8 taskId) s16 *x = &task->data[2]; s16 *y = &task->data[3]; - switch (task->data[0]) + switch (task->tState) { case 0: SetPlayerVisibility(FALSE); FreezeObjectEvents(); PlayerGetDestCoords(x, y); FieldSetDoorOpened(*x, *y); - task->data[0] = 1; + task->tState = 1; break; case 1: if (WaitForWeatherFadeIn()) @@ -336,7 +339,7 @@ static void Task_ExitDoor(u8 taskId) SetPlayerVisibility(TRUE); objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_WALK_NORMAL_DOWN); - task->data[0] = 2; + task->tState = 2; } break; case 2: @@ -346,14 +349,14 @@ static void Task_ExitDoor(u8 taskId) task->data[1] = FieldAnimateDoorClose(*x, *y); objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objEventId]); - task->data[0] = 3; + task->tState = 3; } break; case 3: if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) { UnfreezeObjectEvents(); - task->data[0] = 4; + task->tState = 4; } break; case 4: @@ -369,13 +372,13 @@ static void Task_ExitNonAnimDoor(u8 taskId) s16 *x = &task->data[2]; s16 *y = &task->data[3]; - switch (task->data[0]) + switch (task->tState) { case 0: SetPlayerVisibility(FALSE); FreezeObjectEvents(); PlayerGetDestCoords(x, y); - task->data[0] = 1; + task->tState = 1; break; case 1: if (WaitForWeatherFadeIn()) @@ -384,14 +387,14 @@ static void Task_ExitNonAnimDoor(u8 taskId) SetPlayerVisibility(TRUE); objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventSetHeldMovement(&gObjectEvents[objEventId], GetWalkNormalMovementAction(GetPlayerFacingDirection())); - task->data[0] = 2; + task->tState = 2; } break; case 2: if (IsPlayerStandingStill()) { UnfreezeObjectEvents(); - task->data[0] = 3; + task->tState = 3; } break; case 3: @@ -403,12 +406,12 @@ static void Task_ExitNonAnimDoor(u8 taskId) static void Task_ExitNonDoor(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: FreezeObjectEvents(); ScriptContext2_Enable(); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 1: if (WaitForWeatherFadeIn()) @@ -543,7 +546,9 @@ void DoLavaridgeGym1FWarp(void) StartLavaridgeGym1FWarp(10); } -// Warp from a teleporting tile, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut) +// DoSpinEnterWarp but with a fade out +// Screen fades out to exit current map, player spins down from top to enter new map +// Used by teleporting tiles, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut) void DoTeleportTileWarp(void) { ScriptContext2_Enable(); @@ -551,7 +556,7 @@ void DoTeleportTileWarp(void) WarpFadeOutScreen(); PlaySE(SE_WARP_IN); CreateTask(Task_WarpAndLoadMap, 10); - gFieldCallback = FieldCB_TeleportTileWarpExit; + gFieldCallback = FieldCB_SpinEnterWarp; } void DoMossdeepGymWarp(void) @@ -574,8 +579,6 @@ void DoPortholeWarp(void) gFieldCallback = FieldCB_ShowPortholeView; } -#define tState data[0] - static void Task_DoCableClubWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -598,8 +601,6 @@ static void Task_DoCableClubWarp(u8 taskId) } } -#undef tState - void DoCableClubWarp(void) { ScriptContext2_Enable(); @@ -613,20 +614,20 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: ClearLinkCallback_2(); FadeScreen(FADE_TO_BLACK, 0); TryFadeOutOldMapMusic(); PlaySE(SE_EXIT); - data[0]++; + tState++; break; case 1: if (!PaletteFadeActive() && BGMusicStopped()) { SetCloseLinkCallback(); - data[0]++; + tState++; } break; case 2: @@ -649,12 +650,12 @@ static void Task_WarpAndLoadMap(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: FreezeObjectEvents(); ScriptContext2_Enable(); - task->data[0]++; + task->tState++; break; case 1: if (!PaletteFadeActive()) @@ -665,7 +666,7 @@ static void Task_WarpAndLoadMap(u8 taskId) task->data[1] = 1; } if (BGMusicStopped()) - task->data[0]++; + task->tState++; } break; case 2: @@ -682,14 +683,14 @@ static void Task_DoDoorWarp(u8 taskId) s16 *x = &task->data[2]; s16 *y = &task->data[3]; - switch (task->data[0]) + switch (task->tState) { case 0: FreezeObjectEvents(); PlayerGetDestCoords(x, y); PlaySE(GetDoorSoundEffect(*x, *y - 1)); task->data[1] = FieldAnimateDoorOpen(*x, *y - 1); - task->data[0] = 1; + task->tState = 1; break; case 1: if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) @@ -699,7 +700,7 @@ static void Task_DoDoorWarp(u8 taskId) ObjectEventClearHeldMovementIfActive(&gObjectEvents[objEventId]); objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_WALK_NORMAL_UP); - task->data[0] = 2; + task->tState = 2; } break; case 2: @@ -710,20 +711,20 @@ static void Task_DoDoorWarp(u8 taskId) objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objEventId]); SetPlayerVisibility(FALSE); - task->data[0] = 3; + task->tState = 3; } break; case 3: if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) { - task->data[0] = 4; + task->tState = 4; } break; case 4: TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); - task->data[0] = 0; + task->tState = 0; task->func = Task_WarpAndLoadMap; break; } @@ -733,17 +734,17 @@ static void Task_DoContestHallWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: FreezeObjectEvents(); ScriptContext2_Enable(); - task->data[0]++; + task->tState++; break; case 1: if (!PaletteFadeActive() && BGMusicStopped()) { - task->data[0]++; + task->tState++; } break; case 2: @@ -850,22 +851,22 @@ static void UpdateFlashLevelEffect(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: SetFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); - data[0] = 1; + tState = 1; break; case 1: SetFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); - data[0] = 0; + tState = 0; tCurFlashRadius += tFlashRadiusDelta; if (tCurFlashRadius > tDestFlashRadius) { if (tClearScanlineEffect == 1) { ScanlineEffect_Stop(); - data[0] = 2; + tState = 2; } else { @@ -884,22 +885,22 @@ static void UpdateOrbFlashEffect(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: SetOrbFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); - data[0] = 1; + tState = 1; break; case 1: SetOrbFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); - data[0] = 0; + tState = 0; tCurFlashRadius += tFlashRadiusDelta; if (tCurFlashRadius > tDestFlashRadius) { if (tClearScanlineEffect == 1) { ScanlineEffect_Stop(); - data[0] = 2; + tState = 2; } else { @@ -999,18 +1000,18 @@ void WriteBattlePyramidViewScanlineEffectBuffer(void) CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480); } -static void Task_TeleportTileWarpExit(u8 taskId) +static void Task_SpinEnterWarp(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: FreezeObjectEvents(); ScriptContext2_Enable(); - sub_808D194(); - gTasks[taskId].data[0]++; + DoPlayerSpinEntrance(); + gTasks[taskId].tState++; break; case 1: - if (WaitForWeatherFadeIn() && sub_808D1B4() != TRUE) + if (WaitForWeatherFadeIn() && IsPlayerSpinEntranceActive() != TRUE) { UnfreezeObjectEvents(); ScriptContext2_Disable(); @@ -1020,29 +1021,29 @@ static void Task_TeleportTileWarpExit(u8 taskId) } } -static void sub_80B01BC(u8 taskId) +static void Task_SpinExitWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: FreezeObjectEvents(); ScriptContext2_Enable(); PlaySE(SE_WARP_IN); - sub_808D1C8(); - task->data[0]++; + DoPlayerSpinExit(); + task->tState++; break; case 1: - if (!sub_808D1E8()) + if (!IsPlayerSpinExitActive()) { WarpFadeOutScreen(); - task->data[0]++; + task->tState++; } break; case 2: if (!PaletteFadeActive() && BGMusicStopped()) - task->data[0]++; + task->tState++; break; case 3: WarpIntoMap(); @@ -1052,18 +1053,22 @@ static void sub_80B01BC(u8 taskId) } } -void sub_80B0244(void) +// Only called by an unused function +// DoTeleportTileWarp is used instead +void DoSpinEnterWarp(void) { ScriptContext2_Enable(); CreateTask(Task_WarpAndLoadMap, 10); - gFieldCallback = FieldCB_TeleportTileWarpExit; + gFieldCallback = FieldCB_SpinEnterWarp; } -void sub_80B0268(void) +// Opposite of DoSpinEnterWarp / DoTeleportTileWarp +// Player exits current map by spinning up offscreen, enters new map with a fade in +void DoSpinExitWarp(void) { ScriptContext2_Enable(); gFieldCallback = FieldCB_DefaultWarpExit; - CreateTask(sub_80B01BC, 10); + CreateTask(Task_SpinExitWarp, 10); } static void LoadOrbEffectPalette(bool8 blueOrb) @@ -1110,7 +1115,6 @@ static bool8 sub_80B02C8(u16 shakeDir) return FALSE; } -#define tState data[0] #define tBlueOrb data[1] #define tCenterX data[2] #define tCenterY data[3] @@ -1244,7 +1248,6 @@ void FadeOutOrbEffect(void) gTasks[taskId].tState = 6; } -#undef tState #undef tBlueOrb #undef tCenterX #undef tCenterY diff --git a/src/scrcmd.c b/src/scrcmd.c index ef0b3f86ba..f36a441875 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2235,7 +2235,9 @@ bool8 ScrCmd_gotoram(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_warpD1(struct ScriptContext *ctx) +// Unused +// For the warp used by the Aqua Hideout, see DoTeleportTileWarp +bool8 ScrCmd_warpspinenter(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -2244,8 +2246,8 @@ bool8 ScrCmd_warpD1(struct ScriptContext *ctx) u16 y = VarGet(ScriptReadHalfword(ctx)); SetWarpDestination(mapGroup, mapNum, warpId, x, y); - sub_808D074(GetPlayerFacingDirection()); - sub_80B0244(); + SetSpinStartFacingDir(GetPlayerFacingDirection()); + DoSpinEnterWarp(); ResetInitialPlayerAvatarState(); return TRUE; } From 88e951bfe39066d9109e714968410a5277c3cfac Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 1 Jan 2021 17:02:03 -0500 Subject: [PATCH 156/177] Label some ReturnToField funcs --- include/field_screen_effect.h | 4 ++-- src/battle_setup.c | 2 +- src/field_screen_effect.c | 10 +++++----- src/item_use.c | 14 +++++++------- src/safari_zone.c | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index deb80f3dd9..4e4725041a 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -18,8 +18,8 @@ void FieldCB_WarpExitFadeFromBlack(void); void FieldCB_WarpExitFadeFromWhite(void); bool8 FieldCB_ReturnToFieldOpenStartMenu(void); void ReturnToFieldOpenStartMenu(void); -void sub_80AF6D4(void); -void sub_80AF6F0(void); +void FieldCB_ReturnToFieldNoScript(void); +void FieldCB_ReturnToFieldNoScriptCheckMusic(void); void DoWarp(void); void DoDiveWarp(void); void DoSootopolisLegendWarp(void); diff --git a/src/battle_setup.c b/src/battle_setup.c index 40b5993f06..0a5e7e8b44 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -607,7 +607,7 @@ static void CB2_EndWildBattle(void) else { SetMainCallback2(CB2_ReturnToField); - gFieldCallback = sub_80AF6F0; + gFieldCallback = FieldCB_ReturnToFieldNoScriptCheckMusic; } } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 4676776d1c..db82d667ce 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -446,7 +446,7 @@ bool8 FieldCB_ReturnToFieldOpenStartMenu(void) return FALSE; } -static void task_mpl_807E3C8(u8 taskId) +static void Task_ReturnToFieldNoScript(u8 taskId) { if (WaitForWeatherFadeIn() == 1) { @@ -456,19 +456,19 @@ static void task_mpl_807E3C8(u8 taskId) } } -void sub_80AF6D4(void) +void FieldCB_ReturnToFieldNoScript(void) { ScriptContext2_Enable(); FadeInFromBlack(); - CreateTask(task_mpl_807E3C8, 10); + CreateTask(Task_ReturnToFieldNoScript, 10); } -void sub_80AF6F0(void) +void FieldCB_ReturnToFieldNoScriptCheckMusic(void) { ScriptContext2_Enable(); Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); - CreateTask(task_mpl_807E3C8, 10); + CreateTask(Task_ReturnToFieldNoScript, 10); } static bool32 PaletteFadeActive(void) diff --git a/src/item_use.c b/src/item_use.c index 9ab755a5e3..df6a35bc98 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -53,7 +53,7 @@ static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8); static u8 GetDirectionToHiddenItem(s16 distanceX, s16 distanceY); static void PlayerFaceHiddenItem(u8 a); static void CheckForHiddenItemsInMapConnection(u8 taskId); -static void sub_80FDC00(u8 taskId); +static void Task_OpenRegisteredPokeblockCase(u8 taskId); static void ItemUseOnFieldCB_Bike(u8 taskId); static void ItemUseOnFieldCB_Rod(u8); static void ItemUseOnFieldCB_Itemfinder(u8); @@ -69,7 +69,7 @@ static void Task_StartUseRepel(u8 taskId); static void Task_UseRepel(u8 taskId); static void Task_CloseCantUseKeyItemMessage(u8 taskId); static void SetDistanceOfClosestHiddenItem(u8 taskId, s16 x, s16 y); -static void CB2_OpenPokeblockCaseOnField(void); +static void CB2_OpenPokeblockFromBag(void); // EWRAM variables EWRAM_DATA static void(*sItemUseOnFieldCB)(u8 taskId) = NULL; @@ -615,23 +615,23 @@ void ItemUseOutOfBattle_PokeblockCase(u8 taskId) } else if (gTasks[taskId].tUsingRegisteredKeyItem != TRUE) { - gBagMenu->exitCallback = CB2_OpenPokeblockCaseOnField; + gBagMenu->exitCallback = CB2_OpenPokeblockFromBag; Task_FadeAndCloseBagMenu(taskId); } else { - gFieldCallback = sub_80AF6D4; + gFieldCallback = FieldCB_ReturnToFieldNoScript; FadeScreen(FADE_TO_BLACK, 0); - gTasks[taskId].func = sub_80FDC00; + gTasks[taskId].func = Task_OpenRegisteredPokeblockCase; } } -static void CB2_OpenPokeblockCaseOnField(void) +static void CB2_OpenPokeblockFromBag(void) { OpenPokeblockCase(PBLOCK_CASE_FIELD, CB2_ReturnToBagMenuPocket); } -static void sub_80FDC00(u8 taskId) +static void Task_OpenRegisteredPokeblockCase(u8 taskId) { if (!gPaletteFade.active) { diff --git a/src/safari_zone.c b/src/safari_zone.c index e8827e1246..3b86bc4640 100644 --- a/src/safari_zone.c +++ b/src/safari_zone.c @@ -107,7 +107,7 @@ void CB2_EndSafariBattle(void) { ScriptContext2_RunNewScript(SafariZone_EventScript_OutOfBallsMidBattle); WarpIntoMap(); - gFieldCallback = sub_80AF6F0; + gFieldCallback = FieldCB_ReturnToFieldNoScriptCheckMusic; SetMainCallback2(CB2_LoadMap); } else if (gBattleOutcome == B_OUTCOME_CAUGHT) From 06af0f0fe539ab735abfdf1b532e0364c0f37abf Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 3 Jan 2021 13:36:07 -0500 Subject: [PATCH 157/177] Remove unnecessary string.h includes --- src/field_message_box.c | 1 - src/item_menu.c | 1 - src/main_menu.c | 1 - 3 files changed, 3 deletions(-) diff --git a/src/field_message_box.c b/src/field_message_box.c index 1b760c7df2..b98425b66f 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -1,6 +1,5 @@ #include "global.h" #include "menu.h" -#include "string.h" #include "string_util.h" #include "task.h" #include "text.h" diff --git a/src/item_menu.c b/src/item_menu.c index 80035b9458..931cba2bfb 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -41,7 +41,6 @@ #include "shop.h" #include "sound.h" #include "sprite.h" -#include "string.h" #include "strings.h" #include "string_util.h" #include "task.h" diff --git a/src/main_menu.c b/src/main_menu.c index 5b39b6d456..2c27b673a4 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -28,7 +28,6 @@ #include "scanline_effect.h" #include "sound.h" #include "sprite.h" -#include "string.h" #include "strings.h" #include "string_util.h" #include "task.h" From e0c0143f4191cb05e3e70af32df0f3eb6b0e3675 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 4 Jan 2021 10:14:01 -0500 Subject: [PATCH 158/177] Fix substitute back sprite --- graphics/battle_anims/sprites/substitute.bin | Bin 2048 -> 0 bytes .../battle_anims/sprites/substitute_back.png | Bin 0 -> 405 bytes include/graphics.h | 4 ++-- src/battle_gfx_sfx_util.c | 6 +++--- src/graphics.c | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) delete mode 100644 graphics/battle_anims/sprites/substitute.bin create mode 100644 graphics/battle_anims/sprites/substitute_back.png diff --git a/graphics/battle_anims/sprites/substitute.bin b/graphics/battle_anims/sprites/substitute.bin deleted file mode 100644 index d30c07d4ef1f4e153b5af07e41aa7135451b85d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeH_zfQw25XNtTBxCyquyuun2Pmval`ahr;A=9XO1Wg~ViLA6B$nS3G4nYhRfkSU z{26l6&wuV5JKtv$%`rRhBMuy}Yk(-mzycFfW?tG%WJsAgKnYPd07>Y{3_ud*^(FKB zBeVG!zdzF`a_i_!;rCMq92v+@$dF0{LE|y(mTk4=N>lDtQm#c%GhcPfwyn5-Q#Q3T z(j)?(9`;1{poLb2R}P1u8>7=3&@@KzJMg@&=C0=zt~N; zf)tcbKpnzE7j@o;H4gJrpt(`^+G5YK-mGq-<~p#a_SVuJ$Kjk^{koay;^SE z@c1~DD_ZfB*2Huxt_czoSBAxeB)Ke)Ywz~zdBLEi*?;~`Tacg4zl5lO{Nvx3C|o_w ztbAgsy4#EEG5lw`;$HP@mYooJyS3Y?uz6bMMa!Oat^Apck&y~hxTM~xCVTS>Pj&vZ za#4WJp}KNkuAtqK4Xc@N8eirUSKRW2m-SlrfvpqlxYz{!<^=RIZ2fxHae{8uhK6Gm zNA&IohJQc4;hq91IFLPgg&ebxsLQ0I#U5`Tzg` literal 0 HcmV?d00001 diff --git a/include/graphics.h b/include/graphics.h index 5c15b7a66c..d3d01bc579 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4087,8 +4087,8 @@ extern const u32 gConfetti_Gfx[]; extern const u32 gConfetti_Pal[]; extern const u32 gUnknown_08C093F0[]; -extern const u32 gSubstituteDollTilemap[]; -extern const u32 gSubstituteDollGfx[]; +extern const u32 gSubstituteDollBackGfx[]; +extern const u32 gSubstituteDollFrontGfx[]; extern const u32 gSubstituteDollPal[]; extern const u32 gHealthboxSinglesPlayerGfx[]; extern const u32 gHealthboxSinglesOpponentGfx[]; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index c6db4ad424..77b91f1f41 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -997,11 +997,11 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) position = GetBattlerPosition(battlerId); if (IsContest()) - LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites.ptr[position]); + LZDecompressVram(gSubstituteDollBackGfx, gMonSpritesGfxPtr->sprites.ptr[position]); else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - LZDecompressVram(gSubstituteDollGfx, gMonSpritesGfxPtr->sprites.ptr[position]); + LZDecompressVram(gSubstituteDollFrontGfx, gMonSpritesGfxPtr->sprites.ptr[position]); else - LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites.ptr[position]); + LZDecompressVram(gSubstituteDollBackGfx, gMonSpritesGfxPtr->sprites.ptr[position]); for (i = 1; i < 4; i++) { diff --git a/src/graphics.c b/src/graphics.c index 3973c15076..aa8d5c249f 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -867,8 +867,8 @@ const u32 gBattleAnimSpriteGfx_Confetti[] = INCBIN_U32("graphics/battle_anims/sp const u32 gBattleAnimSpritePal_Confetti[] = INCBIN_U32("graphics/battle_anims/sprites/confetti.gbapal.lz"); const u32 gSubstituteDollPal[] = INCBIN_U32("graphics/battle_anims/sprites/substitute.gbapal.lz"); -const u32 gSubstituteDollGfx[] = INCBIN_U32("graphics/battle_anims/sprites/substitute.4bpp.lz"); -const u32 gSubstituteDollTilemap[] = INCBIN_U32("graphics/battle_anims/sprites/substitute.bin.lz"); +const u32 gSubstituteDollFrontGfx[] = INCBIN_U32("graphics/battle_anims/sprites/substitute.4bpp.lz"); +const u32 gSubstituteDollBackGfx[] = INCBIN_U32("graphics/battle_anims/sprites/substitute_back.4bpp.lz"); const u32 gBattleAnimSpriteGfx_GreenStar[] = INCBIN_U32("graphics/battle_anims/sprites/green_star.4bpp.lz"); const u32 gBattleAnimSpritePal_GreenStar[] = INCBIN_U32("graphics/battle_anims/sprites/green_star.gbapal.lz"); From 039108284d6e3d6bb49c2c784b153c3f9589f198 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 2 Jan 2021 04:03:17 -0500 Subject: [PATCH 159/177] Clean up gDecorations with gItems format --- src/data/decoration/header.h | 2541 +++++++++++++++++++--------------- 1 file changed, 1452 insertions(+), 1089 deletions(-) diff --git a/src/data/decoration/header.h b/src/data/decoration/header.h index 55458c7a3f..c574988281 100644 --- a/src/data/decoration/header.h +++ b/src/data/decoration/header.h @@ -1,1091 +1,1454 @@ -const struct Decoration gDecorations[] = { +const struct Decoration gDecorations[] = +{ + [DECOR_NONE] = { - DECOR_NONE, - _("SMALL DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_DESK, - 0, - DecorDesc_SMALL_DESK, - DecorGfx_SMALL_DESK - }, { - DECOR_SMALL_DESK, - _("SMALL DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_DESK, - 3000, - DecorDesc_SMALL_DESK, - DecorGfx_SMALL_DESK - }, { - DECOR_POKEMON_DESK, - _("POKéMON DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_DESK, - 3000, - DecorDesc_POKEMON_DESK, - DecorGfx_POKEMON_DESK - }, { - DECOR_HEAVY_DESK, - _("HEAVY DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x2, - DECORCAT_DESK, - 6000, - DecorDesc_HEAVY_DESK, - DecorGfx_HEAVY_DESK - }, { - DECOR_RAGGED_DESK, - _("RAGGED DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x2, - DECORCAT_DESK, - 6000, - DecorDesc_RAGGED_DESK, - DecorGfx_RAGGED_DESK - }, { - DECOR_COMFORT_DESK, - _("COMFORT DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x2, - DECORCAT_DESK, - 6000, - DecorDesc_COMFORT_DESK, - DecorGfx_COMFORT_DESK - }, { - DECOR_PRETTY_DESK, - _("PRETTY DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x3, - DECORCAT_DESK, - 9000, - DecorDesc_PRETTY_DESK, - DecorGfx_PRETTY_DESK - }, { - DECOR_BRICK_DESK, - _("BRICK DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x3, - DECORCAT_DESK, - 9000, - DecorDesc_BRICK_DESK, - DecorGfx_BRICK_DESK - }, { - DECOR_CAMP_DESK, - _("CAMP DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x3, - DECORCAT_DESK, - 9000, - DecorDesc_CAMP_DESK, - DecorGfx_CAMP_DESK - }, { - DECOR_HARD_DESK, - _("HARD DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x3, - DECORCAT_DESK, - 9000, - DecorDesc_HARD_DESK, - DecorGfx_HARD_DESK - }, { - DECOR_SMALL_CHAIR, - _("SMALL CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_SMALL_CHAIR, - DecorGfx_SMALL_CHAIR - }, { - DECOR_POKEMON_CHAIR, - _("POKéMON CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_POKEMON_CHAIR, - DecorGfx_POKEMON_CHAIR - }, { - DECOR_HEAVY_CHAIR, - _("HEAVY CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_HEAVY_CHAIR, - DecorGfx_HEAVY_CHAIR - }, { - DECOR_PRETTY_CHAIR, - _("PRETTY CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_PRETTY_CHAIR, - DecorGfx_PRETTY_CHAIR - }, { - DECOR_COMFORT_CHAIR, - _("COMFORT CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_COMFORT_CHAIR, - DecorGfx_COMFORT_CHAIR - }, { - DECOR_RAGGED_CHAIR, - _("RAGGED CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_RAGGED_CHAIR, - DecorGfx_RAGGED_CHAIR - }, { - DECOR_BRICK_CHAIR, - _("BRICK CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_BRICK_CHAIR, - DecorGfx_BRICK_CHAIR - }, { - DECOR_CAMP_CHAIR, - _("CAMP CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_CAMP_CHAIR, - DecorGfx_CAMP_CHAIR - }, { - DECOR_HARD_CHAIR, - _("HARD CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_HARD_CHAIR, - DecorGfx_HARD_CHAIR - }, { - DECOR_RED_PLANT, - _("RED PLANT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_PLANT, - 3000, - DecorDesc_RED_PLANT, - DecorGfx_RED_PLANT - }, { - DECOR_TROPICAL_PLANT, - _("TROPICAL PLANT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_PLANT, - 3000, - DecorDesc_TROPICAL_PLANT, - DecorGfx_TROPICAL_PLANT - }, { - DECOR_PRETTY_FLOWERS, - _("PRETTY FLOWERS"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_PLANT, - 3000, - DecorDesc_PRETTY_FLOWERS, - DecorGfx_PRETTY_FLOWERS - }, { - DECOR_COLORFUL_PLANT, - _("COLORFUL PLANT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_2x2, - DECORCAT_PLANT, - 5000, - DecorDesc_COLORFUL_PLANT, - DecorGfx_COLORFUL_PLANT - }, { - DECOR_BIG_PLANT, - _("BIG PLANT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_2x2, - DECORCAT_PLANT, - 5000, - DecorDesc_BIG_PLANT, - DecorGfx_BIG_PLANT - }, { - DECOR_GORGEOUS_PLANT, - _("GORGEOUS PLANT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_2x2, - DECORCAT_PLANT, - 5000, - DecorDesc_GORGEOUS_PLANT, - DecorGfx_GORGEOUS_PLANT - }, { - DECOR_RED_BRICK, - _("RED BRICK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 500, - DecorDesc_RED_BRICK, - DecorGfx_RED_BRICK - }, { - DECOR_YELLOW_BRICK, - _("YELLOW BRICK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 500, - DecorDesc_YELLOW_BRICK, - DecorGfx_YELLOW_BRICK - }, { - DECOR_BLUE_BRICK, - _("BLUE BRICK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 500, - DecorDesc_BLUE_BRICK, - DecorGfx_BLUE_BRICK - }, { - DECOR_RED_BALLOON, - _("RED BALLOON"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 500, - DecorDesc_RED_BALLOON, - DecorGfx_RED_BALLOON - }, { - DECOR_BLUE_BALLOON, - _("BLUE BALLOON"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 500, - DecorDesc_BLUE_BALLOON, - DecorGfx_BLUE_BALLOON - }, { - DECOR_YELLOW_BALLOON, - _("YELLOW BALLOON"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 500, - DecorDesc_YELLOW_BALLOON, - DecorGfx_YELLOW_BALLOON - }, { - DECOR_RED_TENT, - _("RED TENT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_ORNAMENT, - 10000, - DecorDesc_RED_TENT, - DecorGfx_RED_TENT - }, { - DECOR_BLUE_TENT, - _("BLUE TENT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_ORNAMENT, - 10000, - DecorDesc_BLUE_TENT, - DecorGfx_BLUE_TENT - }, { - DECOR_SOLID_BOARD, - _("SOLID BOARD"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 3000, - DecorDesc_SOLID_BOARD, - DecorGfx_SOLID_BOARD - }, { - DECOR_SLIDE, - _("SLIDE"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_2x4, - DECORCAT_ORNAMENT, - 8000, - DecorDesc_SLIDE, - DecorGfx_SLIDE - }, { - DECOR_FENCE_LENGTH, - _("FENCE LENGTH"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 500, - DecorDesc_FENCE_LENGTH, - DecorGfx_FENCE_LENGTH - }, { - DECOR_FENCE_WIDTH, - _("FENCE WIDTH"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 500, - DecorDesc_FENCE_WIDTH, - DecorGfx_FENCE_WIDTH - }, { - DECOR_TIRE, - _("TIRE"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_2x2, - DECORCAT_ORNAMENT, - 800, - DecorDesc_TIRE, - DecorGfx_TIRE - }, { - DECOR_STAND, - _("STAND"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_4x2, - DECORCAT_ORNAMENT, - 7000, - DecorDesc_STAND, - DecorGfx_STAND - }, { - DECOR_MUD_BALL, - _("MUD BALL"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 200, - DecorDesc_MUD_BALL, - DecorGfx_MUD_BALL - }, { - DECOR_BREAKABLE_DOOR, - _("BREAKABLE DOOR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 3000, - DecorDesc_BREAKABLE_DOOR, - DecorGfx_BREAKABLE_DOOR - }, { - DECOR_SAND_ORNAMENT, - _("SAND ORNAMENT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 3000, - DecorDesc_SAND_ORNAMENT, - DecorGfx_SAND_ORNAMENT - }, { - DECOR_SILVER_SHIELD, - _("SILVER SHIELD"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 0, - DecorDesc_SILVER_SHIELD, - DecorGfx_SILVER_SHIELD - }, { - DECOR_GOLD_SHIELD, - _("GOLD SHIELD"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 0, - DecorDesc_GOLD_SHIELD, - DecorGfx_GOLD_SHIELD - }, { - DECOR_GLASS_ORNAMENT, - _("GLASS ORNAMENT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 0, - DecorDesc_GLASS_ORNAMENT, - DecorGfx_GLASS_ORNAMENT - }, { - DECOR_TV, - _("TV"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 3000, - DecorDesc_TV, - DecorGfx_TV - }, { - DECOR_ROUND_TV, - _("ROUND TV"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 4000, - DecorDesc_ROUND_TV, - DecorGfx_ROUND_TV - }, { - DECOR_CUTE_TV, - _("CUTE TV"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 4000, - DecorDesc_CUTE_TV, - DecorGfx_CUTE_TV - }, { - DECOR_GLITTER_MAT, - _("GLITTER MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 2000, - DecorDesc_GLITTER_MAT, - DecorGfx_GLITTER_MAT - }, { - DECOR_JUMP_MAT, - _("JUMP MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 2000, - DecorDesc_JUMP_MAT, - DecorGfx_JUMP_MAT - }, { - DECOR_SPIN_MAT, - _("SPIN MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 2000, - DecorDesc_SPIN_MAT, - DecorGfx_SPIN_MAT - }, { - DECOR_C_LOW_NOTE_MAT, - _("C Low NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_C_LOW_NOTE_MAT, - DecorGfx_C_LOW_NOTE_MAT - }, { - DECOR_D_NOTE_MAT, - _("D NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_D_NOTE_MAT, - DecorGfx_D_NOTE_MAT - }, { - DECOR_E_NOTE_MAT, - _("E NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_E_NOTE_MAT, - DecorGfx_E_NOTE_MAT - }, { - DECOR_F_NOTE_MAT, - _("F NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_F_NOTE_MAT, - DecorGfx_F_NOTE_MAT - }, { - DECOR_G_NOTE_MAT, - _("G NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_G_NOTE_MAT, - DecorGfx_G_NOTE_MAT - }, { - DECOR_A_NOTE_MAT, - _("A NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_A_NOTE_MAT, - DecorGfx_A_NOTE_MAT - }, { - DECOR_B_NOTE_MAT, - _("B NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_B_NOTE_MAT, - DecorGfx_B_NOTE_MAT - }, { - DECOR_C_HIGH_NOTE_MAT, - _("C High NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_C_HIGH_NOTE_MAT, - DecorGfx_C_HIGH_NOTE_MAT - }, { - DECOR_SURF_MAT, - _("SURF MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_SURF_MAT, - DecorGfx_SURF_MAT - }, { - DECOR_THUNDER_MAT, - _("THUNDER MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_THUNDER_MAT, - DecorGfx_THUNDER_MAT - }, { - DECOR_FIRE_BLAST_MAT, - _("FIRE BLAST MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_FIRE_BLAST_MAT, - DecorGfx_FIRE_BLAST_MAT - }, { - DECOR_POWDER_SNOW_MAT, - _("POWDER SNOW MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_POWDER_SNOW_MAT, - DecorGfx_POWDER_SNOW_MAT - }, { - DECOR_ATTRACT_MAT, - _("ATTRACT MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_ATTRACT_MAT, - DecorGfx_ATTRACT_MAT - }, { - DECOR_FISSURE_MAT, - _("FISSURE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_FISSURE_MAT, - DecorGfx_FISSURE_MAT - }, { - DECOR_SPIKES_MAT, - _("SPIKES MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_SPIKES_MAT, - DecorGfx_SPIKES_MAT - }, { - DECOR_BALL_POSTER, - _("BALL POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_1x1, - DECORCAT_POSTER, - 1000, - DecorDesc_BALL_POSTER, - DecorGfx_BALL_POSTER - }, { - DECOR_GREEN_POSTER, - _("GREEN POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_1x1, - DECORCAT_POSTER, - 1000, - DecorDesc_GREEN_POSTER, - DecorGfx_GREEN_POSTER - }, { - DECOR_RED_POSTER, - _("RED POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_1x1, - DECORCAT_POSTER, - 1000, - DecorDesc_RED_POSTER, - DecorGfx_RED_POSTER - }, { - DECOR_BLUE_POSTER, - _("BLUE POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_1x1, - DECORCAT_POSTER, - 1000, - DecorDesc_BLUE_POSTER, - DecorGfx_BLUE_POSTER - }, { - DECOR_CUTE_POSTER, - _("CUTE POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_1x1, - DECORCAT_POSTER, - 1000, - DecorDesc_CUTE_POSTER, - DecorGfx_CUTE_POSTER - }, { - DECOR_PIKA_POSTER, - _("PIKA POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_2x1, - DECORCAT_POSTER, - 1500, - DecorDesc_PIKA_POSTER, - DecorGfx_PIKA_POSTER - }, { - DECOR_LONG_POSTER, - _("LONG POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_2x1, - DECORCAT_POSTER, - 1500, - DecorDesc_LONG_POSTER, - DecorGfx_LONG_POSTER - }, { - DECOR_SEA_POSTER, - _("SEA POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_2x1, - DECORCAT_POSTER, - 1500, - DecorDesc_SEA_POSTER, - DecorGfx_SEA_POSTER - }, { - DECOR_SKY_POSTER, - _("SKY POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_2x1, - DECORCAT_POSTER, - 1500, - DecorDesc_SKY_POSTER, - DecorGfx_SKY_POSTER - }, { - DECOR_KISS_POSTER, - _("KISS POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_2x1, - DECORCAT_POSTER, - 1500, - DecorDesc_KISS_POSTER, - DecorGfx_KISS_POSTER - }, { - DECOR_PICHU_DOLL, - _("PICHU DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_PICHU_DOLL, - DecorGfx_PICHU_DOLL - }, { - DECOR_PIKACHU_DOLL, - _("PIKACHU DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_PIKACHU_DOLL, - DecorGfx_PIKACHU_DOLL - }, { - DECOR_MARILL_DOLL, - _("MARILL DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_MARILL_DOLL, - DecorGfx_MARILL_DOLL - }, { - DECOR_TOGEPI_DOLL, - _("TOGEPI DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_TOGEPI_DOLL, - DecorGfx_TOGEPI_DOLL - }, { - DECOR_CYNDAQUIL_DOLL, - _("CYNDAQUIL DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_CYNDAQUIL_DOLL, - DecorGfx_CYNDAQUIL_DOLL - }, { - DECOR_CHIKORITA_DOLL, - _("CHIKORITA DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_CHIKORITA_DOLL, - DecorGfx_CHIKORITA_DOLL - }, { - DECOR_TOTODILE_DOLL, - _("TOTODILE DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_TOTODILE_DOLL, - DecorGfx_TOTODILE_DOLL - }, { - DECOR_JIGGLYPUFF_DOLL, - _("JIGGLYPUFF DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_JIGGLYPUFF_DOLL, - DecorGfx_JIGGLYPUFF_DOLL - }, { - DECOR_MEOWTH_DOLL, - _("MEOWTH DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_MEOWTH_DOLL, - DecorGfx_MEOWTH_DOLL - }, { - DECOR_CLEFAIRY_DOLL, - _("CLEFAIRY DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_CLEFAIRY_DOLL, - DecorGfx_CLEFAIRY_DOLL - }, { - DECOR_DITTO_DOLL, - _("DITTO DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_DITTO_DOLL, - DecorGfx_DITTO_DOLL - }, { - DECOR_SMOOCHUM_DOLL, - _("SMOOCHUM DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_SMOOCHUM_DOLL, - DecorGfx_SMOOCHUM_DOLL - }, { - DECOR_TREECKO_DOLL, - _("TREECKO DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_TREECKO_DOLL, - DecorGfx_TREECKO_DOLL - }, { - DECOR_TORCHIC_DOLL, - _("TORCHIC DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_TORCHIC_DOLL, - DecorGfx_TORCHIC_DOLL - }, { - DECOR_MUDKIP_DOLL, - _("MUDKIP DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_MUDKIP_DOLL, - DecorGfx_MUDKIP_DOLL - }, { - DECOR_DUSKULL_DOLL, - _("DUSKULL DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_DUSKULL_DOLL, - DecorGfx_DUSKULL_DOLL - }, { - DECOR_WYNAUT_DOLL, - _("WYNAUT DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_WYNAUT_DOLL, - DecorGfx_WYNAUT_DOLL - }, { - DECOR_BALTOY_DOLL, - _("BALTOY DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_BALTOY_DOLL, - DecorGfx_BALTOY_DOLL - }, { - DECOR_KECLEON_DOLL, - _("KECLEON DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_KECLEON_DOLL, - DecorGfx_KECLEON_DOLL - }, { - DECOR_AZURILL_DOLL, - _("AZURILL DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_AZURILL_DOLL, - DecorGfx_AZURILL_DOLL - }, { - DECOR_SKITTY_DOLL, - _("SKITTY DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_SKITTY_DOLL, - DecorGfx_SKITTY_DOLL - }, { - DECOR_SWABLU_DOLL, - _("SWABLU DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_SWABLU_DOLL, - DecorGfx_SWABLU_DOLL - }, { - DECOR_GULPIN_DOLL, - _("GULPIN DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_GULPIN_DOLL, - DecorGfx_GULPIN_DOLL - }, { - DECOR_LOTAD_DOLL, - _("LOTAD DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_LOTAD_DOLL, - DecorGfx_LOTAD_DOLL - }, { - DECOR_SEEDOT_DOLL, - _("SEEDOT DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_SEEDOT_DOLL, - DecorGfx_SEEDOT_DOLL - }, { - DECOR_PIKA_CUSHION, - _("PIKA CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_PIKA_CUSHION, - DecorGfx_PIKA_CUSHION - }, { - DECOR_ROUND_CUSHION, - _("ROUND CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_ROUND_CUSHION, - DecorGfx_ROUND_CUSHION - }, { - DECOR_KISS_CUSHION, - _("KISS CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_KISS_CUSHION, - DecorGfx_KISS_CUSHION - }, { - DECOR_ZIGZAG_CUSHION, - _("ZIGZAG CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_ZIGZAG_CUSHION, - DecorGfx_ZIGZAG_CUSHION - }, { - DECOR_SPIN_CUSHION, - _("SPIN CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_SPIN_CUSHION, - DecorGfx_SPIN_CUSHION - }, { - DECOR_DIAMOND_CUSHION, - _("DIAMOND CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_DIAMOND_CUSHION, - DecorGfx_DIAMOND_CUSHION - }, { - DECOR_BALL_CUSHION, - _("BALL CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_BALL_CUSHION, - DecorGfx_BALL_CUSHION - }, { - DECOR_GRASS_CUSHION, - _("GRASS CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_GRASS_CUSHION, - DecorGfx_GRASS_CUSHION - }, { - DECOR_FIRE_CUSHION, - _("FIRE CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_FIRE_CUSHION, - DecorGfx_FIRE_CUSHION - }, { - DECOR_WATER_CUSHION, - _("WATER CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_WATER_CUSHION, - DecorGfx_WATER_CUSHION - }, { - DECOR_SNORLAX_DOLL, - _("SNORLAX DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_SNORLAX_DOLL, - DecorGfx_SNORLAX_DOLL - }, { - DECOR_RHYDON_DOLL, - _("RHYDON DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_RHYDON_DOLL, - DecorGfx_RHYDON_DOLL - }, { - DECOR_LAPRAS_DOLL, - _("LAPRAS DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_LAPRAS_DOLL, - DecorGfx_LAPRAS_DOLL - }, { - DECOR_VENUSAUR_DOLL, - _("VENUSAUR DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_VENUSAUR_DOLL, - DecorGfx_VENUSAUR_DOLL - }, { - DECOR_CHARIZARD_DOLL, - _("CHARIZARD DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_CHARIZARD_DOLL, - DecorGfx_CHARIZARD_DOLL - }, { - DECOR_BLASTOISE_DOLL, - _("BLASTOISE DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_BLASTOISE_DOLL, - DecorGfx_BLASTOISE_DOLL - }, { - DECOR_WAILMER_DOLL, - _("WAILMER DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_WAILMER_DOLL, - DecorGfx_WAILMER_DOLL - }, { - DECOR_REGIROCK_DOLL, - _("REGIROCK DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_REGIROCK_DOLL, - DecorGfx_REGIROCK_DOLL - }, { - DECOR_REGICE_DOLL, - _("REGICE DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_REGICE_DOLL, - DecorGfx_REGICE_DOLL - }, { - DECOR_REGISTEEL_DOLL, - _("REGISTEEL DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_REGISTEEL_DOLL, - DecorGfx_REGISTEEL_DOLL} + .id = DECOR_NONE, + .name = _("SMALL DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DESK, + .price = 0, + .description = DecorDesc_SMALL_DESK, + .tiles = DecorGfx_SMALL_DESK, + }, + + [DECOR_SMALL_DESK] = + { + .id = DECOR_SMALL_DESK, + .name = _("SMALL DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DESK, + .price = 3000, + .description = DecorDesc_SMALL_DESK, + .tiles = DecorGfx_SMALL_DESK, + }, + + [DECOR_POKEMON_DESK] = + { + .id = DECOR_POKEMON_DESK, + .name = _("POKéMON DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DESK, + .price = 3000, + .description = DecorDesc_POKEMON_DESK, + .tiles = DecorGfx_POKEMON_DESK, + }, + + [DECOR_HEAVY_DESK] = + { + .id = DECOR_HEAVY_DESK, + .name = _("HEAVY DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x2, + .category = DECORCAT_DESK, + .price = 6000, + .description = DecorDesc_HEAVY_DESK, + .tiles = DecorGfx_HEAVY_DESK, + }, + + [DECOR_RAGGED_DESK] = + { + .id = DECOR_RAGGED_DESK, + .name = _("RAGGED DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x2, + .category = DECORCAT_DESK, + .price = 6000, + .description = DecorDesc_RAGGED_DESK, + .tiles = DecorGfx_RAGGED_DESK, + }, + + [DECOR_COMFORT_DESK] = + { + .id = DECOR_COMFORT_DESK, + .name = _("COMFORT DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x2, + .category = DECORCAT_DESK, + .price = 6000, + .description = DecorDesc_COMFORT_DESK, + .tiles = DecorGfx_COMFORT_DESK, + }, + + [DECOR_PRETTY_DESK] = + { + .id = DECOR_PRETTY_DESK, + .name = _("PRETTY DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_DESK, + .price = 9000, + .description = DecorDesc_PRETTY_DESK, + .tiles = DecorGfx_PRETTY_DESK, + }, + + [DECOR_BRICK_DESK] = + { + .id = DECOR_BRICK_DESK, + .name = _("BRICK DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_DESK, + .price = 9000, + .description = DecorDesc_BRICK_DESK, + .tiles = DecorGfx_BRICK_DESK, + }, + + [DECOR_CAMP_DESK] = + { + .id = DECOR_CAMP_DESK, + .name = _("CAMP DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_DESK, + .price = 9000, + .description = DecorDesc_CAMP_DESK, + .tiles = DecorGfx_CAMP_DESK, + }, + + [DECOR_HARD_DESK] = + { + .id = DECOR_HARD_DESK, + .name = _("HARD DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_DESK, + .price = 9000, + .description = DecorDesc_HARD_DESK, + .tiles = DecorGfx_HARD_DESK, + }, + + [DECOR_SMALL_CHAIR] = + { + .id = DECOR_SMALL_CHAIR, + .name = _("SMALL CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_SMALL_CHAIR, + .tiles = DecorGfx_SMALL_CHAIR, + }, + + [DECOR_POKEMON_CHAIR] = + { + .id = DECOR_POKEMON_CHAIR, + .name = _("POKéMON CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_POKEMON_CHAIR, + .tiles = DecorGfx_POKEMON_CHAIR, + }, + + [DECOR_HEAVY_CHAIR] = + { + .id = DECOR_HEAVY_CHAIR, + .name = _("HEAVY CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_HEAVY_CHAIR, + .tiles = DecorGfx_HEAVY_CHAIR, + }, + + [DECOR_PRETTY_CHAIR] = + { + .id = DECOR_PRETTY_CHAIR, + .name = _("PRETTY CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_PRETTY_CHAIR, + .tiles = DecorGfx_PRETTY_CHAIR, + }, + + [DECOR_COMFORT_CHAIR] = + { + .id = DECOR_COMFORT_CHAIR, + .name = _("COMFORT CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_COMFORT_CHAIR, + .tiles = DecorGfx_COMFORT_CHAIR, + }, + + [DECOR_RAGGED_CHAIR] = + { + .id = DECOR_RAGGED_CHAIR, + .name = _("RAGGED CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_RAGGED_CHAIR, + .tiles = DecorGfx_RAGGED_CHAIR, + }, + + [DECOR_BRICK_CHAIR] = + { + .id = DECOR_BRICK_CHAIR, + .name = _("BRICK CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_BRICK_CHAIR, + .tiles = DecorGfx_BRICK_CHAIR, + }, + + [DECOR_CAMP_CHAIR] = + { + .id = DECOR_CAMP_CHAIR, + .name = _("CAMP CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_CAMP_CHAIR, + .tiles = DecorGfx_CAMP_CHAIR, + }, + + [DECOR_HARD_CHAIR] = + { + .id = DECOR_HARD_CHAIR, + .name = _("HARD CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_HARD_CHAIR, + .tiles = DecorGfx_HARD_CHAIR, + }, + + [DECOR_RED_PLANT] = + { + .id = DECOR_RED_PLANT, + .name = _("RED PLANT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_PLANT, + .price = 3000, + .description = DecorDesc_RED_PLANT, + .tiles = DecorGfx_RED_PLANT, + }, + + [DECOR_TROPICAL_PLANT] = + { + .id = DECOR_TROPICAL_PLANT, + .name = _("TROPICAL PLANT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_PLANT, + .price = 3000, + .description = DecorDesc_TROPICAL_PLANT, + .tiles = DecorGfx_TROPICAL_PLANT, + }, + + [DECOR_PRETTY_FLOWERS] = + { + .id = DECOR_PRETTY_FLOWERS, + .name = _("PRETTY FLOWERS"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_PLANT, + .price = 3000, + .description = DecorDesc_PRETTY_FLOWERS, + .tiles = DecorGfx_PRETTY_FLOWERS, + }, + + [DECOR_COLORFUL_PLANT] = + { + .id = DECOR_COLORFUL_PLANT, + .name = _("COLORFUL PLANT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_2x2, + .category = DECORCAT_PLANT, + .price = 5000, + .description = DecorDesc_COLORFUL_PLANT, + .tiles = DecorGfx_COLORFUL_PLANT, + }, + + [DECOR_BIG_PLANT] = + { + .id = DECOR_BIG_PLANT, + .name = _("BIG PLANT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_2x2, + .category = DECORCAT_PLANT, + .price = 5000, + .description = DecorDesc_BIG_PLANT, + .tiles = DecorGfx_BIG_PLANT, + }, + + [DECOR_GORGEOUS_PLANT] = + { + .id = DECOR_GORGEOUS_PLANT, + .name = _("GORGEOUS PLANT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_2x2, + .category = DECORCAT_PLANT, + .price = 5000, + .description = DecorDesc_GORGEOUS_PLANT, + .tiles = DecorGfx_GORGEOUS_PLANT, + }, + + [DECOR_RED_BRICK] = + { + .id = DECOR_RED_BRICK, + .name = _("RED BRICK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_RED_BRICK, + .tiles = DecorGfx_RED_BRICK, + }, + + [DECOR_YELLOW_BRICK] = + { + .id = DECOR_YELLOW_BRICK, + .name = _("YELLOW BRICK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_YELLOW_BRICK, + .tiles = DecorGfx_YELLOW_BRICK, + }, + + [DECOR_BLUE_BRICK] = + { + .id = DECOR_BLUE_BRICK, + .name = _("BLUE BRICK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_BLUE_BRICK, + .tiles = DecorGfx_BLUE_BRICK, + }, + + [DECOR_RED_BALLOON] = + { + .id = DECOR_RED_BALLOON, + .name = _("RED BALLOON"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_RED_BALLOON, + .tiles = DecorGfx_RED_BALLOON, + }, + + [DECOR_BLUE_BALLOON] = + { + .id = DECOR_BLUE_BALLOON, + .name = _("BLUE BALLOON"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_BLUE_BALLOON, + .tiles = DecorGfx_BLUE_BALLOON, + }, + + [DECOR_YELLOW_BALLOON] = + { + .id = DECOR_YELLOW_BALLOON, + .name = _("YELLOW BALLOON"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_YELLOW_BALLOON, + .tiles = DecorGfx_YELLOW_BALLOON, + }, + + [DECOR_RED_TENT] = + { + .id = DECOR_RED_TENT, + .name = _("RED TENT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_ORNAMENT, + .price = 10000, + .description = DecorDesc_RED_TENT, + .tiles = DecorGfx_RED_TENT, + }, + + [DECOR_BLUE_TENT] = + { + .id = DECOR_BLUE_TENT, + .name = _("BLUE TENT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_ORNAMENT, + .price = 10000, + .description = DecorDesc_BLUE_TENT, + .tiles = DecorGfx_BLUE_TENT, + }, + + [DECOR_SOLID_BOARD] = + { + .id = DECOR_SOLID_BOARD, + .name = _("SOLID BOARD"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 3000, + .description = DecorDesc_SOLID_BOARD, + .tiles = DecorGfx_SOLID_BOARD, + }, + + [DECOR_SLIDE] = + { + .id = DECOR_SLIDE, + .name = _("SLIDE"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_2x4, + .category = DECORCAT_ORNAMENT, + .price = 8000, + .description = DecorDesc_SLIDE, + .tiles = DecorGfx_SLIDE, + }, + + [DECOR_FENCE_LENGTH] = + { + .id = DECOR_FENCE_LENGTH, + .name = _("FENCE LENGTH"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_FENCE_LENGTH, + .tiles = DecorGfx_FENCE_LENGTH, + }, + + [DECOR_FENCE_WIDTH] = + { + .id = DECOR_FENCE_WIDTH, + .name = _("FENCE WIDTH"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_FENCE_WIDTH, + .tiles = DecorGfx_FENCE_WIDTH, + }, + + [DECOR_TIRE] = + { + .id = DECOR_TIRE, + .name = _("TIRE"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_2x2, + .category = DECORCAT_ORNAMENT, + .price = 800, + .description = DecorDesc_TIRE, + .tiles = DecorGfx_TIRE, + }, + + [DECOR_STAND] = + { + .id = DECOR_STAND, + .name = _("STAND"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_4x2, + .category = DECORCAT_ORNAMENT, + .price = 7000, + .description = DecorDesc_STAND, + .tiles = DecorGfx_STAND, + }, + + [DECOR_MUD_BALL] = + { + .id = DECOR_MUD_BALL, + .name = _("MUD BALL"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 200, + .description = DecorDesc_MUD_BALL, + .tiles = DecorGfx_MUD_BALL, + }, + + [DECOR_BREAKABLE_DOOR] = + { + .id = DECOR_BREAKABLE_DOOR, + .name = _("BREAKABLE DOOR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 3000, + .description = DecorDesc_BREAKABLE_DOOR, + .tiles = DecorGfx_BREAKABLE_DOOR, + }, + + [DECOR_SAND_ORNAMENT] = + { + .id = DECOR_SAND_ORNAMENT, + .name = _("SAND ORNAMENT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 3000, + .description = DecorDesc_SAND_ORNAMENT, + .tiles = DecorGfx_SAND_ORNAMENT, + }, + + [DECOR_SILVER_SHIELD] = + { + .id = DECOR_SILVER_SHIELD, + .name = _("SILVER SHIELD"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 0, + .description = DecorDesc_SILVER_SHIELD, + .tiles = DecorGfx_SILVER_SHIELD, + }, + + [DECOR_GOLD_SHIELD] = + { + .id = DECOR_GOLD_SHIELD, + .name = _("GOLD SHIELD"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 0, + .description = DecorDesc_GOLD_SHIELD, + .tiles = DecorGfx_GOLD_SHIELD, + }, + + [DECOR_GLASS_ORNAMENT] = + { + .id = DECOR_GLASS_ORNAMENT, + .name = _("GLASS ORNAMENT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 0, + .description = DecorDesc_GLASS_ORNAMENT, + .tiles = DecorGfx_GLASS_ORNAMENT, + }, + + [DECOR_TV] = + { + .id = DECOR_TV, + .name = _("TV"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 3000, + .description = DecorDesc_TV, + .tiles = DecorGfx_TV, + }, + + [DECOR_ROUND_TV] = + { + .id = DECOR_ROUND_TV, + .name = _("ROUND TV"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 4000, + .description = DecorDesc_ROUND_TV, + .tiles = DecorGfx_ROUND_TV, + }, + + [DECOR_CUTE_TV] = + { + .id = DECOR_CUTE_TV, + .name = _("CUTE TV"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 4000, + .description = DecorDesc_CUTE_TV, + .tiles = DecorGfx_CUTE_TV, + }, + + [DECOR_GLITTER_MAT] = + { + .id = DECOR_GLITTER_MAT, + .name = _("GLITTER MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 2000, + .description = DecorDesc_GLITTER_MAT, + .tiles = DecorGfx_GLITTER_MAT, + }, + + [DECOR_JUMP_MAT] = + { + .id = DECOR_JUMP_MAT, + .name = _("JUMP MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 2000, + .description = DecorDesc_JUMP_MAT, + .tiles = DecorGfx_JUMP_MAT, + }, + + [DECOR_SPIN_MAT] = + { + .id = DECOR_SPIN_MAT, + .name = _("SPIN MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 2000, + .description = DecorDesc_SPIN_MAT, + .tiles = DecorGfx_SPIN_MAT, + }, + + [DECOR_C_LOW_NOTE_MAT] = + { + .id = DECOR_C_LOW_NOTE_MAT, + .name = _("C Low NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_C_LOW_NOTE_MAT, + .tiles = DecorGfx_C_LOW_NOTE_MAT, + }, + + [DECOR_D_NOTE_MAT] = + { + .id = DECOR_D_NOTE_MAT, + .name = _("D NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_D_NOTE_MAT, + .tiles = DecorGfx_D_NOTE_MAT, + }, + + [DECOR_E_NOTE_MAT] = + { + .id = DECOR_E_NOTE_MAT, + .name = _("E NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_E_NOTE_MAT, + .tiles = DecorGfx_E_NOTE_MAT, + }, + + [DECOR_F_NOTE_MAT] = + { + .id = DECOR_F_NOTE_MAT, + .name = _("F NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_F_NOTE_MAT, + .tiles = DecorGfx_F_NOTE_MAT, + }, + + [DECOR_G_NOTE_MAT] = + { + .id = DECOR_G_NOTE_MAT, + .name = _("G NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_G_NOTE_MAT, + .tiles = DecorGfx_G_NOTE_MAT, + }, + + [DECOR_A_NOTE_MAT] = + { + .id = DECOR_A_NOTE_MAT, + .name = _("A NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_A_NOTE_MAT, + .tiles = DecorGfx_A_NOTE_MAT, + }, + + [DECOR_B_NOTE_MAT] = + { + .id = DECOR_B_NOTE_MAT, + .name = _("B NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_B_NOTE_MAT, + .tiles = DecorGfx_B_NOTE_MAT, + }, + + [DECOR_C_HIGH_NOTE_MAT] = + { + .id = DECOR_C_HIGH_NOTE_MAT, + .name = _("C High NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_C_HIGH_NOTE_MAT, + .tiles = DecorGfx_C_HIGH_NOTE_MAT, + }, + + [DECOR_SURF_MAT] = + { + .id = DECOR_SURF_MAT, + .name = _("SURF MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_SURF_MAT, + .tiles = DecorGfx_SURF_MAT, + }, + + [DECOR_THUNDER_MAT] = + { + .id = DECOR_THUNDER_MAT, + .name = _("THUNDER MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_THUNDER_MAT, + .tiles = DecorGfx_THUNDER_MAT, + }, + + [DECOR_FIRE_BLAST_MAT] = + { + .id = DECOR_FIRE_BLAST_MAT, + .name = _("FIRE BLAST MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_FIRE_BLAST_MAT, + .tiles = DecorGfx_FIRE_BLAST_MAT, + }, + + [DECOR_POWDER_SNOW_MAT] = + { + .id = DECOR_POWDER_SNOW_MAT, + .name = _("POWDER SNOW MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_POWDER_SNOW_MAT, + .tiles = DecorGfx_POWDER_SNOW_MAT, + }, + + [DECOR_ATTRACT_MAT] = + { + .id = DECOR_ATTRACT_MAT, + .name = _("ATTRACT MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_ATTRACT_MAT, + .tiles = DecorGfx_ATTRACT_MAT, + }, + + [DECOR_FISSURE_MAT] = + { + .id = DECOR_FISSURE_MAT, + .name = _("FISSURE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_FISSURE_MAT, + .tiles = DecorGfx_FISSURE_MAT, + }, + + [DECOR_SPIKES_MAT] = + { + .id = DECOR_SPIKES_MAT, + .name = _("SPIKES MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_SPIKES_MAT, + .tiles = DecorGfx_SPIKES_MAT, + }, + + [DECOR_BALL_POSTER] = + { + .id = DECOR_BALL_POSTER, + .name = _("BALL POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_POSTER, + .price = 1000, + .description = DecorDesc_BALL_POSTER, + .tiles = DecorGfx_BALL_POSTER, + }, + + [DECOR_GREEN_POSTER] = + { + .id = DECOR_GREEN_POSTER, + .name = _("GREEN POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_POSTER, + .price = 1000, + .description = DecorDesc_GREEN_POSTER, + .tiles = DecorGfx_GREEN_POSTER, + }, + + [DECOR_RED_POSTER] = + { + .id = DECOR_RED_POSTER, + .name = _("RED POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_POSTER, + .price = 1000, + .description = DecorDesc_RED_POSTER, + .tiles = DecorGfx_RED_POSTER, + }, + + [DECOR_BLUE_POSTER] = + { + .id = DECOR_BLUE_POSTER, + .name = _("BLUE POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_POSTER, + .price = 1000, + .description = DecorDesc_BLUE_POSTER, + .tiles = DecorGfx_BLUE_POSTER, + }, + + [DECOR_CUTE_POSTER] = + { + .id = DECOR_CUTE_POSTER, + .name = _("CUTE POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_POSTER, + .price = 1000, + .description = DecorDesc_CUTE_POSTER, + .tiles = DecorGfx_CUTE_POSTER, + }, + + [DECOR_PIKA_POSTER] = + { + .id = DECOR_PIKA_POSTER, + .name = _("PIKA POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_2x1, + .category = DECORCAT_POSTER, + .price = 1500, + .description = DecorDesc_PIKA_POSTER, + .tiles = DecorGfx_PIKA_POSTER, + }, + + [DECOR_LONG_POSTER] = + { + .id = DECOR_LONG_POSTER, + .name = _("LONG POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_2x1, + .category = DECORCAT_POSTER, + .price = 1500, + .description = DecorDesc_LONG_POSTER, + .tiles = DecorGfx_LONG_POSTER, + }, + + [DECOR_SEA_POSTER] = + { + .id = DECOR_SEA_POSTER, + .name = _("SEA POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_2x1, + .category = DECORCAT_POSTER, + .price = 1500, + .description = DecorDesc_SEA_POSTER, + .tiles = DecorGfx_SEA_POSTER, + }, + + [DECOR_SKY_POSTER] = + { + .id = DECOR_SKY_POSTER, + .name = _("SKY POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_2x1, + .category = DECORCAT_POSTER, + .price = 1500, + .description = DecorDesc_SKY_POSTER, + .tiles = DecorGfx_SKY_POSTER, + }, + + [DECOR_KISS_POSTER] = + { + .id = DECOR_KISS_POSTER, + .name = _("KISS POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_2x1, + .category = DECORCAT_POSTER, + .price = 1500, + .description = DecorDesc_KISS_POSTER, + .tiles = DecorGfx_KISS_POSTER, + }, + + [DECOR_PICHU_DOLL] = + { + .id = DECOR_PICHU_DOLL, + .name = _("PICHU DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_PICHU_DOLL, + .tiles = DecorGfx_PICHU_DOLL, + }, + + [DECOR_PIKACHU_DOLL] = + { + .id = DECOR_PIKACHU_DOLL, + .name = _("PIKACHU DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_PIKACHU_DOLL, + .tiles = DecorGfx_PIKACHU_DOLL, + }, + + [DECOR_MARILL_DOLL] = + { + .id = DECOR_MARILL_DOLL, + .name = _("MARILL DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_MARILL_DOLL, + .tiles = DecorGfx_MARILL_DOLL, + }, + + [DECOR_TOGEPI_DOLL] = + { + .id = DECOR_TOGEPI_DOLL, + .name = _("TOGEPI DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_TOGEPI_DOLL, + .tiles = DecorGfx_TOGEPI_DOLL, + }, + + [DECOR_CYNDAQUIL_DOLL] = + { + .id = DECOR_CYNDAQUIL_DOLL, + .name = _("CYNDAQUIL DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_CYNDAQUIL_DOLL, + .tiles = DecorGfx_CYNDAQUIL_DOLL, + }, + + [DECOR_CHIKORITA_DOLL] = + { + .id = DECOR_CHIKORITA_DOLL, + .name = _("CHIKORITA DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_CHIKORITA_DOLL, + .tiles = DecorGfx_CHIKORITA_DOLL, + }, + + [DECOR_TOTODILE_DOLL] = + { + .id = DECOR_TOTODILE_DOLL, + .name = _("TOTODILE DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_TOTODILE_DOLL, + .tiles = DecorGfx_TOTODILE_DOLL, + }, + + [DECOR_JIGGLYPUFF_DOLL] = + { + .id = DECOR_JIGGLYPUFF_DOLL, + .name = _("JIGGLYPUFF DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_JIGGLYPUFF_DOLL, + .tiles = DecorGfx_JIGGLYPUFF_DOLL, + }, + + [DECOR_MEOWTH_DOLL] = + { + .id = DECOR_MEOWTH_DOLL, + .name = _("MEOWTH DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_MEOWTH_DOLL, + .tiles = DecorGfx_MEOWTH_DOLL, + }, + + [DECOR_CLEFAIRY_DOLL] = + { + .id = DECOR_CLEFAIRY_DOLL, + .name = _("CLEFAIRY DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_CLEFAIRY_DOLL, + .tiles = DecorGfx_CLEFAIRY_DOLL, + }, + + [DECOR_DITTO_DOLL] = + { + .id = DECOR_DITTO_DOLL, + .name = _("DITTO DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_DITTO_DOLL, + .tiles = DecorGfx_DITTO_DOLL, + }, + + [DECOR_SMOOCHUM_DOLL] = + { + .id = DECOR_SMOOCHUM_DOLL, + .name = _("SMOOCHUM DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_SMOOCHUM_DOLL, + .tiles = DecorGfx_SMOOCHUM_DOLL, + }, + + [DECOR_TREECKO_DOLL] = + { + .id = DECOR_TREECKO_DOLL, + .name = _("TREECKO DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_TREECKO_DOLL, + .tiles = DecorGfx_TREECKO_DOLL, + }, + + [DECOR_TORCHIC_DOLL] = + { + .id = DECOR_TORCHIC_DOLL, + .name = _("TORCHIC DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_TORCHIC_DOLL, + .tiles = DecorGfx_TORCHIC_DOLL, + }, + + [DECOR_MUDKIP_DOLL] = + { + .id = DECOR_MUDKIP_DOLL, + .name = _("MUDKIP DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_MUDKIP_DOLL, + .tiles = DecorGfx_MUDKIP_DOLL, + }, + + [DECOR_DUSKULL_DOLL] = + { + .id = DECOR_DUSKULL_DOLL, + .name = _("DUSKULL DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_DUSKULL_DOLL, + .tiles = DecorGfx_DUSKULL_DOLL, + }, + + [DECOR_WYNAUT_DOLL] = + { + .id = DECOR_WYNAUT_DOLL, + .name = _("WYNAUT DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_WYNAUT_DOLL, + .tiles = DecorGfx_WYNAUT_DOLL, + }, + + [DECOR_BALTOY_DOLL] = + { + .id = DECOR_BALTOY_DOLL, + .name = _("BALTOY DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_BALTOY_DOLL, + .tiles = DecorGfx_BALTOY_DOLL, + }, + + [DECOR_KECLEON_DOLL] = + { + .id = DECOR_KECLEON_DOLL, + .name = _("KECLEON DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_KECLEON_DOLL, + .tiles = DecorGfx_KECLEON_DOLL, + }, + + [DECOR_AZURILL_DOLL] = + { + .id = DECOR_AZURILL_DOLL, + .name = _("AZURILL DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_AZURILL_DOLL, + .tiles = DecorGfx_AZURILL_DOLL, + }, + + [DECOR_SKITTY_DOLL] = + { + .id = DECOR_SKITTY_DOLL, + .name = _("SKITTY DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_SKITTY_DOLL, + .tiles = DecorGfx_SKITTY_DOLL, + }, + + [DECOR_SWABLU_DOLL] = + { + .id = DECOR_SWABLU_DOLL, + .name = _("SWABLU DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_SWABLU_DOLL, + .tiles = DecorGfx_SWABLU_DOLL, + }, + + [DECOR_GULPIN_DOLL] = + { + .id = DECOR_GULPIN_DOLL, + .name = _("GULPIN DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_GULPIN_DOLL, + .tiles = DecorGfx_GULPIN_DOLL, + }, + + [DECOR_LOTAD_DOLL] = + { + .id = DECOR_LOTAD_DOLL, + .name = _("LOTAD DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_LOTAD_DOLL, + .tiles = DecorGfx_LOTAD_DOLL, + }, + + [DECOR_SEEDOT_DOLL] = + { + .id = DECOR_SEEDOT_DOLL, + .name = _("SEEDOT DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_SEEDOT_DOLL, + .tiles = DecorGfx_SEEDOT_DOLL, + }, + + [DECOR_PIKA_CUSHION] = + { + .id = DECOR_PIKA_CUSHION, + .name = _("PIKA CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_PIKA_CUSHION, + .tiles = DecorGfx_PIKA_CUSHION, + }, + + [DECOR_ROUND_CUSHION] = + { + .id = DECOR_ROUND_CUSHION, + .name = _("ROUND CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_ROUND_CUSHION, + .tiles = DecorGfx_ROUND_CUSHION, + }, + + [DECOR_KISS_CUSHION] = + { + .id = DECOR_KISS_CUSHION, + .name = _("KISS CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_KISS_CUSHION, + .tiles = DecorGfx_KISS_CUSHION, + }, + + [DECOR_ZIGZAG_CUSHION] = + { + .id = DECOR_ZIGZAG_CUSHION, + .name = _("ZIGZAG CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_ZIGZAG_CUSHION, + .tiles = DecorGfx_ZIGZAG_CUSHION, + }, + + [DECOR_SPIN_CUSHION] = + { + .id = DECOR_SPIN_CUSHION, + .name = _("SPIN CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_SPIN_CUSHION, + .tiles = DecorGfx_SPIN_CUSHION, + }, + + [DECOR_DIAMOND_CUSHION] = + { + .id = DECOR_DIAMOND_CUSHION, + .name = _("DIAMOND CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_DIAMOND_CUSHION, + .tiles = DecorGfx_DIAMOND_CUSHION, + }, + + [DECOR_BALL_CUSHION] = + { + .id = DECOR_BALL_CUSHION, + .name = _("BALL CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_BALL_CUSHION, + .tiles = DecorGfx_BALL_CUSHION, + }, + + [DECOR_GRASS_CUSHION] = + { + .id = DECOR_GRASS_CUSHION, + .name = _("GRASS CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_GRASS_CUSHION, + .tiles = DecorGfx_GRASS_CUSHION, + }, + + [DECOR_FIRE_CUSHION] = + { + .id = DECOR_FIRE_CUSHION, + .name = _("FIRE CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_FIRE_CUSHION, + .tiles = DecorGfx_FIRE_CUSHION, + }, + + [DECOR_WATER_CUSHION] = + { + .id = DECOR_WATER_CUSHION, + .name = _("WATER CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_WATER_CUSHION, + .tiles = DecorGfx_WATER_CUSHION, + }, + + [DECOR_SNORLAX_DOLL] = + { + .id = DECOR_SNORLAX_DOLL, + .name = _("SNORLAX DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_SNORLAX_DOLL, + .tiles = DecorGfx_SNORLAX_DOLL, + }, + + [DECOR_RHYDON_DOLL] = + { + .id = DECOR_RHYDON_DOLL, + .name = _("RHYDON DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_RHYDON_DOLL, + .tiles = DecorGfx_RHYDON_DOLL, + }, + + [DECOR_LAPRAS_DOLL] = + { + .id = DECOR_LAPRAS_DOLL, + .name = _("LAPRAS DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_LAPRAS_DOLL, + .tiles = DecorGfx_LAPRAS_DOLL, + }, + + [DECOR_VENUSAUR_DOLL] = + { + .id = DECOR_VENUSAUR_DOLL, + .name = _("VENUSAUR DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_VENUSAUR_DOLL, + .tiles = DecorGfx_VENUSAUR_DOLL, + }, + + [DECOR_CHARIZARD_DOLL] = + { + .id = DECOR_CHARIZARD_DOLL, + .name = _("CHARIZARD DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_CHARIZARD_DOLL, + .tiles = DecorGfx_CHARIZARD_DOLL, + }, + + [DECOR_BLASTOISE_DOLL] = + { + .id = DECOR_BLASTOISE_DOLL, + .name = _("BLASTOISE DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_BLASTOISE_DOLL, + .tiles = DecorGfx_BLASTOISE_DOLL, + }, + + [DECOR_WAILMER_DOLL] = + { + .id = DECOR_WAILMER_DOLL, + .name = _("WAILMER DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_WAILMER_DOLL, + .tiles = DecorGfx_WAILMER_DOLL, + }, + + [DECOR_REGIROCK_DOLL] = + { + .id = DECOR_REGIROCK_DOLL, + .name = _("REGIROCK DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_REGIROCK_DOLL, + .tiles = DecorGfx_REGIROCK_DOLL, + }, + + [DECOR_REGICE_DOLL] = + { + .id = DECOR_REGICE_DOLL, + .name = _("REGICE DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_REGICE_DOLL, + .tiles = DecorGfx_REGICE_DOLL, + }, + + [DECOR_REGISTEEL_DOLL] = + { + .id = DECOR_REGISTEEL_DOLL, + .name = _("REGISTEEL DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_REGISTEEL_DOLL, + .tiles = DecorGfx_REGISTEEL_DOLL, + } }; From 0ca76fc179067ed231c6d99abc0e29b4536422b3 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 3 Jan 2021 01:34:12 -0500 Subject: [PATCH 160/177] Some decoration labels, use constant for tileset size --- src/data/decoration/tilemaps.h | 171 ++++++++++++++++++--------------- src/data/decoration/tiles.h | 2 +- src/decoration.c | 16 +-- 3 files changed, 100 insertions(+), 89 deletions(-) diff --git a/src/data/decoration/tilemaps.h b/src/data/decoration/tilemaps.h index 12fe31dc08..eebb3acb25 100644 --- a/src/data/decoration/tilemaps.h +++ b/src/data/decoration/tilemaps.h @@ -1,37 +1,37 @@ -const u8 Unknown_085A6FB0[] = { +static const u8 sDecorTilemap_1x1_Tiles[] = { 0x00, 0x01, 0x02, 0x03 }; -const u8 Unknown_085A6FB4[] = { +static const u8 sDecorTilemap_3x1_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d }; -const u8 Unknown_085A6FC0[] = { +static const u8 sDecorTilemap_2x2_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; -const u8 Unknown_085A6FD0[] = { +static const u8 sDecorTilemap_1x3_Tiles[] = { 0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0c, 0x0d, 0x10, 0x11, 0x14, 0x15 }; -const u8 Unknown_085A6FDC[] = { +static const u8 sDecorTilemap_2x1_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; -const u8 Unknown_085A6FE4[] = { +static const u8 sDecorTilemap_4x2_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; -const u8 Unknown_085A7004[] = { +static const u8 sDecorTilemap_3x3_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, @@ -40,60 +40,60 @@ const u8 Unknown_085A7004[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d }; -const u8 Unknown_085A7028[] = { +static const u8 sDecorTilemap_3x2_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d }; -const u8 Unknown_085A7040[] = { +static const u8 sDecorTilemap_1x1_Y[] = { 0x00, 0x00, 0x00, 0x00 }; -const u8 Unknown_085A7044[] = { +static const u8 sDecorTilemap_2x1_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 }; -const u8 Unknown_085A704C[] = { +static const u8 sDecorTilemap_3x1_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02 }; -const u8 Unknown_085A7058[] = { +static const u8 sDecorTilemap_4x2_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07 }; -const u8 Unknown_085A7078[] = { +static const u8 sDecorTilemap_2x2_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03 }; -const u8 Unknown_085A7088[] = { +static const u8 sDecorTilemap_1x2_Y[] = { 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01 }; -const u8 Unknown_085A7090[] = { +static const u8 sDecorTilemap_1x3_Y[] = { 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02 }; -const u8 Unknown_085A709C[] = { +static const u8 sDecorTilemap_2x4_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x06, 0x06, 0x07, 0x07 }; -const u8 Unknown_085A70BC[] = { +static const u8 sDecorTilemap_3x3_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, @@ -102,60 +102,60 @@ const u8 Unknown_085A70BC[] = { 0x06, 0x06, 0x07, 0x07, 0x08, 0x08 }; -const u8 Unknown_085A70E0[] = { +static const u8 sDecorTilemap_3x2_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05 }; -const u8 Unknown_085A70F8[] = { +static const u8 sDecorTilemap_1x1_X[] = { 0x04, 0x05, 0x06, 0x07 }; -const u8 Unknown_085A70FC[] = { +static const u8 sDecorTilemap_2x1_X[] = { 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7104[] = { +static const u8 sDecorTilemap_3x1_X[] = { 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7110[] = { +static const u8 sDecorTilemap_4x2_X[] = { 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7130[] = { +static const u8 sDecorTilemap_2x2_X[] = { 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7140[] = { +static const u8 sDecorTilemap_1x2_X[] = { 0x04, 0x05, 0x06, 0x07, 0x04, 0x05, 0x06, 0x07 }; -const u8 Unknown_085A7148[] = { +static const u8 sDecorTilemap_1x3_X[] = { 0x04, 0x05, 0x06, 0x07, 0x04, 0x05, 0x06, 0x07, 0x04, 0x05, 0x06, 0x07 }; -const u8 Unknown_085A7154[] = { +static const u8 sDecorTilemap_2x4_X[] = { 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7174[] = { +static const u8 sDecorTilemap_3x3_X[] = { 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, @@ -164,67 +164,78 @@ const u8 Unknown_085A7174[] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7198[] = { +static const u8 sDecorTilemap_3x2_X[] = { 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07 }; -const struct { +#define DECORSIZE(width, height)((width) * (height) * 4) + +static const struct { const u8 *tiles; const u8 *y; const u8 *x; u8 size; -} gUnknown_085A71B0[] = { - { - Unknown_085A6FB0, - Unknown_085A7040, - Unknown_085A70F8, - 0x04 - }, { - Unknown_085A6FDC, - Unknown_085A7044, - Unknown_085A70FC, - 0x08 - }, { - Unknown_085A6FB4, - Unknown_085A704C, - Unknown_085A7104, - 0x0c - }, { - Unknown_085A6FE4, - Unknown_085A7058, - Unknown_085A7110, - 0x20 - }, { - Unknown_085A6FC0, - Unknown_085A7078, - Unknown_085A7130, - 0x10 - }, { - Unknown_085A6FDC, - Unknown_085A7088, - Unknown_085A7140, - 0x08 - }, { - Unknown_085A6FD0, - Unknown_085A7090, - Unknown_085A7148, - 0x0c - }, { - Unknown_085A6FE4, - Unknown_085A709C, - Unknown_085A7154, - 0x20 - }, { - Unknown_085A7004, - Unknown_085A70BC, - Unknown_085A7174, - 0x24 - }, { - Unknown_085A7028, - Unknown_085A70E0, - Unknown_085A7198, - 0x18 +} sDecorTilemaps[] = { + [DECORSHAPE_1x1] = { + .tiles = sDecorTilemap_1x1_Tiles, + .y = sDecorTilemap_1x1_Y, + .x = sDecorTilemap_1x1_X, + .size = DECORSIZE(1, 1) + }, + [DECORSHAPE_2x1] = { + .tiles = sDecorTilemap_2x1_Tiles, + .y = sDecorTilemap_2x1_Y, + .x = sDecorTilemap_2x1_X, + .size = DECORSIZE(2, 1) + }, + [DECORSHAPE_3x1] = { + .tiles = sDecorTilemap_3x1_Tiles, + .y = sDecorTilemap_3x1_Y, + .x = sDecorTilemap_3x1_X, + .size = DECORSIZE(3, 1) + }, + [DECORSHAPE_4x2] = { + .tiles = sDecorTilemap_4x2_Tiles, + .y = sDecorTilemap_4x2_Y, + .x = sDecorTilemap_4x2_X, + .size = DECORSIZE(4, 2) + }, + [DECORSHAPE_2x2] = { + .tiles = sDecorTilemap_2x2_Tiles, + .y = sDecorTilemap_2x2_Y, + .x = sDecorTilemap_2x2_X, + .size = DECORSIZE(2, 2) + }, + [DECORSHAPE_1x2] = { + .tiles = sDecorTilemap_2x1_Tiles, + .y = sDecorTilemap_1x2_Y, + .x = sDecorTilemap_1x2_X, + .size = DECORSIZE(1, 2) + }, + [DECORSHAPE_1x3] = { + .tiles = sDecorTilemap_1x3_Tiles, + .y = sDecorTilemap_1x3_Y, + .x = sDecorTilemap_1x3_X, + .size = DECORSIZE(1, 3) + }, + [DECORSHAPE_2x4] = { + .tiles = sDecorTilemap_4x2_Tiles, + .y = sDecorTilemap_2x4_Y, + .x = sDecorTilemap_2x4_X, + .size = DECORSIZE(2, 4) + }, + [DECORSHAPE_3x3] = { + .tiles = sDecorTilemap_3x3_Tiles, + .y = sDecorTilemap_3x3_Y, + .x = sDecorTilemap_3x3_X, + .size = DECORSIZE(3, 3) + }, + [DECORSHAPE_3x2] = { + .tiles = sDecorTilemap_3x2_Tiles, + .y = sDecorTilemap_3x2_Y, + .x = sDecorTilemap_3x2_X, + .size = DECORSIZE(3, 2) }}; diff --git a/src/data/decoration/tiles.h b/src/data/decoration/tiles.h index de5c43575b..1b25da3d4d 100644 --- a/src/data/decoration/tiles.h +++ b/src/data/decoration/tiles.h @@ -1,4 +1,4 @@ -#define DECOR_TILE(name) (METATILE_SecretBase_##name - 0x200) +#define DECOR_TILE(name) (METATILE_SecretBase_##name - NUM_TILES_IN_PRIMARY) const u16 DecorGfx_SMALL_DESK[] = { DECOR_TILE(SmallDesk) diff --git a/src/decoration.c b/src/decoration.c index 74dbacdf91..b97ab43215 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1210,7 +1210,7 @@ static void ShowDecorationOnMap_(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight, for (i = 0; i < decWidth; i++) { x = mapX + i; - behavior = GetBehaviorByMetatileId(0x200 + gDecorations[decoration].tiles[j * decWidth + i]); + behavior = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + gDecorations[decoration].tiles[j * decWidth + i]); if (MetatileBehavior_IsSecretBaseImpassable(behavior) == TRUE || (gDecorations[decoration].permission != DECORPERM_PASS_FLOOR && (behavior >> METATILE_ELEVATION_SHIFT))) impassableFlag = METATILE_COLLISION_MASK; else @@ -1224,9 +1224,9 @@ static void ShowDecorationOnMap_(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight, elevation = GetDecorationElevation(gDecorations[decoration].id, j * decWidth + i); if (elevation != 0xFFFF) - MapGridSetMetatileEntryAt(x, y, (gDecorations[decoration].tiles[j * decWidth + i] + (0x200 | overlapsWall)) | impassableFlag | elevation); + MapGridSetMetatileEntryAt(x, y, (gDecorations[decoration].tiles[j * decWidth + i] + (NUM_TILES_IN_PRIMARY | overlapsWall)) | impassableFlag | elevation); else - MapGridSetMetatileIdAt(x, y, (gDecorations[decoration].tiles[j * decWidth + i] + (0x200 | overlapsWall)) | impassableFlag); + MapGridSetMetatileIdAt(x, y, (gDecorations[decoration].tiles[j * decWidth + i] + (NUM_TILES_IN_PRIMARY | overlapsWall)) | impassableFlag); } } } @@ -1524,7 +1524,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(0x200 + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ELEVATION_MASK; + behaviorBy = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ELEVATION_MASK; if (!IsFloorOrBoardAndHole(behaviorAt, decoration)) return FALSE; @@ -1545,7 +1545,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(0x200 + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ELEVATION_MASK; + behaviorBy = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ELEVATION_MASK; if (!MetatileBehavior_IsNormal(behaviorAt) && !IsNonBlockNonElevated(behaviorAt, behaviorBy)) return FALSE; @@ -1562,7 +1562,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(0x200 + decoration->tiles[j]) & METATILE_ELEVATION_MASK; + behaviorBy = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + decoration->tiles[j]) & METATILE_ELEVATION_MASK; if (!MetatileBehavior_IsNormal(behaviorAt) && !MetatileBehavior_IsSecretBaseNorthWall(behaviorAt)) return FALSE; @@ -1971,9 +1971,9 @@ static void SetDecorSelectionMetatiles(struct PlaceDecorationGraphicsDataBuffer u8 shape; shape = data->decoration->shape; - for (i = 0; i < gUnknown_085A71B0[shape].size; i++) + for (i = 0; i < sDecorTilemaps[shape].size; i++) { - data->tiles[gUnknown_085A71B0[shape].tiles[i]] = GetMetatile(data->decoration->tiles[gUnknown_085A71B0[shape].y[i]] * 8 + gUnknown_085A71B0[shape].x[i]); + data->tiles[sDecorTilemaps[shape].tiles[i]] = GetMetatile(data->decoration->tiles[sDecorTilemaps[shape].y[i]] * 8 + sDecorTilemaps[shape].x[i]); } } From 09fc94677b52cabd8a814df2f42383ad064f7948 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 4 Jan 2021 19:39:10 -0300 Subject: [PATCH 161/177] Updated the bag flickering fix Originally submitted by MEATLOAF#4302 --- docs/bugs_and_glitches.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 285718598b..07955ecd5f 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -89,10 +89,10 @@ Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/p ```diff ... { -- RemoveBagItemIconSprite(1 ^ gBagMenu->unk81B_1); -+ HideBagItemIconSprite(gBagMenu->unk81B_1 ^ 1); -+ RemoveBagItemIconSprite(gBagMenu->unk81B_1); - if (a != -2) +- RemoveBagItemIconSprite(1 ^ gBagMenu->itemIconSlot); ++ HideBagItemIconSprite(gBagMenu->itemIconSlot ^ 1); ++ RemoveBagItemIconSprite(gBagMenu->itemIconSlot); + if (itemIndex != LIST_CANCEL) ... ``` From 67a656a4df326ebfcbca48c76efdc4fc39554093 Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Mon, 4 Jan 2021 16:26:28 -0800 Subject: [PATCH 162/177] Fix/document possible division by zero in ConvertScaleParam --- gflib/sprite.c | 12 +++++++++++- src/pokedex.c | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gflib/sprite.c b/gflib/sprite.c index c7e3d09a32..e36c53721c 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -1319,8 +1319,18 @@ void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnim s16 ConvertScaleParam(s16 scale) { + s16 ret; s32 val = 0x10000; - return val / scale; + // UB: possible division by zero +#ifdef UBFIX + if (scale != 0) + ret = val / scale; + else + ret = 0; +#else + ret = val / scale; +#endif //UBFIX + return ret; } void GetAffineAnimFrame(u8 matrixNum, struct Sprite *sprite, struct AffineAnimFrameCmd *frameCmd) diff --git a/src/pokedex.c b/src/pokedex.c index 691abd649f..6aa3479940 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -3042,7 +3042,7 @@ static void SpriteCB_PokedexListMonSprite(struct Sprite *sprite) if (gSineTable[sprite->data[5] + 64] != 0) var = 0x10000 / gSineTable[sprite->data[5] + 64]; else - var = 0xFFFF; + var = 0; #else var = 0x10000 / gSineTable[sprite->data[5] + 64]; #endif //UBFIX From a982e6ab8887853eb6d8776485e5b1d80bd0c645 Mon Sep 17 00:00:00 2001 From: Sierraffinity Date: Mon, 4 Jan 2021 16:39:35 -0800 Subject: [PATCH 163/177] Make div by zero fix more concice --- gflib/sprite.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/gflib/sprite.c b/gflib/sprite.c index e36c53721c..2616aeaedc 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -1319,18 +1319,13 @@ void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnim s16 ConvertScaleParam(s16 scale) { - s16 ret; s32 val = 0x10000; // UB: possible division by zero #ifdef UBFIX - if (scale != 0) - ret = val / scale; - else - ret = 0; -#else - ret = val / scale; + if (scale == 0) + return 0; #endif //UBFIX - return ret; + return val / scale; } void GetAffineAnimFrame(u8 matrixNum, struct Sprite *sprite, struct AffineAnimFrameCmd *frameCmd) From eba7933c0cdfbd9359123554315ab03f6e09deee Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 4 Jan 2021 19:50:05 -0500 Subject: [PATCH 164/177] Remove unnecessary subtraction in switch --- src/party_menu.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index f045a9a478..74a23cc939 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1221,16 +1221,16 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) } else { - switch (gPartyMenu.action - 3) + switch (gPartyMenu.action) { - case PARTY_ACTION_SOFTBOILED - 3: + case PARTY_ACTION_SOFTBOILED: if (IsSelectedMonNotEgg((u8*)slotPtr)) { PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); Task_TryUseSoftboiledOnPartyMon(taskId); } break; - case PARTY_ACTION_USE_ITEM - 3: + case PARTY_ACTION_USE_ITEM: if (IsSelectedMonNotEgg((u8*)slotPtr)) { if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) @@ -1240,7 +1240,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) gItemUseCB(taskId, Task_ClosePartyMenuAfterText); } break; - case PARTY_ACTION_MOVE_TUTOR - 3: + case PARTY_ACTION_MOVE_TUTOR: if (IsSelectedMonNotEgg((u8*)slotPtr)) { PlaySE(SE_SELECT); @@ -1248,7 +1248,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) TryTutorSelectedMon(taskId); } break; - case PARTY_ACTION_GIVE_MAILBOX_MAIL - 3: + case PARTY_ACTION_GIVE_MAILBOX_MAIL: if (IsSelectedMonNotEgg((u8*)slotPtr)) { PlaySE(SE_SELECT); @@ -1256,8 +1256,8 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) TryGiveMailToSelectedMon(taskId); } break; - case PARTY_ACTION_GIVE_ITEM - 3: - case PARTY_ACTION_GIVE_PC_ITEM - 3: + case PARTY_ACTION_GIVE_ITEM: + case PARTY_ACTION_GIVE_PC_ITEM: if (IsSelectedMonNotEgg((u8*)slotPtr)) { PlaySE(SE_SELECT); @@ -1265,23 +1265,23 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) TryGiveItemOrMailToSelectedMon(taskId); } break; - case PARTY_ACTION_SWITCH - 3: + case PARTY_ACTION_SWITCH: PlaySE(SE_SELECT); SwitchSelectedMons(taskId); break; - case PARTY_ACTION_CHOOSE_AND_CLOSE - 3: + case PARTY_ACTION_CHOOSE_AND_CLOSE: PlaySE(SE_SELECT); Task_ClosePartyMenu(taskId); break; - case PARTY_ACTION_MINIGAME - 3: + case PARTY_ACTION_MINIGAME: if (IsSelectedMonNotEgg((u8*)slotPtr)) { TryEnterMonForMinigame(taskId, (u8)*slotPtr); } break; default: - case PARTY_ACTION_ABILITY_PREVENTS - 3: - case PARTY_ACTION_SWITCHING - 3: + case PARTY_ACTION_ABILITY_PREVENTS: + case PARTY_ACTION_SWITCHING: PlaySE(SE_SELECT); Task_TryCreateSelectionWindow(taskId); break; From fe5269b875a335d1ce257e0e312061f24a3b24b2 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 4 Jan 2021 23:58:33 -0500 Subject: [PATCH 165/177] Fix sPyramindFloorNames typo --- src/start_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/start_menu.c b/src/start_menu.c index 35eb53475b..bfced18588 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -138,7 +138,7 @@ static bool8 FieldCB_ReturnToFieldStartMenu(void); static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; -static const u8* const sPyramindFloorNames[] = +static const u8* const sPyramidFloorNames[] = { gText_Floor1, gText_Floor2, @@ -383,7 +383,7 @@ static void ShowPyramidFloorWindow(void) PutWindowTilemap(sBattlePyramidFloorWindowId); DrawStdWindowFrame(sBattlePyramidFloorWindowId, FALSE); - StringCopy(gStringVar1, sPyramindFloorNames[gSaveBlock2Ptr->frontier.curChallengeBattleNum]); + StringCopy(gStringVar1, sPyramidFloorNames[gSaveBlock2Ptr->frontier.curChallengeBattleNum]); StringExpandPlaceholders(gStringVar4, gText_BattlePyramidFloor); AddTextPrinterParameterized(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL); CopyWindowToVram(sBattlePyramidFloorWindowId, 2); From fb69d97b24209cb7828a49b29ab1fb30c9baa02f Mon Sep 17 00:00:00 2001 From: SphericalIce Date: Thu, 7 Jan 2021 21:11:45 +0000 Subject: [PATCH 166/177] Use the constant for the max total of EVs --- src/field_specials.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field_specials.c b/src/field_specials.c index 51030a3878..1863a462cd 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1414,7 +1414,7 @@ void GiveLeadMonEffortRibbon(void) bool8 Special_AreLeadMonEVsMaxedOut(void) { - if (GetMonEVCount(&gPlayerParty[GetLeadMonIndex()]) >= 510) + if (GetMonEVCount(&gPlayerParty[GetLeadMonIndex()]) >= MAX_TOTAL_EVS) { return TRUE; } From 3c2a33b9b25b3bba33c29a10e66d5256b10c537d Mon Sep 17 00:00:00 2001 From: SphericalIce Date: Thu, 7 Jan 2021 22:13:14 +0000 Subject: [PATCH 167/177] Use constants for max IVs & the random IV generation flag --- include/constants/pokemon.h | 3 + src/battle_controllers.c | 2 +- src/battle_dome.c | 2 +- src/battle_main.c | 8 +- src/battle_tower.c | 10 +- src/data/battle_frontier/trainer_hill.h | 690 ++++++++++++------------ src/daycare.c | 4 +- src/egg_hatch.c | 2 +- src/field_specials.c | 2 +- src/frontier_util.c | 48 +- src/pokemon.c | 32 +- src/script_pokemon_util.c | 4 +- src/trade.c | 4 +- 13 files changed, 407 insertions(+), 404 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index bac914fec9..d4f6e56844 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -232,6 +232,9 @@ #define STATUS_PRIMARY_POKERUS 6 #define STATUS_PRIMARY_FAINTED 7 +#define MAX_PER_STAT_IVS 31 +#define MAX_IV_MASK 31 +#define USE_RANDOM_IVS (MAX_PER_STAT_IVS + 1) #define MAX_PER_STAT_EVS 255 #define MAX_TOTAL_EVS 510 #define EV_ITEM_RAISE_LIMIT 100 diff --git a/src/battle_controllers.c b/src/battle_controllers.c index a95bb2f6a8..297a8b5770 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -64,7 +64,7 @@ void SetUpBattleVarsAndBirchZigzagoon(void) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], SPECIES_ZIGZAGOON, 2, 32, 0, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gEnemyParty[0], SPECIES_ZIGZAGOON, 2, USE_RANDOM_IVS, 0, 0, OT_ID_PLAYER_ID, 0); i = 0; SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &i); } diff --git a/src/battle_dome.c b/src/battle_dome.c index 0d1bee8cf0..780721768a 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2875,7 +2875,7 @@ static u8 GetDomeTrainerMonIvs(u16 trainerId) else if (trainerId <= FRONTIER_TRAINER_TESS) // 200 - 219 fixedIv = 21; else // 220+ (- 299) - fixedIv = 31; + fixedIv = MAX_PER_STAT_IVS; return fixedIv; } diff --git a/src/battle_main.c b/src/battle_main.c index 29a8f560a1..df56dccf90 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1969,7 +1969,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir nameHash += gSpeciesNames[partyData[i].species][j]; personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; + fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); break; } @@ -1981,7 +1981,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir nameHash += gSpeciesNames[partyData[i].species][j]; personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; + fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); for (j = 0; j < MAX_MON_MOVES; j++) @@ -1999,7 +1999,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir nameHash += gSpeciesNames[partyData[i].species][j]; personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; + fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); @@ -2013,7 +2013,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir nameHash += gSpeciesNames[partyData[i].species][j]; personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; + fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); diff --git a/src/battle_tower.c b/src/battle_tower.c index ee75feeb43..218c3ef70e 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -775,7 +775,7 @@ struct { { .species = SPECIES_METANG, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .level = 42, .nature = NATURE_BRAVE, .evs = {0, 252, 252, 0, 6, 0}, @@ -783,7 +783,7 @@ struct }, { .species = SPECIES_SKARMORY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .level = 43, .nature = NATURE_IMPISH, .evs = {252, 0, 0, 0, 6, 252}, @@ -791,7 +791,7 @@ struct }, { .species = SPECIES_AGGRON, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .level = 44, .nature = NATURE_ADAMANT, .evs = {0, 252, 0, 0, 252, 6}, @@ -1854,7 +1854,7 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) } else { - fixedIV = 31; + fixedIV = MAX_PER_STAT_IVS; } level = SetFacilityPtrsGetLevel(); @@ -3295,7 +3295,7 @@ static u8 GetFrontierTrainerFixedIvs(u16 trainerId) else if (trainerId <= FRONTIER_TRAINER_TESS) // 200 - 219 fixedIv = 21; else // 220+ (- 299) - fixedIv = 31; + fixedIv = MAX_PER_STAT_IVS; return fixedIv; } diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h index 1b41024d0a..d8bd575765 100644 --- a/src/data/battle_frontier/trainer_hill.h +++ b/src/data/battle_frontier/trainer_hill.h @@ -1244,12 +1244,12 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xCB, .nickname = _("SKITTY"), @@ -2717,11 +2717,11 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .spAttackEV = 255, .otId = TRAINER_HILL_OTID, .hpIV = 30, - .attackIV = 31, + .attackIV = MAX_PER_STAT_IVS, .defenseIV = 30, - .speedIV = 31, + .speedIV = MAX_PER_STAT_IVS, .spAttackIV = 30, - .spDefenseIV = 31, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x202, .nickname = _("UNOWN"), @@ -2738,11 +2738,11 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .spAttackEV = 255, .otId = TRAINER_HILL_OTID, .hpIV = 30, - .attackIV = 31, - .defenseIV = 31, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, .speedIV = 30, .spAttackIV = 30, - .spDefenseIV = 31, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x10001, .nickname = _("UNOWN"), @@ -2921,11 +2921,11 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .spAttackEV = 255, .otId = TRAINER_HILL_OTID, .hpIV = 30, - .attackIV = 31, + .attackIV = MAX_PER_STAT_IVS, .defenseIV = 30, .speedIV = 30, .spAttackIV = 30, - .spDefenseIV = 31, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x302, .nickname = _("UNOWN"), @@ -2941,10 +2941,10 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, + .hpIV = MAX_PER_STAT_IVS, .attackIV = 30, - .defenseIV = 31, - .speedIV = 31, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, .spAttackIV = 30, .spDefenseIV = 30, .abilityNum = 0, @@ -2962,12 +2962,12 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, .defenseIV = 30, .speedIV = 30, - .spAttackIV = 31, - .spDefenseIV = 31, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x301, .nickname = _("UNOWN"), @@ -3820,12 +3820,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x32, .nickname = _("SMOOCHUM"), @@ -3842,12 +3842,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xC8, .nickname = _("AZURILL"), @@ -3864,12 +3864,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x0, .nickname = _("ELEKID"), @@ -3886,12 +3886,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x0, .nickname = _("CLEFFA"), @@ -3908,12 +3908,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .defenseEV = 130, .spDefenseEV = 130, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x84, .nickname = _("WYNAUT"), @@ -3930,12 +3930,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xF, .nickname = _("MAGBY"), @@ -4319,12 +4319,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .defenseEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x35, .nickname = _("SNORLAX"), @@ -4341,12 +4341,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("MILTANK"), @@ -4363,12 +4363,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spAttackEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x7F, .nickname = _("URSARING"), @@ -4385,12 +4385,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x80, .nickname = _("SLAKING"), @@ -4407,12 +4407,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("KANGASKHAN"), @@ -4429,12 +4429,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x80, .nickname = _("ZANGOOSE"), @@ -4464,12 +4464,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 110, .spAttackEV = 200, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0xF, .nickname = _("SLOWKING"), @@ -4486,12 +4486,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x28, .nickname = _("ESPEON"), @@ -4508,12 +4508,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0xF, .nickname = _("STARMIE"), @@ -4530,12 +4530,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xF, .nickname = _("GENGAR"), @@ -4552,12 +4552,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xF, .nickname = _("GARDEVOIR"), @@ -4574,12 +4574,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xF, .nickname = _("ALAKAZAM"), @@ -4641,12 +4641,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("SWELLOW"), @@ -4663,12 +4663,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("MACHAMP"), @@ -4685,12 +4685,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("URSARING"), @@ -4707,12 +4707,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x80, .nickname = _("KINGLER"), @@ -4729,12 +4729,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .defenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x80, .nickname = _("TYRANITAR"), @@ -4751,12 +4751,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x80, .nickname = _("DRAGONITE"), @@ -4786,12 +4786,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xA, .nickname = _("JOLTEON"), @@ -4808,12 +4808,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xA, .nickname = _("ALAKAZAM"), @@ -4830,12 +4830,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0xA, .nickname = _("STARMIE"), @@ -4852,12 +4852,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x82, .nickname = _("DUSCLOPS"), @@ -4874,12 +4874,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xD2, .nickname = _("NINETALES"), @@ -4896,12 +4896,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x85, .nickname = _("BANETTE"), @@ -4963,12 +4963,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 130, .spDefenseEV = 130, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x94, .nickname = _("WOBBUFFET"), @@ -4985,12 +4985,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 130, .spDefenseEV = 130, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x85, .nickname = _("EXPLOUD"), @@ -5007,12 +5007,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 130, .spDefenseEV = 130, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x0, .nickname = _("CROBAT"), @@ -5029,12 +5029,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0xD, .nickname = _("DUGTRIO"), @@ -5051,12 +5051,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 252, .spAttackEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x5, .nickname = _("ELECTRODE"), @@ -5073,12 +5073,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x14, .nickname = _("GENGAR"), @@ -5108,12 +5108,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 130, .spDefenseEV = 130, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x82, .nickname = _("LAPRAS"), @@ -5130,12 +5130,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 6, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x8A, .nickname = _("ABSOL"), @@ -5152,12 +5152,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .spAttackEV = 6, .spDefenseEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x0, .nickname = _("ALTARIA"), @@ -5174,12 +5174,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x14, .nickname = _("DEWGONG"), @@ -5196,12 +5196,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .spAttackEV = 6, .spDefenseEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0x14, .nickname = _("POLITOED"), @@ -5218,12 +5218,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 6, .spDefenseEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0x17, .nickname = _("MAROWAK"), @@ -5285,12 +5285,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 200, .spDefenseEV = 200, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("FORRETRESS"), @@ -5306,12 +5306,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0xC, .nickname = _("ELECTRODE"), @@ -5327,12 +5327,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x7F, .nickname = _("EXEGGUTOR"), @@ -5349,12 +5349,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 200, .spDefenseEV = 200, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x93, .nickname = _("DUSCLOPS"), @@ -5370,12 +5370,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xF, .nickname = _("NINETALES"), @@ -5391,12 +5391,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x96, .nickname = _("BANETTE"), @@ -5425,12 +5425,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x95, .nickname = _("SALAMENCE"), @@ -5446,12 +5446,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x8C, .nickname = _("GENGAR"), @@ -5467,12 +5467,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("GYARADOS"), @@ -5488,12 +5488,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("GENGAR"), @@ -5510,12 +5510,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 200, .spDefenseEV = 200, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x14, .nickname = _("DUSCLOPS"), @@ -5532,12 +5532,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 180, .spDefenseEV = 150, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x85, .nickname = _("MISDREAVUS"), diff --git a/src/daycare.c b/src/daycare.c index 511fa05513..2a1efefcc8 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -838,7 +838,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation) u8 metLocation; u8 isEgg; - CreateMon(mon, species, EGG_HATCH_LEVEL, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; @@ -865,7 +865,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare * u8 language; personality = daycare->offspringPersonality; - CreateMon(mon, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index f90441b68b..4e050ce62b 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -322,7 +322,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) pokerus = GetMonData(egg, MON_DATA_POKERUS); obedience = GetMonData(egg, MON_DATA_OBEDIENCE); - CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0); + CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); for (i = 0; i < MAX_MON_MOVES; i++) { diff --git a/src/field_specials.c b/src/field_specials.c index 1863a462cd..a6831ec5be 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1449,7 +1449,7 @@ void SetShoalItemFlag(u16 unused) void PutZigzagoonInPlayerParty(void) { u16 monData; - CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); monData = TRUE; SetMonData(&gPlayerParty[0], MON_DATA_ABILITY_NUM, &monData); monData = MOVE_TACKLE; diff --git a/src/frontier_util.c b/src/frontier_util.c index 5955d9bf72..db5f86aef8 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -129,7 +129,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_RAIKOU, .heldItem = ITEM_LUM_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MODEST, .evs = {158, 0, 252, 100, 0, 0}, .moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_REFLECT, MOVE_REST}, @@ -137,7 +137,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_LATIOS, .heldItem = ITEM_BRIGHT_POWDER, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MODEST, .evs = {252, 0, 252, 6, 0, 0}, .moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_RECOVER, MOVE_DRAGON_CLAW}, @@ -145,7 +145,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SNORLAX, .heldItem = ITEM_CHESTO_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_ADAMANT, .evs = {252, 252, 0, 0, 6, 0}, .moves = {MOVE_CURSE, MOVE_RETURN, MOVE_REST, MOVE_SHADOW_BALL}, @@ -186,7 +186,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SWAMPERT, .heldItem = ITEM_LEFTOVERS, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BRAVE, .evs = {252, 252, 6, 0, 0, 0}, .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT}, @@ -194,7 +194,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_METAGROSS, .heldItem = ITEM_QUICK_CLAW, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BRAVE, .evs = {252, 252, 6, 0, 0, 0}, .moves = {MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_PROTECT}, @@ -202,7 +202,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_LATIAS, .heldItem = ITEM_CHESTO_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MODEST, .evs = {252, 0, 252, 6, 0, 0}, .moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_REST}, @@ -243,7 +243,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_ARCANINE, .heldItem = ITEM_WHITE_HERB, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_HASTY, .evs = {6, 252, 252, 0, 0, 0}, .moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_ROAR, MOVE_PROTECT}, @@ -251,7 +251,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SLAKING, .heldItem = ITEM_SCOPE_LENS, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_HARDY, .evs = {6, 252, 0, 252, 0, 0}, .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_YAWN}, @@ -259,7 +259,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SUICUNE, .heldItem = ITEM_KINGS_ROCK, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_HASTY, .evs = {252, 0, 252, 6, 0, 0}, .moves = {MOVE_BLIZZARD, MOVE_SURF, MOVE_BITE, MOVE_CALM_MIND}, @@ -300,7 +300,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_UMBREON, .heldItem = ITEM_CHESTO_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_CALM, .evs = {252, 0, 0, 0, 252, 6}, .moves = {MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_REST, MOVE_PSYCHIC}, @@ -308,7 +308,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_GENGAR, .heldItem = ITEM_LEFTOVERS, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MODEST, .evs = {252, 0, 252, 0, 6, 0}, .moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_DESTINY_BOND}, @@ -316,7 +316,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_BRELOOM, .heldItem = ITEM_LUM_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_JOLLY, .evs = {6, 252, 0, 252, 0, 0}, .moves = {MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HEADBUTT}, @@ -331,7 +331,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_METANG, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BRAVE, .evs = {0, 252, 252, 0, 6, 0}, .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW}, @@ -339,7 +339,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SKARMORY, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_IMPISH, .evs = {252, 0, 0, 0, 6, 252}, .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING}, @@ -347,7 +347,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_AGGRON, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_ADAMANT, .evs = {0, 252, 0, 0, 252, 6}, .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}, @@ -357,7 +357,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_METANG, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BRAVE, .evs = {0, 252, 252, 0, 6, 0}, .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW}, @@ -365,7 +365,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SKARMORY, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_IMPISH, .evs = {252, 0, 0, 0, 6, 252}, .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING}, @@ -373,7 +373,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_AGGRON, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_ADAMANT, .evs = {0, 252, 0, 0, 252, 6}, .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}, @@ -414,7 +414,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SEVIPER, .heldItem = ITEM_FOCUS_BAND, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BOLD, .evs = {252, 0, 0, 0, 252, 6}, .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN}, @@ -422,7 +422,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_STEELIX, .heldItem = ITEM_BRIGHT_POWDER, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BRAVE, .evs = {252, 0, 0, 0, 6, 252}, .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION, MOVE_SCREECH}, @@ -430,7 +430,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_GYARADOS, .heldItem = ITEM_CHESTO_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_ADAMANT, .evs = {252, 6, 0, 0, 0, 252}, .moves = {MOVE_DRAGON_DANCE, MOVE_RETURN, MOVE_ROAR, MOVE_REST}, @@ -471,7 +471,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_ARTICUNO, .heldItem = ITEM_SCOPE_LENS, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MILD, .evs = {6, 0, 252, 252, 0, 0}, .moves = {MOVE_BLIZZARD, MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_REFLECT}, @@ -479,7 +479,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_ZAPDOS, .heldItem = ITEM_LUM_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MILD, .evs = {6, 0, 252, 252, 0, 0}, .moves = {MOVE_THUNDER, MOVE_DETECT, MOVE_DRILL_PECK, MOVE_LIGHT_SCREEN}, @@ -487,7 +487,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_MOLTRES, .heldItem = ITEM_BRIGHT_POWDER, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MILD, .evs = {6, 0, 252, 252, 0, 0}, .moves = {MOVE_FIRE_BLAST, MOVE_HYPER_BEAM, MOVE_AERIAL_ACE, MOVE_SAFEGUARD}, diff --git a/src/pokemon.c b/src/pokemon.c index b5eee16b23..e3d5dfd974 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2247,7 +2247,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, SetBoxMonData(boxMon, MON_DATA_POKEBALL, &value); SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2Ptr->playerGender); - if (fixedIV < 32) + if (fixedIV < USE_RANDOM_IVS) { SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV); SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV); @@ -2261,20 +2261,20 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u32 iv; value = Random(); - iv = value & 0x1F; + iv = value & MAX_IV_MASK; SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); - iv = (value & 0x3E0) >> 5; + iv = (value & (MAX_IV_MASK << 5)) >> 5; SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv); - iv = (value & 0x7C00) >> 10; + iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv); value = Random(); - iv = value & 0x1F; + iv = value & MAX_IV_MASK; SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv); - iv = (value & 0x3E0) >> 5; + iv = (value & (MAX_IV_MASK << 5)) >> 5; SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv); - iv = (value & 0x7C00) >> 10; + iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); } @@ -2342,7 +2342,7 @@ void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level) personality = Random32(); } while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE); - CreateMon(mon, species, level, 32, 1, personality, OT_ID_PRESET, otId); + CreateMon(mon, species, level, USE_RANDOM_IVS, 1, personality, OT_ID_PRESET, otId); } void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality) @@ -2524,7 +2524,7 @@ void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 m CreateMon(mon, src->party[monId].species, GetFrontierEnemyMonLevel(src->lvlMode - 1), - 0x1F, + MAX_PER_STAT_IVS, TRUE, personality, OT_ID_PRESET, @@ -2761,7 +2761,7 @@ void CreateObedientEnemyMon(void) s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateObedientMon(&gEnemyParty[0], species, level, 32, 0, 0, 0, 0); + CreateObedientMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, 0, 0, 0, 0); if (itemId) { u8 heldItem[2]; @@ -4314,12 +4314,12 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_IVS: { u32 ivs = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); - substruct3->hpIV = ivs & 0x1F; - substruct3->attackIV = (ivs >> 5) & 0x1F; - substruct3->defenseIV = (ivs >> 10) & 0x1F; - substruct3->speedIV = (ivs >> 15) & 0x1F; - substruct3->spAttackIV = (ivs >> 20) & 0x1F; - substruct3->spDefenseIV = (ivs >> 25) & 0x1F; + substruct3->hpIV = ivs & MAX_PER_STAT_IVS; + substruct3->attackIV = (ivs >> 5) & MAX_PER_STAT_IVS; + substruct3->defenseIV = (ivs >> 10) & MAX_PER_STAT_IVS; + substruct3->speedIV = (ivs >> 15) & MAX_PER_STAT_IVS; + substruct3->spAttackIV = (ivs >> 20) & MAX_PER_STAT_IVS; + substruct3->spDefenseIV = (ivs >> 25) & MAX_PER_STAT_IVS; break; } default: diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index c9a2127acb..ad1a55230e 100755 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -66,7 +66,7 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u u8 heldItem[2]; struct Pokemon mon; - CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&mon, species, level, USE_RANDOM_IVS, 0, 0, OT_ID_PLAYER_ID, 0); heldItem[0] = item; heldItem[1] = item >> 8; SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem); @@ -139,7 +139,7 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item) u8 heldItem[2]; ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, 0, 0, OT_ID_PLAYER_ID, 0); if (item) { heldItem[0] = item; diff --git a/src/trade.c b/src/trade.c index 6696c23ebc..96099cb744 100644 --- a/src/trade.c +++ b/src/trade.c @@ -379,7 +379,7 @@ static void CB2_CreateTradeMenu(void) for (i = 0; i < PARTY_SIZE; i++) { - CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); } PrintTradeMessage(TRADE_MSG_STANDBY); @@ -4436,7 +4436,7 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) u8 isMail; struct Pokemon *pokemon = &gEnemyParty[0]; - CreateMon(pokemon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, OT_ID_PRESET, inGameTrade->otId); + CreateMon(pokemon, inGameTrade->species, level, USE_RANDOM_IVS, TRUE, inGameTrade->personality, OT_ID_PRESET, inGameTrade->otId); SetMonData(pokemon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); SetMonData(pokemon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); From f02afc134b206b82bd5c73885d0ee9d8855df90a Mon Sep 17 00:00:00 2001 From: SphericalIce Date: Thu, 7 Jan 2021 22:34:57 +0000 Subject: [PATCH 168/177] Use the correct constant for max-IV masks --- src/pokemon.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index e3d5dfd974..5bccef9074 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4314,12 +4314,12 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_IVS: { u32 ivs = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); - substruct3->hpIV = ivs & MAX_PER_STAT_IVS; - substruct3->attackIV = (ivs >> 5) & MAX_PER_STAT_IVS; - substruct3->defenseIV = (ivs >> 10) & MAX_PER_STAT_IVS; - substruct3->speedIV = (ivs >> 15) & MAX_PER_STAT_IVS; - substruct3->spAttackIV = (ivs >> 20) & MAX_PER_STAT_IVS; - substruct3->spDefenseIV = (ivs >> 25) & MAX_PER_STAT_IVS; + substruct3->hpIV = ivs & MAX_IV_MASK; + substruct3->attackIV = (ivs >> 5) & MAX_IV_MASK; + substruct3->defenseIV = (ivs >> 10) & MAX_IV_MASK; + substruct3->speedIV = (ivs >> 15) & MAX_IV_MASK; + substruct3->spAttackIV = (ivs >> 20) & MAX_IV_MASK; + substruct3->spDefenseIV = (ivs >> 25) & MAX_IV_MASK; break; } default: From 8afc28c98ffe55e9abf747ec274eaaa826c177a8 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 10 Jan 2021 12:24:59 -0500 Subject: [PATCH 169/177] Add missing braces to bugfix in CalculateMonStats --- src/pokemon.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pokemon.c b/src/pokemon.c index b5eee16b23..e8c6a6f49b 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2859,13 +2859,14 @@ void CalculateMonStats(struct Pokemon *mon) { if (currentHP == 0 && oldMaxHP == 0) currentHP = newMaxHP; - else if (currentHP != 0) + else if (currentHP != 0) { // BUG: currentHP is unintentionally able to become <= 0 after the instruction below. This causes the pomeg berry glitch. currentHP += newMaxHP - oldMaxHP; #ifdef BUGFIX if (currentHP <= 0) currentHP = 1; #endif + } else return; } From ead437e89bf212809c9177af727806dafcefcef3 Mon Sep 17 00:00:00 2001 From: SatoMew Date: Sun, 10 Jan 2021 22:26:00 +0000 Subject: [PATCH 170/177] Document the unused battle strings for downpour weather --- src/battle_message.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index e6c1666fcd..7a0327ada2 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -340,9 +340,9 @@ static const u8 sText_ButItFailed[] = _("But it failed!"); static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!"); static const u8 sText_MirrorMoveFailed[] = _("The MIRROR MOVE failed!"); static const u8 sText_StartedToRain[] = _("It started to rain!"); -static const u8 sText_DownpourStarted[] = _("A downpour started!"); +static const u8 sText_DownpourStarted[] = _("A downpour started!"); // corresponds to DownpourText in pokegold and pokecrystal and is used by Rain Dance in GSC static const u8 sText_RainContinues[] = _("Rain continues to fall."); -static const u8 sText_DownpourContinues[] = _("The downpour continues."); +static const u8 sText_DownpourContinues[] = _("The downpour continues."); // unused static const u8 sText_RainStopped[] = _("The rain stopped."); static const u8 sText_SandstormBrewed[] = _("A sandstorm brewed!"); static const u8 sText_SandstormRages[] = _("The sandstorm rages."); From 3ce4e6b24b8eacde7e9ad659f8e5188ee10d14ff Mon Sep 17 00:00:00 2001 From: opakedragon <46143024+opakedragon@users.noreply.github.com> Date: Mon, 11 Jan 2021 08:47:11 -0500 Subject: [PATCH 171/177] rename string id to reflect usage --- data/battle_scripts_1.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 873425c638..bf8ab19c15 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3834,7 +3834,7 @@ BattleScript_MoveUsedIsConfusedNoMore:: return BattleScript_PrintPayDayMoneyString:: - printstring STRINGID_PKMNPICKEDUPITEM + printstring STRINGID_PLAYERPICKEDUPMONEY waitmessage 0x40 return From cbaf9b38b2b3b857652752da37f5906aff47ead8 Mon Sep 17 00:00:00 2001 From: opakedragon <46143024+opakedragon@users.noreply.github.com> Date: Mon, 11 Jan 2021 08:48:00 -0500 Subject: [PATCH 172/177] rename string id to reflect usage --- include/constants/battle_string_ids.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 9e0d8e0be4..1886043f16 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -124,7 +124,7 @@ #define STRINGID_PKMNSTORINGENERGY 120 #define STRINGID_PKMNUNLEASHEDENERGY 121 #define STRINGID_PKMNFATIGUECONFUSION 122 -#define STRINGID_PKMNPICKEDUPITEM 123 +#define STRINGID_PLAYERPICKEDUPMONEY 123 #define STRINGID_PKMNUNAFFECTED 124 #define STRINGID_PKMNTRANSFORMEDINTO 125 #define STRINGID_PKMNMADESUBSTITUTE 126 From 295ec313f5c2d591ee68e9328f582b852eae6fd6 Mon Sep 17 00:00:00 2001 From: opakedragon <46143024+opakedragon@users.noreply.github.com> Date: Mon, 11 Jan 2021 08:49:31 -0500 Subject: [PATCH 173/177] rename string id/variable to reflect usage --- src/battle_message.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index e6c1666fcd..985f51ff35 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -180,7 +180,7 @@ static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} staye static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!"); static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); -static const u8 sText_PkmnPickedUpItem[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p"); +static const u8 sText_PlayerPickedUpMoney[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p"); static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!"); static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!"); static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!"); @@ -632,7 +632,7 @@ const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNSTORINGENERGY - 12] = sText_PkmnStoringEnergy, [STRINGID_PKMNUNLEASHEDENERGY - 12] = sText_PkmnUnleashedEnergy, [STRINGID_PKMNFATIGUECONFUSION - 12] = sText_PkmnFatigueConfusion, - [STRINGID_PKMNPICKEDUPITEM - 12] = sText_PkmnPickedUpItem, + [STRINGID_PLAYERPICKEDUPMONEY - 12] = sText_PlayerPickedUpMoney, [STRINGID_PKMNUNAFFECTED - 12] = sText_PkmnUnaffected, [STRINGID_PKMNTRANSFORMEDINTO - 12] = sText_PkmnTransformedInto, [STRINGID_PKMNMADESUBSTITUTE - 12] = sText_PkmnMadeSubstitute, From 4a7a3df2052a2e0a5f88a8c087f47e75df3ed357 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 11 Jan 2021 10:36:53 -0500 Subject: [PATCH 174/177] Move SeedRngWithRtc fix to BUGFIX conditional --- docs/bugs_and_glitches.md | 46 --------------------------------------- src/main.c | 22 +++++++++++-------- 2 files changed, 13 insertions(+), 55 deletions(-) diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 07955ecd5f..94fc4314d9 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -13,55 +13,9 @@ Fixes are written in the `diff` format. If you've used Git before, this should l ## Contents -- [RNG does not get seeded](#rng-does-not-get-seeded) - [Scrolling through items in the bag causes the image to flicker](#scrolling-through-items-in-the-bag-causes-the-image-to-flicker) -## RNG does not get seeded - -**Fix:** Add the following function to [src/main.c](https://github.com/pret/pokeemerald/blob/master/src/main.c): -```diff -+static void SeedRngWithRtc(void) -+{ -+ u32 seed = RtcGetMinuteCount(); -+ seed = (seed >> 16) ^ (seed & 0xFFFF); -+ SeedRng(seed); -+} -``` - -And edit `AgbMain`: - -```diff - ... - RtcInit(); - CheckForFlashMemory(); - InitMainCallbacks(); - InitMapMusic(); -+ SeedRngWithRtc(); - ClearDma3Requests(); - ... -``` - -This restores the code of Ruby/Sapphire. - -**Alternate Fix:** Edit the following function in [src/title_screen.c](https://github.com/pret/pokeemerald/blob/master/src/title_screen.c): - -```diff -void CB2_InitTitleScreen(void) -{ - switch (gMain.state) - { - default: - case 0: - SetVBlankCallback(NULL); -+ StartTimer1(); - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - ... -``` -This matches what FRLG does and obtains the seed differently than RS, independently of the RTC. - ## Scrolling through items in the bag causes the image to flicker **Fix:** Add the following function to [src/item_menu_icons.c](https://github.com/pret/pokeemerald/blob/master/src/item_menu_icons.c): diff --git a/src/main.c b/src/main.c index 9fd1d0a35f..f0ad4ce942 100644 --- a/src/main.c +++ b/src/main.c @@ -75,7 +75,7 @@ static EWRAM_DATA u16 gTrainerId = 0; static void UpdateLinkAndCallCallbacks(void); static void InitMainCallbacks(void); static void CallCallbacks(void); -//static void SeedRngWithRtc(void); +static void SeedRngWithRtc(void); static void ReadKeys(void); void InitIntrHandlers(void); static void WaitForVBlank(void); @@ -102,7 +102,9 @@ void AgbMain() CheckForFlashMemory(); InitMainCallbacks(); InitMapMusic(); - //SeedRngWithRtc(); see comment at SeedRngWithRtc declaration below +#ifdef BUGFIX + SeedRngWithRtc(); // see comment at SeedRngWithRtc definition below +#endif ClearDma3Requests(); ResetBgs(); SetDefaultFontsPointer(); @@ -213,13 +215,15 @@ void EnableVCountIntrAtLine150(void) EnableInterrupts(INTR_FLAG_VCOUNT); } -// oops! FRLG commented this out to remove RTC, however Emerald didnt undo this! -//static void SeedRngWithRtc(void) -//{ -// u32 seed = RtcGetMinuteCount(); -// seed = (seed >> 16) ^ (seed & 0xFFFF); -// SeedRng(seed); -//} +// FRLG commented this out to remove RTC, however Emerald didn't undo this! +#ifdef BUGFIX +static void SeedRngWithRtc(void) +{ + u32 seed = RtcGetMinuteCount(); + seed = (seed >> 16) ^ (seed & 0xFFFF); + SeedRng(seed); +} +#endif void InitKeys(void) { From fa3acd79e7c38f8bd8bce4beff34f432a584fba3 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 11 Jan 2021 10:37:22 -0500 Subject: [PATCH 175/177] Fix missing header for sub_817F77C BUGFIX --- src/pokemon_animation.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index c4077aff46..9c8eaca9ad 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -6,6 +6,7 @@ #include "task.h" #include "trig.h" #include "util.h" +#include "data.h" #include "constants/battle_anim.h" #include "constants/rgb.h" From 9ed413fe8f3c5d43123368db08d90b7f069d14d3 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 11 Jan 2021 10:39:53 -0500 Subject: [PATCH 176/177] Remove redundant bug fix description --- docs/bugs_and_glitches.md | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 94fc4314d9..ce06c14898 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -1,7 +1,7 @@ # Bugs and Glitches -These are known bugs and glitches in the original Pokémon Emerald game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash. Defining the `BUGFIX` preprocessor variable will fix some of these automatically. +These are known bugs and glitches in the original Pokémon Emerald game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash. Defining the `BUGFIX` and `UBFIX` preprocessor variables will fix some of these automatically. `UBFIX` will already be defined for MODERN builds. Fixes are written in the `diff` format. If you've used Git before, this should look familiar: @@ -49,21 +49,3 @@ Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/p if (itemIndex != LIST_CANCEL) ... ``` - -## Pokémon that have an affine transform as part of their entry animation glitch when going in and out of Poké Balls without a screen transition in between - -**Fix:** Edit `sub_817F77C` in [src/pokemon_animation.c](https://github.com/pret/pokeemerald/blob/master/src/pokemon_animation.c#L1028): - -```diff - ... --#ifdef BUGFIX - else - { - // FIX: Reset these back to normal after they were changed so Poké Ball catch/release - // animations without a screen transition in between don't break - sprite->affineAnimPaused = FALSE; - sprite->affineAnims = gUnknown_082FF694; - } --#endif // BUGFIX -} -``` From 92de664f793d845277ea0adde8d76431574a536d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 11 Jan 2021 16:07:16 -0500 Subject: [PATCH 177/177] List battle animation indexes alongside tables --- data/battle_anim_scripts.s | 64 ++++++++++++------------ include/constants/battle_anim.h | 86 ++++++++++++++++----------------- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index b4bb339931..2344007a5c 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -374,41 +374,41 @@ gBattleAnims_Moves:: .align 2 gBattleAnims_StatusConditions:: - .4byte Status_Poison - .4byte Status_Confusion - .4byte Status_Burn - .4byte Status_Infatuation - .4byte Status_Sleep - .4byte Status_Paralysis - .4byte Status_Freeze - .4byte Status_Curse - .4byte Status_Nightmare + .4byte Status_Poison @ B_ANIM_STATUS_PSN + .4byte Status_Confusion @ B_ANIM_STATUS_CONFUSION + .4byte Status_Burn @ B_ANIM_STATUS_BRN + .4byte Status_Infatuation @ B_ANIM_STATUS_INFATUATION + .4byte Status_Sleep @ B_ANIM_STATUS_SLP + .4byte Status_Paralysis @ B_ANIM_STATUS_PRZ + .4byte Status_Freeze @ B_ANIM_STATUS_FRZ + .4byte Status_Curse @ B_ANIM_STATUS_CURSED + .4byte Status_Nightmare @ B_ANIM_STATUS_NIGHTMARE .align 2 gBattleAnims_General:: - .4byte General_CastformChange - .4byte General_StatsChange - .4byte General_SubstituteFade - .4byte General_SubstituteAppear - .4byte General_PokeblockThrow - .4byte General_ItemKnockoff - .4byte General_TurnTrap - .4byte General_HeldItemEffect - .4byte General_SmokeballEscape - .4byte General_FocusBand - .4byte General_Rain - .4byte General_Sun - .4byte General_Sandstorm - .4byte General_Hail - .4byte General_LeechSeedDrain - .4byte General_MonHit - .4byte General_ItemSteal - .4byte General_SnatchMove - .4byte General_FutureSightHit - .4byte General_DoomDesireHit - .4byte General_FocusPunchSetUp - .4byte General_IngrainHeal - .4byte General_WishHeal + .4byte General_CastformChange @ B_ANIM_CASTFORM_CHANGE + .4byte General_StatsChange @ B_ANIM_STATS_CHANGE + .4byte General_SubstituteFade @ B_ANIM_SUBSTITUTE_FADE + .4byte General_SubstituteAppear @ B_ANIM_SUBSTITUTE_APPEAR + .4byte General_PokeblockThrow @ B_ANIM_POKEBLOCK_THROW + .4byte General_ItemKnockoff @ B_ANIM_ITEM_KNOCKOFF + .4byte General_TurnTrap @ B_ANIM_TURN_TRAP + .4byte General_HeldItemEffect @ B_ANIM_HELD_ITEM_EFFECT + .4byte General_SmokeballEscape @ B_ANIM_SMOKEBALL_ESCAPE + .4byte General_FocusBand @ B_ANIM_FOCUS_BAND + .4byte General_Rain @ B_ANIM_RAIN_CONTINUES + .4byte General_Sun @ B_ANIM_SUN_CONTINUES + .4byte General_Sandstorm @ B_ANIM_SANDSTORM_CONTINUES + .4byte General_Hail @ B_ANIM_HAIL_CONTINUES + .4byte General_LeechSeedDrain @ B_ANIM_LEECH_SEED_DRAIN + .4byte General_MonHit @ B_ANIM_MON_HIT + .4byte General_ItemSteal @ B_ANIM_ITEM_STEAL + .4byte General_SnatchMove @ B_ANIM_SNATCH_MOVE + .4byte General_FutureSightHit @ B_ANIM_FUTURE_SIGHT_HIT + .4byte General_DoomDesireHit @ B_ANIM_DOOM_DESIRE_HIT + .4byte General_FocusPunchSetUp @ B_ANIM_FOCUS_PUNCH_SETUP + .4byte General_IngrainHeal @ B_ANIM_INGRAIN_HEAL + .4byte General_WishHeal @ B_ANIM_WISH_HEAL .align 2 gBattleAnims_Special:: diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index ebc422b18e..5f8900bf66 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -346,51 +346,51 @@ #define BG_SOLARBEAM_PLAYER 25 #define BG_SOLARBEAM_CONTESTS 26 -// table ids for general animations -#define B_ANIM_CASTFORM_CHANGE 0x0 -#define B_ANIM_STATS_CHANGE 0x1 -#define B_ANIM_SUBSTITUTE_FADE 0x2 -#define B_ANIM_SUBSTITUTE_APPEAR 0x3 -#define B_ANIM_POKEBLOCK_THROW 0x4 -#define B_ANIM_ITEM_KNOCKOFF 0x5 -#define B_ANIM_TURN_TRAP 0x6 -#define B_ANIM_HELD_ITEM_EFFECT 0x7 -#define B_ANIM_SMOKEBALL_ESCAPE 0x8 -#define B_ANIM_FOCUS_BAND 0x9 -#define B_ANIM_RAIN_CONTINUES 0xA -#define B_ANIM_SUN_CONTINUES 0xB -#define B_ANIM_SANDSTORM_CONTINUES 0xC -#define B_ANIM_HAIL_CONTINUES 0xD -#define B_ANIM_LEECH_SEED_DRAIN 0xE -#define B_ANIM_MON_HIT 0xF -#define B_ANIM_ITEM_STEAL 0x10 -#define B_ANIM_SNATCH_MOVE 0x11 -#define B_ANIM_FUTURE_SIGHT_HIT 0x12 -#define B_ANIM_DOOM_DESIRE_HIT 0x13 -#define B_ANIM_FOCUS_PUNCH_SETUP 0x14 -#define B_ANIM_INGRAIN_HEAL 0x15 -#define B_ANIM_WISH_HEAL 0x16 +// table ids for general animations (gBattleAnims_General) +#define B_ANIM_CASTFORM_CHANGE 0 +#define B_ANIM_STATS_CHANGE 1 +#define B_ANIM_SUBSTITUTE_FADE 2 +#define B_ANIM_SUBSTITUTE_APPEAR 3 +#define B_ANIM_POKEBLOCK_THROW 4 +#define B_ANIM_ITEM_KNOCKOFF 5 +#define B_ANIM_TURN_TRAP 6 +#define B_ANIM_HELD_ITEM_EFFECT 7 +#define B_ANIM_SMOKEBALL_ESCAPE 8 +#define B_ANIM_FOCUS_BAND 9 +#define B_ANIM_RAIN_CONTINUES 10 +#define B_ANIM_SUN_CONTINUES 11 +#define B_ANIM_SANDSTORM_CONTINUES 12 +#define B_ANIM_HAIL_CONTINUES 13 +#define B_ANIM_LEECH_SEED_DRAIN 14 +#define B_ANIM_MON_HIT 15 +#define B_ANIM_ITEM_STEAL 16 +#define B_ANIM_SNATCH_MOVE 17 +#define B_ANIM_FUTURE_SIGHT_HIT 18 +#define B_ANIM_DOOM_DESIRE_HIT 19 +#define B_ANIM_FOCUS_PUNCH_SETUP 20 +#define B_ANIM_INGRAIN_HEAL 21 +#define B_ANIM_WISH_HEAL 22 -// special animations table -#define B_ANIM_LVL_UP 0x0 -#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1 -#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2 -#define B_ANIM_BALL_THROW 0x3 -#define B_ANIM_BALL_THROW_WITH_TRAINER 0x4 -#define B_ANIM_SUBSTITUTE_TO_MON 0x5 -#define B_ANIM_MON_TO_SUBSTITUTE 0x6 +// special animations table (gBattleAnims_Special) +#define B_ANIM_LVL_UP 0 +#define B_ANIM_SWITCH_OUT_PLAYER_MON 1 +#define B_ANIM_SWITCH_OUT_OPPONENT_MON 2 +#define B_ANIM_BALL_THROW 3 +#define B_ANIM_BALL_THROW_WITH_TRAINER 4 +#define B_ANIM_SUBSTITUTE_TO_MON 5 +#define B_ANIM_MON_TO_SUBSTITUTE 6 -// status animation table -#define B_ANIM_STATUS_PSN 0x0 -#define B_ANIM_STATUS_CONFUSION 0x1 -#define B_ANIM_STATUS_BRN 0x2 -#define B_ANIM_STATUS_INFATUATION 0x3 -#define B_ANIM_STATUS_SLP 0x4 -#define B_ANIM_STATUS_PRZ 0x5 -#define B_ANIM_STATUS_FRZ 0x6 -#define B_ANIM_STATUS_CURSED 0x7 -#define B_ANIM_STATUS_NIGHTMARE 0x8 -#define B_ANIM_STATUS_WRAPPED 0x9 // does not actually exist +// status animation table (gBattleAnims_StatusConditions) +#define B_ANIM_STATUS_PSN 0 +#define B_ANIM_STATUS_CONFUSION 1 +#define B_ANIM_STATUS_BRN 2 +#define B_ANIM_STATUS_INFATUATION 3 +#define B_ANIM_STATUS_SLP 4 +#define B_ANIM_STATUS_PRZ 5 +#define B_ANIM_STATUS_FRZ 6 +#define B_ANIM_STATUS_CURSED 7 +#define B_ANIM_STATUS_NIGHTMARE 8 +#define B_ANIM_STATUS_WRAPPED 9 // does not actually exist // Tasks with return values often assign them to gBattleAnimArgs[7]. #define ARG_RET_ID 7