diff --git a/data/tilesets/graphics.inc b/data/tilesets/graphics.inc index c85bd249e1..cda2af4547 100644 --- a/data/tilesets/graphics.inc +++ b/data/tilesets/graphics.inc @@ -366,6 +366,7 @@ gTilesetPalettes_InsideBuilding:: .incbin "data/tilesets/primary/building/palettes/14.gbapal" .incbin "data/tilesets/primary/building/palettes/15.gbapal" +.ifdef ENGLISH .align 2 gTilesetTiles_Shop:: .incbin "data/tilesets/secondary/shop/tiles.4bpp.lz" @@ -388,6 +389,7 @@ gTilesetPalettes_Shop:: .incbin "data/tilesets/secondary/shop/palettes/13.gbapal" .incbin "data/tilesets/secondary/shop/palettes/14.gbapal" .incbin "data/tilesets/secondary/shop/palettes/15.gbapal" +.endif .align 2 gTilesetTiles_PokemonCenter:: @@ -1408,6 +1410,7 @@ gTilesetPalettes_BattlePalace:: .incbin "data/tilesets/secondary/battle_palace/palettes/14.gbapal" .incbin "data/tilesets/secondary/battle_palace/palettes/15.gbapal" +.ifdef ENGLISH .align 2 gTilesetTiles_BattleDome:: .incbin "data/tilesets/secondary/battle_dome/tiles.4bpp.lz" @@ -1430,6 +1433,7 @@ gTilesetPalettes_BattleDome:: .incbin "data/tilesets/secondary/battle_dome/palettes/13.gbapal" .incbin "data/tilesets/secondary/battle_dome/palettes/14.gbapal" .incbin "data/tilesets/secondary/battle_dome/palettes/15.gbapal" +.endif .align 2 gTilesetTiles_BattleFactory:: diff --git a/graphics/credits/the_end_copyright_fr.bin b/graphics/credits/the_end_copyright_fr.bin new file mode 100644 index 0000000000..58d461ed45 Binary files /dev/null and b/graphics/credits/the_end_copyright_fr.bin differ diff --git a/graphics/credits/the_end_copyright_fr.png b/graphics/credits/the_end_copyright_fr.png new file mode 100644 index 0000000000..e74c5d937d Binary files /dev/null and b/graphics/credits/the_end_copyright_fr.png differ diff --git a/include/config.h b/include/config.h index 56d1f843e1..636841135c 100644 --- a/include/config.h +++ b/include/config.h @@ -17,7 +17,7 @@ // Using English as default. #if !defined(ENGLISH) && !defined(FRENCH) -#define FRENCH 1 +#define ENGLISH 1 #endif #if ENGLISH diff --git a/include/graphics.h b/include/graphics.h index 0972743c5f..e8048b4b0e 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -5063,4 +5063,54 @@ extern const u8 gMailTilemap_Retro[]; extern const u8 gMonMarkingsMenu_Gfx[]; extern const u16 gMonMarkingsMenu_Pal[]; +#if FRENCH +extern const u16 gPokeJumpBonuses_Pal[]; +extern const u32 gPokeJumpBonuses_Gfx[]; +extern const u32 gPokeJumpBonuses_Tilemap[]; + +extern const u16 g321Start_Pal[]; +extern const u32 g321Start_Gfx[]; + +extern const u16 gBlenderCenter_Pal[]; + +extern const u32 gFrontierPassMapScreen_Gfx[]; + +// roulette +extern const u16 gRouletteShadow_Pal[]; +extern const u16 gRouletteBall_Pal[]; +extern const u16 gRouletteBallCounter_Pal[]; +extern const u16 gRouletteCursor_Pal[]; +extern const u16 gRouletteCredit_Pal[]; +extern const u16 gRouletteShroomish_Pal[]; +extern const u16 gRouletteTaillow_Pal[]; +extern const u16 gRouletteGridIcons_Pal[]; +extern const u16 gRouletteWynaut_Pal[]; +extern const u16 gRouletteAzurill_Pal[]; +extern const u16 gRouletteSkitty_Pal[]; +extern const u16 gRouletteMakuhita_Pal[]; + +// pokedex cry screen +extern const u16 gCryMeter_Pal[]; +extern const u8 gCryMeter_Gfx[]; + +// credits +extern const u32 gCreditsCopyrightEnd_Gfx[]; +extern const u32 gCreditsCopyrightEnd_Tilemap[]; + +// pokenav match call gfx +extern const u16 gMatchCallUI_Pal[]; +extern const u32 gMatchCallUI_Gfx[]; +extern const u32 gMatchCallUI_Tilemap[]; + +// pokenav conditions search results +extern const u16 gConditionSearchResultFramePal[]; +extern const u32 gConditionSearchResultTiles[]; +extern const u32 gConditionSearchResultTilemap[]; + +// pokenav ribbon list +extern const u16 gMonRibbonListFramePal[]; +extern const u32 gMonRibbonListFrameTiles[]; +extern const u32 gMonRibbonListFrameTilemap[]; +#endif + #endif //GUARD_GRAPHICS_H diff --git a/src/berry_blender.c b/src/berry_blender.c index efede23bde..ea46e2d5de 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -241,7 +241,9 @@ static s16 sDebug_GameTimeStage; u8 gInGameOpponentsNo; +#if ENGLISH static const u16 sBlenderCenter_Pal[] = INCBIN_U16("graphics/berry_blender/center.gbapal"); +#endif static const u8 sBlenderCenter_Tilemap[] = INCBIN_U8("graphics/berry_blender/center_map.bin"); static const u16 sBlenderOuter_Pal[] = INCBIN_U16("graphics/berry_blender/outer.gbapal"); @@ -249,6 +251,7 @@ static const u16 sUnused_Pal[] = INCBIN_U16("graphics/berry_blender/unused.gbapa static const u16 sEmpty_Pal[16 * 14] = {0}; // unused text +#if ENGLISH static const u8 sUnusedText_YesNo[] = _("YES\nNO"); static const u8 sUnusedText_2[] = _("▶"); static const u8 sUnusedText_Space[] = _(" "); @@ -264,6 +267,23 @@ static const u8 sText_Lassie[] = _("LASSIE"); static const u8 sText_Master[] = _("MASTER"); static const u8 sText_Dude[] = _("DUDE"); static const u8 sText_Miss[] = _("MISS"); +#elif FRENCH +static const u8 sUnusedText_YesNo[] = _("OUI\nNON"); +static const u8 sUnusedText_2[] = _("▶"); +static const u8 sUnusedText_Space[] = _(" "); +static const u8 sUnusedText_Terminating[] = _("Fin."); +static const u8 sUnusedText_LinkPartnerNotFound[] = _("Partenaire(s) de jeu non trouvé(s).\nVeuillez réessayer.\p"); + +static const u8 sText_BerryBlenderStart[] = _("Démarrage du MIXEUR.\pChoisissez une BAIE dans le SAC\nà mettre dans le MIXEUR.\p"); +static const u8 sText_NewParagraph[] = _("\p"); +static const u8 sText_WasMade[] = _("{STR_VAR_1} a été fait!"); +static const u8 sText_Mister[] = _("PAPY"); +static const u8 sText_Laddie[] = _("GAMIN"); +static const u8 sText_Lassie[] = _("GAMINE"); +static const u8 sText_Master[] = _("MAITRE"); +static const u8 sText_Dude[] = _("TYPE"); +static const u8 sText_Miss[] = _("MISS"); +#endif static const u8 *const sBlenderOpponentsNames[] = { @@ -274,7 +294,7 @@ static const u8 *const sBlenderOpponentsNames[] = [BLENDER_DUDE] = sText_Dude, [BLENDER_MISS] = sText_Miss }; - +#if ENGLISH static const u8 sText_PressAToStart[] = _("Press the A Button to start."); static const u8 sText_PleaseWaitAWhile[] = _("Please wait a while."); static const u8 sText_CommunicationStandby[] = _("Communication standby…"); @@ -298,6 +318,31 @@ static const u8 sText_Ranking[] = _("RANKING"); static const u8 sText_TheLevelIs[] = _("The level is "); static const u8 sText_TheFeelIs[] = _(", and the feel is "); static const u8 sText_Dot2[] = _("."); +#elif FRENCH +static const u8 sText_PressAToStart[] = _("Appuyez sur le bouton A pour démarrer."); +static const u8 sText_PleaseWaitAWhile[] = _("Veuillez patientez."); +static const u8 sText_CommunicationStandby[] = _("Connexion en cours…"); +static const u8 sText_WouldLikeToBlendAnotherBerry[] = _("Voulez-vous mixer une autre BAIE?"); +static const u8 sText_RunOutOfBerriesForBlending[] = _("Vous n’avez plus de BAIES à mettre\ndans le MIXEUR.\p"); +static const u8 sText_YourPokeblockCaseIsFull[] = _("Votre BOITE {POKEBLOCK}S est pleine.\p"); +static const u8 sText_HasNoBerriesToPut[] = _("{STR_VAR_1} n’a pas de BAIES à mettre\ndans le MIXEUR."); +static const u8 sText_ApostropheSPokeblockCaseIsFull[] = _("La BOITE {POKEBLOCK}S de\n{STR_VAR_1} est pleine.\p"); +static const u8 sText_BlendingResults[] = _("RESULTATS DU MIXAGE"); +static const u8 sText_BerryUsed[] = _("BAIE UTIL."); +static const u8 sText_SpaceBerry[] = _("BAIE {STR_VAR_1}"); +static const u8 sText_Time[] = _("TEMPS"); +static const u8 sText_Min[] = _(" MIN "); +static const u8 sText_Sec[] = _(" S"); +static const u8 sText_MaximumSpeed[] = _("VITESSE MAXI."); +static const u8 sText_RPM[] = _(" RPM"); +static const u8 sText_Dot[] = _("."); +static const u8 sText_NewLine[] = _("\n"); +static const u8 sText_Space[] = _(" "); +static const u8 sText_Ranking[] = _("CLASSEMENT"); +static const u8 sText_TheLevelIs[] = _("Niveau: "); +static const u8 sText_TheFeelIs[] = _(" / Onctuosité: "); +static const u8 sText_Dot2[] = _("."); +#endif static const struct BgTemplate sBgTemplates[3] = { @@ -916,6 +961,7 @@ static const u8 sUnused[] = 0x0c, 0x10, 0x00, 0xff, 0x06, 0x27, 0x02, 0xff, 0x00, 0x0c, 0x48, 0x02, 0xff, 0x00, 0x01, 0x1f, 0x02, 0xff, 0x00, 0x16, 0x37, 0x02, 0xff, 0x00, 0x0d, 0x50, 0x4b, 0x02, 0xff, 0x06, 0x06, 0x06, 0x06, +#if ENGLISH 0x05, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x02 }; @@ -928,6 +974,9 @@ static const struct WindowTemplate sBlenderRecordWindowTemplate = .height = 11, .paletteNum = 15, .baseBlock = 8 +#elif FRENCH + 0x05, 0x03, 0x03, 0x03, 0x02, 0x02 +#endif }; static void UpdateHitPitch(void) @@ -959,7 +1008,11 @@ static bool8 LoadBerryBlenderGfx(void) case 1: CopyToBgTilemapBuffer(2, sBlenderCenter_Tilemap, 0x400, 0); CopyBgTilemapBufferToVram(2); + #if ENGLISH LoadPalette(sBlenderCenter_Pal, 0, 0x100); + #elif FRENCH + LoadPalette(gBlenderCenter_Pal, 0, 0x100); + #endif sBerryBlender->loadGfxState++; break; case 2: @@ -2850,12 +2903,20 @@ static void CB2_CheckPlayAgainLink(void) case 1: sBerryBlender->gameEndState = 3; StringCopy(gStringVar4, gLinkPlayers[sBerryBlender->canceledPlayerId].name); + #if ENGLISH StringAppend(gStringVar4, sText_ApostropheSPokeblockCaseIsFull); + #elif FRENCH + StringAppendWithPlaceholder(gStringVar4, sText_ApostropheSPokeblockCaseIsFull, gStringVar4); + #endif break; case 2: sBerryBlender->gameEndState++; StringCopy(gStringVar4, gLinkPlayers[sBerryBlender->canceledPlayerId].name); + #if ENGLISH StringAppend(gStringVar4, sText_HasNoBerriesToPut); + #elif FRENCH + StringAppendWithPlaceholder(gStringVar4, sText_HasNoBerriesToPut, gStringVar4); + #endif break; case 3: if (Blender_PrintText(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay())) @@ -3514,13 +3575,24 @@ static bool8 PrintBlendingResults(void) StringCopy(sBerryBlender->stringVar, sBerryBlender->blendedBerries[place].name); ConvertInternationalString(sBerryBlender->stringVar, gLinkPlayers[place].language); + #if ENGLISH StringAppend(sBerryBlender->stringVar, sText_SpaceBerry); + #elif FRENCH + StringAppendWithPlaceholder(sBerryBlender->stringVar, sText_SpaceBerry, sBerryBlender->stringVar); + #endif Blender_AddTextPrinter(5, sBerryBlender->stringVar, 0x54, yPos, TEXT_SKIP_DRAW, 3); } Blender_AddTextPrinter(5, sText_MaximumSpeed, 0, 0x51, TEXT_SKIP_DRAW, 3); ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->maxRPM / 100, STR_CONV_MODE_RIGHT_ALIGN, 3); + #if ENGLISH StringAppend(sBerryBlender->stringVar, sText_Dot); + #elif FRENCH + { + u8 comma[] = _(","); + StringAppend(sBerryBlender->stringVar, comma); + } + #endif ConvertIntToDecimalStringN(text, sBerryBlender->maxRPM % 100, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(sBerryBlender->stringVar, text); @@ -3592,6 +3664,10 @@ static bool8 PrintBlendingResults(void) return FALSE; } +#if FRENCH +static const u8 sUnused2[] = {0x03, 0x03, 0x03, 0x03, 0x02}; +#endif + static void PrintMadePokeblockString(struct Pokeblock *pokeblock, u8 *dst) { u8 text[12]; @@ -3599,7 +3675,11 @@ static void PrintMadePokeblockString(struct Pokeblock *pokeblock, u8 *dst) dst[0] = EOS; StringCopy(dst, gPokeblockNames[pokeblock->color]); +#if ENGLISH StringAppend(dst, sText_WasMade); +#elif FRENCH + StringAppendWithPlaceholder(dst, sText_WasMade, dst); +#endif StringAppend(dst, sText_NewLine); flavorLvl = GetHighestPokeblocksFlavorLevel(pokeblock); @@ -3759,10 +3839,24 @@ void ShowBerryBlenderRecordWindow(void) { s32 i; s32 xPos, yPos; +#if ENGLISH struct WindowTemplate winTemplate; u8 text[32]; winTemplate = sBlenderRecordWindowTemplate; +#elif FRENCH + struct WindowTemplate winTemplate = + { + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 4, + .width = 18, + .height = 11, + .paletteNum = 15, + .baseBlock = 8 + }; + u8 text[32]; +#endif gRecordsWindowId = AddWindow(&winTemplate); DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); @@ -3779,7 +3873,12 @@ void ShowBerryBlenderRecordWindow(void) record = gSaveBlock1Ptr->berryBlenderRecords[i]; txtPtr = ConvertIntToDecimalStringN(text, record / 100, STR_CONV_MODE_RIGHT_ALIGN, 3); + #if ENGLISH txtPtr = StringAppend(txtPtr, sText_Dot); + #elif FRENCH + *txtPtr++ = CHAR_COMMA; + *txtPtr = EOS; + #endif txtPtr = ConvertIntToDecimalStringN(txtPtr, record % 100, STR_CONV_MODE_LEADING_ZEROS, 2); txtPtr = StringAppend(txtPtr, sText_RPM); diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index e8c4bc7e68..12de4af67a 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -27,27 +27,78 @@ static int BerryFix_TrySetScene(int); static void BerryFix_SetScene(int); static void BerryFix_HideScene(void); +#if ENGLISH static const u8 sText_BerryProgramUpdate[] = _("Berry Program Update"); static const u8 sText_RubySapphire[] = _("Ruby/Sapphire"); static const u8 sText_Emerald[] = _("Emerald"); -static const u8 sText_BerryProgramWillBeUpdatedPressA[] = _("The Berry Program on your POKéMON\n" - "Ruby/Sapphire Game Pak will be updated.\n" - "{COLOR RED}{SHADOW LIGHT_RED}Press the A Button."); -static const u8 sText_EnsureGBAConnectionMatches[] = _("Please ensure the connection of your\n" - "Game Boy Advance system matches this.\n" - "{COLOR RED}{SHADOW LIGHT_RED}YES: Press the A Button.\n" - "NO: Turn off the power and try again."); -static const u8 sText_TurnOffPowerHoldingStartSelect[] = _("Please turn on the power of POKéMON\n" - "Ruby/Sapphire while holding START and\n" - "SELECT simultaneously. Then, ensure\n" - "the picture above appears."); -static const u8 sText_TransmittingPleaseWait[] = _("Transmitting. Please wait.\n" - "{COLOR RED}{SHADOW LIGHT_RED}Please do not turn off the power or\n" - "unplug the Game Boy Advance Game\nLink Cable."); -static const u8 sText_PleaseFollowInstructionsOnScreen[] = _("Please follow the instructions on your\n" - "POKéMON Ruby/Sapphire screen."); -static const u8 sText_TransmissionFailureTryAgain[] = _("Transmission failure.\n" - "{COLOR RED}{SHADOW LIGHT_RED}Please try again."); +static const u8 sText_BerryProgramWillBeUpdatedPressA[] = _( + "The Berry Program on your POKéMON\n" + "Ruby/Sapphire Game Pak will be updated.\n" + "{COLOR RED}{SHADOW LIGHT_RED}Press the A Button."); + +static const u8 sText_EnsureGBAConnectionMatches[] = _( + "Please ensure the connection of your\n" + "Game Boy Advance system matches this.\n" + "{COLOR RED}{SHADOW LIGHT_RED}YES: Press the A Button.\n" + "NO: Turn off the power and try again."); + +static const u8 sText_TurnOffPowerHoldingStartSelect[] = _( + "Please turn on the power of POKéMON\n" + "Ruby/Sapphire while holding START and\n" + "SELECT simultaneously. Then, ensure\n" + "the picture above appears."); + +static const u8 sText_TransmittingPleaseWait[] = _( + "Transmitting. Please wait.\n" + "{COLOR RED}{SHADOW LIGHT_RED}Please do not turn off the power or\n" + "unplug the Game Boy Advance Game\nLink Cable."); + +static const u8 sText_PleaseFollowInstructionsOnScreen[] = _( + "Please follow the instructions on your\n" + "POKéMON Ruby/Sapphire screen."); + +static const u8 sText_TransmissionFailureTryAgain[] = _( + "Transmission failure.\n" + "{COLOR RED}{SHADOW LIGHT_RED}Please try again."); + +#elif FRENCH + +static const u8 sText_BerryProgramUpdate[] = _("Mise à jour du Programme Baie"); +static const u8 sText_RubySapphire[] = _("Rubis/Saphir"); +static const u8 sText_Emerald[] = _("Emeraude"); +static const u8 sText_BerryProgramWillBeUpdatedPressA[] = _( + "Le Programme Baie sur votre\n" + "cartouche Rubis/Saphir va être\n" + "mis à jour.\n" + "{COLOR 4}{SHADOW 5}Appuyez sur le bouton A."); + +static const u8 sText_EnsureGBAConnectionMatches[] = _( + "Veuillez vérifier que vos Game Boy\n" + "Advance sont connectées correctement.\n" + "{COLOR 4}{SHADOW 5}Oui: Bouton A.\n" + "Non: Eteindre et recommencer."); + +static const u8 sText_TurnOffPowerHoldingStartSelect[] = _( + "Veuillez allumer la console POKéMON\n" + "Rubis/Saphir en maintenant enfoncés\n" + "simultanément START et SELECT.\n" + "Assurez-vous que ce logo apparaît."); + +static const u8 sText_TransmittingPleaseWait[] = _( + "Transmission en cours…\n" + "{COLOR 4}{SHADOW 5}N’éteignez pas votre Game Boy\n" + "Advance et ne retirez pas le câble\n" + "Game Boy Advance Game Link."); + +static const u8 sText_PleaseFollowInstructionsOnScreen[] = _( + "Veuillez suivre les instructions sur\n" + "l’écran de POKéMON Rubis/Saphir."); + +static const u8 sText_TransmissionFailureTryAgain[] = _( + "Echec de la transmission.\n" + "{COLOR 4}{SHADOW 5}Veuillez réessayer."); + +#endif static const struct BgTemplate sBerryFixBgTemplates[] = { { diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index f683c73f45..fc4cedf361 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -109,7 +109,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 8, .height = 2, .paletteNum = 15, + #if ENGLISH .baseBlock = 69, + #elif FRENCH + .baseBlock = 72, + #endif }, { // WIN_SIZE_FIRM .bg = 1, @@ -118,16 +122,29 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 18, .height = 4, .paletteNum = 15, + #if ENGLISH .baseBlock = 85, + #elif FRENCH + .baseBlock = 88, + #endif }, { // WIN_DESC .bg = 1, + #if ENGLISH .tilemapLeft = 4, .tilemapTop = 14, .width = 25, .height = 4, .paletteNum = 15, .baseBlock = 157, + #elif FRENCH + .tilemapLeft = 3, + .tilemapTop = 14, + .width = 27, + .height = 4, + .paletteNum = 15, + .baseBlock = 160, + #endif }, { // WIN_BERRY_TAG .bg = 0, @@ -136,7 +153,11 @@ static const struct WindowTemplate sWindowTemplates[] = .width = 8, .height = 2, .paletteNum = 15, + #if ENGLISH .baseBlock = 257, + #elif FRENCH + .baseBlock = 268, + #endif }, DUMMY_WIN_TEMPLATE }; @@ -399,8 +420,14 @@ static void PrintAllBerryData(void) static void PrintBerryNumberAndName(void) { +#if ENGLISH const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); ConvertIntToDecimalStringN(gStringVar1, sBerryTag->berryId, STR_CONV_MODE_LEADING_ZEROS, 2); +#elif FRENCH + const struct Berry *berry; + ConvertIntToDecimalStringN(gStringVar1, sBerryTag->berryId, STR_CONV_MODE_LEADING_ZEROS, 2); + berry = GetBerryInfo(sBerryTag->berryId); +#endif StringCopy(gStringVar2, berry->name); StringExpandPlaceholders(gStringVar4, gText_NumberVar1Var2); PrintTextInBerryTagScreen(WIN_BERRY_NAME, gStringVar4, 0, 1, 0, 0); @@ -412,6 +439,7 @@ static void PrintBerrySize(void) AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_SizeSlash, 0, 1, TEXT_SKIP_DRAW, NULL); if (berry->size != 0) { + #if ENGLISH u32 inches, fraction; inches = 1000 * berry->size / 254; @@ -422,6 +450,10 @@ static void PrintBerrySize(void) ConvertIntToDecimalStringN(gStringVar1, inches, STR_CONV_MODE_LEFT_ALIGN, 2); ConvertIntToDecimalStringN(gStringVar2, fraction, STR_CONV_MODE_LEFT_ALIGN, 2); + #elif FRENCH + ConvertIntToDecimalStringN(gStringVar1, berry->size / 10, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar2, berry->size % 10, STR_CONV_MODE_LEFT_ALIGN, 2); + #endif StringExpandPlaceholders(gStringVar4, gText_Var1DotVar2); AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gStringVar4, 0x28, 1, 0, NULL); } @@ -444,13 +476,21 @@ static void PrintBerryFirmness(void) static void PrintBerryDescription1(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); +#if ENGLISH AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berry->description1, 0, 1, 0, NULL); +#elif FRENCH + AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berry->description1, 5, 1, 0, NULL); +#endif } static void PrintBerryDescription2(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berry->description2, 0, 0x11, 0, NULL); +#if ENGLISH + AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berry->description2, 0, 17, 0, NULL); +#elif FRENCH + AddTextPrinterParameterized(WIN_DESC, FONT_NORMAL, berry->description2, 5, 17, 0, NULL); +#endif } static void CreateBerrySprite(void) diff --git a/src/credits.c b/src/credits.c index 33362fb38b..a2002eb3dd 100644 --- a/src/credits.c +++ b/src/credits.c @@ -87,7 +87,9 @@ static EWRAM_DATA bool8 sUsedSpeedUp = 0; // Never read static EWRAM_DATA struct CreditsData *sCreditsData = {0}; static const u16 sCredits_Pal[] = INCBIN_U16("graphics/credits/credits.gbapal"); +#if ENGLISH static const u32 sCreditsCopyrightEnd_Gfx[] = INCBIN_U32("graphics/credits/the_end_copyright.4bpp.lz"); +#endif static void SpriteCB_CreditsMonBg(struct Sprite *); static void Task_WaitPaletteFade(u8); @@ -118,6 +120,7 @@ static void SpriteCB_Rival(struct Sprite *); static u8 CreateCreditsMonSprite(u16, s16, s16, u16); static void DeterminePokemonToShow(void); +#if ENGLISH static const u8 sTheEnd_LetterMap_T[] = { 0, 1, 0, @@ -162,6 +165,7 @@ static const u8 sTheEnd_LetterMap_D[] = 1, 0x88, 0x89, 1, 0x86, 0x87, }; +#endif #include "data/credits.h" @@ -784,7 +788,11 @@ static void Task_UpdatePage(u8 taskId) case 3: if (!gPaletteFade.active) { + #if ENGLISH gTasks[taskId].tDelay = 115; + #elif FRENCH + gTasks[taskId].tDelay = 121; + #endif gTasks[taskId].tState++; } return; @@ -918,7 +926,11 @@ static void Task_ShowMons(u8 taskId) if (sCreditsData->currShownMon < sCreditsData->numMonToShow - 1) { sCreditsData->currShownMon++; + #if ENGLISH gSprites[spriteId].data[3] = 50; + #elif FRENCH + gSprites[spriteId].data[3] = 52; + #endif } else { @@ -932,7 +944,11 @@ static void Task_ShowMons(u8 taskId) else sCreditsData->nextImgPos++; + #if ENGLISH gTasks[taskId].tDelay = 50; + #elif FRENCH + gTasks[taskId].tDelay = 52; + #endif gTasks[taskId].tState++; break; case 3: @@ -1077,8 +1093,11 @@ static void Task_CycleSceneryPalette(u8 taskId) case SCENE_FOREST_CATCH_RIVAL: if (gTasks[taskId].tTimer != TIMER_STOP) { - + #if ENGLISH if (gTasks[taskId].tTimer == 584) + #elif FRENCH + if (gTasks[taskId].tTimer == 620) + #endif { gTasks[gTasks[gTasks[taskId].tMainTaskId].tTaskId_BikeScene].tState = 10; gTasks[taskId].tTimer = TIMER_STOP; @@ -1290,6 +1309,7 @@ static void LoadTheEndScreen(u16 tileOffsetLoad, u16 tileOffsetWrite, u16 palOff u16 baseTile; u16 i; +#if ENGLISH LZ77UnCompVram(sCreditsCopyrightEnd_Gfx, (void *)(VRAM + tileOffsetLoad)); LoadPalette(gIntroCopyright_Pal, palOffset, sizeof(gIntroCopyright_Pal)); @@ -1297,8 +1317,18 @@ static void LoadTheEndScreen(u16 tileOffsetLoad, u16 tileOffsetWrite, u16 palOff for (i = 0; i < 32 * 32; i++) ((u16 *) (VRAM + tileOffsetWrite))[i] = baseTile + 1; +#elif FRENCH + LZ77UnCompVram(gCreditsCopyrightEnd_Gfx, (void *)(VRAM + tileOffsetLoad)); + LoadPalette(gIntroCopyright_Pal, palOffset, sizeof(gIntroCopyright_Pal)); + + baseTile = (palOffset / 16) << 12; + + for (i = 0; i < 32 * 32; i++) + ((u16 *) (VRAM + tileOffsetWrite))[i] = baseTile; +#endif } +#if ENGLISH static u16 GetLetterMapTile(u8 baseTiles) { u16 out = (baseTiles & 0x3F) + 80; @@ -1341,6 +1371,12 @@ static void DrawTheEnd(u16 offset, u16 palette) DrawLetterMapTiles(sTheEnd_LetterMap_N, 20, 7, offset, palette); DrawLetterMapTiles(sTheEnd_LetterMap_D, 24, 7, offset, palette); } +#elif FRENCH +static void DrawTheEnd(u16 offset, u16 palette) +{ + LZ77UnCompVram(gCreditsCopyrightEnd_Tilemap, ((u16 *) (VRAM + offset))); +} +#endif #define sState data[0] diff --git a/src/graphics.c b/src/graphics.c index 9f708f18b4..77195f6b6f 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1523,8 +1523,114 @@ const u16 gBerryCrush_Crusher_Pal[] = INCBIN_U16("graphics/berry_crush/crusher.g const u32 gBerryCrush_Crusher_Gfx[] = INCBIN_U32("graphics/berry_crush/crusher.4bpp.lz"); const u32 gBerryCrush_TextWindows_Tilemap[] = INCBIN_U32("graphics/berry_crush/text_windows.bin.lz"); +#if FRENCH +// Moved from other files in the french version. + +// credits +const u32 gCreditsCopyrightEnd_Gfx[] = INCBIN_U32("graphics/credits/the_end_copyright_fr.4bpp.lz"); +const u32 gCreditsCopyrightEnd_Tilemap[] = INCBIN_U32("graphics/credits/the_end_copyright_fr.bin.lz"); + +const u16 g321Start_Pal[] = INCBIN_U16("graphics/link/321start.gbapal"); +const u32 g321Start_Gfx[] = INCBIN_U32("graphics/link/321start.4bpp.lz"); + +// poke jump +const u16 gPokeJumpBonuses_Pal[] = INCBIN_U16("graphics/pokemon_jump/bonuses.gbapal"); +const u32 gPokeJumpBonuses_Gfx[] = INCBIN_U32("graphics/pokemon_jump/bonuses.4bpp.lz"); +const u32 gPokeJumpBonuses_Tilemap[] = INCBIN_U32("graphics/pokemon_jump/bonuses.bin.lz"); + +const u16 gBlenderCenter_Pal[] = INCBIN_U16("graphics/berry_blender/center.gbapal"); + +// tiles shop +const u16 gTilesetPalettes_Shop[][16] = +{ + INCBIN_U16("data/tilesets/secondary/shop/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/15.gbapal"), +}; +const u32 gTilesetTiles_Shop[] = INCBIN_U32("data/tilesets/secondary/shop/tiles.4bpp.lz"); + +// roulette +const u16 gRouletteShadow_Pal[] = INCBIN_U16("graphics/roulette/shadow.gbapal"); +const u16 gRouletteBall_Pal[] = INCBIN_U16("graphics/roulette/ball.gbapal"); +const u16 gRouletteBallCounter_Pal[] = INCBIN_U16("graphics/roulette/ball_counter.gbapal"); +const u16 gRouletteCursor_Pal[] = INCBIN_U16("graphics/roulette/cursor.gbapal"); +const u16 gRouletteCredit_Pal[] = INCBIN_U16("graphics/roulette/credit.gbapal"); +const u16 gRouletteShroomish_Pal[] = INCBIN_U16("graphics/roulette/shroomish.gbapal"); +const u16 gRouletteTaillow_Pal[] = INCBIN_U16("graphics/roulette/tailow.gbapal"); +const u16 gRouletteGridIcons_Pal[] = INCBIN_U16("graphics/roulette/grid_icons.gbapal"); +const u16 gRouletteWynaut_Pal[] = INCBIN_U16("graphics/roulette/wynaut.gbapal"); +const u16 gRouletteAzurill_Pal[] = INCBIN_U16("graphics/roulette/azurill.gbapal"); +const u16 gRouletteSkitty_Pal[] = INCBIN_U16("graphics/roulette/skitty.gbapal"); +const u16 gRouletteMakuhita_Pal[] = INCBIN_U16("graphics/roulette/makuhita.gbapal"); +const u16 gRouletteUnused1_Pal[] = INCBIN_U16("graphics/roulette/unused_1.gbapal"); +const u16 gRouletteUnused2_Pal[] = INCBIN_U16("graphics/roulette/unused_2.gbapal"); +const u16 gRouletteUnused3_Pal[] = INCBIN_U16("graphics/roulette/unused_3.gbapal"); +const u16 gRouletteUnused4_Pal[] = INCBIN_U16("graphics/roulette/unused_4.gbapal"); + +// frontier pass +const u32 gFrontierPassMapScreen_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_screen.4bpp.lz"); + +// tiles battle dome +const u16 gTilesetPalettes_BattleDome[][16] = +{ + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/15.gbapal"), +}; +const u32 gTilesetTiles_BattleDome[] = INCBIN_U32("data/tilesets/secondary/battle_dome/tiles.4bpp.lz"); + +// pokenav match call gfx +const u16 gMatchCallUI_Pal[] = INCBIN_U16("graphics/pokenav/match_call/ui.gbapal"); +const u32 gMatchCallUI_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/ui.4bpp.lz"); +const u32 gMatchCallUI_Tilemap[] = INCBIN_U32("graphics/pokenav/match_call/ui.bin.lz"); + +// pokenav conditions search results +const u16 gConditionSearchResultFramePal[] = INCBIN_U16("graphics/pokenav/condition/search_results.gbapal"); +const u32 gConditionSearchResultTiles[] = INCBIN_U32("graphics/pokenav/condition/search_results.4bpp.lz"); +const u32 gConditionSearchResultTilemap[] = INCBIN_U32("graphics/pokenav/condition/search_results.bin.lz"); + +// pokenav ribbons list +const u16 gMonRibbonListFramePal[] = INCBIN_U16("graphics/pokenav/ribbons/list_bg.gbapal"); +const u32 gMonRibbonListFrameTiles[] = INCBIN_U32("graphics/pokenav/ribbons/list_bg.4bpp.lz"); +const u32 gMonRibbonListFrameTilemap[] = INCBIN_U32("graphics/pokenav/ribbons/list_bg.bin.lz"); + +// pokedex +const u16 gCryMeter_Pal[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); +const u8 gCryMeter_Gfx[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); +#endif + // random garbage at the end. +#if ENGLISH static const u8 sEmpty3[0x54BAC] = {0}; +#elif FRENCH +static const u8 sEmpty3[0x4EA98] = {0}; +#endif static const u8 sUnused1[] = {0x0D, 0x00, 0x58, 0x02}; static const u8 sEmpty4[0x1145] = {0}; static const u8 sUnused2[] = {0x02};