changeset 247:fb8a876f41e1

Merge
author Nomad
date Mon, 18 Feb 2013 03:59:31 +0200
parents 1bfe546561c4 (diff) f070b49d40dd (current diff)
children 37dcbe8f3cca 48f21f569328 92a551e4dbeb
files mm7_2.cpp mm7_5.cpp mm7_data.h
diffstat 8 files changed, 1440 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/Sprites.cpp	Mon Feb 18 00:39:18 2013 +0000
+++ b/Sprites.cpp	Mon Feb 18 03:59:31 2013 +0200
@@ -11,8 +11,6 @@
 
 
 
-//extern int (__cdecl *sprintfex)(char *a1, const char *a2, ...);
-
 struct SpriteFrameTable *pSpriteFrameTable;
 
 
--- a/mm7_2.cpp	Mon Feb 18 00:39:18 2013 +0000
+++ b/mm7_2.cpp	Mon Feb 18 03:59:31 2013 +0200
@@ -12888,18 +12888,6 @@
 
 
   srand(GetTickCount());
-  /*GetDiskFreeSpaceA(0, &SectorsPerCluster, &BytesPerSector, &hdc, &TotalNumberOfClusters);
-  v4 = hdc * BytesPerSector * SectorsPerCluster;
-  if ( (unsigned int)v4 < 0x1E00000 )
-  {
-    sprintfex(
-      pTmpBuf,
-      "Due to Window Virtual Memory requirements Might and Magic� VII\nrequires 30MB of free hard drive space to operate properly.\n\nAvailable on Current Drive = %luk",
-      (unsigned int)v4 / 1024i64);
-    v41 = 48;
-    v40 = "More Hard Drive Space Required";
-    v39 = pTmpBuf;
-*/
   
   WNDCLASSEXW wcxw;
   {
@@ -13402,11 +13390,9 @@
   unsigned int startms; // [sp+8h] [bp-24h]@55
   RECT Rect; // [sp+Ch] [bp-20h]@15
   int a2[4]; // [sp+1Ch] [bp-10h]@15
-#ifdef MM7_TEXT_DLL
-  auto mm7text_dll = LoadLibraryW(L"mm7text.dll");
-  sprintfex = (int (__cdecl *)(char *a1, const char *a2, ...))GetProcAddress(mm7text_dll, "_sprintfex");
-#endif
-
+
+  char test[1024];
+  sprintfex(test, "^Pi[%s]: ������^R[�;��;]", "������");
 
   if (pCmdLine && *pCmdLine)
   {
--- a/mm7_5.cpp	Mon Feb 18 00:39:18 2013 +0000
+++ b/mm7_5.cpp	Mon Feb 18 03:59:31 2013 +0200
@@ -3479,7 +3479,7 @@
           v158 = pParty->uNumGold + pParty->uNumGoldInBank;
           v146 = pGlobalTXT_LocalizationStrings[489];// "You have %d total gold, %d in the Bank""
           //goto _sprintex_draw_status_and_continue;
-          sprintf(pTmpBuf, v146, v158, v174);
+          sprintfex(pTmpBuf, v146, v158, v174);
           sub_41C0B8_set_status_string(pTmpBuf);
           continue;
         case UIMSG_ShowStatus_DateTime:
--- a/mm7_data.cpp	Mon Feb 18 00:39:18 2013 +0000
+++ b/mm7_data.cpp	Mon Feb 18 03:59:31 2013 +0200
@@ -321,8 +321,6 @@
 //-------------------------------------------------------------------------
 // Data declarations
 
-int (__cdecl *sprintfex)(char *a1, const char *a2, ...) = nullptr;
-
 int pWindowList_at_506F50_minus1_indexing[1];
 int dword_4C9890[10]; // weak
 int dword_4C9920[16]; // weak
--- a/mm7_data.h	Mon Feb 18 00:39:18 2013 +0000
+++ b/mm7_data.h	Mon Feb 18 03:59:31 2013 +0200
@@ -310,7 +310,6 @@
 
 //-------------------------------------------------------------------------
 // Data declarations
-//extern int (__cdecl *sprintfex)(char *a1, const char *a2, ...);
 
 extern int pWindowList_at_506F50_minus1_indexing[1];
 extern int dword_4C9890[10]; // weak
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mm7text_ru.cpp	Mon Feb 18 03:59:31 2013 +0200
@@ -0,0 +1,1417 @@
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "Log.h"
+
+
+struct GenderTableEntry
+{
+  const char *name;
+  int         gender;
+} gender_table_caps[] =
+{
+  {"�����", 0},
+  {"����", 0},
+  {"������", 0},
+  {"��������", 0},
+  {"������", 1},
+  {"���", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"���������", 0},
+  {"����", 0},
+  {"���������", 0},
+  {"�����", 1},
+  {"�������", 0},
+  {"������", 0},
+  {"�������", 0},
+  {"�������", 0},
+  {"������", 1},
+  {"�����", 1},
+  {"��������", 0},
+  {"������", 1},
+  {"����", 0},
+  {"�����", 0},
+  {"������", 1},
+  {"������", 0},
+  {"������", 1},
+  {"�����", 1},
+  {"����", 1},
+  {"�����", 0},
+  {"�������", 0},
+  {"����", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"�����", 1},
+  {"�������", 0},
+  {"���������", 0},
+  {"����", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"������", 0},
+  {"�������", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"��������", 0},
+  {"�������", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"���", 0},
+  {"������", 0},
+  {"������", 0},
+  {"���", 0},
+  {"�������", 1},
+  {"������", 0},
+  {"����", 0},
+  {"����", 0},
+  {"�������", 1},
+  {"�������", 1},
+  {"����", 1},
+  {"�������", 1},
+  {"���", 0},
+  {"���������", 0},
+  {"��������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"����������", 1},
+  {"�������", 0},
+  {"�����", 0},
+  {"������", 1},
+  {"�������", 0},
+  {"����", 0},
+  {"�������", 0},
+  {"���", 1},
+  {"�����", 1},
+  {"�����", 1},
+  {"�����", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"��", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"��������", 0},
+  {"�������", 0},
+  {"�����", 1},
+  {"��������", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"������", 1},
+  {"�������", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"�������", 0},
+  {"���������", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"������", 0},
+  {"��������", 0},
+  {"�������", 0},
+  {"����", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"���", 0},
+  {"�������", 1},
+  {"�������", 0},
+  {"�����", 1},
+  {"�������", 1},
+  {"�������", 1},
+  {"����", 0},
+  {"����", 0},
+  {"�������", 0},
+  {"�������", 0},
+  {"�����", 1},
+  {"����", 1},
+  {"����", 0},
+  {"������", 0},
+  {"��������", 1},
+  {"���������", 1},
+  {"�����", 0},
+  {"������", 0},
+  {"������", 1},
+  {"����", 1},
+  {"������", 0},
+  {"��������", 0},
+  {"��������", 1},
+  {"�����", 0},
+  {"����", 0},
+  {"�������", 0},
+  {"������", 1},
+  {"��������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"�������", 0},
+  {"��������", 0},
+  {"������", 1},
+  {"��������", 0},
+  {"��������", 1},
+  {"�����", 0},
+  {"��������", 0},
+  {"���������", 0},
+  {"������", 0},
+  {"�������", 2},
+  {"���������", 1},
+  {"���������", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"����������", 0},
+  {"�����", 1},
+  {"�����", 0},
+  {"��������", 0},
+  {"������", 1},
+  {"����", 0},
+  {"��������", 0},
+  {"���", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"���������", 1},
+  {"�����", 1},
+  {"����", 0},
+  {"����", 1},
+  {"������", 0},
+  {"�������", 0},
+  {"�������", 1},
+  {"�����", 0},
+  {"��������", 1},
+  {"����", 0},
+  {"�������", 0},
+  {"������", 0},
+  {"��������", 1},
+  {"����", 0},
+  {"����������", 1},
+  {"�������", 1},
+  {"��������", 0},
+  {"�������", 0},
+  {"��������������", 0},
+  {"�������", 2},
+  {"����", 0},
+  {"������", 1},
+  {"��������", 0},
+  {"������", 1},
+  {"�������", 0},
+  {"����", 0},
+  {"������", 0},
+  {"������", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"�������", 0},
+  {"�������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"���������", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"����", 0},
+  {"�������", 0},
+  {"����", 0},
+  {"�������", 1},
+  {"������", 0},
+  {"��������", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"������", 1},
+  {"���", 0},
+  {"������", 0},
+  {"������", 0},
+  {"����", 1},
+  {"�������", 0},
+  {"�����", 0},
+  {"����", 1},
+  {"������", 1},
+  {"�����", 0},
+  {"�����", 1},
+  {"������", 0},
+  {"�����", 1},
+  {"�����", 0},
+  {"�����", 0},
+  {"������", 1},
+  {"�����", 1},
+  {"������", 1},
+  {"�����", 0},
+  {"����", 0},
+  {"����", 0},
+  {"���", 0},
+  {"�������", 1},
+  {"�����", 1},
+  {"�����", 0},
+  {"�����������", 0},
+  {"������", 2},
+  {"�����", 0},
+  {"�������", 0},
+  {"������", 1},
+  {"�������", 0},
+  {"����", 0},
+  {"������", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"�����", 1},
+  {"�������", 0},
+  {"����", 0},
+  {"�����", 1},
+  {"�����", 0},
+  {"��������", 1},
+  {"������", 1},
+  {"��������", 0},
+  {"�����������", 1},
+  {"������", 0},
+  {"�������", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"������", 1},
+  {"��������", 1},
+  {"�������", 0},
+  {"����", 0},
+  {"����", 1},
+  {"�����", 1},
+  {"�������", 1},
+  {"������", 1},
+  {"�����", 0},
+  {"���", 2},
+  {"�����", 1},
+  {"������", 1},
+  {"�������", 1},
+  {"������", 0},
+  {"����", 0},
+  {"�����", 1},
+  {"�������", 1},
+  {"����", 0},
+  {"��������", 0},
+  {"������", 0},
+  {"����", 0},
+  {"������", 0},
+  {"������", 0},
+  {"����", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"�����", 1},
+  {"����", 1},
+  {"�����", 1},
+  {"�����", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"�������", 0},
+  {"���", 0},
+  {"�������", 1},
+  {"�����", 0},
+  {"���", 0},
+  {"�������", 0},
+  {"��������", 1},
+  {"���", 0},
+  {"������", 1},
+  {"�������", 0},
+  {"�����", 1},
+  {"�����", 1},
+  {"�����", 1},
+  {"������", 1},
+  {"����������", 1},
+  {"�������", 2},
+  {"�������", 0},
+  {"�����", 0},
+  {"���", 0},
+  {"������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"����", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"���", 0},
+  {"���", 1},
+  {"�������", 0},
+  {"���������", 1},
+  {"���-����", 0},
+  {"���-����", 0},
+  {"������", 1},
+  {"������", 1},
+  {"�������", 1},
+  {"�����", 1},
+  {"�����", 1},
+  {"�����", 1},
+  {"������", 1},
+  {"����", 1},
+  {"�����", 1},
+  {"�������", 0},
+  {"������", 0},
+  {"����", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"������������", 2},
+  {"�������", 0},
+  {"�������", 0},
+  {"�������", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"���", 0},
+  {"������", 2},
+  {"���", 0},
+  {"�������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"��", 0},
+  {"����", 0},
+  {"����", 0},
+  {"�������", 0},
+  {"������", 1},
+  {"�������", 0},
+  {"�����", 0},
+  {"���", 1},
+  {"�������", 0},
+  {"������", 0},
+  {"����������", 0},
+  {"���", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"������", 2},
+  {"���������", 0},
+  {"�������", 1},
+  {"���", 0},
+  {"����", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"�����", 1},
+  {"�����", 1},
+  {"����", 1},
+  {"����", 1},
+  {"�����", 0},
+  {"����", 0},
+  {"������", 0},
+  {"����", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"�������", 0},
+  {"��������", 1},
+  {"��������", 0},
+  {"�������", 1},
+  {"�������", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"�����", 1},
+  {"�����", 0},
+  {"������", 0},
+  {"������", 0},
+  {"������", 1},
+  {"������", 0},
+  {"��������", 1},
+  {"��������", 1},
+  {"����", 1},
+  {"������", 1},
+  {"����", 0},
+  {"�������", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"�������", 0},
+  {"������", 1},
+  {"����", 0},
+  {"���", 0},
+  {"�����", 1},
+  {"���", 0},
+  {"������", 0},
+  {"����", 1},
+  {"����", 0},
+  {"�����", 0},
+  {"���", 1},
+  {"��������", 1},
+  {"����", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"�������", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"��������", 0},
+  {"����", 0},
+  {"����", 1},
+  {"����", 0},
+  {"�����", 0},
+  {"�������", 1},
+  {"�����", 1},
+  {"������", 0},
+  {"������", 0},
+  {"����������", 0},
+  {"����������", 1},
+  {"����", 2},
+  {"����", 1},
+  {"������", 0},
+  {"����", 0},
+  {"����", 0},
+  {"������", 0},
+  {"��������", 1},
+  {"��������", 0},
+  {"��������", 1},
+  {"�����������", 0},
+  {"������", 0},
+  {"�����", 1},
+  {"�������", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"������", 1},
+  {"�������", 1},
+  {"��������", 1},
+  {"�������", 1},
+  {"���������", 0},
+  {"��������", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"������", 1},
+  {"���", 1},
+  {"����", 1},
+  {"���", 0},
+  {"�����", 0},
+  {"�������", 0},
+  {"�����", 1},
+  {"����", 1},
+  {"�����", 1},
+  {"�������", 1},
+  {"�������", 1},
+  {"�����", 1},
+  {"����", 0},
+  {"��������", 0},
+  {"�����������", 1},
+  {"������", 0},
+  {"�������", 0},
+  {"����", 0},
+  {"����", 1},
+  {"����", 0},
+  {"����", 1},
+  {"�����", 0},
+  {"����", 0},
+  {"�����", 1},
+  {"�����", 1},
+  {"���", 1},
+  {"�����", 1},
+  {"����", 0},
+  {"���", 0},
+  {"�������", 0},
+  {"�����", 1},
+  {"�����", 0},
+  {"�����", 1},
+  {"������", 0},
+  {"�������", 1},
+  {"��", 0},
+  {"��", 1},
+  {"����", 0},
+  {"�����", 1},
+  {"����", 1},
+  {"����", 1},
+  {"������", 0},
+  {"�����", 1},
+  {"�����", 0},
+  {"�����", 1},
+  {"������", 0},
+  {"�������", 0},
+  {"����", 1},
+  {"����", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"������", 2},
+  {"���", 0},
+  {"�����", 0},
+  {"����", 1},
+  {"����", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"���", 0},
+  {"�������", 0},
+  {"��������", 0},
+  {"���", 0},
+  {"������", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"�����", 1},
+  {"������", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"���", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"��������", 1},
+  {"����", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"��������", 0},
+  {"��������", 0},
+  {"�����", 0},
+  {"����", 1},
+  {"�����", 0},
+  {"���������", 1},
+  {"�������", 0},
+  {"������", 0},
+  {"���������", 1},
+  {"��������", 1},
+  {"����", 1},
+  {"�������", 1},
+  {"��������", 1},
+  {"�����", 0},
+  {"������", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"��������", 1},
+  {"�����", 1},
+  {"����", 0},
+  {"�����", 0},
+  {"�������", 0},
+  {"������", 0},
+  {"������", 1},
+  {"������", 0},
+  {"�����", 1},
+  {"�����", 1},
+  {"������", 1},
+  {"�����", 1},
+  {"������", 1},
+  {"������", 0},
+  {"������", 0},
+  {"��������", 0},
+  {"�����", 1},
+  {"������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"������������", 2},
+  {"����", 0},
+  {"����������", 0},
+  {"������", 0},
+  {"������", 1},
+  {"����", 1},
+  {"������", 1},
+  {"������", 0},
+  {"�������", 1},
+  {"�������", 1},
+  {"����������", 2},
+  {"������", 1},
+  {"�������", 0},
+  {"�������", 0},
+  {"�������", 1},
+  {"�������", 0},
+  {"���", 0},
+  {"�����", 1},
+  {"�����������", 2},
+  {"��������", 1},
+  {"�����", 1},
+  {"������", 1},
+  {"����", 0},
+  {"������", 1},
+  {"�������", 0},
+  {"�����", 1},
+  {"�����", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"�����", 0},
+  {"������", 1},
+  {"������", 0},
+  {"������", 0},
+  {"��������", 0},
+  {"���������", 1},
+  {"������", 0},
+  {"���", 0},
+  {"�����", 1},
+  {"����", 1},
+  {"����", 1},
+  {"�������", 1},
+  {"������", 1},
+  {"������", 0},
+  {"������", 1},
+  {"�������", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"�����", 0},
+  {"���������", 0},
+  {"���������", 1},
+  {"������", 1},
+  {"���", 0},
+  {"���������", 0},
+  {"�������", 0},
+  {"������������", 0},
+  {"���", 0},
+  {"����", 1},
+  {"�������", 0},
+  {"�������", 0},
+  {"������", 1},
+  {"���", 0},
+  {"����������", 0},
+  {"���", 0},
+  {"������", 1},
+  {"����", 0},
+  {"�����", 1},
+  {"������", 0},
+  {"������", 0},
+  {"����", 0},
+  {"����", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"������������", 1},
+  {"��������", 0},
+  {"����", 0},
+  {"������", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"�������", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"�������", 0},
+  {"�����", 0},
+  {"���", 1},
+  {"������", 1},
+  {"������", 0},
+  {"�����", 1},
+  {"������", 0},
+  {"��������", 1},
+  {"���", 1},
+  {"�����", 1},
+  {"�����", 1},
+  {"�����", 1},
+  {"�����", 0},
+  {"�����", 0},
+  {"���������", 0},
+  {"�����", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"���", 0},
+  {"��������", 0},
+  {"�����", 2},
+  {"���", 0},
+  {"�����������", 0},
+  {"�����������", 0},
+  {"���������", 0},
+  {"���������", 0},
+  {"���������", 0},
+  {"������������", 0},
+  {"�������", 0},
+  {"����������", 2},
+  {"�����������", 0},
+  {"�������", 0},
+  {"���������", 2},
+  {"����", 0},
+  {"���", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"���������", 0},
+  {"�����", 0},
+  {"�������", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"��������", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"�������", 0},
+  {"������", 1},
+  {"�������", 1},
+  {"����", 1},
+  {"���", 0},
+  {"������", 1},
+  {"����������", 0},
+  {"����", 0},
+  {"����", 0},
+  {"����", 1},
+  {"�����", 0},
+  {"�������", 1},
+  {"������", 0},
+  {"����", 0},
+  {"��������", 0},
+  {"����", 1},
+  {"������", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"�������", 1},
+  {"�����", 0},
+  {"�������", 0},
+  {"�����", 0},
+  {"����", 1},
+  {"������", 1},
+  {"�������", 1},
+  {"����", 1},
+  {"�������", 1},
+  {"���������", 1},
+  {"���", 0},
+  {"����", 0},
+  {"������", 0},
+  {"������", 1},
+  {"���", 0},
+  {"�������", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"����", 0},
+  {"����", 1},
+  {"������", 1},
+  {"������", 1},
+  {"����", 0},
+  {"������", 0},
+  {"���", 1},
+  {"����", 1},
+  {"������", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"�������", 1},
+  {"����", 1},
+  {"���", 0},
+  {"�����", 1},
+  {"����������", 0},
+  {"�������", 0},
+  {"������", 0},
+  {"������", 1},
+  {"������", 0},
+  {"����������", 0},
+  {"����", 1},
+  {"����", 0},
+  {"����", 0},
+  {"��������", 1},
+  {"����������", 0},
+  {"���������", 2},
+  {"���������", 1},
+  {"���������", 0},
+  {"���������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"������", 1},
+  {"������", 1},
+  {"������", 0},
+  {"�����", 0},
+  {"������", 0},
+  {"���", 0},
+  {"������", 0},
+  {"���������", 0},
+  {"��������", 1},
+  {"�����", 0},
+  {"������", 1},
+  {"�����", 1},
+  {"������", 1},
+  {"�����", 0},
+  {"������", 1},
+  {"������", 0},
+  {"������", 0},
+  {"����������", 1},
+  {"�����", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"���", 0},
+  {"������", 2},
+  {"�����", 0},
+  {"�������", 0},
+  {"�������", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"������", 0},
+  {"�������", 1},
+  {"����", 0},
+  {"������", 0},
+  {"����������", 1},
+  {"�����", 0},
+  {"��������", 0},
+  {"����������", 0},
+  {"�������", 0},
+  {"����", 0},
+  {"������", 0},
+  {"������", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"��������", 0},
+  {"����������", 0},
+  {"������", 1},
+  {"�����", 1},
+  {"���", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"����", 1},
+  {"�������", 1},
+  {"������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"����", 0},
+  {"������", 1},
+  {"�����", 1},
+  {"����", 1},
+  {"����", 1},
+  {"����", 0},
+  {"������", 0},
+  {"������", 1},
+  {"������", 1},
+  {"�������", 0},
+  {"�����", 1},
+  {"���", 0},
+  {"������", 0},
+  {"����", 1},
+  {"�������", 1},
+  {"������", 0},
+  {"����", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"���", 0},
+  {"����", 0},
+  {"����", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"�������", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"������", 1},
+  {"���������", 0},
+  {"�������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"��������", 0},
+  {"���", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"������", 0},
+  {"�������", 0},
+  {"�������", 0},
+  {"������", 1},
+  {"������", 0},
+  {"������", 0},
+  {"�����", 0},
+  {"�������", 0},
+  {"����", 0},
+  {"������", 0},
+  {"���������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"����", 1},
+  {"������", 0},
+  {"�������", 1},
+  {"���������", 0},
+  {"���", 0},
+  {"�����", 0},
+  {"������", 1},
+  {"��������", 1},
+  {"�������", 0},
+  {"�����", 0},
+  {"���������", 1},
+  {"������", 1},
+  {"�������", 0},
+  {"�����", 0},
+  {"��������", 0},
+  {"�����", 0},
+  {"��������", 0},
+  {"���������", 1},
+  {"����", 0},
+  {"��������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"�����", 1},
+  {"���", 0},
+  {"����", 0},
+  {"����", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"�����", 0},
+  {"��������", 1},
+  {"������", 0},
+  {"������", 0},
+  {"�������", 0},
+  {"��������", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"���", 0},
+  {"�����", 1},
+  {"�����", 0},
+  {"������", 1},
+  {"�������", 0},
+  {"���", 0},
+  {"������", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"���������", 2},
+  {"���", 0},
+  {"�����", 0},
+  {"���", 0},
+  {"�������", 0},
+  {"����", 0},
+  {"������", 0},
+  {"������", 0},
+  {"��������", 1},
+  {"���", 0},
+  {"���", 0},
+  {"���", 0},
+  {"������", 1},
+  {"�����", 0},
+  {"������", 0},
+  {"�������", 0},
+  {"�������", 0},
+  {"�������", 0},
+  {"������", 1},
+  {"������������", 0},
+  {"������", 0},
+  {"������", 0},
+  {"���", 0},
+  {"���", 0},
+  {"������", 2},
+  {"�����", 0},
+  {"����������", 1},
+  {"�����", 1},
+  {"�������", 1},
+  {"������", 0},
+  {"����", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"������", 0},
+  {"�����", 1},
+  {"������", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"�����", 0},
+  {"�����", 1},
+  {"���", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"�����", 1},
+  {"����", 1},
+  {"�����", 1},
+  {"����", 0},
+  {"������", 1},
+  {"��", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"������", 0},
+  {"����", 1},
+  {"������", 0},
+  {"����", 1},
+  {"���", 0},
+  {"�����", 1},
+  {"������", 1},
+  {"����������", 1},
+  {"��", 0},
+  {"�����", 0},
+  {"����������", 0},
+  {"����", 1},
+  {"��������", 1},
+  {"�����", 0},
+  {"������", 1},
+  {"������", 1},
+  {"�������", 0},
+  {"����", 1},
+  {"�����", 1},
+  {"����", 1},
+  {"�����", 0},
+  {"����", 0},
+  {"���", 1},
+  {"�����", 0},
+  {"����", 1},
+  {"��������", 0},
+  {"�����", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"���", 1},
+  {"���", 2},
+  {"����", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"����", 1},
+  {"���", 0},
+  {"������", 0},
+  {"����", 0},
+  {"�����", 0},
+  {"����", 0},
+  {"����", 0},
+  {"�����", 1},
+  {"��", 0},
+  {"�����", 0},
+  {"�����", 1},
+  {"����", 0},
+  {"��������", 0},
+  {"����", 0},
+  {"��", 0},
+  {"����", 0},
+  {"����", 0},
+  {"�����", 0}
+},
+  gender_table[] =
+{
+  {"��", 0},       {"�����", 1},    {"����", 0},      {"�����", 1},      {"�������", 0}, {"������", 0},   {"�����", 1},      {"������", 1},   {"���������", 0}, {"�������", 0},  {"���������", 1},
+  {"����", 0},     {"���", 0},      {"�����", 1},     {"����", 0},       {"�����", 0},   {"����", 1},     {"��������", 1},   {"�����", 0},    {"��������", 1},  {"����", 0},     {"�����", 0},
+  {"������", 0},   {"���", 0},      {"������", 0},    {"����������", 1}, {"���", 0},     {"��������", 0}, {"�����", 1},      {"��������", 0}, {"�����", 0},     {"��������", 1}, {"��������", 1},
+  {"��������", 0}, {"�����", 1},    {"���������", 0}, {"����", 1},       {"������", 0},  {"�����", 0},    {"���", 0},        {"������", 0},   {"��������", 0},  {"����", 1},     {"�������", 0},
+  {"��������", 1}, {"�����", 0},    {"���", 0},       {"����", 0},       {"������", 1},  {"������", 1},   {"����������", 0}, {"������", 0},   {"�������", 0},   {"�����", 0},    {"�����", 1},
+  {"������", 0},   {"��������", 0}, {"���", 0},       {"��������", 0},   {"���", 0},     {"�������", 0},  {"������", 0},     {"�����", 0},    {"�������", 0},   {"������", 0},   {"������", 0},
+  {"����", 0},     {"�������", 2},  {"�����", 1},     {"���������", 0}
+};
+
+
+
+#include <mbstring.h>
+
+int GetGender(char *ansi_name, int name_len)
+{
+  auto name = (unsigned char *)ansi_name;
+
+  GenderTableEntry *table = nullptr;
+  unsigned int      table_size = 0;
+  if (name[0] >= (unsigned char)'�' && name[0] <= (unsigned char)'�')
+  {
+    table = gender_table;
+    table_size = sizeof(gender_table) / sizeof(*gender_table);
+  }
+  else if (name[0] >= (unsigned char)'�' && name[0] <= (unsigned char)'�')
+  {
+    table = gender_table_caps;
+    table_size = sizeof(gender_table_caps) / sizeof(*gender_table_caps);
+  }
+  else return 0;
+
+  int left = 0,
+      right = table_size - 1,
+      match = 0;
+  while (left <= right)
+  {
+    match = left + (right - left) / 2;
+    switch (_mbsncmp(name, (unsigned char *)table[match].name, name_len))
+    {
+      case -1: right = match; break;
+      case  0: return table[match].gender;
+      case  1: left = match; break;
+    }
+  }
+  assert(false);
+  return 0;
+}
+
+
+bool IsSpecialName(const char *ansi_name)
+{
+  auto name = (unsigned char *)ansi_name;
+  return !_mbsncmp(name, (unsigned char *)"���� ���", 8)        || !_mbsncmp(name, (unsigned char *)"�� ���", 6) ||
+         !_mbsncmp(name, (unsigned char *)"����� � ������", 14) || !_mbsncmp(name, (unsigned char *)"����� ������", 12);
+}
+int GetSpecialGender(const char *ansi_name)
+{
+  auto name = (unsigned char *)ansi_name;
+  if (!_mbsncmp(name, (unsigned char *)"���� ���", 8))
+    return 1;
+  if (!_mbsncmp(name, (unsigned char *)"�� ���", 6))
+    return 1;
+  if (!_mbsncmp(name, (unsigned char *)"����� � ������", 14))
+    return 1;
+  if (!!_mbsncmp(name, (unsigned char *)"����� ������", 12))
+    return 0;
+  return 0;
+}
+const char *GetSpecialCase(const char *ansi_name, char c)
+{
+  auto name = (unsigned char *)ansi_name;
+
+  if (!_mbsncmp(name, (unsigned char *)"���� ���", 8))
+    return "���� ���";
+  if (!_mbsncmp(name, (unsigned char *)"�� ���", 6))
+    return "�� ���";
+
+  if (!_mbsncmp(name, (unsigned char *)"����� � ������", 14))
+    switch (c)
+    {
+      case 'I': case 'i': return "����� � ������";
+      case 'R': case 'r': return "���� � ������";
+      case 'D': case 'd': return "������ � ������";
+      case 'V': case 'v': return "���� � ������";
+      case 'T': case 't': return "������� � ������";
+      case 'P': case 'p': return "������ � ������";
+    }
+
+  if (!_mbsncmp(name, (unsigned char *)"����� ������", 12))
+    switch (c)
+    {
+      case 'I': case 'i': return "����� ������";
+      case 'R': case 'r': return "���� ������";
+      case 'D': case 'd': return "������ ������";
+      case 'V': case 'v': return "����� ������";
+      case 'T': case 't': return "������� ������";
+      case 'P': case 'p': return "������ ������";
+    }
+
+  return nullptr;
+}
+
+int __cdecl sprintfex_internal(char *str)
+{
+  auto p = strstr(str, "^");
+  if (!p)
+    return strlen(str);
+
+  char buf[8192];
+  assert(strlen(str) < sizeof(buf));
+
+  bool integer_token_defined = false;
+  int integer_token = 0;
+
+  bool gender_token_defined = false;
+  int gender_token = 0;
+  
+  auto src = buf,
+       dst = p;
+  strcpy(buf, str + (p - str));
+  while (true)
+  {
+    switch (src[1])
+    {
+      case 'I':
+      {
+        if (src[2] != '[')
+          goto _invalid_token;
+        src += 3;  // ^I[
+
+        if (sscanf(src, "%d", &integer_token))
+          integer_token_defined = true;
+
+        auto int_begin = src;
+        while (*src++ != ']');
+
+        int int_len = src - int_begin - 1;
+        strncpy(dst, int_begin, int_len);
+        dst += int_len;
+      }
+      break;
+
+      case 'L':
+      {
+        if (src[2] != '[')
+          goto _invalid_token;
+        assert(integer_token_defined);
+        src += 3; // ^L[
+
+        auto ending1 = src;
+        while (*src++ != ';');
+        auto ending2 = src;
+        while (*src++ != ';');
+        auto ending3 = src;
+        while (*src++ != ']');
+
+        char *actual_ending = nullptr;
+        int   actual_ending_len = 0;
+
+        int modulo = abs(integer_token) % 10;
+        if (modulo == 1)
+        {
+          actual_ending = ending1;
+          actual_ending_len = ending2 - ending1 - 1;
+        }
+        else if (modulo >= 2 && modulo <= 4)
+        {
+          actual_ending = ending2;
+          actual_ending_len = ending3 - ending2 - 1;
+        }
+        else
+        {
+          actual_ending = ending3;
+          actual_ending_len = src - ending3 - 1;
+        }
+
+        strncpy(dst, actual_ending, actual_ending_len);
+        dst += actual_ending_len;
+      }
+      break;
+
+      case 'R':
+      {
+        if (src[2] != '[')
+          goto _invalid_token;
+        assert(gender_token_defined);
+
+        src += 3; // ^R[
+
+        auto ending1 = src;
+        while (*src++ != ';');
+        auto ending2 = src;
+        while (*src++ != ';');
+        auto ending3 = src;
+        while (*src++ != ']');
+
+        char *actual_ending = nullptr;
+        int   actual_ending_len = 0;
+
+        if (gender_token == 0)
+        {
+          actual_ending = ending1;
+          actual_ending_len = ending2 - ending1 - 1;
+        }
+        else if (gender_token == 1)
+        {
+          actual_ending = ending2;
+          actual_ending_len = ending3 - ending2 - 1;
+        }
+        else if (gender_token == 2)
+        {
+          actual_ending = ending3;
+          actual_ending_len = src - ending3 - 1;
+        }
+        else assert(false);
+
+        strncpy(dst, actual_ending, actual_ending_len);
+        dst += actual_ending_len;
+      }
+      break;
+
+      case 'P':
+      {
+        if (src[3] != '[')
+          goto _invalid_token;
+        switch (src[2])
+        {
+          case 'I': case 'i':
+          case 'R': case 'r':
+          case 'D': case 'd':
+          case 'V': case 'v':
+          case 'T': case 't':
+          case 'P': case 'p': break;
+          default:
+            goto _invalid_token;
+        }
+
+        if (IsSpecialName(src + 4))
+        {
+          __debugbreak(); // check this is ok
+          auto name = GetSpecialCase(src + 4, src[2]);
+          int name_len = strlen(name);
+
+          gender_token = GetSpecialGender(src + 4);
+          gender_token_defined = true;
+
+          strncpy(dst, name, name_len);
+          dst += name_len;
+          while (*src++ != ']');
+          break;
+        }
+        
+        auto name_begin = src + 4;
+        int name_len = 0;
+        for (int i = 0; name_begin[i] != ']'; ++i)
+          name_len++;
+        gender_token = GetGender(name_begin, name_len);
+        gender_token_defined = true;
+
+        switch (src[2])
+        {
+          case 'I': case 'i':
+          {
+            strncpy(dst, name_begin, name_len);
+            dst += name_len;
+          }
+          break;
+
+          case 'R': case 'r':
+          case 'D': case 'd':
+          case 'V': case 'v':
+          case 'T': case 't':
+          case 'P': case 'p':
+          {
+            auto token_begin = src;
+            int token_len = 0;
+            for (int i = 0; token_begin[i] != ']'; ++i)
+              token_len++;
+            strncpy(dst, token_begin, token_len);
+            dst += token_len;
+          }
+        }
+        while (*src++ != ']');
+      }
+      break;
+
+      default:
+      {
+_invalid_token:
+        auto token_begin = src;
+        while (*src++ != ']');
+
+        int token_len = src - token_begin;
+        char token[1024];
+        strncpy(token, token_begin, token_len);
+        token[token_len] = 0;
+
+        Log::Warning(L"Invalid format token: %S", token);
+        assert(false);
+      }
+      break;
+    }
+    
+    *dst = 0;
+
+    auto copy_begin = src;
+    src = strstr(src, "^");
+    if (!src)
+    {
+      strcpy(dst, copy_begin); // just copy the rest
+      break;
+    }
+
+    int copy_len = src - copy_begin;
+    strncpy(dst, copy_begin, copy_len);
+    dst += copy_len;
+  }
+
+  return dst - str;
+}
+
+
+
+
+
+
+//mm6text.non -> c structure array
+  /*FILE *f = fopen("_1.txt", "w+t");
+  FILE *in = fopen("mm6text.non", "rt");
+  fscanf(in, "%*[^\n]\n");
+
+  int idx = 0;
+  auto pairs = new NameGender[8000];
+
+  char line[1024];
+  while (fscanf(in, "%[^\n]\n", line) && !feof(in))
+  {
+    char name1[100], name2[100], name3[100];
+    int e = sscanf(line, "%s\t%s\t%s", pairs[idx].name, pairs[idx + 1].name, pairs[idx + 2].name);
+    pairs[idx].gender = 0;
+    pairs[idx+1].gender = 1;
+    pairs[idx+2].gender = 2;
+    idx += e;
+  }
+
+  for (int i = 0; i < idx; ++i)
+    for (int j = 0; j < i; ++j)
+    {
+      if (_mbsicmp(pairs[i].name, pairs[j].name) < 0)
+      {
+        char n[1024];
+        strcpy(n, (char *)pairs[j].name);
+        auto g = pairs[j].gender;
+
+        strcpy((char *)pairs[j].name, (char *)pairs[i].name);
+        pairs[j].gender = pairs[i].gender;
+
+        strcpy((char *)pairs[i].name, n);
+        pairs[i].gender = g;
+      }
+    }
+    
+  for (int i = 0; i < idx; ++i)
+  {
+    fprintf(f, "  {\"%s\", %u},\n", pairs[i].name, pairs[i].gender);
+  }
+  fclose(f);*/
\ No newline at end of file
--- a/texts.cpp	Mon Feb 18 00:39:18 2013 +0000
+++ b/texts.cpp	Mon Feb 18 03:59:31 2013 +0200
@@ -15,6 +15,20 @@
 char *pGlobalTXT_LocalizationStrings[MAX_LOC_STRINGS];
 
 
+
+int __cdecl sprintfex(char *buf, const char *format, ...)
+{
+  va_list args_ptr;
+  va_start(args_ptr, format);
+  {
+    vsprintf(buf, format, args_ptr);
+  }
+  va_end(args_ptr);
+
+  extern int __cdecl sprintfex_internal(char *buf);
+  return sprintfex_internal(buf);
+}
+
 //----- (00452B95) --------------------------------------------------------
 void __cdecl SetSomeItemsNames()
 	{
--- a/texts.h	Mon Feb 18 00:39:18 2013 +0000
+++ b/texts.h	Mon Feb 18 03:59:31 2013 +0200
@@ -1,5 +1,9 @@
+#pragma once
 
-#pragma once
+
+
+int __cdecl sprintfex(char *buf, const char *format, ...);
+
 
 void __cdecl SetSomeItemsNames();
 char *RemoveQuotes(char *Str);