From c97a28b3857b0ae589bb9032a1a43c5f6f8e46d2 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Sun, 20 Oct 2019 20:34:16 +0300 Subject: Full CPager --- src/text/Pager.cpp | 194 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 src/text/Pager.cpp (limited to 'src/text/Pager.cpp') diff --git a/src/text/Pager.cpp b/src/text/Pager.cpp new file mode 100644 index 00000000..d20be45d --- /dev/null +++ b/src/text/Pager.cpp @@ -0,0 +1,194 @@ +#include "common.h" +#include "patcher.h" +#include "Pager.h" +#include "Timer.h" +#include "Messages.h" +#include "Hud.h" +#include "Camera.h" + +void +CPager::Init() +{ + ClearMessages(); + m_nNumDisplayLetters = 8; +} + +void +CPager::Process() +{ + if (m_messages[0].m_pText != nil && m_messages[0].m_nCurrentPosition >= (int32)m_messages[0].m_nStringLength) { + m_messages[0].m_pText = nil; + uint16 i = 0; + while (i < 7) { + if (m_messages[i + 1].m_pText == nil) break; + m_messages[i] = m_messages[i + 1]; + } + m_messages[i].m_pText = nil; + if (m_messages[0].m_pText) + CMessages::AddToPreviousBriefArray( + m_messages[0].m_pText, + m_messages[0].m_nNumber[0], + m_messages[0].m_nNumber[1], + m_messages[0].m_nNumber[2], + m_messages[0].m_nNumber[3], + m_messages[0].m_nNumber[4], + m_messages[0].m_nNumber[5], + 0); + } + Display(); + if (m_messages[0].m_pText != nil) { + if (TheCamera.m_WideScreenOn || !CHud::m_Wants_To_Draw_Hud || CHud::m_BigMessage[0][0] || CHud::m_BigMessage[2][0]) { + RestartCurrentMessage(); + } else { + if (CTimer::GetTimeInMilliseconds() > m_messages[0].m_nTimeToChangePosition) { + m_messages[0].m_nCurrentPosition++; + m_messages[0].m_nTimeToChangePosition = CTimer::GetTimeInMilliseconds() + m_messages[0].m_nSpeedMs; + } + } + } +} + +void +CPager::Display() +{ + wchar outstr1[256]; + wchar outstr2[260]; + + wchar *pText = m_messages[0].m_pText; + uint16 i = 0; + if (pText) { + CMessages::InsertNumberInString( + pText, + m_messages[0].m_nNumber[0], + m_messages[0].m_nNumber[1], + m_messages[0].m_nNumber[2], + m_messages[0].m_nNumber[3], + m_messages[0].m_nNumber[4], + m_messages[0].m_nNumber[5], + outstr1); + for (; i < m_nNumDisplayLetters; i++) { + int pos = m_messages[0].m_nCurrentPosition + i; + if (pos >= 0) { + if (!outstr1[pos]) break; + + outstr2[i] = outstr1[pos]; + } + else { + outstr2[i] = ' '; + } + } + } + outstr2[i] = '\0'; + CHud::SetPagerMessage(outstr2); +} + +void +CPager::AddMessage(wchar *str, uint16 speed, uint16 priority, uint16 a5) +{ + uint16 size = CMessages::GetWideStringLength(str); + for (int i = 0; i < 8; i++) { + if (m_messages[i].m_pText) { + if (m_messages[i].m_nPriority >= priority) + continue; + + for (int j = 7; j > i; j--) + m_messages[j] = m_messages[j-1]; + + } + m_messages[i].m_pText = str; + m_messages[i].m_nSpeedMs = speed; + m_messages[i].m_nPriority = priority; + m_messages[i].field_10 = a5; + m_messages[i].m_nCurrentPosition = -(m_nNumDisplayLetters + 10); + m_messages[i].m_nTimeToChangePosition = CTimer::GetTimeInMilliseconds() + speed; + m_messages[i].m_nStringLength = size; + m_messages[i].m_nNumber[0] = -1; + m_messages[i].m_nNumber[1] = -1; + m_messages[i].m_nNumber[2] = -1; + m_messages[i].m_nNumber[3] = -1; + m_messages[i].m_nNumber[4] = -1; + m_messages[i].m_nNumber[5] = -1; + + if (i == 0) + CMessages::AddToPreviousBriefArray( + m_messages[0].m_pText, + m_messages[0].m_nNumber[0], + m_messages[0].m_nNumber[1], + m_messages[0].m_nNumber[2], + m_messages[0].m_nNumber[3], + m_messages[0].m_nNumber[4], + m_messages[0].m_nNumber[5], + nil); + return; + } +} + +void +CPager::AddMessageWithNumber(wchar *str, int32 n1, int32 n2, int32 n3, int32 n4, int32 n5, int32 n6, uint16 speed, uint16 priority, uint16 a11) +{ + wchar nstr[520]; + + CMessages::InsertNumberInString(str, n1, n2, n3, n4, n5, n6, nstr); + uint16 size = CMessages::GetWideStringLength(nstr); + for (int i = 0; i < 8; i++) { + if (m_messages[i].m_pText) { + if (m_messages[i].m_nPriority >= priority) + continue; + + for (int j = 7; j > i; j--) + m_messages[j] = m_messages[j - 1]; + + } + m_messages[i].m_pText = str; + m_messages[i].m_nSpeedMs = speed; + m_messages[i].m_nPriority = priority; + m_messages[i].field_10 = a11; + m_messages[i].m_nCurrentPosition = -(m_nNumDisplayLetters + 10); + m_messages[i].m_nTimeToChangePosition = CTimer::GetTimeInMilliseconds() + speed; + m_messages[i].m_nStringLength = size; + m_messages[i].m_nNumber[0] = n1; + m_messages[i].m_nNumber[1] = n2; + m_messages[i].m_nNumber[2] = n3; + m_messages[i].m_nNumber[3] = n4; + m_messages[i].m_nNumber[4] = n5; + m_messages[i].m_nNumber[5] = n6; + + if (i == 0) + CMessages::AddToPreviousBriefArray( + m_messages[0].m_pText, + m_messages[0].m_nNumber[0], + m_messages[0].m_nNumber[1], + m_messages[0].m_nNumber[2], + m_messages[0].m_nNumber[3], + m_messages[0].m_nNumber[4], + m_messages[0].m_nNumber[5], + nil); + return; + } +} + +void +CPager::ClearMessages() +{ + for (int i = 0; i < 8; i++) + m_messages[i].m_pText = nil; +} + +void +CPager::RestartCurrentMessage() +{ + if (m_messages[0].m_pText) { + m_messages[0].m_nCurrentPosition = -(m_nNumDisplayLetters + 10); + m_messages[0].m_nTimeToChangePosition = CTimer::GetTimeInMilliseconds() + m_messages[0].m_nSpeedMs; + } +} + +STARTPATCHES + InjectHook(0x52B6F0, &CPager::Init, PATCH_JUMP); + InjectHook(0x52B740, &CPager::Process, PATCH_JUMP); + InjectHook(0x52B890, &CPager::Display, PATCH_JUMP); + InjectHook(0x52B940, &CPager::AddMessage, PATCH_JUMP); + InjectHook(0x52BB50, &CPager::AddMessageWithNumber, PATCH_JUMP); + InjectHook(0x52BE50, &CPager::RestartCurrentMessage, PATCH_JUMP); + InjectHook(0x52BE00, &CPager::ClearMessages, PATCH_JUMP); +ENDPATCHES \ No newline at end of file -- cgit v1.2.3 From e35780df43d5bd17f1e2a6ae731a63d034d1c5c4 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Mon, 21 Oct 2019 01:08:26 +0300 Subject: Full Messages --- src/text/Pager.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src/text/Pager.cpp') diff --git a/src/text/Pager.cpp b/src/text/Pager.cpp index d20be45d..68caca9a 100644 --- a/src/text/Pager.cpp +++ b/src/text/Pager.cpp @@ -19,12 +19,12 @@ CPager::Process() if (m_messages[0].m_pText != nil && m_messages[0].m_nCurrentPosition >= (int32)m_messages[0].m_nStringLength) { m_messages[0].m_pText = nil; uint16 i = 0; - while (i < 7) { + while (i < NUMPAGERMESSAGES-1) { if (m_messages[i + 1].m_pText == nil) break; m_messages[i] = m_messages[i + 1]; } m_messages[i].m_pText = nil; - if (m_messages[0].m_pText) + if (m_messages[0].m_pText != nil) CMessages::AddToPreviousBriefArray( m_messages[0].m_pText, m_messages[0].m_nNumber[0], @@ -56,7 +56,7 @@ CPager::Display() wchar *pText = m_messages[0].m_pText; uint16 i = 0; - if (pText) { + if (pText != nil) { CMessages::InsertNumberInString( pText, m_messages[0].m_nNumber[0], @@ -86,12 +86,12 @@ void CPager::AddMessage(wchar *str, uint16 speed, uint16 priority, uint16 a5) { uint16 size = CMessages::GetWideStringLength(str); - for (int i = 0; i < 8; i++) { + for (int32 i = 0; i < NUMPAGERMESSAGES; i++) { if (m_messages[i].m_pText) { if (m_messages[i].m_nPriority >= priority) continue; - for (int j = 7; j > i; j--) + for (int j = NUMPAGERMESSAGES-1; j > i; j--) m_messages[j] = m_messages[j-1]; } @@ -130,12 +130,12 @@ CPager::AddMessageWithNumber(wchar *str, int32 n1, int32 n2, int32 n3, int32 n4, CMessages::InsertNumberInString(str, n1, n2, n3, n4, n5, n6, nstr); uint16 size = CMessages::GetWideStringLength(nstr); - for (int i = 0; i < 8; i++) { + for (int32 i = 0; i < NUMPAGERMESSAGES; i++) { if (m_messages[i].m_pText) { if (m_messages[i].m_nPriority >= priority) continue; - for (int j = 7; j > i; j--) + for (int j = NUMPAGERMESSAGES-1; j > i; j--) m_messages[j] = m_messages[j - 1]; } @@ -170,14 +170,14 @@ CPager::AddMessageWithNumber(wchar *str, int32 n1, int32 n2, int32 n3, int32 n4, void CPager::ClearMessages() { - for (int i = 0; i < 8; i++) + for (int32 i = 0; i < NUMPAGERMESSAGES; i++) m_messages[i].m_pText = nil; } void CPager::RestartCurrentMessage() { - if (m_messages[0].m_pText) { + if (m_messages[0].m_pText != nil) { m_messages[0].m_nCurrentPosition = -(m_nNumDisplayLetters + 10); m_messages[0].m_nTimeToChangePosition = CTimer::GetTimeInMilliseconds() + m_messages[0].m_nSpeedMs; } -- cgit v1.2.3 From 6fec86475066ea5ffca204509734192ce54cdec6 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Mon, 21 Oct 2019 01:27:30 +0300 Subject: Fixes --- src/text/Pager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/text/Pager.cpp') diff --git a/src/text/Pager.cpp b/src/text/Pager.cpp index 68caca9a..a9813b18 100644 --- a/src/text/Pager.cpp +++ b/src/text/Pager.cpp @@ -72,8 +72,7 @@ CPager::Display() if (!outstr1[pos]) break; outstr2[i] = outstr1[pos]; - } - else { + } else { outstr2[i] = ' '; } } -- cgit v1.2.3 From 17441c972bad7d17a6ec2f5b9103a2a5921b45f3 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 25 Oct 2019 22:15:07 +0300 Subject: Fix CPager::Process loop --- src/text/Pager.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/text/Pager.cpp') diff --git a/src/text/Pager.cpp b/src/text/Pager.cpp index a9813b18..9e484c29 100644 --- a/src/text/Pager.cpp +++ b/src/text/Pager.cpp @@ -22,6 +22,7 @@ CPager::Process() while (i < NUMPAGERMESSAGES-1) { if (m_messages[i + 1].m_pText == nil) break; m_messages[i] = m_messages[i + 1]; + i++; } m_messages[i].m_pText = nil; if (m_messages[0].m_pText != nil) -- cgit v1.2.3