fix Messages.cpp

This commit is contained in:
Fire_Head 2019-10-27 07:46:54 +03:00 committed by GitHub
parent ff02fc1a19
commit 649aea7bf7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,58 +1,58 @@
#define DIRECTINPUT_VERSION 0x0800 #define DIRECTINPUT_VERSION 0x0800
#include "dinput.h" #include "dinput.h"
#include "common.h" #include "common.h"
#include "patcher.h" #include "patcher.h"
#include "Messages.h" #include "Messages.h"
#include "RwHelper.h" #include "RwHelper.h"
#include "Hud.h" #include "Hud.h"
#include "User.h" #include "User.h"
#include "Timer.h" #include "Timer.h"
#include "Text.h" #include "Text.h"
#include "ControllerConfig.h" #include "ControllerConfig.h"
tMessage(&CMessages::BriefMessages)[NUMBRIEFMESSAGES] = *(tMessage(*)[NUMBRIEFMESSAGES])*(uintptr*)0x8786E0; tMessage(&CMessages::BriefMessages)[NUMBRIEFMESSAGES] = *(tMessage(*)[NUMBRIEFMESSAGES])*(uintptr*)0x8786E0;
tPreviousBrief(&CMessages::PreviousBriefs)[NUMPREVIOUSBRIEFS] = *(tPreviousBrief(*)[NUMPREVIOUSBRIEFS])*(uintptr*)0x713C08; tPreviousBrief(&CMessages::PreviousBriefs)[NUMPREVIOUSBRIEFS] = *(tPreviousBrief(*)[NUMPREVIOUSBRIEFS])*(uintptr*)0x713C08;
tBigMessage(&CMessages::BIGMessages)[NUMBIGMESSAGES] = *(tBigMessage(*)[NUMBIGMESSAGES])*(uintptr*)0x773628; tBigMessage(&CMessages::BIGMessages)[NUMBIGMESSAGES] = *(tBigMessage(*)[NUMBIGMESSAGES])*(uintptr*)0x773628;
char CMessages::PreviousMissionTitle[16]; // unused char CMessages::PreviousMissionTitle[16]; // unused
void void
CMessages::Init() CMessages::Init()
{ {
ClearMessages(); ClearMessages();
for (int32 i = 0; i < NUMPREVIOUSBRIEFS; i++) { for (int32 i = 0; i < NUMPREVIOUSBRIEFS; i++) {
PreviousBriefs[i].m_pText = nil; PreviousBriefs[i].m_pText = nil;
PreviousBriefs[i].m_pString = nil; PreviousBriefs[i].m_pString = nil;
} }
} }
uint16 uint16
CMessages::GetWideStringLength(wchar *src) CMessages::GetWideStringLength(wchar *src)
{ {
uint16 length = 0; uint16 length = 0;
while (*(src++)) length++; while (*(src++)) length++;
return length; return length;
} }
void void
CMessages::WideStringCopy(wchar *dst, wchar *src, uint16 size) CMessages::WideStringCopy(wchar *dst, wchar *src, uint16 size)
{ {
int32 i = 0; int32 i = 0;
if (src) { if (src) {
while (i < size - 1) { while (i < size - 1) {
if (!src[i]) break; if (!src[i]) break;
dst[i] = src[i]; dst[i] = src[i];
i++; i++;
} }
} else { } else {
while (i < size - 1) while (i < size - 1)
dst[i++] = '\0'; dst[i++] = '\0';
} }
dst[i] = '\0'; dst[i] = '\0';
} }
bool bool
CMessages::WideStringCompare(wchar *str1, wchar *str2, uint16 size) CMessages::WideStringCompare(wchar *str1, wchar *str2, uint16 size)
{ {
@ -251,11 +251,11 @@ CMessages::AddMessageSoon(wchar *msg, uint32 time, uint16 flag)
void void
CMessages::ClearMessages() CMessages::ClearMessages()
{ {
for (int32 i = 0; i < NUMBIGMESSAGES; i++) { for (int32 i = 0; i < NUMBIGMESSAGES; i++) {
for (int32 j = 0; j < 4; j++) { for (int32 j = 0; j < 4; j++) {
BIGMessages[i].m_Stack[j].m_pText = nil; BIGMessages[i].m_Stack[j].m_pText = nil;
BIGMessages[i].m_Stack[j].m_pString = nil; BIGMessages[i].m_Stack[j].m_pString = nil;
} }
} }
ClearSmallMessagesOnly(); ClearSmallMessagesOnly();
} }
@ -442,7 +442,7 @@ CMessages::InsertPlayerControlKeysInString(wchar *str)
for (i = 0; i < strSize;) { for (i = 0; i < strSize;) {
if (str[i] == '~' && str[i + 1] == 'k' && str[i + 2] == '~') { if (str[i] == '~' && str[i + 1] == 'k' && str[i + 2] == '~') {
i += 4; i += 4;
for (int32 cont = 0; cont < TOTAL_CONTROL_ACTIONS; cont++) { for (int32 cont = 0; cont < MAX_CONTROLLERACTIONS; cont++) {
uint16 contSize = GetWideStringLength(ControlsManager.m_aActionNames[cont]); uint16 contSize = GetWideStringLength(ControlsManager.m_aActionNames[cont]);
if (contSize != 0) { if (contSize != 0) {
if (WideStringCompare(&str[i], ControlsManager.m_aActionNames[cont], contSize)) { if (WideStringCompare(&str[i], ControlsManager.m_aActionNames[cont], contSize)) {
@ -832,4 +832,4 @@ STARTPATCHES
InjectHook(0x52B140, CMessages::ClearThisPrint, PATCH_JUMP); InjectHook(0x52B140, CMessages::ClearThisPrint, PATCH_JUMP);
InjectHook(0x52B3C0, CMessages::ClearThisBigPrint, PATCH_JUMP); InjectHook(0x52B3C0, CMessages::ClearThisBigPrint, PATCH_JUMP);
InjectHook(0x52B670, CMessages::ClearAllMessagesDisplayedByGame, PATCH_JUMP); InjectHook(0x52B670, CMessages::ClearAllMessagesDisplayedByGame, PATCH_JUMP);
ENDPATCHES ENDPATCHES