mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-25 03:04:15 +01:00
Finish decompiling internation_string_util.c
This commit is contained in:
parent
0cdd1cc1da
commit
9fafa63743
@ -1,355 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start sub_81DB41C
|
||||
sub_81DB41C: @ 81DB41C
|
||||
push {r4-r7,lr}
|
||||
adds r4, r0, 0
|
||||
ldr r1, [r4]
|
||||
movs r7, 0
|
||||
movs r6, 0
|
||||
ldrh r0, [r4, 0xC]
|
||||
cmp r7, r0
|
||||
bge _081DB44C
|
||||
adds r5, r1, 0
|
||||
_081DB42E:
|
||||
ldrb r0, [r4, 0x17]
|
||||
lsls r0, 26
|
||||
lsrs r0, 26
|
||||
ldr r1, [r5]
|
||||
movs r2, 0
|
||||
bl GetStringWidth
|
||||
cmp r0, r7
|
||||
ble _081DB442
|
||||
adds r7, r0, 0
|
||||
_081DB442:
|
||||
adds r5, 0x8
|
||||
adds r6, 0x1
|
||||
ldrh r0, [r4, 0xC]
|
||||
cmp r6, r0
|
||||
blt _081DB42E
|
||||
_081DB44C:
|
||||
ldrb r0, [r4, 0x12]
|
||||
adds r1, r7, r0
|
||||
adds r0, r1, 0
|
||||
adds r0, 0x9
|
||||
cmp r0, 0
|
||||
bge _081DB45A
|
||||
adds r0, 0x7
|
||||
_081DB45A:
|
||||
asrs r0, 3
|
||||
cmp r0, 0x1C
|
||||
ble _081DB462
|
||||
movs r0, 0x1C
|
||||
_081DB462:
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_81DB41C
|
||||
|
||||
thumb_func_start CopyMonCategoryText
|
||||
CopyMonCategoryText: @ 81DB468
|
||||
push {lr}
|
||||
adds r2, r0, 0
|
||||
adds r0, r1, 0
|
||||
lsls r2, 5
|
||||
ldr r1, =gPokedexEntries
|
||||
adds r2, r1
|
||||
adds r1, r2, 0
|
||||
bl StringCopy
|
||||
movs r1, 0
|
||||
strb r1, [r0]
|
||||
adds r0, 0x1
|
||||
ldr r1, =gText_Pokemon
|
||||
bl StringCopy
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end CopyMonCategoryText
|
||||
|
||||
thumb_func_start sub_81DB494
|
||||
sub_81DB494: @ 81DB494
|
||||
push {r4-r7,lr}
|
||||
adds r6, r1, 0
|
||||
adds r5, r2, 0
|
||||
adds r7, r3, 0
|
||||
cmp r5, 0
|
||||
beq _081DB4B6
|
||||
adds r1, r5, 0
|
||||
bl StringCopy
|
||||
adds r4, r0, 0
|
||||
lsls r0, r6, 24
|
||||
lsrs r0, 24
|
||||
adds r1, r5, 0
|
||||
movs r2, 0
|
||||
bl GetStringWidth
|
||||
b _081DB4BA
|
||||
_081DB4B6:
|
||||
adds r4, r0, 0
|
||||
movs r0, 0
|
||||
_081DB4BA:
|
||||
subs r3, r7, r0
|
||||
cmp r3, 0
|
||||
ble _081DB4D4
|
||||
movs r0, 0xFC
|
||||
strb r0, [r4]
|
||||
adds r4, 0x1
|
||||
movs r0, 0x11
|
||||
strb r0, [r4]
|
||||
adds r4, 0x1
|
||||
strb r3, [r4]
|
||||
adds r4, 0x1
|
||||
movs r0, 0xFF
|
||||
strb r0, [r4]
|
||||
_081DB4D4:
|
||||
adds r0, r4, 0
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_81DB494
|
||||
|
||||
thumb_func_start PadNameString
|
||||
PadNameString: @ 81DB4DC
|
||||
push {r4,r5,lr}
|
||||
adds r4, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r5, r1, 24
|
||||
bl StripExtCtrlCodes
|
||||
adds r0, r4, 0
|
||||
bl StringLength
|
||||
lsls r0, 24
|
||||
lsrs r1, r0, 24
|
||||
cmp r5, 0xFC
|
||||
bne _081DB51A
|
||||
cmp r1, 0x5
|
||||
bhi _081DB51E
|
||||
movs r3, 0xFC
|
||||
movs r2, 0x7
|
||||
_081DB4FE:
|
||||
adds r0, r4, r1
|
||||
strb r3, [r0]
|
||||
strb r2, [r0, 0x1]
|
||||
adds r0, r1, 0x2
|
||||
lsls r0, 24
|
||||
lsrs r1, r0, 24
|
||||
cmp r1, 0x5
|
||||
bls _081DB4FE
|
||||
b _081DB51E
|
||||
_081DB510:
|
||||
adds r0, r4, r1
|
||||
strb r5, [r0]
|
||||
adds r0, r1, 0x1
|
||||
lsls r0, 24
|
||||
lsrs r1, r0, 24
|
||||
_081DB51A:
|
||||
cmp r1, 0x5
|
||||
bls _081DB510
|
||||
_081DB51E:
|
||||
adds r1, r4, r1
|
||||
movs r0, 0xFF
|
||||
strb r0, [r1]
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end PadNameString
|
||||
|
||||
thumb_func_start sub_81DB52C
|
||||
sub_81DB52C: @ 81DB52C
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
bl StringLength
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
cmp r0, 0x5
|
||||
bhi _081DB546
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x1
|
||||
bl ConvertInternationalString
|
||||
b _081DB54C
|
||||
_081DB546:
|
||||
adds r0, r4, 0
|
||||
bl StripExtCtrlCodes
|
||||
_081DB54C:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_81DB52C
|
||||
|
||||
thumb_func_start sub_81DB554
|
||||
sub_81DB554: @ 81DB554
|
||||
push {r4,r5,lr}
|
||||
adds r4, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r5, r1, 24
|
||||
bl StringLength
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
cmp r0, 0x5
|
||||
bhi _081DB572
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x1
|
||||
bl ConvertInternationalString
|
||||
b _081DB5A4
|
||||
_081DB572:
|
||||
cmp r5, 0xFC
|
||||
bne _081DB57E
|
||||
adds r0, r4, 0
|
||||
bl StripExtCtrlCodes
|
||||
b _081DB5A4
|
||||
_081DB57E:
|
||||
adds r1, r4, 0
|
||||
b _081DB584
|
||||
_081DB582:
|
||||
adds r1, 0x1
|
||||
_081DB584:
|
||||
ldrb r0, [r1, 0x1]
|
||||
cmp r0, 0xFF
|
||||
bne _081DB582
|
||||
cmp r1, r4
|
||||
bcc _081DB5A4
|
||||
ldrb r0, [r1]
|
||||
cmp r0, r5
|
||||
bne _081DB5A4
|
||||
movs r2, 0xFF
|
||||
_081DB596:
|
||||
strb r2, [r1]
|
||||
subs r1, 0x1
|
||||
cmp r1, r4
|
||||
bcc _081DB5A4
|
||||
ldrb r0, [r1]
|
||||
cmp r0, r5
|
||||
beq _081DB596
|
||||
_081DB5A4:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_81DB554
|
||||
|
||||
thumb_func_start sub_81DB5AC
|
||||
sub_81DB5AC: @ 81DB5AC
|
||||
push {lr}
|
||||
adds r2, r0, 0
|
||||
ldrb r0, [r2]
|
||||
adds r2, 0x1
|
||||
cmp r0, 0xFC
|
||||
bne _081DB5E4
|
||||
ldrb r0, [r2]
|
||||
adds r2, 0x1
|
||||
cmp r0, 0x15
|
||||
bne _081DB5E4
|
||||
b _081DB5CE
|
||||
_081DB5C2:
|
||||
cmp r1, 0xFC
|
||||
bne _081DB5CC
|
||||
ldrb r0, [r2, 0x1]
|
||||
cmp r0, 0x16
|
||||
beq _081DB5E4
|
||||
_081DB5CC:
|
||||
adds r2, 0x1
|
||||
_081DB5CE:
|
||||
ldrb r1, [r2]
|
||||
adds r0, r1, 0
|
||||
cmp r0, 0xFF
|
||||
bne _081DB5C2
|
||||
movs r0, 0xFC
|
||||
strb r0, [r2]
|
||||
adds r2, 0x1
|
||||
movs r0, 0x16
|
||||
strb r0, [r2]
|
||||
movs r0, 0xFF
|
||||
strb r0, [r2, 0x1]
|
||||
_081DB5E4:
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_81DB5AC
|
||||
|
||||
thumb_func_start TVShowConvertInternationalString
|
||||
TVShowConvertInternationalString: @ 81DB5E8
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
adds r4, r2, 0
|
||||
bl StringCopy
|
||||
lsls r4, 24
|
||||
lsrs r4, 24
|
||||
adds r0, r5, 0
|
||||
adds r1, r4, 0
|
||||
bl ConvertInternationalString
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end TVShowConvertInternationalString
|
||||
|
||||
thumb_func_start sub_81DB604
|
||||
sub_81DB604: @ 81DB604
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0xFC
|
||||
bne _081DB618
|
||||
ldrb r0, [r1, 0x1]
|
||||
cmp r0, 0x15
|
||||
bne _081DB618
|
||||
movs r0, 0x1
|
||||
b _081DB61A
|
||||
_081DB618:
|
||||
movs r0, 0x2
|
||||
_081DB61A:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_81DB604
|
||||
|
||||
thumb_func_start sub_81DB620
|
||||
sub_81DB620: @ 81DB620
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x4
|
||||
lsls r4, r0, 1
|
||||
adds r4, r0
|
||||
lsls r4, 2
|
||||
ldr r0, =gWindows
|
||||
adds r4, r0
|
||||
lsls r7, r3, 5
|
||||
ldrb r0, [r4, 0x3]
|
||||
lsls r6, r0, 5
|
||||
muls r2, r6
|
||||
ldr r0, [r4, 0x8]
|
||||
adds r0, r2
|
||||
lsls r1, 5
|
||||
adds r5, r0, r1
|
||||
ldr r0, [sp, 0x18]
|
||||
cmp r0, 0
|
||||
ble _081DB66C
|
||||
adds r4, r0, 0
|
||||
_081DB646:
|
||||
ldr r0, =0x11111111
|
||||
str r0, [sp]
|
||||
adds r2, r7, 0
|
||||
cmp r2, 0
|
||||
bge _081DB652
|
||||
adds r2, 0x3
|
||||
_081DB652:
|
||||
lsls r2, 9
|
||||
lsrs r2, 11
|
||||
movs r0, 0x80
|
||||
lsls r0, 17
|
||||
orrs r2, r0
|
||||
mov r0, sp
|
||||
adds r1, r5, 0
|
||||
bl CpuFastSet
|
||||
adds r5, r6
|
||||
subs r4, 0x1
|
||||
cmp r4, 0
|
||||
bne _081DB646
|
||||
_081DB66C:
|
||||
add sp, 0x4
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end sub_81DB620
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
@ -2,22 +2,23 @@
|
||||
#define GUARD_INTERNATIONAL_STRING_UTIL_H
|
||||
|
||||
#include "menu.h"
|
||||
#include "list_menu.h"
|
||||
|
||||
void sub_81DB52C(const u8 *src);
|
||||
void TVShowConvertInternationalString(u8 *dest, const u8 *src, u8 language);
|
||||
s32 GetStringCenterAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth);
|
||||
s32 GetStringRightAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth);
|
||||
s32 GetStringCenterAlignXOffsetWithLetterSpacing(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing);
|
||||
s32 GetStringWidthDifference(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing);
|
||||
s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1);
|
||||
s32 sub_81DB3D8(const struct MenuAction *str, const u8* arg1, s32 arg2);
|
||||
// sub_81DB41C
|
||||
// CopyMonCategoryText
|
||||
// sub_81DB494
|
||||
void PadNameString(u8 *dst, u8 padWith);
|
||||
void sub_81DB52C(u8 *src);
|
||||
void TVShowConvertInternationalString(u8 *dest, const u8 *src, int language);
|
||||
int GetStringCenterAlignXOffset(int fontId, const u8 *str, int totalWidth);
|
||||
int GetStringRightAlignXOffset(int fontId, const u8 *str, int totalWidth);
|
||||
int GetStringCenterAlignXOffsetWithLetterSpacing(int fontId, const u8 *str, int totalWidth, int letterSpacing);
|
||||
int GetStringWidthDifference(int fontId, const u8 *str, int totalWidth, int letterSpacing);
|
||||
int GetMaxWidthInMenuTable(const struct MenuAction *str, int arg1);
|
||||
int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2);
|
||||
int sub_81DB41C(const struct ListMenuTemplate *listMenu);
|
||||
void CopyMonCategoryText(int dexNum, u8 *dest);
|
||||
u8 *sub_81DB494(u8 *str, int fontId, u8 *str2, int totalStringWidth);
|
||||
void PadNameString(u8 *dest, u8 padChar);
|
||||
void sub_81DB554(u8 *, u8);
|
||||
void sub_81DB5AC(u8 *);
|
||||
u32 sub_81DB604(const u8 *);
|
||||
// sub_81DB620
|
||||
int sub_81DB604(u8 *);
|
||||
void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows);
|
||||
|
||||
#endif // GUARD_INTERNATIONAL_STRING_UTIL_H
|
||||
|
@ -4,13 +4,6 @@
|
||||
extern u8 gUnknown_030060B0;
|
||||
extern void (*gUnknown_030060B4)(void);
|
||||
|
||||
void ResetPokedex(void);
|
||||
void CopyMonCategoryText(u32 species, u8 *dst);
|
||||
u16 GetPokedexHeightWeight(u16 dexNum, u8 data);
|
||||
u16 GetNationalPokedexCount(u8);
|
||||
u16 GetHoennPokedexCount(u8);
|
||||
u8 CreateDexDisplayMonDataTask(u16 dexNum, u32 trainerId, u32 personality);
|
||||
|
||||
enum
|
||||
{
|
||||
FLAG_GET_SEEN,
|
||||
@ -19,6 +12,24 @@ enum
|
||||
FLAG_SET_CAUGHT
|
||||
};
|
||||
|
||||
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*/
|
||||
|
||||
void ResetPokedex(void);
|
||||
u16 GetPokedexHeightWeight(u16 dexNum, u8 data);
|
||||
u16 GetNationalPokedexCount(u8);
|
||||
u16 GetHoennPokedexCount(u8);
|
||||
u8 CreateDexDisplayMonDataTask(u16 dexNum, u32 trainerId, u32 personality);
|
||||
s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
|
||||
u16 sub_80C0E9C(u16, s16, s16, u16);
|
||||
|
||||
|
@ -89,6 +89,13 @@
|
||||
#define EXT_CTRL_CODE_COLOR 0x1
|
||||
#define EXT_CTRL_CODE_HIGHLIGHT 0x2
|
||||
#define EXT_CTRL_CODE_SHADOW 0x3
|
||||
//
|
||||
#define EXT_CTRL_CODE_UNKNOWN_7 0x7
|
||||
//
|
||||
#define EXT_CTRL_CODE_CLEAR 0x11
|
||||
//
|
||||
#define EXT_CTRL_CODE_JPN 0x15
|
||||
#define EXT_CTRL_CODE_ENG 0x16
|
||||
|
||||
#define TEXT_COLOR_TRANSPARENT 0x0
|
||||
#define TEXT_COLOR_WHITE 0x1
|
||||
@ -102,9 +109,6 @@
|
||||
|
||||
// battle placeholders are located in battle_message.h
|
||||
|
||||
#define EXT_CTRL_CODE_JPN 0x15
|
||||
#define EXT_CTRL_CODE_ENG 0x16
|
||||
|
||||
#define NUM_TEXT_PRINTERS 32
|
||||
|
||||
#define TEXT_SPEED_FF 0xFF
|
||||
|
@ -297,7 +297,6 @@ SECTIONS {
|
||||
src/gym_leader_rematch.o(.text);
|
||||
src/unk_transition.o(.text);
|
||||
src/international_string_util.o(.text);
|
||||
asm/international_string_util.o(.text);
|
||||
} =0
|
||||
|
||||
script_data :
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user