Finish decompiling internation_string_util.c
This commit is contained in:
@@ -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--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
26
src/text.c
26
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user