1
0
Fork 0
mirror of https://github.com/halpz/re3.git synced 2024-12-24 17:55:29 +00:00

Use of sized bool types for CFont

This commit is contained in:
Sergeanur 2021-01-18 14:55:48 +02:00
parent 518bc555a6
commit 8395704dc6
2 changed files with 468 additions and 379 deletions

View file

@ -402,6 +402,166 @@ bool CFont::IsAnsiCharacter(wchar *s)
} }
#endif #endif
void
CFont::RenderFontBuffer()
{
if (FontRenderStatePointer.pRenderState == (CFontRenderState*)FontRenderStateBuf) return;
float textPosX;
float textPosY;
CRGBA color;
bool bBold = false;
bool bFlash = false;
Sprite[RenderState.style].SetRenderState();
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
RenderState = *(CFontRenderState*)&FontRenderStateBuf[0];
textPosX = RenderState.fTextPosX;
textPosY = RenderState.fTextPosY;
color = RenderState.color;
tFontRenderStatePointer pRenderStateBufPointer;
pRenderStateBufPointer.pRenderState = (CFontRenderState*)&FontRenderStateBuf[0];
for (++pRenderStateBufPointer.pRenderState; pRenderStateBufPointer.pStr < FontRenderStatePointer.pStr; pRenderStateBufPointer.pStr++) {
if (*pRenderStateBufPointer.pStr == '\0') {
tFontRenderStatePointer tmpPointer = pRenderStateBufPointer;
tmpPointer.pStr++;
tmpPointer.Align();
if (tmpPointer.pStr >= FontRenderStatePointer.pStr)
break;
RenderState = *(tmpPointer.pRenderState++);
pRenderStateBufPointer = tmpPointer;
textPosX = RenderState.fTextPosX;
textPosY = RenderState.fTextPosY;
color = RenderState.color;
}
if (*pRenderStateBufPointer.pStr == '~') {
#ifdef BUTTON_ICONS
PS2Symbol = BUTTON_NONE;
#endif
pRenderStateBufPointer.pStr = ParseToken(pRenderStateBufPointer.pStr, color, bFlash, bBold);
#ifdef BUTTON_ICONS
if(PS2Symbol != BUTTON_NONE) {
DrawButton(textPosX, textPosY);
textPosX += Details.scaleY * 17.0f;
PS2Symbol = BUTTON_NONE;
}
#endif
if (bFlash) {
if (CTimer::GetTimeInMilliseconds() - Details.nFlashTimer > 300) {
Details.bFlashState = !Details.bFlashState;
Details.nFlashTimer = CTimer::GetTimeInMilliseconds();
}
Details.color.alpha = Details.bFlashState ? 0 : 255;
}
if (!RenderState.bIsShadow)
RenderState.color = color;
}
wchar c = *pRenderStateBufPointer.pStr;
c -= ' ';
if (RenderState.bFontHalfTexture)
c = FindNewCharacter(c);
else if (c > 155)
c = '\0';
if (RenderState.slant != 0.0f)
textPosY = (RenderState.slantRefX - textPosX) * RenderState.slant + RenderState.slantRefY;
PrintChar(textPosX, textPosY, c);
if (bBold) {
PrintChar(textPosX + 1.0f, textPosY, c);
PrintChar(textPosX + 2.0f, textPosY, c);
textPosX += 2.0f;
}
#ifdef FIX_BUGS
// PS2 uses different chars for some symbols
if (!RenderState.bFontHalfTexture && c == 30) c = 61; // wanted star
#endif
textPosX += RenderState.scaleX * GetCharacterWidth(c);
if (c == '\0')
textPosX += RenderState.fExtraSpace;
}
CSprite2d::RenderVertexBuffer();
FontRenderStatePointer.pRenderState = (CFontRenderState*)FontRenderStateBuf;
}
void
CFont::PrintString(float x, float y, uint32, wchar *start, wchar *end, float spwidth)
{
wchar *s;
if (RenderState.style != Details.style) {
RenderFontBuffer();
RenderState.style = Details.style;
}
float dropShadowPosition = Details.dropShadowPosition;
if (dropShadowPosition != 0.0f && (Details.style == FONT_BANK || Details.style == FONT_STANDARD)) {
CRGBA color = Details.color;
Details.color = Details.dropColor;
Details.dropShadowPosition = 0;
Details.bIsShadow = true;
if (Details.slant != 0.0f) {
Details.slantRefX += SCREEN_SCALE_X(dropShadowPosition);
Details.slantRefY += SCREEN_SCALE_Y(dropShadowPosition);
PrintString(SCREEN_SCALE_X(dropShadowPosition) + x, SCREEN_SCALE_Y(dropShadowPosition) + y, Details.anonymous_25, start, end, spwidth);
Details.slantRefX -= SCREEN_SCALE_X(dropShadowPosition);
Details.slantRefY -= SCREEN_SCALE_Y(dropShadowPosition);
} else {
PrintString(SCREEN_SCALE_X(dropShadowPosition) + x, SCREEN_SCALE_Y(dropShadowPosition) + y, Details.anonymous_25, start, end, spwidth);
}
Details.color = color;
Details.dropShadowPosition = dropShadowPosition;
Details.bIsShadow = false;
}
if (FontRenderStatePointer.pStr >= (wchar*)&FontRenderStateBuf[ARRAY_SIZE(FontRenderStateBuf)] - (end - start + 26)) // why 26?
RenderFontBuffer();
CFontRenderState *pRenderState = FontRenderStatePointer.pRenderState;
pRenderState->fTextPosX = x;
pRenderState->fTextPosY = y;
pRenderState->scaleX = Details.scaleX;
pRenderState->scaleY = Details.scaleY;
pRenderState->color = Details.color;
pRenderState->fExtraSpace = spwidth;
pRenderState->slant = Details.slant;
pRenderState->slantRefX = Details.slantRefX;
pRenderState->slantRefY = Details.slantRefY;
pRenderState->bFontHalfTexture = Details.bFontHalfTexture;
pRenderState->proportional = Details.proportional;
pRenderState->style = Details.style;
pRenderState->bIsShadow = Details.bIsShadow;
FontRenderStatePointer.pRenderState++;
for(s = start; s < end;){
if (*s == '~') {
for (wchar *i = ParseToken(s); s != i; FontRenderStatePointer.pStr++) {
*FontRenderStatePointer.pStr = *(s++);
}
if (Details.bFlash) {
if (CTimer::GetTimeInMilliseconds() - Details.nFlashTimer > 300) {
Details.bFlashState = !Details.bFlashState;
Details.nFlashTimer = CTimer::GetTimeInMilliseconds();
}
Details.color.a = Details.bFlashState ? 0 : 255;
}
} else
*(FontRenderStatePointer.pStr++) = *(s++);
}
*(FontRenderStatePointer.pStr++) = '\0';
FontRenderStatePointer.Align();
}
void
CFont::PrintStringFromBottom(float x, float y, wchar *str)
{
y -= (32.0f * Details.scaleY / 2.0f + 2.0f * Details.scaleY) * GetNumberLines(x, y, str);
if (Details.slant == 0.0f)
y -= ((Details.slantRefX - x) * Details.slant + Details.slantRefY);
PrintString(x, y, str);
}
void void
CFont::PrintString(float xstart, float ystart, wchar *s) CFont::PrintString(float xstart, float ystart, wchar *s)
{ {
@ -753,81 +913,6 @@ CFont::GetTextRect(CRect *rect, float xstart, float ystart, wchar *s)
} }
} }
void
CFont::PrintString(float x, float y, uint32, wchar *start, wchar *end, float spwidth)
{
wchar *s;
if (RenderState.style != Details.style) {
RenderFontBuffer();
RenderState.style = Details.style;
}
float dropShadowPosition = Details.dropShadowPosition;
if (dropShadowPosition != 0.0f && (Details.style == FONT_BANK || Details.style == FONT_STANDARD)) {
CRGBA color = Details.color;
Details.color = Details.dropColor;
Details.dropShadowPosition = 0;
Details.bIsShadow = true;
if (Details.slant != 0.0f) {
Details.slantRefX += SCREEN_SCALE_X(dropShadowPosition);
Details.slantRefY += SCREEN_SCALE_Y(dropShadowPosition);
PrintString(SCREEN_SCALE_X(dropShadowPosition) + x, SCREEN_SCALE_Y(dropShadowPosition) + y, Details.anonymous_25, start, end, spwidth);
Details.slantRefX -= SCREEN_SCALE_X(dropShadowPosition);
Details.slantRefY -= SCREEN_SCALE_Y(dropShadowPosition);
} else {
PrintString(SCREEN_SCALE_X(dropShadowPosition) + x, SCREEN_SCALE_Y(dropShadowPosition) + y, Details.anonymous_25, start, end, spwidth);
}
Details.color = color;
Details.dropShadowPosition = dropShadowPosition;
Details.bIsShadow = false;
}
if (FontRenderStatePointer.pStr >= (wchar*)&FontRenderStateBuf[ARRAY_SIZE(FontRenderStateBuf)] - (end - start + 26)) // why 26?
RenderFontBuffer();
CFontRenderState *pRenderState = FontRenderStatePointer.pRenderState;
pRenderState->fTextPosX = x;
pRenderState->fTextPosY = y;
pRenderState->scaleX = Details.scaleX;
pRenderState->scaleY = Details.scaleY;
pRenderState->color = Details.color;
pRenderState->fExtraSpace = spwidth;
pRenderState->slant = Details.slant;
pRenderState->slantRefX = Details.slantRefX;
pRenderState->slantRefY = Details.slantRefY;
pRenderState->bFontHalfTexture = Details.bFontHalfTexture;
pRenderState->proportional = Details.proportional;
pRenderState->style = Details.style;
pRenderState->bIsShadow = Details.bIsShadow;
FontRenderStatePointer.pRenderState++;
for(s = start; s < end;){
if (*s == '~') {
for (wchar *i = ParseToken(s); s != i; FontRenderStatePointer.pStr++) {
*FontRenderStatePointer.pStr = *(s++);
}
if (Details.bFlash) {
if (CTimer::GetTimeInMilliseconds() - Details.nFlashTimer > 300) {
Details.bFlashState = !Details.bFlashState;
Details.nFlashTimer = CTimer::GetTimeInMilliseconds();
}
Details.color.a = Details.bFlashState ? 0 : 255;
}
} else
*(FontRenderStatePointer.pStr++) = *(s++);
}
*(FontRenderStatePointer.pStr++) = '\0';
FontRenderStatePointer.Align();
}
void
CFont::PrintStringFromBottom(float x, float y, wchar *str)
{
y -= (32.0f * Details.scaleY / 2.0f + 2.0f * Details.scaleY) * GetNumberLines(x, y, str);
if (Details.slant == 0.0f)
y -= ((Details.slantRefX - x) * Details.slant + Details.slantRefY);
PrintString(x, y, str);
}
bool IsPunctuation(wchar c) bool IsPunctuation(wchar c)
{ {
switch (c) switch (c)
@ -1022,6 +1107,115 @@ CFont::GetNextSpace(wchar *s)
return s; return s;
} }
wchar*
CFont::ParseToken(wchar* str, CRGBA &color, bool &flash, bool &bold)
{
Details.anonymous_23 = false;
wchar *s = str + 1;
if (Details.color.r || Details.color.g || Details.color.b)
{
switch (*s)
{
case 'B':
bold = !bold;
break;
case 'Y':
color.r = 255;
color.g = 227;
color.b = 79;
break;
case 'b':
color.r = 77;
color.g = 155;
color.b = 210;
break;
case 'f':
flash = !flash;
break;
case 'g':
color.r = 75;
color.g = 151;
color.b = 75;
break;
case 'h':
color.r = 255;
color.g = 255;
color.b = 255;
break;
case 'l':
color.r = 0;
color.g = 0;
color.b = 0;
break;
case 'o':
color.r = 229;
color.g = 125;
color.b = 126;
break;
case 'p':
color.r = 151;
color.g = 82;
color.b = 197;
break;
case 'q':
color.r = 199;
color.g = 144;
color.b = 203;
break;
case 'r':
color.r = 174;
color.g = 0;
color.b = 0;
break;
case 't':
color.r = 86;
color.g = 212;
color.b = 146;
break;
case 'w':
color.r = 225;
color.g = 225;
color.b = 225;
break;
case 'x':
color.r = 132;
color.g = 146;
color.b = 197;
break;
case 'y':
color.r = 255;
color.g = 255;
color.b = 0;
break;
#ifdef BUTTON_ICONS
case 'U': PS2Symbol = BUTTON_UP; break;
case 'D': PS2Symbol = BUTTON_DOWN; break;
case '<': PS2Symbol = BUTTON_LEFT; break;
case '>': PS2Symbol = BUTTON_RIGHT; break;
case 'X': PS2Symbol = BUTTON_CROSS; break;
case 'O': PS2Symbol = BUTTON_CIRCLE; break;
case 'Q': PS2Symbol = BUTTON_SQUARE; break;
case 'T': PS2Symbol = BUTTON_TRIANGLE; break;
case 'K': PS2Symbol = BUTTON_L1; break;
case 'M': PS2Symbol = BUTTON_L2; break;
case 'A': PS2Symbol = BUTTON_L3; break;
case 'J': PS2Symbol = BUTTON_R1; break;
case 'V': PS2Symbol = BUTTON_R2; break;
case 'C': PS2Symbol = BUTTON_R3; break;
case '(': PS2Symbol = BUTTON_RSTICK_LEFT; break;
case ')': PS2Symbol = BUTTON_RSTICK_RIGHT; break;
#endif
default:
break;
}
}
while (*s != '~')
++s;
if (*(++s) == '~')
s = ParseToken(s, color, flash, bold);
return s;
}
#ifdef MORE_LANGUAGES #ifdef MORE_LANGUAGES
wchar* wchar*
CFont::ParseToken(wchar *s, bool japShit) CFont::ParseToken(wchar *s, bool japShit)
@ -1133,113 +1327,22 @@ CFont::ParseToken(wchar *s)
} }
#endif #endif
wchar* void
CFont::ParseToken(wchar* str, CRGBA &color, bool &flash, bool &bold) CFont::FilterOutTokensFromString(wchar *str)
{ {
Details.anonymous_23 = false; int newIdx = 0;
wchar *s = str + 1; wchar copy[256], *c;
if (Details.color.r || Details.color.g || Details.color.b) UnicodeStrcpy(copy, str);
{
switch (*s) for (c = copy; *c != '\0'; c++) {
{ if (*c == '~') {
case 'B': c++;
bold = !bold; while (*c != '~') c++;
break; } else {
case 'Y': str[newIdx++] = *c;
color.r = 255;
color.g = 227;
color.b = 79;
break;
case 'b':
color.r = 77;
color.g = 155;
color.b = 210;
break;
case 'f':
flash = !flash;
break;
case 'g':
color.r = 75;
color.g = 151;
color.b = 75;
break;
case 'h':
color.r = 255;
color.g = 255;
color.b = 255;
break;
case 'l':
color.r = 0;
color.g = 0;
color.b = 0;
break;
case 'o':
color.r = 229;
color.g = 125;
color.b = 126;
break;
case 'p':
color.r = 151;
color.g = 82;
color.b = 197;
break;
case 'q':
color.r = 199;
color.g = 144;
color.b = 203;
break;
case 'r':
color.r = 174;
color.g = 0;
color.b = 0;
break;
case 't':
color.r = 86;
color.g = 212;
color.b = 146;
break;
case 'w':
color.r = 225;
color.g = 225;
color.b = 225;
break;
case 'x':
color.r = 132;
color.g = 146;
color.b = 197;
break;
case 'y':
color.r = 255;
color.g = 255;
color.b = 0;
break;
#ifdef BUTTON_ICONS
case 'U': PS2Symbol = BUTTON_UP; break;
case 'D': PS2Symbol = BUTTON_DOWN; break;
case '<': PS2Symbol = BUTTON_LEFT; break;
case '>': PS2Symbol = BUTTON_RIGHT; break;
case 'X': PS2Symbol = BUTTON_CROSS; break;
case 'O': PS2Symbol = BUTTON_CIRCLE; break;
case 'Q': PS2Symbol = BUTTON_SQUARE; break;
case 'T': PS2Symbol = BUTTON_TRIANGLE; break;
case 'K': PS2Symbol = BUTTON_L1; break;
case 'M': PS2Symbol = BUTTON_L2; break;
case 'A': PS2Symbol = BUTTON_L3; break;
case 'J': PS2Symbol = BUTTON_R1; break;
case 'V': PS2Symbol = BUTTON_R2; break;
case 'C': PS2Symbol = BUTTON_R3; break;
case '(': PS2Symbol = BUTTON_RSTICK_LEFT; break;
case ')': PS2Symbol = BUTTON_RSTICK_RIGHT; break;
#endif
default:
break;
} }
} }
while (*s != '~') str[newIdx] = '\0';
++s;
if (*(++s) == '~')
s = ParseToken(s, color, flash, bold);
return s;
} }
void void
@ -1249,89 +1352,132 @@ CFont::DrawFonts(void)
} }
void void
CFont::RenderFontBuffer() CFont::SetScale(float x, float y)
{ {
if (FontRenderStatePointer.pRenderState == (CFontRenderState*)FontRenderStateBuf) return; Details.scaleX = x;
Details.scaleY = y;
float textPosX;
float textPosY;
CRGBA color;
bool bBold = false;
bool bFlash = false;
Sprite[RenderState.style].SetRenderState();
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
RenderState = *(CFontRenderState*)&FontRenderStateBuf[0];
textPosX = RenderState.fTextPosX;
textPosY = RenderState.fTextPosY;
color = RenderState.color;
tFontRenderStatePointer pRenderStateBufPointer;
pRenderStateBufPointer.pRenderState = (CFontRenderState*)&FontRenderStateBuf[0];
for (++pRenderStateBufPointer.pRenderState; pRenderStateBufPointer.pStr < FontRenderStatePointer.pStr; pRenderStateBufPointer.pStr++) {
if (*pRenderStateBufPointer.pStr == '\0') {
tFontRenderStatePointer tmpPointer = pRenderStateBufPointer;
tmpPointer.pStr++;
tmpPointer.Align();
if (tmpPointer.pStr >= FontRenderStatePointer.pStr)
break;
RenderState = *(tmpPointer.pRenderState++);
pRenderStateBufPointer = tmpPointer;
textPosX = RenderState.fTextPosX;
textPosY = RenderState.fTextPosY;
color = RenderState.color;
}
if (*pRenderStateBufPointer.pStr == '~') {
#ifdef BUTTON_ICONS
PS2Symbol = BUTTON_NONE;
#endif
pRenderStateBufPointer.pStr = ParseToken(pRenderStateBufPointer.pStr, color, bFlash, bBold);
#ifdef BUTTON_ICONS
if(PS2Symbol != BUTTON_NONE) {
DrawButton(textPosX, textPosY);
textPosX += Details.scaleY * 17.0f;
PS2Symbol = BUTTON_NONE;
}
#endif
if (bFlash) {
if (CTimer::GetTimeInMilliseconds() - Details.nFlashTimer > 300) {
Details.bFlashState = !Details.bFlashState;
Details.nFlashTimer = CTimer::GetTimeInMilliseconds();
}
Details.color.alpha = Details.bFlashState ? 0 : 255;
}
if (!RenderState.bIsShadow)
RenderState.color = color;
}
wchar c = *pRenderStateBufPointer.pStr;
c -= ' ';
if (RenderState.bFontHalfTexture)
c = FindNewCharacter(c);
else if (c > 155)
c = '\0';
if (RenderState.slant != 0.0f)
textPosY = (RenderState.slantRefX - textPosX) * RenderState.slant + RenderState.slantRefY;
PrintChar(textPosX, textPosY, c);
if (bBold) {
PrintChar(textPosX + 1.0f, textPosY, c);
PrintChar(textPosX + 2.0f, textPosY, c);
textPosX += 2.0f;
}
#ifdef FIX_BUGS
// PS2 uses different chars for some symbols
if (!RenderState.bFontHalfTexture && c == 30) c = 61; // wanted star
#endif
textPosX += RenderState.scaleX * GetCharacterWidth(c);
if (c == '\0')
textPosX += RenderState.fExtraSpace;
}
CSprite2d::RenderVertexBuffer();
FontRenderStatePointer.pRenderState = (CFontRenderState*)FontRenderStateBuf;
} }
void
CFont::SetSlantRefPoint(float x, float y)
{
Details.slantRefX = x;
Details.slantRefY = y;
}
void
CFont::SetSlant(float s)
{
Details.slant = s;
}
void
CFont::SetColor(CRGBA col)
{
Details.color = col;
if (Details.alphaFade < 255.0f)
Details.color.a *= Details.alphaFade / 255.0f;
}
void
CFont::SetJustifyOn(void)
{
Details.justify = true;
Details.centre = false;
Details.rightJustify = false;
}
void
CFont::SetJustifyOff(void)
{
Details.justify = false;
Details.rightJustify = false;
}
void
CFont::SetCentreOn(void)
{
Details.centre = true;
Details.justify = false;
Details.rightJustify = false;
}
void
CFont::SetCentreOff(void)
{
Details.centre = false;
}
void
CFont::SetWrapx(float x)
{
Details.wrapX = x;
}
void
CFont::SetCentreSize(float s)
{
Details.centreSize = s;
}
void
CFont::SetBackgroundOn(void)
{
Details.background = true;
}
void
CFont::SetBackgroundOff(void)
{
Details.background = false;
}
void
CFont::SetBackgroundColor(CRGBA col)
{
Details.backgroundColor = col;
}
void
CFont::SetBackGroundOnlyTextOn(void)
{
Details.backgroundOnlyText = true;
}
void
CFont::SetBackGroundOnlyTextOff(void)
{
Details.backgroundOnlyText = false;
}
void
CFont::SetRightJustifyOn(void)
{
Details.rightJustify = true;
Details.justify = false;
Details.centre = false;
}
void
CFont::SetRightJustifyOff(void)
{
Details.rightJustify = false;
Details.justify = false;
Details.centre = false;
}
void
CFont::SetPropOff(void)
{
Details.proportional = false;
}
void
CFont::SetPropOn(void)
{
Details.proportional = true;
}
void void
CFont::SetFontStyle(int16 style) CFont::SetFontStyle(int16 style)
@ -1339,12 +1485,39 @@ CFont::SetFontStyle(int16 style)
if (style == FONT_HEADING) { if (style == FONT_HEADING) {
Details.style = FONT_HEADING; Details.style = FONT_HEADING;
Details.bFontHalfTexture = true; Details.bFontHalfTexture = true;
} else { }
else {
Details.style = style; Details.style = style;
Details.bFontHalfTexture = false; Details.bFontHalfTexture = false;
} }
} }
void
CFont::SetRightJustifyWrap(float wrap)
{
Details.rightJustifyWrap = wrap;
}
void
CFont::SetAlphaFade(float fade)
{
Details.alphaFade = fade;
}
void
CFont::SetDropColor(CRGBA col)
{
Details.dropColor = col;
if (Details.alphaFade < 255.0f)
Details.dropColor.a *= Details.alphaFade / 255.0f;
}
void
CFont::SetDropShadowPosition(int16 pos)
{
Details.dropShadowPosition = pos;
}
int16 CFont::FindNewCharacter(int16 c) int16 CFont::FindNewCharacter(int16 c)
{ {
if (c >= 33 && c <= 33 + 25) if (c >= 33 && c <= 33 + 25)
@ -1384,36 +1557,6 @@ CFont::character_code(uint8 c)
return foreign_table[c-128]; return foreign_table[c-128];
} }
void
CFont::SetScale(float x, float y)
{
Details.scaleX = x;
Details.scaleY = y;
}
void
CFont::SetBackgroundColor(CRGBA col)
{
Details.backgroundColor = col;
}
void
CFont::SetColor(CRGBA col)
{
Details.color = col;
if (Details.alphaFade < 255.0f)
Details.color.a *= Details.alphaFade / 255.0f;
}
void
CFont::SetDropColor(CRGBA col)
{
Details.dropColor = col;
if (Details.alphaFade < 255.0f)
Details.dropColor.a *= Details.alphaFade / 255.0f;
}
void void
CFont::SetOutlineColor(CRGBA col) CFont::SetOutlineColor(CRGBA col)
{ {
@ -1422,20 +1565,5 @@ CFont::SetOutlineColor(CRGBA col)
Details.outlineColor.a *= Details.alphaFade / 255.0f; Details.outlineColor.a *= Details.alphaFade / 255.0f;
} }
void void CFont::SetOutlineOn(int on) { Details.bOutlineOn = on; }
CFont::FilterOutTokensFromString(wchar *str) void CFont::SetNewLineAdd(int line) { Details.line = line; }
{
int newIdx = 0;
wchar copy[256], *c;
UnicodeStrcpy(copy, str);
for (c = copy; *c != '\0'; c++) {
if (*c == '~') {
c++;
while (*c != '~') c++;
} else {
str[newIdx++] = *c;
}
}
str[newIdx] = '\0';
}

