diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8587e43d45..57e0813d76 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,13 +53,13 @@ jobs: run: make -j${nproc} all - name: French Compare - run: make -j${nproc} compare_french + run: make -j${nproc} compare_fr - name: French Modern env: MODERN: 1 COMPARE: 0 - run: make -j${nproc} french + run: make -j${nproc} modern_fr - name: Move symfiles if: ${{ github.event_name == 'push' }} diff --git a/include/mystery_event_msg.h b/include/mystery_event_msg.h index 1844960237..9a2f421f59 100644 --- a/include/mystery_event_msg.h +++ b/include/mystery_event_msg.h @@ -10,7 +10,6 @@ extern const u8 gText_MysteryEventRareWord[]; extern const u8 gText_MysteryEventSentOver[]; extern const u8 gText_MysteryEventFullParty[]; extern const u8 gText_MysteryEventNewTrainer[]; -extern const u8 gText_MysteryEventNewAdversaryInBattleTower[]; extern const u8 gText_MysteryEventCantBeUsed[]; #endif // GUARD_MYSTERY_EVENT_MSG_H diff --git a/src/data/credits.h b/src/data/credits.h index 3ae2b1d3be..6ac50001e5 100644 --- a/src/data/credits.h +++ b/src/data/credits.h @@ -43,15 +43,22 @@ enum PAGE_COORDINATORS, PAGE_ENGLISH_VERSION, PAGE_TRANSLATOR, +#if ENGLISH PAGE_TEXT_EDITOR, +#endif PAGE_NCL_COORDINATOR, PAGE_PROGRAMMERS_5, PAGE_GRAPHIC_DESIGNER, PAGE_ENVIRONMENT_AND_TOOL_PROGRAMS_2, PAGE_NOA_TESTING, +#if ENGLISH PAGE_BRAILLE_CODE_CHECK_1, PAGE_BRAILLE_CODE_CHECK_2, +#endif PAGE_SPECIAL_THANKS_5, +#if FRENCH + PAGE_SPECIAL_THANKS_6, +#endif PAGE_TASK_MANAGERS, PAGE_PRODUCERS, PAGE_EXECUTIVE_DIRECTOR, @@ -63,7 +70,11 @@ enum #define ENTRIES_PER_PAGE 5 static const u8 sCreditsText_EmptyString[] = _(""); +#if ENGLISH static const u8 sCreditsText_PkmnEmeraldVersion[] = _("POKéMON EMERALD VERSION"); +#elif FRENCH +static const u8 sCreditsText_PkmnEmeraldVersion[] = _("POKéMON VERSION EMERAUDE"); +#endif static const u8 sCreditsText_Credits[] = _("Credits"); static const u8 sCreditsText_ExecutiveDirector[] = _("Executive Director"); static const u8 sCreditsText_Director[] = _("Director"); @@ -193,12 +204,21 @@ static const u8 sCreditsText_RetsujiNomoto[] = _("Retsuji Nomot static const u8 sCreditsText_AzusaTajima[] = _("Azusa Tajima"); static const u8 sCreditsText_ShusakuEgami[] = _("Shusaku Egami"); static const u8 sCreditsText_PackageAndManual[] = _("Package & Manual Illustration"); +#if ENGLISH static const u8 sCreditsText_EnglishVersion[] = _("English Version Coordinators"); static const u8 sCreditsText_Translator[] = _("Translator"); static const u8 sCreditsText_TextEditor[] = _("Text Editor"); static const u8 sCreditsText_NCLCoordinator[] = _("NCL Coordinator"); static const u8 sCreditsText_GraphicDesigner[] = _("Graphic Designer"); static const u8 sCreditsText_NOAProductTesting[] = _("NOA Product Testing"); +#elif FRENCH +static const u8 sCreditsText_EnglishVersion[] = _("French Version Coordinators"); +static const u8 sCreditsText_Translator[] = _("Translators"); +static const u8 sCreditsText_TextEditor[] = _("Text Editor"); +static const u8 sCreditsText_NCLCoordinator[] = _("NCL Coordinators"); +static const u8 sCreditsText_GraphicDesigner[] = _("Graphic Designer"); +static const u8 sCreditsText_NOAProductTesting[] = _("NOE Product Testing"); +#endif static const u8 sCreditsText_HideyukiNakajima[] = _("Hideyuki Nakajima"); static const u8 sCreditsText_HidenoriSaeki[] = _("Hidenori Saeki"); static const u8 sCreditsText_YokoWatanabe[] = _("Yoko Watanabe"); @@ -216,11 +236,30 @@ static const u8 sCreditsText_NationalFederationBlind[] = _("National Fede static const u8 sCreditsText_PatriciaAMaurer[] = _("Patricia A. Maurer"); static const u8 sCreditsText_EuropeanBlindUnion[] = _("European Blind Union"); static const u8 sCreditsText_AustralianBrailleAuthority[] = _("Australian Braille Authority"); +#if ENGLISH static const u8 sCreditsText_RoyalNewZealandFederationBlind[] = _("Royal New Zealand Federation for the Blind"); static const u8 sCreditsText_MotoyasuTojima[] = _("Motoyasu Tojima"); static const u8 sCreditsText_NicolaPrattBarlow[] = _("Nicola Pratt-Barlow"); static const u8 sCreditsText_ShellieDow[] = _("Shellie Dow"); static const u8 sCreditsText_ErikJohnson[] = _("Erik Johnson"); +#elif FRENCH +static const u8 sCreditsText_EuropeanBlindUnion2[] = _("European Blind Union"); +static const u8 sCreditsText_MotoyasuTojima[] = _("Motoyasu Tojima"); +static const u8 sCreditsText_NicolaPrattBarlow[] = _("Nicola Wright"); // Possibly got married :) +static const u8 sCreditsText_ShellieDow[] = _("Shellie Dow"); +static const u8 sCreditsText_ErikJohnson[] = _("Erik Johnson"); +// New +static const u8 sCreditsText_NorikoNetley[] = _("Noriko Netley"); +static const u8 sCreditsText_PierreSanchez[] = _("Pierre Sanchez"); +static const u8 sCreditsText_SabrinaBretant[] = _("Sabrina Bretant"); +static const u8 sCreditsText_ThomasFougeray[] = _("Thomas Fougeray"); +static const u8 sCreditsText_AlessioDanieli[] = _("Alessio Danieli"); +static const u8 sCreditsText_NOETestingTeam[] = _("NOE Testing Team"); +static const u8 sCreditsText_StefanRomberg[] = _("Stefan Romberg"); +static const u8 sCreditsText_MihoKozawa[] = _("Miho Kozawa"); +static const u8 sCreditsText_ToshifumiSayama[] = _("Toshifumi Sayama"); +static const u8 sCreditsText_Hiroshi_Akune[] = _("Hiroshi Akune"); +#endif static const struct CreditsEntry sCreditsEntry_EmptyString[] = { 0, FALSE, sCreditsText_EmptyString}; static const struct CreditsEntry sCreditsEntry_PkmnEmeraldVersion[] = { 7, TRUE, sCreditsText_PkmnEmeraldVersion}; static const struct CreditsEntry sCreditsEntry_Credits[] = {11, TRUE, sCreditsText_Credits}; @@ -375,11 +414,30 @@ static const struct CreditsEntry sCreditsEntry_NationalFederationBlind[] static const struct CreditsEntry sCreditsEntry_PatriciaAMaurer[] = { 0, FALSE, sCreditsText_PatriciaAMaurer}; static const struct CreditsEntry sCreditsEntry_EuropeanBlindUnion[] = { 0, FALSE, sCreditsText_EuropeanBlindUnion}; static const struct CreditsEntry sCreditsEntry_AustralianBrailleAuthority[] = { 0, FALSE, sCreditsText_AustralianBrailleAuthority}; +#if ENGLISH static const struct CreditsEntry sCreditsEntry_RoyalNewZealandFederationBlind[] = { 0, FALSE, sCreditsText_RoyalNewZealandFederationBlind}; static const struct CreditsEntry sCreditsEntry_MotoyasuTojima[] = { 0, FALSE, sCreditsText_MotoyasuTojima}; static const struct CreditsEntry sCreditsEntry_NicolaPrattBarlow[] = { 0, FALSE, sCreditsText_NicolaPrattBarlow}; static const struct CreditsEntry sCreditsEntry_ShellieDow[] = { 0, FALSE, sCreditsText_ShellieDow}; static const struct CreditsEntry sCreditsEntry_ErikJohnson[] = { 0, FALSE, sCreditsText_ErikJohnson}; +#elif FRENCH +static const struct CreditsEntry sCreditsEntry_EuropeanBlindUnion2[] = { 0, FALSE, sCreditsText_EuropeanBlindUnion2}; +static const struct CreditsEntry sCreditsEntry_MotoyasuTojima[] = { 0, FALSE, sCreditsText_MotoyasuTojima}; +static const struct CreditsEntry sCreditsEntry_NicolaPrattBarlow[] = { 0, FALSE, sCreditsText_NicolaPrattBarlow}; +static const struct CreditsEntry sCreditsEntry_ShellieDow[] = { 0, FALSE, sCreditsText_ShellieDow}; +static const struct CreditsEntry sCreditsEntry_ErikJohnson[] = { 0, FALSE, sCreditsText_ErikJohnson}; +// New +static const struct CreditsEntry sCreditsEntry_NorikoNetley[] = { 0, FALSE, sCreditsText_NorikoNetley}; +static const struct CreditsEntry sCreditsEntry_PierreSanchez[] = { 0, FALSE, sCreditsText_PierreSanchez}; +static const struct CreditsEntry sCreditsEntry_SabrinaBretant[] = { 0, FALSE, sCreditsText_SabrinaBretant}; +static const struct CreditsEntry sCreditsEntry_ThomasFougeray[] = { 0, FALSE, sCreditsText_ThomasFougeray}; +static const struct CreditsEntry sCreditsEntry_AlessioDanieli[] = { 0, FALSE, sCreditsText_AlessioDanieli}; +static const struct CreditsEntry sCreditsEntry_NOETestingTeam[] = { 0, FALSE, sCreditsText_NOETestingTeam}; +static const struct CreditsEntry sCreditsEntry_StefanRomberg[] = { 0, FALSE, sCreditsText_StefanRomberg}; +static const struct CreditsEntry sCreditsEntry_MihoKozawa[] = { 0, FALSE, sCreditsText_MihoKozawa}; +static const struct CreditsEntry sCreditsEntry_ToshifumiSayama[] = { 0, FALSE, sCreditsText_ToshifumiSayama}; +static const struct CreditsEntry sCreditsEntry_HiroshiAkune[] = { 0, FALSE, sCreditsText_Hiroshi_Akune}; +#endif #define _ sCreditsEntry_EmptyString static const struct CreditsEntry *const sCreditsEntryPointerTable[PAGE_COUNT][ENTRIES_PER_PAGE] = @@ -671,6 +729,7 @@ static const struct CreditsEntry *const sCreditsEntryPointerTable[PAGE_COUNT][EN sCreditsEntry_RetsujiNomoto, _, }, +#if ENGLISH [PAGE_ENGLISH_VERSION] = { _, sCreditsEntry_EnglishVersion, @@ -699,6 +758,29 @@ static const struct CreditsEntry *const sCreditsEntryPointerTable[PAGE_COUNT][EN _, _, }, +#elif FRENCH + [PAGE_ENGLISH_VERSION] = { + _, + sCreditsEntry_EnglishVersion, + sCreditsEntry_NorikoNetley, + sCreditsEntry_HiroyukiUesugi, + _, + }, + [PAGE_TRANSLATOR] = { + sCreditsEntry_Translator, + sCreditsEntry_PierreSanchez, + sCreditsEntry_SabrinaBretant, + sCreditsEntry_ThomasFougeray, + _, + }, + [PAGE_NCL_COORDINATOR] = { + _, + sCreditsEntry_NCLCoordinator, + sCreditsEntry_KimikoNakamichi, + sCreditsEntry_HiroshiAkune, + _, + }, +#endif [PAGE_PROGRAMMERS_5] = { sCreditsEntry_Programmers, sCreditsEntry_TerukiMurakawa, @@ -720,6 +802,7 @@ static const struct CreditsEntry *const sCreditsEntryPointerTable[PAGE_COUNT][EN sCreditsEntry_KimikoNakamichi, _, }, +#if ENGLISH [PAGE_NOA_TESTING] = { sCreditsEntry_NOAProductTesting, sCreditsEntry_ThomasHertzog, @@ -748,6 +831,29 @@ static const struct CreditsEntry *const sCreditsEntryPointerTable[PAGE_COUNT][EN sCreditsEntry_NicolaPrattBarlow, sCreditsEntry_ShellieDow, }, +#elif FRENCH + [PAGE_NOA_TESTING] = { + _, + sCreditsEntry_NOAProductTesting, + sCreditsEntry_AlessioDanieli, + sCreditsEntry_NOETestingTeam, + _, + }, + [PAGE_SPECIAL_THANKS_5] = { + sCreditsEntry_SpecialThanks, + sCreditsEntry_StefanRomberg, + sCreditsEntry_MihoKozawa, + sCreditsEntry_ToshifumiSayama, + _, + }, + [PAGE_SPECIAL_THANKS_6] = { + _, + sCreditsEntry_SpecialThanks, + sCreditsEntry_EuropeanBlindUnion2, + _, + _, + }, +#endif [PAGE_TASK_MANAGERS] = { _, sCreditsEntry_TaskManagers, diff --git a/src/field_specials.c b/src/field_specials.c index 032baa234e..011968d2d1 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -182,7 +182,11 @@ static void DetermineCyclingRoadResults(u32 numFrames, u8 numBikeCollisions) if (numFrames < 3600) { ConvertIntToDecimalStringN(gStringVar2, numFrames / 60, STR_CONV_MODE_RIGHT_ALIGN, 2); + #if ENGLISH gStringVar2[2] = CHAR_PERIOD; + #elif FRENCH + gStringVar2[2] = CHAR_COMMA; + #endif ConvertIntToDecimalStringN(&gStringVar2[3], ((numFrames % 60) * 100) / 60, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar2, gText_SpaceSeconds); } @@ -2139,6 +2143,15 @@ void BufferBattleTowerElevatorFloors(void) u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; +#if FRENCH + if (battleMode == FRONTIER_MODE_LINK_MULTIS) + { + gSpecialVar_0x8005 = 4; + gSpecialVar_0x8006 = 5; + return; + } +#endif + if (battleMode == FRONTIER_MODE_MULTIS && !FlagGet(FLAG_CHOSEN_MULTI_BATTLE_NPC_PARTNER)) { gSpecialVar_0x8005 = 5; diff --git a/src/frontier_pass.c b/src/frontier_pass.c index b143587415..b57429d99a 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -167,7 +167,9 @@ static void SpriteCB_PlayerHead(struct Sprite *); static const u16 sMaleHead_Pal[] = INCBIN_U16("graphics/frontier_pass/map_heads.gbapal"); static const u16 sFemaleHead_Pal[] = INCBIN_U16("graphics/frontier_pass/map_heads_female.gbapal"); +#if ENGLISH static const u32 sMapScreen_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_screen.4bpp.lz"); +#endif static const u32 sCursor_Gfx[] = INCBIN_U32("graphics/frontier_pass/cursor.4bpp.lz"); static const u32 sHeads_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_heads.4bpp.lz"); static const u32 sMapCursor_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_cursor.4bpp.lz"); @@ -1407,7 +1409,11 @@ static bool32 InitFrontierMap(void) InitWindows(sMapWindowTemplates); DeactivateAllTextPrinters(); PrintOnFrontierMap(); + #if ENGLISH DecompressAndCopyTileDataToVram(1, sMapScreen_Gfx, 0, 0, 0); + #elif FRENCH + DecompressAndCopyTileDataToVram(1, gFrontierPassMapScreen_Gfx, 0, 0, 0); + #endif break; case 5: if (FreeTempTileDataBuffersIfPossible()) diff --git a/src/frontier_util.c b/src/frontier_util.c index f5dde452fc..ad003c5f71 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -1127,12 +1127,21 @@ static void ShowDomeResultsWindow(u8 battleMode) AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Lv502, 8, 33, TEXT_SKIP_DRAW, NULL); AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_OpenLv, 8, 97, TEXT_SKIP_DRAW, NULL); PrintHyphens(10); +#if ENGLISH DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 64, 121, 33); PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_50], 64, 121, 49); PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_50], 64, 112, 65); DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 64, 121, 97); PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_OPEN], 64, 121, 113); PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_OPEN], 64, 112, 129); +#elif FRENCH + DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 64, 153, 33); + PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_50], 64, 153, 49); + PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_50], 64, 116, 65); + DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 64, 153, 97); + PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_OPEN], 64, 153, 113); + PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_OPEN], 64, 116, 129); +#endif PutWindowTilemap(gRecordsWindowId); CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } @@ -1255,12 +1264,21 @@ static void ShowPikeResultsWindow(void) AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Lv502, 8, 33, TEXT_SKIP_DRAW, NULL); AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_OpenLv, 8, 97, TEXT_SKIP_DRAW, NULL); PrintHyphens(10); +#if ENGLISH PikePrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 114, 33); PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_50], 64, 114, 49); PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_50], 64, 114, 65); PikePrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 114, 97); PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_OPEN], 64, 114, 113); PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_OPEN], 64, 114, 129); +#elif FRENCH + PikePrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 138, 33); + PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_50], 64, 138, 49); + PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_50], 64, 118, 65); + PikePrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 138, 97); + PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_OPEN], 64, 138, 113); + PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_OPEN], 64, 118, 129); +#endif PutWindowTilemap(gRecordsWindowId); CopyWindowToVram(gRecordsWindowId, COPYWIN_FULL); } @@ -1405,7 +1423,11 @@ static void ShowFactoryResultsWindow(u8 battleMode) PrintAligned(gStringVar4, 0); AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_Lv502, 8, 33, TEXT_SKIP_DRAW, NULL); +#if ENGLISH AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_RentalSwap, 152, 33, TEXT_SKIP_DRAW, NULL); +#elif FRENCH + AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_RentalSwap, 158, 33, TEXT_SKIP_DRAW, NULL); +#endif AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gText_OpenLv, 8, 97, TEXT_SKIP_DRAW, NULL); PrintHyphens(10); FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 49); @@ -2474,7 +2496,11 @@ void CopyFrontierBrainTrainerName(u8 *dst) else facility = VarGet(VAR_FRONTIER_FACILITY); +#if ENGLISH for (i = 0; i < PLAYER_NAME_LENGTH; i++) +#elif FRENCH + for (i = 0; i < TRAINER_NAME_LENGTH + 1; i++) +#endif dst[i] = gTrainers[sFrontierBrainTrainerIds[facility]].trainerName[i]; dst[i] = EOS; diff --git a/src/item_menu.c b/src/item_menu.c index 8a93fc4f4c..571a1505bf 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -146,7 +146,11 @@ static void Task_CloseBagMenu(u8); static u8 AddItemMessageWindow(u8); static void RemoveItemMessageWindow(u8); static void ReturnToItemList(u8); +#if ENGLISH static void PrintItemQuantity(u8, s16); +#elif FRENCH +static void PrintItemQuantity(u8, s16, u32); +#endif static u8 BagMenu_AddWindow(u8); static u8 GetSwitchBagPocketDirection(void); static void SwitchBagPocket(u8, s16, bool16); @@ -275,7 +279,11 @@ static const struct MenuAction sItemMenuActions[] = { [ACTION_WALK] = {gMenuText_Walk, ItemMenu_UseOutOfBattle}, [ACTION_DESELECT] = {gMenuText_Deselect, ItemMenu_Register}, [ACTION_CHECK_TAG] = {gMenuText_CheckTag, ItemMenu_CheckTag}, +#if ENGLISH [ACTION_CONFIRM] = {gMenuText_Confirm, Task_FadeAndCloseBagMenu}, +#elif FRENCH + [ACTION_CONFIRM] = {gMenuText_Confirm2, Task_FadeAndCloseBagMenu}, +#endif [ACTION_SHOW] = {gMenuText_Show, ItemMenu_Show}, [ACTION_GIVE_FAVOR_LADY] = {gMenuText_Give2, ItemMenu_GiveFavorLady}, [ACTION_CONFIRM_QUIZ_LADY] = {gMenuText_Confirm, ItemMenu_ConfirmQuizLady}, @@ -323,8 +331,14 @@ static const u8 sContextMenuItems_Cancel[] = { }; static const u8 sContextMenuItems_BerryBlenderCrush[] = { +#if ENGLISH ACTION_CONFIRM, ACTION_CHECK_TAG, ACTION_DUMMY, ACTION_CANCEL +#elif FRENCH + ACTION_CONFIRM, ACTION_DUMMY, + ACTION_CHECK_TAG, ACTION_DUMMY, + ACTION_CANCEL, ACTION_DUMMY +#endif }; static const u8 sContextMenuItems_Apprentice[] = { @@ -1187,15 +1201,29 @@ void CloseItemMessage(u8 taskId) static void AddItemQuantityWindow(u8 windowType) { +#if ENGLISH PrintItemQuantity(BagMenu_AddWindow(windowType), 1); +#elif FRENCH + u32 windowId = BagMenu_AddWindow(windowType); + PrintItemQuantity(windowId, 1, TEXT_SKIP_DRAW); + CopyWindowToVram(windowId, 3); +#endif } +#if ENGLISH static void PrintItemQuantity(u8 windowId, s16 quantity) +#elif FRENCH +static void PrintItemQuantity(u8 windowId, s16 quantity, u32 speed) +#endif { u8 numDigits = (gBagPosition.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS; ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, numDigits); StringExpandPlaceholders(gStringVar4, gText_xVar1); +#if ENGLISH AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 40), 2, 0, 0); +#elif FRENCH + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, GetStringCenterAlignXOffset(FONT_NORMAL, gStringVar4, 40), 2, speed, NULL); +#endif } // Prints the quantity of items to be sold and the amount that would be earned @@ -1852,7 +1880,11 @@ static void Task_ChooseHowManyToToss(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE) { + #if ENGLISH PrintItemQuantity(gBagMenu->windowIds[ITEMWIN_QUANTITY], tItemCount); + #elif FRENCH + PrintItemQuantity(gBagMenu->windowIds[ITEMWIN_QUANTITY], tItemCount, 0); + #endif } else if (JOY_NEW(A_BUTTON)) { @@ -2215,7 +2247,11 @@ static void Task_ChooseHowManyToDeposit(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&tItemCount, tQuantity) == TRUE) { + #if ENGLISH PrintItemQuantity(gBagMenu->windowIds[ITEMWIN_QUANTITY], tItemCount); + #elif FRENCH + PrintItemQuantity(gBagMenu->windowIds[ITEMWIN_QUANTITY], tItemCount, 0); + #endif } else if (JOY_NEW(A_BUTTON)) { @@ -2528,7 +2564,11 @@ static void DisplayCurrentMoneyWindow(void) { u8 windowId = BagMenu_AddWindow(ITEMWIN_MONEY); PrintMoneyAmountInMoneyBoxWithBorder(windowId, 1, 14, GetMoney(&gSaveBlock1Ptr->money)); +#if ENGLISH AddMoneyLabelObject(19, 11); +#elif FRENCH + AddMoneyLabelObject(24, 11); +#endif } static void RemoveMoneyWindow(void) diff --git a/src/landmark.c b/src/landmark.c index 615a9bfe3e..4fdf494e5e 100644 --- a/src/landmark.c +++ b/src/landmark.c @@ -15,6 +15,7 @@ struct LandmarkList const struct Landmark *const *landmarks; }; +#if ENGLISH static const u8 LandmarkName_FlowerShop[] = _("FLOWER SHOP"); static const u8 LandmarkName_PetalburgWoods[] = _("PETALBURG WOODS"); static const u8 LandmarkName_MrBrineysCottage[] = _("MR. BRINEY'S COTTAGE"); @@ -57,6 +58,50 @@ static const u8 LandmarkName_MirageTower[] = _("MIRAGE TOWER"); static const u8 LandmarkName_AlteringCave[] = _("ALTERING CAVE"); static const u8 LandmarkName_DesertUnderpass[] = _("DESERT UNDERPASS"); static const u8 LandmarkName_TrainerHill[] = _("TRAINER HILL"); +#elif FRENCH +static const u8 LandmarkName_FlowerShop[] = _("FLEURISTE"); +static const u8 LandmarkName_PetalburgWoods[] = _("BOIS CLEMENTI"); +static const u8 LandmarkName_MrBrineysCottage[] = _("COTTAGE DE M. MARCO"); +static const u8 LandmarkName_AbandonedShip[] = _("EPAVE"); +static const u8 LandmarkName_SeashoreHouse[] = _("MAISON DU BORD DE MER"); +static const u8 LandmarkName_SlateportBeach[] = _("PLAGE POIVRESSEL"); +static const u8 LandmarkName_CyclingRoad[] = _("PISTE CYCLABLE"); +static const u8 LandmarkName_NewMauville[] = _("NEW LAVANDIA"); +static const u8 LandmarkName_TrickHouse[] = _("MAISON DES PIEGES"); +static const u8 LandmarkName_OldLadysRestShop[] = _("GITE VIEILLE DAME"); +static const u8 LandmarkName_Desert[] = _("DESERT"); +static const u8 LandmarkName_WinstrateFamily[] = _("FAMILLE STRATEGE"); +static const u8 LandmarkName_CableCar[] = _("TELEPHERIQUE"); +static const u8 LandmarkName_GlassWorkshop[] = _("ATELIER DU VERRE"); +static const u8 LandmarkName_WeatherInstitute[] = _("CENTRE METEO"); +static const u8 LandmarkName_MeteorFalls[] = _("SITE METEORE"); +static const u8 LandmarkName_TunnelersRestHouse[] = _("REFUGE DES FOREURS"); +static const u8 LandmarkName_RusturfTunnel[] = _("TUNNEL MERAZON"); +static const u8 LandmarkName_PokemonDayCare[] = _("PENSION POKéMON"); +static const u8 LandmarkName_SafariZoneEntrance[] = _("ENTREE PARC SAFARI"); +static const u8 LandmarkName_MtPyre[] = _("MONT MEMORIA"); +static const u8 LandmarkName_ShoalCave[] = _("GROTTE TREFONDS"); +static const u8 LandmarkName_SeafloorCavern[] = _("CAVERNE FONDMER"); +static const u8 LandmarkName_GraniteCave[] = _("GROTTE GRANITE"); +static const u8 LandmarkName_OceanCurrent[] = _("COURANT OCEANIQUE"); +static const u8 LandmarkName_LanettesHouse[] = _("MAISON D’ANNETTE"); +static const u8 LandmarkName_FieryPath[] = _("CHEMIN ARDENT"); +static const u8 LandmarkName_JaggedPass[] = _("SENTIER SINUROC"); +static const u8 LandmarkName_SkyPillar[] = _("PILIER CELESTE"); +static const u8 LandmarkName_BerryMastersHouse[] = _("MAITRE DES BAIES"); +static const u8 LandmarkName_IslandCave[] = _("GROTTE ISLAND"); +static const u8 LandmarkName_DesertRuins[] = _("RUINES DESERT"); +static const u8 LandmarkName_ScorchedSlab[] = _("GROTTE ZENITH"); +static const u8 LandmarkName_AncientTomb[] = _("TOMBEAU ANTIQUE"); +static const u8 LandmarkName_SealedChamber[] = _("SANCTUAIRE"); +static const u8 LandmarkName_FossilManiacsHouse[] = _("MANIAQUE DES FOSSILES"); +static const u8 LandmarkName_HuntersHouse[] = _("CHERCHEUR DE TRESORS"); +static const u8 LandmarkName_MagmaHideout[] = _("PLANQUE MAGMA"); +static const u8 LandmarkName_MirageTower[] = _("TOUR MIRAGE"); +static const u8 LandmarkName_AlteringCave[] = _("GROTTE METAMO"); +static const u8 LandmarkName_DesertUnderpass[] = _("VOIE DU DESERT"); +static const u8 LandmarkName_TrainerHill[] = _("MONT DRESSEURS"); +#endif static const struct Landmark Landmark_FlowerShop = {LandmarkName_FlowerShop, FLAG_LANDMARK_FLOWER_SHOP}; static const struct Landmark Landmark_PetalburgWoods = {LandmarkName_PetalburgWoods, -1}; diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c index 85340ed96e..f9272f28cb 100644 --- a/src/lilycove_lady.c +++ b/src/lilycove_lady.c @@ -396,7 +396,11 @@ static u8 BufferQuizAuthorName(void) sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz; if (sQuizLadyPtr->playerName[0] == EOS) { + #if ENGLISH StringCopy_PlayerName(gStringVar1, gText_QuizLady_Lady); + #elif FRENCH + StringCopy(gStringVar1, gText_QuizLady_Lady); + #endif authorNameId = QUIZ_AUTHOR_NAME_LADY; } else diff --git a/src/main.c b/src/main.c index 5fd236447b..b1261c856a 100644 --- a/src/main.c +++ b/src/main.c @@ -33,9 +33,13 @@ static void IntrDummy(void); const u8 gGameVersion = GAME_VERSION; -const u8 gGameLanguage = GAME_LANGUAGE; // English +const u8 gGameLanguage = GAME_LANGUAGE; +#if ENGLISH const char BuildDateTime[] = "2005 02 21 11:10"; +#elif FRENCH +const char BuildDateTime[] = "2005 07 01 18:30"; +#endif const IntrFunc gIntrTableTemplate[] = { diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 241aed00c1..ed05ff47ee 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -38,12 +38,21 @@ static EWRAM_DATA struct MauvilleManStoryteller * sStorytellerPtr = NULL; static EWRAM_DATA u8 sStorytellerWindowId = 0; static const u16 sDefaultBardSongLyrics[BARD_SONG_LENGTH] = { +#if ENGLISH EC_WORD_SHAKE, EC_WORD_IT, EC_WORD_DO, EC_WORD_THE, EC_WORD_DIET, EC_WORD_DANCE +#elif FRENCH + EC_WORD_FEELING, + EC_WORD_DIET, + EC_WORD_IT_S, + EC_EMPTY_WORD, + EC_WORD_COOL, + EC_EMPTY_WORD +#endif }; static const u8 * const sGiddyAdjectives[] = { diff --git a/src/menu_specialized.c b/src/menu_specialized.c index dacefdb672..a4512f956f 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -46,7 +46,11 @@ static const struct WindowTemplate sWindowTemplates_MailboxMenu[MAILBOXWIN_COUNT .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, + #if ENGLISH .width = 8, + #elif FRENCH + .width = 24, + #endif .height = 2, .paletteNum = 15, .baseBlock = 0x8 @@ -58,7 +62,11 @@ static const struct WindowTemplate sWindowTemplates_MailboxMenu[MAILBOXWIN_COUNT .width = 8, .height = 18, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x18 + #elif FRENCH + .baseBlock = 0x38 + #endif }, [MAILBOXWIN_OPTIONS] = { .bg = 0, @@ -67,7 +75,11 @@ static const struct WindowTemplate sWindowTemplates_MailboxMenu[MAILBOXWIN_COUNT .width = 11, .height = 8, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x18 + #elif FRENCH + .baseBlock = 0x38 + #endif } }; @@ -219,7 +231,16 @@ u8 MailboxMenu_AddWindow(u8 windowIdx) template.width = GetMaxWidthInMenuTable(&gMailboxMailOptions[0], 4); sMailboxWindowIds[windowIdx] = AddWindow(&template); } - else // MAILBOXWIN_TITLE or MAILBOXWIN_LIST + #if FRENCH + else if (windowIdx == MAILBOXWIN_TITLE) + { + struct WindowTemplate template = sWindowTemplates_MailboxMenu[windowIdx]; + s32 width = GetStringWidth(FONT_NORMAL, gText_Mailbox, 0) + 9; + template.width = (width / 8) + 2; + sMailboxWindowIds[windowIdx] = AddWindow(&template); + } + #endif + else // MAILBOXWIN_TITLE or MAILBOXWIN_LIST in English. MAILBOXWIN_LIST in French. { sMailboxWindowIds[windowIdx] = AddWindow(&sWindowTemplates_MailboxMenu[windowIdx]); } diff --git a/src/minigame_countdown.c b/src/minigame_countdown.c index 4c72136d4c..4e5cc82d95 100644 --- a/src/minigame_countdown.c +++ b/src/minigame_countdown.c @@ -1,5 +1,8 @@ #include "global.h" #include "decompress.h" +#if FRENCH +#include "graphics.h" +#endif #include "link.h" #include "link_rfu.h" #include "sound.h" @@ -374,8 +377,10 @@ static void CreateStartSprite(u16 tileTag, u16 palTag, s16 x, s16 y, u8 subprior static void InitStartGraphic(u8 spriteId1, u8 spriteId2, u8 spriteId3); static void SpriteCB_Start(struct Sprite *sprite); +#if ENGLISH static const u16 s321Start_Pal[] = INCBIN_U16("graphics/link/321start.gbapal"); static const u32 s321Start_Gfx[] = INCBIN_U32("graphics/link/321start.4bpp.lz"); +#endif #define tState data[0] #define tTilesTag data[2] @@ -603,8 +608,13 @@ static void SpriteCB_Start(struct Sprite *sprite) static void Load321StartGfx(u16 tileTag, u16 palTag) { +#if ENGLISH struct CompressedSpriteSheet spriteSheet = {s321Start_Gfx, 0xE00, 0}; struct SpritePalette spritePalette = {s321Start_Pal, 0}; +#elif FRENCH + struct CompressedSpriteSheet spriteSheet = {g321Start_Gfx, 0xE00, 0}; + struct SpritePalette spritePalette = {g321Start_Pal, 0}; +#endif spriteSheet.tag = tileTag; spritePalette.tag = palTag; diff --git a/src/mystery_event_msg.c b/src/mystery_event_msg.c index 51141bb77e..d1d75dfdc7 100644 --- a/src/mystery_event_msg.c +++ b/src/mystery_event_msg.c @@ -1,5 +1,6 @@ #include "global.h" +#if ENGLISH const u8 gText_MysteryEventBerry[] = _("Obtained a {STR_VAR_2} BERRY!\nDad has it at PETALBURG GYM."); const u8 gText_MysteryEventBerryTransform[] = _("The {STR_VAR_1} BERRY transformed into\none {STR_VAR_2} BERRY."); const u8 gText_MysteryEventBerryObtained[] = _("The {STR_VAR_1} BERRY has already been\nobtained."); @@ -9,5 +10,19 @@ const u8 gText_MysteryEventRareWord[] = _("A rare word has been added."); const u8 gText_MysteryEventSentOver[] = _("{STR_VAR_1} was sent over!"); const u8 gText_MysteryEventFullParty[] = _("Your party is full.\n{STR_VAR_1} could not be sent over."); const u8 gText_MysteryEventNewTrainer[] = _("A new TRAINER has arrived in\nHOENN."); -const u8 gText_MysteryEventNewAdversaryInBattleTower[] = _("A new adversary has arrived in the\nBATTLE TOWER."); +static const u8 gText_MysteryEventNewAdversaryInBattleTower[] = _("A new adversary has arrived in the\nBATTLE TOWER."); // Unused const u8 gText_MysteryEventCantBeUsed[] = _("This data can't be used in\nthis version."); +#elif FRENCH +ALIGNED(4) +const u8 gText_MysteryEventBerry[] = _("Tu as obtenu une BAIE {STR_VAR_2}!\nPapa en a une à l’ARENE de CLEMENTI."); +const u8 gText_MysteryEventBerryTransform[] = _("La BAIE {STR_VAR_1} s’est transformée en\nune BAIE {STR_VAR_2}."); +const u8 gText_MysteryEventBerryObtained[] = _("Tu avais déjà obtenu la BAIE\n{STR_VAR_1}."); +const u8 gText_MysteryEventSpecialRibbon[] = _("Un RUBAN spécial a été remis au\nPOKéMON de ton équipe."); +const u8 gText_MysteryEventNationalDex[] = _("Tu peux maintenant accéder au\nMODE NATIONAL dans ton POKéDEX."); +const u8 gText_MysteryEventRareWord[] = _("Un mot rare a été ajouté."); +const u8 gText_MysteryEventSentOver[] = _("{STR_VAR_1} a été envoyé!"); +const u8 gText_MysteryEventFullParty[] = _("Ton équipe est complète.\n{STR_VAR_1} ne peut pas être envoyé."); +const u8 gText_MysteryEventNewTrainer[] = _("Un nouveau DRESSEUR est arrivé\ndans la région de HOENN."); +static const u8 gText_MysteryEventNewAdversaryInBattleTower[] = _("A new adversary has arrived in the\nBATTLE TOWER."); // Unused +const u8 gText_MysteryEventCantBeUsed[] = _("Ces données ne peuvent être utilisées\ndans cette version."); +#endif \ No newline at end of file diff --git a/src/mystery_gift_scripts.c b/src/mystery_gift_scripts.c index fcd7f568d0..1709c28186 100644 --- a/src/mystery_gift_scripts.c +++ b/src/mystery_gift_scripts.c @@ -3,7 +3,11 @@ #include "mystery_gift_server.h" #include "mystery_gift.h" +#if ENGLISH static const u8 sText_CanceledReadingCard[] = _("Canceled reading\nthe Card."); +#elif FRENCH +static const u8 sText_CanceledReadingCard[] = _("Annuler la lecture\nde la carte."); +#endif //================== diff --git a/src/pokeblock.c b/src/pokeblock.c index d9c0bb6336..58ff25d44b 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -312,7 +312,11 @@ static const struct WindowTemplate sWindowTemplates[] = .bg = 0, .tilemapLeft = 2, .tilemapTop = 1, + #if ENGLISH .width = 9, + #elif FRENCH + .width = 10, + #endif .height = 2, .paletteNum = 15, .baseBlock = 0x1E @@ -324,7 +328,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 14, .height = 18, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x30 + #elif FRENCH + .baseBlock = 0x32 + #endif }, [WIN_SPICY] = { .bg = 0, @@ -333,7 +341,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 5, .height = 2, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x12C + #elif FRENCH + .baseBlock = 0x12E + #endif }, [WIN_DRY] = { .bg = 0, @@ -342,7 +354,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 5, .height = 2, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x136 + #elif FRENCH + .baseBlock = 0x138 + #endif }, [WIN_SWEET] = { .bg = 0, @@ -351,7 +367,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 5, .height = 2, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x140 + #elif FRENCH + .baseBlock = 0x142 + #endif }, [WIN_BITTER] = { .bg = 0, @@ -360,7 +380,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 5, .height = 2, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x14A + #elif FRENCH + .baseBlock = 0x14C + #endif }, [WIN_SOUR] = { .bg = 0, @@ -369,7 +393,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 5, .height = 2, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x154 + #elif FRENCH + .baseBlock = 0x156 + #endif }, [WIN_FEEL] = { .bg = 0, @@ -378,7 +406,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 2, .height = 2, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x15E + #elif FRENCH + .baseBlock = 0x160 + #endif }, [WIN_ACTIONS_TALL] = { .bg = 1, @@ -387,7 +419,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 6, .height = 6, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x162 + #elif FRENCH + .baseBlock = 0x164 + #endif }, [WIN_ACTIONS] = { .bg = 1, @@ -396,7 +432,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 6, .height = 4, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x186 + #elif FRENCH + .baseBlock = 0x188 + #endif }, [WIN_TOSS_MSG] = { .bg = 1, @@ -405,7 +445,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 27, .height = 4, .paletteNum = 15, + #if ENGLISH .baseBlock = 0x19E + #elif FRENCH + .baseBlock = 0x1A0 + #endif }, DUMMY_WIN_TEMPLATE }; @@ -418,7 +462,11 @@ static const struct WindowTemplate sTossPkblockWindowTemplate = .width = 5, .height = 4, .paletteNum = 15, - .baseBlock = 0x20A + #if ENGLISH + .baseBlock = 0x20A + #elif FRENCH + .baseBlock = 0x20C + #endif }; static const struct ListMenuTemplate sPokeblockListMenuTemplate = @@ -700,7 +748,12 @@ static void DrawPokeblockMenuTitleText(void) u8 i; const u8 *itemName = ItemId_GetName(ITEM_POKEBLOCK_CASE); + +#if ENGLISH PrintOnPokeblockWindow(WIN_TITLE, itemName, GetStringCenterAlignXOffset(FONT_NORMAL, itemName, 72)); +#elif FRENCH + PrintOnPokeblockWindow(WIN_TITLE, itemName, GetStringCenterAlignXOffset(FONT_NORMAL, itemName, 80)); +#endif PrintOnPokeblockWindow(WIN_SPICY, gText_Spicy, 0); PrintOnPokeblockWindow(WIN_DRY, gText_Dry, 0); diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index 406d1377d6..5ccbdb8bdf 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -1,5 +1,8 @@ #include "global.h" #include "bg.h" +#if FRENCH +#include "graphics.h" +#endif #include "m4a.h" #include "main.h" #include "malloc.h" @@ -69,8 +72,10 @@ static const u16 sCryMeterNeedle_Pal[] = INCBIN_U16("graphics/pokedex/cry_meter_ static const u8 sCryMeterNeedle_Gfx[] = INCBIN_U8("graphics/pokedex/cry_meter_needle.4bpp"); static const u16 sCryMeter_Tilemap[] = INCBIN_U16("graphics/pokedex/cry_meter_map.bin"); // Unused +#if ENGLISH static const u16 sCryMeter_Pal[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); static const u8 sCryMeter_Gfx[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); +#endif static const u16 sWaveformOffsets[][72] = { @@ -457,8 +462,13 @@ bool8 LoadCryMeter(struct CryScreenWindow *window, u8 windowId) if (!sCryMeterNeedle) sCryMeterNeedle = AllocZeroed(sizeof(*sCryMeterNeedle)); + #if ENGLISH CopyToWindowPixelBuffer(windowId, sCryMeter_Gfx, 0, 0); LoadPalette(sCryMeter_Pal, window->paletteNo * 16, 32); + #elif FRENCH + CopyToWindowPixelBuffer(windowId, gCryMeter_Gfx, 0, 0); + LoadPalette(gCryMeter_Pal, window->paletteNo * 16, 32); + #endif gDexCryScreenState++; break; case 1: diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c index d0d2b7c55a..798001be61 100644 --- a/src/pokenav_conditions_search_results.c +++ b/src/pokenav_conditions_search_results.c @@ -1,6 +1,9 @@ #include "global.h" #include "pokenav.h" #include "bg.h" +#if FRENCH +#include "graphics.h" +#endif #include "menu.h" #include "window.h" #include "sound.h" @@ -76,9 +79,11 @@ static const LoopedTask sConditionSearchLoopedTaskFuncs[] = ConvertConditionsToListRanks }; +#if ENGLISH static const u16 sConditionSearchResultFramePal[] = INCBIN_U16("graphics/pokenav/condition/search_results.gbapal"); static const u32 sConditionSearchResultTiles[] = INCBIN_U32("graphics/pokenav/condition/search_results.4bpp.lz"); static const u32 sConditionSearchResultTilemap[] = INCBIN_U32("graphics/pokenav/condition/search_results.bin.lz"); +#endif static const u16 sListBg_Pal[] = INCBIN_U16("graphics/pokenav/condition/search_results_list.gbapal"); static const struct BgTemplate sConditionSearchResultBgTemplates[] = @@ -427,11 +432,19 @@ static u32 LoopedTask_OpenConditionSearchResults(s32 state) { case 0: InitBgTemplates(sConditionSearchResultBgTemplates, ARRAY_COUNT(sConditionSearchResultBgTemplates)); + #if ENGLISH DecompressAndCopyTileDataToVram(1, sConditionSearchResultTiles, 0, 0, 0); SetBgTilemapBuffer(1, gfx->buff); CopyToBgTilemapBuffer(1, sConditionSearchResultTilemap, 0, 0); CopyBgTilemapBufferToVram(1); CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, 0x10, 0x20); + #elif FRENCH + DecompressAndCopyTileDataToVram(1, gConditionSearchResultTiles, 0, 0, 0); + SetBgTilemapBuffer(1, gfx->buff); + CopyToBgTilemapBuffer(1, gConditionSearchResultTilemap, 0, 0); + CopyBgTilemapBufferToVram(1); + CopyPaletteIntoBufferUnfaded(gConditionSearchResultFramePal, 0x10, 0x20); + #endif CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -676,8 +689,13 @@ static void CreateSearchResultsList(void) template.count = GetSearchResultsMonListCount(); template.itemSize = sizeof(struct PokenavListItem); template.startIndex = GetSearchResultsCurrentListIndex(); +#if ENGLISH template.item_X = 13; template.windowWidth = 17; +#elif FRENCH + template.item_X = 12; + template.windowWidth = 18; +#endif template.listTop = 1; template.maxShowed = 8; template.fillValue = 2; diff --git a/src/pokenav_list.c b/src/pokenav_list.c index ed3d40dee2..34efe06d9b 100644 --- a/src/pokenav_list.c +++ b/src/pokenav_list.c @@ -224,7 +224,11 @@ static u32 LoopedTask_PrintListItems(s32 state) if (listSub->iconDrawFunc != NULL) listSub->iconDrawFunc(listSub->listWindow.windowId, listSub->printIndex, row); + #if ENGLISH AddTextPrinterParameterized(listSub->listWindow.windowId, listSub->listWindow.fontId, listSub->itemTextBuffer, 8, (row << 4) + 1, TEXT_SKIP_DRAW, NULL); + #elif FRENCH + AddTextPrinterParameterized(listSub->listWindow.windowId, listSub->listWindow.fontId, listSub->itemTextBuffer, 10, (row << 4) + 1, TEXT_SKIP_DRAW, NULL); + #endif if (++listSub->listWindow.numPrinted >= listSub->listWindow.numToPrint) { // Finished printing items. If icons were being drawn, draw the @@ -714,7 +718,11 @@ static void PrintCheckPageTrainerName(struct PokenavListWindowState *state, stru list->bufferItemFunc(state->listPtr + state->listItemSize * state->windowTopIndex, list->itemTextBuffer); list->iconDrawFunc(list->listWindow.windowId, state->windowTopIndex, list->listWindow.unkA); FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(4), 0, list->listWindow.unkA * 16, list->listWindow.width * 8, 16); +#if ENGLISH AddTextPrinterParameterized3(list->listWindow.windowId, list->listWindow.fontId, 8, (list->listWindow.unkA * 16) + 1, colors, TEXT_SKIP_DRAW, list->itemTextBuffer); +#elif FRENCH + AddTextPrinterParameterized3(list->listWindow.windowId, list->listWindow.fontId, 10, (list->listWindow.unkA * 16) + 1, colors, TEXT_SKIP_DRAW, list->itemTextBuffer); +#endif SetListMarginTile(&list->listWindow, TRUE); CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_FULL, 0, list->listWindow.unkA * 2, list->listWindow.width, 2); } @@ -724,7 +732,11 @@ static void PrintMatchCallListTrainerName(struct PokenavListWindowState *state, { list->bufferItemFunc(state->listPtr + state->listItemSize * state->windowTopIndex, list->itemTextBuffer); FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, list->listWindow.unkA * 16, list->listWindow.width * 8, 16); +#if ENGLISH AddTextPrinterParameterized(list->listWindow.windowId, list->listWindow.fontId, list->itemTextBuffer, 8, list->listWindow.unkA * 16 + 1, TEXT_SKIP_DRAW, NULL); +#elif FRENCH + AddTextPrinterParameterized(list->listWindow.windowId, list->listWindow.fontId, list->itemTextBuffer, 10, list->listWindow.unkA * 16 + 1, TEXT_SKIP_DRAW, NULL); +#endif SetListMarginTile(&list->listWindow, FALSE); CopyWindowToVram(list->listWindow.windowId, COPYWIN_FULL); } @@ -740,7 +752,11 @@ static void PrintMatchCallFieldNames(struct PokenavListSub *list, u32 fieldId) u32 top = (list->listWindow.unkA + 1 + (fieldId * 2)) & 0xF; FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, top << 4, list->listWindow.width, 16); +#if ENGLISH AddTextPrinterParameterized3(list->listWindow.windowId, FONT_NARROW, 2, (top << 4) + 1, colors, TEXT_SKIP_DRAW, fieldNames[fieldId]); +#elif FRENCH + AddTextPrinterParameterized3(list->listWindow.windowId, FONT_NARROW, 4, (top << 4) + 1, colors, TEXT_SKIP_DRAW, fieldNames[fieldId]); +#endif CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_GFX, 0, top << 1, list->listWindow.width, 2); } @@ -760,7 +776,11 @@ static void PrintMatchCallFlavorText(struct PokenavListWindowState *windowState, if (str != NULL) { FillWindowTilesByRow(list->listWindow.windowId, 1, r6 * 2, list->listWindow.width - 1, 2); - AddTextPrinterParameterized(list->listWindow.windowId, FONT_NARROW, str, 2, (r6 << 4) + 1, TEXT_SKIP_DRAW, NULL); +#if ENGLISH + AddTextPrinterParameterized(list->listWindow.windowId, FONT_NARROW, str, 2, (r6 << 4) + 1, TEXT_SKIP_DRAW, NULL); +#elif FRENCH + AddTextPrinterParameterized(list->listWindow.windowId, FONT_NARROW, str, 4, (r6 << 4) + 1, TEXT_SKIP_DRAW, NULL); +#endif CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_GFX, 0, r6 * 2, list->listWindow.width, 2); } } @@ -849,7 +869,11 @@ static void CreateListArrowSprites(struct PokenavListWindowState *windowState, s u32 spriteId; s16 x; +#if ENGLISH spriteId = CreateSprite(&sSpriteTemplate_RightArrow, list->listWindow.x * 8 + 3, (list->listWindow.y + 1) * 8, 7); +#elif FRENCH + spriteId = CreateSprite(&sSpriteTemplate_RightArrow, list->listWindow.x * 8 + 5, (list->listWindow.y + 1) * 8, 7); +#endif list->rightArrow = &gSprites[spriteId]; x = list->listWindow.x * 8 + (list->listWindow.width - 1) * 4; diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index c51ab10bae..1ffcf713aa 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -688,9 +688,11 @@ static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) RequestDma3Copy(gDecompressionBuffer, (void *)OBJ_VRAM0 + (GetSpriteTileStartByTag(2) * 32), size, 1); menu->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + sMenuLeftHeaderSpriteSheets[menuGfxId].size; +#if ENGLISH if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT || menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_IN) menu->leftHeaderSprites[1]->x2 = 56; else +#endif menu->leftHeaderSprites[1]->x2 = 64; } @@ -761,7 +763,11 @@ static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) if (!isOnRightSide) start = -96, end = 32; else + #if ENGLISH start = 256, end = 160; + #elif FRENCH + start = 256, end = 144; + #endif for (i = 0; i < (s32)ARRAY_COUNT(menu->leftHeaderSprites); i++) { diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c index fd5b36fae0..9aec4bd192 100755 --- a/src/pokenav_match_call_gfx.c +++ b/src/pokenav_match_call_gfx.c @@ -3,6 +3,9 @@ #include "data.h" #include "decompress.h" #include "dma3.h" +#if FRENCH +#include "graphics.h" +#endif #include "international_string_util.h" #include "main.h" #include "match_call.h" @@ -114,9 +117,11 @@ static u32 ShowCheckPageDown(s32); static u32 ExitCheckPage(s32); static u32 ExitMatchCall(s32); +#if ENGLISH static const u16 sMatchCallUI_Pal[] = INCBIN_U16("graphics/pokenav/match_call/ui.gbapal"); static const u32 sMatchCallUI_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/ui.4bpp.lz"); static const u32 sMatchCallUI_Tilemap[] = INCBIN_U32("graphics/pokenav/match_call/ui.bin.lz"); +#endif static const u16 sOptionsCursor_Pal[] = INCBIN_U16("graphics/pokenav/match_call/options_cursor.gbapal"); static const u32 sOptionsCursor_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/options_cursor.4bpp.lz"); static const u16 sCallWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call/call_window.gbapal"); @@ -329,11 +334,19 @@ static u32 LoopedTask_OpenMatchCall(s32 state) InitBgTemplates(sMatchCallBgTemplates, ARRAY_COUNT(sMatchCallBgTemplates)); ChangeBgX(2, 0, BG_COORD_SET); ChangeBgY(2, 0, BG_COORD_SET); + #if ENGLISH DecompressAndCopyTileDataToVram(2, sMatchCallUI_Gfx, 0, 0, 0); SetBgTilemapBuffer(2, gfx->bgTilemapBuffer2); CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0); CopyBgTilemapBufferToVram(2); CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, 0x20, 0x20); + #elif FRENCH + DecompressAndCopyTileDataToVram(2, gMatchCallUI_Gfx, 0, 0, 0); + SetBgTilemapBuffer(2, gfx->bgTilemapBuffer2); + CopyToBgTilemapBuffer(2, gMatchCallUI_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(2); + CopyPaletteIntoBufferUnfaded(gMatchCallUI_Pal, 0x20, 0x20); + #endif CopyBgTilemapBufferToVram(2); return LT_INC_AND_PAUSE; case 1: diff --git a/src/pokenav_match_call_list.c b/src/pokenav_match_call_list.c index b00c76b48a..6a3ba0f7fe 100755 --- a/src/pokenav_match_call_list.c +++ b/src/pokenav_match_call_list.c @@ -405,11 +405,19 @@ void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntry *matchCallEntry, u8 const u8 *className; if (!matchCallEntry->isSpecialTrainer) { + #if ENGLISH int index = GetTrainerIdxByRematchIdx(matchCallEntry->headerId); const struct Trainer *trainer = &gTrainers[index]; int class = trainer->trainerClass; className = gTrainerClassNames[class]; trainerName = trainer->trainerName; + #elif FRENCH + const struct Trainer *trainer = &gTrainers[GetTrainerIdxByRematchIdx(matchCallEntry->headerId)]; + int class = trainer->trainerClass; + int gender = trainer->encounterMusic_gender; + className = GetTrainerClassNameGenderSpecific(class, gender, trainer->trainerName); + trainerName = trainer->trainerName; + #endif } else { diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 39c1659a9a..73e2f60808 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -138,7 +138,11 @@ static const struct WindowTemplate sMapSecInfoWindowTemplate = .bg = 1, .tilemapLeft = 17, .tilemapTop = 4, +#if ENGLISH .width = 12, +#elif FRENCH + .width = 13, +#endif .height = 13, .paletteNum = 1, .baseBlock = 0x4C @@ -537,7 +541,11 @@ static void UpdateMapSecInfoWindow(struct Pokenav_RegionMapGfx *state) { case MAPSECTYPE_CITY_CANFLY: FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1)); + #if ENGLISH PutWindowRectTilemap(state->infoWindowId, 0, 0, 12, 2); + #elif FRENCH + PutWindowRectTilemap(state->infoWindowId, 0, 0, 13, 2); + #endif AddTextPrinterParameterized(state->infoWindowId, FONT_NARROW, regionMap->mapSecName, 0, 1, TEXT_SKIP_DRAW, NULL); DrawCityMap(state, regionMap->mapSecId, regionMap->posWithinMapSec); CopyWindowToVram(state->infoWindowId, COPYWIN_FULL); @@ -545,9 +553,15 @@ static void UpdateMapSecInfoWindow(struct Pokenav_RegionMapGfx *state) break; case MAPSECTYPE_CITY_CANTFLY: FillWindowPixelBuffer(state->infoWindowId, PIXEL_FILL(1)); + #if ENGLISH PutWindowRectTilemap(state->infoWindowId, 0, 0, 12, 2); AddTextPrinterParameterized(state->infoWindowId, FONT_NARROW, regionMap->mapSecName, 0, 1, TEXT_SKIP_DRAW, NULL); FillBgTilemapBufferRect(1, 0x1041, 17, 6, 12, 11, 17); + #elif FRENCH + PutWindowRectTilemap(state->infoWindowId, 0, 0, 13, 2); + AddTextPrinterParameterized(state->infoWindowId, FONT_NARROW, regionMap->mapSecName, 0, 1, TEXT_SKIP_DRAW, NULL); + FillBgTilemapBufferRect(1, 0x1041, 17, 6, 13, 11, 17); + #endif CopyWindowToVram(state->infoWindowId, COPYWIN_FULL); SetCityZoomTextInvisibility(TRUE); break; @@ -561,7 +575,11 @@ static void UpdateMapSecInfoWindow(struct Pokenav_RegionMapGfx *state) SetCityZoomTextInvisibility(TRUE); break; case MAPSECTYPE_NONE: + #if ENGLISH FillBgTilemapBufferRect(1, 0x1041, 17, 4, 12, 13, 17); + #elif FRENCH + FillBgTilemapBufferRect(1, 0x1041, 17, 4, 13, 13, 17); + #endif CopyBgTilemapBufferToVram(1); SetCityZoomTextInvisibility(TRUE); break; @@ -643,7 +661,11 @@ static void DrawCityMap(struct Pokenav_RegionMapGfx *state, int mapSecId, int po if (i == NUM_CITY_MAPS) return; +#if ENGLISH FillBgTilemapBufferRect_Palette0(1, 0x1041, 17, 6, 12, 11); +#elif FRENCH + FillBgTilemapBufferRect_Palette0(1, 0x1041, 17, 6, 13, 11); +#endif CopyToBgTilemapBufferRect(1, state->cityZoomPics[i], 18, 6, 10, 10); } @@ -656,7 +678,11 @@ static void PrintLandmarkNames(struct Pokenav_RegionMapGfx *state, int mapSecId, if (!landmarkName) break; + #if ENGLISH StringCopyPadded(gStringVar1, landmarkName, CHAR_SPACE, 12); + #elif FRENCH + StringCopyPadded(gStringVar1, landmarkName, CHAR_SPACE, 13); + #endif AddTextPrinterParameterized(state->infoWindowId, FONT_NARROW, gStringVar1, 0, i * 16 + 17, TEXT_SKIP_DRAW, NULL); i++; } diff --git a/src/pokenav_ribbons_list.c b/src/pokenav_ribbons_list.c index ca5559d966..b676df037a 100644 --- a/src/pokenav_ribbons_list.c +++ b/src/pokenav_ribbons_list.c @@ -1,5 +1,8 @@ #include "global.h" #include "pokenav.h" +#if FRENCH +#include "graphics.h" +#endif #include "bg.h" #include "menu.h" #include "window.h" @@ -71,9 +74,11 @@ static const LoopedTask sMonRibbonListLoopTaskFuncs[] = BuildBoxMonRibbonList }; +#if ENGLISH static const u16 sMonRibbonListFramePal[] = INCBIN_U16("graphics/pokenav/ribbons/list_bg.gbapal"); static const u32 sMonRibbonListFrameTiles[] = INCBIN_U32("graphics/pokenav/ribbons/list_bg.4bpp.lz"); static const u32 sMonRibbonListFrameTilemap[] = INCBIN_U32("graphics/pokenav/ribbons/list_bg.bin.lz"); +#endif static const u16 sMonRibbonListUi_Pal[] = INCBIN_U16("graphics/pokenav/ribbons/list_ui.gbapal"); static const struct BgTemplate sMonRibbonListBgTemplates[] = @@ -428,10 +433,17 @@ static u32 LoopedTask_OpenRibbonsMonList(s32 state) { case 0: InitBgTemplates(sMonRibbonListBgTemplates, ARRAY_COUNT(sMonRibbonListBgTemplates)); + #if ENGLISH DecompressAndCopyTileDataToVram(1, sMonRibbonListFrameTiles, 0, 0, 0); SetBgTilemapBuffer(1, menu->buff); CopyToBgTilemapBuffer(1, sMonRibbonListFrameTilemap, 0, 0); CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, 0x10, 0x20); + #elif FRENCH + DecompressAndCopyTileDataToVram(1, gMonRibbonListFrameTiles, 0, 0, 0); + SetBgTilemapBuffer(1, menu->buff); + CopyToBgTilemapBuffer(1, gMonRibbonListFrameTilemap, 0, 0); + CopyPaletteIntoBufferUnfaded(gMonRibbonListFramePal, 0x10, 0x20); + #endif CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -684,8 +696,13 @@ static void CreateRibbonMonsList(void) template.count = GetRibbonsMonListCount(); template.itemSize = sizeof(struct PokenavListItem); template.startIndex = GetRibbonListMenuCurrIndex(); +#if ENGLISH template.item_X = 13; template.windowWidth = 17; +#elif FRENCH + template.item_X = 12; + template.windowWidth = 18; +#endif template.listTop = 1; template.maxShowed = 8; template.fillValue = 2;