summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/international_string_util.c208
-rw-r--r--src/pokedex.c13
-rw-r--r--src/record_mixing.c2
-rw-r--r--src/text.c26
4 files changed, 209 insertions, 40 deletions
diff --git a/src/international_string_util.c b/src/international_string_util.c
index 9de338c59..a7c42c39e 100644
--- a/src/international_string_util.c
+++ b/src/international_string_util.c
@@ -1,40 +1,46 @@
#include "global.h"
-#include "text.h"
#include "international_string_util.h"
+#include "list_menu.h"
+#include "pokedex.h"
+#include "script_menu.h"
+#include "string_util.h"
+#include "strings.h"
+#include "text.h"
+#include "window.h"
-extern s32 convert_pixel_width_to_tile_width(s32 a0); // script menu
+extern const struct PokedexEntry gPokedexEntries[];
-s32 GetStringCenterAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth)
+int GetStringCenterAlignXOffset(int fontId, const u8 *str, int totalWidth)
{
return GetStringCenterAlignXOffsetWithLetterSpacing(fontId, str, totalWidth, 0);
}
-s32 GetStringRightAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth)
+int GetStringRightAlignXOffset(int fontId, const u8 *str, int totalWidth)
{
return GetStringWidthDifference(fontId, str, totalWidth, 0);
}
-s32 GetStringCenterAlignXOffsetWithLetterSpacing(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing)
+int GetStringCenterAlignXOffsetWithLetterSpacing(int fontId, const u8 *str, int totalWidth, int letterSpacing)
{
return GetStringWidthDifference(fontId, str, totalWidth, letterSpacing) / 2;
}
-s32 GetStringWidthDifference(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing)
+int GetStringWidthDifference(int fontId, const u8 *str, int totalWidth, int letterSpacing)
{
- s32 stringWidth = GetStringWidth(fontId, str, letterSpacing);
+ int stringWidth = GetStringWidth(fontId, str, letterSpacing);
if (totalWidth > stringWidth)
return totalWidth - stringWidth;
else
return 0;
}
-s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1)
+int GetMaxWidthInMenuTable(const struct MenuAction *str, int arg1)
{
- s32 i, var;
+ int i, var;
for (var = 0, i = 0; i < arg1; i++)
{
- s32 stringWidth = GetStringWidth(1, str[i].text, 0);
+ int stringWidth = GetStringWidth(1, str[i].text, 0);
if (stringWidth > var)
var = stringWidth;
}
@@ -42,16 +48,192 @@ s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1)
return convert_pixel_width_to_tile_width(var);
}
-s32 sub_81DB3D8(const struct MenuAction *str, const u8* arg1, s32 arg2)
+int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2)
{
- s32 i, var;
+ int i, var;
for (var = 0, i = 0; i < arg2; i++)
{
- s32 stringWidth = GetStringWidth(1, str[arg1[i]].text, 0);
+ int stringWidth = GetStringWidth(1, str[arg1[i]].text, 0);
if (stringWidth > var)
var = stringWidth;
}
return convert_pixel_width_to_tile_width(var);
}
+
+int sub_81DB41C(const struct ListMenuTemplate *listMenu)
+{
+ int i, maxWidth, finalWidth;
+ const struct ListMenuItem *items = listMenu->items;
+
+ maxWidth = 0;
+ for (i = 0; i < listMenu->totalItems; i++)
+ {
+ int width = GetStringWidth(listMenu->fontId, items[i].name, 0);
+ if (width > maxWidth)
+ maxWidth = width;
+ }
+
+ finalWidth = maxWidth + listMenu->item_X + 9;
+ if (finalWidth < 0)
+ finalWidth += 7;
+
+ finalWidth >>= 3;
+ if (finalWidth > 28)
+ finalWidth = 28;
+
+ return finalWidth;
+}
+
+void CopyMonCategoryText(int dexNum, u8 *dest)
+{
+ u8 *str = StringCopy(dest, gPokedexEntries[dexNum].categoryName);
+ *str = CHAR_SPACE;
+ StringCopy(str + 1, gText_Pokemon);
+}
+
+u8 *sub_81DB494(u8 *str, int fontId, u8 *str2, int totalStringWidth)
+{
+ u8 *buffer;
+ int width;
+ int clearWidth;
+
+ if (str2)
+ {
+ buffer = StringCopy(str, str2);
+ width = GetStringWidth(fontId, str2, 0);
+ }
+ else
+ {
+ buffer = str;
+ width = 0;
+ }
+
+ clearWidth = totalStringWidth - width;
+ if (clearWidth > 0)
+ {
+ *buffer = EXT_CTRL_CODE_BEGIN;
+ buffer++;
+ *buffer = EXT_CTRL_CODE_CLEAR;
+ buffer++;
+ *buffer = clearWidth;
+ buffer++;
+ *buffer = EOS;
+ }
+
+ return buffer;
+}
+
+void PadNameString(u8 *dest, u8 padChar)
+{
+ u8 length;
+
+ StripExtCtrlCodes(dest);
+ length = StringLength(dest);
+ if (padChar == EXT_CTRL_CODE_BEGIN)
+ {
+ while (length < PLAYER_NAME_LENGTH - 1)
+ {
+ dest[length] = EXT_CTRL_CODE_BEGIN;
+ dest[length + 1] = EXT_CTRL_CODE_UNKNOWN_7;
+ length += 2;
+ }
+ }
+ else
+ {
+ while (length < PLAYER_NAME_LENGTH - 1)
+ {
+ dest[length] = padChar;
+ length++;
+ }
+ }
+
+ dest[length] = EOS;
+}
+
+void sub_81DB52C(u8 *str)
+{
+ if (StringLength(str) < PLAYER_NAME_LENGTH - 1)
+ ConvertInternationalString(str, LANGUAGE_JAPANESE);
+ else
+ StripExtCtrlCodes(str);
+}
+
+void sub_81DB554(u8 *str, u8 arg1)
+{
+ u8 *buffer;
+ if (StringLength(str) < PLAYER_NAME_LENGTH - 1)
+ {
+ ConvertInternationalString(str, LANGUAGE_JAPANESE);
+ }
+ else if (arg1 == EXT_CTRL_CODE_BEGIN)
+ {
+ StripExtCtrlCodes(str);
+ }
+ else
+ {
+ buffer = str;
+ while (buffer[1] != EOS)
+ buffer++;
+
+ while (buffer >= str && buffer[0] == arg1)
+ {
+ buffer[0] = EOS;
+ buffer--;
+ }
+ }
+}
+
+void sub_81DB5AC(u8 *str)
+{
+ if (*str++ == EXT_CTRL_CODE_BEGIN && *str++ == EXT_CTRL_CODE_JPN)
+ {
+ while (*str != EOS)
+ {
+ if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_ENG)
+ return;
+
+ str++;
+ }
+
+ *str++ = EXT_CTRL_CODE_BEGIN;
+ *str++ = EXT_CTRL_CODE_ENG;
+ *str = EOS;
+ }
+}
+
+void TVShowConvertInternationalString(u8 *dest, const u8 *src, int language)
+{
+ StringCopy(dest, src);
+ ConvertInternationalString(dest, language);
+}
+
+int sub_81DB604(u8 *str)
+{
+ if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN)
+ return LANGUAGE_JAPANESE;
+ else
+ return LANGUAGE_ENGLISH;
+}
+
+void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows)
+{
+ u8 *windowTileData;
+ int fillSize, windowRowSize, rowsToFill;
+ struct Window *window = &gWindows[windowId];
+
+ fillSize = numFillTiles * TILE_SIZE_4BPP;
+ windowRowSize = window->window.width * TILE_SIZE_4BPP;
+ windowTileData = window->tileData + (rowStart * windowRowSize) + (columnStart * TILE_SIZE_4BPP);
+ if (numRows > 0)
+ {
+ rowsToFill = numRows;
+ while (rowsToFill)
+ {
+ CpuFastFill8(0x11, windowTileData, fillSize);
+ windowTileData += windowRowSize;
+ rowsToFill--;
+ }
+ }
+}
diff --git a/src/pokedex.c b/src/pokedex.c
index 66a68f0bd..fa3faab84 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -42,19 +42,6 @@ static EWRAM_DATA struct PokedexListItem *gUnknown_02039B54 = NULL;
u8 gUnknown_030060B0;
void (*gUnknown_030060B4)(void);
-struct PokedexEntry
-{
- /*0x00*/ u8 categoryName[12];
- /*0x0C*/ u16 height; //in decimeters
- /*0x0E*/ u16 weight; //in hectograms
- /*0x10*/ const u8 *description;
- /*0x14*/ u16 unused;
- /*0x16*/ u16 pokemonScale;
- /*0x18*/ u16 pokemonOffset;
- /*0x1A*/ u16 trainerScale;
- /*0x1C*/ u16 trainerOffset;
-}; /*size = 0x20*/
-
struct UnknownStruct2
{
const u8 *text1;
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 5f1aef1df..df4a1a720 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -1848,7 +1848,7 @@ static void SanitizeDayCareMailForRuby(struct RecordMixingDayCareMail *src)
if (mail->message.itemId != 0)
{
if (mail->gameLanguage != LANGUAGE_JAPANESE)
- PadNameString(mail->OT_name, 0xFC);
+ PadNameString(mail->OT_name, EXT_CTRL_CODE_BEGIN);
ConvertInternationalString(mail->monName, mail->monLanguage);
}
diff --git a/src/text.c b/src/text.c
index ecd3a3095..07c15596e 100644
--- a/src/text.c
+++ b/src/text.c
@@ -1539,7 +1539,7 @@ u16 RenderText(struct TextPrinter *textPrinter)
subStruct->glyphId = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
return 2;
- case 7:
+ case EXT_CTRL_CODE_UNKNOWN_7:
return 2;
case 8:
textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar;
@@ -1591,7 +1591,7 @@ u16 RenderText(struct TextPrinter *textPrinter)
case 24:
m4aMPlayContinue(&gMPlayInfo_BGM);
return 2;
- case 17:
+ case EXT_CTRL_CODE_CLEAR:
width = *textPrinter->printerTemplate.currentChar;
textPrinter->printerTemplate.currentChar++;
if (width > 0)
@@ -1622,10 +1622,10 @@ u16 RenderText(struct TextPrinter *textPrinter)
case 20:
textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++;
return 2;
- case 21:
+ case EXT_CTRL_CODE_JPN:
textPrinter->japanese = 1;
return 2;
- case 22:
+ case EXT_CTRL_CODE_ENG:
textPrinter->japanese = 0;
return 2;
}
@@ -1810,12 +1810,12 @@ u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing)
case 0x14:
++strPos;
break;
- case 0x7:
+ case EXT_CTRL_CODE_UNKNOWN_7:
case 0x9:
case 0xA:
case 0xF:
- case 0x15:
- case 0x16:
+ case EXT_CTRL_CODE_JPN:
+ case EXT_CTRL_CODE_ENG:
default:
break;
}
@@ -1970,13 +1970,13 @@ u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
case 0x14:
minGlyphWidth = *++str;
break;
- case 0x15:
+ case EXT_CTRL_CODE_JPN:
isJapanese = 1;
break;
- case 0x16:
+ case EXT_CTRL_CODE_ENG:
isJapanese = 0;
break;
- case 0x7:
+ case EXT_CTRL_CODE_UNKNOWN_7:
case 0x9:
case 0xA:
case 0xF:
@@ -2096,12 +2096,12 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str)
case 0x14:
++strPos;
break;
- case 0x7:
+ case EXT_CTRL_CODE_UNKNOWN_7:
case 0x9:
case 0xA:
case 0xF:
- case 0x15:
- case 0x16:
+ case EXT_CTRL_CODE_JPN:
+ case EXT_CTRL_CODE_ENG:
default:
continue;
}