From 8dab92d158be70e49b9fff04f7187023aa1cf3c3 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 22 Jan 2021 05:49:17 +0200 Subject: [PATCH] CMessages::GetTokenPadKeyString --- src/render/Font.cpp | 2 +- src/render/Hud.cpp | 17 +++++----- src/render/Hud.h | 2 +- src/text/Messages.cpp | 78 ++++++++++++++++++++++++++++++++++++++++--- src/text/Messages.h | 1 + 5 files changed, 85 insertions(+), 15 deletions(-) diff --git a/src/render/Font.cpp b/src/render/Font.cpp index b559ca7a..45ea9ac2 100644 --- a/src/render/Font.cpp +++ b/src/render/Font.cpp @@ -358,7 +358,7 @@ CFont::PrintChar(float x, float y, wchar c) CSprite2d::AddToBuffer( CRect(x, y + RenderState.scaleY * 4.0f, x + 32.0f * RenderState.scaleY * xScale * 0.96f, - y + 4.0f * RenderState.scaleY * + 16.0f * RenderState.scaleY), + y + 4.0f * RenderState.scaleY + 16.0f * RenderState.scaleY), RenderState.color, xoff / 16.0f, yoff / 12.8f + 0.0021f, (xoff + 1.0f) / 16.0f - 0.001f, yoff / 12.8f + 0.0021f, diff --git a/src/render/Hud.cpp b/src/render/Hud.cpp index e896b871..0d302571 100644 --- a/src/render/Hud.cpp +++ b/src/render/Hud.cpp @@ -188,24 +188,25 @@ struct { "", "" }, { "", "" }, { "radardisc", "radardisc" }, + { "radardiscback", "" }, { "", "" }, { "", "" }, { "", "" }, { "", "" }, { "", "" }, - { "", "" }, - { "", "" }, - { "", "" }, - { "", "" }, - { "", "" }, - { "", "" }, - { "", "" }, + { "bar_inside1dark", "" }, + { "bar_inside2dark", "" }, + { "hudnumbers", "" }, + { "bar_inside1", "" }, + { "bar_inside2", "" }, + { "bar_outline", "" }, { "sitesniper", "sitesniperm" }, { "siteM16", "siteM16m" }, { "sitelaser", "sitelaserm" }, { "laserdot", "laserdotm" }, { "viewfinder_128", "viewfinder_128m" }, - { "bleeder", "" } + { "bleeder", "" }, + { "gren_rem", "noMaskNeeded" } }; RwTexture *gpSniperSightTex; diff --git a/src/render/Hud.h b/src/render/Hud.h index 831c8e0d..b81ac828 100644 --- a/src/render/Hud.h +++ b/src/render/Hud.h @@ -44,7 +44,7 @@ enum eSprites HUD_LASERDOT, HUD_VIEWFINDER, HUD_BLEEDER, - NUM_HUD_SPRITES = 69, + NUM_HUD_SPRITES = 70, }; extern float BigMessageInUse[6]; diff --git a/src/text/Messages.cpp b/src/text/Messages.cpp index 440746c0..1027c0ee 100644 --- a/src/text/Messages.cpp +++ b/src/text/Messages.cpp @@ -11,6 +11,8 @@ #include "Font.h" +#include "Pad.h" + // --MIAMI: file done tMessage CMessages::BriefMessages[NUMBRIEFMESSAGES]; @@ -443,6 +445,64 @@ CMessages::InsertStringInString(wchar *str1, wchar *str2) str1[i++] = '\0'; } +int +CMessages::GetTokenPadKeyString(const wchar *in, wchar *out) +{ + wchar str[256]; + memset(str, 0, sizeof(str)); + str[0] = 'C'; + + // TODO: there was a switch here but that's stupid + str[1] = CPad::GetPad(0)->Mode + 48; + + while (*in != '~') in++; + in++; + + int i = 1; + while (*in != '~') + str[1+i++] = *(in++); + + wchar *text = TheText.Get(UnicodeToAscii(str)); + if (!text) return i; + while (text[0] != '\0') + { + if (text[0] == '~') + { + switch (text[1]) + { + case 'L': + *(out++) = 'M'; + break; + case 'N': + *(out++) = 'O'; + break; + case 'O': + *(out++) = 227; + break; + case 'R': + *(out++) = 'S'; + break; + case 'S': + *(out++) = 225; + break; + case 'T': + *(out++) = 224; + break; + case 'X': + *(out++) = 226; + break; + default: + break; + } + text += 3; + } + else { + *(out++) = *(text++); + } + } + return i; +} + void CMessages::InsertPlayerControlKeysInString(wchar *str) { @@ -452,7 +512,7 @@ CMessages::InsertPlayerControlKeysInString(wchar *str) if (!str) return; uint16 strSize = GetWideStringLength(str); - memset(keybuf, 0, 256*sizeof(wchar)); + memset(keybuf, 0, 256*sizeof(wchar)); // not memset? :O wchar *_outstr = outstr; for (i = 0; i < strSize;) { @@ -462,9 +522,16 @@ CMessages::InsertPlayerControlKeysInString(wchar *str) #else if (str[i] == '~' && str[i + 1] == 'k' && str[i + 2] == '~') { #endif + memset(keybuf, 0, 256 * sizeof(wchar)); i += 4; - bool done = false; - for (int32 cont = 0; cont < MAX_CONTROLLERACTIONS && !done; cont++) { + i += GetTokenPadKeyString(&str[i], keybuf) + 1; + uint16 keybuf_size = GetWideStringLength(keybuf); + for (uint16 j = 0; j < keybuf_size; j++) { + *(_outstr++) = keybuf[j]; + keybuf[j] = '\0'; + } + + /*for (int32 cont = 0; cont < MAX_CONTROLLERACTIONS && !done; cont++) { uint16 contSize = GetWideStringLength(ControlsManager.m_aActionNames[cont]); if (contSize != 0) { if (WideStringCompare(&str[i], ControlsManager.m_aActionNames[cont], contSize)) { @@ -478,7 +545,7 @@ CMessages::InsertPlayerControlKeysInString(wchar *str) i += contSize + 1; } } - } + }*/ } else { *(_outstr++) = str[i++]; } @@ -823,4 +890,5 @@ CMessages::ClearThisBigPrintNow(uint32 id) ClearThisBigPrint(BIGMessages[id].m_Stack[0].m_pText); CHud::m_BigMessage[id][0] = '\0'; BigMessageInUse[id] = 0.0f; -} \ No newline at end of file +} + diff --git a/src/text/Messages.h b/src/text/Messages.h index 602a4a08..51112908 100644 --- a/src/text/Messages.h +++ b/src/text/Messages.h @@ -62,6 +62,7 @@ public: static void ClearThisBigPrint(wchar *str); static void ClearAllMessagesDisplayedByGame(void); static void ClearThisBigPrintNow(uint32 id); + static int GetTokenPadKeyString(const wchar *in, wchar *out); // unused or cut //static void AddMessageSoonWithString(wchar*, uint32, uint16, wchar*);