mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-31 08:51:31 -04:00
224 lines
4.7 KiB
C
224 lines
4.7 KiB
C
#include "m_font.h"
|
|
|
|
#include "audio.h"
|
|
#include "m_lib.h"
|
|
#include "libforest/gbi_extensions.h"
|
|
#include "dataobject.h"
|
|
#include "game.h"
|
|
#include "graph.h"
|
|
#include "types.h"
|
|
#include "libultra/gu.h"
|
|
#include "sys_matrix.h"
|
|
#include "MSL_C/w_math.h"
|
|
#include "m_rcp.h"
|
|
#include "libc/math.h"
|
|
|
|
#define mFont_CC_FONT 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, TEXEL0, 0
|
|
#define mFont_CC_NOFONT 0, 0, 0, PRIMITIVE, 0, PRIMITIVE, TEXEL0, PRIMITIVE
|
|
|
|
#include "../src/m_font_offset.c_inc"
|
|
#include "../src/m_font_main.c_inc"
|
|
#include "../src/m_font_mark.c_inc"
|
|
#include "../src/m_font_rect.c_inc"
|
|
|
|
/* @unused static u8* mFont_Get_end_load_texture() */
|
|
|
|
extern void mFont_ct() {
|
|
// code removed probably
|
|
}
|
|
|
|
static int mMsg_CutLeftSpace(u8* str, int str_len) {
|
|
// This should've been renamed or moved to m_message.h
|
|
|
|
u8* dst;
|
|
u8* src;
|
|
int i, j;
|
|
|
|
for (i = 0; i < str_len; i++) {
|
|
if (str[i] != CHAR_SPACE) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (i == str_len) {
|
|
return 0;
|
|
}
|
|
else if (i == 0) {
|
|
return str_len;
|
|
}
|
|
|
|
dst = str;
|
|
src = str + i;
|
|
for (j = i; j < str_len; j++) {
|
|
*dst++ = *src++;
|
|
}
|
|
|
|
for (j = 0; j < i; j++) {
|
|
*dst++ = CHAR_SPACE;
|
|
}
|
|
|
|
return str_len - i;
|
|
}
|
|
|
|
static u8 mFont_suji_data[] = "0123456789";
|
|
|
|
static int mFont_suji_check(u8 c) {
|
|
u8* suji = mFont_suji_data;
|
|
int i;
|
|
|
|
for (i = 0; i < 10; i++) {
|
|
if (c == suji[i]) {
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
extern int mFont_UnintToString(
|
|
u8* str,
|
|
int figure,
|
|
u32 num,
|
|
int figure_start,
|
|
int left_cut,
|
|
int fill_zero,
|
|
int separator
|
|
) {
|
|
int i;
|
|
int j;
|
|
u32 cur_num;
|
|
int next;
|
|
|
|
int temp2;
|
|
int last_figure;
|
|
|
|
int l = figure - figure_start;
|
|
u8 fill_char = fill_zero ? CHAR_ZERO : CHAR_SPACE;
|
|
u8 left_fill_char = fill_zero && !left_cut ? CHAR_ZERO : CHAR_SPACE;
|
|
|
|
cur_num = num;
|
|
for (last_figure = figure - 1; last_figure >= l; last_figure--) {
|
|
next = cur_num / 10;
|
|
temp2 = cur_num - next * 10;
|
|
if (cur_num == 0) {
|
|
if (num == 0 && last_figure == figure - 1) {
|
|
str[last_figure] = CHAR_ZERO;
|
|
}
|
|
else {
|
|
str[last_figure] = fill_char;
|
|
}
|
|
}
|
|
else {
|
|
str[last_figure] = mFont_suji_data[temp2];
|
|
}
|
|
cur_num = next;
|
|
}
|
|
|
|
for (i = last_figure; i >= 0; i--) {
|
|
str[i] = left_fill_char;
|
|
}
|
|
|
|
if (separator) {
|
|
int count = 0;
|
|
for (i = figure - 1; i >= 0; i--) {
|
|
if (mFont_suji_check(str[i])) {
|
|
count++;
|
|
if (count > 3) {
|
|
for (j = 0; j < i; j++) {
|
|
str[j] = str[j + 1];
|
|
}
|
|
|
|
str[i] = CHAR_COMMA;
|
|
count = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (left_cut) {
|
|
return mMsg_CutLeftSpace(str, figure);
|
|
}
|
|
|
|
return figure;
|
|
}
|
|
|
|
extern int mFont_char_save_data_check(u8 c) {
|
|
return c == CHAR_CONTROL_CODE || c == CHAR_MESSAGE_TAG;
|
|
}
|
|
|
|
extern u8 mFont_small_to_capital(u8 small) {
|
|
static const u8 tbl[56][2] = {
|
|
{ CHAR_a, CHAR_A },
|
|
{ CHAR_b, CHAR_B },
|
|
{ CHAR_c, CHAR_C },
|
|
{ CHAR_d, CHAR_D },
|
|
{ CHAR_e, CHAR_E },
|
|
{ CHAR_f, CHAR_F },
|
|
{ CHAR_g, CHAR_G },
|
|
{ CHAR_h, CHAR_H },
|
|
{ CHAR_i, CHAR_I },
|
|
{ CHAR_j, CHAR_J },
|
|
{ CHAR_k, CHAR_K },
|
|
{ CHAR_l, CHAR_L },
|
|
{ CHAR_m, CHAR_M },
|
|
{ CHAR_n, CHAR_N },
|
|
{ CHAR_o, CHAR_O },
|
|
{ CHAR_p, CHAR_P },
|
|
{ CHAR_q, CHAR_Q },
|
|
{ CHAR_r, CHAR_R },
|
|
{ CHAR_s, CHAR_S },
|
|
{ CHAR_t, CHAR_T },
|
|
{ CHAR_u, CHAR_U },
|
|
{ CHAR_v, CHAR_V },
|
|
{ CHAR_w, CHAR_W },
|
|
{ CHAR_x, CHAR_X },
|
|
{ CHAR_y, CHAR_Y },
|
|
{ CHAR_z, CHAR_Z },
|
|
{ CHAR_DIARESIS_a, CHAR_DIAERESIS_A },
|
|
{ CHAR_GRAVE_a, CHAR_GRAVE_A },
|
|
{ CHAR_ACUTE_a, CHAR_ACUTE_A },
|
|
{ CHAR_CIRCUMFLEX_a, CHAR_CIRCUMFLEX_A },
|
|
{ CHAR_TILDE_a, CHAR_TILDE_A },
|
|
{ CHAR_ANGSTROM_a, CHAR_ANGSTROM_A },
|
|
{ CHAR_LOWER_CEDILLA, CHAR_CEDILLA },
|
|
{ CHAR_GRAVE_e, CHAR_GRAVE_E },
|
|
{ CHAR_ACUTE_e, CHAR_ACUTE_E },
|
|
{ CHAR_CIRCUMFLEX_e, CHAR_CIRCUMFLEX_E },
|
|
{ CHAR_DIARESIS_e, CHAR_DIARESIS_E },
|
|
{ CHAR_GRAVE_i, CHAR_GRAVE_I },
|
|
{ CHAR_ACUTE_i, CHAR_ACUTE_I },
|
|
{ CHAR_CIRCUMFLEX_i, CHAR_CIRCUMFLEX_I },
|
|
{ CHAR_DIARESIS_i, CHAR_DIARESIS_I },
|
|
{ CHAR_LOWER_ETH, CHAR_ETH },
|
|
{ CHAR_TILDE_n, CHAR_TILDE_N },
|
|
{ CHAR_GRAVE_o, CHAR_GRAVE_O },
|
|
{ CHAR_ACUTE_o, CHAR_ACUTE_O },
|
|
{ CHAR_CIRCUMFLEX_o, CHAR_CIRCUMFLEX_O },
|
|
{ CHAR_TILDE_o, CHAR_TILDE_O },
|
|
{ CHAR_DIARESIS_o, CHAR_DIARESIS_O },
|
|
{ CHAR_oe, CHAR_OE },
|
|
{ CHAR_GRAVE_u, CHAR_GRAVE_U },
|
|
{ CHAR_ACUTE_u, CHAR_ACUTE_U },
|
|
{ CHAR_CIRCUMFLEX_u, CHAR_CIRCUMFLEX_U },
|
|
{ CHAR_DIARESIS_u, CHAR_DIARESIS_U },
|
|
{ CHAR_ACUTE_y, CHAR_ACUTE_Y },
|
|
{ CHAR_LOWER_THORN, CHAR_THORN },
|
|
{ CHAR_LOWER_ASH, CHAR_ASH }
|
|
};
|
|
|
|
u8 res = small;
|
|
u8* t = (u8*)tbl;
|
|
int i;
|
|
|
|
for (i = 0; i < 56; i++) {
|
|
if (t[0] == small) {
|
|
res = t[1];
|
|
break;
|
|
}
|
|
|
|
t += 2;
|
|
}
|
|
|
|
return res;
|
|
}
|