changeset 246:1bfe546561c4

sprintfex
author Nomad
date Mon, 18 Feb 2013 03:58:08 +0200
parents 99ef31ffa74e
children fb8a876f41e1
files Sprites.cpp mm7_2.cpp mm7_5.cpp mm7_data.cpp mm7_data.h mm7text_ru.cpp texts.cpp texts.h
diffstat 8 files changed, 1440 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/Sprites.cpp	Sun Feb 17 18:04:22 2013 +0100
+++ b/Sprites.cpp	Mon Feb 18 03:58:08 2013 +0200
@@ -11,8 +11,6 @@
 
 
 
-//extern int (__cdecl *sprintfex)(char *a1, const char *a2, ...);
-
 struct SpriteFrameTable *pSpriteFrameTable;
 
 
--- a/mm7_2.cpp	Sun Feb 17 18:04:22 2013 +0100
+++ b/mm7_2.cpp	Mon Feb 18 03:58:08 2013 +0200
@@ -12971,18 +12971,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;
   {
@@ -13485,11 +13473,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	Sun Feb 17 18:04:22 2013 +0100
+++ b/mm7_5.cpp	Mon Feb 18 03:58:08 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	Sun Feb 17 18:04:22 2013 +0100
+++ b/mm7_data.cpp	Mon Feb 18 03:58:08 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	Sun Feb 17 18:04:22 2013 +0100
+++ b/mm7_data.h	Mon Feb 18 03:58:08 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:58:08 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	Sun Feb 17 18:04:22 2013 +0100
+++ b/texts.cpp	Mon Feb 18 03:58:08 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	Sun Feb 17 18:04:22 2013 +0100
+++ b/texts.h	Mon Feb 18 03:58:08 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);