summaryrefslogtreecommitdiff
path: root/src/international_string_util.c
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-11-27 17:21:23 -0600
committerMarcus Huderle <huderlem@gmail.com>2018-11-27 17:21:23 -0600
commit9fafa637438b45a48de36a4a7bf898111951ec92 (patch)
treeaa3daaacbff8c43cd73d66a0a50a1bd7e91487d8 /src/international_string_util.c
parent0cdd1cc1daf51cb5f128ff0bf2cd208937419cc7 (diff)
Finish decompiling internation_string_util.c
Diffstat (limited to 'src/international_string_util.c')
-rw-r--r--src/international_string_util.c208
1 files changed, 195 insertions, 13 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--;
+ }
+ }
+}