summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2020-10-11 09:42:19 +0200
committerGitHub <noreply@github.com>2020-10-11 09:42:19 +0200
commita5ea709edcb80e977c158359241502f842ad45b4 (patch)
tree05f850e59f0995fa98969279618b02719fb1bd1c
parentMerge remote-tracking branch 'origin/master' into miami (diff)
parentUnicodeMakeUpperCase move + arg fix (diff)
downloadre3-a5ea709edcb80e977c158359241502f842ad45b4.tar
re3-a5ea709edcb80e977c158359241502f842ad45b4.tar.gz
re3-a5ea709edcb80e977c158359241502f842ad45b4.tar.bz2
re3-a5ea709edcb80e977c158359241502f842ad45b4.tar.lz
re3-a5ea709edcb80e977c158359241502f842ad45b4.tar.xz
re3-a5ea709edcb80e977c158359241502f842ad45b4.tar.zst
re3-a5ea709edcb80e977c158359241502f842ad45b4.zip
-rw-r--r--src/audio/DMAudio.cpp1
-rw-r--r--src/render/Font.cpp40
-rw-r--r--src/render/Font.h6
-rw-r--r--src/save/GenericGameStorage.cpp1
-rw-r--r--src/save/PCSave.cpp1
-rw-r--r--src/text/Text.cpp122
-rw-r--r--src/text/Text.h5
7 files changed, 108 insertions, 68 deletions
diff --git a/src/audio/DMAudio.cpp b/src/audio/DMAudio.cpp
index 486daebf..a4db2862 100644
--- a/src/audio/DMAudio.cpp
+++ b/src/audio/DMAudio.cpp
@@ -5,6 +5,7 @@
#include "AudioManager.h"
#include "AudioScriptObject.h"
#include "sampman.h"
+#include "Font.h"
#include "Text.h"
#include "crossplatform.h"
diff --git a/src/render/Font.cpp b/src/render/Font.cpp
index c0cc333a..8deac7bf 100644
--- a/src/render/Font.cpp
+++ b/src/render/Font.cpp
@@ -5,6 +5,46 @@
#include "Font.h"
#include "Timer.h"
+void
+AsciiToUnicode(const char *src, wchar *dst)
+{
+ while((*dst++ = (unsigned char)*src++) != '\0');
+}
+
+void
+UnicodeStrcat(wchar *dst, wchar *append)
+{
+ UnicodeStrcpy(&dst[UnicodeStrlen(dst)], append);
+}
+
+void
+UnicodeStrcpy(wchar *dst, const wchar *src)
+{
+ while((*dst++ = *src++) != '\0');
+}
+
+int
+UnicodeStrlen(const wchar *str)
+{
+ int len;
+ for(len = 0; *str != '\0'; len++, str++);
+ return len;
+}
+
+void
+UnicodeMakeUpperCase(wchar *dst, const wchar *src) //idk what to do with it, seems to be incorrect implementation by R*
+{
+ while (*src != '\0') {
+ if (*src < 'a' || *src > 'z')
+ *dst = *src;
+ else
+ *dst = *src - 32;
+ dst++;
+ src++;
+ }
+ *dst = '\0';
+}
+
CFontDetails CFont::Details;
int16 CFont::NewLine;
CSprite2d CFont::Sprite[MAX_FONTS];
diff --git a/src/render/Font.h b/src/render/Font.h
index ca0ed7d0..47a39f73 100644
--- a/src/render/Font.h
+++ b/src/render/Font.h
@@ -1,5 +1,11 @@
#pragma once
+void AsciiToUnicode(const char *src, wchar *dst);
+void UnicodeStrcpy(wchar *dst, const wchar *src);
+void UnicodeStrcat(wchar *dst, wchar *append);
+int UnicodeStrlen(const wchar *str);
+void UnicodeMakeUpperCase(wchar *dst, const wchar *src);
+
struct CFontDetails
{
CRGBA color;
diff --git a/src/save/GenericGameStorage.cpp b/src/save/GenericGameStorage.cpp
index b98b8243..18eecd95 100644
--- a/src/save/GenericGameStorage.cpp
+++ b/src/save/GenericGameStorage.cpp
@@ -11,6 +11,7 @@
#include "Clock.h"
#include "Date.h"
#include "FileMgr.h"
+#include "Font.h"
#include "Frontend.h"
#include "GameLogic.h"
#include "Gangs.h"
diff --git a/src/save/PCSave.cpp b/src/save/PCSave.cpp
index 6449d586..dd0926cf 100644
--- a/src/save/PCSave.cpp
+++ b/src/save/PCSave.cpp
@@ -3,6 +3,7 @@
#include "crossplatform.h"
#include "FileMgr.h"
+#include "Font.h"
#ifdef MORE_LANGUAGES
#include "Game.h"
#endif
diff --git a/src/text/Text.cpp b/src/text/Text.cpp
index 53259ea0..5adc576a 100644
--- a/src/text/Text.cpp
+++ b/src/text/Text.cpp
@@ -9,11 +9,12 @@
#include "Text.h"
#include "Timer.h"
+//--MIAMI: file done
+
static wchar WideErrorString[25];
CText TheText;
-//--MIAMI: DONE
CText::CText(void)
{
encoding = 'e';
@@ -23,7 +24,6 @@ CText::CText(void)
memset(WideErrorString, 0, sizeof(WideErrorString));
}
-//--MIAMI: DONE
void
CText::Load(void)
{
@@ -95,7 +95,6 @@ CText::Load(void)
CFileMgr::SetDir("");
}
-//--MIAMI: DONE
void
CText::Unload(void)
{
@@ -108,7 +107,6 @@ CText::Unload(void)
memset(szMissionTableName, 0, sizeof(szMissionTableName));
}
-//--MIAMI: DONE
wchar*
CText::Get(const char *key)
{
@@ -158,7 +156,6 @@ wchar FrenchUpperCaseTable[128] = {
253, 254, 255
};
-//--MIAMI: TODO (check tables)
wchar
CText::GetUpperCase(wchar c)
{
@@ -190,7 +187,6 @@ CText::GetUpperCase(wchar c)
return c;
}
-//--MIAMI: DONE
void
CText::UpperCase(wchar *s)
{
@@ -200,23 +196,28 @@ CText::UpperCase(wchar *s)
}
}
-//--MIAMI: DONE
void
CText::GetNameOfLoadedMissionText(char *outName)
{
strcpy(outName, szMissionTableName);
}
-//--MIAMI: DONE
void
CText::ReadChunkHeader(ChunkHeader *buf, int32 file, size_t *offset)
{
+#if DUMB
+ char *_buf = (char*)buf;
+ for (int i = 0; i < sizeof(ChunkHeader); i++) {
+ CFileMgr::Read(file, &_buf[i], 1);
+ (*offset)++;
+ }
+#else
// original code loops 8 times to read 1 byte with CFileMgr::Read, that's retarded
CFileMgr::Read(file, (char*)buf, sizeof(ChunkHeader));
*offset += sizeof(ChunkHeader);
+#endif
}
-//--MIAMI: DONE
void
CText::LoadMissionText(char *MissionTableName)
{
@@ -307,7 +308,6 @@ CText::LoadMissionText(char *MissionTableName)
}
-//--MIAMI: DONE
void
CKeyArray::Load(size_t length, int file, size_t* offset)
{
@@ -319,14 +319,16 @@ CKeyArray::Load(size_t length, int file, size_t* offset)
rawbytes = (char*)entries;
#if DUMB
- for (uint32 i = 0; i < length; i++)
+ for (uint32 i = 0; i < length; i++) {
CFileMgr::Read(file, &rawbytes[i], 1);
+ (*offset)++;
+ }
#else
CFileMgr::Read(file, rawbytes, length);
+ *offset += length;
#endif
}
-//--MIAMI: DONE
void
CKeyArray::Unload(void)
{
@@ -335,7 +337,6 @@ CKeyArray::Unload(void)
numEntries = 0;
}
-//--MIAMI: DONE
void
CKeyArray::Update(wchar *chars)
{
@@ -346,7 +347,6 @@ CKeyArray::Update(wchar *chars)
#endif
}
-//--MIAMI: DONE
CKeyEntry*
CKeyArray::BinarySearch(const char *key, CKeyEntry *entries, int16 low, int16 high)
{
@@ -367,7 +367,6 @@ CKeyArray::BinarySearch(const char *key, CKeyEntry *entries, int16 low, int16 hi
return nil;
}
-//--MIAMI: DONE
wchar*
#ifdef FIX_BUGS
CKeyArray::Search(const char *key, wchar *data, uint8 *result)
@@ -403,7 +402,6 @@ CKeyArray::Search(const char *key, uint8 *result)
return WideErrorString;
}
-//--MIAMI: DONE
void
CData::Load(size_t length, int file, size_t * offset)
{
@@ -415,14 +413,16 @@ CData::Load(size_t length, int file, size_t * offset)
rawbytes = (char*)chars;
#if DUMB
- for(uint32 i = 0; i < length; i++)
+ for(uint32 i = 0; i < length; i++){
CFileMgr::Read(file, &rawbytes[i], 1);
+ (*offset)++;
+ }
#else
CFileMgr::Read(file, rawbytes, length);
+ *offset += length;
#endif
}
-//--MIAMI: DONE
void
CData::Unload(void)
{
@@ -431,22 +431,31 @@ CData::Unload(void)
numChars = 0;
}
-//--MIAMI: DONE
void
CMissionTextOffsets::Load(size_t table_size, int file, size_t *offset, int)
{
+#if DUMB
+ size_t num_of_entries = table_size / sizeof(CMissionTextOffsets::Entry);
+ for (size_t mi = 0; mi < num_of_entries; mi++) {
+ for (uint32 i = 0; i < sizeof(data[mi].szMissionName); i++) {
+ CFileMgr::Read(file, &data[i].szMissionName[i], 1);
+ (*offset)++;
+ }
+ char* _buf = (char*)&data[mi].offset;
+ for (uint32 i = 0; i < sizeof(data[mi].offset); i++) {
+ CFileMgr::Read(file, &_buf[i], 1);
+ (*offset)++;
+ }
+ }
+ size = (uint16)num_of_entries;
+#else
// not exact VC code but smaller and better :P
// You can make this size_t if you want to exceed 32-bit boundaries, everything else should be ready.
size = (uint16) (table_size / sizeof(CMissionTextOffsets::Entry));
CFileMgr::Read(file, (char*)data, sizeof(CMissionTextOffsets::Entry) * size);
*offset += sizeof(CMissionTextOffsets::Entry) * size;
-}
-
-void
-AsciiToUnicode(const char *src, wchar *dst)
-{
- while((*dst++ = (unsigned char)*src++) != '\0');
+#endif
}
char*
@@ -461,8 +470,29 @@ UnicodeToAscii(wchar *src)
if(*src < 128)
#endif
aStr[len] = *src;
- else
- aStr[len] = '#';
+ // convert to CP1252
+ else if(*src <= 131)
+ aStr[len] = *src + 64;
+ else if (*src <= 141)
+ aStr[len] = *src + 66;
+ else if (*src <= 145)
+ aStr[len] = *src + 68;
+ else if (*src <= 149)
+ aStr[len] = *src + 71;
+ else if (*src <= 154)
+ aStr[len] = *src + 73;
+ else if (*src <= 164)
+ aStr[len] = *src + 75;
+ else if (*src <= 168)
+ aStr[len] = *src + 77;
+ else if (*src <= 204)
+ aStr[len] = *src + 80;
+ else switch (*src) {
+ case 205: aStr[len] = 209; break;
+ case 206: aStr[len] = 241; break;
+ case 207: aStr[len] = 191; break;
+ default: aStr[len] = '#'; break;
+ }
aStr[len] = '\0';
return aStr;
}
@@ -472,7 +502,7 @@ UnicodeToAsciiForSaveLoad(wchar *src)
{
static char aStr[256];
int len;
- for(len = 0; *src != '\0' && len < 256-1; len++, src++)
+ for(len = 0; *src != '\0' && len < 256; len++, src++)
if(*src < 256)
aStr[len] = *src;
else
@@ -486,7 +516,7 @@ UnicodeToAsciiForMemoryCard(wchar *src)
{
static char aStr[256];
int len;
- for(len = 0; *src != '\0' && len < 256-1; len++, src++)
+ for(len = 0; *src != '\0' && len < 256; len++, src++)
if(*src < 256)
aStr[len] = *src;
else
@@ -496,40 +526,6 @@ UnicodeToAsciiForMemoryCard(wchar *src)
}
void
-UnicodeMakeUpperCase(wchar *dst, wchar *src) //idk what to do with it, seems to be incorrect implementation by R*
-{
- while (*src != '\0') {
- if (*src < 'a' || *src > 'z')
- *dst = *src;
- else
- *dst = *src - 32;
- dst++;
- src++;
- }
- *dst = '\0';
-}
-
-void
-UnicodeStrcpy(wchar *dst, const wchar *src)
-{
- while((*dst++ = *src++) != '\0');
-}
-
-void
-UnicodeStrcat(wchar *dst, wchar *append)
-{
- UnicodeStrcpy(&dst[UnicodeStrlen(dst)], append);
-}
-
-int
-UnicodeStrlen(const wchar *str)
-{
- int len;
- for(len = 0; *str != '\0'; len++, str++);
- return len;
-}
-
-void
TextCopy(wchar *dst, const wchar *src)
{
while((*dst++ = *src++) != '\0');
diff --git a/src/text/Text.h b/src/text/Text.h
index 0bad9a83..33dc313e 100644
--- a/src/text/Text.h
+++ b/src/text/Text.h
@@ -1,14 +1,9 @@
#pragma once
-void AsciiToUnicode(const char *src, wchar *dst);
char *UnicodeToAscii(wchar *src);
char *UnicodeToAsciiForSaveLoad(wchar *src);
char *UnicodeToAsciiForMemoryCard(wchar *src);
-void UnicodeStrcpy(wchar *dst, const wchar *src);
-void UnicodeStrcat(wchar *dst, wchar *append);
-int UnicodeStrlen(const wchar *str);
void TextCopy(wchar *dst, const wchar *src);
-void UnicodeMakeUpperCase(wchar *dst, wchar *src);
struct CKeyEntry
{