summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarijn van der Werf <marijn.vanderwerf@gmail.com>2017-06-24 18:06:32 +0200
committerMarijn van der Werf <marijn.vanderwerf@gmail.com>2017-06-24 18:24:08 +0200
commitec3fe21936b250b329e58941a47e11afb9b240e0 (patch)
tree31e152c5ff057e44bccaaccd80adb8b0f8e678dd
parent88bb5b267ee6a0cd93f39bb5eccc866a1b1c870c (diff)
first src changes
-rw-r--r--include/link.h4
-rw-r--r--include/menu.h4
-rw-r--r--src/decoration.c7
-rw-r--r--src/intro.c4
-rw-r--r--src/menu.c134
-rw-r--r--src/pokemon_size_record.c7
-rw-r--r--src/pokemon_storage_system.c5
-rw-r--r--src/script_menu.c165
-rw-r--r--src/secret_base.c5
-rw-r--r--src/trainer_card.c4
-rw-r--r--src/tv.c36
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);
}
diff --git a/src/tv.c b/src/tv.c
index 14e7cf143..4bd11a9b9 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -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)
{