View file

@ -14,28 +14,28 @@ struct CFontDetails
float slant; float slant;
float slantRefX; float slantRefX;
float slantRefY; float slantRefY;
bool justify; bool8 justify;
bool centre; bool8 centre;
bool rightJustify; bool8 rightJustify;
bool background; bool8 background;
bool backgroundOnlyText; bool8 backgroundOnlyText;
bool proportional; bool8 proportional;
bool bIsShadow; bool8 bIsShadow;
bool bFlash; bool8 bFlash;
bool bBold; bool8 bBold;
float alphaFade; float alphaFade;
CRGBA backgroundColor; CRGBA backgroundColor;
float wrapX; float wrapX;
float centreSize; float centreSize;
float rightJustifyWrap; float rightJustifyWrap;
int16 style; int16 style;
bool bFontHalfTexture; bool8 bFontHalfTexture;
uint32 bank; uint32 bank;
int16 dropShadowPosition; int16 dropShadowPosition;
CRGBA dropColor; CRGBA dropColor;
bool bFlashState; bool8 bFlashState;
int nFlashTimer; int nFlashTimer;
bool anonymous_23; bool8 anonymous_23;
uint32 anonymous_25; uint32 anonymous_25;
uint32 anonymous_26; uint32 anonymous_26;
CRGBA outlineColor; CRGBA outlineColor;
@ -175,73 +175,34 @@ public:
static void RenderFontBuffer(void); static void RenderFontBuffer(void);
static uint16 character_code(uint8 c); static uint16 character_code(uint8 c);
static CFontDetails GetDetails() { return Details; }
static void SetScale(float x, float y); static void SetScale(float x, float y);
static void SetSlantRefPoint(float x, float y) { Details.slantRefX = x; Details.slantRefY = y; } static void SetSlantRefPoint(float x, float y);
static void SetSlant(float s) { Details.slant = s; } static void SetSlant(float s);
static void SetJustifyOn(void) { static void SetJustifyOn(void);
Details.justify = true; static void SetJustifyOff(void);
Details.centre = false; static void SetRightJustifyOn(void);
Details.rightJustify = false; static void SetRightJustifyOff(void);
} static void SetCentreOn(void);
static void SetJustifyOff(void) { static void SetCentreOff(void);
Details.justify = false; static void SetWrapx(float x);
Details.rightJustify = false; static void SetCentreSize(float s);
} static void SetBackgroundOn(void);
static void SetRightJustifyOn(void) { static void SetBackgroundOff(void);
Details.rightJustify = true; static void SetBackGroundOnlyTextOn(void);
Details.justify = false; static void SetBackGroundOnlyTextOff(void);
Details.centre = false; static void SetPropOn(void);
} static void SetPropOff(void);
static void SetRightJustifyOff(void) {
Details.rightJustify = false;
Details.justify = false;
Details.centre = false;
}
static void SetCentreOn(void) {
Details.centre = true;
Details.justify = false;
Details.rightJustify = false;
}
static void SetCentreOff(void) {
Details.centre = false;
}
static void SetAlignment(uint8 alignment) {
if (alignment == ALIGN_LEFT) {
CFont::Details.justify = true;
CFont::Details.centre = false;
CFont::Details.rightJustify = false;
}
else if (alignment == ALIGN_CENTER) {
CFont::Details.justify = false;
CFont::Details.centre = true;
CFont::Details.rightJustify = false;
}
else if (alignment == ALIGN_RIGHT) {
CFont::Details.justify = false;
CFont::Details.centre = false;
CFont::Details.rightJustify = true;
}
}
static void SetWrapx(float x) { Details.wrapX = x; }
static void SetCentreSize(float s) { Details.centreSize = s; }
static void SetBackgroundOn(void) { Details.background = true; }
static void SetBackgroundOff(void) { Details.background = false; }
static void SetBackGroundOnlyTextOn(void) { Details.backgroundOnlyText = true; }
static void SetBackGroundOnlyTextOff(void) { Details.backgroundOnlyText = false; }
static void SetPropOn(void) { Details.proportional = true; }
static void SetPropOff(void) { Details.proportional = false; }
static void SetFontStyle(int16 style); static void SetFontStyle(int16 style);
static void SetRightJustifyWrap(float wrap) { Details.rightJustifyWrap = wrap; } static void SetRightJustifyWrap(float wrap);
static void SetAlphaFade(float fade) { Details.alphaFade = fade; } static void SetAlphaFade(float fade);
static void SetDropShadowPosition(int16 pos) { Details.dropShadowPosition = pos; } static void SetDropShadowPosition(int16 pos);
static void SetBackgroundColor(CRGBA col); static void SetBackgroundColor(CRGBA col);
static void SetColor(CRGBA col); static void SetColor(CRGBA col);
static void SetDropColor(CRGBA col); static void SetDropColor(CRGBA col);
static void SetOutlineColor(CRGBA col); static void SetOutlineColor(CRGBA col);
static void SetOutlineOn(int on) { Details.bOutlineOn = on; } static void SetOutlineOn(int on);
static void SetNewLineAdd(int line) { Details.line = line; } static void SetNewLineAdd(int line);
static int16 FindNewCharacter(int16 c); static int16 FindNewCharacter(int16 c);
static void FilterOutTokensFromString(wchar*); static void FilterOutTokensFromString(wchar*);