mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34: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
|
#define GUARD_INTERNATIONAL_STRING_UTIL_H
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
|
#include "list_menu.h"
|
||||||
|
|
||||||
void sub_81DB52C(const u8 *src);
|
void sub_81DB52C(u8 *src);
|
||||||
void TVShowConvertInternationalString(u8 *dest, const u8 *src, u8 language);
|
void TVShowConvertInternationalString(u8 *dest, const u8 *src, int language);
|
||||||
s32 GetStringCenterAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth);
|
int GetStringCenterAlignXOffset(int fontId, const u8 *str, int totalWidth);
|
||||||
s32 GetStringRightAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth);
|
int GetStringRightAlignXOffset(int fontId, const u8 *str, int totalWidth);
|
||||||
s32 GetStringCenterAlignXOffsetWithLetterSpacing(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing);
|
int GetStringCenterAlignXOffsetWithLetterSpacing(int fontId, const u8 *str, int totalWidth, int letterSpacing);
|
||||||
s32 GetStringWidthDifference(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing);
|
int GetStringWidthDifference(int fontId, const u8 *str, int totalWidth, int letterSpacing);
|
||||||
s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1);
|
int GetMaxWidthInMenuTable(const struct MenuAction *str, int arg1);
|
||||||
s32 sub_81DB3D8(const struct MenuAction *str, const u8* arg1, s32 arg2);
|
int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2);
|
||||||
// sub_81DB41C
|
int sub_81DB41C(const struct ListMenuTemplate *listMenu);
|
||||||
// CopyMonCategoryText
|
void CopyMonCategoryText(int dexNum, u8 *dest);
|
||||||
// sub_81DB494
|
u8 *sub_81DB494(u8 *str, int fontId, u8 *str2, int totalStringWidth);
|
||||||
void PadNameString(u8 *dst, u8 padWith);
|
void PadNameString(u8 *dest, u8 padChar);
|
||||||
void sub_81DB554(u8 *, u8);
|
void sub_81DB554(u8 *, u8);
|
||||||
void sub_81DB5AC(u8 *);
|
void sub_81DB5AC(u8 *);
|
||||||
u32 sub_81DB604(const u8 *);
|
int sub_81DB604(u8 *);
|
||||||
// sub_81DB620
|
void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows);
|
||||||
|
|
||||||
#endif // GUARD_INTERNATIONAL_STRING_UTIL_H
|
#endif // GUARD_INTERNATIONAL_STRING_UTIL_H
|
||||||
|
@ -4,13 +4,6 @@
|
|||||||
extern u8 gUnknown_030060B0;
|
extern u8 gUnknown_030060B0;
|
||||||
extern void (*gUnknown_030060B4)(void);
|
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
|
enum
|
||||||
{
|
{
|
||||||
FLAG_GET_SEEN,
|
FLAG_GET_SEEN,
|
||||||
@ -19,6 +12,24 @@ enum
|
|||||||
FLAG_SET_CAUGHT
|
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);
|
s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
|
||||||
u16 sub_80C0E9C(u16, s16, s16, u16);
|
u16 sub_80C0E9C(u16, s16, s16, u16);
|
||||||
|
|
||||||
|
@ -89,6 +89,13 @@
|
|||||||
#define EXT_CTRL_CODE_COLOR 0x1
|
#define EXT_CTRL_CODE_COLOR 0x1
|
||||||
#define EXT_CTRL_CODE_HIGHLIGHT 0x2
|
#define EXT_CTRL_CODE_HIGHLIGHT 0x2
|
||||||
#define EXT_CTRL_CODE_SHADOW 0x3
|
#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_TRANSPARENT 0x0
|
||||||
#define TEXT_COLOR_WHITE 0x1
|
#define TEXT_COLOR_WHITE 0x1
|
||||||
@ -102,9 +109,6 @@
|
|||||||
|
|
||||||
// battle placeholders are located in battle_message.h
|
// 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 NUM_TEXT_PRINTERS 32
|
||||||
|
|
||||||
#define TEXT_SPEED_FF 0xFF
|
#define TEXT_SPEED_FF 0xFF
|
||||||
|
@ -297,7 +297,6 @@ SECTIONS {
|
|||||||
src/gym_leader_rematch.o(.text);
|
src/gym_leader_rematch.o(.text);
|
||||||
src/unk_transition.o(.text);
|
src/unk_transition.o(.text);
|
||||||
src/international_string_util.o(.text);
|
src/international_string_util.o(.text);
|
||||||
asm/international_string_util.o(.text);
|
|
||||||
} =0
|
} =0
|
||||||
|
|
||||||
script_data :
|
script_data :
|
||||||
|
@ -1,40 +1,46 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "text.h"
|
|
||||||
#include "international_string_util.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);
|
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);
|
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;
|
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)
|
if (totalWidth > stringWidth)
|
||||||
return totalWidth - stringWidth;
|
return totalWidth - stringWidth;
|
||||||
else
|
else
|
||||||
return 0;
|
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++)
|
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)
|
if (stringWidth > var)
|
||||||
var = stringWidth;
|
var = stringWidth;
|
||||||
}
|
}
|
||||||
@ -42,16 +48,192 @@ s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1)
|
|||||||
return convert_pixel_width_to_tile_width(var);
|
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++)
|
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)
|
if (stringWidth > var)
|
||||||
var = stringWidth;
|
var = stringWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
return convert_pixel_width_to_tile_width(var);
|
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;
|
u8 gUnknown_030060B0;
|
||||||
void (*gUnknown_030060B4)(void);
|
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
|
struct UnknownStruct2
|
||||||
{
|
{
|
||||||
const u8 *text1;
|
const u8 *text1;
|
||||||
|
@ -1848,7 +1848,7 @@ static void SanitizeDayCareMailForRuby(struct RecordMixingDayCareMail *src)
|
|||||||
if (mail->message.itemId != 0)
|
if (mail->message.itemId != 0)
|
||||||
{
|
{
|
||||||
if (mail->gameLanguage != LANGUAGE_JAPANESE)
|
if (mail->gameLanguage != LANGUAGE_JAPANESE)
|
||||||
PadNameString(mail->OT_name, 0xFC);
|
PadNameString(mail->OT_name, EXT_CTRL_CODE_BEGIN);
|
||||||
|
|
||||||
ConvertInternationalString(mail->monName, mail->monLanguage);
|
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;
|
subStruct->glyphId = *textPrinter->printerTemplate.currentChar;
|
||||||
textPrinter->printerTemplate.currentChar++;
|
textPrinter->printerTemplate.currentChar++;
|
||||||
return 2;
|
return 2;
|
||||||
case 7:
|
case EXT_CTRL_CODE_UNKNOWN_7:
|
||||||
return 2;
|
return 2;
|
||||||
case 8:
|
case 8:
|
||||||
textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar;
|
textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar;
|
||||||
@ -1591,7 +1591,7 @@ u16 RenderText(struct TextPrinter *textPrinter)
|
|||||||
case 24:
|
case 24:
|
||||||
m4aMPlayContinue(&gMPlayInfo_BGM);
|
m4aMPlayContinue(&gMPlayInfo_BGM);
|
||||||
return 2;
|
return 2;
|
||||||
case 17:
|
case EXT_CTRL_CODE_CLEAR:
|
||||||
width = *textPrinter->printerTemplate.currentChar;
|
width = *textPrinter->printerTemplate.currentChar;
|
||||||
textPrinter->printerTemplate.currentChar++;
|
textPrinter->printerTemplate.currentChar++;
|
||||||
if (width > 0)
|
if (width > 0)
|
||||||
@ -1622,10 +1622,10 @@ u16 RenderText(struct TextPrinter *textPrinter)
|
|||||||
case 20:
|
case 20:
|
||||||
textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++;
|
textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++;
|
||||||
return 2;
|
return 2;
|
||||||
case 21:
|
case EXT_CTRL_CODE_JPN:
|
||||||
textPrinter->japanese = 1;
|
textPrinter->japanese = 1;
|
||||||
return 2;
|
return 2;
|
||||||
case 22:
|
case EXT_CTRL_CODE_ENG:
|
||||||
textPrinter->japanese = 0;
|
textPrinter->japanese = 0;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
@ -1810,12 +1810,12 @@ u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing)
|
|||||||
case 0x14:
|
case 0x14:
|
||||||
++strPos;
|
++strPos;
|
||||||
break;
|
break;
|
||||||
case 0x7:
|
case EXT_CTRL_CODE_UNKNOWN_7:
|
||||||
case 0x9:
|
case 0x9:
|
||||||
case 0xA:
|
case 0xA:
|
||||||
case 0xF:
|
case 0xF:
|
||||||
case 0x15:
|
case EXT_CTRL_CODE_JPN:
|
||||||
case 0x16:
|
case EXT_CTRL_CODE_ENG:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1970,13 +1970,13 @@ u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
|
|||||||
case 0x14:
|
case 0x14:
|
||||||
minGlyphWidth = *++str;
|
minGlyphWidth = *++str;
|
||||||
break;
|
break;
|
||||||
case 0x15:
|
case EXT_CTRL_CODE_JPN:
|
||||||
isJapanese = 1;
|
isJapanese = 1;
|
||||||
break;
|
break;
|
||||||
case 0x16:
|
case EXT_CTRL_CODE_ENG:
|
||||||
isJapanese = 0;
|
isJapanese = 0;
|
||||||
break;
|
break;
|
||||||
case 0x7:
|
case EXT_CTRL_CODE_UNKNOWN_7:
|
||||||
case 0x9:
|
case 0x9:
|
||||||
case 0xA:
|
case 0xA:
|
||||||
case 0xF:
|
case 0xF:
|
||||||
@ -2096,12 +2096,12 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str)
|
|||||||
case 0x14:
|
case 0x14:
|
||||||
++strPos;
|
++strPos;
|
||||||
break;
|
break;
|
||||||
case 0x7:
|
case EXT_CTRL_CODE_UNKNOWN_7:
|
||||||
case 0x9:
|
case 0x9:
|
||||||
case 0xA:
|
case 0xA:
|
||||||
case 0xF:
|
case 0xF:
|
||||||
case 0x15:
|
case EXT_CTRL_CODE_JPN:
|
||||||
case 0x16:
|
case EXT_CTRL_CODE_ENG:
|
||||||
default:
|
default:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user