diff options
author | Marijn van der Werf <marijn.vanderwerf@gmail.com> | 2017-06-24 18:06:32 +0200 |
---|---|---|
committer | Marijn van der Werf <marijn.vanderwerf@gmail.com> | 2017-06-24 18:24:08 +0200 |
commit | ec3fe21936b250b329e58941a47e11afb9b240e0 (patch) | |
tree | 31e152c5ff057e44bccaaccd80adb8b0f8e678dd | |
parent | 88bb5b267ee6a0cd93f39bb5eccc866a1b1c870c (diff) |
first src changes
-rw-r--r-- | include/link.h | 4 | ||||
-rw-r--r-- | include/menu.h | 4 | ||||
-rw-r--r-- | src/decoration.c | 7 | ||||
-rw-r--r-- | src/intro.c | 4 | ||||
-rw-r--r-- | src/menu.c | 134 | ||||
-rw-r--r-- | src/pokemon_size_record.c | 7 | ||||
-rw-r--r-- | src/pokemon_storage_system.c | 5 | ||||
-rw-r--r-- | src/script_menu.c | 165 | ||||
-rw-r--r-- | src/secret_base.c | 5 | ||||
-rw-r--r-- | src/trainer_card.c | 4 | ||||
-rw-r--r-- | src/tv.c | 36 |
11 files changed, 371 insertions, 4 deletions
diff --git a/include/link.h b/include/link.h index eb6f642bc..900234ed6 100644 --- a/include/link.h +++ b/include/link.h @@ -130,6 +130,10 @@ extern u32 gLinkStatus; extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; extern u16 gSendCmd[CMD_LENGTH]; extern u8 gShouldAdvanceLinkState; +#if GERMAN +extern u8 deUnkValue1; +extern u8 deUnkValue2; +#endif extern struct LinkPlayer gLinkPlayers[]; extern u16 word_3002910[]; extern bool8 gReceivedRemoteLinkPlayers; diff --git a/include/menu.h b/include/menu.h index a6784a553..9eeebce60 100644 --- a/include/menu.h +++ b/include/menu.h @@ -91,4 +91,8 @@ void sub_8072DCC(u8); void sub_8072DDC(u8); void HandleDestroyMenuCursors(void); +#if GERMAN +u8 *de_sub_8073174(u8 *name, const u8 *format); +#endif + #endif // GUARD_MENU_H diff --git a/src/decoration.c b/src/decoration.c index fd44ff119..3bb0ec285 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1792,7 +1792,14 @@ void sub_80FE7EC(u8 taskId) sub_80FEC94(taskId); sub_80FECB8(gUnknown_020388F6); +#if ENGLISH MenuDrawTextWindow(15, 12, 29, 19); +#elif GERMAN + if ((gUnknown_020388F2 + gUnknown_020388F4) != gUnknown_020388D5) + { + MenuDrawTextWindow(15, 12, 29, 19); + } +#endif sub_80FECE0(gUnknown_020388F2 + gUnknown_020388F4); InitMenu(0, 1, 2, gUnknown_020388F3 + 1, gUnknown_020388F2, 13); diff --git a/src/intro.c b/src/intro.c index 396f5e5df..462a2134d 100644 --- a/src/intro.c +++ b/src/intro.c @@ -43,7 +43,11 @@ extern void *const gUnknown_0840B5A0[]; static const u16 Palette_406340[] = INCBIN_U16("graphics/intro/unknown1.gbapal"); static const u16 Palette_406360[] = INCBIN_U16("graphics/intro/unknown2.gbapal"); +#if ENGLISH static const u8 gIntroTiles[] = INCBIN_U8("graphics/intro/intro.4bpp.lz"); +#elif GERMAN +extern const u8 gIntroTiles[]; +#endif static const u16 gIntro1BGPals[][16] = { INCBIN_U16("graphics/intro/intro1_bgpal1.gbapal"), diff --git a/src/menu.c b/src/menu.c index d84a4c3c5..45cfbbc2f 100644 --- a/src/menu.c +++ b/src/menu.c @@ -9,6 +9,7 @@ #include "strings.h" #include "text.h" #include "text_window.h" +#include "string_util.h" struct Menu { @@ -611,6 +612,7 @@ u8 unref_sub_8072A5C(u8 *dest, u8 *src, u8 left, u16 top, u8 width, u32 a6) return sub_8004FD0(gMenuWindowPtr, dest, src, gMenuTextTileOffset, left, top, width, a6); } +#if ENGLISH int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6) { u8 newlineCount = sub_8004FD0(gMenuWindowPtr, NULL, str, gMenuTextTileOffset, left, top, width, a6); @@ -623,6 +625,90 @@ int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6) if (newlineCount < height) MenuFillWindowRectWithBlankTile(left, top + 2 * newlineCount, left + width - 1, height + top - 1); } +#elif GERMAN +__attribute__((naked)) +int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + sub sp, 0x10\n\ + mov r12, r0\n\ + ldr r0, [sp, 0x24]\n\ + ldr r4, [sp, 0x28]\n\ + str r4, [sp, 0xC]\n\ + lsls r1, 24\n\ + lsrs r5, r1, 24\n\ + lsls r2, 16\n\ + lsrs r4, r2, 16\n\ + lsls r3, 24\n\ + lsrs r6, r3, 24\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + ldr r0, _08072AF8 @ =gMenuWindowPtr\n\ + ldr r0, [r0]\n\ + ldr r1, _08072AFC @ =gMenuTextTileOffset\n\ + ldrh r3, [r1]\n\ + str r5, [sp]\n\ + str r4, [sp, 0x4]\n\ + str r6, [sp, 0x8]\n\ + movs r1, 0\n\ + mov r2, r12\n\ + bl sub_8004FD0\n\ + adds r1, r0, 0\n\ + lsls r1, 24\n\ + lsrs r2, r1, 24\n\ + movs r3, 0x7\n\ + ands r3, r5\n\ + cmp r3, 0\n\ + bne _08072B00\n\ + adds r1, r6, 0x7\n\ + asrs r1, 3\n\ + subs r1, 0x1\n\ + b _08072B0C\n\ + .align 2, 0\n\ +_08072AF8: .4byte gMenuWindowPtr\n\ +_08072AFC: .4byte gMenuTextTileOffset\n\ +_08072B00:\n\ + adds r3, r6, r3\n\ + subs r1, r3, 0x1\n\ + cmp r1, 0\n\ + bge _08072B0A\n\ + adds r1, r3, 0x6\n\ +_08072B0A:\n\ + asrs r1, 3\n\ +_08072B0C:\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r6, r1, 0\n\ + lsrs r5, 3\n\ + adds r1, r7, 0x7\n\ + asrs r1, 3\n\ + lsls r1, 24\n\ + lsrs r7, r1, 24\n\ + lsrs r4, 3\n\ + cmp r2, r7\n\ + bcs _08072B3E\n\ + lsls r1, r2, 1\n\ + adds r1, r4, r1\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r2, r5, r6\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r3, r7, r4\n\ + subs r3, 0x1\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + adds r0, r5, 0\n\ + bl MenuFillWindowRectWithBlankTile\n\ +_08072B3E:\n\ + add sp, 0x10\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif void MenuPrint_RightAligned(u8 *str, u8 left, u8 top) { @@ -735,3 +821,51 @@ void HandleDestroyMenuCursors(void) { DestroyMenuCursor(); } + +#if GERMAN +void de_sub_8073110(u8 * buffer, u8 * name) { + u8 * ptr, *ptr2, *ptr3; + + ptr2 = buffer; + ptr = &gStringVar1[1 + StringLengthN(gStringVar1, 256)]; + ptr3 = ptr; + + for (;;) + { + if (*ptr2 == EOS) + break; + + if (*ptr2 == 0xFD) + { + + *ptr3 = EOS; + ptr2 += 2; + + StringAppend(ptr, name); + StringAppend(ptr, ptr2); + + buffer[0] = EOS; + StringAppend(buffer, ptr); + break; + } + + *ptr3 = *ptr2; + ptr2 += 1; + ptr3 += 1; + } +} + +u8 *de_sub_8073174(u8 *name, const u8 *format) { + u32 offset; + u8 *ptr; + + offset = StringLengthN(gStringVar2, 0x100); + ptr = &gStringVar2[1 + offset]; + + StringCopy(ptr, format); + + de_sub_8073110(ptr, name); + + return StringCopy(name, ptr); +} +#endif diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index f293190e8..f2222bd3b 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -86,10 +86,17 @@ static u32 GetMonSize(u16 species, u16 b) static void FormatMonSizeRecord(u8 *string, u32 size) { +#if ENGLISH u8 decimalPoint[] = _("."); +#elif GERMAN + u8 decimalPoint[] = _(","); +#endif +#ifdef UNITS_IMPERIAL //Convert size from centimeters to inches size = (double)(size * 10) / (CM_PER_INCH * 10); +#endif + string = ConvertIntToDecimalStringN(string, size / 10, 0, 8); string = StringAppend(string, decimalPoint); ConvertIntToDecimalStringN(string, size % 10, 0, 1); diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index fb837f1f6..0cab07fc1 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -42,10 +42,13 @@ void sub_8098898(u8 index) { break; case 4: - // TODO: fix for German // {var} + " was released." ptr = StringCopy(gUnk2002694, gUnk20026e4); +#if ENGLISH ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text); +#elif GERMAN + ptr = de_sub_8073174(gUnk2002694, gUnknown_083B6DF4[index].text); +#endif break; case 3: diff --git a/src/script_menu.c b/src/script_menu.c index 23e8bf2d9..e1ad3f467 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -863,6 +863,7 @@ bool8 TryCreatePCMenu(void) } } +#if ENGLISH void CreatePCMenu(void) { u16 playersPCWidth = GetStringWidthInTilesForScriptMenu(gPCText_PlayersPC); @@ -897,6 +898,170 @@ void CreatePCMenu(void) InitMenu(0, 1, 1, numChoices, 0, width + 1); sub_80B5230(0, 0, width + 2, 2 * numChoices + 1, 0, numChoices); } +#elif GERMAN +__attribute__((naked)) +void CreatePCMenu(void) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + sub sp, 0x18\n\ + ldr r0, _080B5748 @ =0x0000084b\n\ + bl FlagGet\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080B5750\n\ + ldr r0, _080B574C @ =gPCText_LanettesPC\n\ + b _080B5752\n\ + .align 2, 0\n\ +_080B5748: .4byte 0x0000084b\n\ +_080B574C: .4byte gPCText_LanettesPC\n\ +_080B5750:\n\ + ldr r0, _080B57E8 @ =gPCText_SomeonesPC\n\ +_080B5752:\n\ + bl GetStringWidthInTilesForScriptMenu\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x8]\n\ + movs r4, 0x1\n\ + ldr r0, _080B57EC @ =gPCText_PlayersPC\n\ + bl GetStringWidthInTilesForScriptMenu\n\ + lsls r1, r4, 2\n\ + add r1, sp\n\ + adds r1, 0x8\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [r1]\n\ + ldr r0, _080B57F0 @ =gPCText_LogOff\n\ + bl GetStringWidthInTilesForScriptMenu\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x10]\n\ + movs r4, 0x3\n\ + ldr r0, _080B57F4 @ =0x00000804\n\ + bl FlagGet\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080B5798\n\ + ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\ + bl GetStringWidthInTilesForScriptMenu\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x14]\n\ + movs r4, 0x4\n\ +_080B5798:\n\ + movs r5, 0\n\ + cmp r5, r4\n\ + bge _080B57B4\n\ + add r2, sp, 0x8\n\ + adds r1, r4, 0\n\ +_080B57A2:\n\ + ldr r0, [r2]\n\ + cmp r5, r0\n\ + bge _080B57AC\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ +_080B57AC:\n\ + adds r2, 0x4\n\ + subs r1, 0x1\n\ + cmp r1, 0\n\ + bne _080B57A2\n\ +_080B57B4:\n\ + ldr r0, _080B57F4 @ =0x00000804\n\ + bl FlagGet\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080B57FC\n\ + movs r7, 0x4\n\ + adds r4, r5, 0x2\n\ + lsls r2, r4, 24\n\ + lsrs r2, 24\n\ + movs r0, 0\n\ + movs r1, 0\n\ + movs r3, 0x9\n\ + bl MenuDrawTextWindow\n\ + ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\ + movs r1, 0x1\n\ + movs r2, 0x5\n\ + bl MenuPrint\n\ + ldr r0, _080B57F0 @ =gPCText_LogOff\n\ + movs r1, 0x1\n\ + movs r2, 0x7\n\ + bl MenuPrint\n\ + b _080B5818\n\ + .align 2, 0\n\ +_080B57E8: .4byte gPCText_SomeonesPC\n\ +_080B57EC: .4byte gPCText_PlayersPC\n\ +_080B57F0: .4byte gPCText_LogOff\n\ +_080B57F4: .4byte 0x00000804\n\ +_080B57F8: .4byte gPCText_HallOfFame\n\ +_080B57FC:\n\ + movs r7, 0x3\n\ + adds r4, r5, 0x2\n\ + lsls r2, r4, 24\n\ + lsrs r2, 24\n\ + movs r0, 0\n\ + movs r1, 0\n\ + movs r3, 0x7\n\ + bl MenuDrawTextWindow\n\ + ldr r0, _080B5834 @ =gPCText_LogOff\n\ + movs r1, 0x1\n\ + movs r2, 0x5\n\ + bl MenuPrint\n\ +_080B5818:\n\ + adds r6, r4, 0\n\ + ldr r0, _080B5838 @ =0x0000084b\n\ + bl FlagGet\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080B5840\n\ + ldr r0, _080B583C @ =gPCText_LanettesPC\n\ + movs r1, 0x1\n\ + movs r2, 0x1\n\ + bl MenuPrint\n\ + b _080B584A\n\ + .align 2, 0\n\ +_080B5834: .4byte gPCText_LogOff\n\ +_080B5838: .4byte 0x0000084b\n\ +_080B583C: .4byte gPCText_LanettesPC\n\ +_080B5840:\n\ + ldr r0, _080B5888 @ =gPCText_SomeonesPC\n\ + movs r1, 0x1\n\ + movs r2, 0x1\n\ + bl MenuPrint\n\ +_080B584A:\n\ + ldr r0, _080B588C @ =gPCText_PlayersPC\n\ + movs r1, 0x1\n\ + movs r2, 0x3\n\ + bl MenuPrint\n\ + movs r4, 0\n\ + str r4, [sp]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x4]\n\ + movs r0, 0\n\ + movs r1, 0x1\n\ + movs r2, 0x1\n\ + adds r3, r7, 0\n\ + bl InitMenu\n\ + lsls r2, r6, 24\n\ + lsrs r2, 24\n\ + lsls r3, r7, 1\n\ + adds r3, 0x1\n\ + str r4, [sp]\n\ + str r7, [sp, 0x4]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + bl sub_80B5230\n\ + add sp, 0x18\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080B5888: .4byte gPCText_SomeonesPC\n\ +_080B588C: .4byte gPCText_PlayersPC\n\ + .syntax divided\n"); +} +#endif void sub_80B5838(void) { diff --git a/src/secret_base.c b/src/secret_base.c index 6291051a6..d88d2c66a 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -10,6 +10,7 @@ #include "main.h" #include "map_constants.h" #include "map_name_popup.h" +#include "menu.h" #include "metatile_behavior.h" #include "palette.h" #include "pokemon.h" @@ -835,7 +836,11 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190 str = StringCopyN(dest, gSaveBlock1.secretBases[arg1].sbr_field_2, local1); str[0] = EOS; +#if ENGLISH return StringAppend(dest, gOtherText_PlayersBase); +#elif GERMAN + return de_sub_8073174(dest, gOtherText_PlayersBase); +#endif } u8 *GetSecretBaseMapName(u8 *dest) { diff --git a/src/trainer_card.c b/src/trainer_card.c index b2a1ad71b..876a3b426 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -1667,7 +1667,11 @@ static void TrainerCard_Back_PrintName(void) StringCopy(str, ewram0.var_64.playerName); ConvertInternationalString(str, ewram0.language); +#if ENGLISH StringAppend(str, gOtherText_TrainersTrainerCard); +#elif GERMAN + de_sub_8073174(str, gOtherText_TrainersTrainerCard); +#endif MenuPrint_RightAligned(gStringVar1, 28, 2); } @@ -779,9 +779,13 @@ _080BE0A2:\n\ ldr r1, _080BE134 @ =gSaveBlock2\n\ bl StringCopy\n\ adds r0, r4, 0\n\ - bl sub_80BE138\n\ - movs r0, 2 @ GAME_LANGUAGE\n\ - strb r0, [r4, 0x2]\n\ + bl sub_80BE138\n"); +#if ENGLISH + asm("movs r0, 2 @ GAME_LANGUAGE\n"); +#elif GERMAN + asm("movs r0, 5 @ GAME_LANGUAGE\n"); +#endif + asm("strb r0, [r4, 0x2]\n\ _080BE112:\n\ pop {r4-r7}\n\ pop {r0}\n\ @@ -1716,6 +1720,7 @@ void sub_80BF4BC(void) } } +#if ENGLISH u8 sub_80BF4F4(u8 arg0) { u32 species; @@ -1731,6 +1736,31 @@ u8 sub_80BF4F4(u8 arg0) return TRUE; } +#elif GERMAN +u8 sub_80BF4F4(u8 arg0) +{ + u8 langData[4]; + u32 species; + + u8 *tmp; + + GetMonData(&gPlayerParty[arg0], MON_DATA_NICKNAME, &gStringVar1); + + tmp = langData; + tmp[0] = GetMonData(&gPlayerParty[arg0], MON_DATA_LANGUAGE, &langData); + if (tmp[0] != GAME_LANGUAGE) { + return TRUE; + } + + species = GetMonData(&gPlayerParty[arg0], MON_DATA_SPECIES, NULL); + + if (StringCompareWithoutExtCtrlCodes(gSpeciesNames[species], gStringVar1)) { + return TRUE; + } + + return FALSE; +} +#endif u8 sub_80BF544(void) { |