changeset 631:3d03a3a674bc

Merge
author Nomad
date Mon, 11 Mar 2013 03:38:59 +0200
parents 1b813023fcbd (current diff) 59713bb36033 (diff)
children f6aeea3eb893 71ecba604995
files MM7.vcxproj.filters mm7_2.cpp mm7_4.cpp
diffstat 16 files changed, 5267 insertions(+), 5697 deletions(-) [+]
line wrap: on
line diff
--- a/Events.cpp	Mon Mar 11 03:37:48 2013 +0200
+++ b/Events.cpp	Mon Mar 11 03:38:59 2013 +0200
@@ -24,6 +24,7 @@
 #include "stru159.h"
 #include "Events.h"
 #include "Events2D.h"
+#include "UIHouses.h"
 #include "Weather.h"
 #include "Party.h"
 #include "MM7.h"
--- a/GUIWindow.cpp	Mon Mar 11 03:37:48 2013 +0200
+++ b/GUIWindow.cpp	Mon Mar 11 03:38:59 2013 +0200
@@ -19,6 +19,7 @@
 #include "FactionTable.h"
 #include "StorylineTextTable.h"
 #include "Events2D.h"
+#include "UIHouses.h"
 #include "texts.h"
 #include "Autonotes.h"
 
--- a/Game.cpp	Mon Mar 11 03:37:48 2013 +0200
+++ b/Game.cpp	Mon Mar 11 03:38:59 2013 +0200
@@ -497,7 +497,6 @@
 }
 
 
-
 //----- (0044F192) --------------------------------------------------------
 void Game::PrepareBloodsplats()
 {
--- a/MM7.h	Mon Mar 11 03:37:48 2013 +0200
+++ b/MM7.h	Mon Mar 11 03:38:59 2013 +0200
@@ -143,48 +143,6 @@
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/*  349 */
-enum HOUSE_ID
-{
-  HOUSE_SMITH_EMERALD_ISLE = 1,
-  HOUSE_BODY_GUILD_NOVICE_EMERALD_ISLE = 163,
-  HOUSE_BODY_GUILD_ERATHIA = 165,
-  HOUSE_DARK_GUILD_PIT = 170,
-  HOUSE_LORD_AND_JUDGE = 186,
-  HOUSE_JAIL = 187,
-  HOUSE_600 = 600,//???
-  HOUSE_601 = 601//???
-};
-
-
-
-
-
-
-
-
-
-
-
 /*  362 */
 #pragma pack(push, 1)
 struct TravelInfo
--- a/MM7.vcxproj.filters	Mon Mar 11 03:37:48 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,326 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <ClInclude Include="MM7.h" />
-    <ClInclude Include="lib\legacy_dx\d3d.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\d3dcaps.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\d3drm.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\d3drmdef.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\d3drmobj.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\d3drmwin.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\d3dtypes.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\ddraw.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dinput.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dinputd.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dmdls.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dmerror.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dmksctrl.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dmplugin.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dmusbuff.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dmusicc.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dmusicf.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dmusici.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dmusics.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dsconf.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dsound.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\dvoice.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\multimon.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\rmxfguid.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\rmxftmpl.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\legacy_dx\strsafe.h">
-      <Filter>lib\legacy_dx</Filter>
-    </ClInclude>
-    <ClInclude Include="AudioPlayer.h" />
-    <ClInclude Include="VideoPlayer.h" />
-    <ClInclude Include="Texture.h" />
-    <ClInclude Include="LOD.h" />
-    <ClInclude Include="Mouse.h" />
-    <ClInclude Include="LightmapBuilder.h" />
-    <ClInclude Include="Vis.h" />
-    <ClInclude Include="Render.h" />
-    <ClInclude Include="Game.h" />
-    <ClInclude Include="VectorTypes.h" />
-    <ClInclude Include="ParticleEngine.h" />
-    <ClInclude Include="IndoorCameraD3D.h" />
-    <ClInclude Include="Keyboard.h" />
-    <ClInclude Include="Party.h" />
-    <ClInclude Include="Player.h" />
-    <ClInclude Include="CShow.h" />
-    <ClInclude Include="stru6.h" />
-    <ClInclude Include="stru9.h" />
-    <ClInclude Include="stru10.h" />
-    <ClInclude Include="stru11.h" />
-    <ClInclude Include="stru12.h" />
-    <ClInclude Include="GammaControl.h" />
-    <ClInclude Include="Indoor.h" />
-    <ClInclude Include="Outdoor.h" />
-    <ClInclude Include="OutdoorCamera.h" />
-    <ClInclude Include="BSPModel.h" />
-    <ClInclude Include="Actor.h" />
-    <ClInclude Include="Items.h" />
-    <ClInclude Include="Monsters.h" />
-    <ClInclude Include="NPC.h" />
-    <ClInclude Include="PaletteManager.h" />
-    <ClInclude Include="GUIButton.h" />
-    <ClInclude Include="GUIFont.h" />
-    <ClInclude Include="GUIWindow.h" />
-    <ClInclude Include="Spells.h" />
-    <ClInclude Include="DecalBuilder.h" />
-    <ClInclude Include="Lights.h" />
-    <ClInclude Include="Arcomage.h" />
-    <ClInclude Include="GUIProgressBar.h" />
-    <ClInclude Include="Events.h" />
-    <ClInclude Include="Sprites.h" />
-    <ClInclude Include="Overlays.h" />
-    <ClInclude Include="Time.h" />
-    <ClInclude Include="Chest.h" />
-    <ClInclude Include="mm7_data.h" />
-    <ClInclude Include="Allocator.h" />
-    <ClInclude Include="IndoorCamera.h" />
-    <ClInclude Include="Viewport.h" />
-    <ClInclude Include="MapInfo.h" />
-    <ClInclude Include="PlayerFrameTable.h" />
-    <ClInclude Include="OSInfo.h" />
-    <ClInclude Include="Math.h" />
-    <ClInclude Include="Weather.h" />
-    <ClInclude Include="IconFrameTable.h" />
-    <ClInclude Include="ObjectList.h" />
-    <ClInclude Include="DecorationList.h" />
-    <ClInclude Include="Outdoor_stuff.h" />
-    <ClInclude Include="Random.h" />
-    <ClInclude Include="Indoor_stuff.h" />
-    <ClInclude Include="stru157.h" />
-    <ClInclude Include="stru123.h" />
-    <ClInclude Include="AIL.h" />
-    <ClInclude Include="Bink_Smacker.h" />
-    <ClInclude Include="TurnEngine.h" />
-    <ClInclude Include="stru220.h" />
-    <ClInclude Include="stru279.h" />
-    <ClInclude Include="stru314.h" />
-    <ClInclude Include="SaveLoad.h" />
-    <ClInclude Include="stru287.h" />
-    <ClInclude Include="Awards.h" />
-    <ClInclude Include="Autonotes.h" />
-    <ClInclude Include="stru160.h" />
-    <ClInclude Include="FactionTable.h" />
-    <ClInclude Include="StorylineTextTable.h" />
-    <ClInclude Include="stru277.h" />
-    <ClInclude Include="stru298.h" />
-    <ClInclude Include="OSAPI.h" />
-    <ClInclude Include="Events2D.h" />
-    <ClInclude Include="stru176.h" />
-    <ClInclude Include="stru159.h" />
-    <ClInclude Include="stru351.h" />
-    <ClInclude Include="stru272.h" />
-    <ClInclude Include="lib\zlib\deflate.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\zlib\infblock.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\zlib\infcodes.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\zlib\inffast.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\zlib\inffixed.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\zlib\inftrees.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\zlib\infutil.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\zlib\trees.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\zlib\zconf.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\zlib\zlib.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="lib\zlib\zutil.h">
-      <Filter>lib\zlib</Filter>
-    </ClInclude>
-    <ClInclude Include="Log.h" />
-    <ClInclude Include="FrameTableInc.h" />
-    <ClInclude Include="resource.h" />
-    <ClInclude Include="stru346.h" />
-    <ClInclude Include="texts.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <Filter Include="lib">
-      <UniqueIdentifier>{674d5845-1afa-4bb4-b0f9-e59bdcf6bf46}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="lib\legacy_dx">
-      <UniqueIdentifier>{7f786ac2-aa3f-48a5-81ef-d5bcf2ee57bf}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="lib\zlib">
-      <UniqueIdentifier>{2c8eede3-bdcb-4411-b5e3-86c1c48e8351}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="lib\legacy_dx\d3dvec.inl">
-      <Filter>lib\legacy_dx</Filter>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="mm7_2.cpp" />
-    <ClCompile Include="Game.cpp" />
-    <ClCompile Include="GammaControl.cpp" />
-    <ClCompile Include="Monsters.cpp" />
-    <ClCompile Include="Time.cpp" />
-    <ClCompile Include="Actor.cpp" />
-    <ClCompile Include="Items.cpp" />
-    <ClCompile Include="LOD.cpp" />
-    <ClCompile Include="Render.cpp" />
-    <ClCompile Include="Spells.cpp" />
-    <ClCompile Include="Overlays.cpp" />
-    <ClCompile Include="Chest.cpp" />
-    <ClCompile Include="GUIWindow.cpp" />
-    <ClCompile Include="Keyboard.cpp" />
-    <ClCompile Include="LightmapBuilder.cpp" />
-    <ClCompile Include="Arcomage.cpp" />
-    <ClCompile Include="Mouse.cpp" />
-    <ClCompile Include="Texture.cpp" />
-    <ClCompile Include="DecalBuilder.cpp" />
-    <ClCompile Include="Allocator.cpp" />
-    <ClCompile Include="IndoorCameraD3D.cpp" />
-    <ClCompile Include="Sprites.cpp" />
-    <ClCompile Include="Vis.cpp" />
-    <ClCompile Include="IndoorCamera.cpp" />
-    <ClCompile Include="GUIFont.cpp" />
-    <ClCompile Include="Indoor.cpp" />
-    <ClCompile Include="Outdoor.cpp" />
-    <ClCompile Include="Player.cpp" />
-    <ClCompile Include="stru10.cpp" />
-    <ClCompile Include="LightsStack.cpp" />
-    <ClCompile Include="BSPModel.cpp" />
-    <ClCompile Include="PaletteManager.cpp" />
-    <ClCompile Include="ParticleEngine.cpp" />
-    <ClCompile Include="Party.cpp" />
-    <ClCompile Include="stru9.cpp" />
-    <ClCompile Include="stru6.cpp" />
-    <ClCompile Include="AudioPlayer.cpp" />
-    <ClCompile Include="GUIButton.cpp" />
-    <ClCompile Include="VideoPlayer.cpp" />
-    <ClCompile Include="GUIProgressBar.cpp" />
-    <ClCompile Include="TileFrameTable.h" />
-    <ClCompile Include="Weather.cpp" />
-    <ClCompile Include="Random.cpp" />
-    <ClCompile Include="SaveLoad.cpp" />
-    <ClCompile Include="mm7_3.cpp" />
-    <ClCompile Include="mm7_data.cpp" />
-    <ClCompile Include="AIL.cpp" />
-    <ClCompile Include="Bink_Smacker.cpp" />
-    <ClCompile Include="Events.cpp" />
-    <ClCompile Include="lib\zlib\adler32.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\compress.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\crc32.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\deflate.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\infblock.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\infcodes.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\inffast.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\inflate.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\inftrees.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\infutil.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\trees.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\uncompr.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\zlib\zutil.c">
-      <Filter>lib\zlib</Filter>
-    </ClCompile>
-    <ClCompile Include="Log.cpp" />
-    <ClCompile Include="OSAPI.cpp" />
-    <ClCompile Include="mm7_4.cpp" />
-    <ClCompile Include="mm7_1.cpp" />
-    <ClCompile Include="mm7_5.cpp" />
-    <ClCompile Include="FrameTableInc.cpp" />
-    <ClCompile Include="mm7_6.cpp" />
-    <ClCompile Include="GameUIs.cpp" />
-    <ClCompile Include="StorylineTextTable.cpp" />
-    <ClCompile Include="texts.cpp" />
-    <ClCompile Include="mm7text_ru.cpp" />
-    <ClCompile Include="NPC.cpp" />
-    <ClCompile Include="SpriteObject.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="Might and Magic Trilogy.rc" />
-  </ItemGroup>
-</Project>
\ No newline at end of file
--- a/NPC.cpp	Mon Mar 11 03:37:48 2013 +0200
+++ b/NPC.cpp	Mon Mar 11 03:38:59 2013 +0200
@@ -12,6 +12,11 @@
 #include "NPC.h"
 
 
+int pDialogueNPCCount;
+struct Texture *pDialogueNPCPortraits[6];
+int uNumDialogueNPCPortraits; // weak
+struct NPCStats *pNPCStats = nullptr;
+
 void  InitializeAwards();
 void  InitializeScrolls();
 void  InitializeMerchants();
--- a/NPC.h	Mon Mar 11 03:37:48 2013 +0200
+++ b/NPC.h	Mon Mar 11 03:38:59 2013 +0200
@@ -282,5 +282,10 @@
 };
 #pragma pack(pop)
 
+extern int pDialogueNPCCount;
+extern struct Texture *pDialogueNPCPortraits[6];
+extern int uNumDialogueNPCPortraits; // weak
+extern struct NPCStats *pNPCStats;
+
 bool PartyHasDragon();
 bool CheckHiredNPCSpeciality(unsigned int uProfession);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UIHouses.cpp	Mon Mar 11 03:38:59 2013 +0200
@@ -0,0 +1,5193 @@
+#include "UIHouses.h"
+
+#include "Party.h"
+#include "Player.h"
+#include "texts.h"
+#include "Events.h"
+#include "Arcomage.h"
+#include "LOD.h"
+#include "Mouse.h"
+#include "GUIWindow.h"
+#include "GUIButton.h"
+#include "GUIFont.h"
+#include "Events2D.h"
+#include "Overlays.h"
+#include "Render.h"
+#include "Indoor.h"
+#include "Outdoor.h"
+#include "AudioPlayer.h"
+#include "VideoPlayer.h"
+#include "Monsters.h"
+#include "Viewport.h"
+#include "Keyboard.h"
+#include "NPC.h"
+
+#include "mm7_data.h"
+
+
+int uHouse_ExitPic; // weak
+
+int dword_591080; // weak
+
+const stru159 pAnimatedRooms[196] = //0x4E5F70
+    {
+        {"",                            0x4, 0x1F4, 0, 0, 0},
+        {"Human Armor01",               0x20, 0x2C0, 2, 58, 0},
+        {"Necromancer Armor01",         0x20, 0x2D7, 2, 70, 0 },
+        {"Dwarven Armor01",             0x20, 0x2EE, 2,  5, 0 },
+        {"Wizard Armor",                0x20, 0x3BD, 2, 19, 0 },
+        {"Warlock Armor",               0x20, 0x2D6, 2, 35, 0 },
+        {"Elf Armor",                   0x20, 0x2BC, 2, 79, 0 },
+        {"Human Alchemisht01",          0xE,  0x2BE, 4, 95, 0 },
+        {"Necromancer Alchemist01",     0xE,  0x2D6, 4, 69, 0 },
+        {"Dwarven Achemist01",          0xE,  0x387, 4,  4, 0 },
+        {"Wizard Alchemist",            0xE,  0x232, 4, 25, 0 },
+        {"Warlock Alchemist",           0xE,  0x2BE, 4, 42, 0 },
+        {"Elf Alchemist",               0xE,  0x38A, 4, 84, 0 },
+        {"Human Bank01",                0x6, 0x384, 22, 52, 0 },
+        {"Necromancer Bank01",          0x6, 0x2D8, 22, 71, 0 },
+        {"Dwarven Bank",                0x6, 0x2F3, 22,  6, 0 },
+        {"Wizard Bank",                 0x6, 0x3BA, 22, 20, 0 },
+        {"Warlock Bank",                0x6, 0x39F, 22, 36, 0 },
+        {"Elf Bank",                    0x6, 0x2BC, 22, 71, 0 },
+        {"Boat01",                      0xF,  0x4C, 28, 53, 3 },
+        {"Boat01d",                     0xF,  0x4C, 28, 53, 3 },
+        {"Human Magic Shop01",          0xA, 0x2C8,  3, 54, 0 },
+        {"Necromancer Magic Shop01",    0xE, 0x2DC,  3, 66, 0 },
+        {"Dwarven Magic Shop01",        0x2A, 0x2EF, 3, 91, 0 },
+        {"Wizard Magic Shop",           0x1E, 0x2DF, 3, 15, 0 },
+        {"Warlock Magic Shop",          0x7,  0x3B9, 3, 15, 0 },
+        {"Elf Magic Shop",              0x24, 0x2CC, 3, 82, 0 },
+        {"Human Stables01",             0x21, 0x31,  27, 48, 3 },
+        {"Necromancer Stables",         0x21, 0x2DD, 27, 67, 3 },
+        {"",                            0x21, 0x2F0, 27, 91, 3 },
+        {"Wizard Stables",              0x21, 0x3BA, 27, 16, 3 },
+        {"Warlock Stables",             0x21, 0x181, 27, 77, 3 },
+        {"Elf Stables",                 0x21, 0x195, 27, 77, 3 },
+        {"Human Tavern01",              0xD, 0x2C2,  21, 49, 0 },
+        {"Necromancer Tavern01",        0xD, 0x3B0,  21, 57, 0 },
+        {"Dwarven Tavern01",            0xD, 0x2FE,  21, 94, 0 },
+        {"Wizard Tavern",               0xD, 0x3BB,  21, 17, 0 },
+        {"Warlock Tavern",              0xD, 0x3A8,  21, 33, 0 },
+        {"Elf Tavern",                  0xD, 0x2CD,  21, 78, 0 },
+        {"Human Temple01",              0x24, 0x2DB, 23, 50, 3 },
+        {"Necromancer Temple",          0x24, 0x2DF, 23, 60, 3 },
+        {"Dwarven Temple01",            0x24, 0x2F1, 23, 86, 3 },
+        {"Wizard Temple",               0x24, 0x2E0, 23, 10, 3 },
+        {"Warlock Temple",              0x24, 0x3A4, 23, 27, 3 },
+        {"Elf Temple",                  0x24, 0x2CE, 23, 72, 3 },
+        {"Human Town Hall",             0x10, 0x39C, 17, 14, 0 },
+        {"Necromancer Town Hall01",     0x10, 0x3A4, 17, 61, 0 },
+        {"Dwarven Town Hall",           0x10, 0x2DB, 17, 88, 0 },
+        {"Wizard Town Hall",            0x10, 0x3BD, 17, 11, 0 },
+        {"Warlock Town Hall",           0x10, 0x2DB, 17, 28, 0 },
+        {"Elf Town Hall",               0x10, 0x27A, 17, 73, 0 },
+        {"Human Training Ground01",     0x18, 0x2C7, 30, 44, 0 },
+        {"Necromancer Training Ground", 0x18, 0x3AD, 30, 62, 0 },
+        {"Dwarven Training Ground",     0x18, 0x2F2, 30, 89, 0 },
+        {"Wizard Training Ground",      0x18, 0x3A3, 30, 12, 0 },
+        {"Warlock Training Ground",     0x18, 0x3A6, 30, 29, 0 },
+        {"Elf Training Ground",         0x18, 0x19F, 30, 74, 0 },
+        {"Human Weapon Smith01",        0x16, 0x2C1, 1, 45, 4 },
+        {"Necromancer Weapon Smith01",  0x16, 0x2D9, 1, 63, 4 },
+        {"Dwarven Weapon Smith01",      0x16, 0x2EE, 1, 82, 4 },
+        {"Wizard Weapon Smith",         0x16, 0x2D5, 1, 13, 4 },
+        {"Warlock Weapon Smith",        0x16, 0x2D7, 1, 23, 4 },
+        {"Elf Weapon Smith",            0x16, 0x2CA, 1, 75, 4 },
+        {"Air Guild",                   0x1D, 0xA4,   6, 1, 3 },
+        {"Body Guild",                  0x19, 0x3BF, 11, 2, 0 },
+        {"DarkGuild",                   0x19, 0x2D1, 13, 3, 0 },
+        {"EarthGuild",                  0x19, 0x2CB, 8, 83, 0 },
+        {"Fire Guild",                  0x1C, 0x2BF, 5, 56, 0 },
+        {"Light Guild",                 0x1C, 0x2D5, 12, 46, 0 },
+        {"Mind Guild",                  0x1C, 0xE5,  10, 40, 0 },
+        {"Spirit Guild",                0x1C, 0x2D2,  9, 41, 0 },
+        {"Water Guild",                 0x1B, 0x2D3,  7, 24, 0 },
+        {"Lord And Judge Out01",        1, 0,        29, 39, 0 },
+        {"Human Poor House 1",          8, 0,        29,  0, 0 },
+        {"Human Poor House 2",          8, 0,        29,  0, 0 },
+        {"Human Poor House 3",          8, 0,        29,  0, 0 },
+        {"Human Medium House 1",        8, 0,        29,  0, 0 },
+        {"Human Medium House 2",        8, 0,        29,  0, 0 },
+        {"Human Medium House 3",        8, 0,        29,  0, 0 },
+        {"Human Rich House 1",          8, 0,        29,  0, 0 },
+        {"Human Rich House 2",          8, 0,        29,  0, 0 },
+        {"Human Rich House 3",          8, 0,        29,  0, 0 },
+        {"Elven Poor House 1",          8, 0,        29,  0, 0 },
+        {"Elven Poor House 2",          8, 0,        29,  0, 0 },
+        {"Elven Poor House 3",          8, 0,        29,  0, 0 },
+        {"Elven Medium House 1",        8, 0,        29,  0, 0 },
+        {"Elven Medium House 2",        8, 0,        29,  0, 0 },
+        {"Elven Medium House 3",        8, 0,        29,  0, 0 },
+        {"Elven Rich House 1",          8, 0,        29,  0, 0 },
+        {"Elven Rich House 2",          8, 0,        29,  0, 0 },
+        {"Elven Rich House 3",          8, 0,        29,  0, 0 },
+        {"Dwarven Poor House 1",        8, 0,        29,  0, 0 },
+        {"Dwarven Poor House 2",        8, 0,        29,  0, 0 },
+        {"Dwarven Poor House 3",        8, 0,        29,  0, 0 },
+        {"Dwarven Medium House 1",      8, 0,        29,  0, 0 },
+        {"Dwarven Medium house 2",      8, 0,        29,  0, 0 },
+        {"Dwarven Medium House 3",      8, 0,        29,  0, 0 },
+        {"Dwarven Rich House 1",        8, 0,        29,  0, 0 },
+        {"Dwarven Rich House 2",        8, 0,        29,  0, 0 },
+        {"Dwarven Rich House 3",        8, 0,        29,  0, 0 },
+        {"Wizard Poor House 1",         8, 0,        29,  0, 0 },
+        {"Wizard Poor House 2",         8, 0,        29,  0, 0 },
+        {"Wizard Poor House 3",         8, 0,        29,  0, 0 },
+        {"Wizard Medium House 1",       8, 0,        29,  0, 0 },
+        {"Wizard Medium House 2",       8, 0,        29,  0, 0 },
+        {"Wizard Mdeium House 3",       8, 0,        29,  0, 0 },
+        {"Wizard Rich House 1",         8, 0,        29,  0, 0 },
+        {"Wizard Rich House 2",         8, 0,        29,  0, 0 },
+        {"Wizard Rich House 3",         8, 0,        29,  0, 0 },
+        {"Necromancer Poor House 1",    8, 0,        29,  0, 0 },
+        {"Necromancer Poor House 2",    8, 0,        29,  0, 0 },
+        {"Necromancer Poor House 3",    8, 0,        29,  0, 0 },
+        {"Necromancer Medium House 1",  8, 0,        29,  0, 0 },
+        {"Necromancer Medium House 2",  8, 0,        29,  0, 0 },
+        {"Necromancer Mdeium House 3",  8, 0,        29,  0, 0 },
+        {"Necromancer Rich House 1",    8, 0,        29,  0, 0 },
+        {"Necromancer Rich House 2",    8, 0,        29,  0, 0 },
+        {"Necromancer Rich House 3",    8, 0,        29,  0, 0 },
+        {"Warlock Poor House 1",        8, 0,        29,  0, 0 },
+        {"Warlock Poor House 2",        8, 0,        29,  0, 0 },
+        {"Warlock Poor House 3",        8, 0,        29,  0, 0 },
+        {"Warlock Medium House 1",      8, 0,        29,  0, 0 },
+        {"Warlock Medium House 2",      8, 0,        29,  0, 0 },
+        {"Warlock Mdeium House 3",      8, 0,        29,  0, 0 },
+        {"Warlock Rich House 1",        8, 0,        29,  0, 0 },
+        {"Warlock Rich House 2",        8, 0,        29,  0, 0 },
+        {"Warlock Rich House 3",        8, 0,        29,  0, 0 },
+        {"Out01 Temple of the Moon",    0x24, 0,     25,  0, 0 },
+        {"Out01 Dragon Cave",           0x24, 0,     25,  0, 0 },
+        {"Out02 Castle Harmondy",       0x24, 0,     25,  0, 0 },
+        {"Out02 White Cliff Cave",      0x24, 0,     25,  0, 0 },
+        {"Out03 Erathian Sewer",        0x24, 0,     25,  0, 0 },
+        {"Out03 Fort Riverstride",      0x24, 0,     25,  0, 0 },
+        {"Out03 Castle Gryphonheart",   0x24, 0,     25,  0, 0 },
+        {"Out04 Elf Castle",            0x24, 0,     25,  0, 0 },
+        {"Out04 Tularean Caves",        0x24, 0,     25,  0, 0 },
+        {"Out04 Clanker's Laboratory",  0x24, 0,     25,  0, 0 },
+        {"Out05 Hall of the Pit",       0x24, 0,     25,  0, 0 },
+        {"Out05 Watchtower 6",          0x24, 0,     25,  0, 0 },
+        {"Out06 School of Sorcery",     0x24, 0,     25,  0, 0 },
+        {"Out06 Red Dwarf Mines",       0x24, 0,     25,  0, 0 },
+        {"Out07 Castle Lambert",        0x24, 0,     25,  0, 0 },
+        {"Out07 Walls of Mist",         0x24, 0,     25,  0, 0 },
+        {"Out07 Temple of the Light",   0x24, 0,     25,  0, 0 },
+        {"Out08 Evil Entrance",         0x24, 0,     25,  0, 0 },
+        {"Out08 Breeding Zone",         0x24, 0,     25,  0, 0 },
+        {"Out08 Temple of the Dark",    0x24, 0,     25,  0, 0 },
+        {"Out09 Grand Temple of the Moon", 0x24, 0,     25,  0, 0 },
+        {"Out09 Grand Tempple of the Sun", 0x24, 0,     25,  0, 0 },
+        {"Out10 Thunderfist Mountain",  0x24, 0,     25,  0, 0 },
+        {"Out10 The Maze",              0x24, 0,     25,  0, 0 },
+        {"Out10 Connecting Tunnel Cave #1", 0x24, 0,     25,  0, 0 },
+        {"",                            0x24, 0,     25,  0, 0 },
+        {"",                            0x24, 0,     25,  0, 0 },
+        {"Out11 Stone City",            0x24, 0,     25,  0, 0 },
+        {"",                            0x24, 0,     25,  0, 0 },
+        {"Out12 Colony Zod",            0x24, 0,     25,  0, 0 },
+        {"Out12 Connecting Tunnel Cave #1", 0x24, 0,     25,  0, 0 },
+        {"",                            0x24, 0,     25,  0, 0 },
+        {"",                            0x24, 0,     25,  0, 0 },
+        {"Out13 Mercenary Guild",       0x24, 0,     25,  0, 0 },
+        {"Out13 Tidewater Caverns",     0x24, 0,     25,  0, 0 },
+        {"Out13 Wine Cellar",           0x24, 0,     25,  0, 0 },
+        {"Out14 Titan's Stronghold",    0x24, 0,     25,  0, 0 },
+        {"Out14 Temple Of Baa",         0x24, 0,     25,  0, 0 },
+        {"Out14 Hall under the Hill",   0x24, 0,     25,  0, 0 },
+        {"Out15 The Linclon",           0x24, 0,     25,  0, 0 },
+        {"Jail",                        0x24, 0, 31, 0, 0 },
+        {"Harmondale Throne Room",      0x24, 0, 29, 0, 0 },
+        {"Gryphonheart Throne Room",    0x24, 0, 20, 0, 0 },
+        {"Elf Castle Throne Room",      0x24, 0, 20, 0, 0 },
+        {"Wizard Castle Throne Room",   0x24, 0, 20, 0, 0 },
+        {"Necromancer Casstle Trone Room", 0x24, 0, 20, 0, 0 },
+        {"Master Thief",                0x24, 0, 29, 0, 0 },
+        {"Dwarven King",                0x24, 0, 20, 0, 0 },
+        {"Arms Master",                 0x24, 0, 29, 0, 0 },
+        {"Warlock",                     0x24, 0, 29, 0, 0 },
+        {"Lord Markam",                 0x24, 0, 20, 0, 0 },
+        {"Arbiter Neutral Town",        0x24, 0, 29, 0, 0 },
+        {"Arbiter Good Town",           0x24, 0, 29, 0, 0 },
+        {"Arbiter Evil Town",           0x24, 0, 29, 0, 0 },
+        {"Necromancer Throne Room Empty", 0x24, 0, 20, 0, 0 },
+        {"",                            0x24, 0, 29, 0, 0 },
+        {"",                            0x24, 0, 29, 0, 0 },
+        {"",                            0x24, 0, 29, 0, 0 },
+        {"",                            0x24, 0, 29, 0, 0 },
+        {"Boat01",                      0xF, 0, 29, 53, 3 },
+        {"",                            0x24, 0, 28, 0, 0 },
+        {"",                            0x24, 0, 28, 0, 0 },
+        {"",                            0x24, 0, 28, 0, 0 },
+        {"",                            0x24, 0, 29, 0, 0 },
+        {"Arbiter Room Neutral",        0x24, 0, 29, 0, 0 },
+        {"Out02 Castle Harmondy Abandoned", 0x24, 0, 25, 0, 0 },
+        {"Human Temple02",              0x24, 0x3AB, 23, 27, 0 },
+        {"Player Castle Good",          0x24, 0, 25, 0, 0 },
+        {"Player Castle Bad",           0x24, 0, 25, 0, 0}
+    };
+
+
+
+
+//----- (0044606A) --------------------------------------------------------
+void PrepareHouse(HOUSE_ID house)
+{
+  //unsigned int v1; // ebx@1
+  //signed int v2; // esi@1
+  //int uExitPic; // edi@1
+  __int16 uExitMapID; // ax@2
+  //int result; // eax@5
+  //unsigned int *v6; // ecx@8
+  int v7; // ebx@11
+  //int v8; // esi@16
+  //unsigned int v9; // eax@16
+  //unsigned int v10; // eax@19
+  //int v11; // ecx@19
+  //char pContainer[36]; // [sp+Ch] [bp-54h]@16
+  int v13; // [sp+30h] [bp-30h]@11
+  int Dst[6]; // [sp+34h] [bp-2Ch]@1
+  //unsigned int v15; // [sp+4Ch] [bp-14h]@1
+  int uAnimationID; // [sp+50h] [bp-10h]@1
+  //unsigned int *v17; // [sp+54h] [bp-Ch]@3
+  //unsigned int v18; // [sp+58h] [bp-8h]@1
+  //int v19; // [sp+5Ch] [bp-4h]@7
+
+  //v15 = uHouseID;
+  //v1 = 52 * uHouseID;
+  //uAnimationID = p2DEvents_minus1___02[26 * uHouseID];
+  uAnimationID = p2DEvents[house - 1].uAnimationID;
+  //v18 = 52 * uHouseID;
+  memset(Dst, 0, 0x18u);
+  //uExitPic = *(__int16 *)((char *)p2DEvents_minus1_::2C + v1);
+  //uExitPic = p2DEvents[uHouseID - 1].uExitPicID;
+  uNumDialogueNPCPortraits = 0;
+  uHouse_ExitPic = p2DEvents[house - 1].uExitPicID;
+  if ( uHouse_ExitPic )
+  {
+    //uExitMapID = *(__int16 *)((char *)p2DEvents_minus1_::30 + v1);
+    uExitMapID = p2DEvents[house - 1]._quest_related;
+    if ( uExitMapID > 0 )
+    {
+      //v17 = (unsigned int *)(uExitMapID - 1);
+	  if(_449B57_test_bit(pParty->_quest_bits,uExitMapID))
+     // if ( !((unsigned __int8)(0x80u >> (uExitMapID - 1) % 8) & pParty->_quest_bits[(uExitMapID - 1) >> 3]) )
+      {
+        //uExitPic = 0;
+        uHouse_ExitPic = 0;
+      }
+    }
+  }
+
+  dword_591080 = pAnimatedRooms[uAnimationID].field_8;
+  //result = dword_591080;
+
+  //v2 = 0;
+  uNumDialogueNPCPortraits = 0;
+  if ( dword_591080 )
+  {
+    //v2 = 1;
+    Dst[0] = dword_591080;
+    uNumDialogueNPCPortraits = 1;
+  }
+
+  //v19 = 1;
+  for (uint i = 0; i < pNPCStats->uNumNewNPCs; ++i)
+  {
+    auto npc = pNPCStats->pNewNPCData + i;
+    //v6 = &pNPCStats->pNewNPCData[1].uFlags;
+    //v17 = &pNPCStats->pNewNPCData[1].uFlags;
+    //do
+    //{
+    if (npc->Location2D == house )
+    {
+      if (~npc->uFlags & 0x80)
+        //if ( !(*(char *)v6 & 0x80) )
+      {
+        v7 = uNumDialogueNPCPortraits++ - dword_591080 ? 1 : 0;
+        HouseNPCData[v7] = npc;
+        //v6 = v17;
+        //*(&v13 + v2) = *(v17 - 1);
+        Dst[uNumDialogueNPCPortraits - 1] = npc->uPortraitID;
+          //v1 = v18;
+        if ((npc->uFlags & 3) != 2)
+          ++npc->uFlags;
+      }
+    }
+      //++v19;
+      //v6 += 19;
+      //v17 = v6;
+    //}
+    //while ( v19 < (signed int)pNPCStats->uNumNewNPCs );
+  }
+  //uNumDialogueNPCPortraits = v2;
+
+  //v19 = 0;
+  for (uint i = 0; i < uNumDialogueNPCPortraits; ++i)
+  //if ( v2 > 0 )
+  {
+    //do
+    //{
+      //v8 = v19;
+    char icon_name[128];
+    sprintfex(icon_name, "npc%03u", Dst[i]);
+    //v9 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);
+    //++v19;
+    pDialogueNPCPortraits[i] = pIcons_LOD->LoadTexturePtr(icon_name, TEXTURE_16BIT_PALETTE);
+    //result = v19;
+    //}
+    //while ( v19 < uNumDialogueNPCPortraits );
+    //uExitPic = uHouse_ExitPic;
+  }
+
+  if (uHouse_ExitPic)
+  {
+    //v10 = pIcons_LOD->LoadTexture(pHouse_ExitPictures[uHouse_ExitPic], TEXTURE_16BIT_PALETTE);
+    //v11 = uNumDialogueNPCPortraits++;
+    pDialogueNPCPortraits[uNumDialogueNPCPortraits++] = pIcons_LOD->LoadTexturePtr(pHouse_ExitPictures[uHouse_ExitPic], TEXTURE_16BIT_PALETTE);
+    //result = *(__int16 *)((char *)p2DEvents_minus1_::2E + v1);
+    //result = p2DEvents[house - 1].uExitMapID;
+    uHouse_ExitPic = p2DEvents[house - 1].uExitMapID;
+  }
+  //return result;
+}
+
+
+
+//----- (0044622E) --------------------------------------------------------
+bool  EnterHouse(enum HOUSE_ID uHouseID)
+	{
+	//enum HOUSE_ID v1; // edi@1
+	//int v2; // edi@5
+	signed int uOpenTime; // eax@5
+	signed int uCloseTime; // esi@5
+	unsigned int v5; // esi@5
+	int v6; // edx@5
+	signed int am_pm_flag_open; // ecx@10
+	signed int am_pm_flag_close; // eax@10
+	int v9; // esi@10
+	//unsigned int v10; // esi@16
+	int v11; // ecx@17
+	unsigned int v12; // kr00_4@25
+	//Player *v13; // esi@25
+	int v14; // eax@25
+	//Player *v15; // esi@27
+	//signed int v16; // eax@32
+	unsigned int v17; // eax@37
+	signed int v18; // edi@37
+	signed int v19; // edi@41
+	//unsigned int v20; // ecx@41
+	//const char *v22; // [sp-4h] [bp-40h]@33
+	char pContainer[40]; // [sp+Ch] [bp-30h]@32
+	unsigned int v24; // [sp+34h] [bp-8h]@5
+	//enum HOUSE_ID v25; // [sp+38h] [bp-4h]@1
+
+	//v1 = uHouseID;
+	//v25 = uHouseID;
+	GameUI_StatusBar_TimedString[0] = 0;
+	pStatusBarString[0] = 0;
+	ShowStatusBarString("", 2u);
+	if ( pMessageQueue_50CBD0->uNumMessages )
+		pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
+	viewparams->bRedrawGameUI = 1;
+	uDialogueType = 0;
+	pKeyActionMap->_459ED1(3);
+	pKeyActionMap->ResetKeys();
+	if (uHouseID == HOUSE_600 || uHouseID == HOUSE_601)
+		{
+		GameOverMenu(0);
+		return 0;
+		}
+	uOpenTime = p2DEvents[uHouseID - 1].uOpenTime;
+	uCloseTime = p2DEvents[uHouseID - 1].uCloseTime;
+	ptr_F8B1E8 = 0;
+	dword_F8B1E4 = 0;
+	dword_F8B1F4 = 0;
+	memset(byte_F8B1F0, 0, 4);
+	memset(byte_F8B148, 0, 16);
+	pRenderer->ClearZBuffer(0, 479);
+
+	if (((uCloseTime - 1 <= uOpenTime)&&((pParty->uCurrentHour <uOpenTime)&&(pParty->uCurrentHour >(uCloseTime - 1))))||
+		((uCloseTime - 1 >  uOpenTime)&&((pParty->uCurrentHour < uOpenTime)||(pParty->uCurrentHour > (uCloseTime - 1))))) 
+
+		{
+		am_pm_flag_open = 0;
+		am_pm_flag_close = 0;
+		if (uOpenTime > 12 )
+			{
+			uOpenTime -= 12;
+			am_pm_flag_open = 1;
+			}
+		if ( uCloseTime > 12 )
+			{
+			uCloseTime -= 12;
+			am_pm_flag_close = 1;
+			}
+		sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[414], uOpenTime, aAMPMNames[am_pm_flag_open], 
+			uCloseTime, aAMPMNames[am_pm_flag_close]); //"This place is open from %d%s to %d%s"
+		ShowStatusBarString(pTmpBuf, 2u);
+		if ( uActiveCharacter )
+			pPlayers[uActiveCharacter]->PlaySound(SPEECH_3, 0);
+		return 0;
+		}
+	else
+		{
+		//v10 = uHouseID;
+		if ( (signed int)uHouseID < 53 ) //entering shops and guilds
+			{
+			if ( !(pParty->field_3C._shop_ban_times[uHouseID])
+				||  (pParty->field_3C._shop_ban_times[uHouseID] <= pParty->uTimePlayed) )
+				{
+				pParty->field_3C._shop_ban_times[uHouseID] = 0;
+				}
+			else
+				{
+				ShowStatusBarString(pGlobalTXT_LocalizationStrings[191], 2u);// "You've been banned from this shop!"
+				return 0;
+				}
+			}
+		if ( !start_event_seq_number )
+			pAudioPlayer->StopChannels(-1, -1);
+
+		uCurrentHouse_Animation = p2DEvents[uHouseID - 1].uAnimationID;
+		in_current_building_type = pAnimatedRooms[uCurrentHouse_Animation].uBuildingType;
+		if ( in_current_building_type == BildingType_Throne_Room && pParty->uFine )   // going 2 jail
+			{
+			uCurrentHouse_Animation = (signed __int16)p2DEvents[186].uAnimationID;
+			uHouseID = HOUSE_JAIL;
+			pParty->uTimePlayed = pParty->uTimePlayed+ 0x7620000;
+			in_current_building_type = pAnimatedRooms[p2DEvents[HOUSE_LORD_AND_JUDGE].uAnimationID].uBuildingType;
+			++pParty->uNumPrisonTerms;
+			pParty->uFine = 0;
+			for (uint i = 0; i < 4; ++i)
+				{
+				pParty->pPlayers[i].uTimeToRecovery = 0;
+				pParty->pPlayers[i].uNumDivineInterventionCastsThisDay = 0;
+				pParty->pPlayers[i].SetVariable(VAR_Award, 87);
+				}
+			}
+		++pIcons_LOD->uTexturePacksCount;
+		if ( !pIcons_LOD->uNumPrevLoadedFiles )
+			pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles;
+		switch (pParty->alignment)
+			{
+		case PartyAlignment_Good:    sprintf(pContainer, "evt%02d-b", const_2()); break;
+		case PartyAlignment_Neutral: sprintf(pContainer, "evt%02d", const_2()); break;
+		case PartyAlignment_Evil:    sprintf(pContainer, "evt%02d-c", const_2()); break;
+		default: assert(false);
+			}
+
+		v17 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);
+		pDialogueNPCCount = 0;
+		pTexture_Dialogue_Background = &pIcons_LOD->pTextures[v17];
+		uTextureID_507B04 = uTextureID_right_panel;
+		PrepareHouse(uHouseID);
+		v18 = 1;
+		uTextureID_507B04 = uTextureID_right_panel;
+		if ( uNumDialogueNPCPortraits == 1 )
+			pDialogueNPCCount = 1;
+		pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u);  
+		dword_5C35D4 = 1;
+		if ( (signed int)uHouseID < 139 || (signed int)uHouseID > 172 )
+			{
+			if ( (signed int)uHouseID >= 54 && (signed int)uHouseID <= 73 && !sub_4B68EA(uHouseID - 54) )
+				{
+				return 1;
+				}
+			}
+		else
+			{ //guilds
+			v19 = guild_mambership_flags[uHouseID-139]; //guilds flags 
+			//v20 = uHouseID;
+			//if ( !((unsigned __int8)(0x80u >> v19 % 8) & pPlayers[uActiveCharacter]->_guilds_member_bits[v19 /8]) )
+			if(_449B57_test_bit((unsigned char*)pPlayers[uActiveCharacter]->_guilds_member_bits,v19))
+				{
+				HousePlaySomeSound(uHouseID, 3);
+				return 1;
+				}
+			}
+		HousePlaySomeSound(uHouseID, 1);
+		dword_5C35D4 = 1;
+		return 1;
+		}
+	}
+
+//----- (004B1E92) --------------------------------------------------------
+void __fastcall HousePlaySomeSound(unsigned int uHouseID, int a2)
+    {
+    //if ( BYTE1(pAnimatedRooms[p2DEvents_minus1___02[26 * uHouseID]].field_C) )
+    if ( pAnimatedRooms[p2DEvents[uHouseID - 1].uAnimationID].uRoomSoundId )
+        pAudioPlayer->PlaySound(
+        //(SoundID)(a2 + 100 * (BYTE1(pAnimatedRooms[p2DEvents_minus1___02[26 * uHouseID]].field_C) + 300)),
+        (SoundID)(a2 + 100 * (pAnimatedRooms[p2DEvents[uHouseID - 1].uAnimationID].uRoomSoundId) + 300),
+        806, 0, -1, 0, 0, 0, 0);
+    }
+
+    //----- (004B4F4F) --------------------------------------------------------
+char *__cdecl JailDialog()
+{
+  const char *v0; // esi@1
+  const char *v1; // ST10_4@1
+  unsigned __int16 v2; // ST0C_2@1
+  int v3; // eax@1
+  GUIWindow v5; // [sp+8h] [bp-54h]@1
+
+  memcpy(&v5, window_SpeakInHouse, sizeof(v5));
+  v0 = pGlobalTXT_LocalizationStrings[672];
+  v1 = pGlobalTXT_LocalizationStrings[672];
+  v5.uFrameX = 483;
+  v5.uFrameWidth = 148;
+  v5.uFrameZ = 334;
+  v2 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
+  v3 = pFontArrus->CalcTextHeight(v0, &v5, 0, 0);
+  return v5.DrawTitleText(pFontArrus, 0, (310 - v3) / 2 + 18, v2, v1, 3u);
+}
+
+
+
+//----- (004B68EA) --------------------------------------------------------
+bool __fastcall sub_4B68EA(int a1)
+{
+  signed int v1; // edi@1
+  int *v2; // esi@1
+  int v3; // ecx@2
+
+  v1 = 0;
+  v2 = &dword_4F0E10[a1];
+  while ( 1 )
+  {
+    v3 = 8 * *((char *)v2 + v1);
+    if ( *(&byte_4F09B1[pParty->uDaysPlayed % 7] + v3 * 4) )
+    {
+      if ( !dword_4F09CC[v3] || (unsigned __int16)_449B57_test_bit(pParty->_quest_bits, LOWORD(dword_4F09CC[v3])) )
+        break;
+    }
+    ++v1;
+    if ( v1 >= 4 )
+      return 0;
+  }
+  return 1;
+}
+
+
+
+//----- (004B7911) --------------------------------------------------------
+void __cdecl TownHallDialog()
+{
+  GUIWindow *v0; // eax@4
+  int v1; // eax@10
+  int v2; // esi@10
+  GUIFont *v3; // ST20_4@20
+  int v4; // eax@20
+  MonsterInfo *v5; // edi@21
+  unsigned int v6; // ST20_4@21
+  char *v7; // ST1C_4@21
+  unsigned int v8; // eax@21
+  int v9; // esi@21
+  char *v10; // eax@23
+  signed int v11; // ebx@24
+  signed int i; // esi@26
+  int v13; // eax@27
+  GUIWindow *v14; // ecx@28
+  __int64 v15; // qax@28
+  signed int v16; // ebx@28
+  int v17; // ebx@28
+  unsigned __int8 v18; // sf@28
+  char **v19; // edi@29
+  GUIButton *v20; // eax@30
+  GUIButton *v21; // esi@30
+  int v22; // eax@30
+  unsigned int v23; // ecx@30
+  unsigned __int16 v24; // ax@30
+  GUIWindow a1; // [sp+Ch] [bp-110h]@21
+  GUIWindow w; // [sp+60h] [bp-BCh]@21
+  GUIWindow _this; // [sp+B4h] [bp-68h]@1
+  int v28; // [sp+108h] [bp-14h]@1
+  int v29; // [sp+10Ch] [bp-10h]@28
+  int v30; // [sp+110h] [bp-Ch]@1
+  int v31; // [sp+114h] [bp-8h]@29
+  GUIFont *pOutString; // [sp+118h] [bp-4h]@21
+
+  memcpy(&_this, window_SpeakInHouse, sizeof(_this));
+  _this.uFrameX = 483;
+  _this.uFrameWidth = 148;
+  _this.uFrameZ = 334;
+  v28 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+  v30 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
+  sprintf(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[605], pParty->uFine);
+  _this.DrawTitleText(pFontArrus, 0, 0x104u, v30, pTmpBuf, 3u);
+  switch(dialog_menu_id)
+  {
+	case 1:
+		{
+		v11 = 1;
+		pOutString = 0;
+		pShopOptions[0] = pGlobalTXT_LocalizationStrings[604];
+		if ( pParty->uFine )
+		{
+			pShopOptions[1] = pGlobalTXT_LocalizationStrings[603];
+			v11 = 2;
+		}
+		for ( i = 0; i < v11; ++i )
+		{
+			v13 = pFontArrus->CalcTextHeight(pShopOptions[i], &_this, 0, 0);
+			pOutString = (GUIFont *)((char *)pOutString + v13);
+		}
+		v29 = (100 - (signed int)pOutString) / v11;
+		v14 = pDialogueWindow;
+		v15 = 80 - v11 * (100 - (signed int)pOutString) / v11 - (signed int)pOutString;
+		v16 = v15 - HIDWORD(v15);
+		LODWORD(v15) = pDialogueWindow->pStartingPosActiveItem;
+		HIDWORD(v15) = v15 + pDialogueWindow->pNumPresenceButton;
+		v17 = (v16 >> 1) - v29 / 2 + 158;
+		v18 = -pDialogueWindow->pNumPresenceButton < 0;
+		pOutString = (GUIFont *)pDialogueWindow->pStartingPosActiveItem;
+		if ( v18 ^ __OFSUB__((int)v15, HIDWORD(v15)) )
+		{
+			v31 = 2;
+			v19 = pShopOptions;
+			do
+			{
+				v20 = v14->GetControl((unsigned int)pOutString);
+				v21 = v20;
+				v20->uY = v29 + v17;
+				v22 = pFontArrus->CalcTextHeight(*v19, &_this, 0, 0);
+				v23 = v21->uY;
+				v21->uHeight = v22;
+				v17 = v23 + v22 - 1;
+				v21->uW = v17;
+				v24 = v30;
+				if ( pDialogueWindow->pCurrentPosActiveItem != v31 )
+					v24 = v28;
+				_this.DrawTitleText(pFontArrus, 0, v23, v24, *v19, 3u);
+				v14 = pDialogueWindow;
+				++v31;
+				++v19;
+				pOutString = (GUIFont *)((char *)pOutString + 1);
+			}
+			while ( (signed int)pOutString < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
+		}
+		break;
+		}
+	case 99:
+		{
+		v5 = &pMonsterStats->pInfos[word_F8B1A0];
+		v6 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+		v7 = v5->pName;
+		v8 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
+		sprintf(pTmpBuf, &byte_4F0F98, v8, v7, v6);
+		sprintf(pTmpBuf2, dword_F8B1A4, pTmpBuf, 100 * v5->uLevel);
+		ptr_F8B1E8 = pTmpBuf2;
+		memcpy(&a1, pDialogueWindow, sizeof(a1));
+		w.uFrameWidth = 458;
+		w.uFrameZ = 457;
+		pOutString = pFontArrus;
+		v9 = pFontArrus->CalcTextHeight(pTmpBuf2, &w, 13, 0) + 7;
+		if ( 352 - v9 < 8 )
+		{
+			pOutString = pFontCreate;
+			v9 = pFontCreate->CalcTextHeight(ptr_F8B1E8, &w, 13, 0) + 7;
+		}
+
+		auto pTex = (uTextureID_Leather != -1 ? &pIcons_LOD->pTextures[uTextureID_Leather] : 0);
+		pRenderer->_4A6A68(8u, 352 - v9, pTex, (pTex ? pTex->uTextureHeight : 26) - v9);
+		pRenderer->DrawTextureIndexed(8u, 347 - v9, pTexture_591428);
+		v10 = FitTextInAWindow(ptr_F8B1E8, pOutString, &w, 0xDu, 0);
+		a1.DrawText(pOutString, 13, 354 - v9, 0, v10, 0, 0, 0);
+		break;
+		}
+	case 100:
+		{
+		v0 = window_SpeakInHouse;
+		if ( window_SpeakInHouse->field_40 == 1 )
+		{
+			sprintf(pTmpBuf, "%s\n%s", pGlobalTXT_LocalizationStrings[606], pGlobalTXT_LocalizationStrings[112]);
+			_this.DrawTitleText(pFontArrus, 0, 0x92u, v30, pTmpBuf, 3u);
+			_this.DrawTitleText(pFontArrus, 0, 0xBAu, v28, (const char *)pKeyActionMap->pPressedKeysBuffer, 3u);
+			v3 = pFontArrus;
+			v4 = pFontArrus->GetLineWidth((const char *)pKeyActionMap->pPressedKeysBuffer);
+			_this.DrawFlashingInputCursor(v4 / 2 + 80, 185, v3);
+			return;
+		}
+		if ( window_SpeakInHouse->field_40 == 2 )
+		{
+			v1 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer);
+			v2 = v1;
+			if ( v1 <= 0 )
+			{
+			//LABEL_8:
+				pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+				/*if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
+				{
+				pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)113;
+				pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = 1;
+				*(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
+				++pMessageQueue_50CBD0->uNumMessages;
+				}*/
+				return;
+			}
+			if ( v1 > pParty->uNumGold )
+			{
+				HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
+				v2 = pParty->uNumGold;
+			}
+			if ( v2 > pParty->uFine )
+				v2 = pParty->uFine;
+			Party::TakeGold(v2);
+			pParty->uFine -= v2;
+			if ( pParty->uFine < 0 )
+				pParty->uFine = 0;
+			if ( uActiveCharacter )
+				pPlayers[uActiveCharacter]->PlaySound(SPEECH_81, 0);
+			v0 = window_SpeakInHouse;
+		}
+		if ( window_SpeakInHouse->field_40 == 3 )
+		{
+			v0->field_40 = 0;
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+		}
+		break;
+		}
+	default:
+		{
+		break;
+		}
+  }
+  return;
+}
+// F8B19C: using guessed type int dword_F8B19C;
+// F8B1A0: using guessed type __int16 word_F8B1A0;
+
+//----- (004B7D7E) --------------------------------------------------------
+void __cdecl BankDialog()
+{
+  GUIWindow *v0; // eax@4
+  int v1; // ecx@5
+  int v2; // eax@6
+  unsigned int v3; // esi@6
+  GUIFont *v4; // ST10_4@12
+  int v5; // eax@12
+  int v6; // eax@19
+  unsigned int v7; // esi@19
+  unsigned __int16 v8; // ax@27
+  unsigned __int16 v9; // ax@29
+  char *v10; // [sp-8h] [bp-70h]@11
+  char *v11; // [sp-4h] [bp-6Ch]@11
+  GUIWindow _this; // [sp+Ch] [bp-5Ch]@1
+  __int16 v13[2]; // [sp+60h] [bp-8h]@1
+  __int16 v14[2]; // [sp+64h] [bp-4h]@1
+
+  memcpy(&_this, window_SpeakInHouse, sizeof(_this));
+  _this.uFrameX = 483;
+  _this.uFrameWidth = 148;
+  _this.uFrameZ = 334;
+  *(int *)v13 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+  *(int *)v14 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
+  sprintf(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[25], pParty->uNumGoldInBank);
+  _this.DrawTitleText(pFontArrus, 0, 0xDCu, v14[0], pTmpBuf, 3u);
+  switch(dialog_menu_id)
+  {
+	case 1:
+		{
+		v8 = v14[0];
+		if ( pDialogueWindow->pCurrentPosActiveItem != 2 )
+			v8 = v13[0];
+		_this.DrawTitleText(pFontArrus, 0, 0x92u, v8, pGlobalTXT_LocalizationStrings[60], 3u);
+		v9 = v14[0];
+		if ( pDialogueWindow->pCurrentPosActiveItem != 3 )
+			v9 = v13[0];
+		_this.DrawTitleText(pFontArrus, 0, 0xB0u, v9, pGlobalTXT_LocalizationStrings[244], 3u);
+		break;
+		}
+	case 7:
+		{
+		v0 = window_SpeakInHouse;
+		if ( window_SpeakInHouse->field_40 != 1 )
+		{
+			v1 = window_SpeakInHouse->field_40 - 2;
+			if ( window_SpeakInHouse->field_40 == 2 )
+			{
+				v6 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer);
+				v7 = v6;
+				if ( !v6 )
+				{
+//LABEL_17:
+					pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+					/*if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
+					{
+						pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)113;
+						pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = 1;
+						*(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
+						++pMessageQueue_50CBD0->uNumMessages;
+					}*/
+					return;
+				}
+				if ( v6 > pParty->uNumGold )
+				{
+					HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
+					v7 = pParty->uNumGold;
+				}
+				if ( v7 )
+				{
+					Party::TakeGold(v7);
+					pParty->uNumGoldInBank += v7;
+					if ( uActiveCharacter )
+						pPlayers[uActiveCharacter]->PlaySound(SPEECH_81, 0);
+				}
+				v0 = window_SpeakInHouse;
+				v0->field_40 = 0;
+				pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+				return;
+			}
+			if ( v1 != 1 )
+				return;
+			v0->field_40 = 0;
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+			return;      
+		}
+		v11 = pGlobalTXT_LocalizationStrings[112];
+		v10 = pGlobalTXT_LocalizationStrings[60];
+		sprintf(pTmpBuf, "%s\n%s", v10, v11);
+		_this.DrawTitleText(pFontArrus, 0, 0x92u, v14[0], pTmpBuf, 3u);
+		_this.DrawTitleText(pFontArrus, 0, 0xBAu, v13[0], (const char *)pKeyActionMap->pPressedKeysBuffer, 3u);
+		v4 = pFontArrus;
+		v5 = pFontArrus->GetLineWidth((const char *)pKeyActionMap->pPressedKeysBuffer);
+		_this.DrawFlashingInputCursor(v5 / 2 + 80, 185, v4);
+		break;
+		}
+
+	case 8:
+		{
+		v0 = window_SpeakInHouse;
+		if ( window_SpeakInHouse->field_40 != 1 )
+		{
+			v1 = window_SpeakInHouse->field_40 - 2;
+			if ( window_SpeakInHouse->field_40 == 2 )
+			{
+				window_SpeakInHouse->field_40 = 0;
+				v2 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer);
+				v3 = v2;
+				if ( v2 )
+				{
+					if ( v2 > pParty->uNumGoldInBank )
+					{
+						HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
+						v3 = pParty->uNumGoldInBank;
+					}
+					if ( v3 )
+					{
+						Party::SetGold(pParty->uNumGold + v3);
+						pParty->uNumGoldInBank -= v3;
+					}
+				}
+				pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+				return;
+			}
+			if ( v1 != 1 )
+				return;
+			v0->field_40 = 0;
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+			return;  
+		}
+		v11 = pGlobalTXT_LocalizationStrings[112];
+		v10 = pGlobalTXT_LocalizationStrings[244];
+		sprintf(pTmpBuf, "%s\n%s", v10, v11);
+		_this.DrawTitleText(pFontArrus, 0, 0x92u, v14[0], pTmpBuf, 3u);
+		_this.DrawTitleText(pFontArrus, 0, 0xBAu, v13[0], (const char *)pKeyActionMap->pPressedKeysBuffer, 3u);
+		v4 = pFontArrus;
+		v5 = pFontArrus->GetLineWidth((const char *)pKeyActionMap->pPressedKeysBuffer);
+		_this.DrawFlashingInputCursor(v5 / 2 + 80, 185, v4);
+		return;
+		break;
+		}
+
+	default:
+		{
+		break;
+		}
+  }
+}
+// F8B19C: using guessed type int dword_F8B19C;
+
+//----- (004B8285) --------------------------------------------------------
+void __cdecl TavernDialog()
+{
+  GUIWindow *v0; // ebx@1
+  Player *v1; // edi@1
+  double v2; // st7@1
+  signed int v3; // ebx@1
+  int v4; // ecx@1
+  int v5; // esi@3
+  signed int v6; // edi@5
+  int v7; // ecx@5
+  GUIWindow *v8; // edi@16
+  signed int v9; // esi@16
+  unsigned int v10; // esi@18
+  int v11; // eax@18
+  unsigned int v12; // eax@19
+  int v13; // eax@21
+  int v14; // ecx@26
+  GUIButton *v15; // eax@28
+  GUIButton *v16; // esi@28
+  int v17; // eax@28
+  char *v18; // eax@30
+  int v19; // eax@30
+  unsigned int v20; // ecx@30
+  int v21; // edx@30
+  int v22; // eax@30
+  unsigned __int16 v23; // ax@30
+  int v24; // eax@34
+  int v25; // eax@34
+  char *v26; // esi@36
+  int v27; // edi@46
+  unsigned int v28; // eax@53
+  unsigned int v29; // eax@55
+  unsigned int v30; // eax@57
+  signed int v31; // eax@59
+  unsigned int v32; // eax@61
+  GUIWindow *v33; // edi@64
+  int v34; // eax@64
+  int v35; // ecx@64
+  int v36; // esi@64
+  char v37; // sf@64
+  GUIButton *v38; // eax@65
+  int v39; // edx@69
+  int v40; // ecx@69
+  int v41; // ecx@69
+  int v42; // ecx@70
+  unsigned int v43; // edx@70
+  int v44; // edx@71
+  int v45; // ecx@71
+  int v46; // ecx@72
+  int v47; // eax@74
+  signed int v48; // edi@77
+  signed int i; // esi@79
+  int v50; // eax@80
+  GUIWindow *v51; // ecx@81
+  _QWORD v52; // qax@81
+  signed int v53; // edi@81
+  int v54; // edi@81
+  GUIButton *v55; // esi@83
+  const char **v56; // eax@83
+  int v57; // eax@83
+  unsigned int v58; // ecx@83
+  Player *v59; // edx@83
+  unsigned __int16 v60; // ax@83
+  int v61; // eax@99
+  int v62; // edi@99
+  char *v63; // eax@99
+  GUIFont *v64; // edx@99
+  GUIFont *v65; // edi@100
+  unsigned int v66; // [sp-10h] [bp-284h]@75
+  unsigned __int16 v67; // [sp-Ch] [bp-280h]@75
+  int v68; // [sp-Ch] [bp-280h]@99
+  char *v69; // [sp-8h] [bp-27Ch]@75
+  int v70; // [sp-8h] [bp-27Ch]@99
+  unsigned int v71; // [sp-4h] [bp-278h]@75
+  const char *v72; // [sp-4h] [bp-278h]@93
+  unsigned int v73; // [sp-4h] [bp-278h]@99
+  char Dest[100]; // [sp+Ch] [bp-268h]@55
+  char v75[100]; // [sp+70h] [bp-204h]@59
+  char a1[100]; // [sp+D4h] [bp-1A0h]@57
+  char v77[100]; // [sp+138h] [bp-13Ch]@59
+  GUIWindow v78; // [sp+19Ch] [bp-D8h]@99
+  GUIWindow v79; // [sp+1F0h] [bp-84h]@1
+  char *Str[2]; // [sp+244h] [bp-30h]@30
+  unsigned int v81; // [sp+24Ch] [bp-28h]@1
+  unsigned __int8 v82; // [sp+253h] [bp-21h]@59
+  int v83; // [sp+254h] [bp-20h]@1
+  __int16 v84[2]; // [sp+258h] [bp-1Ch]@1
+  Player *v85; // [sp+25Ch] [bp-18h]@1
+  int v86; // [sp+260h] [bp-14h]@18
+  unsigned __int8 v87; // [sp+266h] [bp-Eh]@59
+  unsigned __int8 v88; // [sp+267h] [bp-Dh]@57
+  int v89; // [sp+268h] [bp-Ch]@1
+  unsigned __int8 v90; // [sp+26Fh] [bp-5h]@55
+  GUIFont *pOutString; // [sp+270h] [bp-4h]@3
+
+  v0 = window_SpeakInHouse;
+  memcpy(&v79, window_SpeakInHouse, sizeof(v79));
+  v85 = pPlayers[uActiveCharacter];
+  v1 = v85;
+  v79.uFrameX = 483;
+  v79.uFrameWidth = 148;
+  v79.uFrameZ = 334;
+  v81 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+  *(int *)v84 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
+  //v2 = p2DEvents_minus1__20[13 * (unsigned int)v0->ptr_1C];
+  v2 = p2DEvents[(unsigned int)v0->ptr_1C - 1].fPriceMultiplier;
+  *(float *)&v83 = v2;
+  *(float *)&v89 = v2 * v2;
+  v3 = (signed __int64)(*(float *)&v89 * 0.1);
+  v4 = v3 * (100 - v1->GetMerchant()) / 100;
+  if ( v4 < v3 / 3 )
+    v4 = v3 / 3;
+  v5 = 1;
+  pOutString = (GUIFont *)v4;
+  if ( v4 <= 0 )
+    pOutString = (GUIFont *)1;
+  v6 = (signed __int64)(*(float *)&v89 * *(float *)&v83 * 0.0099999998);
+  v7 = v6 * (100 - v85->GetMerchant()) / 100;
+  if ( v7 < v6 / 3 )
+    v7 = v6 / 3;
+  v83 = v7;
+  if ( v7 <= 0 )
+  {
+    v7 = 1;
+    v83 = 1;
+  }
+  switch(dialog_menu_id)
+  {
+	case 102:
+		{
+		v65 = pFontArrus;
+		pOutString = pFontArrus;
+		strcpy(pTmpBuf, pNPCTopics[354].pText);
+		v78.uFrameWidth = 460;
+		v78.uFrameZ = 452;
+		v62 = v65->CalcTextHeight(pTmpBuf, &v78, 12, 0) + 7;
+		if ( 352 - v62 < 8 )
+		{
+			pOutString = pFontCreate;
+			v62 = pFontCreate->CalcTextHeight(pTmpBuf, &v78, 12, 0) + 7;
+		}
+
+		auto pTex = (uTextureID_Leather != -1 ? &pIcons_LOD->pTextures[uTextureID_Leather] : 0);
+		pRenderer->_4A6A68(8u, 352 - v62, pTex, (pTex ? pTex->uTextureHeight : 26) - v62);
+
+		pRenderer->DrawTextureIndexed(8u, 347 - v62, pTexture_591428);
+		v73 = 0;
+		v70 = 0;
+		v68 = 0;
+		v63 = FitTextInAWindow(pTmpBuf, pOutString, &v78, 0xCu, 0);
+		v64 = pOutString;
+		window_SpeakInHouse->DrawText(v64, 12, 354 - v62, 0, v63, v68, v70, v73);
+		break;
+		}
+	case 103:
+		{
+		strcpy(pTmpBuf, pNPCTopics[(uint)window_SpeakInHouse->ptr_1C + 247].pText);
+		v78.uFrameWidth = 460;
+		v78.uFrameZ = 452;
+		v61 = pFontArrus->CalcTextHeight(pTmpBuf, &v78, 12, 0);
+		v62 = v61 + 7;
+
+		auto pTex = (uTextureID_Leather != -1 ? &pIcons_LOD->pTextures[uTextureID_Leather] : nullptr);
+		pRenderer->_4A6A68(8u, 352 - (v61 + 7), pTex, (pTex ? pTex->uTextureHeight : 26) - (v61 + 7));
+
+		pRenderer->DrawTextureIndexed(8u, 347 - v62, pTexture_591428);
+		v73 = 0;
+		v70 = 0;
+		v68 = 0;
+		v63 = FitTextInAWindow(pTmpBuf, pFontArrus, &v78, 0xCu, 0);
+		v64 = pFontArrus;
+		window_SpeakInHouse->DrawText(v64, 12, 354 - v62, 0, v63, v68, v70, v73);
+		break;
+		}
+	case 104:
+		{
+		if ( pArcomageGame->bGameInProgress == 1 )
+          return;
+        v26 = pTmpBuf;
+        if ( pArcomageGame->uGameResult )
+        {
+          if ( pArcomageGame->uGameResult == 1 )
+            v72 = pGlobalTXT_LocalizationStrings[640];// You won!
+          else
+            v72 = pGlobalTXT_LocalizationStrings[641];// You lost!
+        }
+        else
+        {
+          v72 = pGlobalTXT_LocalizationStrings[639];// A tie!
+        }
+        strcpy(pTmpBuf, v72);
+//LABEL_97:
+        v71 = 3;
+        v69 = v26;
+        v67 = v84[0];
+        v66 = (174 - pFontArrus->CalcTextHeight(v26, &v79, 0, 0)) / 2 + 138;
+        v79.DrawTitleText(pFontArrus, 0, v66, v67, v69, v71);
+		break;
+		}
+	case 15:
+		{
+        if ( pParty->uNumGold >= (unsigned int)pOutString )
+        {
+          Party::TakeGold((unsigned int)pOutString);
+          v27 = (int)window_SpeakInHouse->ptr_1C;
+          HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
+          dialog_menu_id = 0;
+          while ( sub_4BD8B5() )
+            ;
+          sub_4B1D27();
+          pVideoPlayer->Unload();
+          window_SpeakInHouse->Release();
+          window_SpeakInHouse = 0;
+
+          if ( pMessageQueue_50CBD0->uNumMessages )
+            pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
+          pMessageQueue_50CBD0->pMessages[0].eType = UIMSG_OpenRestUI;
+          pMessageQueue_50CBD0->pMessages[0].param = v27;
+          pMessageQueue_50CBD0->pMessages[0].field_8 = 1;
+//LABEL_51:
+          ++pMessageQueue_50CBD0->uNumMessages;
+          return;
+        }
+		ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);
+        HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 4);
+        pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, v5, 0);
+		break;
+		}
+	case 96:
+		{
+		if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+			return;
+		v8 = pDialogueWindow;
+		*(float *)&v89 = 0.0;
+
+		//v9 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (unsigned int)ptr_507BC0->ptr_1C] * 500.0);
+		v9 = (signed __int64)(p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].flt_24 * 500.0);
+
+		pOutString = (GUIFont *)(v9 * (100 - v85->GetMerchant()) / 100);
+		if ( (signed int)pOutString < v9 / 3 )
+			pOutString = (GUIFont *)(v9 / 3);
+		v10 = v8->pStartingPosActiveItem;
+		v11 = v10 + v8->pNumPresenceButton;
+		v86 = 0;
+		if ( (signed int)v10 < v11 )
+		{
+			do
+			{
+				v12 = v8->GetControl(v10)->uControlParam - 36;
+				if ( byte_4ED970_skill_learn_ability_by_class_table[v85->classType][v12] && !v85->pActiveSkills[v12] )
+				{
+					v13 = pFontArrus->CalcTextHeight(pSkillNames[v12], &v79, 0, 0);
+					v89 += v13;
+					++v86;
+				}
+				++v10;
+			}
+			while ( (signed int)v10 < v8->pStartingPosActiveItem + v8->pNumPresenceButton );
+			if ( v86 )
+			{
+				sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], pOutString);
+				v79.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
+				pOutString = (GUIFont *)((149 - v89) / v86);
+				if ( (149 - v89) / v86 > 32 )
+					pOutString = (GUIFont *)32;
+				v14 = (149 - v86 * (signed int)pOutString - v89) / 2 - (signed int)pOutString / 2 + 162;
+				v89 = v8->pStartingPosActiveItem;
+				v83 = v14;
+				if ( v89 < v89 + v8->pNumPresenceButton )
+				{
+					v86 = 2;
+					do
+					{
+						v15 = v8->GetControl(v89);
+						v16 = v15;
+						v17 = v15->uControlParam - 36;
+						if ( !byte_4ED970_skill_learn_ability_by_class_table[v85->classType][v17] || v85->pActiveSkills[v17] )
+						{
+							v16->uW = 0;
+							v16->uHeight = 0;
+							v16->uY = 0;
+						}
+						else
+						{
+							v18 = pSkillNames[v17];
+							v16->uY = (unsigned int)((char *)pOutString + v83);
+							Str[1] = v18;
+							v19 = pFontArrus->CalcTextHeight(v18, &v79, 0, 0);
+							v20 = v16->uY;
+							v21 = v86;
+							v16->uHeight = v19;
+							v22 = v19 + v20 - 1;
+							v16->uW = v22;
+							v83 = v22;
+							v23 = v84[0];
+							if ( pDialogueWindow->pCurrentPosActiveItem != v21 )
+								v23 = v81;
+							v79.DrawTitleText(pFontArrus, 0, v20, v23, Str[1], 3u);
+						}
+						v24 = v8->pNumPresenceButton;
+						++v89;
+						v25 = v8->pStartingPosActiveItem + v24;
+						++v86;
+					}
+					while ( v89 < v25 );
+				}
+				return;
+			}
+		}
+		v26 = pTmpBuf;
+		sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v85->pName, pClassNames[v85->classType]);
+		strcat(pTmpBuf, "\n \n");
+		strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
+		v71 = 3;
+		v69 = v26;
+		v67 = v84[0];
+		v66 = (174 - pFontArrus->CalcTextHeight(v26, &v79, 0, 0)) / 2 + 138;
+		v79.DrawTitleText(pFontArrus, 0, v66, v67, v69, v71);
+		return;
+		break;
+		}
+	case 16:
+		{
+        *(_QWORD *)Str = pParty->uNumFoodRations;
+        //if ( (double)pParty->uNumFoodRations >= p2DEvents_minus1__20[13 * (unsigned int)ptr_507BC0->ptr_1C] )
+        if ( (double)pParty->uNumFoodRations >= p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].fPriceMultiplier )
+        {
+          ShowStatusBarString(pGlobalTXT_LocalizationStrings[140], 2u);
+          if ( uActiveCharacter )
+            pPlayers[uActiveCharacter]->PlaySound(SPEECH_67, 0);
+          pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, v5, 0);
+          return;
+        }
+        if ( pParty->uNumGold >= v7 )
+        {
+          Party::TakeGold(v7);
+          //pParty->uNumFoodRations = (signed __int64)p2DEvents_minus1__20[13 * (unsigned int)ptr_507BC0->ptr_1C];
+          pParty->uNumFoodRations = (signed __int64)p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].fPriceMultiplier;
+          HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 3);
+          v5 = 1;
+//LABEL_43:
+          pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, v5, 0);
+          return;
+          //goto LABEL_51;
+        }
+		ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);
+        HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 4);
+        pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, v5, 0);
+		break;
+		}
+	case 1:
+		{
+		if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+		  return;
+		v28 = *(int *)v84;
+		if ( pDialogueWindow->pCurrentPosActiveItem != 2 )
+		  v28 = v81;
+		sprintf(Dest, format_4E2DC8, v28);
+		sprintf(pTmpBuf2, pGlobalTXT_LocalizationStrings[178], pOutString);
+		strcat(Dest, pTmpBuf2);
+		v90 = pFontArrus->CalcTextHeight(Dest, &v79, 0, 0);
+		strcat(Dest, "\n \n");
+		v29 = *(int *)v84;
+		if ( pDialogueWindow->pCurrentPosActiveItem != 3 )
+		  v29 = v81;
+		sprintf(a1, format_4E2DC8, v29);
+		sprintf(pTmpBuf2,
+		  pGlobalTXT_LocalizationStrings[86],
+		  //(signed __int64)p2DEvents_minus1__20[13 * (unsigned int)ptr_507BC0->ptr_1C],
+		  (signed __int64)p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].fPriceMultiplier,
+		  v83);
+		strcat(a1, pTmpBuf2);
+		v88 = pFontArrus->CalcTextHeight(a1, &v79, 0, 0);
+		strcat(a1, "\n \n");
+		v30 = *(int *)v84;
+		if ( pDialogueWindow->pCurrentPosActiveItem != 4 )
+		  v30 = v81;
+		sprintf(v77, format_4E2DC8, v30);
+		strcat(v77, pGlobalTXT_LocalizationStrings[160]);
+		v82 = pFontArrus->CalcTextHeight(v77, &v79, 0, 0);
+		strcat(v77, "\n \n");
+		v75[0] = 0;
+		v87 = 0;
+		v31 = (signed int)window_SpeakInHouse->ptr_1C;
+		if ( v31 >= 108 && v31 <= 120 )
+		{
+		  v32 = *(int *)v84;
+		  if ( pDialogueWindow->pCurrentPosActiveItem != 5 )
+			v32 = v81;
+		  sprintf(v75, format_4E2DC8, v32);
+		  strcat(v75, pGlobalTXT_LocalizationStrings[611]);
+		  v87 = pFontArrus->CalcTextHeight(v75, &v79, 0, 0);
+		}
+		v33 = pDialogueWindow;
+		Str[1] = (char *)pDialogueWindow;
+		v34 = pDialogueWindow->pStartingPosActiveItem;
+		v35 = v34 + pDialogueWindow->pNumPresenceButton;
+		v36 = LOBYTE(pFontArrus->uFontHeight) - 3;
+		v37 = -pDialogueWindow->pNumPresenceButton < 0;
+		pOutString = (GUIFont *)pDialogueWindow->pStartingPosActiveItem;
+		if ( !(v37 ^ __OFSUB__(v34, v35)) )
+		{
+	//LABEL_75:
+		  sprintf(pTmpBuf, "%s%s%s%s", &Dest, &a1, &v77, &v75);
+		  v71 = 3;
+		  v69 = pTmpBuf;
+		  v67 = 0;
+		  v66 = 146;
+	//LABEL_98:
+		  v79.DrawTitleText(pFontArrus, 0, v66, v67, v69, v71);
+		  return;
+		}
+		while ( 1 )
+		{
+		  v38 = v33->GetControl((unsigned int)pOutString);
+		  if ( v38->uControlParam == 15 )
+		  {
+			v46 = v90;
+			v38->uHeight = v90;
+			v38->uY = 146;
+			v41 = v46 + 145;
+			v38->uW = v41;
+		  }
+		  else if ( v38->uControlParam == 16 )
+		  {
+			v44 = v88;
+			v45 = v90 + v36 + 146;
+			v38->uHeight = v88;
+			v38->uY = v45;
+			v41 = v45 + v44 - 1;
+			v38->uW = v41;
+		  }
+		  else if ( v38->uControlParam == 96 )
+		  {
+			v42 = v90 + v88 + 2 * v36 + 146;
+			v43 = v82;
+			v38->uY = v42;
+			v38->uHeight = v43;
+			v41 = v43 + v42 - 1;
+			v38->uW = v41;
+		  }
+		  else if ( v38->uControlParam == 101 )
+		  {
+			v39 = v90 + 3 * v36 + v87 + v88 + 146;
+			v33 = (GUIWindow *)Str[1];
+			v40 = v87;
+			v38->uHeight = v87;
+			v38->uY = v39;
+			v41 = v39 + v40 - 1;
+	//LABEL_73:
+			v38->uW = v41;
+		  }
+		  v47 = v33->pStartingPosActiveItem;
+		  pOutString = (GUIFont *)((char *)pOutString + 1);
+		  if ( (signed int)pOutString >= v33->pNumPresenceButton + v47 )
+		  {
+			  sprintf(pTmpBuf, "%s%s%s%s", &Dest, &a1, &v77, &v75);
+			  v71 = 3;
+			  v69 = pTmpBuf;
+			  v67 = 0;
+			  v66 = 146;
+			  v79.DrawTitleText(pFontArrus, 0, v66, v67, v69, v71);
+			  return;
+		  }
+		}
+		break;
+		}
+	case 101:
+		{
+		if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+		{
+			v48 = 2;
+			pShopOptions[0] = pGlobalTXT_LocalizationStrings[620];
+			pOutString = 0;
+			pShopOptions[1] = pGlobalTXT_LocalizationStrings[622];
+			if ( pParty->HasItem(0x28Bu) )
+			{
+				pShopOptions[2] = pGlobalTXT_LocalizationStrings[621];
+				v48 = 3;
+			}
+			for ( i = 0; i < v48; ++i )
+			{
+				v50 = pFontArrus->CalcTextHeight(pShopOptions[i], &v79, 0, 0);
+				pOutString = (GUIFont *)((char *)pOutString + v50);
+			}
+			v86 = (174 - (signed int)pOutString) / v48;
+			v51 = pDialogueWindow;
+			v52 = 174 - v48 * (174 - (signed int)pOutString) / v48 - (signed int)pOutString;
+			v53 = v52 - HIDWORD(v52);
+			LODWORD(v52) = pDialogueWindow->pStartingPosActiveItem;
+			HIDWORD(v52) = v52 + pDialogueWindow->pNumPresenceButton;
+			v54 = (v53 >> 1) - v86 / 2 + 138;
+			v37 = -pDialogueWindow->pNumPresenceButton < 0;
+			v89 = pDialogueWindow->pStartingPosActiveItem;
+			if ( v37 ^ __OFSUB__((int)v52, HIDWORD(v52)) )
+			{
+				v85 = (Player *)2;
+				pOutString = (GUIFont *)pShopOptions;
+				do
+				{
+					v55 = v51->GetControl(v89);
+					v56 = (const char **)pOutString;
+					v55->uY = v86 + v54;
+					v57 = pFontArrus->CalcTextHeight(*v56, &v79, 0, 0);
+					v58 = v55->uY;
+					v59 = v85;
+					v55->uHeight = v57;
+					v54 = v57 + v58 - 1;
+					v55->uW = v54;
+					v60 = v84[0];
+					if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v59 )
+						v60 = v81;
+					v79.DrawTitleText(pFontArrus, 0, v58, v60, *(const char **)&pOutString->cFirstChar, 3u);
+					v51 = pDialogueWindow;
+					v85 = (Player *)((char *)v85 + 1);
+					pOutString = (GUIFont *)((char *)pOutString + 4);
+					++v89;
+				}
+				while ( v89 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
+			}
+		}
+		break;
+		}
+	default:
+		{
+		break;
+		}
+  }
+}
+
+
+//----- (004B910F) --------------------------------------------------------
+void __cdecl WeaponShopDialog()
+{
+  //Player *v0; // ebx@1
+  int pNumActiveItem; // eax@6
+  signed int v2; // esi@8
+  unsigned int v3; // ebx@10
+  ItemGen *v4; // eax@11
+  char *v5; // ecx@12
+  unsigned __int8 v6; // dl@13
+  char *v7; // edx@14
+  //int v8; // eax@15
+  int v9; // ST08_4@16
+  int v10; // eax@16
+  signed int v11; // esi@18
+  int v12; // ST08_4@21
+  int v13; // eax@21
+  int v14; // edi@23
+  char **v15; // esi@23
+  int v16; // eax@24
+  GUIWindow *v17; // ecx@25
+  int v18; // edx@25
+  int v19; // edi@25
+  unsigned __int8 v20; // sf@25
+  GUIButton *pButton; // esi@27
+  int pNewItem; // eax@27
+  //int v23; // eax@27
+  unsigned int v24; // ecx@27
+  int v25; // edx@27
+  unsigned __int16 v26; // ax@27
+  signed int v27; // esi@32
+  int v28; // ST08_4@36
+  int v29; // eax@36
+  GUIWindow *v30; // edi@41
+  void *v31; // eax@41
+  signed int v32; // esi@41
+  unsigned int v33; // esi@43
+  int v34; // eax@43
+  unsigned int v35; // eax@44
+  int v36; // eax@46
+  __int32 v37; // ecx@51
+  GUIButton *v38; // eax@53
+  GUIButton *v39; // esi@53
+  int v40; // eax@53
+  char *v41; // eax@55
+  //int v42; // eax@55
+  unsigned int v43; // ecx@55
+  const char **v44; // edx@55
+  int v45; // eax@55
+  unsigned __int16 v46; // ax@55
+  int v47; // eax@59
+  const char **v48; // eax@63
+  unsigned int v49; // esi@65
+  Texture *v50; // eax@65
+  int v51; // edi@65
+  int v52; // esi@70
+  Texture *v53; // ST1C_4@70
+  int v54; // edi@70
+  signed int v55; // ecx@73
+  SHORT v56; // di@82
+  bool v57; // eax@82
+  const char *v58; // ecx@84
+  POINT *v59; // esi@89
+  LONG v60; // ecx@90
+  int v61; // eax@90
+  int v62; // ecx@90
+  ItemGen *v63; // esi@90
+  int v64; // eax@95
+  int all_text_height; // esi@96
+  char **v66; // edi@96
+  int v67; // eax@97
+  GUIWindow *v68; // ecx@98
+  int v69; // edx@98
+  int v70; // edi@98
+  //GUIButton *pButton; // esi@100
+  const char **v72; // eax@100
+  int pTextHeight; // eax@100
+  unsigned int v74; // ecx@100
+  Player *v75; // edx@100
+  unsigned __int16 v76; // ax@100
+  GUIWindow *v77; // [sp-18h] [bp-110h]@14
+  int v78; // [sp-14h] [bp-10Ch]@14
+  ItemGen *v79; // [sp-10h] [bp-108h]@12
+  int v80; // [sp-10h] [bp-108h]@14
+  void *v81; // [sp-Ch] [bp-104h]@12
+  unsigned __int16 v82; // [sp-Ch] [bp-104h]@14
+  int v83; // [sp-8h] [bp-100h]@11
+  char *v84; // [sp-8h] [bp-100h]@14
+  __int64 *v85; // [sp-4h] [bp-FCh]@11
+  unsigned int v86; // [sp-4h] [bp-FCh]@14
+  POINT v87; // [sp+Ch] [bp-ECh]@8
+  POINT v88; // [sp+14h] [bp-E4h]@18
+  POINT v89; // [sp+1Ch] [bp-DCh]@89
+  POINT v90; // [sp+24h] [bp-D4h]@19
+  POINT v91; // [sp+2Ch] [bp-CCh]@89
+  POINT v92; // [sp+34h] [bp-C4h]@9
+  POINT v93; // [sp+3Ch] [bp-BCh]@33
+  POINT v94; // [sp+44h] [bp-B4h]@18
+  POINT v95; // [sp+4Ch] [bp-ACh]@32
+  POINT v96; // [sp+54h] [bp-A4h]@18
+  POINT v97; // [sp+5Ch] [bp-9Ch]@32
+  POINT a2; // [sp+64h] [bp-94h]@8
+  POINT v99; // [sp+6Ch] [bp-8Ch]@32
+  POINT v100; // [sp+74h] [bp-84h]@8
+  GUIWindow dialog_window; // [sp+7Ch] [bp-7Ch]@1
+  char *Str; // [sp+D0h] [bp-28h]@55
+  __int32 v103; // [sp+D4h] [bp-24h]@25
+  int pColor2; // [sp+D8h] [bp-20h]@1
+  int pColorWhite; // [sp+DCh] [bp-1Ch]@1
+  POINT v106; // [sp+E0h] [bp-18h]@8
+  Player *pPlayer; // [sp+E8h] [bp-10h]@1
+  int pItemNum; // [sp+ECh] [bp-Ch]@26
+  const char **v109; // [sp+F0h] [bp-8h]@26
+  unsigned __int8 v110; // [sp+F7h] [bp-1h]@16
+  int pNumString;
+
+  //v0 = pPlayers[uActiveCharacter];
+  pPlayer = pPlayers[uActiveCharacter];
+  memcpy(&dialog_window, window_SpeakInHouse, sizeof(dialog_window));
+  dialog_window.uFrameX = 483;
+  dialog_window.uFrameWidth = 148;
+  dialog_window.uFrameZ = 334;
+  pColorWhite = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+  pColor2 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
+  switch(dialog_menu_id)
+  {
+    case DIALOG_SHOP_MAIN:
+    {
+      pNumActiveItem = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+      if ( pNumActiveItem )
+      {
+        pShopOptions[0] = pGlobalTXT_LocalizationStrings[134];
+        pShopOptions[1] = pGlobalTXT_LocalizationStrings[152];
+        pShopOptions[2] = pGlobalTXT_LocalizationStrings[159];
+        pShopOptions[3] = pGlobalTXT_LocalizationStrings[160];
+        all_text_height = 0;
+        for (int i = 0; i < 4; ++i)//while ( (signed int)v15 < (signed int)&unk_F8B1C8 );
+          all_text_height += pFontArrus->CalcTextHeight(pShopOptions[i], &dialog_window, 0, 0);
+        v103 = (174 - all_text_height) / 4;
+        pNumActiveItem = pDialogueWindow->pStartingPosActiveItem;
+        v18 = pNumActiveItem + pDialogueWindow->pNumPresenceButton;
+        v19 = (174 - 4 * (174 - all_text_height) / 4 - all_text_height) / 2 - (174 - all_text_height) / 4 / 2 + 138;
+        v20 = -pDialogueWindow->pNumPresenceButton < 0;
+        if ( v20 ^ pNumActiveItem > v18 )
+        {
+          pItemNum = 2;
+          pNumString = 0;
+          do
+          {
+            pButton = pDialogueWindow->GetControl(pItemNum);
+            pButton->uY = v103 + v19;
+            pTextHeight = pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0);
+            pButton->uHeight = pTextHeight;
+            v19 = pButton->uY + pTextHeight - 1;
+            pButton->uW = v19;
+            v26 = pColor2;
+            if ( pDialogueWindow->pCurrentPosActiveItem != pItemNum )
+              v26 = pColorWhite;
+            dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, v26, (const char *)pShopOptions[pNumString], 3);
+            ++pItemNum;
+            ++pNumString;
+            pNumActiveItem = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
+          }
+          while ( pItemNum < pNumActiveItem );
+        }
+      }
+      break;
+    }
+    case DIALOG_SHOP_BUY_STANDART:
+    {
+      pRenderer->DrawTextureIndexed(8, 8, ShopTexture);
+      v3 = 0;
+      v48 = 0;
+      pItemNum = 0;
+      v109 = 0;
+      do
+      {
+        //  if ( pParty->field_777C[9 * (int)&v48[3 * (unsigned int)window_SpeakInHouse->ptr_1C]] )
+        if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(int)v48].uItemID);
+        {
+          v49 = word_F8B158[(signed int)v48];
+          v50 = ItemsInShopTexture[(signed int)v48];
+          v49 += 30;
+          v51 = 60 - ((signed int)v50->uTextureWidth >> 1);
+          pRenderer->DrawTextureTransparent(v51 + pItemNum, v49, v50);
+          sub_40F92A(&pRenderer->pActiveZBuffer[v51 + pItemNum + 640 * v49], ItemsInShopTexture[(signed int)v109], (int)((char *)v109 + 1));
+          v48 = v109;
+        }
+        pItemNum += 70;
+        v48 = (const char **)((char *)v48 + 1);
+        v109 = v48;
+      }
+      while ( (signed int)v48 < 6 );
+      pNumActiveItem = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+      if ( pNumActiveItem )
+      {
+        v55 = 0;
+        v106.x = 0;
+        v106.x = 0;
+        do
+        {
+          if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v55].uItemID);//9 * (v55 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] )
+            ++v106.x;
+          ++v55;
+        }
+        while ( v55 < 6 );
+        v56 = GetAsyncKeyState(17);
+        v57 = pPlayer->CanSteal();
+        Str = (char *)v57;
+        if ( v56 && v57 )
+        {
+          v58 = pGlobalTXT_LocalizationStrings[185];
+        }
+        else
+        {
+          v58 = pGlobalTXT_LocalizationStrings[195];
+          if ( dialog_menu_id != 2 )
+            v58 = pGlobalTXT_LocalizationStrings[196];
+        }
+        DrawTextAtStatusBar(v58, 0);
+        if ( v106.x )
+        {
+          v59 = pMouse->GetCursorPos(&v91);
+          pNumActiveItem = v59->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v89)->y];
+          if ( pRenderer->pActiveZBuffer[pNumActiveItem] & 0xFFFF )
+          {
+            v60 = (pRenderer->pActiveZBuffer[pNumActiveItem] & 0xFFFF) - 1;
+            v106.x = v60;
+            v61 = (int)window_SpeakInHouse->ptr_1C;
+            //  v62 = 9 * (v60 + 12 * v61);
+            v63 = (ItemGen *)&pParty->StandartItemsInShops[(int)v61][v60];
+            if ( dialog_menu_id != 2 )
+              v63 = &pParty->SpecialItemsInShops[(int)v61][v60];//v63 = (ItemGen *)&pParty->field_C59C[v62 + 724];
+            if ( !v56 || !Str )
+            {
+              v64 = pPlayer->_490EEE(v63, 1, v61, 2);
+              v7 = BuilDialogueString((char *)pMerchantsBuyPhrases[v64], uActiveCharacter - 1, v63, (char *)window_SpeakInHouse->ptr_1C, 2, 0);
+              pTextHeight = pFontArrus->CalcTextHeight(v7, &dialog_window, v3, v3);
+              dialog_window.DrawTitleText(pFontArrus, v3, (174 - pTextHeight) / 2 + 138, pColorWhite, v7, 3);
+            }
+            else
+            {
+            v7 = BuilDialogueString(pGlobalTXT_LocalizationStrings[181], uActiveCharacter - 1, v63, (char *)window_SpeakInHouse->ptr_1C, 2, 0);
+            pTextHeight = pFontArrus->CalcTextHeight(v7, &dialog_window, v3, v3);
+            dialog_window.DrawTitleText(pFontArrus, v3, (174 - pTextHeight) / 2 + 138, pColorWhite, v7, 3);
+            }
+          }
+        }
+        else
+        {
+          dialog_window.DrawCurrentTime( pParty->field_3C.field_50[(unsigned int)window_SpeakInHouse->ptr_1C]  - pParty->uTimePlayed);
+          pNumActiveItem = 0; //added
+        }
+      }
+      break;
+    }
+    case DIALOG_SHOP_SELL:
+    {
+      draw_leather();
+      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+      DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0);
+      if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+        return;
+      if((v11 = pMouse->GetCursorPos(&v96)->x - 14, v106.x = (v11 >> 5) + 14 * ((pMouse->GetCursorPos(&v88)->y - 17) >> 5),
+        pMouse->GetCursorPos(&v94)->x <= 13) || pMouse->GetCursorPos(&v90)->x >= 462 
+        || (pNumActiveItem = pPlayer->GetItemIDAtInventoryIndex((int *)&v106.x), v3 = 0, !pNumActiveItem) )
+        return;
+      v79 = (ItemGen *)&pPlayer->pInventoryItems[pNumActiveItem - 1];
+      v13 = pPlayer->_490EEE(v79, 1, (int)window_SpeakInHouse->ptr_1C, 3);
+      v7 = BuilDialogueString((char *)pMerchantsSellPhrases[v13], uActiveCharacter - 1, v79, (char *)window_SpeakInHouse->ptr_1C, 3, 0);
+      pTextHeight = pFontArrus->CalcTextHeight(v7, &dialog_window, v3, v3);
+      dialog_window.DrawTitleText(pFontArrus, v3, (174 - pTextHeight) / 2 + 138, pColorWhite, v7, 3);
+      break;
+    }
+    case DIALOG_SHOP_IDENTIFY:
+    {
+      draw_leather();
+      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+      DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0);
+      if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+        return;
+      if((v2 = pMouse->GetCursorPos(&a2)->x - 14, v106.x = (v2 >> 5) + 14 * ((pMouse->GetCursorPos(&v87)->y - 17) >> 5),
+        pMouse->GetCursorPos(&v100)->x <= 13) || pMouse->GetCursorPos(&v92)->x >= 462 
+        || (pNumActiveItem = pPlayer->GetItemIDAtInventoryIndex((int *)&v106.x), v3 = 0, !pNumActiveItem) )
+        return;
+      v4 = (ItemGen *)&pPlayer->pInventoryItems[pNumActiveItem - 1];
+      if (!v4->Identified())
+      {
+        v10 = pPlayer->_490EEE(v4, 1, (int)window_SpeakInHouse->ptr_1C, 4);
+        v7 = BuilDialogueString((char *)pMerchantsIdentifyPhrases[v10], uActiveCharacter - 1, v4, (char *)window_SpeakInHouse->ptr_1C, 4, 0);
+        pTextHeight = pFontArrus->CalcTextHeight(v7, &dialog_window, v3, v3);
+        dialog_window.DrawTitleText(pFontArrus, v3, (174 - pTextHeight) / 2 + 138, pColorWhite, v7, 3);
+      }
+      v7 = BuilDialogueString("%24", uActiveCharacter - 1, v4, (char *)window_SpeakInHouse->ptr_1C, 4, 0);
+      pTextHeight = pFontArrus->CalcTextHeight(v7, &dialog_window, v3, v3);
+      dialog_window.DrawTitleText(pFontArrus, v3, (174 - pTextHeight) / 2 + 138, pColorWhite, v7, 3);
+      break;
+    }
+    case DIALOG_SHOP_REPAIR:
+    {
+      draw_leather();
+      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+      DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[198], 0);
+      if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win())
+            return;
+      if( (v2 = pMouse->GetCursorPos(&a2)->x - 14, v106.x = (v2 >> 5) + 14 * ((pMouse->GetCursorPos(&v87)->y - 17) >> 5),
+          pMouse->GetCursorPos(&v100)->x <= 13) || pMouse->GetCursorPos(&v92)->x >= 462
+            || (pNumActiveItem = pPlayer->GetItemIDAtInventoryIndex((int *)&v106.x), v3 = 0, !pNumActiveItem)
+            || (pNumActiveItem = 9 * pNumActiveItem, !(pPlayer->field_1F5[4 * pNumActiveItem + 15] & 2)) )
+            return;
+      v4 = (ItemGen *)&pPlayer->pInventoryItems[pNumActiveItem - 1];
+      v10 = pPlayer->_490EEE(v4, 2, (int)window_SpeakInHouse->ptr_1C, 5);
+      v7 = BuilDialogueString((char *)pMerchantsRepairPhrases[v10], uActiveCharacter - 1, v4, (char *)window_SpeakInHouse->ptr_1C, 5, 0);
+      pTextHeight = (174 - pFontArrus->CalcTextHeight(v7, &dialog_window, 0, 0)) / 2 + 138;
+      dialog_window.DrawTitleText(pFontArrus, 0, pTextHeight, pColorWhite, v7, 3);
+      return;
+    }
+    break;
+    case DIALOG_SHOP_DISPLAY_EQUIPMENT:
+    {
+      draw_leather();
+      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+      pShopOptions[0] = pGlobalTXT_LocalizationStrings[200];//sell
+      pShopOptions[1] = pGlobalTXT_LocalizationStrings[113];//identify
+      pShopOptions[2] = pGlobalTXT_LocalizationStrings[179];//repair
+      all_text_height = 0;
+      for ( int i = 0; i < 3; ++i )
+        all_text_height += pFontArrus->CalcTextHeight(pShopOptions[i], &dialog_window, 0, 0);
+      v103 = (174 - all_text_height) / 3;
+      pNumActiveItem = pDialogueWindow->pStartingPosActiveItem;
+      v18 = pNumActiveItem + pDialogueWindow->pNumPresenceButton;
+      v70 = (3 * (58 - (signed int)v103) - all_text_height) / 2 - ((174 - all_text_height) / 3) / 2 + 138;
+      v20 = -pDialogueWindow->pNumPresenceButton < 0;
+      if ( v20 ^ pNumActiveItem > v18 )
+      {
+        pItemNum = 2;
+        pNumString = 0;
+        do
+        {
+          pButton = pDialogueWindow->GetControl(pItemNum);
+          pButton->uY = v103 + v70;
+          pTextHeight = pFontArrus->CalcTextHeight((const char *)pShopOptions[pNumString], &dialog_window, 0, 0);
+          pButton->uHeight = pTextHeight;
+          v70 = pButton->uY + pTextHeight - 1;
+          pButton->uW = v70;
+          v76 = pColor2;
+          if ( pDialogueWindow->pCurrentPosActiveItem != pItemNum )
+            v76 = pColorWhite;
+          dialog_window.DrawTitleText(pFontArrus, 0, pButton->uY, v76, (const char *)pShopOptions[pNumString], 3);
+          ++pItemNum;
+          ++pNumString;
+          pNumActiveItem = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
+        }
+        while ( pItemNum < pNumActiveItem );
+      }
+      break;
+    }
+    case DIALOG_SHOP_BUY_SPECIAL:
+    {
+      pRenderer->DrawTextureIndexed(8, 8, ShopTexture);
+      v3 = 0;
+      v109 = 0;
+      pItemNum = 0;
+      do
+      {
+        //   if ( pParty->field_C59C[9 * (int)&v109[3 * (unsigned int)window_SpeakInHouse->ptr_1C] + 724] )
+        if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v109].uItemID)
+        {
+          v52 = word_F8B158[(signed int)v109] + 30;
+          v53 = ItemsInShopTexture[(signed int)v109];
+          v54 = 60 - ((signed int)v53->uTextureWidth >> 1);
+          pRenderer->DrawTextureTransparent(v54 + pItemNum, word_F8B158[(signed int)v109] + 30, v53);
+          sub_40F92A(&pRenderer->pActiveZBuffer[v54 + pItemNum + 640 * v52], ItemsInShopTexture[(signed int)v109], (int)((char *)v109 + 1));
+        }
+        v109 = (const char **)((char *)v109 + 1);
+        pItemNum += 70;
+      }
+      while ( (signed int)v109 < 6 );
+      pNumActiveItem = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+      if ( pNumActiveItem )
+      {
+        v55 = 0;
+        v106.x = 0;
+        do
+        {
+          // if ( pParty->field_C59C[9 * (v55 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
+          if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v55].uItemID)
+            ++v106.x;
+          ++v55;
+        }
+        while ( v55 < 6 );
+        v56 = GetAsyncKeyState(17);
+        v57 = pPlayer->CanSteal();
+        Str = (char *)v57;
+        if ( v56 && v57 )
+        {
+          v58 = pGlobalTXT_LocalizationStrings[185];
+        }
+        else
+        {
+          v58 = pGlobalTXT_LocalizationStrings[195];
+          if ( dialog_menu_id != 2 )
+            v58 = pGlobalTXT_LocalizationStrings[196];
+        }
+        DrawTextAtStatusBar(v58, 0);
+        if ( v106.x )
+        {
+          v59 = pMouse->GetCursorPos(&v91);
+          pNumActiveItem = v59->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v89)->y];
+          if ( pRenderer->pActiveZBuffer[pNumActiveItem] & 0xFFFF )
+          {
+            v60 = (pRenderer->pActiveZBuffer[pNumActiveItem] & 0xFFFF) - 1;
+            v106.x = v60;
+            v61 = (int)window_SpeakInHouse->ptr_1C;
+            //  v62 = 9 * (v60 + 12 * v61);
+            v63 = (ItemGen *)&pParty->StandartItemsInShops[(int)v61][v60];
+            if ( dialog_menu_id != 2 )
+              v63 = &pParty->SpecialItemsInShops[(int)v61][v60];//v63 = (ItemGen *)&pParty->field_C59C[v62 + 724];
+            if ( !v56 || !Str )
+            {
+              v64 = pPlayer->_490EEE(v63, 1, v61, 2);
+              v7 = BuilDialogueString((char *)pMerchantsBuyPhrases[v64], uActiveCharacter - 1, v63, (char *)window_SpeakInHouse->ptr_1C, 2, 0);
+              pTextHeight = pFontArrus->CalcTextHeight(v7, &dialog_window, v3, v3);
+              dialog_window.DrawTitleText(pFontArrus, v3, (174 - pTextHeight) / 2 + 138, pColorWhite, v7, 3);
+            }
+            else
+            {
+              v7 = BuilDialogueString(pGlobalTXT_LocalizationStrings[181], uActiveCharacter - 1, v63, (char *)window_SpeakInHouse->ptr_1C, 2, 0);
+              pTextHeight = pFontArrus->CalcTextHeight(v7, &dialog_window, v3, v3);
+              dialog_window.DrawTitleText(pFontArrus, v3, (174 - pTextHeight) / 2 + 138, pColorWhite, v7, 3);
+            }
+          }
+        }
+        else
+        {
+          dialog_window.DrawCurrentTime( pParty->field_3C.field_50[(unsigned int)window_SpeakInHouse->ptr_1C]  - pParty->uTimePlayed);
+          pNumActiveItem = 0; //added
+        }
+      }
+      break;
+    }
+    case DIALOG_SHOP_SKILLS:
+    {
+      pNumActiveItem = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+      if ( pNumActiveItem )
+      {
+        v3 = 0;
+        v31 = window_SpeakInHouse->ptr_1C;
+        v106.y = 0;
+        //v32 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (signed int)v31] * 500.0);
+        v32 = (signed __int64)(p2DEvents[(signed int)v31 - 1].flt_24 * 500.0);
+        pItemNum = v32 * (100 - pPlayer->GetMerchant()) / 100;
+        if ( pItemNum < v32 / 3 )
+          pItemNum = v32 / 3;
+        pNumActiveItem = pDialogueWindow->pStartingPosActiveItem;
+        v34 = pNumActiveItem + pDialogueWindow->pNumPresenceButton;
+        v109 = 0;
+        if ( pNumActiveItem >= v34 )
+        {
+          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], pPlayer->pName, pClassNames[pPlayer->classType]);
+          strcat(pTmpBuf, "\n \n");
+          strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
+          pTextHeight = pFontArrus->CalcTextHeight(pTmpBuf, &dialog_window, 0, 0);
+          dialog_window.DrawTitleText(pFontArrus, v3, (174 - pTextHeight) / 2 + 138, pColor2, pTmpBuf, 3);
+        }
+        do
+        {
+          v35 = pDialogueWindow->GetControl(pNumActiveItem)->uControlParam - 36;
+          if ( byte_4ED970_skill_learn_ability_by_class_table[pPlayer->classType][v35] && !pPlayer->pActiveSkills[v35] )
+          {
+            pTextHeight = pFontArrus->CalcTextHeight(pSkillNames[v35], &dialog_window, 0, 0);
+            v106.y += pTextHeight;
+            v109 = (const char **)((char *)v109 + 1);
+          }
+          ++pNumActiveItem;
+        }
+        while ( pNumActiveItem < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
+        if ( !v109 )
+        {
+          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], pPlayer->pName, pClassNames[pPlayer->classType]);
+          strcat(pTmpBuf, "\n \n");
+          strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
+          pTextHeight = pFontArrus->CalcTextHeight(pTmpBuf, &dialog_window, 0, 0);
+          dialog_window.DrawTitleText(pFontArrus, v3, (174 - pTextHeight) / 2 + 138, pColor2, pTmpBuf, 3);
+        }
+        sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], pItemNum);
+        dialog_window.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3);
+        pItemNum = (149 - v106.y) / (signed int)v109;
+        if ( (149 - v106.y) / (signed int)v109 > 32 )
+          pItemNum = 32;
+        pNumActiveItem = pDialogueWindow->pStartingPosActiveItem;
+        v37 = (149 - (signed int)v109 * pItemNum - v106.y) / 2 - pItemNum / 2 + 162;
+        v106.y = (LONG)pNumActiveItem;
+        v103 = v37;
+        if ( pNumActiveItem < pNumActiveItem + pDialogueWindow->pNumPresenceButton )
+        {
+          v109 = (const char **)2;
+          do
+          {
+            pButton = pDialogueWindow->GetControl(v106.y);
+            v40 = pButton->uControlParam - 36;
+            if ( !byte_4ED970_skill_learn_ability_by_class_table[pPlayer->classType][v40] || pPlayer->pActiveSkills[v40] )
+            {
+              pButton->uW = 0;
+              pButton->uHeight = 0;
+              pButton->uY = 0;
+            }
+            else
+            {
+              pButton->uY = pItemNum + v103;
+              pTextHeight = pFontArrus->CalcTextHeight(pSkillNames[v40], &dialog_window, 0, 0);
+              v43 = pButton->uY;
+              v44 = v109;
+              pButton->uHeight = pTextHeight;
+              v45 = v43 + pTextHeight - 1;
+              pButton->uW = v45;
+              v103 = v45;
+              v46 = pColor2;
+              if ( (const char **)pDialogueWindow->pCurrentPosActiveItem != v44 )
+                v46 = pColorWhite;
+              dialog_window.DrawTitleText(pFontArrus, 0, v43, v46, pSkillNames[v40], 3);
+            }
+            v47 = pDialogueWindow->pStartingPosActiveItem;
+            ++v106.y;
+            pNumActiveItem = pDialogueWindow->pNumPresenceButton + v47;
+            v109 = (const char **)((char *)v109 + 1);
+          }
+          while ( v106.y < pNumActiveItem );
+        }
+      }
+      break;
+    }
+    default:
+    {
+      if( dialog_menu_id > 5 )
+        pNumActiveItem = dialog_menu_id - 96;
+      else
+        pNumActiveItem = dialog_menu_id - 4;
+      break;
+    }
+  }
+}
+
+
+
+//----- (004B9CC6) --------------------------------------------------------
+void __cdecl AlchemistDialog()
+{
+  Player *v0; // ebx@1
+  POINT *result; // eax@7
+  GUIWindow *v2; // edi@9
+  unsigned int v3; // ebx@9
+  void *v4; // eax@9
+  signed int v5; // esi@9
+  unsigned int v6; // esi@11
+  int v7; // eax@11
+  unsigned int v8; // eax@12
+  int v9; // eax@14
+  int v10; // ecx@19
+  GUIButton *v11; // eax@21
+  GUIButton *v12; // esi@21
+  int v13; // eax@21
+  char *v14; // eax@23
+  int v15; // eax@23
+  unsigned int v16; // ecx@23
+  int v17; // edx@23
+  int v18; // eax@23
+  unsigned __int16 v19; // ax@23
+  int v20; // eax@27
+  char *v21; // edx@29
+  int v22; // esi@30
+  char **v23; // edi@30
+  int v24; // eax@31
+  GUIWindow *v25; // ecx@32
+  int v26; // edx@32
+  int v27; // edi@32
+  unsigned __int8 v28; // sf@32
+  GUIButton *v29; // esi@34
+  const char **v30; // eax@34
+  int v31; // eax@34
+  unsigned int v32; // ecx@34
+  Player *v33; // edx@34
+  int v34; // eax@34
+  unsigned __int16 v35; // ax@34
+  signed int v36; // esi@39
+  ItemGen *v37; // eax@42
+  char *v38; // ecx@43
+  unsigned __int8 v39; // dl@44
+  int v40; // eax@46
+  int v41; // ST08_4@47
+  int v42; // eax@47
+  signed int v43; // esi@49
+  int v44; // ST08_4@52
+  int v45; // eax@52
+  Texture *v46; // ecx@55
+  unsigned int v47; // edi@55
+  unsigned int v48; // esi@57
+  int v49; // edx@61
+  Texture *v50; // ecx@67
+  unsigned int v51; // edi@67
+  unsigned int v52; // esi@69
+  int v53; // edx@73
+  Texture *v54; // ecx@79
+  unsigned int v55; // edi@79
+  unsigned int v56; // esi@81
+  int v57; // edx@85
+  Texture *v58; // ecx@91
+  unsigned int v59; // edi@91
+  unsigned int v60; // esi@93
+  int v61; // edx@97
+  signed int v62; // ecx@102
+  SHORT v63; // di@110
+  bool v64; // eax@110
+  const char *v65; // ecx@112
+  POINT *v66; // esi@117
+  int v67; // ecx@118
+  int v68; // eax@118
+  int v69; // ecx@118
+  ItemGen *v70; // esi@118
+  int v71; // eax@123
+  int v72; // edi@125
+  char **v73; // esi@125
+  int v74; // eax@126
+  GUIWindow *v75; // ecx@127
+  int v76; // edx@127
+  int v77; // edi@127
+  GUIButton *v78; // esi@129
+  const char **v79; // eax@129
+  int v80; // eax@129
+  unsigned int v81; // ecx@129
+  Player *v82; // edx@129
+  unsigned __int16 v83; // ax@129
+  GUIWindow *v84; // [sp-18h] [bp-F0h]@29
+  int v85; // [sp-14h] [bp-ECh]@29
+  int v86; // [sp-10h] [bp-E8h]@29
+  ItemGen *v87; // [sp-10h] [bp-E8h]@43
+  unsigned __int16 v88; // [sp-Ch] [bp-E4h]@29
+  void *v89; // [sp-Ch] [bp-E4h]@43
+  char *v90; // [sp-8h] [bp-E0h]@29
+  int v91; // [sp-8h] [bp-E0h]@42
+  unsigned int v92; // [sp-4h] [bp-DCh]@29
+  __int64 *v93; // [sp-4h] [bp-DCh]@42
+  POINT v94; // [sp+Ch] [bp-CCh]@39
+  POINT v95; // [sp+14h] [bp-C4h]@49
+  POINT v96; // [sp+1Ch] [bp-BCh]@117
+  POINT v97; // [sp+24h] [bp-B4h]@40
+  POINT v98; // [sp+2Ch] [bp-ACh]@117
+  POINT v99; // [sp+34h] [bp-A4h]@49
+  POINT v100; // [sp+3Ch] [bp-9Ch]@50
+  POINT v101; // [sp+44h] [bp-94h]@39
+  POINT v102; // [sp+4Ch] [bp-8Ch]@49
+  POINT a2; // [sp+54h] [bp-84h]@39
+  GUIWindow v104; // [sp+5Ch] [bp-7Ch]@1
+  int v105; // [sp+B0h] [bp-28h]@19
+  int v106; // [sp+B4h] [bp-24h]@1
+  char *Str; // [sp+B8h] [bp-20h]@23
+  int v108; // [sp+BCh] [bp-1Ch]@1
+  __int32 v109; // [sp+C0h] [bp-18h]@39
+  Player *_this; // [sp+C4h] [bp-14h]@1
+  const char **v111; // [sp+C8h] [bp-10h]@9
+  unsigned int v112; // [sp+CCh] [bp-Ch]@9
+  unsigned __int8 v113; // [sp+D3h] [bp-5h]@47
+  int v114; // [sp+D4h] [bp-4h]@11
+
+  v0 = pPlayers[uActiveCharacter];
+  _this = pPlayers[uActiveCharacter];
+  memcpy(&v104, window_SpeakInHouse, sizeof(v104));
+  v104.uFrameX = 483;
+  v104.uFrameWidth = 148;
+  v104.uFrameZ = 334;
+  v108 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+  v106 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
+  switch(dialog_menu_id)
+  {
+	case 1:
+		{
+		result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+		if ( result )
+		{
+		  pShopOptions[0] = pGlobalTXT_LocalizationStrings[134];
+		  pShopOptions[1] = pGlobalTXT_LocalizationStrings[152];
+		  pShopOptions[2] = pGlobalTXT_LocalizationStrings[159];
+		  v72 = 0;
+		  pShopOptions[3] = pGlobalTXT_LocalizationStrings[160];
+		  v73 = pShopOptions;
+		  do
+		  {
+			v74 = pFontArrus->CalcTextHeight(*v73, &v104, 0, 0);
+			++v73;
+			v72 += v74;
+		  }
+		  while ( (signed int)v73 < (signed int)&unk_F8B1C8 );
+		  v75 = pDialogueWindow;
+		  Str = (char *)((174 - v72) / 4);
+		  result = (POINT *)pDialogueWindow->pStartingPosActiveItem;
+		  v76 = (int)((char *)result + pDialogueWindow->pNumPresenceButton);
+		  v77 = (174 - 4 * (174 - v72) / 4 - v72) / 2 - (174 - v72) / 4 / 2 + 138;
+		  v28 = -pDialogueWindow->pNumPresenceButton < 0;
+		  v112 = pDialogueWindow->pStartingPosActiveItem;
+		  if ( v28 ^ __OFSUB__((int)result, v76) )
+		  {
+			_this = (Player *)2;
+			v111 = (const char **)pShopOptions;
+			do
+			{
+			  v78 = v75->GetControl(v112);
+			  v79 = v111;
+			  v78->uY = (unsigned int)&Str[v77];
+			  v80 = pFontArrus->CalcTextHeight(*v79, &v104, 0, 0);
+			  v81 = v78->uY;
+			  v82 = _this;
+			  v78->uHeight = v80;
+			  v77 = v81 + v80 - 1;
+			  v78->uW = v77;
+			  v83 = v106;
+			  if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v82 )
+				v83 = v108;
+			  v104.DrawTitleText(pFontArrus, 0, v81, v83, *v111, 3u);
+			  v75 = pDialogueWindow;
+			  _this = (Player *)((char *)_this + 1);
+			  ++v111;
+			  ++v112;
+			  result = (POINT *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
+			}
+			while ( (signed int)v112 < (signed int)result );
+		  }
+		}
+		return;
+		}
+	case 3:
+		{
+        draw_leather();
+        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0);
+        result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+        if ( !result
+          || (v43 = pMouse->GetCursorPos(&v99)->x - 14,
+              v109 = (v43 >> 5) + 14 * ((pMouse->GetCursorPos(&v95)->y - 17) >> 5),
+              result = pMouse->GetCursorPos(&v102),
+              result->x <= 13)
+          || (result = pMouse->GetCursorPos(&v100), result->x >= 462)
+          || (result = (POINT *)v0->GetItemIDAtInventoryIndex((int *)&v109), v3 = 0, !result) )
+          return;
+        v93 = 0;
+        v91 = 3;
+        v89 = window_SpeakInHouse->ptr_1C;
+        v87 = (ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * (int)result + 5];
+        v44 = (int)window_SpeakInHouse->ptr_1C;
+        v113 = uActiveCharacter - 1;
+        v45 = _this->_490EEE(v87, 4, v44, 3);
+        v39 = v113;
+        v38 = (char *)pMerchantsSellPhrases[v45];
+        v21 = BuilDialogueString(v38, v39, v87, (char *)v89, v91, v93);
+        v92 = 3;
+        v90 = v21;
+        v88 = v108;
+        v86 = v3;
+        v85 = v3;
+        v84 = &v104;
+        v40 = pFontArrus->CalcTextHeight(v21, v84, v85, v86);
+        
+            v104.DrawTitleText(pFontArrus, v3, (174 - v40) / 2 + 138, v88, v90, v92);
+        return; 
+		}
+	case 4:
+		{
+		draw_leather();
+        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0);
+        result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+        if ( !result
+          || (v36 = pMouse->GetCursorPos(&a2)->x - 14,
+              v109 = (v36 >> 5) + 14 * ((pMouse->GetCursorPos(&v94)->y - 17) >> 5),
+              result = pMouse->GetCursorPos(&v101),
+              result->x <= 13)
+          || (result = pMouse->GetCursorPos(&v97), result->x >= 462)
+          || (result = (POINT *)v0->GetItemIDAtInventoryIndex((int *)&v109), v3 = 0, !result) )
+          return;
+        v93 = 0;
+        v91 = 4;
+        v37 = (ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * (int)result + 5];
+        if (!v37->Identified())
+        {
+          v89 = window_SpeakInHouse->ptr_1C;
+          v87 = v37;
+          v41 = (int)window_SpeakInHouse->ptr_1C;
+          v113 = uActiveCharacter - 1;
+          v42 = _this->_490EEE(v37, 4, v41, 4);
+          v39 = v113;
+          v38 = (char *)pMerchantsIdentifyPhrases[v42];
+        }
+		else
+		{
+			v89 = window_SpeakInHouse->ptr_1C;
+			v38 = "%24";
+			v87 = v37;
+	        v39 = uActiveCharacter - 1;
+		}
+        v21 = BuilDialogueString(v38, v39, v87, (char *)v89, v91, v93);
+        v92 = 3;
+        v90 = v21;
+        v88 = v108;
+        v86 = v3;
+        v85 = v3;
+        v84 = &v104;
+        v40 = pFontArrus->CalcTextHeight(v21, v84, v85, v86);
+        v104.DrawTitleText(pFontArrus, v3, (174 - v40) / 2 + 138, v88, v90, v92);
+        return;
+		}
+	case 94:
+		{
+		draw_leather();
+        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+        pShopOptions[0] = pGlobalTXT_LocalizationStrings[200];
+        pShopOptions[1] = pGlobalTXT_LocalizationStrings[113];
+        v22 = 0;
+        v23 = pShopOptions;
+        do
+        {
+          v24 = pFontArrus->CalcTextHeight(*v23, &v104, 0, 0);
+          ++v23;
+          v22 += v24;
+        }
+        while ( (signed int)v23 < (signed int)&pShopOptions[2] );
+        Str = (char *)((174 - v22) / 2);
+        v25 = pDialogueWindow;
+        result = (POINT *)pDialogueWindow->pStartingPosActiveItem;
+        v26 = (int)((char *)result + pDialogueWindow->pNumPresenceButton);
+        v27 = (2 * (87 - (174 - v22) / 2) - v22) / 2 - (174 - v22) / 2 / 2 + 138;
+        v28 = -pDialogueWindow->pNumPresenceButton < 0;
+        v112 = pDialogueWindow->pStartingPosActiveItem;
+        if ( v28 ^ __OFSUB__((int)result, v26) )
+        {
+          _this = (Player *)2;
+          v111 = (const char **)pShopOptions;
+          do
+          {
+            v29 = v25->GetControl(v112);
+            v30 = v111;
+            v29->uY = (unsigned int)&Str[v27];
+            v31 = pFontArrus->CalcTextHeight(*v30, &v104, 0, 0);
+            v32 = v29->uY;
+            v33 = _this;
+            v29->uHeight = v31;
+            v34 = v31 + v32 - 1;
+            v29->uW = v34;
+            v27 = v34;
+            v35 = v106;
+            if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v33 )
+              v35 = v108;
+            v104.DrawTitleText(pFontArrus, 0, v32, v35, *v111, 3u);
+            v25 = pDialogueWindow;
+            _this = (Player *)((char *)_this + 1);
+            ++v111;
+            ++v112;
+            result = (POINT *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
+          }
+          while ( (signed int)v112 < (signed int)result );
+        }
+        return;
+		}
+	case 2:
+		{
+		pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
+		v3 = 0;
+		v114 = 0;
+		do
+		{
+			// if ( pParty->field_777C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] )
+			if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v114].uItemID);
+			{
+				v46 = ItemsInShopTexture[v114];
+				v47 = 152 - v46->uTextureHeight;
+				if ( (signed int)v47 < 1 )
+					v47 = 0;
+				v48 = 75 * v114 - v46->uTextureWidth / 2 + 40;
+				if ( v114 )
+				{
+					if ( v114 == 5 )
+					{
+						v49 = ItemsInShopTexture[5]->uTextureWidth;
+						if ( (signed int)v48 > 457 - v49 )
+						v48 = 457 - v49;
+					}
+				}
+				else if ( (signed int)v48 < 18 )
+					v48 = 18;
+				pRenderer->DrawTextureTransparent(v48, v47, v46);
+				sub_40F92A(&pRenderer->pActiveZBuffer[v48 + 640 * v47], ItemsInShopTexture[v114], v114 + 1);
+	        }
+			++v114;
+		}
+		while ( v114 < 6 );
+		v114 = 0;
+		do
+		{
+			//  if ( pParty->field_777C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 54] )
+			if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v114+1].uItemID);
+			{
+			  v50 = ItemsInShopTexture[v114 + 6];
+			  v51 = 308 - v50->uTextureHeight;
+			  if ( (signed int)v51 < 1 )
+				v51 = 0;
+			  v52 = 75 * v114 - v50->uTextureWidth / 2 + 40;
+			  if ( v114 )
+			  {
+				if ( v114 == 5 )
+				{
+				  v53 = ItemsInShopTexture[11]->uTextureWidth;
+				  if ( (signed int)v52 > 457 - v53 )
+					v52 = 457 - v53;
+				}
+			  }
+			  else
+			  {
+				if ( (signed int)v52 < 18 )
+				  v52 = 18;
+			  }
+			  pRenderer->DrawTextureTransparent(v52, v51, v50);
+			  sub_40F92A(&pRenderer->pActiveZBuffer[v52 + 640 * v51], ItemsInShopTexture[v114 + 6], v114 + 7);
+			}
+			++v114;
+		}
+		while ( v114 < 6 );
+		result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+		if ( result )
+		{
+			v62 = 0;
+			v109 = 0;
+			do
+			{
+			 // if ( pParty->field_777C[9 * (v62 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] )
+				if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v62].uItemID);
+					++v109;
+				++v62;
+			}
+			while ( v62 < 12 );
+			v63 = GetAsyncKeyState(17);
+			v64 = _this->CanSteal();
+			Str = (char *)v64;
+			if ( v63 && v64 )
+			{
+				v65 = pGlobalTXT_LocalizationStrings[185];
+			}
+			else if ( dialog_menu_id == 2 )
+			{
+				v65 = pGlobalTXT_LocalizationStrings[195];
+			}
+			else
+			{
+				v65 = pGlobalTXT_LocalizationStrings[196];
+			}
+			DrawTextAtStatusBar(v65, 0);
+			if ( !v109 )
+			{
+				v104.DrawCurrentTime( pParty->field_3C.field_50[ (unsigned int)window_SpeakInHouse->ptr_1C] - pParty->uTimePlayed);
+				return;
+			}
+			v66 = pMouse->GetCursorPos(&v98);
+			result = (POINT *)(v66->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v96)->y]);
+			if ( pRenderer->pActiveZBuffer[(int)result] & 0xFFFF )
+			{
+				v67 = (pRenderer->pActiveZBuffer[(int)result] & 0xFFFF) - 1;
+				v109 = v67;
+				v68 = (int)window_SpeakInHouse->ptr_1C;
+				//  v69 = 9 * (v67 + 12 * v68);
+				v70 = (ItemGen *)&pParty->StandartItemsInShops[v68][v67];
+				if ( dialog_menu_id != 2 )
+					v70 = &pParty->SpecialItemsInShops[(int)v68][v67];//v70 = (ItemGen *)&pParty->field_C59C[v69 + 724];
+				if ( !v63 || !Str )
+				{
+					v93 = 0;
+					v91 = 2;
+					v89 = window_SpeakInHouse->ptr_1C;
+					v87 = v70;
+					v113 = uActiveCharacter - 1;
+					v71 = _this->_490EEE(v70, 4, v68, 2);
+					v39 = v113;
+					v38 = (char *)pMerchantsBuyPhrases[v71];
+				}
+				else
+				{
+					v38 = pGlobalTXT_LocalizationStrings[181];
+					v93 = 0;
+					v91 = 2;
+					v89 = window_SpeakInHouse->ptr_1C;
+					v87 = v70;
+					v39 = uActiveCharacter - 1;
+				}
+				v21 = BuilDialogueString(v38, v39, v87, (char *)v89, v91, v93);
+				v92 = 3;
+				v90 = v21;
+				v88 = v108;
+				v86 = v3;
+				v85 = v3;
+				v84 = &v104;
+				v40 = pFontArrus->CalcTextHeight(v21, v84, v85, v86);
+                v104.DrawTitleText(pFontArrus, v3, (174 - v40) / 2 + 138, v88, v90, v92);
+				return ;
+			}
+		}
+		return;
+		}
+	case 95:
+		{
+		pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
+		v3 = 0;
+		v114 = 0;
+		do
+		{
+			//if ( pParty->field_C59C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
+			if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v114].uItemID)
+			{
+			  v54 = ItemsInShopTexture[v114];
+			  v55 = 152 - v54->uTextureHeight;
+			  if ( (signed int)v55 < 1 )
+				v55 = 0;
+			  v56 = 75 * v114 - v54->uTextureWidth / 2 + 40;
+			  if ( v114 )
+			  {
+				if ( v114 == 5 )
+				{
+				  v57 = ItemsInShopTexture[5]->uTextureWidth;
+				  if ( (signed int)v56 > 457 - v57 )
+					v56 = 457 - v57;
+				}
+			  }
+			  else
+			  {
+				if ( (signed int)v56 < 18 )
+				  v56 = 18;
+			  }
+			  pRenderer->DrawTextureTransparent(v56, v55, v54);
+			  sub_40F92A(&pRenderer->pActiveZBuffer[v56 + 640 * v55], ItemsInShopTexture[v114], v114 + 1);
+			}
+			++v114;
+		}
+		while ( v114 < 6 );
+		v114 = 0;
+		do
+		{
+		// if ( pParty->field_C59C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 778] )   //weak 
+			if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v114].uItemID) //not itemid
+			{
+				v58 = ItemsInShopTexture[v114 + 6];
+				v59 = 308 - v58->uTextureHeight;
+				if ( (signed int)v59 < 1 )
+				v59 = 0;
+				v60 = 75 * v114 - v58->uTextureWidth / 2 + 40;
+				if ( v114 )
+				{
+					if ( v114 == 5 )
+					{
+						v61 = ItemsInShopTexture[11]->uTextureWidth;
+						if ( (signed int)v60 > 457 - v61 )
+						v60 = 457 - v61;
+					}
+				}
+				else
+				{
+					if ( (signed int)v60 < 18 )
+						v60 = 18;
+				}
+				pRenderer->DrawTextureTransparent(v60, v59, v58);
+				sub_40F92A(&pRenderer->pActiveZBuffer[v60 + 640 * v59], ItemsInShopTexture[v114 + 6], v114 + 7);
+			}
+			++v114;
+		}
+		while ( v114 < 6 );
+		result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+		if ( result )
+		{
+			v62 = 0;
+			v109 = 0;
+			do
+			{
+				//if ( pParty->field_C59C[9 * (v62 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
+				if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v62].uItemID)
+					++v109;
+				++v62;
+			}
+			while ( v62 < 12 );
+				v63 = GetAsyncKeyState(17);
+			v64 = _this->CanSteal();
+			Str = (char *)v64;
+			if ( v63 && v64 )
+			{
+				v65 = pGlobalTXT_LocalizationStrings[185];
+			}
+			else
+			{
+				v65 = pGlobalTXT_LocalizationStrings[195];
+				if ( dialog_menu_id != 2 )
+					v65 = pGlobalTXT_LocalizationStrings[196];
+			}
+			DrawTextAtStatusBar(v65, 0);
+			if ( !v109 )
+			{
+				v104.DrawCurrentTime( pParty->field_3C.field_50[ (unsigned int)window_SpeakInHouse->ptr_1C] - pParty->uTimePlayed);
+				return;
+			}
+			v66 = pMouse->GetCursorPos(&v98);
+			result = (POINT *)(v66->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v96)->y]);
+			if ( pRenderer->pActiveZBuffer[(int)result] & 0xFFFF )
+			{
+				v67 = (pRenderer->pActiveZBuffer[(int)result] & 0xFFFF) - 1;
+				v109 = v67;
+				v68 = (int)window_SpeakInHouse->ptr_1C;
+				//  v69 = 9 * (v67 + 12 * v68);
+				v70 = (ItemGen *)&pParty->StandartItemsInShops[v68][v67];
+				if ( dialog_menu_id != 2 )
+					v70 = &pParty->SpecialItemsInShops[(int)v68][v67];//v70 = (ItemGen *)&pParty->field_C59C[v69 + 724];
+				if ( !v63 || !Str )
+				{
+					v93 = 0;
+					v91 = 2;
+					v89 = window_SpeakInHouse->ptr_1C;
+					v87 = v70;
+					v113 = uActiveCharacter - 1;
+					v71 = _this->_490EEE(v70, 4, v68, 2);
+					v39 = v113;
+					v38 = (char *)pMerchantsBuyPhrases[v71];
+				}
+				else
+				{
+					v38 = pGlobalTXT_LocalizationStrings[181];
+					v93 = 0;
+					v91 = 2;
+					v89 = window_SpeakInHouse->ptr_1C;
+					v87 = v70;
+					v39 = uActiveCharacter - 1;
+				}
+				v21 = BuilDialogueString(v38, v39, v87, (char *)v89, v91, v93);
+				v92 = 3;
+				v90 = v21;
+				v88 = v108;
+				v86 = v3;
+				v85 = v3;
+				v84 = &v104;
+				v40 = pFontArrus->CalcTextHeight(v21, v84, v85, v86);
+                v104.DrawTitleText(pFontArrus, v3, (174 - v40) / 2 + 138, v88, v90, v92);
+				return;
+			}
+		}
+		return;
+		}
+	case 96:
+		{
+        if (!sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win())
+          return;
+        v2 = pDialogueWindow;
+        v3 = 0;
+        v4 = window_SpeakInHouse->ptr_1C;
+        v112 = 0;
+        //v5 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (signed int)v4] * 500.0);
+        v5 = (signed __int64)(p2DEvents[(signed int)v4 - 1].flt_24 * 500.0);
+        v111 = (const char **)(v5 * (100 - _this->GetMerchant()) / 100);
+        if ( (signed int)v111 < v5 / 3 )
+          v111 = (const char **)(v5 / 3);
+        v6 = v2->pStartingPosActiveItem;
+        v7 = v6 + v2->pNumPresenceButton;
+        v114 = 0;
+        if ( (signed int)v6 < v7 )
+        {
+          do
+          {
+            v8 = v2->GetControl(v6)->uControlParam - 36;
+            if ( byte_4ED970_skill_learn_ability_by_class_table[_this->classType][v8] && !_this->pActiveSkills[v8] )
+            {
+              v9 = pFontArrus->CalcTextHeight(pSkillNames[v8], &v104, 0, 0);
+              v112 += v9;
+              ++v114;
+            }
+            ++v6;
+          }
+          while ( (signed int)v6 < v2->pNumPresenceButton + v2->pStartingPosActiveItem );
+          if ( v114 )
+          {
+            sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v111);
+            v104.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
+            v111 = (const char **)((signed int)(149 - v112) / v114);
+            if ( (signed int)(149 - v112) / v114 > 32 )
+              v111 = (const char **)32;
+            result = (POINT *)v2->pStartingPosActiveItem;
+            v10 = (signed int)(149 - v114 * (int)v111 - v112) / 2 - (signed int)v111 / 2 + 162;
+            v112 = (unsigned int)result;
+            v105 = v10;
+            if ( (signed int)result < (signed int)((char *)result + v2->pNumPresenceButton) )
+            {
+              v114 = 2;
+              do
+              {
+                v11 = v2->GetControl(v112);
+                v12 = v11;
+                v13 = v11->uControlParam - 36;
+                if ( !byte_4ED970_skill_learn_ability_by_class_table[_this->classType][v13] || _this->pActiveSkills[v13] )
+                {
+                  v12->uW = 0;
+                  v12->uHeight = 0;
+                  v12->uY = 0;
+                }
+                else
+                {
+                  v14 = pSkillNames[v13];
+                  v12->uY = (unsigned int)((char *)v111 + v105);
+                  Str = v14;
+                  v15 = pFontArrus->CalcTextHeight(v14, &v104, 0, 0);
+                  v16 = v12->uY;
+                  v17 = v114;
+                  v12->uHeight = v15;
+                  v18 = v16 + v15 - 1;
+                  v12->uW = v18;
+                  v105 = v18;
+                  v19 = v106;
+                  if ( pDialogueWindow->pCurrentPosActiveItem != v17 )
+                    v19 = v108;
+                  v104.DrawTitleText(pFontArrus, 0, v16, v19, Str, 3u);
+                }
+                v20 = v2->pStartingPosActiveItem;
+                ++v112;
+                result = (POINT *)(v2->pNumPresenceButton + v20);
+                ++v114;
+              }
+              while ( (signed int)v112 < (signed int)result );
+            }
+            return;
+          }
+        }
+        sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], _this->pName, pClassNames[_this->classType]);
+        strcat(pTmpBuf, "\n \n");
+        strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
+        v21 = pTmpBuf;
+        v92 = 3;
+        v90 = pTmpBuf;
+        v88 = v106;
+        v86 = 0;
+        v85 = 0;
+        v84 = &v104;
+        v40 = pFontArrus->CalcTextHeight(v21, v84, v85, v86);
+        v104.DrawTitleText(pFontArrus, v3, (174 - v40) / 2 + 138, v88, v90, v92);
+        return;
+		}
+	default:
+		{
+			return;// (POINT *)dialog_menu_id - 96;
+		}
+  }
+}
+
+
+//----- (004BA928) --------------------------------------------------------
+void __cdecl ArmorShopDialog()
+    {
+    Player *v0; // ebx@1
+    signed int v1; // esi@8
+    unsigned int v2; // eax@10
+    ItemGen *v3; // eax@11
+    unsigned __int8 v4; // dl@12
+    char *v5; // ecx@12
+    char *v6; // eax@13
+    int v7; // ST08_4@15
+    int v8; // eax@15
+    signed int v9; // esi@17
+    unsigned int v10; // eax@19
+    char *v11; // edi@19
+    int v12; // ST08_4@20
+    int v13; // eax@20
+    unsigned __int8 v14; // dl@20
+    char *v15; // ecx@20
+    char **v16; // edi@22
+    int all_text_height; // ebx@22
+    char **v18; // esi@22
+    int v19; // eax@23
+    GUIWindow *v20; // ecx@24
+    int v21; // eax@24
+    int v22; // edx@24
+    int v23; // ebx@24
+    unsigned __int8 v24; // sf@24
+    GUIButton *control_button; // eax@26
+    GUIButton *v26; // esi@26
+    int v27; // eax@26
+    unsigned int v28; // ecx@26
+    int v29; // edx@26
+
+    signed int v31; // esi@31
+    unsigned int v32; // eax@33
+    int v33; // eax@34
+    int v34; // ST08_4@35
+    int v35; // eax@35
+    char *v36; // edx@36
+    GUIWindow *v37; // edi@42
+    signed int v38; // esi@42
+    unsigned int v39; // esi@44
+    int v40; // eax@44
+    unsigned int v41; // eax@45
+    int v42; // eax@47
+    int v43; // ecx@52
+    GUIButton *v44; // eax@54
+    GUIButton *v45; // esi@54
+    int v46; // eax@54
+    char *v47; // eax@56
+    int v48; // eax@56
+    unsigned int v49; // ecx@56
+    int v50; // edx@56
+    int v51; // eax@56
+    unsigned __int16 v52; // ax@56
+    int v53; // eax@60
+    int textureH; // eax@60
+    signed int textureW; // ebx@65
+    Texture *v56; // eax@67
+    unsigned int v57; // edi@68
+    Texture *v58; // ST1C_4@68
+    int v59; // eax@68
+    int v60; // edi@69
+    signed int v61; // ebx@73
+    Texture *v62; // eax@75
+    int v63; // edi@76
+    Texture *v64; // ST1C_4@76
+    unsigned int v65; // ST18_4@76
+    int v66; // eax@76
+    int v67; // edi@77
+    signed int v68; // ecx@81
+    SHORT v69; // bx@89
+    bool v70; // eax@89
+    const char *v71; // ecx@91
+    void *v72; // eax@95
+    POINT *v73; // esi@97
+    int v74; // ecx@97
+    int v75; // eax@98
+    int v76; // ecx@98
+    ItemGen *selected_item; // ecx@99
+    unsigned __int8 v78; // bl@104
+    char **v79; // edi@105
+    int v80; // ebx@105
+    char **v81; // esi@105
+    int v82; // eax@106
+    GUIWindow *v83; // ecx@107
+    int v84; // eax@107
+    int v85; // edx@107
+    int v86; // ebx@107
+    GUIButton *v87; // eax@109
+    GUIButton *v88; // esi@109
+    int v89; // eax@109
+    unsigned int v90; // ecx@109
+    int v91; // edx@109
+    unsigned __int16 v92; // ax@109
+    signed int v93; // edx@114
+    POINT *v94; // edi@120
+    __int32 v95; // ecx@120
+    void *v96; // ST14_4@122
+    unsigned __int8 v97; // bl@122
+    ItemGen *v98; // ST10_4@122
+    int v99; // eax@122
+    char *v100; // eax@122
+    const char *v101; // ST18_4@122
+    unsigned __int16 v102; // ST14_2@122
+    int v103; // eax@122
+    signed int v104; // edi@123
+    Texture *v105; // eax@125
+    int v106; // ebx@126
+    Texture *v107; // ST1C_4@126
+    unsigned int v108; // ST18_4@126
+    int v109; // eax@126
+    int v110; // ebx@127
+    GUIWindow *v111; // [sp-18h] [bp-11Ch]@36
+    unsigned int v112; // [sp-14h] [bp-118h]@13
+    int v113; // [sp-14h] [bp-118h]@36
+    ItemGen *v114; // [sp-10h] [bp-114h]@12
+    unsigned int v115; // [sp-10h] [bp-114h]@13
+    ItemGen *v116; // [sp-10h] [bp-114h]@20
+    int v117; // [sp-10h] [bp-114h]@36
+    void *v118; // [sp-Ch] [bp-110h]@12
+    unsigned __int16 v119; // [sp-Ch] [bp-110h]@13
+    void *v120; // [sp-Ch] [bp-110h]@20
+    char *v121; // [sp-8h] [bp-10Ch]@13
+    int v122; // [sp-8h] [bp-10Ch]@20
+    unsigned int v123; // [sp-4h] [bp-108h]@13
+    __int64 *v124; // [sp-4h] [bp-108h]@20
+    int v125; // [sp-4h] [bp-108h]@68
+    int v126; // [sp-4h] [bp-108h]@76
+    int v127; // [sp-4h] [bp-108h]@126
+    POINT v128; // [sp+Ch] [bp-F8h]@8
+    POINT v129; // [sp+14h] [bp-F0h]@18
+    char v130; // [sp+1Ch] [bp-E8h]@120
+    POINT a2; // [sp+24h] [bp-E0h]@8
+    POINT v132; // [sp+2Ch] [bp-D8h]@120
+    POINT v133; // [sp+34h] [bp-D0h]@17
+    POINT v134; // [sp+3Ch] [bp-C8h]@97
+    POINT v135; // [sp+44h] [bp-C0h]@31
+    POINT v136; // [sp+4Ch] [bp-B8h]@97
+    POINT v137; // [sp+54h] [bp-B0h]@17
+    POINT v138; // [sp+5Ch] [bp-A8h]@32
+    POINT v139; // [sp+64h] [bp-A0h]@17
+    POINT v140; // [sp+6Ch] [bp-98h]@31
+    POINT v141; // [sp+74h] [bp-90h]@8
+    POINT v142; // [sp+7Ch] [bp-88h]@31
+    POINT v143; // [sp+84h] [bp-80h]@9
+    GUIWindow dialog_window; // [sp+8Ch] [bp-78h]@1
+    char *Str; // [sp+E0h] [bp-24h]@56
+    int v146; // [sp+E4h] [bp-20h]@24
+    int hilight_color; // [sp+E8h] [bp-1Ch]@1
+    int m_text_color; // [sp+ECh] [bp-18h]@1
+    __int32 v149; // [sp+F0h] [bp-14h]@8
+    Player* _this; // [sp+F4h] [bp-10h]@1
+    unsigned __int8 uPlayerID; // [sp+FBh] [bp-9h]@15
+    int v152; // [sp+FCh] [bp-8h]@24
+    int v153; // [sp+100h] [bp-4h]@44
+    int th;
+    short text_color;
+
+    v0 = pPlayers[uActiveCharacter];
+    _this = pPlayers[uActiveCharacter];
+    memcpy(&dialog_window, window_SpeakInHouse, sizeof(dialog_window));
+    dialog_window.uFrameX = 483;
+    dialog_window.uFrameWidth = 148;
+    dialog_window.uFrameZ = 334;
+    m_text_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+    hilight_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
+    switch (dialog_menu_id)
+    {
+    case DIALOG_SHOP_MAIN:
+        {
+        if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+            return;
+        pShopOptions[0] = pGlobalTXT_LocalizationStrings[134]; //"Buy Standard"
+        pShopOptions[1] = pGlobalTXT_LocalizationStrings[152]; //"Buy Special"
+        pShopOptions[2] = pGlobalTXT_LocalizationStrings[159]; //"Display Inventory"
+        pShopOptions[3] = pGlobalTXT_LocalizationStrings[160];
+
+        all_text_height = 0;
+        for(int i=0;i<4;++i)
+            all_text_height += pFontArrus->CalcTextHeight(pShopOptions[i], &dialog_window, 0, 0);
+        v146 = (174 - all_text_height) / 4;
+
+        v23 = (174 - 4 * (174 - all_text_height) / 4 - all_text_height) / 2 - (174 - all_text_height) / 4 / 2 + 138;
+        int j=0;
+        if ( pDialogueWindow->pNumPresenceButton>=0 )
+            {
+            th = 2;
+            for (v152 = pDialogueWindow->pStartingPosActiveItem; v152 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;  ++v152)
+                {
+                control_button = pDialogueWindow->GetControl(v152);
+                control_button->uY = v146 + v23;
+                v27 = pFontArrus->CalcTextHeight(pShopOptions[j], &dialog_window, 0, 0);
+                control_button->uHeight = v27;
+                v23 = control_button->uY + control_button->uHeight - 1;
+                control_button->uW = v23;
+                text_color = hilight_color;
+                if ( pDialogueWindow->pCurrentPosActiveItem != th )
+                    text_color = m_text_color;
+                dialog_window.DrawTitleText(pFontArrus, 0, control_button->uY, text_color, pShopOptions[j], 3);
+                ++th;               
+                ++j;
+                }
+            }
+        }
+        break;
+    case DIALOG_SHOP_BUY_STANDART:
+        {
+        pRenderer->DrawTextureIndexed(8, 8, ShopTexture);
+        textureW = 0;
+        v153 = 0;
+        for(int i=0; i<8; ++i)
+            {
+            if ( pParty->StandartItemsInShops[window_SpeakInHouse->par1C][i].uItemID);
+                {
+                textureW = ItemsInShopTexture[i]->uTextureWidth;
+                textureH = ItemsInShopTexture[i]->uTextureHeight;
+                if ( i >= 4 )  //low row
+                    {
+                    v60 = 90 - (textureW/2);
+                    pRenderer->DrawTextureTransparent(v60 + v153 - 420, 126, ItemsInShopTexture[i]);
+                    v59 = v60 + v153 + 80220;
+                    }
+                else
+                    {
+                    v57 = 98 -  textureH;
+                    v152 = 86 - (textureW/2);
+                    pRenderer->DrawTextureTransparent(v153 + v152, v57, ItemsInShopTexture[i]);
+                    v59 = v153 + v152 + 640 * v57;
+                    }
+                ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v59], ItemsInShopTexture[i], i+1);
+                }
+                v153 += 105;
+
+            }
+
+        if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+            return;
+
+        v149 = 0;
+        for(int i=0; i<8; ++i)
+            {
+            if ( pParty->StandartItemsInShops[window_SpeakInHouse->par1C][i].uItemID);
+            ++v149;
+
+            }
+
+        v69 = GetAsyncKeyState(17);
+        v70 = _this->CanSteal();
+        //Str = (char *)v70;
+        if ( v69 == 0 || v70 == 0 )
+            {
+            v71 = pGlobalTXT_LocalizationStrings[195]; //"Select the Item to Buy"
+            }
+        else
+            {
+            v71 = pGlobalTXT_LocalizationStrings[185];//"Steal item"
+            }
+        DrawTextAtStatusBar(v71, 0);
+        if ( v149 != 0 )
+            {
+            v73 = pMouse->GetCursorPos(&v136);
+            v74 = pRenderer->pActiveZBuffer[v73->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v134)->y]] & 0xFFFF;
+            if ( !v74 )
+                return;
+            v149 = v74 - 1;
+            selected_item = &pParty->StandartItemsInShops[window_SpeakInHouse->par1C][v74-1];
+            if ( v69 ==0 || v70 == 0)
+                {
+                v120 = window_SpeakInHouse->ptr_1C;
+                v15 = (char *)pMerchantsBuyPhrases[_this->_490EEE(selected_item, 2, window_SpeakInHouse->par1C, 2)];
+                }
+            else
+                {
+                v120 = window_SpeakInHouse->ptr_1C;
+                v15 = pGlobalTXT_LocalizationStrings[181]; //"Steal %24"
+                }
+            v36 = BuilDialogueString(v15, uActiveCharacter - 1, selected_item, (char *)v120, 2, 0);
+            v115 = (174 - pFontArrus->CalcTextHeight(v36, &dialog_window, 0, 0)) / 2 + 138;
+            dialog_window.DrawTitleText(pFontArrus, 0, v115, m_text_color, v36, 3);
+            return;
+            }
+        dialog_window.DrawCurrentTime( pParty->field_3C.field_50[window_SpeakInHouse->par1C]- pParty->uTimePlayed);
+        return;
+        }
+        break;
+    case DIALOG_SHOP_SELL:
+    {
+      draw_leather();
+      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+      DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0);//"Select the Item to Sell"
+      if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win())
+        return;
+
+      if((v9 = pMouse->GetCursorPos(&v139)->x - 14, v149 = (v9 >> 5) + 14 * ((pMouse->GetCursorPos(&v133)->y - 17) >> 5),
+         pMouse->GetCursorPos(&v137)->x <= 13) || pMouse->GetCursorPos(&v129)->x >= 462 
+         || (v10 = v0->GetItemIDAtInventoryIndex((int *)&v149), v11 = 0, !v10) )
+           return;
+   
+      v116 = (ItemGen *)&v0->pInventoryItems[v10-1];
+      v13 = v0->_490EEE(v116, 2, window_SpeakInHouse->par1C, 3);
+      v15 = (char *)pMerchantsSellPhrases[v0->_490EEE(v116, 2, window_SpeakInHouse->par1C, 3)];
+      v36 = BuilDialogueString(v15, uActiveCharacter - 1, v116, (char *) window_SpeakInHouse->par1C, 3, 0);
+      v115 = (174 - pFontArrus->CalcTextHeight(v36, &dialog_window, 0, 0)) / 2 + 138;
+      dialog_window.DrawTitleText(pFontArrus, 0, v115, m_text_color, v36, 3);
+      return;
+    }
+    break;
+    case DIALOG_SHOP_IDENTIFY:
+        {
+        draw_leather();
+        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0); //"Select the Item to Identify"	
+        if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+            {
+            v1 = pMouse->GetCursorPos(&a2)->x - 14;
+            v149 = (v1 >> 5) + 14 * ((pMouse->GetCursorPos(&v128)->y - 17) >> 5);
+            if ( pMouse->GetCursorPos(&v141)->x > 13 )
+                {
+                if ( pMouse->GetCursorPos(&v143)->x < 462 )
+                    {
+                    v2 = v0->GetItemIDAtInventoryIndex((int *)&v149);
+                    if ( v2 )
+                        {
+                        v3 = (ItemGen *)&v0->pInventoryItems[v2-1];
+                        if (v3->Identified())
+                            {
+                            v118 = window_SpeakInHouse->ptr_1C;
+                            v4 = uActiveCharacter - 1;
+                            v5 = "%24";
+                            v114 = v3;
+                            }
+                        else
+                            {
+                            v118 = window_SpeakInHouse->ptr_1C;
+                            v114 = v3;
+                            v7 = (int)window_SpeakInHouse->ptr_1C;
+                            uPlayerID = uActiveCharacter - 1;
+                            v8 = v0->_490EEE(v3, 2, v7, 4);
+                            v4 = uPlayerID;
+                            v5 = (char *)pMerchantsIdentifyPhrases[v8];
+                            }
+                        v6 = BuilDialogueString(v5, v4, v114, (char *)v118, 4, 0);
+                        v115 = (174 - pFontArrus->CalcTextHeight(v6, &dialog_window, 0, 0)) / 2 + 138;
+                        dialog_window.DrawTitleText(pFontArrus, 0, v115, m_text_color, v6, 3);
+                        return;
+                        }
+                    }
+                }
+            }
+        }
+        break;
+    case DIALOG_SHOP_REPAIR:
+        {
+        draw_leather();
+        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[198], 0);
+        if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win())
+            return;
+
+          if( (v31 = pMouse->GetCursorPos(&v135)->x - 14,
+            v149 = (v31 >> 5) + 14 * ((pMouse->GetCursorPos(&v142)->y - 17) >> 5),
+            pMouse->GetCursorPos(&v140)->x <= 13)
+            || pMouse->GetCursorPos(&v138)->x >= 462
+            || (v32 = v0->GetItemIDAtInventoryIndex((int *)&v149), v11 = 0, !v32)
+            || (v33 = 9 * v32, !(v0->field_1F5[4 * v33 + 15] & 2)) )
+            return;
+  
+
+        v120 = window_SpeakInHouse->ptr_1C;
+        v116 = (ItemGen *)&v0->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * v33 + 5];
+        v34 = (int)window_SpeakInHouse->ptr_1C;
+        uPlayerID = uActiveCharacter - 1;
+        v35 = v0->_490EEE((ItemGen *)&v0->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * v33 + 5], 2, v34, 5);
+        v14 = uPlayerID;
+        v15 = (char *)pMerchantsRepairPhrases[v35];
+        v36 = BuilDialogueString(v15, v14, v116, (char *)v120, 5, 0);
+        v115 = (174 - pFontArrus->CalcTextHeight(v36, &dialog_window, 0, 0)) / 2 + 138;
+        dialog_window.DrawTitleText(pFontArrus, 0, v115, m_text_color, v36, 3);
+        return;
+        }
+        break;
+    case 6: //buy standart
+        {
+        pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
+        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[195], 0); //"Select the Item to Buy"
+        if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+            return;
+        v149 = 0;
+        for(int i=0;i<6;++i)
+            if (pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][i].uItemID)
+                ++v149;
+
+
+        if ( v149 )
+            {
+            v94 = pMouse->GetCursorPos(&v132);
+            v149 = pRenderer->pActiveZBuffer[v94->x + pSRZBufferLineOffsets[pMouse->GetCursorPos((POINT *)&v130)->y]];
+            v95 = v149;
+            if ( v149 && v149 != -65536 )
+                {
+                --v149;
+ 
+                v97 = uActiveCharacter - 1;
+
+                v99 = _this->_490EEE(
+                    &pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][v95-1], 2,	window_SpeakInHouse->par1C,	2);
+                v100 = BuilDialogueString((char *)pMerchantsBuyPhrases[v99], uActiveCharacter - 1, v98, (char *)window_SpeakInHouse->par1C, 2, 0);
+                v103 = pFontArrus->CalcTextHeight(v100, &dialog_window, 0, 0);
+                dialog_window.DrawTitleText(pFontArrus, 0, (174 - v103) / 2 + 138, m_text_color, v100, 3);
+                }
+            v104 = 0;
+            v153 = 0;
+            do
+                {
+                //if ( pParty->field_C59C[9 * (v104 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
+                if (pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][v104].uItemID)
+                    {
+                    v105 = ItemsInShopTexture[v104];
+                    if ( v104 >= 4 )
+                        {
+                        v110 = 90 - ((signed int)v105->uTextureWidth >> 1);
+                        pRenderer->DrawTextureTransparent(v153 + v110 - 420, 0x7Eu, ItemsInShopTexture[v104]);
+                        v127 = v104 + 1;
+                        v109 = v153 + v110 + 80220;
+                        }
+                    else
+                        {
+                        v106 = 98 - v105->uTextureHeight;
+                        v107 = ItemsInShopTexture[v104];
+                        v108 = 98 - v105->uTextureHeight;
+                        v152 = 86 - ((signed int)v105->uTextureWidth >> 1);
+                        pRenderer->DrawTextureTransparent(v152 + v153, v108, v107);
+                        v127 = v104 + 1;
+                        v109 = v152 + v153 + 640 * v106;
+                        }
+                    ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v109], ItemsInShopTexture[v104], v127);
+                    }
+                v153 += 105;
+                ++v104;
+                }
+                while ( v104 < 8 );
+                return;
+            }
+        dialog_window.DrawCurrentTime(pParty->field_3C.field_50[window_SpeakInHouse->par1C]-  pParty->uTimePlayed);
+        return;
+        }
+        break;
+    case DIALOG_SHOP_DISPLAY_EQUIPMENT:
+        {
+        draw_leather();
+        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+        v79 = pShopOptions;
+        pShopOptions[0] = pGlobalTXT_LocalizationStrings[200]; //"Sell"
+        pShopOptions[1] = pGlobalTXT_LocalizationStrings[113]; //"Identify"
+        pShopOptions[2] = pGlobalTXT_LocalizationStrings[179]; //"Repair"
+
+        all_text_height = 0;
+        for(int i=0;i<3;++i)
+            all_text_height += pFontArrus->CalcTextHeight(pShopOptions[i], &dialog_window, 0, 0);
+        v83 = pDialogueWindow;
+        v152 = (174 - all_text_height) / 3;
+        v84 = pDialogueWindow->pStartingPosActiveItem;
+        v85 = v84 + pDialogueWindow->pNumPresenceButton;
+        v86 = (3 * (58 - v152) - all_text_height) / 2 - v152 / 2 + 138;
+        v24 = -pDialogueWindow->pNumPresenceButton < 0;
+        _this = (Player *)pDialogueWindow->pStartingPosActiveItem;
+        if ( v24 ^ __OFSUB__(v84, v85) )
+            {
+            v153 = 2;
+            do
+                {
+                v87 = v83->GetControl((unsigned int)_this);
+                v88 = v87;
+                v87->uY = v152 + v86;
+                v89 = pFontArrus->CalcTextHeight(*v79, &dialog_window, 0, 0);
+                v90 = v88->uY;
+                v91 = v153;
+                v88->uHeight = v89;
+                v86 = v90 + v89 - 1;
+                v88->uW = v86;
+                v92 = hilight_color;
+                if ( pDialogueWindow->pCurrentPosActiveItem != v91 )
+                    v92 = m_text_color;
+                dialog_window.DrawTitleText(pFontArrus, 0, v90, v92, *v79, 3u);
+                v83 = pDialogueWindow;
+                ++v153;
+                ++v79;
+                _this = (Player *)((char *)_this + 1);
+                }
+                while ( (signed int)_this < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
+            }
+        return;
+        }
+        break;
+    case DIALOG_SHOP_BUY_SPECIAL:
+        {
+        pRenderer->DrawTextureIndexed(8, 8, ShopTexture);
+        v11 = 0;
+        v61 = 0;
+        v153 = 0;
+        do
+            {
+            if (pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][v61].uItemID)
+                {
+                v62 = ItemsInShopTexture[v61];
+                if ( v61 >= 4 )
+                    {
+                    v67 = 90 - ((signed int)v62->uTextureWidth >> 1);
+                    pRenderer->DrawTextureTransparent(v153 + v67 - 420, 0x7Eu, ItemsInShopTexture[v61]);
+                    v66 = v153 + v67 + 80220;
+                    }
+                else
+                    {
+                    v63 = 98 - v62->uTextureHeight;
+                    v64 = ItemsInShopTexture[v61];
+                    v65 = 98 - v62->uTextureHeight;
+                    v152 = 86 - ((signed int)v62->uTextureWidth >> 1);
+                    pRenderer->DrawTextureTransparent(v152 + v153, v65, v64);
+                    v66 = v152 + v153 + 640 * v63;
+                    }
+                ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v66], ItemsInShopTexture[v61], v61 + 1);
+                }
+            v153 += 105;
+            ++v61;
+            }
+            while ( v61 < 8 );
+
+            if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+                return;
+            v68 = 0;
+            v149 = 0;
+
+            do
+                {
+                // if ( (char *)pParty->field_C59C[9 * (v68 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] != v11 )
+                if (pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][(signed int)v68].uItemID)
+                    ++v149;
+                ++v68;
+                }
+                while ( v68 < 6 );
+
+                v69 = GetAsyncKeyState(17);
+                v70 = _this->CanSteal();
+                Str = (char *)v70;
+                if ( v69 == 0 || (char *)v70 == 0 )
+                    {
+                    v71 = pGlobalTXT_LocalizationStrings[196]; //Select the Special Item to Buy"
+                    }
+                else
+                    {
+                    v71 = pGlobalTXT_LocalizationStrings[185];
+                    }
+                DrawTextAtStatusBar(v71, 0);
+                if ( (char *)v149 != 0 )
+                    {
+                    v73 = pMouse->GetCursorPos(&v136);
+                    v74 = pRenderer->pActiveZBuffer[v73->x + pSRZBufferLineOffsets[pMouse->GetCursorPos((POINT *)&v134)->y]] & 0xFFFF;
+                    if ( !v74 )
+                        return;
+                    v149 = v74 - 1;
+
+                    if ( dialog_menu_id == 2 )
+                        selected_item = &pParty->StandartItemsInShops[window_SpeakInHouse->par1C][v74-1];
+                    else
+                        selected_item = &pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][v74-1];//(ItemGen *)&pParty->field_C59C[v76 + 724];
+                    if ( v69 == 0 || Str == 0 )
+                        {
+                        v120 = window_SpeakInHouse->ptr_1C;
+                        v15 = (char *)pMerchantsBuyPhrases[_this->_490EEE(selected_item, 2, window_SpeakInHouse->par1C, 2)];
+                        }
+                    else
+                        {
+                        v120 = window_SpeakInHouse->ptr_1C;
+                        v15 = pGlobalTXT_LocalizationStrings[181]; //"Steal %24"
+                        }
+                    v36 = BuilDialogueString(v15, uActiveCharacter - 1, selected_item, (char *)v120, 2, 0);
+                    v115 = (174 - pFontArrus->CalcTextHeight(v36, &dialog_window, 0, 0)) / 2 + 138;
+                    dialog_window.DrawTitleText(pFontArrus, 0, v115, m_text_color, v36, 3);
+                    return;
+                    }
+                dialog_window.DrawCurrentTime( pParty->field_3C.field_50[window_SpeakInHouse->par1C]- pParty->uTimePlayed);
+                return;
+        }
+        break;
+    case DIALOG_SHOP_SKILLS:
+        {
+        if (!sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+            return;
+        v152 = 0;
+        v37 = pDialogueWindow;
+        //v38 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (unsigned int)ptr_507BC0->ptr_1C] * 500.0);
+        v38 = (signed __int64)(p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].flt_24 * 500.0);
+        _this = (Player *)(v38 * (100 - v0->GetMerchant()) / 100);
+        if ( (signed int)_this < v38 / 3 )
+            _this = (Player *)(v38 / 3);
+        v39 = v37->pStartingPosActiveItem;
+        v40 = v37->pNumPresenceButton;
+        v153 = 0;
+        if ( (signed int)v39 < (signed int)(v39 + v40) )
+            {
+            do
+                {
+                v41 = v37->GetControl(v39)->uControlParam - 36;
+                if ( byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v41] && !v0->pActiveSkills[v41] )
+                    {
+                    v42 = pFontArrus->CalcTextHeight(pSkillNames[v41], &dialog_window, 0, 0);
+                    v152 += v42;
+                    ++v153;
+                    }
+                ++v39;
+                }
+                while ( (signed int)v39 < v37->pNumPresenceButton + v37->pStartingPosActiveItem );
+                if ( v153 )
+                    {
+                    sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], _this);
+                    dialog_window.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
+                    _this = (Player *)((149 - v152) / v153);
+                    if ( (149 - v152) / v153 > 32 )
+                        _this = (Player *)32;
+                    v43 = (149 - v153 * (signed int)_this - v152) / 2 - (signed int)_this / 2 + 162;
+                    v152 = v37->pStartingPosActiveItem;
+                    v146 = v43;
+                    if ( v152 < v152 + v37->pNumPresenceButton )
+                        {
+                        v153 = 2;
+                        do
+                            {
+                            v44 = v37->GetControl(v152);
+                            v45 = v44;
+                            v46 = v44->uControlParam - 36;
+                            if ( !byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v46] || v0->pActiveSkills[v46] )
+                                {
+                                v45->uW = 0;
+                                v45->uHeight = 0;
+                                v45->uY = 0;
+                                }
+                            else
+                                {
+                                v47 = pSkillNames[v46];
+                                v45->uY = (unsigned int)((char *)_this + v146);
+                                Str = v47;
+                                v48 = pFontArrus->CalcTextHeight(v47, &dialog_window, 0, 0);
+                                v49 = v45->uY;
+                                v50 = v153;
+                                v45->uHeight = v48;
+                                v51 = v49 + v48 - 1;
+                                v45->uW = v51;
+                                v146 = v51;
+                                v52 = hilight_color;
+                                if ( pDialogueWindow->pCurrentPosActiveItem != v50 )
+                                    v52 = m_text_color;
+                                dialog_window.DrawTitleText(pFontArrus, 0, v49, v52, Str, 3u);
+                                }
+                            v53 = v37->pStartingPosActiveItem;
+                            ++v152;
+                            textureH = v37->pNumPresenceButton + v53;
+                            ++v153;
+                            }
+                            while ( v152 < textureH );
+                        }
+                    return;
+                    }
+            }
+        sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v0->pName, pClassNames[v0->classType]); //"Seek knowledge elsewhere %s the %s"
+        strcat(pTmpBuf, "\n \n");
+        strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]); //"I can offer you nothing further."
+        v115 = (174 - pFontArrus->CalcTextHeight(pTmpBuf, &dialog_window, 0, 0)) / 2 + 138;
+        dialog_window.DrawTitleText(pFontArrus, 0, v115, hilight_color, pTmpBuf, 3);
+        return;
+        }
+        break;
+      }
+    }
+
+
+
+    //----- (004B5D7C) --------------------------------------------------------
+    void GuildDialog()
+        {
+        GUIWindow *v0; // ebx@1
+        Player *currPlayer; // edi@1
+        signed int base_teach_price; // ebx@1
+        int v3; // edi@6
+        int result; // eax@11
+        unsigned int v5; // ebx@13
+        int v6; // esi@13
+        signed int v7; // esi@17
+        int v8; // esi@22
+        signed int v9; // ecx@22
+        char *v10; // eax@22
+        const char *statusbar_string; // ecx@26
+        POINT *v12; // esi@30
+        int v13; // ecx@30
+        void *v14; // ST1C_4@31
+        ItemGen *v15; // ST18_4@31
+        int v16; // ST10_4@31
+        int v17; // eax@31
+        char *v18; // edx@31
+        int v19; // eax@32
+        GUIWindow *v20; // edi@35
+        int v21; // esi@35
+        int v22; // eax@35
+        unsigned int v23; // eax@36
+        int v24; // eax@39
+        int v25; // eax@40
+        int v26; // ecx@47
+        GUIButton *v27; // eax@49
+        GUIButton *v28; // esi@49
+        unsigned int v29; // eax@49
+        char *v30; // eax@52
+        int v31; // eax@55
+        unsigned int v32; // ecx@55
+        int v33; // eax@55
+        unsigned __int16 v34; // ax@55
+        int v35; // eax@58
+        const char *v36; // ST20_4@61
+        unsigned __int16 v37; // ST1C_2@61
+        int v38; // eax@61
+        GUIWindow *v39; // [sp-18h] [bp-304h]@31
+        int v40; // [sp-14h] [bp-300h]@31
+        int v41; // [sp-10h] [bp-2FCh]@31
+        unsigned __int16 v42; // [sp-Ch] [bp-2F8h]@31
+        char *v43; // [sp-8h] [bp-2F4h]@31
+        unsigned int v44; // [sp-4h] [bp-2F0h]@31
+        char Dest[100]; // [sp+Ch] [bp-2E0h]@3
+        char v46[100]; // [sp+70h] [bp-27Ch]@3
+        char v47[100]; // [sp+D4h] [bp-218h]@3
+        char v48[100]; // [sp+138h] [bp-1B4h]@3
+        char v49[100]; // [sp+19Ch] [bp-150h]@3
+        POINT v50; // [sp+264h] [bp-88h]@30
+        POINT v51; // [sp+26Ch] [bp-80h]@30
+        GUIWindow working_window; // [sp+274h] [bp-78h]@1
+        signed int v53; // [sp+27Ch] [bp-70h]@1
+        signed int v54; // [sp+284h] [bp-68h]@1
+        int v55; // [sp+2C8h] [bp-24h]@47
+        int main_text_color; // [sp+2CCh] [bp-20h]@1
+        int hi_text_color; // [sp+2D0h] [bp-1Ch]@1
+        Player *v58; // [sp+2D4h] [bp-18h]@1
+        unsigned __int8 uPlayerID; // [sp+2DBh] [bp-11h]@31
+        char *Str; // [sp+2DCh] [bp-10h]@35
+        int v61; // [sp+2E0h] [bp-Ch]@35
+        unsigned int v62; // [sp+2E4h] [bp-8h]@13
+        int v63; // [sp+2E8h] [bp-4h]@1
+
+        v0 = window_SpeakInHouse;
+        memcpy(&working_window, window_SpeakInHouse, sizeof(GUIWindow));
+        v58 = pPlayers[uActiveCharacter];
+        currPlayer = v58;
+        working_window.uFrameX = 483;
+        working_window.uFrameWidth = 148;
+        working_window.uFrameZ = 334;
+        main_text_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+        hi_text_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
+        //v2 = (signed __int64)(p2DEvents_minus1__20[13 * (unsigned int)v0->ptr_1C] * 500.0);
+        base_teach_price = (signed __int64)(p2DEvents[(unsigned int)v0->ptr_1C - 1].fPriceMultiplier * 500.0);
+        v63 = base_teach_price * (100 - currPlayer->GetMerchant()) / 100;
+        if ( v63 < base_teach_price / 3 )
+            v63 = base_teach_price / 3;
+        strcpy(Dest, "");
+        strcpy(v46, "");
+        strcpy(v47, "");
+        strcpy(v48, "");
+        strcpy(v49, "");
+        if ( dialog_menu_id != 1 )
+            {
+            if ( dialog_menu_id != 18 ) //buy skill
+                {
+                if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+                    {
+                    //v3 = (int)(&currPlayer->uIntelligence + dword_F8B19C); //test skill
+                    if ( v58->pActiveSkills[dialog_menu_id-36] )
+                        {
+                        sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[403], pClassNames[dialog_menu_id - 16]); //"You already know the %s skill"
+                        ShowStatusBarString(pTmpBuf, 2u);
+                        pAudioPlayer->PlaySound(SOUND_27, 0, 0, -1, 0, 0, 0, 0);
+                        }
+                    else
+                        {
+                        if ( pParty->uNumGold < v63 )
+                            {
+                            ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u); //"You don't have enough gold"
+                            HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
+                            }
+                        else
+                            {
+                            Party::TakeGold(v63);
+                            v58->pActiveSkills[dialog_menu_id-36] = 1;
+                            }
+                        }
+                    }
+                pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+                return;
+                }
+            pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
+            v5 = 0;
+            v6 = 0;
+            v62 = 0;
+            v63 = 32;
+            do
+                {
+                if (pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C-139][v6].uItemID)
+                    // if ( *(&pParty->pPlayers[1].pInstalledBeacons[0].field_18 + 9 * (v6 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)) )
+
+                    {
+                    pRenderer->DrawTextureTransparent(v63, 0x5Au, ItemsInShopTexture[v6]);
+                    ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 230528), ItemsInShopTexture[v6], v6 + 1);
+                    currPlayer = v58;
+                    }
+                v63 += 70;
+                v62 += 280;
+                ++v6;
+                }
+                while ( v63 < 452 );
+
+                v62 = 1680;
+                v7 = 6;
+                v63 = 32;
+                do
+                    {
+                    if (pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C-139][v7].uItemID)
+                        // if ( *(&pParty->pPlayers[1].pInstalledBeacons[0].field_18 + 9 * (v7 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)) )
+                        {
+                        pRenderer->DrawTextureTransparent(v63, 0xFAu, ItemsInShopTexture[v7]);
+                        ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 638448), ItemsInShopTexture[v7], v7 + 1);
+                        currPlayer = v58;
+                        }
+                    v63 += 70;
+                    v62 += 280;
+                    ++v7;
+                    }
+                    while ( v63 < 452 );
+
+                    if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+                        {
+                        v8 = 0;
+                        v9 = 12;
+                        // v10 = (char *)(&pParty->pPlayers[1].pInstalledBeacons[0].field_18 + 108 * (unsigned int)window_SpeakInHouse->ptr_1C);
+                        //  v10 =
+                        do
+                            {
+                            if (pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C-139][v9].uItemID )
+                                ++v8;
+                            // v10 += 36;
+                            --v9;
+                            }
+                            while ( v9 );
+
+                            GetAsyncKeyState(17);
+                            statusbar_string = pGlobalTXT_LocalizationStrings[195]; //"Select the Item to Buy"
+                            if ( dialog_menu_id != 2 )
+                                statusbar_string = pGlobalTXT_LocalizationStrings[196]; //"Select the Special Item to Buy"	
+                            DrawTextAtStatusBar(statusbar_string, 0);
+                            if ( !v8 )
+                                {
+                                working_window.DrawCurrentTime(
+                                    __PAIR__(
+                                    *(int *)&stru_AA1058[3].pSounds[8 * (unsigned int)window_SpeakInHouse->ptr_1C + 44472],
+                                    *(int *)&stru_AA1058[3].pSounds[8 * (unsigned int)window_SpeakInHouse->ptr_1C + 44468])
+                                    - pParty->uTimePlayed);
+                                return;
+                                }
+                            v12 = pMouse->GetCursorPos(&v51);
+                            result = v12->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v50)->y];
+                            v13 = pRenderer->pActiveZBuffer[result] & 0xFFFF;
+                            if ( pRenderer->pActiveZBuffer[result] & 0xFFFF )
+                                {
+                                v14 = window_SpeakInHouse->ptr_1C;
+                                v15 = (ItemGen *)(&pParty->pPlayers[1].uExpressionTimeLength + 18 * (v13 + 12 * (int)v14));
+                                v16 = (int)window_SpeakInHouse->ptr_1C;
+                                uPlayerID = uActiveCharacter - 1;
+                                v17 = currPlayer->_490EEE( (ItemGen *)&pParty->pPlayers[1].uExpressionTimeLength + v13 + 12 * (int)v14, 3, v16,  2);
+                                v18 = BuilDialogueString((char *)pMerchantsBuyPhrases[v17], uPlayerID, v15, (char *)v14, 2, 0);     
+                                v19 = pFontArrus->CalcTextHeight(v18, &working_window, 0, 0);
+                                working_window.DrawTitleText(pFontArrus, 0, (174 - v19) / 2 + 138,  main_text_color, v18, 3);
+                                return;
+                                }
+                        }
+                    return;
+            }
+        if ( !(unsigned __int16)_449B57_test_bit(
+            (unsigned __int8 *)currPlayer->_guilds_member_bits,
+            guild_mambership_flags[(unsigned int)window_SpeakInHouse->ptr_1C-139]) )
+            { //you must me member
+            v38 = pFontArrus->CalcTextHeight(pNPCTopics[121].pText, &working_window, 0, 0);
+            working_window.DrawTitleText(pFontArrus, 0, (212 - v38) / 2 + 101, hi_text_color, pNPCTopics[121].pText, 3u);
+            pDialogueWindow->pNumPresenceButton = 0;
+            return;
+            }
+
+        if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+            return;
+        v20 = pDialogueWindow;
+        v5 = 0;
+        v62 = 0;
+        Str = 0;
+        v21 = pDialogueWindow->pStartingPosActiveItem;
+        v22 = v21 + pDialogueWindow->pNumPresenceButton;
+        v61 = 0;
+        if ( pDialogueWindow->pStartingPosActiveItem >= pDialogueWindow->pStartingPosActiveItem+pDialogueWindow->pNumPresenceButton )
+            {
+            sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], pPlayers[uActiveCharacter]->pName, pClassNames[pPlayers[uActiveCharacter]->classType]); // "Seek knowledge elsewhere %s the %s"	
+            strcat(pTmpBuf, "\n \n");
+            strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]); //"I can offer you nothing further."
+            v19 = pFontArrus->CalcTextHeight(pTmpBuf, &working_window, 0, 0);
+            working_window.DrawTitleText(pFontArrus, v5, (174 - v19) / 2 + 138, hi_text_color, pTmpBuf, 3);
+            return;
+            }
+        do
+            {
+            v23 = v20->GetControl(v21)->uControlParam;
+            if ( v23 == 18 )
+                {
+                v25 = pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[400], &working_window, 0, 0); //"Buy Spells"
+                v62 += v25;
+                ++v61;
+                }
+            else
+                {
+
+                if((byte_4ED970_skill_learn_ability_by_class_table[v58->classType][v23-36])&&(v58->pActiveSkills[v23-36]))
+                    // or
+                    //byte_4ED970_skill_learn_ability_by_class_table[v58->uClass - 1][v23 + 1]
+                    {
+                    v24 = pFontArrus->CalcTextHeight(pClassNames[v23 - 16], &working_window, 0, 0);
+                    v62 += v24;
+                    ++v61;
+                    ++Str;
+                    }
+                }
+            ++v21;
+            }
+            while ( v21 < v20->pNumPresenceButton + v20->pStartingPosActiveItem );
+            if ( !v61 )
+                {
+LABEL_64:
+                sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v58->pName, pClassNames[v58->classType]); // "Seek knowledge elsewhere %s the %s"	
+                strcat(pTmpBuf, "\n \n");
+                strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]); //"I can offer you nothing further."
+                v19 = pFontArrus->CalcTextHeight(pTmpBuf, &working_window, 0, 0);
+                working_window.DrawTitleText(pFontArrus, v5, (174 - v19) / 2 + 138, hi_text_color, pTmpBuf, 3);
+                return;
+                }
+            if ( Str )
+                {
+                sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v63); //"Skill Cost: %lu"
+                working_window.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
+                }
+            v63 = (signed int)(149 - v62) / v61;
+            if ( v63 > 32 )
+                v63 = 32;
+            v26 = (signed int)(149 - v61 * v63 - v62) / 2 - v63 / 2 + 162;
+            v62 = v20->pStartingPosActiveItem;
+            v55 = v26;
+            if (v20->pStartingPosActiveItem < v20->pStartingPosActiveItem + v20->pNumPresenceButton )
+                {
+                v61 = 2;
+                while ( 1 )
+                    {
+                    v27 = v20->GetControl(v62);
+                    v28 = v27;
+                    v29 = v27->uControlParam;
+                    if ( v29 == 18 )
+                        break;
+
+                    //  __debugbreak();
+                    //pSkillAvailabilityPerClass[8 + v58->uClass][4 + v23]
+                    // or
+                    if ((byte_4ED970_skill_learn_ability_by_class_table[v58->classType][v29 - 36])&&(v58->pActiveSkills[v29-36]))
+                        // or
+                        //byte_4ED970_skill_learn_ability_by_class_table[v58->uClass - 1][v23 + 1]
+
+                        {
+                        v30 = pClassNames[v29 -16];
+LABEL_55:
+                        Str = v30;
+                        v28->uY = v63 + v55;
+                        v31 = pFontArrus->CalcTextHeight(v30, &working_window, 0, 0);
+                        v32 = v28->uY;
+                        v28->uHeight = v31;
+                        v33 = v32 + v31 - 1;
+                        v28->uW = v33;
+                        v55 = v33;
+                        v34 = hi_text_color;
+                        if ( pDialogueWindow->pCurrentPosActiveItem != v61 )
+                            v34 = main_text_color;
+                        working_window.DrawTitleText(pFontArrus, 0, v32, v34, Str, 3u);
+                        v35 = v20->pStartingPosActiveItem;
+                        ++v62;
+                        ++v61;
+                        if ( (signed int)v62 >=v20->pNumPresenceButton +v20->pStartingPosActiveItem  )
+                            return;
+                        }
+                    v28->uW = 0;
+                    v28->uHeight = 0;
+                    v28->uY = 0;
+LABEL_58:
+                    v35 = v20->pStartingPosActiveItem;
+                    ++v62;
+                    ++v61;
+                    if ( (signed int)v62 >=v20->pNumPresenceButton +v20->pStartingPosActiveItem  )
+                        return;
+                    }
+                v30 = pGlobalTXT_LocalizationStrings[400]; //"Buy Spells"
+                goto LABEL_55;
+                }
+            return;
+        }
+
+
+
+//----- (004B705E) --------------------------------------------------------
+void TempleDialog()
+    {
+    GUIWindow *v0; // ebx@1
+    Player *v1; // esi@1
+    int v2; // edi@1
+    int result; // eax@4
+    GUIWindow *v4; // edi@6
+    void *v5; // eax@6
+    int v6; // eax@6
+    unsigned int v7; // eax@8
+    int v8; // ecx@8
+    unsigned int v9; // eax@9
+    int v10; // eax@11
+    int v11; // eax@12
+    GUIWindow *v12; // ecx@16
+    int v13; // edx@16
+    GUIButton *v14; // eax@19
+    GUIButton *v15; // edi@19
+    int v16; // eax@19
+    const char *v17; // eax@21
+    int v18; // eax@21
+    unsigned int v19; // ecx@21
+    int v20; // eax@21
+    unsigned __int16 v21; // ax@21
+    unsigned __int16 v22; // ST14_2@27
+    int v23; // eax@27
+    double v24; // st7@28
+    unsigned int v25; // ebx@28
+    DDM_DLV_Header *v26; // edi@29
+    int v27; // eax@31
+    int v28; // eax@32
+    //unsigned int v29; // ecx@34
+    unsigned int v30; // edx@36
+    unsigned int v31; // edx@38
+    unsigned int v32; // edx@40
+    unsigned int v33; // edx@42
+    unsigned int v34; // edx@44
+    int v35; // edi@50
+    signed int v36; // eax@50
+    unsigned __int8 v37; // al@54
+    int v38; // ecx@54
+    GUIWindow *v39; // eax@56
+    unsigned __int8 v40; // al@61
+    GUIButton *v41; // edi@64
+    int v42; // esi@66
+    GUIWindow *v43; // ecx@66
+    int v44; // edi@66
+    int v45; // eax@68
+    signed int v46; // edi@69
+    int v47; // edi@71
+    GUIButton *v48; // eax@73
+    const char *v49; // edx@73
+    GUIButton *v50; // esi@73
+    int v51; // eax@73
+    unsigned int v52; // ecx@73
+    unsigned __int16 v53; // ax@73
+    char a1[300]; // [sp+10h] [bp-1B4h]@64
+    GUIWindow v57; // [sp+13Ch] [bp-88h]@1
+    __int64 v58; // [sp+190h] [bp-34h]@1
+    __int64 v59; // [sp+198h] [bp-2Ch]@1
+    __int64 v60; // [sp+1A0h] [bp-24h]@1
+    GUIWindow *v61; // [sp+1ACh] [bp-18h]@6
+    unsigned int v62; // [sp+1B0h] [bp-14h]@8
+    unsigned __int8 v63; // [sp+1B7h] [bp-Dh]@64
+    int v64; // [sp+1B8h] [bp-Ch]@6
+    unsigned int v65; // [sp+1BCh] [bp-8h]@6
+    DDM_DLV_Header *v66; // [sp+1C0h] [bp-4h]@6
+
+    v0 = window_SpeakInHouse;
+    memcpy(&v57, window_SpeakInHouse, sizeof(v57));
+    v57.uFrameX = 483;
+    v57.uFrameWidth = 148;
+    v57.uFrameZ = 334;
+    HIDWORD(v58) = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+    HIDWORD(v59) = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
+    v1 = pPlayers[uActiveCharacter];
+    //v2 = pPlayers[uActiveCharacter]->_4B807C(p2DEvents_minus1__20[13 * (unsigned int)v0->ptr_1C]);
+    v2 = pPlayers[uActiveCharacter]->_4B807C(p2DEvents[(unsigned int)v0->ptr_1C - 1].fPriceMultiplier);
+    HIDWORD(v60) = v2;
+    if ( dialog_menu_id != 1 )
+        {
+        if ( dialog_menu_id != 10 )
+            {
+            if ( dialog_menu_id != 11 )
+                {
+
+                if ( dialog_menu_id == 96 )
+                    {
+                    if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+                        {
+                        v4 = pDialogueWindow;
+                        v61 = pDialogueWindow;
+                        v5 = window_SpeakInHouse->ptr_1C;
+                        v66 = 0;
+                        //v65 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (signed int)v5] * 500.0);
+                        v65 = (signed __int64)(p2DEvents[(signed int)v5 - 1].flt_24 * 500.0);
+                        v6 = v1->GetMerchant();
+                        v64 = (signed int)(v65 * (100 - v6)) / 100;
+                        if ( v64 < (signed int)v65 / 3 )
+                            v64 = (signed int)v65 / 3;
+                        v7 = v4->pStartingPosActiveItem;
+                        v8 = v7 + v4->pNumPresenceButton;
+                        v65 = 0;
+                        v62 = v7;
+                        if ( (signed int)v7 >= v8 )
+                            goto LABEL_78;
+                        do
+                            {
+                            v9 = v4->GetControl(v62)->uControlParam - 36;
+                            if ( byte_4ED970_skill_learn_ability_by_class_table[v1->classType][v9] && !v1->pActiveSkills[v9] )
+                                {
+                                v10 = pFontArrus->CalcTextHeight(pSkillNames[v9], &v57, 0, 0);
+                                v66 = (DDM_DLV_Header *)((char *)v66 + v10);
+                                ++v65;
+                                }
+                            v11 = v4->pStartingPosActiveItem;
+                            ++v62;
+                            }
+                            while ( (signed int)v62 < v4->pNumPresenceButton + v11 );
+                            if ( v65 )
+                                {
+                                sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v64);
+                                v57.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
+                                v64 = (149 - (signed int)v66) / (signed int)v65;
+                                if ( v64 > 32 )
+                                    v64 = 32;
+                                v65 = (signed int)(149 - v65 * v64 - (int)v66) / 2 - v64 / 2 + 162;
+                                v12 = v61;
+                                result = v61->pStartingPosActiveItem;
+                                v13 = result + v61->pNumPresenceButton;
+                                v62 = v61->pStartingPosActiveItem;
+                                if ( result < v13 )
+                                    {
+                                    v66 = (DDM_DLV_Header *)2;
+                                    while ( 1 )
+                                        {
+                                        v14 = v12->GetControl(v62);
+                                        v15 = v14;
+                                        v16 = v14->uControlParam - 36;
+                                        if ( !byte_4ED970_skill_learn_ability_by_class_table[v1->classType][v16] || v1->pActiveSkills[v16] )
+                                            {
+                                            v15->uW = 0;
+                                            v15->uHeight = 0;
+                                            v15->uY = 0;
+                                            }
+                                        else
+                                            {
+                                            v17 = pSkillNames[v16];
+                                            v15->uY = v64 + v65;
+                                            HIDWORD(v60) = (uint32)v17;
+                                            v18 = pFontArrus->CalcTextHeight(v17, &v57, 0, 0);
+                                            v19 = v15->uY;
+                                            v15->uHeight = v18;
+                                            v20 = v19 + v18 - 1;
+                                            v15->uW = v20;
+                                            v65 = v20;
+                                            v21 = WORD2(v59);
+                                            if ( (DDM_DLV_Header *)pDialogueWindow->pCurrentPosActiveItem != v66 )
+                                                v21 = WORD2(v58);
+                                            v57.DrawTitleText(pFontArrus, 0, v19, v21, (const char *)HIDWORD(v60), 3u);
+                                            }
+                                        result = (int)v61;
+                                        ++v62;
+                                        v66 = (DDM_DLV_Header *)((char *)v66 + 1);
+                                        if ( (signed int)v62 >= v61->pNumPresenceButton + v61->pStartingPosActiveItem )
+                                            break;
+                                        v12 = v61;
+                                        }
+                                    }
+                                }
+                            else
+                                {
+LABEL_78:
+                                sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v1->pName, pClassNames[v1->classType]);
+                                strcat(pTmpBuf, "\n \n");
+                                strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
+                                v22 = WORD2(v59);
+                                v23 = pFontArrus->CalcTextHeight(pTmpBuf, &v57, 0, 0);
+                                result = (int)v57.DrawTitleText(pFontArrus, 0, (174 - v23) / 2 + 138, v22, pTmpBuf, 3u);
+                                }
+                        }
+                    }
+                return;
+                }
+
+            // DONATION
+            //v24 = p2DEvents_minus1__20[13 * (unsigned int)ptr_507BC0->ptr_1C];
+            v24 = p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].fPriceMultiplier;
+            v25 = 0;
+            if ( pParty->uNumGold >= (unsigned int)(signed __int64)v24 )
+                {
+                Party::TakeGold((signed __int64)v24);
+                v26 = &pOutdoor->ddm;
+                if ( uCurrentlyLoadedLevelType != LEVEL_Outdoor )
+                    v26 = &pIndoor->dlv;
+                v27 = v26->uReputation;
+                v66 = v26;
+                if ( v27 > -5 )
+                    {
+                    v28 = v27 - 1;
+                    v26->uReputation = v28;
+                    if ( v28 < -5 )
+                        v26->uReputation = -5;
+                    }
+                if ( (unsigned __int8)byte_F8B1EF[uActiveCharacter] == pParty->uDaysPlayed % 7 )
+                    {
+                    if ( v26->uReputation <= -5 )
+                        {
+                        v30 = pParty->uDaysPlayed % 7 + 1;
+                        LOBYTE(v30) = v30 | 0x80;
+                        _42777D_CastSpell_UseWand_ShootArrow(SPELL_AIR_WIZARD_EYE, uActiveCharacter - 1, v30, 48, 0);
+                        }
+                    if ( v26->uReputation <= -10 )
+                        {
+                        v31 = pParty->uDaysPlayed % 7 + 1;
+                        LOBYTE(v31) = v31 | 0x80;
+                        _42777D_CastSpell_UseWand_ShootArrow(SPELL_SPIRIT_PRESERVATION, uActiveCharacter - 1, v31, 48, 0);
+                        v26 = v66;
+                        }
+                    if ( v26->uReputation <= -15 )
+                        {
+                        v32 = pParty->uDaysPlayed % 7 + 1;
+                        LOBYTE(v32) = v32 | 0x80;
+                        _42777D_CastSpell_UseWand_ShootArrow(SPELL_BODY_PROTECTION_FROM_MAGIC, uActiveCharacter - 1, v32, 48, 0);
+                        v26 = v66;
+                        }
+                    if ( v26->uReputation <= -20 )
+                        {
+                        v33 = pParty->uDaysPlayed % 7 + 1;
+                        LOBYTE(v33) = v33 | 0x80;
+                        _42777D_CastSpell_UseWand_ShootArrow(SPELL_LIGHT_HOUR_OF_POWER, uActiveCharacter - 1, v33, 48, 0);
+                        v26 = v66;
+                        }
+                    if ( v26->uReputation <= -25 )
+                        {
+                        v34 = pParty->uDaysPlayed % 7 + 1;
+                        LOBYTE(v34) = v34 | 0x80;
+                        _42777D_CastSpell_UseWand_ShootArrow(SPELL_LIGHT_DAY_OF_PROTECTION, uActiveCharacter - 1, v34, 48, 0);
+                        }
+                    }
+                ++byte_F8B1EF[uActiveCharacter];
+                v1->PlaySound(SPEECH_83, 0);
+                ShowStatusBarString(pGlobalTXT_LocalizationStrings[527], 2u); // "Thank You!"
+                goto LABEL_46;
+                }
+            goto LABEL_55;
+            }
+        if ( !v1->_4B6FF9() )
+            return;
+        v25 = 0;
+        if ( pParty->uNumGold < v2 )
+            {
+LABEL_55:
+            ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);
+            HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
+            goto LABEL_46;
+            }
+        Party::TakeGold(v2);
+        v35 = LODWORD(v1->pConditions[17]);
+        v59 = v1->pConditions[14];
+        v58 = v1->pConditions[15];
+        v60 = v1->pConditions[16];
+        v61 = (GUIWindow *)HIDWORD(v1->pConditions[17]);
+        memset(v1, 0, 0xA0u);
+        v1->sHealth = v1->GetMaxHealth();
+        v1->sMana = v1->GetMaxMana();
+        v36 = (signed int)window_SpeakInHouse->ptr_1C;
+        if ( v36 != 78 && (v36 <= 80 || v36 > 82) )
+            {
+            if ( (unsigned int)v61 | v35 )
+                {
+                v37 = LOBYTE(v1->field_1928);
+                v38 = v1->field_1924;
+                v1->uFace = v37;
+                v1->uVoiceID = v38;
+                ReloadPlayerPortraits(uActiveCharacter - 1, (char)v37);
+                }
+            goto LABEL_63;
+            }
+        v39 = v61;
+        if ( (unsigned int)v61 | v35 )
+            {
+            LODWORD(v1->pConditions[17]) = v35;
+            }
+        else
+            {
+            if ( !v60 && !v58 && !v59 )
+                goto LABEL_63;
+            v1->field_1928 = v1->uFace;
+            v1->field_1924 = v1->uVoiceID;
+            v1->SetCondition(0x11u, 1);
+            v1->uVoiceID = (v1->GetSexByVoice() != 0) + 23;
+            v40 = (v1->GetSexByVoice() != 0) + 23;
+            v1->uFace = v40;
+            ReloadPlayerPortraits(uActiveCharacter - 1, (char)v40);
+            LODWORD(v1->pConditions[17]) = LODWORD(pParty->uTimePlayed);
+            v39 = (GUIWindow *)HIDWORD(pParty->uTimePlayed);
+            }
+        HIDWORD(v1->pConditions[17]) = (int)v39;
+LABEL_63:
+        pAudioPlayer->PlaySound((SoundID)(SOUND_GoldReceived|0x2), -1, 0, -1, 0, 0, 0, 0);
+        v1->PlaySound(SPEECH_82, 0);
+        pOtherOverlayList->_4418B1(20, uActiveCharacter + 99, 0, 65536);
+LABEL_46:
+        pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, v25);
+        return ; // void func
+        }
+    v63 = 1;
+    v41 = pDialogueWindow->GetControl(pDialogueWindow->pStartingPosActiveItem);
+    strcpy(a1, "");
+    v41->uHeight = 0;
+    v41->uY = 0;
+    if ( v1->_4B6FF9() )
+        {
+        sprintf(a1, "%s %d %s", pGlobalTXT_LocalizationStrings[104], HIDWORD(v60), pGlobalTXT_LocalizationStrings[97]);
+        v63 = 0;
+        }
+    strcpy(&a1[100], pGlobalTXT_LocalizationStrings[68]);
+    strcpy(&a1[200], pGlobalTXT_LocalizationStrings[160]);
+    v42 = v63;
+    v43 = pDialogueWindow;
+    v44 = v63;
+    v66 = 0;
+    if ( v63 < pDialogueWindow->pNumPresenceButton )
+        {
+        v61 = (GUIWindow *)&a1[100 * v63];
+        do
+            {
+            v45 = pFontArrus->CalcTextHeight((const char *)v61, &v57, 0, 0);
+            v66 = (DDM_DLV_Header *)((char *)v66 + v45);
+            v43 = pDialogueWindow;
+            v61 = (GUIWindow *)((char *)v61 + 100);
+            ++v44;
+            }
+            while ( v44 < pDialogueWindow->pNumPresenceButton );
+        }
+    v46 = v43->pNumPresenceButton - v42;
+    v64 = (174 - (signed int)v66) / v46;
+    if ( v64 > 32 )
+        v64 = 32;
+    v47 = (174 - v64 * v46 - (signed int)v66) / 2 - v64 / 2 + 138;
+    v65 = v42 + v43->pStartingPosActiveItem;
+    if ( v42 + v43->pStartingPosActiveItem < v43->pStartingPosActiveItem + v43->pNumPresenceButton )
+        {
+        v61 = (GUIWindow *)(v42 + 2);
+        v66 = (DDM_DLV_Header *)&a1[100 * v42];
+        do
+            {
+            v48 = v43->GetControl(v65);
+            v49 = (const char *)v66;
+            v50 = v48;
+            v48->uY = v64 + v47;
+            v51 = pFontArrus->CalcTextHeight(v49, &v57, 0, 0);
+            v52 = v50->uY;
+            v50->uHeight = v51;
+            v47 = v52 + v51 - 1;
+            v50->uW = v47;
+            v53 = WORD2(v59);
+            if ( (GUIWindow *)pDialogueWindow->pCurrentPosActiveItem != v61 )
+                v53 = WORD2(v58);
+            v57.DrawTitleText(pFontArrus, 0, v52, v53, (const char *)v66, 3u);
+            v43 = pDialogueWindow;
+            v66 = (DDM_DLV_Header *)((char *)v66 + 100);
+            v61 = (GUIWindow *)((char *)v61 + 1);
+            ++v65;
+            }
+            while ( (signed int)v65 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
+        }
+    return;
+    }
+
+//----- (004B4710) --------------------------------------------------------
+int __cdecl TrainingDialog()
+{
+  Player *v0; // ebx@1
+  int color2; // eax@1
+  unsigned int v2; // ecx@1
+  int v3; // eax@1
+  signed int v4; // edx@1
+  int v5; // edi@3
+  unsigned int v6; // esi@3
+  void *v7; // ecx@3
+  int v8; // edx@4
+  double v9; // st7@6
+  signed int v10; // esi@6
+  int v11; // ecx@6
+  int result; // eax@9
+  GUIWindow *v13; // edi@14
+  signed int v14; // esi@14
+  unsigned int v15; // esi@16
+  int v16; // eax@16
+  unsigned int v17; // eax@17
+  int v18; // eax@19
+  int v19; // ecx@24
+  GUIButton *v20; // eax@26
+  GUIButton *v21; // esi@26
+  int v22; // eax@26
+  const char *v23; // eax@28
+  int v24; // eax@28
+  unsigned int v25; // ecx@28
+  int v26; // eax@28
+  unsigned __int16 v27; // ax@28
+  int v28; // eax@32
+  unsigned __int16 v29; // ST14_2@34
+  int v30; // eax@34
+  const char *v31; // ST18_4@36
+  unsigned __int16 v32; // ST14_2@36
+  int v33; // eax@36
+  int v34; // eax@37
+  unsigned int v35; // edi@38
+  unsigned int v36; // eax@38
+  int v37; // ecx@41
+  char *v38; // eax@41
+  int *v39; // eax@45
+  unsigned int v40; // eax@46
+  void *v41; // ecx@46
+  unsigned int v42; // eax@46
+  GUIWindow *v43; // ecx@59
+  int v44; // edx@59
+  char **v45; // esi@60
+  int v46; // eax@62
+  int v47; // eax@68
+  int v48; // edx@69
+  int v49; // ebx@69
+  unsigned __int8 v50; // sf@69
+  char **v51; // edi@70
+  GUIButton *v52; // eax@71
+  GUIButton *v53; // esi@71
+  int v54; // eax@71
+  unsigned int v55; // ecx@71
+  int v56; // eax@71
+  unsigned __int16 v57; // ax@71
+  unsigned __int16 v58; // [sp-Ch] [bp-90h]@38
+  const char *v59; // [sp-Ch] [bp-90h]@63
+  char *v60; // [sp-8h] [bp-8Ch]@38
+  char *v61; // [sp-8h] [bp-8Ch]@63
+  unsigned int v62; // [sp-4h] [bp-88h]@38
+  int v63; // [sp-4h] [bp-88h]@52
+  char *v64; // [sp-4h] [bp-88h]@63
+  GUIWindow v65; // [sp+Ch] [bp-78h]@1
+  __int64 v66; // [sp+60h] [bp-24h]@3
+  unsigned int white; // [sp+68h] [bp-1Ch]@1
+  int v68; // [sp+6Ch] [bp-18h]@3
+  int v69; // [sp+70h] [bp-14h]@6
+  unsigned int i; // [sp+74h] [bp-10h]@1
+  int v71; // [sp+78h] [bp-Ch]@1
+  int v72; // [sp+7Ch] [bp-8h]@16
+  int v73; // [sp+80h] [bp-4h]@14
+
+  v0 = pPlayers[uActiveCharacter];
+  memcpy(&v65, window_SpeakInHouse, sizeof(v65));
+  v65.uFrameX = 483;
+  v65.uFrameWidth = 148;
+  v65.uFrameZ = 334;
+  white = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+  color2 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
+  v2 = v0->uLevel;
+  v71 = color2;
+  v3 = 0;
+  v4 = 0;
+  for ( i = v2; v4 < (signed int)v2; ++v4 )
+    v3 += v4 + 1;
+  v5 = 1000 * v3;
+  v6 = HIDWORD(v0->uExperience);
+  v7 = window_SpeakInHouse->ptr_1C;
+  v68 = (unsigned __int16)word_4F0866[(signed int)v7];
+  v66 = 1000 * v3;
+  if ( (signed __int64)__PAIR__(v6, LODWORD(v0->uExperience)) >= v66 )
+  {
+    v8 = v0->classType % 4 + 1;
+    if ( v8 == 4 )
+      v8 = 3;
+    v9 = (double)(signed int)i;
+    i = 0;
+    v69 = v8;
+    //v10 = (signed __int64)(v9 * p2DEvents_minus1__20[13 * (signed int)v7] * (double)v8);
+    v10 = (signed __int64)(v9 * p2DEvents[(signed int)v7 - 1].fPriceMultiplier * (double)v8);
+    v11 = v10 * (100 - v0->GetMerchant()) / 100;
+    if ( v11 < v10 / 3 )
+      v11 = v10 / 3;
+    i = v11;
+  }
+  result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+  if ( result )
+  {
+    if ( dialog_menu_id != 1 )
+    {
+      if ( dialog_menu_id != 17 )
+      {
+        result = dialog_menu_id - 96;
+        if ( dialog_menu_id == 96 )
+        {
+          result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+          if ( result )
+          {
+            i = 0;
+            v13 = pDialogueWindow;
+            //v14 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (unsigned int)ptr_507BC0->ptr_1C] * 500.0);
+            v14 = (signed __int64)(p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].flt_24 * 500.0);
+            v73 = v14 * (100 - v0->GetMerchant()) / 100;
+            if ( v73 < v14 / 3 )
+              v73 = v14 / 3;
+            v15 = v13->pStartingPosActiveItem;
+            v16 = v13->pNumPresenceButton;
+            v72 = 0;
+            if ( (signed int)v15 >= (signed int)(v15 + v16) )
+              goto LABEL_76;
+            do
+            {
+              v17 = v13->GetControl(v15)->uControlParam - 36;
+              if ( byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v17] && !v0->pActiveSkills[v17] )
+              {
+                v18 = pFontArrus->CalcTextHeight(pSkillNames[v17], &v65, 0, 0);
+                i += v18;
+                ++v72;
+              }
+              ++v15;
+            }
+            while ( (signed int)v15 < v13->pNumPresenceButton + v13->pStartingPosActiveItem );
+            if ( v72 )
+            {
+              sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v73);// "Skill Cost: %lu"
+              v65.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
+              v73 = (signed int)(149 - i) / v72;
+              if ( v73 > 32 )
+                v73 = 32;
+              result = v13->pStartingPosActiveItem;
+              v19 = (signed int)(149 - v72 * v73 - i) / 2 - v73 / 2 + 162;
+              i = result;
+              v68 = v19;
+              if ( result < result + v13->pNumPresenceButton )
+              {
+                v72 = 2;
+                do
+                {
+                  v20 = v13->GetControl(i);
+                  v21 = v20;
+                  v22 = v20->uControlParam - 36;
+                  if ( !byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v22] || v0->pActiveSkills[v22] )
+                  {
+                    v21->uW = 0;
+                    v21->uHeight = 0;
+                    v21->uY = 0;
+                  }
+                  else
+                  {
+                    v23 = pSkillNames[v22];
+                    v21->uY = v73 + v68;
+                    HIDWORD(v66) = (int)v23;
+                    v24 = pFontArrus->CalcTextHeight(v23, &v65, 0, 0);
+                    v25 = v21->uY;
+                    v21->uHeight = v24;
+                    v26 = v25 + v24 - 1;
+                    v21->uW = v26;
+                    v68 = v26;
+                    v27 = v71;
+                    if ( pDialogueWindow->pCurrentPosActiveItem != v72 )
+                      v27 = white;
+                    v65.DrawTitleText(pFontArrus, 0, v25, v27, (char *)HIDWORD(v66), 3u);
+                  }
+                  v28 = v13->pStartingPosActiveItem;
+                  ++i;
+                  result = v13->pNumPresenceButton + v28;
+                  ++v72;
+                }
+                while ( (signed int)i < result );
+              }
+            }
+            else
+            {
+LABEL_76:
+              sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v0->pName, pClassNames[v0->classType]);// 
+                                                // "Seek knowledge elsewhere %s the %s"
+              strcat(pTmpBuf, "\n \n");
+              strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);// "I can offer you nothing further."
+              v29 = v71;
+              v30 = pFontArrus->CalcTextHeight(pTmpBuf, &v65, 0, 0);
+              result = (int)v65.DrawTitleText(pFontArrus, 0, (174 - v30) / 2 + 138, v29, pTmpBuf, 3u);
+            }
+          }
+        }
+        return result;
+      }
+      if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+      {
+        v31 = pNPCTopics[122].pText;
+        v32 = v71;
+        v33 = pFontArrus->CalcTextHeight(pNPCTopics[122].pText, &v65, 0, 0);
+        v65.DrawTitleText(pFontArrus, 0, (212 - v33) / 2 + 101, v32, v31, 3u);
+        result = (int)pDialogueWindow;
+        pDialogueWindow->pNumPresenceButton = 0;
+        return result;
+      }
+      v34 = v0->uLevel;
+      if ( v34 < v68 )
+      {
+        if ( (signed __int64)v0->uExperience >= v66 )
+        {
+          if ( pParty->uNumGold >= i )
+          {
+            Party::TakeGold(i);
+            HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
+            ++v0->uLevel;
+            v0->uSkillPoints += v0->uLevel / 10 + 5;
+            v0->sHealth = v0->GetMaxHealth();
+            v0->sMana = v0->GetMaxMana();
+            v37 = 0;
+            v38 = byte_F8B148;
+            do
+            {
+              if ( *(int *)v38 > v37 )
+                v37 = *(int *)v38;
+              v38 += 4;
+            }
+            while ( (signed int)v38 < (signed int)word_F8B158 );
+            v39 = &dword_F8B144 + uActiveCharacter;
+            ++*v39;
+            if ( *v39 > v37 )
+            {
+              v40 = sub_494820(pParty->uCurrentHour);
+              v41 = window_SpeakInHouse->ptr_1C;
+              v42 = 60 * (v40 + 4) - pParty->uCurrentMinute;
+              if ( v41 == (void *)94 || v41 == (void *)95 )
+                v42 += 720;
+              RestAndHeal((signed int)(v42 + 10080));
+              if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor )
+                pOutdoor->SetFog();
+            }
+            v0->PlaySound(SPEECH_87, 0);
+            sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[430], v0->pName, v0->uLevel, v0->uLevel / 10 + 5);// 
+                                                // "%s is now Level %lu and has earned %lu Skill Points!"
+            ShowStatusBarString(pTmpBuf, 2u);
+            goto LABEL_56;
+          }
+          ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);// "You don't have enough gold"
+          v63 = 4;
+LABEL_55:
+          HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, v63);
+LABEL_56:
+          /*result = pMessageQueue_50CBD0->uNumMessages;
+          if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
+          {
+            pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)113;
+            pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = 1;
+            result = 3 * pMessageQueue_50CBD0->uNumMessages + 3;
+            *(&pMessageQueue_50CBD0->uNumMessages + result) = 0;
+            ++pMessageQueue_50CBD0->uNumMessages;
+          }
+          return result;*/
+          pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+          return 1; // void function actually
+        }
+        sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[538], v5 - LODWORD(v0->uExperience), v34 + 1);// 
+                                                // "You need %d more experience to train to level %d"
+        v35 = 0;
+        v62 = 3;
+        v60 = pTmpBuf;
+        v58 = v71;
+        v36 = (212 - pFontArrus->CalcTextHeight(pTmpBuf, &v65, 0, 0)) / 2 + 88;
+      }
+      else
+      {
+        sprintf(pTmpBuf, "%s\n \n%s", pGlobalTXT_LocalizationStrings[536], pGlobalTXT_LocalizationStrings[529]);// 
+                                                // ""With your skills, you should be working here as a teacher.""
+                                                // ""Sorry, but we are unable to train you.""
+        v35 = 0;
+        v62 = 3;
+        v60 = pTmpBuf;
+        v58 = v71;
+        v36 = (212 - pFontArrus->CalcTextHeight(pTmpBuf, &v65, 0, 0)) / 2 + 101;
+      }
+      v65.DrawTitleText(pFontArrus, v35, v36, v58, v60, v62);
+      v63 = 3;
+      goto LABEL_55;
+    }
+    result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+    if ( result )
+    {
+      v43 = pDialogueWindow;
+      v72 = 0;
+      pShopOptions[0] = pTmpBuf;
+      pShopOptions[1] = pGlobalTXT_LocalizationStrings[160];// "Learn Skills"
+      v44 = pDialogueWindow->pNumPresenceButton;
+      v73 = pDialogueWindow->pStartingPosActiveItem;
+      if ( v73 < v73 + v44 )
+      {
+        v45 = pShopOptions;
+        do
+        {
+          if ( v43->GetControl(v73)->uControlParam == 17 )
+          {
+            v46 = v0->uLevel;
+            if ( v46 < v68 )
+            {
+              if ( (signed __int64)v0->uExperience < v66 )
+              {
+                v64 = (char *)(v46 + 1);
+                v61 = (char *)(v5 - LODWORD(v0->uExperience));
+                v59 = pGlobalTXT_LocalizationStrings[538];// "You need %d more experience to train to level %d"
+              }
+              else
+              {
+                v64 = (char *)i;
+                v61 = (char *)(v46 + 1);
+                v59 = pGlobalTXT_LocalizationStrings[537];// "Train to level %d for %d gold"
+              }
+            }
+            else
+            {
+              v64 = pGlobalTXT_LocalizationStrings[529];// ""Sorry, but we are unable to train you.""
+              v61 = pGlobalTXT_LocalizationStrings[536];// ""With your skills, you should be working here as a teacher.""
+              v59 = "%s\n \n%s";
+            }
+            sprintf(*v45, v59, v61, v64);
+          }
+          v47 = pFontArrus->CalcTextHeight(*v45, &v65, 0, 0);
+          v43 = pDialogueWindow;
+          v72 += v47;
+          ++v45;
+          ++v73;
+        }
+        while ( v73 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
+      }
+      HIDWORD(v66) = (174 - v72) / 2;
+      result = v43->pStartingPosActiveItem;
+      v48 = result + v43->pNumPresenceButton;
+      v49 = (2 * (87 - (174 - v72) / 2) - v72) / 2 - (174 - v72) / 2 / 2 + 138;
+      v50 = -v43->pNumPresenceButton < 0;
+      v73 = v43->pStartingPosActiveItem;
+      if ( v50 ^ __OFSUB__(result, v48) )
+      {
+        i = 2;
+        v51 = pShopOptions;
+        do
+        {
+          v52 = v43->GetControl(v73);
+          v53 = v52;
+          v52->uY = HIDWORD(v66) + v49;
+          v54 = pFontArrus->CalcTextHeight(*v51, &v65, 0, 0);
+          v55 = v53->uY;
+          v53->uHeight = v54;
+          v56 = v54 + v55 - 1;
+          v53->uW = v56;
+          v49 = v56;
+          v57 = v71;
+          if ( pDialogueWindow->pCurrentPosActiveItem != i )
+            v57 = white;
+          v65.DrawTitleText(pFontArrus, 0, v55, v57, *v51, 3u);
+          v43 = pDialogueWindow;
+          ++i;
+          ++v51;
+          ++v73;
+          result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
+        }
+        while ( v73 < result );
+      }
+    }
+  }
+  return result;
+}
+
+
+
+
+
+
+
+
+
+//----- (004B4FCF) --------------------------------------------------------
+void MagicShopDialog()
+    {
+  Player *v0; // ebx@1
+  int result; // eax@6
+  signed int v2; // esi@8
+  unsigned int v3; // ebx@10
+  char *v4; // eax@11
+  char *v5; // eax@12
+  unsigned int v6; // eax@12
+  int v7; // ST08_4@14
+  int v8; // eax@14
+  unsigned __int8 v9; // dl@14
+  char *v10; // ecx@14
+  signed int v11; // esi@16
+  int v12; // ST08_4@19
+  int v13; // eax@19
+  int all_text_height; // edi@21
+  char **v15; // esi@21
+  int v16; // eax@22
+  GUIWindow *v17; // ecx@23
+  int v18; // edx@23
+  int v19; // edi@23
+  unsigned __int8 v20; // sf@23
+  GUIButton *control_button; // esi@25
+  const char **v22; // eax@25
+  int v23; // eax@25
+  unsigned int v24; // ecx@25
+  const char **v25; // edx@25
+  unsigned __int16 text_color; // ax@25
+  signed int v27; // esi@30
+  int v28; // ST08_4@34
+  int v29; // eax@34
+  char *v30; // edx@35
+  GUIWindow *v31; // edi@40
+  void *v32; // eax@40
+  signed int v33; // esi@40
+  unsigned int v34; // esi@42
+  int v35; // eax@42
+  unsigned int v36; // eax@43
+  int v37; // eax@45
+  int v38; // ecx@50
+  GUIButton *v39; // eax@52
+  GUIButton *v40; // esi@52
+  int v41; // eax@52
+  char *v42; // eax@54
+  int v43; // eax@54
+  unsigned int v44; // ecx@54
+  int v45; // edx@54
+  int v46; // eax@54
+  unsigned __int16 v47; // ax@54
+  int v48; // eax@58
+  signed int v49; // esi@62
+  Texture *v50; // ecx@64
+  unsigned int v51; // edi@64
+  unsigned int v52; // esi@66
+  int v53; // edx@70
+  Texture *v54; // ecx@76
+  unsigned int v55; // edi@76
+  unsigned int v56; // esi@76
+  int v57; // edx@80
+  Texture *v58; // ecx@86
+  unsigned int v59; // edi@86
+  unsigned int v60; // esi@88
+  int v61; // edx@92
+  Texture *v62; // ecx@98
+  unsigned int v63; // edi@98
+  unsigned int v64; // esi@100
+  int v65; // edx@104
+  signed int v66; // ecx@109
+  SHORT v67; // di@117
+  bool v68; // eax@117
+  const char *v69; // ecx@119
+  POINT *v70; // esi@124
+  int v71; // ecx@125
+  int v72; // eax@125
+  int v73; // ecx@125
+  ItemGen *v74; // esi@125
+  int v75; // eax@130
+  int v76; // esi@131
+  char **v77; // edi@131
+  int v78; // eax@132
+  GUIWindow *v79; // ecx@133
+  int v80; // edx@133
+  int v81; // edi@133
+  GUIButton *v82; // esi@135
+  const char **v83; // eax@135
+  int v84; // eax@135
+  unsigned int v85; // ecx@135
+  int v86; // edx@135
+  unsigned __int16 v87; // ax@135
+  GUIWindow *v88; // [sp-18h] [bp-110h]@35
+  int v89; // [sp-14h] [bp-10Ch]@35
+  ItemGen *v90; // [sp-10h] [bp-108h]@14
+  int v91; // [sp-10h] [bp-108h]@35
+  unsigned __int16 v92; // [sp-Ch] [bp-104h]@12
+  void *v93; // [sp-Ch] [bp-104h]@14
+  int v94; // [sp-8h] [bp-100h]@11
+  char *v95; // [sp-8h] [bp-100h]@12
+  __int64 *v96; // [sp-4h] [bp-FCh]@11
+  unsigned int v97; // [sp-4h] [bp-FCh]@12
+  POINT v98; // [sp+Ch] [bp-ECh]@8
+  POINT v99; // [sp+14h] [bp-E4h]@16
+  POINT v100; // [sp+1Ch] [bp-DCh]@124
+  POINT v101; // [sp+24h] [bp-D4h]@17
+  POINT v102; // [sp+2Ch] [bp-CCh]@124
+  POINT v103; // [sp+34h] [bp-C4h]@9
+  POINT v104; // [sp+3Ch] [bp-BCh]@31
+  POINT v105; // [sp+44h] [bp-B4h]@16
+  POINT v106; // [sp+4Ch] [bp-ACh]@30
+  POINT v107; // [sp+54h] [bp-A4h]@16
+  POINT v108; // [sp+5Ch] [bp-9Ch]@30
+  POINT a2; // [sp+64h] [bp-94h]@8
+  POINT v110; // [sp+6Ch] [bp-8Ch]@30
+  POINT v111; // [sp+74h] [bp-84h]@8
+  GUIWindow dialog_window; // [sp+7Ch] [bp-7Ch]@1
+  char *Str; // [sp+D0h] [bp-28h]@54
+  int v146; // [sp+D4h] [bp-24h]@23
+  unsigned int hilight_color; // [sp+D8h] [bp-20h]@1
+  unsigned int m_text_color; // [sp+DCh] [bp-1Ch]@1
+  __int32 v117; // [sp+E0h] [bp-18h]@8
+  int v118; // [sp+E4h] [bp-14h]@40
+  const char **v119; // [sp+E8h] [bp-10h]@24
+  Player *_this; // [sp+ECh] [bp-Ch]@1
+  unsigned __int8 uPlayerID; // [sp+F3h] [bp-5h]@14
+  int v152; // [sp+F4h] [bp-4h]@23
+  int v122;
+  int v114;
+
+  v0 = pPlayers[uActiveCharacter];
+  _this = pPlayers[uActiveCharacter];
+  memcpy(&dialog_window, window_SpeakInHouse, sizeof(dialog_window));
+  dialog_window.uFrameX = 483;
+  dialog_window.uFrameWidth = 148;
+  dialog_window.uFrameZ = 334;
+  m_text_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
+  hilight_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
+  if ( dialog_menu_id > 5 )
+  {
+    if ( dialog_menu_id == 94 )
+    {
+      draw_leather();
+      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+      pShopOptions[0] = pGlobalTXT_LocalizationStrings[200];// "Sell"
+      pShopOptions[1] = pGlobalTXT_LocalizationStrings[113];// "Identify"
+      pShopOptions[2] = pGlobalTXT_LocalizationStrings[179];// "Repair"
+      v76 = 0;
+      v77 = pShopOptions;
+      do
+      {
+        v78 = pFontArrus->CalcTextHeight(*v77, &dialog_window, 0, 0);
+        ++v77;
+        v76 += v78;
+      }
+      while ( (signed int)v77 < (signed int)&pShopOptions[3] );
+      v79 = pDialogueWindow;
+      _this = (Player *)((174 - v76) / 3);
+      result = pDialogueWindow->pStartingPosActiveItem;
+      v80 = result + pDialogueWindow->pNumPresenceButton;
+      v81 = (3 * (58 - (signed int)_this) - v76) / 2 - (174 - v76) / 3 / 2 + 138;
+      v20 = -pDialogueWindow->pNumPresenceButton < 0;
+      v118 = pDialogueWindow->pStartingPosActiveItem;
+      if ( v20 ^ __OFSUB__(result, v80) )
+      {
+        v122 = 2;
+        v119 = (const char **)pShopOptions;
+        do
+        {
+          v82 = v79->GetControl(v118);
+          v83 = v119;
+          v82->uY = (unsigned int)((char *)_this + v81);
+          v84 = pFontArrus->CalcTextHeight(*v83, &dialog_window, 0, 0);
+          v85 = v82->uY;
+          v86 = v122;
+          v82->uHeight = v84;
+          v81 = v84 + v85 - 1;
+          v82->uW = v81;
+          v87 = hilight_color;
+          if ( pDialogueWindow->pCurrentPosActiveItem != v86 )
+            v87 = m_text_color;
+          dialog_window.DrawTitleText(pFontArrus, 0, v85, v87, *v119, 3u);
+          v79 = pDialogueWindow;
+          ++v122;
+          ++v119;
+          ++v118;
+          result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
+        }
+        while ( v118 < result );
+      }
+      return;
+    }
+    if ( dialog_menu_id != 95 )
+    {
+      result = dialog_menu_id - 96;
+      if ( dialog_menu_id == 96 )
+      {
+        result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+        if ( result )
+        {
+          v31 = pDialogueWindow;
+          v3 = 0;
+          v32 = window_SpeakInHouse->ptr_1C;
+          v118 = 0;
+            //v33 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (signed int)v32] * 500.0);
+            v33 = (signed __int64)(p2DEvents[(signed int)v32 - 1].flt_24 * 500.0);
+          v119 = (const char **)(v33 * (100 - _this->GetMerchant()) / 100);
+          if ( (signed int)v119 < v33 / 3 )
+            v119 = (const char **)(v33 / 3);
+          v34 = v31->pStartingPosActiveItem;
+          v35 = v34 + v31->pNumPresenceButton;
+          v122 = 0;
+          if ( (signed int)v34 >= v35 )
+            goto LABEL_140;
+          do
+          {
+            v36 = v31->GetControl(v34)->uControlParam - 36;
+            if ( byte_4ED970_skill_learn_ability_by_class_table[_this->classType][v36] && !_this->pActiveSkills[v36] )
+            {
+              v37 = pFontArrus->CalcTextHeight(pSkillNames[v36], &dialog_window, 0, 0);
+              v118 += v37;
+              ++v122;
+            }
+            ++v34;
+          }
+          while ( (signed int)v34 < v31->pNumPresenceButton + v31->pStartingPosActiveItem );
+          if ( !v122 )
+          {
+LABEL_140:
+            sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], _this->pName, pClassNames[_this->classType]);// 
+                                                // "Seek knowledge elsewhere %s the %s"
+            strcat(pTmpBuf, "\n \n");
+            strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);// "I can offer you nothing further."
+            v30 = pTmpBuf;
+            v97 = 3;
+            v95 = pTmpBuf;
+            v92 = hilight_color;
+            v91 = 0;
+            v89 = 0;
+            v88 = &dialog_window;
+            goto LABEL_61;
+          }
+          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v119);// "Skill Cost: %lu"
+          dialog_window.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
+          v119 = (const char **)((149 - v118) / v122);
+          if ( (149 - v118) / v122 > 32 )
+            v119 = (const char **)32;
+          result = v31->pStartingPosActiveItem;
+          v38 = (149 - v122 * (signed int)v119 - v118) / 2 - (signed int)v119 / 2 + 162;
+          v118 = result;
+          v114 = v38;
+          if ( result < result + v31->pNumPresenceButton )
+          {
+            v122 = 2;
+            do
+            {
+              v39 = v31->GetControl(v118);
+              v40 = v39;
+              v41 = v39->uControlParam - 36;
+              if ( !byte_4ED970_skill_learn_ability_by_class_table[_this->classType][v41] || _this->pActiveSkills[v41] )
+              {
+                v40->uW = 0;
+                v40->uHeight = 0;
+                v40->uY = 0;
+              }
+              else
+              {
+                v42 = pSkillNames[v41];
+                v40->uY = (unsigned int)((char *)v119 + v114);
+                Str = v42;
+                v43 = pFontArrus->CalcTextHeight(v42, &dialog_window, 0, 0);
+                v44 = v40->uY;
+                v45 = v122;
+                v40->uHeight = v43;
+                v46 = v44 + v43 - 1;
+                v40->uW = v46;
+                v114 = v46;
+                v47 = hilight_color;
+                if ( pDialogueWindow->pCurrentPosActiveItem != v45 )
+                  v47 = m_text_color;
+                dialog_window.DrawTitleText(pFontArrus, 0, v44, v47, Str, 3u);
+              }
+              v48 = v31->pStartingPosActiveItem;
+              ++v118;
+              result = v31->pNumPresenceButton + v48;
+              ++v122;
+            }
+            while ( v118 < result );
+          }
+        }
+      }
+      return;
+    }
+  }
+  else
+  {
+    if ( dialog_menu_id == 5 )
+    {
+      draw_leather();
+      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+      DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[198], 0);// "Select the Item to Repair"
+      result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+      if ( !result
+        || (v27 = pMouse->GetCursorPos(&v110)->x - 14,
+            v117 = (v27 >> 5) + 14 * ((pMouse->GetCursorPos(&v108)->y - 17) >> 5),
+            result = (int)pMouse->GetCursorPos(&v106),
+            *(int *)result <= 13)
+        || (result = (int)pMouse->GetCursorPos(&v104), *(int *)result >= 462)
+        || (result = v0->GetItemIDAtInventoryIndex((int *)&v117), v3 = 0, !result)
+        || (result *= 9, !(_this->field_1F5[4 * result + 15] & 2)) )
+        return;
+      v96 = 0;
+      v94 = 5;
+      v93 = window_SpeakInHouse->ptr_1C;
+      v90 = (ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * result + 5];
+      v28 = (int)window_SpeakInHouse->ptr_1C;
+      uPlayerID = uActiveCharacter - 1;
+      v29 = _this->_490EEE((ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * result + 5], 3, v28, 5);
+      v9 = uPlayerID;
+      v10 = (char *)pMerchantsRepairPhrases[v29];
+      goto LABEL_35;
+    }
+    if ( dialog_menu_id == 1 )
+    {
+     /* result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+      if ( result )
+      {
+        pShopOptions[0] = pGlobalTXT_LocalizationStrings[134];// "Buy Standard"
+        pShopOptions[1] = pGlobalTXT_LocalizationStrings[152];// "Buy Special"
+        pShopOptions[2] = pGlobalTXT_LocalizationStrings[159];// "Display Inventory"
+        v14 = 0;
+        pShopOptions[3] = pGlobalTXT_LocalizationStrings[160];// "Learn Skills"
+        v15 = pShopOptions;
+        do
+        {
+          v16 = pFontArrus->CalcTextHeight(*v15, &dialogue_window, 0, 0);
+          ++v15;
+          v14 += v16;
+        }
+        while ( (signed int)v15 < (signed int)&unk_F8B1C8 );
+        v17 = pDialogueWindow;
+        v114 = (174 - v14) / 4;
+        result = pDialogueWindow->pStartingPosActiveItem;
+        v18 = result + pDialogueWindow->pNumPresenceButton;
+        v19 = (174 - 4 * (174 - v14) / 4 - v14) / 2 - (174 - v14) / 4 / 2 + 138;
+        v20 = -pDialogueWindow->pNumPresenceButton < 0;
+        v122 = pDialogueWindow->pStartingPosActiveItem;
+        if ( v20 ^ __OFSUB__(result, v18) )
+        {
+          v119 = (const char **)2;
+          _this = (Player *)pShopOptions;
+          do
+          {
+            v21 = v17->GetControl(v122);
+            v22 = (const char **)_this;
+            v21->uY = v114 + v19;
+            v23 = pFontArrus->CalcTextHeight(*v22, &dialogue_window, 0, 0);
+            v24 = v21->uY;
+            v25 = v119;
+            v21->uHeight = v23;
+            v19 = v24 + v23 - 1;
+            v21->uW = v19;
+            v26 = color2;
+            if ( (const char **)pDialogueWindow->pCurrentPosActiveItem != v25 )
+              v26 = m_text_color;
+            dialogue_window.DrawTitleText(pFontArrus, 0, v24, v26, (const char *)LODWORD(_this->pConditions[0]), 3u);
+            v17 = pDialogueWindow;
+            v119 = (const char **)((char *)v119 + 1);
+            _this = (Player *)((char *)_this + 4);
+            ++v122;
+            result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
+          }
+          while ( v122 < result );
+        }
+      }*/
+    if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
+        return;
+    pShopOptions[0] = pGlobalTXT_LocalizationStrings[134]; //"Buy Standard"
+    pShopOptions[1] = pGlobalTXT_LocalizationStrings[152]; //"Buy Special"
+    pShopOptions[2] = pGlobalTXT_LocalizationStrings[159]; //"Display Inventory"
+    pShopOptions[3] = pGlobalTXT_LocalizationStrings[160];
+
+    all_text_height = 0;
+    for(int i=0;i<4;++i)
+        all_text_height += pFontArrus->CalcTextHeight(pShopOptions[i], &dialog_window, 0, 0);
+    v146 = (174 - all_text_height) / 4;
+
+    v23 = (174 - 4 * (174 - all_text_height) / 4 - all_text_height) / 2 - (174 - all_text_height) / 4 / 2 + 138;
+    int j=0;
+    if ( pDialogueWindow->pNumPresenceButton>=0 )
+        {
+       int th = 2;
+        for (v152 = pDialogueWindow->pStartingPosActiveItem; v152 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;  ++v152)
+            {
+            control_button = pDialogueWindow->GetControl(v152);
+            control_button->uY = v146 + v23;
+            v27 = pFontArrus->CalcTextHeight(pShopOptions[j], &dialog_window, 0, 0);
+            control_button->uHeight = v27;
+            v23 = control_button->uY + control_button->uHeight - 1;
+            control_button->uW = v23;
+            text_color = hilight_color;
+            if ( pDialogueWindow->pCurrentPosActiveItem != th )
+                text_color = m_text_color;
+            dialog_window.DrawTitleText(pFontArrus, 0, control_button->uY, text_color, pShopOptions[j], 3);
+            ++th;               
+            ++j;
+            }
+        }
+        
+
+      return;
+    }
+    if ( dialog_menu_id != 2 )
+    {
+      if ( dialog_menu_id != 3 )
+      {
+        result = dialog_menu_id - 4;
+        if ( dialog_menu_id == 4 )
+        {
+          draw_leather();
+          CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+          DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0);// "Select the Item to Identify"
+          result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+          if ( result )
+          {
+            v2 = pMouse->GetCursorPos(&a2)->x - 14;
+            v117 = (v2 >> 5) + 14 * ((pMouse->GetCursorPos(&v98)->y - 17) >> 5);
+            result = (int)pMouse->GetCursorPos(&v111);
+            if ( *(int *)result > 13 )
+            {
+              result = (int)pMouse->GetCursorPos(&v103);
+              if ( *(int *)result < 462 )
+              {
+                result = v0->GetItemIDAtInventoryIndex((int *)&v117);
+                v3 = 0;
+                if ( result )
+                {
+                  v96 = 0;
+                  v94 = 4;
+                  v4 = (char *)&_this->pInventoryItems[result-1];
+                  if ( v4[20] & 1 )
+                  {
+                    v5 = BuilDialogueString("%24", uActiveCharacter - 1, (ItemGen *)v4, (char *)window_SpeakInHouse->ptr_1C, 4, 0);
+                    v97 = 3;
+                    v95 = v5;
+                    v92 = m_text_color;
+                    v6 = (212 - pFontArrus->CalcTextHeight(v5, &dialog_window, 0, 0)) / 2 + 101;
+                   
+                       dialog_window.DrawTitleText(pFontArrus, v3, v6, v92, v95, v97); 
+                       return;
+                  }
+                  v93 = window_SpeakInHouse->ptr_1C;
+                  v90 = (ItemGen *)v4;
+                  v7 = (int)window_SpeakInHouse->ptr_1C;
+                  uPlayerID = uActiveCharacter - 1;
+                  v8 = ((Player *)_this)->_490EEE((ItemGen *)v4, 3, v7, 4);
+                  v9 = uPlayerID;
+                  v10 = (char *)pMerchantsIdentifyPhrases[v8];
+                  goto LABEL_35;
+                }
+              }
+            }
+          }
+        }
+        return;
+      }
+      draw_leather();
+      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
+      DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0);// "Select the Item to Sell"
+      result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+      if ( !result
+        || (v11 = pMouse->GetCursorPos(&v107)->x - 14,
+            v117 = (v11 >> 5) + 14 * ((pMouse->GetCursorPos(&v99)->y - 17) >> 5),
+            result = (int)pMouse->GetCursorPos(&v105),
+            *(int *)result <= 13)
+        || (result = (int)pMouse->GetCursorPos(&v101), *(int *)result >= 462)
+        || (result = v0->GetItemIDAtInventoryIndex((int *)&v117), v3 = 0, !result) )
+        return;
+      v96 = 0;
+      v94 = 3;
+      v93 = window_SpeakInHouse->ptr_1C;
+      v90 = (ItemGen *)&_this->pInventoryItems[result-1];
+      v12 = (int)window_SpeakInHouse->ptr_1C;
+      uPlayerID = uActiveCharacter - 1;
+      v13 = _this->_490EEE(v90, 3, v12, 3);
+      v9 = uPlayerID;
+      v10 = (char *)pMerchantsSellPhrases[v13];
+LABEL_35:
+      v30 = BuilDialogueString(v10, v9, v90, (char *)v93, v94, v96);
+      v97 = 3;
+      v95 = v30;
+      v92 = m_text_color;
+      v91 = v3;
+      v89 = v3;
+      v88 = &dialog_window;
+LABEL_61:
+      v6 = (174 - pFontArrus->CalcTextHeight(v30, v88, v89, v91)) / 2 + 138;
+      dialog_window.DrawTitleText(pFontArrus, v3, v6, v92, v95, v97);
+      return;
+    }
+  }
+  pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
+  v3 = 0;
+  v49 = 0;
+  v122 = 0;
+  if ( dialog_menu_id == 2 )
+  {
+    do
+    {
+     // if ( pParty->field_777C[9 * (v49 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] )
+	 if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v49].uItemID);
+      {
+        v50 = ItemsInShopTexture[v49];
+        v51 = 152 - v50->uTextureHeight;
+        if ( (signed int)v51 < 1 )
+          v51 = 0;
+        v52 = 75 * v49 - v50->uTextureWidth / 2 + 40;
+        if ( v122 )
+        {
+          if ( v122 == 5 )
+          {
+            v53 = ItemsInShopTexture[5]->uTextureWidth;
+            if ( (signed int)v52 > 457 - v53 )
+              v52 = 457 - v53;
+          }
+        }
+        else
+        {
+          if ( (signed int)v52 < 18 )
+            v52 = 18;
+        }
+        pRenderer->DrawTextureTransparent(v52, v51, v50);
+        sub_40F92A(&pRenderer->pActiveZBuffer[v52 + 640 * v51], ItemsInShopTexture[v122], v122 + 1);
+        v49 = v122;
+      }
+      ++v49;
+      v122 = v49;
+    }
+    while ( v49 < 6 );
+    v122 = 0;
+    do
+    {
+      //if ( pParty->field_777C[9 * (v122 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 54] )
+	if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v122+1].uItemID);
+      {
+        v54 = ItemsInShopTexture[v122 + 6];
+        v55 = 306 - v54->uTextureHeight;
+        v56 = 75 * v122 - v54->uTextureWidth / 2 + 40;
+        if ( v122 )
+        {
+          if ( v122 == 5 )
+          {
+            v57 = ItemsInShopTexture[11]->uTextureWidth;
+            if ( (signed int)v56 > 457 - v57 )
+              v56 = 457 - v57;
+          }
+        }
+        else
+        {
+          if ( (signed int)v56 < 18 )
+            v56 = 18;
+        }
+        pRenderer->DrawTextureTransparent(v56, v55, v54);
+        sub_40F92A(&pRenderer->pActiveZBuffer[v56 + 640 * v55], ItemsInShopTexture[v122 + 6], v122 + 7);
+      }
+      ++v122;
+    }
+    while ( v122 < 6 );
+  }
+  else
+  {
+    do
+    {
+     // if ( pParty->field_C59C[9 * (v49 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
+	if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v49].uItemID)
+      {
+        v58 = ItemsInShopTexture[v49];
+        v59 = 152 - v58->uTextureHeight;
+        if ( (signed int)v59 < 1 )
+          v59 = 0;
+        v60 = 75 * v49 - v58->uTextureWidth / 2 + 40;
+        if ( v122 )
+        {
+          if ( v122 == 5 )
+          {
+            v61 = ItemsInShopTexture[5]->uTextureWidth;
+            if ( (signed int)v60 > 457 - v61 )
+              v60 = 457 - v61;
+          }
+        }
+        else
+        {
+          if ( (signed int)v60 < 18 )
+            v60 = 18;
+        }
+        pRenderer->DrawTextureTransparent(v60, v59, v58);
+        sub_40F92A(&pRenderer->pActiveZBuffer[v60 + 640 * v59], ItemsInShopTexture[v122], v122 + 1);
+        v49 = v122;
+      }
+      ++v49;
+      v122 = v49;
+    }
+    while ( v49 < 6 );
+    v122 = 0;
+    do
+    {
+      //if ( pParty->Spell_Item[(unsigned int)window_SpeakInHouse->ptr_1C][v49] + 778] )  //weak
+		if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v49].uAttributes)
+      {
+        v62 = ItemsInShopTexture[v122 + 6];
+        v63 = 306 - v62->uTextureHeight;
+        if ( (signed int)v63 < 1 )
+          v63 = 0;
+        v64 = 75 * v122 - v62->uTextureWidth / 2 + 40;
+        if ( v122 )
+        {
+          if ( v122 == 5 )
+          {
+            v65 = ItemsInShopTexture[11]->uTextureWidth;
+            if ( (signed int)v64 > 457 - v65 )
+              v64 = 457 - v65;
+          }
+        }
+        else
+        {
+          if ( (signed int)v64 < 18 )
+            v64 = 18;
+        }
+        pRenderer->DrawTextureTransparent(v64, v63, v62);
+        sub_40F92A(&pRenderer->pActiveZBuffer[v64 + 640 * v63], ItemsInShopTexture[v122 + 6], v122 + 7);
+      }
+      ++v122;
+    }
+    while ( v122 < 6 );
+  }
+  result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
+  if ( result )
+  {
+    v66 = 0;
+    v117 = 0;
+    if ( dialog_menu_id == 2 )
+    {
+      do
+      {
+        if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v66].uItemID); //9 * (v66 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] )
+          ++v117;
+        ++v66;
+      }
+      while ( v66 < 12 );
+    }
+    else
+    {
+      do
+      {
+        //if ( pParty->field_C59C[9 * (v66 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
+	  if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v66].uItemID)
+          ++v117;
+        ++v66;
+      }
+      while ( v66 < 12 );
+    }
+    v67 = GetAsyncKeyState(VK_CONTROL);
+    v68 = _this->CanSteal();
+    Str = (char *)v68;
+    if ( v67 && v68 )
+    {
+      v69 = pGlobalTXT_LocalizationStrings[185];// "Steal item"
+    }
+    else
+    {
+      v69 = pGlobalTXT_LocalizationStrings[195];// "Select the Item to Buy"
+      if ( dialog_menu_id != 2 )
+        v69 = pGlobalTXT_LocalizationStrings[196];// "Select the Special Item to Buy"
+    }
+    DrawTextAtStatusBar(v69, 0);
+    if ( !v117 )
+		{
+      dialog_window.DrawCurrentTime( pParty->field_3C.field_50[(unsigned int)window_SpeakInHouse->ptr_1C] - pParty->uTimePlayed);
+	  return;
+		}
+    v70 = pMouse->GetCursorPos(&v102);
+    result = v70->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v100)->y];
+    if ( pRenderer->pActiveZBuffer[result] & 0xFFFF )
+    {
+      v71 = (pRenderer->pActiveZBuffer[result] & 0xFFFF) - 1;
+      v117 = v71;
+      v72 = (int)window_SpeakInHouse->ptr_1C;
+     // v73 = 9 * (v71 + 12 * v72);
+      v74 = (ItemGen *)&pParty->StandartItemsInShops[v72][v71];
+      if ( dialog_menu_id != 2 )
+       // v74 = (ItemGen *)&pParty->field_C59C[v73 + 724];
+	      v74 =&pParty->SpecialItemsInShops[v72][v71];
+      if ( v67 && Str )
+      {
+        v10 = pGlobalTXT_LocalizationStrings[181];// "Steal %24"
+        v96 = 0;
+        v94 = 2;
+        v93 = window_SpeakInHouse->ptr_1C;
+        v90 = v74;
+        v9 = uActiveCharacter - 1;
+      }
+      else
+      {
+        v96 = 0;
+        v94 = 2;
+        v93 = window_SpeakInHouse->ptr_1C;
+        v90 = v74;
+        uPlayerID = uActiveCharacter - 1;
+        v75 = _this->_490EEE(v74, 3, v72, 2);
+        v9 = uPlayerID;
+        v10 = (char *)pMerchantsBuyPhrases[v75];
+      }
+      goto LABEL_35;
+    }
+  }
+  return;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UIHouses.h	Mon Mar 11 03:38:59 2013 +0200
@@ -0,0 +1,48 @@
+#pragma once
+
+#include "stru159.h"
+
+enum DIALOG_MENU
+    {
+    DIALOG_SHOP_MAIN = 1,
+    DIALOG_SHOP_BUY_STANDART = 2,
+    DIALOG_SHOP_SELL = 3,
+    DIALOG_SHOP_IDENTIFY = 4,
+    DIALOG_SHOP_REPAIR = 5,
+    DIALOG_SHOP_DISPLAY_EQUIPMENT = 94,
+    DIALOG_SHOP_BUY_SPECIAL = 95,
+    DIALOG_SHOP_SKILLS = 96,
+    };
+
+/*  349 */
+enum HOUSE_ID
+    {
+    HOUSE_SMITH_EMERALD_ISLE = 1,
+    HOUSE_BODY_GUILD_NOVICE_EMERALD_ISLE = 163,
+    HOUSE_BODY_GUILD_ERATHIA = 165,
+    HOUSE_DARK_GUILD_PIT = 170,
+    HOUSE_LORD_AND_JUDGE = 186,
+    HOUSE_JAIL = 187,
+    HOUSE_600 = 600,//???
+    HOUSE_601 = 601//???
+    };
+
+int __cdecl TrainingDialog();
+char *__cdecl JailDialog();
+void  MagicShopDialog();
+void  GuildDialog();
+int __cdecl sub_4B6478();
+bool __fastcall sub_4B68EA(int a1);
+void __cdecl TravelByTransport();
+void TempleDialog();
+void __cdecl TownHallDialog();
+void __cdecl BankDialog();
+void __cdecl TavernDialog();
+void __fastcall HousePlaySomeSound(unsigned int uHouseID, int a2); // idb
+void __cdecl WeaponShopDialog();
+void __cdecl AlchemistDialog();
+void __cdecl ArmorShopDialog();
+
+extern int uHouse_ExitPic; // weak
+extern int dword_591080; // weak
+ extern  const stru159 pAnimatedRooms[196];
--- a/VideoPlayer.cpp	Mon Mar 11 03:37:48 2013 +0200
+++ b/VideoPlayer.cpp	Mon Mar 11 03:38:59 2013 +0200
@@ -12,7 +12,7 @@
 #include "Allocator.h"
 #include "Time.h"
 #include "Log.h"
-
+#include "UIHouses.h"
 #include "MM7.h"
 #include "mm7_data.h"
 
--- a/mm7_2.cpp	Mon Mar 11 03:37:48 2013 +0200
+++ b/mm7_2.cpp	Mon Mar 11 03:38:59 2013 +0200
@@ -51,3000 +51,13 @@
 #include "Events2D.h"
 #include "stru159.h"
 #include "Log.h"
+#include "UIHouses.h"
 #include "texts.h"
 
 #include "mm7_data.h"
 #include "MM7.h"
 
 
-//----- (004B4F4F) --------------------------------------------------------
-char *__cdecl JailDialog()
-{
-  const char *v0; // esi@1
-  const char *v1; // ST10_4@1
-  unsigned __int16 v2; // ST0C_2@1
-  int v3; // eax@1
-  GUIWindow v5; // [sp+8h] [bp-54h]@1
-
-  memcpy(&v5, window_SpeakInHouse, sizeof(v5));
-  v0 = pGlobalTXT_LocalizationStrings[672];
-  v1 = pGlobalTXT_LocalizationStrings[672];
-  v5.uFrameX = 483;
-  v5.uFrameWidth = 148;
-  v5.uFrameZ = 334;
-  v2 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-  v3 = pFontArrus->CalcTextHeight(v0, &v5, 0, 0);
-  return v5.DrawTitleText(pFontArrus, 0, (310 - v3) / 2 + 18, v2, v1, 3u);
-}
-
-
-
-//----- (004B68EA) --------------------------------------------------------
-bool __fastcall sub_4B68EA(int a1)
-{
-  signed int v1; // edi@1
-  int *v2; // esi@1
-  int v3; // ecx@2
-
-  v1 = 0;
-  v2 = &dword_4F0E10[a1];
-  while ( 1 )
-  {
-    v3 = 8 * *((char *)v2 + v1);
-    if ( *(&byte_4F09B1[pParty->uDaysPlayed % 7] + v3 * 4) )
-    {
-      if ( !dword_4F09CC[v3] || (unsigned __int16)_449B57_test_bit(pParty->_quest_bits, LOWORD(dword_4F09CC[v3])) )
-        break;
-    }
-    ++v1;
-    if ( v1 >= 4 )
-      return 0;
-  }
-  return 1;
-}
-
-
-
-//----- (004B7911) --------------------------------------------------------
-void __cdecl TownHallDialog()
-{
-  GUIWindow *v0; // eax@4
-  int v1; // eax@10
-  int v2; // esi@10
-  GUIFont *v3; // ST20_4@20
-  int v4; // eax@20
-  MonsterInfo *v5; // edi@21
-  unsigned int v6; // ST20_4@21
-  char *v7; // ST1C_4@21
-  unsigned int v8; // eax@21
-  int v9; // esi@21
-  char *v10; // eax@23
-  signed int v11; // ebx@24
-  signed int i; // esi@26
-  int v13; // eax@27
-  GUIWindow *v14; // ecx@28
-  __int64 v15; // qax@28
-  signed int v16; // ebx@28
-  int v17; // ebx@28
-  unsigned __int8 v18; // sf@28
-  char **v19; // edi@29
-  GUIButton *v20; // eax@30
-  GUIButton *v21; // esi@30
-  int v22; // eax@30
-  unsigned int v23; // ecx@30
-  unsigned __int16 v24; // ax@30
-  GUIWindow a1; // [sp+Ch] [bp-110h]@21
-  GUIWindow w; // [sp+60h] [bp-BCh]@21
-  GUIWindow _this; // [sp+B4h] [bp-68h]@1
-  int v28; // [sp+108h] [bp-14h]@1
-  int v29; // [sp+10Ch] [bp-10h]@28
-  int v30; // [sp+110h] [bp-Ch]@1
-  int v31; // [sp+114h] [bp-8h]@29
-  GUIFont *pOutString; // [sp+118h] [bp-4h]@21
-
-  memcpy(&_this, window_SpeakInHouse, sizeof(_this));
-  _this.uFrameX = 483;
-  _this.uFrameWidth = 148;
-  _this.uFrameZ = 334;
-  v28 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-  v30 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-  sprintf(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[605], pParty->uFine);
-  _this.DrawTitleText(pFontArrus, 0, 0x104u, v30, pTmpBuf, 3u);
-  switch(dialog_menu_id)
-  {
-	case 1:
-		{
-		v11 = 1;
-		pOutString = 0;
-		pShopOptions[0] = pGlobalTXT_LocalizationStrings[604];
-		if ( pParty->uFine )
-		{
-			pShopOptions[1] = pGlobalTXT_LocalizationStrings[603];
-			v11 = 2;
-		}
-		for ( i = 0; i < v11; ++i )
-		{
-			v13 = pFontArrus->CalcTextHeight(pShopOptions[i], &_this, 0, 0);
-			pOutString = (GUIFont *)((char *)pOutString + v13);
-		}
-		v29 = (100 - (signed int)pOutString) / v11;
-		v14 = pDialogueWindow;
-		v15 = 80 - v11 * (100 - (signed int)pOutString) / v11 - (signed int)pOutString;
-		v16 = v15 - HIDWORD(v15);
-		LODWORD(v15) = pDialogueWindow->pStartingPosActiveItem;
-		HIDWORD(v15) = v15 + pDialogueWindow->pNumPresenceButton;
-		v17 = (v16 >> 1) - v29 / 2 + 158;
-		v18 = -pDialogueWindow->pNumPresenceButton < 0;
-		pOutString = (GUIFont *)pDialogueWindow->pStartingPosActiveItem;
-		if ( v18 ^ __OFSUB__((int)v15, HIDWORD(v15)) )
-		{
-			v31 = 2;
-			v19 = pShopOptions;
-			do
-			{
-				v20 = v14->GetControl((unsigned int)pOutString);
-				v21 = v20;
-				v20->uY = v29 + v17;
-				v22 = pFontArrus->CalcTextHeight(*v19, &_this, 0, 0);
-				v23 = v21->uY;
-				v21->uHeight = v22;
-				v17 = v23 + v22 - 1;
-				v21->uW = v17;
-				v24 = v30;
-				if ( pDialogueWindow->pCurrentPosActiveItem != v31 )
-					v24 = v28;
-				_this.DrawTitleText(pFontArrus, 0, v23, v24, *v19, 3u);
-				v14 = pDialogueWindow;
-				++v31;
-				++v19;
-				pOutString = (GUIFont *)((char *)pOutString + 1);
-			}
-			while ( (signed int)pOutString < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
-		}
-		break;
-		}
-	case 99:
-		{
-		v5 = &pMonsterStats->pInfos[word_F8B1A0];
-		v6 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-		v7 = v5->pName;
-		v8 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-		sprintf(pTmpBuf, &byte_4F0F98, v8, v7, v6);
-		sprintf(pTmpBuf2, dword_F8B1A4, pTmpBuf, 100 * v5->uLevel);
-		ptr_F8B1E8 = pTmpBuf2;
-		memcpy(&a1, pDialogueWindow, sizeof(a1));
-		w.uFrameWidth = 458;
-		w.uFrameZ = 457;
-		pOutString = pFontArrus;
-		v9 = pFontArrus->CalcTextHeight(pTmpBuf2, &w, 13, 0) + 7;
-		if ( 352 - v9 < 8 )
-		{
-			pOutString = pFontCreate;
-			v9 = pFontCreate->CalcTextHeight(ptr_F8B1E8, &w, 13, 0) + 7;
-		}
-
-		auto pTex = (uTextureID_Leather != -1 ? &pIcons_LOD->pTextures[uTextureID_Leather] : 0);
-		pRenderer->_4A6A68(8u, 352 - v9, pTex, (pTex ? pTex->uTextureHeight : 26) - v9);
-		pRenderer->DrawTextureIndexed(8u, 347 - v9, pTexture_591428);
-		v10 = FitTextInAWindow(ptr_F8B1E8, pOutString, &w, 0xDu, 0);
-		a1.DrawText(pOutString, 13, 354 - v9, 0, v10, 0, 0, 0);
-		break;
-		}
-	case 100:
-		{
-		v0 = window_SpeakInHouse;
-		if ( window_SpeakInHouse->field_40 == 1 )
-		{
-			sprintf(pTmpBuf, "%s\n%s", pGlobalTXT_LocalizationStrings[606], pGlobalTXT_LocalizationStrings[112]);
-			_this.DrawTitleText(pFontArrus, 0, 0x92u, v30, pTmpBuf, 3u);
-			_this.DrawTitleText(pFontArrus, 0, 0xBAu, v28, (const char *)pKeyActionMap->pPressedKeysBuffer, 3u);
-			v3 = pFontArrus;
-			v4 = pFontArrus->GetLineWidth((const char *)pKeyActionMap->pPressedKeysBuffer);
-			_this.DrawFlashingInputCursor(v4 / 2 + 80, 185, v3);
-			return;
-		}
-		if ( window_SpeakInHouse->field_40 == 2 )
-		{
-			v1 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer);
-			v2 = v1;
-			if ( v1 <= 0 )
-			{
-			//LABEL_8:
-				pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-				/*if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
-				{
-				pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)113;
-				pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = 1;
-				*(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
-				++pMessageQueue_50CBD0->uNumMessages;
-				}*/
-				return;
-			}
-			if ( v1 > pParty->uNumGold )
-			{
-				HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
-				v2 = pParty->uNumGold;
-			}
-			if ( v2 > pParty->uFine )
-				v2 = pParty->uFine;
-			Party::TakeGold(v2);
-			pParty->uFine -= v2;
-			if ( pParty->uFine < 0 )
-				pParty->uFine = 0;
-			if ( uActiveCharacter )
-				pPlayers[uActiveCharacter]->PlaySound(SPEECH_81, 0);
-			v0 = window_SpeakInHouse;
-		}
-		if ( window_SpeakInHouse->field_40 == 3 )
-		{
-			v0->field_40 = 0;
-			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-		}
-		break;
-		}
-	default:
-		{
-		break;
-		}
-  }
-  return;
-}
-// F8B19C: using guessed type int dword_F8B19C;
-// F8B1A0: using guessed type __int16 word_F8B1A0;
-
-//----- (004B7D7E) --------------------------------------------------------
-void __cdecl BankDialog()
-{
-  GUIWindow *v0; // eax@4
-  int v1; // ecx@5
-  int v2; // eax@6
-  unsigned int v3; // esi@6
-  GUIFont *v4; // ST10_4@12
-  int v5; // eax@12
-  int v6; // eax@19
-  unsigned int v7; // esi@19
-  unsigned __int16 v8; // ax@27
-  unsigned __int16 v9; // ax@29
-  char *v10; // [sp-8h] [bp-70h]@11
-  char *v11; // [sp-4h] [bp-6Ch]@11
-  GUIWindow _this; // [sp+Ch] [bp-5Ch]@1
-  __int16 v13[2]; // [sp+60h] [bp-8h]@1
-  __int16 v14[2]; // [sp+64h] [bp-4h]@1
-
-  memcpy(&_this, window_SpeakInHouse, sizeof(_this));
-  _this.uFrameX = 483;
-  _this.uFrameWidth = 148;
-  _this.uFrameZ = 334;
-  *(int *)v13 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-  *(int *)v14 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-  sprintf(pTmpBuf, "%s: %d", pGlobalTXT_LocalizationStrings[25], pParty->uNumGoldInBank);
-  _this.DrawTitleText(pFontArrus, 0, 0xDCu, v14[0], pTmpBuf, 3u);
-  switch(dialog_menu_id)
-  {
-	case 1:
-		{
-		v8 = v14[0];
-		if ( pDialogueWindow->pCurrentPosActiveItem != 2 )
-			v8 = v13[0];
-		_this.DrawTitleText(pFontArrus, 0, 0x92u, v8, pGlobalTXT_LocalizationStrings[60], 3u);
-		v9 = v14[0];
-		if ( pDialogueWindow->pCurrentPosActiveItem != 3 )
-			v9 = v13[0];
-		_this.DrawTitleText(pFontArrus, 0, 0xB0u, v9, pGlobalTXT_LocalizationStrings[244], 3u);
-		break;
-		}
-	case 7:
-		{
-		v0 = window_SpeakInHouse;
-		if ( window_SpeakInHouse->field_40 != 1 )
-		{
-			v1 = window_SpeakInHouse->field_40 - 2;
-			if ( window_SpeakInHouse->field_40 == 2 )
-			{
-				v6 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer);
-				v7 = v6;
-				if ( !v6 )
-				{
-//LABEL_17:
-					pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-					/*if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
-					{
-						pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)113;
-						pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = 1;
-						*(&pMessageQueue_50CBD0->uNumMessages + 3 * pMessageQueue_50CBD0->uNumMessages + 3) = 0;
-						++pMessageQueue_50CBD0->uNumMessages;
-					}*/
-					return;
-				}
-				if ( v6 > pParty->uNumGold )
-				{
-					HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
-					v7 = pParty->uNumGold;
-				}
-				if ( v7 )
-				{
-					Party::TakeGold(v7);
-					pParty->uNumGoldInBank += v7;
-					if ( uActiveCharacter )
-						pPlayers[uActiveCharacter]->PlaySound(SPEECH_81, 0);
-				}
-				v0 = window_SpeakInHouse;
-				v0->field_40 = 0;
-				pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-				return;
-			}
-			if ( v1 != 1 )
-				return;
-			v0->field_40 = 0;
-			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-			return;      
-		}
-		v11 = pGlobalTXT_LocalizationStrings[112];
-		v10 = pGlobalTXT_LocalizationStrings[60];
-		sprintf(pTmpBuf, "%s\n%s", v10, v11);
-		_this.DrawTitleText(pFontArrus, 0, 0x92u, v14[0], pTmpBuf, 3u);
-		_this.DrawTitleText(pFontArrus, 0, 0xBAu, v13[0], (const char *)pKeyActionMap->pPressedKeysBuffer, 3u);
-		v4 = pFontArrus;
-		v5 = pFontArrus->GetLineWidth((const char *)pKeyActionMap->pPressedKeysBuffer);
-		_this.DrawFlashingInputCursor(v5 / 2 + 80, 185, v4);
-		break;
-		}
-
-	case 8:
-		{
-		v0 = window_SpeakInHouse;
-		if ( window_SpeakInHouse->field_40 != 1 )
-		{
-			v1 = window_SpeakInHouse->field_40 - 2;
-			if ( window_SpeakInHouse->field_40 == 2 )
-			{
-				window_SpeakInHouse->field_40 = 0;
-				v2 = atoi((const char *)pKeyActionMap->pPressedKeysBuffer);
-				v3 = v2;
-				if ( v2 )
-				{
-					if ( v2 > pParty->uNumGoldInBank )
-					{
-						HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
-						v3 = pParty->uNumGoldInBank;
-					}
-					if ( v3 )
-					{
-						Party::SetGold(pParty->uNumGold + v3);
-						pParty->uNumGoldInBank -= v3;
-					}
-				}
-				pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-				return;
-			}
-			if ( v1 != 1 )
-				return;
-			v0->field_40 = 0;
-			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-			return;  
-		}
-		v11 = pGlobalTXT_LocalizationStrings[112];
-		v10 = pGlobalTXT_LocalizationStrings[244];
-		sprintf(pTmpBuf, "%s\n%s", v10, v11);
-		_this.DrawTitleText(pFontArrus, 0, 0x92u, v14[0], pTmpBuf, 3u);
-		_this.DrawTitleText(pFontArrus, 0, 0xBAu, v13[0], (const char *)pKeyActionMap->pPressedKeysBuffer, 3u);
-		v4 = pFontArrus;
-		v5 = pFontArrus->GetLineWidth((const char *)pKeyActionMap->pPressedKeysBuffer);
-		_this.DrawFlashingInputCursor(v5 / 2 + 80, 185, v4);
-		return;
-		break;
-		}
-
-	default:
-		{
-		break;
-		}
-  }
-}
-// F8B19C: using guessed type int dword_F8B19C;
-
-//----- (004B8285) --------------------------------------------------------
-void __cdecl TavernDialog()
-{
-  GUIWindow *v0; // ebx@1
-  Player *v1; // edi@1
-  double v2; // st7@1
-  signed int v3; // ebx@1
-  int v4; // ecx@1
-  int v5; // esi@3
-  signed int v6; // edi@5
-  int v7; // ecx@5
-  GUIWindow *v8; // edi@16
-  signed int v9; // esi@16
-  unsigned int v10; // esi@18
-  int v11; // eax@18
-  unsigned int v12; // eax@19
-  int v13; // eax@21
-  int v14; // ecx@26
-  GUIButton *v15; // eax@28
-  GUIButton *v16; // esi@28
-  int v17; // eax@28
-  char *v18; // eax@30
-  int v19; // eax@30
-  unsigned int v20; // ecx@30
-  int v21; // edx@30
-  int v22; // eax@30
-  unsigned __int16 v23; // ax@30
-  int v24; // eax@34
-  int v25; // eax@34
-  char *v26; // esi@36
-  int v27; // edi@46
-  unsigned int v28; // eax@53
-  unsigned int v29; // eax@55
-  unsigned int v30; // eax@57
-  signed int v31; // eax@59
-  unsigned int v32; // eax@61
-  GUIWindow *v33; // edi@64
-  int v34; // eax@64
-  int v35; // ecx@64
-  int v36; // esi@64
-  char v37; // sf@64
-  GUIButton *v38; // eax@65
-  int v39; // edx@69
-  int v40; // ecx@69
-  int v41; // ecx@69
-  int v42; // ecx@70
-  unsigned int v43; // edx@70
-  int v44; // edx@71
-  int v45; // ecx@71
-  int v46; // ecx@72
-  int v47; // eax@74
-  signed int v48; // edi@77
-  signed int i; // esi@79
-  int v50; // eax@80
-  GUIWindow *v51; // ecx@81
-  _QWORD v52; // qax@81
-  signed int v53; // edi@81
-  int v54; // edi@81
-  GUIButton *v55; // esi@83
-  const char **v56; // eax@83
-  int v57; // eax@83
-  unsigned int v58; // ecx@83
-  Player *v59; // edx@83
-  unsigned __int16 v60; // ax@83
-  int v61; // eax@99
-  int v62; // edi@99
-  char *v63; // eax@99
-  GUIFont *v64; // edx@99
-  GUIFont *v65; // edi@100
-  unsigned int v66; // [sp-10h] [bp-284h]@75
-  unsigned __int16 v67; // [sp-Ch] [bp-280h]@75
-  int v68; // [sp-Ch] [bp-280h]@99
-  char *v69; // [sp-8h] [bp-27Ch]@75
-  int v70; // [sp-8h] [bp-27Ch]@99
-  unsigned int v71; // [sp-4h] [bp-278h]@75
-  const char *v72; // [sp-4h] [bp-278h]@93
-  unsigned int v73; // [sp-4h] [bp-278h]@99
-  char Dest[100]; // [sp+Ch] [bp-268h]@55
-  char v75[100]; // [sp+70h] [bp-204h]@59
-  char a1[100]; // [sp+D4h] [bp-1A0h]@57
-  char v77[100]; // [sp+138h] [bp-13Ch]@59
-  GUIWindow v78; // [sp+19Ch] [bp-D8h]@99
-  GUIWindow v79; // [sp+1F0h] [bp-84h]@1
-  char *Str[2]; // [sp+244h] [bp-30h]@30
-  unsigned int v81; // [sp+24Ch] [bp-28h]@1
-  unsigned __int8 v82; // [sp+253h] [bp-21h]@59
-  int v83; // [sp+254h] [bp-20h]@1
-  __int16 v84[2]; // [sp+258h] [bp-1Ch]@1
-  Player *v85; // [sp+25Ch] [bp-18h]@1
-  int v86; // [sp+260h] [bp-14h]@18
-  unsigned __int8 v87; // [sp+266h] [bp-Eh]@59
-  unsigned __int8 v88; // [sp+267h] [bp-Dh]@57
-  int v89; // [sp+268h] [bp-Ch]@1
-  unsigned __int8 v90; // [sp+26Fh] [bp-5h]@55
-  GUIFont *pOutString; // [sp+270h] [bp-4h]@3
-
-  v0 = window_SpeakInHouse;
-  memcpy(&v79, window_SpeakInHouse, sizeof(v79));
-  v85 = pPlayers[uActiveCharacter];
-  v1 = v85;
-  v79.uFrameX = 483;
-  v79.uFrameWidth = 148;
-  v79.uFrameZ = 334;
-  v81 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-  *(int *)v84 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-  //v2 = p2DEvents_minus1__20[13 * (unsigned int)v0->ptr_1C];
-  v2 = p2DEvents[(unsigned int)v0->ptr_1C - 1].fPriceMultiplier;
-  *(float *)&v83 = v2;
-  *(float *)&v89 = v2 * v2;
-  v3 = (signed __int64)(*(float *)&v89 * 0.1);
-  v4 = v3 * (100 - v1->GetMerchant()) / 100;
-  if ( v4 < v3 / 3 )
-    v4 = v3 / 3;
-  v5 = 1;
-  pOutString = (GUIFont *)v4;
-  if ( v4 <= 0 )
-    pOutString = (GUIFont *)1;
-  v6 = (signed __int64)(*(float *)&v89 * *(float *)&v83 * 0.0099999998);
-  v7 = v6 * (100 - v85->GetMerchant()) / 100;
-  if ( v7 < v6 / 3 )
-    v7 = v6 / 3;
-  v83 = v7;
-  if ( v7 <= 0 )
-  {
-    v7 = 1;
-    v83 = 1;
-  }
-  switch(dialog_menu_id)
-  {
-	case 102:
-		{
-		v65 = pFontArrus;
-		pOutString = pFontArrus;
-		strcpy(pTmpBuf, pNPCTopics[354].pText);
-		v78.uFrameWidth = 460;
-		v78.uFrameZ = 452;
-		v62 = v65->CalcTextHeight(pTmpBuf, &v78, 12, 0) + 7;
-		if ( 352 - v62 < 8 )
-		{
-			pOutString = pFontCreate;
-			v62 = pFontCreate->CalcTextHeight(pTmpBuf, &v78, 12, 0) + 7;
-		}
-
-		auto pTex = (uTextureID_Leather != -1 ? &pIcons_LOD->pTextures[uTextureID_Leather] : 0);
-		pRenderer->_4A6A68(8u, 352 - v62, pTex, (pTex ? pTex->uTextureHeight : 26) - v62);
-
-		pRenderer->DrawTextureIndexed(8u, 347 - v62, pTexture_591428);
-		v73 = 0;
-		v70 = 0;
-		v68 = 0;
-		v63 = FitTextInAWindow(pTmpBuf, pOutString, &v78, 0xCu, 0);
-		v64 = pOutString;
-		window_SpeakInHouse->DrawText(v64, 12, 354 - v62, 0, v63, v68, v70, v73);
-		break;
-		}
-	case 103:
-		{
-		strcpy(pTmpBuf, pNPCTopics[(uint)window_SpeakInHouse->ptr_1C + 247].pText);
-		v78.uFrameWidth = 460;
-		v78.uFrameZ = 452;
-		v61 = pFontArrus->CalcTextHeight(pTmpBuf, &v78, 12, 0);
-		v62 = v61 + 7;
-
-		auto pTex = (uTextureID_Leather != -1 ? &pIcons_LOD->pTextures[uTextureID_Leather] : nullptr);
-		pRenderer->_4A6A68(8u, 352 - (v61 + 7), pTex, (pTex ? pTex->uTextureHeight : 26) - (v61 + 7));
-
-		pRenderer->DrawTextureIndexed(8u, 347 - v62, pTexture_591428);
-		v73 = 0;
-		v70 = 0;
-		v68 = 0;
-		v63 = FitTextInAWindow(pTmpBuf, pFontArrus, &v78, 0xCu, 0);
-		v64 = pFontArrus;
-		window_SpeakInHouse->DrawText(v64, 12, 354 - v62, 0, v63, v68, v70, v73);
-		break;
-		}
-	case 104:
-		{
-		if ( pArcomageGame->bGameInProgress == 1 )
-          return;
-        v26 = pTmpBuf;
-        if ( pArcomageGame->uGameResult )
-        {
-          if ( pArcomageGame->uGameResult == 1 )
-            v72 = pGlobalTXT_LocalizationStrings[640];// You won!
-          else
-            v72 = pGlobalTXT_LocalizationStrings[641];// You lost!
-        }
-        else
-        {
-          v72 = pGlobalTXT_LocalizationStrings[639];// A tie!
-        }
-        strcpy(pTmpBuf, v72);
-//LABEL_97:
-        v71 = 3;
-        v69 = v26;
-        v67 = v84[0];
-        v66 = (174 - pFontArrus->CalcTextHeight(v26, &v79, 0, 0)) / 2 + 138;
-        v79.DrawTitleText(pFontArrus, 0, v66, v67, v69, v71);
-		break;
-		}
-	case 15:
-		{
-        if ( pParty->uNumGold >= (unsigned int)pOutString )
-        {
-          Party::TakeGold((unsigned int)pOutString);
-          v27 = (int)window_SpeakInHouse->ptr_1C;
-          HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
-          dialog_menu_id = 0;
-          while ( sub_4BD8B5() )
-            ;
-          sub_4B1D27();
-          pVideoPlayer->Unload();
-          window_SpeakInHouse->Release();
-          window_SpeakInHouse = 0;
-
-          if ( pMessageQueue_50CBD0->uNumMessages )
-            pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
-          pMessageQueue_50CBD0->pMessages[0].eType = UIMSG_OpenRestUI;
-          pMessageQueue_50CBD0->pMessages[0].param = v27;
-          pMessageQueue_50CBD0->pMessages[0].field_8 = 1;
-//LABEL_51:
-          ++pMessageQueue_50CBD0->uNumMessages;
-          return;
-        }
-		ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);
-        HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 4);
-        pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, v5, 0);
-		break;
-		}
-	case 96:
-		{
-		if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-			return;
-		v8 = pDialogueWindow;
-		*(float *)&v89 = 0.0;
-
-		//v9 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (unsigned int)ptr_507BC0->ptr_1C] * 500.0);
-		v9 = (signed __int64)(p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].flt_24 * 500.0);
-
-		pOutString = (GUIFont *)(v9 * (100 - v85->GetMerchant()) / 100);
-		if ( (signed int)pOutString < v9 / 3 )
-			pOutString = (GUIFont *)(v9 / 3);
-		v10 = v8->pStartingPosActiveItem;
-		v11 = v10 + v8->pNumPresenceButton;
-		v86 = 0;
-		if ( (signed int)v10 < v11 )
-		{
-			do
-			{
-				v12 = v8->GetControl(v10)->uControlParam - 36;
-				if ( byte_4ED970_skill_learn_ability_by_class_table[v85->classType][v12] && !v85->pActiveSkills[v12] )
-				{
-					v13 = pFontArrus->CalcTextHeight(pSkillNames[v12], &v79, 0, 0);
-					v89 += v13;
-					++v86;
-				}
-				++v10;
-			}
-			while ( (signed int)v10 < v8->pStartingPosActiveItem + v8->pNumPresenceButton );
-			if ( v86 )
-			{
-				sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], pOutString);
-				v79.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
-				pOutString = (GUIFont *)((149 - v89) / v86);
-				if ( (149 - v89) / v86 > 32 )
-					pOutString = (GUIFont *)32;
-				v14 = (149 - v86 * (signed int)pOutString - v89) / 2 - (signed int)pOutString / 2 + 162;
-				v89 = v8->pStartingPosActiveItem;
-				v83 = v14;
-				if ( v89 < v89 + v8->pNumPresenceButton )
-				{
-					v86 = 2;
-					do
-					{
-						v15 = v8->GetControl(v89);
-						v16 = v15;
-						v17 = v15->uControlParam - 36;
-						if ( !byte_4ED970_skill_learn_ability_by_class_table[v85->classType][v17] || v85->pActiveSkills[v17] )
-						{
-							v16->uW = 0;
-							v16->uHeight = 0;
-							v16->uY = 0;
-						}
-						else
-						{
-							v18 = pSkillNames[v17];
-							v16->uY = (unsigned int)((char *)pOutString + v83);
-							Str[1] = v18;
-							v19 = pFontArrus->CalcTextHeight(v18, &v79, 0, 0);
-							v20 = v16->uY;
-							v21 = v86;
-							v16->uHeight = v19;
-							v22 = v19 + v20 - 1;
-							v16->uW = v22;
-							v83 = v22;
-							v23 = v84[0];
-							if ( pDialogueWindow->pCurrentPosActiveItem != v21 )
-								v23 = v81;
-							v79.DrawTitleText(pFontArrus, 0, v20, v23, Str[1], 3u);
-						}
-						v24 = v8->pNumPresenceButton;
-						++v89;
-						v25 = v8->pStartingPosActiveItem + v24;
-						++v86;
-					}
-					while ( v89 < v25 );
-				}
-				return;
-			}
-		}
-		v26 = pTmpBuf;
-		sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v85->pName, pClassNames[v85->classType]);
-		strcat(pTmpBuf, "\n \n");
-		strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
-		v71 = 3;
-		v69 = v26;
-		v67 = v84[0];
-		v66 = (174 - pFontArrus->CalcTextHeight(v26, &v79, 0, 0)) / 2 + 138;
-		v79.DrawTitleText(pFontArrus, 0, v66, v67, v69, v71);
-		return;
-		break;
-		}
-	case 16:
-		{
-        *(_QWORD *)Str = pParty->uNumFoodRations;
-        //if ( (double)pParty->uNumFoodRations >= p2DEvents_minus1__20[13 * (unsigned int)ptr_507BC0->ptr_1C] )
-        if ( (double)pParty->uNumFoodRations >= p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].fPriceMultiplier )
-        {
-          ShowStatusBarString(pGlobalTXT_LocalizationStrings[140], 2u);
-          if ( uActiveCharacter )
-            pPlayers[uActiveCharacter]->PlaySound(SPEECH_67, 0);
-          pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, v5, 0);
-          return;
-        }
-        if ( pParty->uNumGold >= v7 )
-        {
-          Party::TakeGold(v7);
-          //pParty->uNumFoodRations = (signed __int64)p2DEvents_minus1__20[13 * (unsigned int)ptr_507BC0->ptr_1C];
-          pParty->uNumFoodRations = (signed __int64)p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].fPriceMultiplier;
-          HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 3);
-          v5 = 1;
-//LABEL_43:
-          pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, v5, 0);
-          return;
-          //goto LABEL_51;
-        }
-		ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);
-        HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 4);
-        pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, v5, 0);
-		break;
-		}
-	case 1:
-		{
-		if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-		  return;
-		v28 = *(int *)v84;
-		if ( pDialogueWindow->pCurrentPosActiveItem != 2 )
-		  v28 = v81;
-		sprintf(Dest, format_4E2DC8, v28);
-		sprintf(pTmpBuf2, pGlobalTXT_LocalizationStrings[178], pOutString);
-		strcat(Dest, pTmpBuf2);
-		v90 = pFontArrus->CalcTextHeight(Dest, &v79, 0, 0);
-		strcat(Dest, "\n \n");
-		v29 = *(int *)v84;
-		if ( pDialogueWindow->pCurrentPosActiveItem != 3 )
-		  v29 = v81;
-		sprintf(a1, format_4E2DC8, v29);
-		sprintf(pTmpBuf2,
-		  pGlobalTXT_LocalizationStrings[86],
-		  //(signed __int64)p2DEvents_minus1__20[13 * (unsigned int)ptr_507BC0->ptr_1C],
-		  (signed __int64)p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].fPriceMultiplier,
-		  v83);
-		strcat(a1, pTmpBuf2);
-		v88 = pFontArrus->CalcTextHeight(a1, &v79, 0, 0);
-		strcat(a1, "\n \n");
-		v30 = *(int *)v84;
-		if ( pDialogueWindow->pCurrentPosActiveItem != 4 )
-		  v30 = v81;
-		sprintf(v77, format_4E2DC8, v30);
-		strcat(v77, pGlobalTXT_LocalizationStrings[160]);
-		v82 = pFontArrus->CalcTextHeight(v77, &v79, 0, 0);
-		strcat(v77, "\n \n");
-		v75[0] = 0;
-		v87 = 0;
-		v31 = (signed int)window_SpeakInHouse->ptr_1C;
-		if ( v31 >= 108 && v31 <= 120 )
-		{
-		  v32 = *(int *)v84;
-		  if ( pDialogueWindow->pCurrentPosActiveItem != 5 )
-			v32 = v81;
-		  sprintf(v75, format_4E2DC8, v32);
-		  strcat(v75, pGlobalTXT_LocalizationStrings[611]);
-		  v87 = pFontArrus->CalcTextHeight(v75, &v79, 0, 0);
-		}
-		v33 = pDialogueWindow;
-		Str[1] = (char *)pDialogueWindow;
-		v34 = pDialogueWindow->pStartingPosActiveItem;
-		v35 = v34 + pDialogueWindow->pNumPresenceButton;
-		v36 = LOBYTE(pFontArrus->uFontHeight) - 3;
-		v37 = -pDialogueWindow->pNumPresenceButton < 0;
-		pOutString = (GUIFont *)pDialogueWindow->pStartingPosActiveItem;
-		if ( !(v37 ^ __OFSUB__(v34, v35)) )
-		{
-	//LABEL_75:
-		  sprintf(pTmpBuf, "%s%s%s%s", &Dest, &a1, &v77, &v75);
-		  v71 = 3;
-		  v69 = pTmpBuf;
-		  v67 = 0;
-		  v66 = 146;
-	//LABEL_98:
-		  v79.DrawTitleText(pFontArrus, 0, v66, v67, v69, v71);
-		  return;
-		}
-		while ( 1 )
-		{
-		  v38 = v33->GetControl((unsigned int)pOutString);
-		  if ( v38->uControlParam == 15 )
-		  {
-			v46 = v90;
-			v38->uHeight = v90;
-			v38->uY = 146;
-			v41 = v46 + 145;
-			v38->uW = v41;
-		  }
-		  else if ( v38->uControlParam == 16 )
-		  {
-			v44 = v88;
-			v45 = v90 + v36 + 146;
-			v38->uHeight = v88;
-			v38->uY = v45;
-			v41 = v45 + v44 - 1;
-			v38->uW = v41;
-		  }
-		  else if ( v38->uControlParam == 96 )
-		  {
-			v42 = v90 + v88 + 2 * v36 + 146;
-			v43 = v82;
-			v38->uY = v42;
-			v38->uHeight = v43;
-			v41 = v43 + v42 - 1;
-			v38->uW = v41;
-		  }
-		  else if ( v38->uControlParam == 101 )
-		  {
-			v39 = v90 + 3 * v36 + v87 + v88 + 146;
-			v33 = (GUIWindow *)Str[1];
-			v40 = v87;
-			v38->uHeight = v87;
-			v38->uY = v39;
-			v41 = v39 + v40 - 1;
-	//LABEL_73:
-			v38->uW = v41;
-		  }
-		  v47 = v33->pStartingPosActiveItem;
-		  pOutString = (GUIFont *)((char *)pOutString + 1);
-		  if ( (signed int)pOutString >= v33->pNumPresenceButton + v47 )
-		  {
-			  sprintf(pTmpBuf, "%s%s%s%s", &Dest, &a1, &v77, &v75);
-			  v71 = 3;
-			  v69 = pTmpBuf;
-			  v67 = 0;
-			  v66 = 146;
-			  v79.DrawTitleText(pFontArrus, 0, v66, v67, v69, v71);
-			  return;
-		  }
-		}
-		break;
-		}
-	case 101:
-		{
-		if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-		{
-			v48 = 2;
-			pShopOptions[0] = pGlobalTXT_LocalizationStrings[620];
-			pOutString = 0;
-			pShopOptions[1] = pGlobalTXT_LocalizationStrings[622];
-			if ( pParty->HasItem(0x28Bu) )
-			{
-				pShopOptions[2] = pGlobalTXT_LocalizationStrings[621];
-				v48 = 3;
-			}
-			for ( i = 0; i < v48; ++i )
-			{
-				v50 = pFontArrus->CalcTextHeight(pShopOptions[i], &v79, 0, 0);
-				pOutString = (GUIFont *)((char *)pOutString + v50);
-			}
-			v86 = (174 - (signed int)pOutString) / v48;
-			v51 = pDialogueWindow;
-			v52 = 174 - v48 * (174 - (signed int)pOutString) / v48 - (signed int)pOutString;
-			v53 = v52 - HIDWORD(v52);
-			LODWORD(v52) = pDialogueWindow->pStartingPosActiveItem;
-			HIDWORD(v52) = v52 + pDialogueWindow->pNumPresenceButton;
-			v54 = (v53 >> 1) - v86 / 2 + 138;
-			v37 = -pDialogueWindow->pNumPresenceButton < 0;
-			v89 = pDialogueWindow->pStartingPosActiveItem;
-			if ( v37 ^ __OFSUB__((int)v52, HIDWORD(v52)) )
-			{
-				v85 = (Player *)2;
-				pOutString = (GUIFont *)pShopOptions;
-				do
-				{
-					v55 = v51->GetControl(v89);
-					v56 = (const char **)pOutString;
-					v55->uY = v86 + v54;
-					v57 = pFontArrus->CalcTextHeight(*v56, &v79, 0, 0);
-					v58 = v55->uY;
-					v59 = v85;
-					v55->uHeight = v57;
-					v54 = v57 + v58 - 1;
-					v55->uW = v54;
-					v60 = v84[0];
-					if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v59 )
-						v60 = v81;
-					v79.DrawTitleText(pFontArrus, 0, v58, v60, *(const char **)&pOutString->cFirstChar, 3u);
-					v51 = pDialogueWindow;
-					v85 = (Player *)((char *)v85 + 1);
-					pOutString = (GUIFont *)((char *)pOutString + 4);
-					++v89;
-				}
-				while ( v89 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
-			}
-		}
-		break;
-		}
-	default:
-		{
-		break;
-		}
-  }
-}
-
-
-//----- (004B910F) --------------------------------------------------------
-char *__cdecl WeaponShopDialog()
-{
-  Player *v0; // ebx@1
-  char *result; // eax@6
-  signed int v2; // esi@8
-  unsigned int v3; // ebx@10
-  ItemGen *v4; // eax@11
-  char *v5; // ecx@12
-  unsigned __int8 v6; // dl@13
-  char *v7; // edx@14
-  int v8; // eax@15
-  int v9; // ST08_4@16
-  int v10; // eax@16
-  signed int v11; // esi@18
-  int v12; // ST08_4@21
-  int v13; // eax@21
-  int v14; // edi@23
-  char **v15; // esi@23
-  int v16; // eax@24
-  GUIWindow *v17; // ecx@25
-  int v18; // edx@25
-  int v19; // edi@25
-  unsigned __int8 v20; // sf@25
-  GUIButton *v21; // esi@27
-  const char **v22; // eax@27
-  int v23; // eax@27
-  unsigned int v24; // ecx@27
-  int v25; // edx@27
-  unsigned __int16 v26; // ax@27
-  signed int v27; // esi@32
-  int v28; // ST08_4@36
-  int v29; // eax@36
-  GUIWindow *v30; // edi@41
-  void *v31; // eax@41
-  signed int v32; // esi@41
-  unsigned int v33; // esi@43
-  int v34; // eax@43
-  unsigned int v35; // eax@44
-  int v36; // eax@46
-  __int32 v37; // ecx@51
-  GUIButton *v38; // eax@53
-  GUIButton *v39; // esi@53
-  int v40; // eax@53
-  char *v41; // eax@55
-  int v42; // eax@55
-  unsigned int v43; // ecx@55
-  const char **v44; // edx@55
-  int v45; // eax@55
-  unsigned __int16 v46; // ax@55
-  int v47; // eax@59
-  const char **v48; // eax@63
-  unsigned int v49; // esi@65
-  Texture *v50; // eax@65
-  int v51; // edi@65
-  int v52; // esi@70
-  Texture *v53; // ST1C_4@70
-  int v54; // edi@70
-  signed int v55; // ecx@73
-  SHORT v56; // di@82
-  bool v57; // eax@82
-  const char *v58; // ecx@84
-  POINT *v59; // esi@89
-  LONG v60; // ecx@90
-  int v61; // eax@90
-  int v62; // ecx@90
-  ItemGen *v63; // esi@90
-  int v64; // eax@95
-  int v65; // esi@96
-  char **v66; // edi@96
-  int v67; // eax@97
-  GUIWindow *v68; // ecx@98
-  int v69; // edx@98
-  int v70; // edi@98
-  GUIButton *v71; // esi@100
-  const char **v72; // eax@100
-  int v73; // eax@100
-  unsigned int v74; // ecx@100
-  Player *v75; // edx@100
-  unsigned __int16 v76; // ax@100
-  GUIWindow *v77; // [sp-18h] [bp-110h]@14
-  int v78; // [sp-14h] [bp-10Ch]@14
-  ItemGen *v79; // [sp-10h] [bp-108h]@12
-  int v80; // [sp-10h] [bp-108h]@14
-  void *v81; // [sp-Ch] [bp-104h]@12
-  unsigned __int16 v82; // [sp-Ch] [bp-104h]@14
-  int v83; // [sp-8h] [bp-100h]@11
-  char *v84; // [sp-8h] [bp-100h]@14
-  __int64 *v85; // [sp-4h] [bp-FCh]@11
-  unsigned int v86; // [sp-4h] [bp-FCh]@14
-  POINT v87; // [sp+Ch] [bp-ECh]@8
-  POINT v88; // [sp+14h] [bp-E4h]@18
-  POINT v89; // [sp+1Ch] [bp-DCh]@89
-  POINT v90; // [sp+24h] [bp-D4h]@19
-  POINT v91; // [sp+2Ch] [bp-CCh]@89
-  POINT v92; // [sp+34h] [bp-C4h]@9
-  POINT v93; // [sp+3Ch] [bp-BCh]@33
-  POINT v94; // [sp+44h] [bp-B4h]@18
-  POINT v95; // [sp+4Ch] [bp-ACh]@32
-  POINT v96; // [sp+54h] [bp-A4h]@18
-  POINT v97; // [sp+5Ch] [bp-9Ch]@32
-  POINT a2; // [sp+64h] [bp-94h]@8
-  POINT v99; // [sp+6Ch] [bp-8Ch]@32
-  POINT v100; // [sp+74h] [bp-84h]@8
-  GUIWindow v101; // [sp+7Ch] [bp-7Ch]@1
-  char *Str; // [sp+D0h] [bp-28h]@55
-  __int32 v103; // [sp+D4h] [bp-24h]@25
-  int v104; // [sp+D8h] [bp-20h]@1
-  int v105; // [sp+DCh] [bp-1Ch]@1
-  POINT v106; // [sp+E0h] [bp-18h]@8
-  Player *_this; // [sp+E8h] [bp-10h]@1
-  int v108; // [sp+ECh] [bp-Ch]@26
-  const char **v109; // [sp+F0h] [bp-8h]@26
-  unsigned __int8 v110; // [sp+F7h] [bp-1h]@16
-
-  v0 = pPlayers[uActiveCharacter];
-  _this = pPlayers[uActiveCharacter];
-  memcpy(&v101, window_SpeakInHouse, sizeof(v101));
-  v101.uFrameX = 483;
-  v101.uFrameWidth = 148;
-  v101.uFrameZ = 334;
-  v105 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-  v104 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
-  switch(dialog_menu_id)
-  {
-	case 94:
-		{
-		draw_leather();
-		CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-		pShopOptions[0] = pGlobalTXT_LocalizationStrings[200];
-		pShopOptions[1] = pGlobalTXT_LocalizationStrings[113];
-		pShopOptions[2] = pGlobalTXT_LocalizationStrings[179];
-		v65 = 0;
-		v66 = pShopOptions;
-		do
-		{
-			v67 = pFontArrus->CalcTextHeight(*v66, &v101, 0, 0);
-			++v66;
-			v65 += v67;
-		}
-		while ( (signed int)v66 < (signed int)&pShopOptions[3] );
-		v68 = pDialogueWindow;
-		v109 = (const char **)((174 - v65) / 3);
-		result = (char *)pDialogueWindow->pStartingPosActiveItem;
-		v69 = (int)&result[pDialogueWindow->pNumPresenceButton];
-		v70 = (3 * (58 - (signed int)v109) - v65) / 2 - (174 - v65) / 3 / 2 + 138;
-		v20 = -pDialogueWindow->pNumPresenceButton < 0;
-		v106.y = pDialogueWindow->pStartingPosActiveItem;
-		if ( v20 ^ __OFSUB__((int)result, (int)v69) )
-		{
-			_this = (Player *)2;
-			v108 = (int)pShopOptions;
-			do
-			{
-				v71 = v68->GetControl(v106.y);
-				v72 = (const char **)v108;
-				v71->uY = (unsigned int)((char *)v109 + v70);
-				v73 = pFontArrus->CalcTextHeight(*v72, &v101, 0, 0);
-				v74 = v71->uY;
-				v75 = _this;
-				v71->uHeight = v73;
-				v70 = v73 + v74 - 1;
-				v71->uW = v70;
-				v76 = v104;
-				if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v75 )
-				v76 = v105;
-				v101.DrawTitleText(pFontArrus, 0, v74, v76, *(const char **)v108, 3u);
-				v68 = pDialogueWindow;
-				_this = (Player *)((char *)_this + 1);
-				v108 += 4;
-				++v106.y;
-				result = (char *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
-			}
-			while ( v106.y < (signed int)result );
-		}
-		break;	
-		}
-	case 96:
-		{
-        result = (char *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-        if ( result )
-        {
-          v30 = pDialogueWindow;
-          v3 = 0;
-          v31 = window_SpeakInHouse->ptr_1C;
-          v106.y = 0;
-          //v32 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (signed int)v31] * 500.0);
-          v32 = (signed __int64)(p2DEvents[(signed int)v31 - 1].flt_24 * 500.0);
-          v108 = v32 * (100 - _this->GetMerchant()) / 100;
-          if ( v108 < v32 / 3 )
-            v108 = v32 / 3;
-          v33 = v30->pStartingPosActiveItem;
-          v34 = v33 + v30->pNumPresenceButton;
-          v109 = 0;
-          if ( (signed int)v33 >= v34 )
-		  {
-		    sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], _this->pName, pClassNames[_this->classType]);
-            strcat(pTmpBuf, "\n \n");
-            strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
-            v7 = pTmpBuf;
-            v86 = 3;
-            v84 = pTmpBuf;
-            v82 = v104;
-            v80 = 0;
-            v78 = 0;
-            v77 = &v101;
-            v8 = pFontArrus->CalcTextHeight(v7, v77, v78, v80);
-            return v101.DrawTitleText(pFontArrus, v3, (174 - v8) / 2 + 138, v82, v84, v86);
-          }
-          do
-          {
-            v35 = v30->GetControl(v33)->uControlParam - 36;
-            if ( byte_4ED970_skill_learn_ability_by_class_table[_this->classType][v35] && !_this->pActiveSkills[v35] )
-            {
-              v36 = pFontArrus->CalcTextHeight(pSkillNames[v35], &v101, 0, 0);
-              v106.y += v36;
-              v109 = (const char **)((char *)v109 + 1);
-            }
-            ++v33;
-          }
-          while ( (signed int)v33 < v30->pNumPresenceButton + v30->pStartingPosActiveItem );
-          if ( !v109 )
-          {
-//LABEL_105:
-            sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], _this->pName, pClassNames[_this->classType]);
-            strcat(pTmpBuf, "\n \n");
-            strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
-            v7 = pTmpBuf;
-            v86 = 3;
-            v84 = pTmpBuf;
-            v82 = v104;
-            v80 = 0;
-            v78 = 0;
-            v77 = &v101;
-            v8 = pFontArrus->CalcTextHeight(v7, v77, v78, v80);
-            return v101.DrawTitleText(pFontArrus, v3, (174 - v8) / 2 + 138, v82, v84, v86);
-          }
-          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v108);
-          v101.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
-          v108 = (149 - v106.y) / (signed int)v109;
-          if ( (149 - v106.y) / (signed int)v109 > 32 )
-            v108 = 32;
-          result = (char *)v30->pStartingPosActiveItem;
-          v37 = (149 - (signed int)v109 * v108 - v106.y) / 2 - v108 / 2 + 162;
-          v106.y = (LONG)result;
-          v103 = v37;
-          if ( (signed int)result < (signed int)&result[v30->pNumPresenceButton] )
-          {
-            v109 = (const char **)2;
-            do
-            {
-              v38 = v30->GetControl(v106.y);
-              v39 = v38;
-              v40 = v38->uControlParam - 36;
-              if ( !byte_4ED970_skill_learn_ability_by_class_table[_this->classType][v40] || _this->pActiveSkills[v40] )
-              {
-                v39->uW = 0;
-                v39->uHeight = 0;
-                v39->uY = 0;
-              }
-              else
-              {
-                v41 = pSkillNames[v40];
-                v39->uY = v108 + v103;
-                Str = v41;
-                v42 = pFontArrus->CalcTextHeight(v41, &v101, 0, 0);
-                v43 = v39->uY;
-                v44 = v109;
-                v39->uHeight = v42;
-                v45 = v43 + v42 - 1;
-                v39->uW = v45;
-                v103 = v45;
-                v46 = v104;
-                if ( (const char **)pDialogueWindow->pCurrentPosActiveItem != v44 )
-                  v46 = v105;
-                v101.DrawTitleText(pFontArrus, 0, v43, v46, Str, 3u);
-              }
-              v47 = v30->pStartingPosActiveItem;
-              ++v106.y;
-              result = (char *)(v30->pNumPresenceButton + v47);
-              v109 = (const char **)((char *)v109 + 1);
-            }
-            while ( v106.y < (signed int)result );
-          }
-        }
-		break;
-		}
-	case 95:
-		{
-		pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
-		v3 = 0;
-		v109 = 0;
-		v108 = 0;
-		do
-		{
-		  //   if ( pParty->field_C59C[9 * (int)&v109[3 * (unsigned int)window_SpeakInHouse->ptr_1C] + 724] )
-		  if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v109].uItemID)
-		  {
-			v52 = word_F8B158[(signed int)v109] + 30;
-			v53 = ItemsInShopTexture[(signed int)v109];
-			v54 = 60 - ((signed int)v53->uTextureWidth >> 1);
-			pRenderer->DrawTextureTransparent(v54 + v108, word_F8B158[(signed int)v109] + 30, v53);
-			sub_40F92A(
-			  &pRenderer->pActiveZBuffer[v54 + v108 + 640 * v52],
-			  ItemsInShopTexture[(signed int)v109],
-			  (int)((char *)v109 + 1));
-		  }
-		  v109 = (const char **)((char *)v109 + 1);
-		  v108 += 70;
-		}
-		while ( (signed int)v109 < 6 );
-		result = (char *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-		if ( result )
-		{
-			v55 = 0;
-			v106.x = 0;
-			do
-			{
-			// if ( pParty->field_C59C[9 * (v55 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
-			if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v55].uItemID)
-				++v106.x;
-			++v55;
-			}
-			while ( v55 < 6 );
-			v56 = GetAsyncKeyState(17);
-			v57 = _this->CanSteal();
-			Str = (char *)v57;
-			if ( v56 && v57 )
-			{
-			  v58 = pGlobalTXT_LocalizationStrings[185];
-			}
-			else
-			{
-			  v58 = pGlobalTXT_LocalizationStrings[195];
-			  if ( dialog_menu_id != 2 )
-				v58 = pGlobalTXT_LocalizationStrings[196];
-			}
-			DrawTextAtStatusBar(v58, 0);
-			if ( v106.x )
-			{
-			  v59 = pMouse->GetCursorPos(&v91);
-			  result = (char *)(v59->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v89)->y]);
-			  if ( pRenderer->pActiveZBuffer[(int)result] & 0xFFFF )
-			  {
-				v60 = (pRenderer->pActiveZBuffer[(int)result] & 0xFFFF) - 1;
-				v106.x = v60;
-				v61 = (int)window_SpeakInHouse->ptr_1C;
-			  //  v62 = 9 * (v60 + 12 * v61);
-				v63 = (ItemGen *)&pParty->StandartItemsInShops[(int)v61][v60];
-				if ( dialog_menu_id != 2 )
-				  v63 = &pParty->SpecialItemsInShops[(int)v61][v60];//v63 = (ItemGen *)&pParty->field_C59C[v62 + 724];
-				if ( !v56 || !Str )
-				{
-				  v85 = 0;
-				  v83 = 2;
-				  v81 = window_SpeakInHouse->ptr_1C;
-				  v79 = v63;
-				  v110 = uActiveCharacter - 1;
-				  v64 = _this->_490EEE(v63, 1, v61, 2);
-				  v6 = v110;
-				  v5 = (char *)pMerchantsBuyPhrases[v64];
-				  v7 = BuilDialogueString(v5, v6, v79, (char *)v81, v83, v85);
-				  v86 = 3;
-				  v84 = v7;
-				  v82 = v105;
-				  v80 = v3;
-				  v78 = v3;
-				  v77 = &v101;
-	  			  v8 = pFontArrus->CalcTextHeight(v7, v77, v78, v80);
-				  return v101.DrawTitleText(pFontArrus, v3, (174 - v8) / 2 + 138, v82, v84, v86);
-				}
-				v5 = pGlobalTXT_LocalizationStrings[181];
-				v85 = 0;
-				v83 = 2;
-				v81 = window_SpeakInHouse->ptr_1C;
-				v79 = v63;
-				v6 = uActiveCharacter - 1;
-				v7 = BuilDialogueString(v5, v6, v79, (char *)v81, v83, v85);
-				v86 = 3;
-				v84 = v7;
-				v82 = v105;
-				v80 = v3;
-				v78 = v3;
-				v77 = &v101;
-				v8 = pFontArrus->CalcTextHeight(v7, v77, v78, v80);
-				return v101.DrawTitleText(pFontArrus, v3, (174 - v8) / 2 + 138, v82, v84, v86);
-			  }
-			}
-			else
-			{
-			  v101.DrawCurrentTime( pParty->field_3C.field_50[(unsigned int)window_SpeakInHouse->ptr_1C]  - pParty->uTimePlayed);
-			  result =0; //added
-			}
-		}
-		break;
-		}
-	case 2:
-		{
-		pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
-		v3 = 0;
-		v48 = 0;
-		v108 = 0;
-		v109 = 0;
-		do
-		{
-		//  if ( pParty->field_777C[9 * (int)&v48[3 * (unsigned int)window_SpeakInHouse->ptr_1C]] )
-		if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(int)v48].uItemID);
-			{
-			v49 = word_F8B158[(signed int)v48];
-			v50 = ItemsInShopTexture[(signed int)v48];
-			v49 += 30;
-			v51 = 60 - ((signed int)v50->uTextureWidth >> 1);
-			pRenderer->DrawTextureTransparent(v51 + v108, v49, v50);
-			sub_40F92A(
-				&pRenderer->pActiveZBuffer[v51 + v108 + 640 * v49],
-				ItemsInShopTexture[(signed int)v109],
-				(int)((char *)v109 + 1));
-			v48 = v109;
-			}
-			v108 += 70;
-			v48 = (const char **)((char *)v48 + 1);
-			v109 = v48;
-		}
-		while ( (signed int)v48 < 6 );
-		  result = (char *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-		if ( result )
-		{
-			v55 = 0;
-			v106.x = 0;
-			v106.x = 0;
-			do
-			{
-			if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v55].uItemID);//9 * (v55 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] )
-				++v106.x;
-			++v55;
-			}
-			while ( v55 < 6 );
-			v56 = GetAsyncKeyState(17);
-			v57 = _this->CanSteal();
-			Str = (char *)v57;
-			if ( v56 && v57 )
-			{
-				v58 = pGlobalTXT_LocalizationStrings[185];
-			}
-			else
-			{
-				v58 = pGlobalTXT_LocalizationStrings[195];
-				if ( dialog_menu_id != 2 )
-				v58 = pGlobalTXT_LocalizationStrings[196];
-			}
-			DrawTextAtStatusBar(v58, 0);
-			if ( v106.x )
-			{
-				v59 = pMouse->GetCursorPos(&v91);
-				result = (char *)(v59->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v89)->y]);
-				if ( pRenderer->pActiveZBuffer[(int)result] & 0xFFFF )
-				{
-					v60 = (pRenderer->pActiveZBuffer[(int)result] & 0xFFFF) - 1;
-					v106.x = v60;
-					v61 = (int)window_SpeakInHouse->ptr_1C;
-					//  v62 = 9 * (v60 + 12 * v61);
-					v63 = (ItemGen *)&pParty->StandartItemsInShops[(int)v61][v60];
-					if ( dialog_menu_id != 2 )
-						v63 = &pParty->SpecialItemsInShops[(int)v61][v60];//v63 = (ItemGen *)&pParty->field_C59C[v62 + 724];
-					if ( !v56 || !Str )
-					{
-						v85 = 0;
-						v83 = 2;
-						v81 = window_SpeakInHouse->ptr_1C;
-						v79 = v63;
-						v110 = uActiveCharacter - 1;
-						v64 = _this->_490EEE(v63, 1, v61, 2);
-						v6 = v110;
-						v5 = (char *)pMerchantsBuyPhrases[v64];
-						v7 = BuilDialogueString(v5, v6, v79, (char *)v81, v83, v85);
-						v86 = 3;
-						v84 = v7;
-						v82 = v105;
-						v80 = v3;
-						v78 = v3;
-						v77 = &v101;
-	  					v8 = pFontArrus->CalcTextHeight(v7, v77, v78, v80);
-						return v101.DrawTitleText(pFontArrus, v3, (174 - v8) / 2 + 138, v82, v84, v86);
-					}
-					v5 = pGlobalTXT_LocalizationStrings[181];
-					v85 = 0;
-					v83 = 2;
-					v81 = window_SpeakInHouse->ptr_1C;
-					v79 = v63;
-					v6 = uActiveCharacter - 1;
-					v7 = BuilDialogueString(v5, v6, v79, (char *)v81, v83, v85);
-					v86 = 3;
-					v84 = v7;
-					v82 = v105;
-					v80 = v3;
-					v78 = v3;
-					v77 = &v101;
-					v8 = pFontArrus->CalcTextHeight(v7, v77, v78, v80);
-					return v101.DrawTitleText(pFontArrus, v3, (174 - v8) / 2 + 138, v82, v84, v86);
-				}
-			}
-			else
-			{
-				v101.DrawCurrentTime( pParty->field_3C.field_50[(unsigned int)window_SpeakInHouse->ptr_1C]  - pParty->uTimePlayed);
-				result =0; //added
-			}
-		}
-		break;
-		}
-	case 3:
-		{
-        draw_leather();
-        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0);
-        result = (char *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-        if ( result )
-        {
-          v11 = pMouse->GetCursorPos(&v96)->x - 14;
-          v106.x = (v11 >> 5) + 14 * ((pMouse->GetCursorPos(&v88)->y - 17) >> 5);
-          result = (char *)pMouse->GetCursorPos(&v94);
-          if ( *(int *)result > 13 )
-          {
-            result = (char *)pMouse->GetCursorPos(&v90);
-            if ( *(int *)result < 462 )
-            {
-              result = (char *)v0->GetItemIDAtInventoryIndex((int *)&v106.x);
-              v3 = 0;
-              if ( result )
-              {
-                v85 = 0;
-                v83 = 3;
-                v81 = window_SpeakInHouse->ptr_1C;
-                v79 = (ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * (int)result + 5];
-                v12 = (int)window_SpeakInHouse->ptr_1C;
-                v110 = uActiveCharacter - 1;
-                v13 = _this->_490EEE(v79, 1, v12, 3);
-                v6 = v110;
-                v5 = (char *)pMerchantsSellPhrases[v13];
-                v7 = BuilDialogueString(v5, v6, v79, (char *)v81, v83, v85);
-                v86 = 3;
-                v84 = v7;
-                v82 = v105;
-                v80 = v3;
-                v78 = v3;
-                v77 = &v101;
-				v8 = pFontArrus->CalcTextHeight(v7, v77, v78, v80);
-                return v101.DrawTitleText(pFontArrus, v3, (174 - v8) / 2 + 138, v82, v84, v86);
-              }
-            }
-          }
-        }
-		break;
-		}
-	case 4:
-		{
-		draw_leather();
-		CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-		DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0);
-		result = (char *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-		if ( result )
-		{
-			v2 = pMouse->GetCursorPos(&a2)->x - 14;
-			v106.x = (v2 >> 5) + 14 * ((pMouse->GetCursorPos(&v87)->y - 17) >> 5);
-			result = (char *)pMouse->GetCursorPos(&v100);
-			if ( *(int *)result > 13 )
-			{
-				result = (char *)pMouse->GetCursorPos(&v92);
-				if ( *(int *)result < 462 )
-				{
-					result = (char *)v0->GetItemIDAtInventoryIndex((int *)&v106.x);
-					v3 = 0;
-					if ( result )
-					{
-						v85 = 0;
-						v83 = 4;
-						v4 = (ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * (int)result + 5];
-						if (!v4->Identified())
-						{
-							v81 = window_SpeakInHouse->ptr_1C;
-							v79 = v4;
-							v9 = (int)window_SpeakInHouse->ptr_1C;
-							v110 = uActiveCharacter - 1;
-							v10 = _this->_490EEE(v4, 1, v9, 4);
-							v6 = v110;
-							v5 = (char *)pMerchantsIdentifyPhrases[v10];
-							v7 = BuilDialogueString(v5, v6, v79, (char *)v81, v83, v85);
-							v86 = 3;
-							v84 = v7;
-							v82 = v105;
-							v80 = v3;
-							v78 = v3;
-							v77 = &v101;
-							v8 = pFontArrus->CalcTextHeight(v7, v77, v78, v80);
-							return v101.DrawTitleText(pFontArrus, v3, (174 - v8) / 2 + 138, v82, v84, v86);
-						}
-						v81 = window_SpeakInHouse->ptr_1C;
-						v5 = "%24";
-						v79 = v4;
-				//LABEL_13:
-						v6 = uActiveCharacter - 1;
-				//LABEL_14:
-						v7 = BuilDialogueString(v5, v6, v79, (char *)v81, v83, v85);
-						v86 = 3;
-						v84 = v7;
-						v82 = v105;
-						v80 = v3;
-						v78 = v3;
-						v77 = &v101;
-				//LABEL_15:
-						v8 = pFontArrus->CalcTextHeight(v7, v77, v78, v80);
-						return v101.DrawTitleText(pFontArrus, v3, (174 - v8) / 2 + 138, v82, v84, v86);
-					}
-				}
-			}
-		}
-		break;
-		}
-	case 1:
-		{
-		result = (char *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-		if ( result )
-		{
-			pShopOptions[0] = pGlobalTXT_LocalizationStrings[134];
-			pShopOptions[1] = pGlobalTXT_LocalizationStrings[152];
-			pShopOptions[2] = pGlobalTXT_LocalizationStrings[159];
-			v14 = 0;
-			pShopOptions[3] = pGlobalTXT_LocalizationStrings[160];
-			v15 = pShopOptions;
-			do
-			{
-				v16 = pFontArrus->CalcTextHeight(*v15, &v101, 0, 0);
-				++v15;
-				v14 += v16;
-			}
-			while ( (signed int)v15 < (signed int)&unk_F8B1C8 );
-			v17 = pDialogueWindow;
-			v103 = (174 - v14) / 4;
-			result = (char *)pDialogueWindow->pStartingPosActiveItem;
-			v18 = (int)&result[pDialogueWindow->pNumPresenceButton];
-			v19 = (174 - 4 * (174 - v14) / 4 - v14) / 2 - (174 - v14) / 4 / 2 + 138;
-			v20 = -pDialogueWindow->pNumPresenceButton < 0;
-			_this = (Player *)pDialogueWindow->pStartingPosActiveItem;
-			if ( v20 ^ __OFSUB__((int)result, v18) )
-			{
-				v108 = 2;
-				v109 = (const char **)pShopOptions;
-				do
-				{
-					v21 = v17->GetControl((unsigned int)_this);
-					v22 = v109;
-					v21->uY = v103 + v19;
-					v23 = pFontArrus->CalcTextHeight(*v22, &v101, 0, 0);
-					v24 = v21->uY;
-					v25 = v108;
-					v21->uHeight = v23;
-					v19 = v24 + v23 - 1;
-					v21->uW = v19;
-					v26 = v104;
-					if ( pDialogueWindow->pCurrentPosActiveItem != v25 )
-						v26 = v105;
-					v101.DrawTitleText(pFontArrus, 0, v24, v26, *v109, 3u);
-					v17 = pDialogueWindow;
-					++v108;
-					++v109;
-					_this = (Player *)((char *)_this + 1);
-					result = (char *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
-				}
-				while ( (signed int)_this < (signed int)result );
-			}
-		}
-		break;
-		}
-	default:
-		{
-		if( dialog_menu_id > 5 )
-			result = (char *)(dialog_menu_id - 96);
-		else
-			result = (char *)(dialog_menu_id - 4);
-		break;
-		}
-  }
-  return result;
-}
-
-
-//----- (004B9CC6) --------------------------------------------------------
-POINT *__cdecl AlchemistDialog()
-{
-  Player *v0; // ebx@1
-  POINT *result; // eax@7
-  GUIWindow *v2; // edi@9
-  unsigned int v3; // ebx@9
-  void *v4; // eax@9
-  signed int v5; // esi@9
-  unsigned int v6; // esi@11
-  int v7; // eax@11
-  unsigned int v8; // eax@12
-  int v9; // eax@14
-  int v10; // ecx@19
-  GUIButton *v11; // eax@21
-  GUIButton *v12; // esi@21
-  int v13; // eax@21
-  char *v14; // eax@23
-  int v15; // eax@23
-  unsigned int v16; // ecx@23
-  int v17; // edx@23
-  int v18; // eax@23
-  unsigned __int16 v19; // ax@23
-  int v20; // eax@27
-  char *v21; // edx@29
-  int v22; // esi@30
-  char **v23; // edi@30
-  int v24; // eax@31
-  GUIWindow *v25; // ecx@32
-  int v26; // edx@32
-  int v27; // edi@32
-  unsigned __int8 v28; // sf@32
-  GUIButton *v29; // esi@34
-  const char **v30; // eax@34
-  int v31; // eax@34
-  unsigned int v32; // ecx@34
-  Player *v33; // edx@34
-  int v34; // eax@34
-  unsigned __int16 v35; // ax@34
-  signed int v36; // esi@39
-  ItemGen *v37; // eax@42
-  char *v38; // ecx@43
-  unsigned __int8 v39; // dl@44
-  int v40; // eax@46
-  int v41; // ST08_4@47
-  int v42; // eax@47
-  signed int v43; // esi@49
-  int v44; // ST08_4@52
-  int v45; // eax@52
-  Texture *v46; // ecx@55
-  unsigned int v47; // edi@55
-  unsigned int v48; // esi@57
-  int v49; // edx@61
-  Texture *v50; // ecx@67
-  unsigned int v51; // edi@67
-  unsigned int v52; // esi@69
-  int v53; // edx@73
-  Texture *v54; // ecx@79
-  unsigned int v55; // edi@79
-  unsigned int v56; // esi@81
-  int v57; // edx@85
-  Texture *v58; // ecx@91
-  unsigned int v59; // edi@91
-  unsigned int v60; // esi@93
-  int v61; // edx@97
-  signed int v62; // ecx@102
-  SHORT v63; // di@110
-  bool v64; // eax@110
-  const char *v65; // ecx@112
-  POINT *v66; // esi@117
-  int v67; // ecx@118
-  int v68; // eax@118
-  int v69; // ecx@118
-  ItemGen *v70; // esi@118
-  int v71; // eax@123
-  int v72; // edi@125
-  char **v73; // esi@125
-  int v74; // eax@126
-  GUIWindow *v75; // ecx@127
-  int v76; // edx@127
-  int v77; // edi@127
-  GUIButton *v78; // esi@129
-  const char **v79; // eax@129
-  int v80; // eax@129
-  unsigned int v81; // ecx@129
-  Player *v82; // edx@129
-  unsigned __int16 v83; // ax@129
-  GUIWindow *v84; // [sp-18h] [bp-F0h]@29
-  int v85; // [sp-14h] [bp-ECh]@29
-  int v86; // [sp-10h] [bp-E8h]@29
-  ItemGen *v87; // [sp-10h] [bp-E8h]@43
-  unsigned __int16 v88; // [sp-Ch] [bp-E4h]@29
-  void *v89; // [sp-Ch] [bp-E4h]@43
-  char *v90; // [sp-8h] [bp-E0h]@29
-  int v91; // [sp-8h] [bp-E0h]@42
-  unsigned int v92; // [sp-4h] [bp-DCh]@29
-  __int64 *v93; // [sp-4h] [bp-DCh]@42
-  POINT v94; // [sp+Ch] [bp-CCh]@39
-  POINT v95; // [sp+14h] [bp-C4h]@49
-  POINT v96; // [sp+1Ch] [bp-BCh]@117
-  POINT v97; // [sp+24h] [bp-B4h]@40
-  POINT v98; // [sp+2Ch] [bp-ACh]@117
-  POINT v99; // [sp+34h] [bp-A4h]@49
-  POINT v100; // [sp+3Ch] [bp-9Ch]@50
-  POINT v101; // [sp+44h] [bp-94h]@39
-  POINT v102; // [sp+4Ch] [bp-8Ch]@49
-  POINT a2; // [sp+54h] [bp-84h]@39
-  GUIWindow v104; // [sp+5Ch] [bp-7Ch]@1
-  int v105; // [sp+B0h] [bp-28h]@19
-  int v106; // [sp+B4h] [bp-24h]@1
-  char *Str; // [sp+B8h] [bp-20h]@23
-  int v108; // [sp+BCh] [bp-1Ch]@1
-  __int32 v109; // [sp+C0h] [bp-18h]@39
-  Player *_this; // [sp+C4h] [bp-14h]@1
-  const char **v111; // [sp+C8h] [bp-10h]@9
-  unsigned int v112; // [sp+CCh] [bp-Ch]@9
-  unsigned __int8 v113; // [sp+D3h] [bp-5h]@47
-  int v114; // [sp+D4h] [bp-4h]@11
-
-  v0 = pPlayers[uActiveCharacter];
-  _this = pPlayers[uActiveCharacter];
-  memcpy(&v104, window_SpeakInHouse, sizeof(v104));
-  v104.uFrameX = 483;
-  v104.uFrameWidth = 148;
-  v104.uFrameZ = 334;
-  v108 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-  v106 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
-  switch(dialog_menu_id)
-  {
-	case 1:
-		{
-		result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-		if ( result )
-		{
-		  pShopOptions[0] = pGlobalTXT_LocalizationStrings[134];
-		  pShopOptions[1] = pGlobalTXT_LocalizationStrings[152];
-		  pShopOptions[2] = pGlobalTXT_LocalizationStrings[159];
-		  v72 = 0;
-		  pShopOptions[3] = pGlobalTXT_LocalizationStrings[160];
-		  v73 = pShopOptions;
-		  do
-		  {
-			v74 = pFontArrus->CalcTextHeight(*v73, &v104, 0, 0);
-			++v73;
-			v72 += v74;
-		  }
-		  while ( (signed int)v73 < (signed int)&unk_F8B1C8 );
-		  v75 = pDialogueWindow;
-		  Str = (char *)((174 - v72) / 4);
-		  result = (POINT *)pDialogueWindow->pStartingPosActiveItem;
-		  v76 = (int)((char *)result + pDialogueWindow->pNumPresenceButton);
-		  v77 = (174 - 4 * (174 - v72) / 4 - v72) / 2 - (174 - v72) / 4 / 2 + 138;
-		  v28 = -pDialogueWindow->pNumPresenceButton < 0;
-		  v112 = pDialogueWindow->pStartingPosActiveItem;
-		  if ( v28 ^ __OFSUB__((int)result, v76) )
-		  {
-			_this = (Player *)2;
-			v111 = (const char **)pShopOptions;
-			do
-			{
-			  v78 = v75->GetControl(v112);
-			  v79 = v111;
-			  v78->uY = (unsigned int)&Str[v77];
-			  v80 = pFontArrus->CalcTextHeight(*v79, &v104, 0, 0);
-			  v81 = v78->uY;
-			  v82 = _this;
-			  v78->uHeight = v80;
-			  v77 = v81 + v80 - 1;
-			  v78->uW = v77;
-			  v83 = v106;
-			  if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v82 )
-				v83 = v108;
-			  v104.DrawTitleText(pFontArrus, 0, v81, v83, *v111, 3u);
-			  v75 = pDialogueWindow;
-			  _this = (Player *)((char *)_this + 1);
-			  ++v111;
-			  ++v112;
-			  result = (POINT *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
-			}
-			while ( (signed int)v112 < (signed int)result );
-		  }
-		}
-		return result;
-		}
-	case 3:
-		{
-        draw_leather();
-        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0);
-        result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-        if ( !result
-          || (v43 = pMouse->GetCursorPos(&v99)->x - 14,
-              v109 = (v43 >> 5) + 14 * ((pMouse->GetCursorPos(&v95)->y - 17) >> 5),
-              result = pMouse->GetCursorPos(&v102),
-              result->x <= 13)
-          || (result = pMouse->GetCursorPos(&v100), result->x >= 462)
-          || (result = (POINT *)v0->GetItemIDAtInventoryIndex((int *)&v109), v3 = 0, !result) )
-          return result;
-        v93 = 0;
-        v91 = 3;
-        v89 = window_SpeakInHouse->ptr_1C;
-        v87 = (ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * (int)result + 5];
-        v44 = (int)window_SpeakInHouse->ptr_1C;
-        v113 = uActiveCharacter - 1;
-        v45 = _this->_490EEE(v87, 4, v44, 3);
-        v39 = v113;
-        v38 = (char *)pMerchantsSellPhrases[v45];
-        v21 = BuilDialogueString(v38, v39, v87, (char *)v89, v91, v93);
-        v92 = 3;
-        v90 = v21;
-        v88 = v108;
-        v86 = v3;
-        v85 = v3;
-        v84 = &v104;
-        v40 = pFontArrus->CalcTextHeight(v21, v84, v85, v86);
-        return (POINT *)v104.DrawTitleText(pFontArrus, v3, (174 - v40) / 2 + 138, v88, v90, v92);
-		}
-	case 4:
-		{
-		draw_leather();
-        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0);
-        result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-        if ( !result
-          || (v36 = pMouse->GetCursorPos(&a2)->x - 14,
-              v109 = (v36 >> 5) + 14 * ((pMouse->GetCursorPos(&v94)->y - 17) >> 5),
-              result = pMouse->GetCursorPos(&v101),
-              result->x <= 13)
-          || (result = pMouse->GetCursorPos(&v97), result->x >= 462)
-          || (result = (POINT *)v0->GetItemIDAtInventoryIndex((int *)&v109), v3 = 0, !result) )
-          return result;
-        v93 = 0;
-        v91 = 4;
-        v37 = (ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[36 * (int)result + 5];
-        if (!v37->Identified())
-        {
-          v89 = window_SpeakInHouse->ptr_1C;
-          v87 = v37;
-          v41 = (int)window_SpeakInHouse->ptr_1C;
-          v113 = uActiveCharacter - 1;
-          v42 = _this->_490EEE(v37, 4, v41, 4);
-          v39 = v113;
-          v38 = (char *)pMerchantsIdentifyPhrases[v42];
-        }
-		else
-		{
-			v89 = window_SpeakInHouse->ptr_1C;
-			v38 = "%24";
-			v87 = v37;
-	        v39 = uActiveCharacter - 1;
-		}
-        v21 = BuilDialogueString(v38, v39, v87, (char *)v89, v91, v93);
-        v92 = 3;
-        v90 = v21;
-        v88 = v108;
-        v86 = v3;
-        v85 = v3;
-        v84 = &v104;
-        v40 = pFontArrus->CalcTextHeight(v21, v84, v85, v86);
-        return (POINT *)v104.DrawTitleText(pFontArrus, v3, (174 - v40) / 2 + 138, v88, v90, v92);
-		}
-	case 94:
-		{
-		draw_leather();
-        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-        pShopOptions[0] = pGlobalTXT_LocalizationStrings[200];
-        pShopOptions[1] = pGlobalTXT_LocalizationStrings[113];
-        v22 = 0;
-        v23 = pShopOptions;
-        do
-        {
-          v24 = pFontArrus->CalcTextHeight(*v23, &v104, 0, 0);
-          ++v23;
-          v22 += v24;
-        }
-        while ( (signed int)v23 < (signed int)&pShopOptions[2] );
-        Str = (char *)((174 - v22) / 2);
-        v25 = pDialogueWindow;
-        result = (POINT *)pDialogueWindow->pStartingPosActiveItem;
-        v26 = (int)((char *)result + pDialogueWindow->pNumPresenceButton);
-        v27 = (2 * (87 - (174 - v22) / 2) - v22) / 2 - (174 - v22) / 2 / 2 + 138;
-        v28 = -pDialogueWindow->pNumPresenceButton < 0;
-        v112 = pDialogueWindow->pStartingPosActiveItem;
-        if ( v28 ^ __OFSUB__((int)result, v26) )
-        {
-          _this = (Player *)2;
-          v111 = (const char **)pShopOptions;
-          do
-          {
-            v29 = v25->GetControl(v112);
-            v30 = v111;
-            v29->uY = (unsigned int)&Str[v27];
-            v31 = pFontArrus->CalcTextHeight(*v30, &v104, 0, 0);
-            v32 = v29->uY;
-            v33 = _this;
-            v29->uHeight = v31;
-            v34 = v31 + v32 - 1;
-            v29->uW = v34;
-            v27 = v34;
-            v35 = v106;
-            if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v33 )
-              v35 = v108;
-            v104.DrawTitleText(pFontArrus, 0, v32, v35, *v111, 3u);
-            v25 = pDialogueWindow;
-            _this = (Player *)((char *)_this + 1);
-            ++v111;
-            ++v112;
-            result = (POINT *)(pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem);
-          }
-          while ( (signed int)v112 < (signed int)result );
-        }
-        return result;
-		}
-	case 2:
-		{
-		pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
-		v3 = 0;
-		v114 = 0;
-		do
-		{
-			// if ( pParty->field_777C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] )
-			if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v114].uItemID);
-			{
-				v46 = ItemsInShopTexture[v114];
-				v47 = 152 - v46->uTextureHeight;
-				if ( (signed int)v47 < 1 )
-					v47 = 0;
-				v48 = 75 * v114 - v46->uTextureWidth / 2 + 40;
-				if ( v114 )
-				{
-					if ( v114 == 5 )
-					{
-						v49 = ItemsInShopTexture[5]->uTextureWidth;
-						if ( (signed int)v48 > 457 - v49 )
-						v48 = 457 - v49;
-					}
-				}
-				else if ( (signed int)v48 < 18 )
-					v48 = 18;
-				pRenderer->DrawTextureTransparent(v48, v47, v46);
-				sub_40F92A(&pRenderer->pActiveZBuffer[v48 + 640 * v47], ItemsInShopTexture[v114], v114 + 1);
-	        }
-			++v114;
-		}
-		while ( v114 < 6 );
-		v114 = 0;
-		do
-		{
-			//  if ( pParty->field_777C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 54] )
-			if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v114+1].uItemID);
-			{
-			  v50 = ItemsInShopTexture[v114 + 6];
-			  v51 = 308 - v50->uTextureHeight;
-			  if ( (signed int)v51 < 1 )
-				v51 = 0;
-			  v52 = 75 * v114 - v50->uTextureWidth / 2 + 40;
-			  if ( v114 )
-			  {
-				if ( v114 == 5 )
-				{
-				  v53 = ItemsInShopTexture[11]->uTextureWidth;
-				  if ( (signed int)v52 > 457 - v53 )
-					v52 = 457 - v53;
-				}
-			  }
-			  else
-			  {
-				if ( (signed int)v52 < 18 )
-				  v52 = 18;
-			  }
-			  pRenderer->DrawTextureTransparent(v52, v51, v50);
-			  sub_40F92A(&pRenderer->pActiveZBuffer[v52 + 640 * v51], ItemsInShopTexture[v114 + 6], v114 + 7);
-			}
-			++v114;
-		}
-		while ( v114 < 6 );
-		result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-		if ( result )
-		{
-			v62 = 0;
-			v109 = 0;
-			do
-			{
-			 // if ( pParty->field_777C[9 * (v62 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] )
-				if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v62].uItemID);
-					++v109;
-				++v62;
-			}
-			while ( v62 < 12 );
-			v63 = GetAsyncKeyState(17);
-			v64 = _this->CanSteal();
-			Str = (char *)v64;
-			if ( v63 && v64 )
-			{
-				v65 = pGlobalTXT_LocalizationStrings[185];
-			}
-			else if ( dialog_menu_id == 2 )
-			{
-				v65 = pGlobalTXT_LocalizationStrings[195];
-			}
-			else
-			{
-				v65 = pGlobalTXT_LocalizationStrings[196];
-			}
-			DrawTextAtStatusBar(v65, 0);
-			if ( !v109 )
-			{
-				v104.DrawCurrentTime( pParty->field_3C.field_50[ (unsigned int)window_SpeakInHouse->ptr_1C] - pParty->uTimePlayed);
-				return 0;
-			}
-			v66 = pMouse->GetCursorPos(&v98);
-			result = (POINT *)(v66->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v96)->y]);
-			if ( pRenderer->pActiveZBuffer[(int)result] & 0xFFFF )
-			{
-				v67 = (pRenderer->pActiveZBuffer[(int)result] & 0xFFFF) - 1;
-				v109 = v67;
-				v68 = (int)window_SpeakInHouse->ptr_1C;
-				//  v69 = 9 * (v67 + 12 * v68);
-				v70 = (ItemGen *)&pParty->StandartItemsInShops[v68][v67];
-				if ( dialog_menu_id != 2 )
-					v70 = &pParty->SpecialItemsInShops[(int)v68][v67];//v70 = (ItemGen *)&pParty->field_C59C[v69 + 724];
-				if ( !v63 || !Str )
-				{
-					v93 = 0;
-					v91 = 2;
-					v89 = window_SpeakInHouse->ptr_1C;
-					v87 = v70;
-					v113 = uActiveCharacter - 1;
-					v71 = _this->_490EEE(v70, 4, v68, 2);
-					v39 = v113;
-					v38 = (char *)pMerchantsBuyPhrases[v71];
-				}
-				else
-				{
-					v38 = pGlobalTXT_LocalizationStrings[181];
-					v93 = 0;
-					v91 = 2;
-					v89 = window_SpeakInHouse->ptr_1C;
-					v87 = v70;
-					v39 = uActiveCharacter - 1;
-				}
-				v21 = BuilDialogueString(v38, v39, v87, (char *)v89, v91, v93);
-				v92 = 3;
-				v90 = v21;
-				v88 = v108;
-				v86 = v3;
-				v85 = v3;
-				v84 = &v104;
-				v40 = pFontArrus->CalcTextHeight(v21, v84, v85, v86);
-				return (POINT *)v104.DrawTitleText(pFontArrus, v3, (174 - v40) / 2 + 138, v88, v90, v92);
-			}
-		}
-		return result;
-		}
-	case 95:
-		{
-		pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
-		v3 = 0;
-		v114 = 0;
-		do
-		{
-			//if ( pParty->field_C59C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
-			if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v114].uItemID)
-			{
-			  v54 = ItemsInShopTexture[v114];
-			  v55 = 152 - v54->uTextureHeight;
-			  if ( (signed int)v55 < 1 )
-				v55 = 0;
-			  v56 = 75 * v114 - v54->uTextureWidth / 2 + 40;
-			  if ( v114 )
-			  {
-				if ( v114 == 5 )
-				{
-				  v57 = ItemsInShopTexture[5]->uTextureWidth;
-				  if ( (signed int)v56 > 457 - v57 )
-					v56 = 457 - v57;
-				}
-			  }
-			  else
-			  {
-				if ( (signed int)v56 < 18 )
-				  v56 = 18;
-			  }
-			  pRenderer->DrawTextureTransparent(v56, v55, v54);
-			  sub_40F92A(&pRenderer->pActiveZBuffer[v56 + 640 * v55], ItemsInShopTexture[v114], v114 + 1);
-			}
-			++v114;
-		}
-		while ( v114 < 6 );
-		v114 = 0;
-		do
-		{
-		// if ( pParty->field_C59C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 778] )   //weak 
-			if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v114].uItemID) //not itemid
-			{
-				v58 = ItemsInShopTexture[v114 + 6];
-				v59 = 308 - v58->uTextureHeight;
-				if ( (signed int)v59 < 1 )
-				v59 = 0;
-				v60 = 75 * v114 - v58->uTextureWidth / 2 + 40;
-				if ( v114 )
-				{
-					if ( v114 == 5 )
-					{
-						v61 = ItemsInShopTexture[11]->uTextureWidth;
-						if ( (signed int)v60 > 457 - v61 )
-						v60 = 457 - v61;
-					}
-				}
-				else
-				{
-					if ( (signed int)v60 < 18 )
-						v60 = 18;
-				}
-				pRenderer->DrawTextureTransparent(v60, v59, v58);
-				sub_40F92A(&pRenderer->pActiveZBuffer[v60 + 640 * v59], ItemsInShopTexture[v114 + 6], v114 + 7);
-			}
-			++v114;
-		}
-		while ( v114 < 6 );
-		result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-		if ( result )
-		{
-			v62 = 0;
-			v109 = 0;
-			do
-			{
-				//if ( pParty->field_C59C[9 * (v62 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
-				if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v62].uItemID)
-					++v109;
-				++v62;
-			}
-			while ( v62 < 12 );
-				v63 = GetAsyncKeyState(17);
-			v64 = _this->CanSteal();
-			Str = (char *)v64;
-			if ( v63 && v64 )
-			{
-				v65 = pGlobalTXT_LocalizationStrings[185];
-			}
-			else
-			{
-				v65 = pGlobalTXT_LocalizationStrings[195];
-				if ( dialog_menu_id != 2 )
-					v65 = pGlobalTXT_LocalizationStrings[196];
-			}
-			DrawTextAtStatusBar(v65, 0);
-			if ( !v109 )
-			{
-				v104.DrawCurrentTime( pParty->field_3C.field_50[ (unsigned int)window_SpeakInHouse->ptr_1C] - pParty->uTimePlayed);
-				return 0;
-			}
-			v66 = pMouse->GetCursorPos(&v98);
-			result = (POINT *)(v66->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v96)->y]);
-			if ( pRenderer->pActiveZBuffer[(int)result] & 0xFFFF )
-			{
-				v67 = (pRenderer->pActiveZBuffer[(int)result] & 0xFFFF) - 1;
-				v109 = v67;
-				v68 = (int)window_SpeakInHouse->ptr_1C;
-				//  v69 = 9 * (v67 + 12 * v68);
-				v70 = (ItemGen *)&pParty->StandartItemsInShops[v68][v67];
-				if ( dialog_menu_id != 2 )
-					v70 = &pParty->SpecialItemsInShops[(int)v68][v67];//v70 = (ItemGen *)&pParty->field_C59C[v69 + 724];
-				if ( !v63 || !Str )
-				{
-					v93 = 0;
-					v91 = 2;
-					v89 = window_SpeakInHouse->ptr_1C;
-					v87 = v70;
-					v113 = uActiveCharacter - 1;
-					v71 = _this->_490EEE(v70, 4, v68, 2);
-					v39 = v113;
-					v38 = (char *)pMerchantsBuyPhrases[v71];
-				}
-				else
-				{
-					v38 = pGlobalTXT_LocalizationStrings[181];
-					v93 = 0;
-					v91 = 2;
-					v89 = window_SpeakInHouse->ptr_1C;
-					v87 = v70;
-					v39 = uActiveCharacter - 1;
-				}
-				v21 = BuilDialogueString(v38, v39, v87, (char *)v89, v91, v93);
-				v92 = 3;
-				v90 = v21;
-				v88 = v108;
-				v86 = v3;
-				v85 = v3;
-				v84 = &v104;
-				v40 = pFontArrus->CalcTextHeight(v21, v84, v85, v86);
-				return (POINT *)v104.DrawTitleText(pFontArrus, v3, (174 - v40) / 2 + 138, v88, v90, v92);
-			}
-		}
-		return result;
-		}
-	case 96:
-		{
-        if (!sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win())
-          return 0;
-        v2 = pDialogueWindow;
-        v3 = 0;
-        v4 = window_SpeakInHouse->ptr_1C;
-        v112 = 0;
-        //v5 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (signed int)v4] * 500.0);
-        v5 = (signed __int64)(p2DEvents[(signed int)v4 - 1].flt_24 * 500.0);
-        v111 = (const char **)(v5 * (100 - _this->GetMerchant()) / 100);
-        if ( (signed int)v111 < v5 / 3 )
-          v111 = (const char **)(v5 / 3);
-        v6 = v2->pStartingPosActiveItem;
-        v7 = v6 + v2->pNumPresenceButton;
-        v114 = 0;
-        if ( (signed int)v6 < v7 )
-        {
-          do
-          {
-            v8 = v2->GetControl(v6)->uControlParam - 36;
-            if ( byte_4ED970_skill_learn_ability_by_class_table[_this->classType][v8] && !_this->pActiveSkills[v8] )
-            {
-              v9 = pFontArrus->CalcTextHeight(pSkillNames[v8], &v104, 0, 0);
-              v112 += v9;
-              ++v114;
-            }
-            ++v6;
-          }
-          while ( (signed int)v6 < v2->pNumPresenceButton + v2->pStartingPosActiveItem );
-          if ( v114 )
-          {
-            sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v111);
-            v104.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
-            v111 = (const char **)((signed int)(149 - v112) / v114);
-            if ( (signed int)(149 - v112) / v114 > 32 )
-              v111 = (const char **)32;
-            result = (POINT *)v2->pStartingPosActiveItem;
-            v10 = (signed int)(149 - v114 * (int)v111 - v112) / 2 - (signed int)v111 / 2 + 162;
-            v112 = (unsigned int)result;
-            v105 = v10;
-            if ( (signed int)result < (signed int)((char *)result + v2->pNumPresenceButton) )
-            {
-              v114 = 2;
-              do
-              {
-                v11 = v2->GetControl(v112);
-                v12 = v11;
-                v13 = v11->uControlParam - 36;
-                if ( !byte_4ED970_skill_learn_ability_by_class_table[_this->classType][v13] || _this->pActiveSkills[v13] )
-                {
-                  v12->uW = 0;
-                  v12->uHeight = 0;
-                  v12->uY = 0;
-                }
-                else
-                {
-                  v14 = pSkillNames[v13];
-                  v12->uY = (unsigned int)((char *)v111 + v105);
-                  Str = v14;
-                  v15 = pFontArrus->CalcTextHeight(v14, &v104, 0, 0);
-                  v16 = v12->uY;
-                  v17 = v114;
-                  v12->uHeight = v15;
-                  v18 = v16 + v15 - 1;
-                  v12->uW = v18;
-                  v105 = v18;
-                  v19 = v106;
-                  if ( pDialogueWindow->pCurrentPosActiveItem != v17 )
-                    v19 = v108;
-                  v104.DrawTitleText(pFontArrus, 0, v16, v19, Str, 3u);
-                }
-                v20 = v2->pStartingPosActiveItem;
-                ++v112;
-                result = (POINT *)(v2->pNumPresenceButton + v20);
-                ++v114;
-              }
-              while ( (signed int)v112 < (signed int)result );
-            }
-            return result;
-          }
-        }
-        sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], _this->pName, pClassNames[_this->classType]);
-        strcat(pTmpBuf, "\n \n");
-        strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
-        v21 = pTmpBuf;
-        v92 = 3;
-        v90 = pTmpBuf;
-        v88 = v106;
-        v86 = 0;
-        v85 = 0;
-        v84 = &v104;
-        v40 = pFontArrus->CalcTextHeight(v21, v84, v85, v86);
-        return (POINT *)v104.DrawTitleText(pFontArrus, v3, (174 - v40) / 2 + 138, v88, v90, v92);
-		}
-	default:
-		{
-			return (POINT *)dialog_menu_id - 96;
-		}
-  }
-}
-
-
-//----- (004BA928) --------------------------------------------------------
-void __cdecl ArmorShopDialog()
-    {
-    Player *v0; // ebx@1
-    signed int v1; // esi@8
-    unsigned int v2; // eax@10
-    ItemGen *v3; // eax@11
-    unsigned __int8 v4; // dl@12
-    char *v5; // ecx@12
-    char *v6; // eax@13
-    int v7; // ST08_4@15
-    int v8; // eax@15
-    signed int v9; // esi@17
-    unsigned int v10; // eax@19
-    char *v11; // edi@19
-    int v12; // ST08_4@20
-    int v13; // eax@20
-    unsigned __int8 v14; // dl@20
-    char *v15; // ecx@20
-    char **v16; // edi@22
-    int all_text_height; // ebx@22
-    char **v18; // esi@22
-    int v19; // eax@23
-    GUIWindow *v20; // ecx@24
-    int v21; // eax@24
-    int v22; // edx@24
-    int v23; // ebx@24
-    unsigned __int8 v24; // sf@24
-    GUIButton *control_button; // eax@26
-    GUIButton *v26; // esi@26
-    int v27; // eax@26
-    unsigned int v28; // ecx@26
-    int v29; // edx@26
-
-    signed int v31; // esi@31
-    unsigned int v32; // eax@33
-    int v33; // eax@34
-    int v34; // ST08_4@35
-    int v35; // eax@35
-    char *v36; // edx@36
-    GUIWindow *v37; // edi@42
-    signed int v38; // esi@42
-    unsigned int v39; // esi@44
-    int v40; // eax@44
-    unsigned int v41; // eax@45
-    int v42; // eax@47
-    int v43; // ecx@52
-    GUIButton *v44; // eax@54
-    GUIButton *v45; // esi@54
-    int v46; // eax@54
-    char *v47; // eax@56
-    int v48; // eax@56
-    unsigned int v49; // ecx@56
-    int v50; // edx@56
-    int v51; // eax@56
-    unsigned __int16 v52; // ax@56
-    int v53; // eax@60
-    int textureH; // eax@60
-    signed int textureW; // ebx@65
-    Texture *v56; // eax@67
-    unsigned int v57; // edi@68
-    Texture *v58; // ST1C_4@68
-    int v59; // eax@68
-    int v60; // edi@69
-    signed int v61; // ebx@73
-    Texture *v62; // eax@75
-    int v63; // edi@76
-    Texture *v64; // ST1C_4@76
-    unsigned int v65; // ST18_4@76
-    int v66; // eax@76
-    int v67; // edi@77
-    signed int v68; // ecx@81
-    SHORT v69; // bx@89
-    bool v70; // eax@89
-    const char *v71; // ecx@91
-    void *v72; // eax@95
-    POINT *v73; // esi@97
-    int v74; // ecx@97
-    int v75; // eax@98
-    int v76; // ecx@98
-    ItemGen *selected_item; // ecx@99
-    unsigned __int8 v78; // bl@104
-    char **v79; // edi@105
-    int v80; // ebx@105
-    char **v81; // esi@105
-    int v82; // eax@106
-    GUIWindow *v83; // ecx@107
-    int v84; // eax@107
-    int v85; // edx@107
-    int v86; // ebx@107
-    GUIButton *v87; // eax@109
-    GUIButton *v88; // esi@109
-    int v89; // eax@109
-    unsigned int v90; // ecx@109
-    int v91; // edx@109
-    unsigned __int16 v92; // ax@109
-    signed int v93; // edx@114
-    POINT *v94; // edi@120
-    __int32 v95; // ecx@120
-    void *v96; // ST14_4@122
-    unsigned __int8 v97; // bl@122
-    ItemGen *v98; // ST10_4@122
-    int v99; // eax@122
-    char *v100; // eax@122
-    const char *v101; // ST18_4@122
-    unsigned __int16 v102; // ST14_2@122
-    int v103; // eax@122
-    signed int v104; // edi@123
-    Texture *v105; // eax@125
-    int v106; // ebx@126
-    Texture *v107; // ST1C_4@126
-    unsigned int v108; // ST18_4@126
-    int v109; // eax@126
-    int v110; // ebx@127
-    GUIWindow *v111; // [sp-18h] [bp-11Ch]@36
-    unsigned int v112; // [sp-14h] [bp-118h]@13
-    int v113; // [sp-14h] [bp-118h]@36
-    ItemGen *v114; // [sp-10h] [bp-114h]@12
-    unsigned int v115; // [sp-10h] [bp-114h]@13
-    ItemGen *v116; // [sp-10h] [bp-114h]@20
-    int v117; // [sp-10h] [bp-114h]@36
-    void *v118; // [sp-Ch] [bp-110h]@12
-    unsigned __int16 v119; // [sp-Ch] [bp-110h]@13
-    void *v120; // [sp-Ch] [bp-110h]@20
-    char *v121; // [sp-8h] [bp-10Ch]@13
-    int v122; // [sp-8h] [bp-10Ch]@20
-    unsigned int v123; // [sp-4h] [bp-108h]@13
-    __int64 *v124; // [sp-4h] [bp-108h]@20
-    int v125; // [sp-4h] [bp-108h]@68
-    int v126; // [sp-4h] [bp-108h]@76
-    int v127; // [sp-4h] [bp-108h]@126
-    POINT v128; // [sp+Ch] [bp-F8h]@8
-    POINT v129; // [sp+14h] [bp-F0h]@18
-    char v130; // [sp+1Ch] [bp-E8h]@120
-    POINT a2; // [sp+24h] [bp-E0h]@8
-    POINT v132; // [sp+2Ch] [bp-D8h]@120
-    POINT v133; // [sp+34h] [bp-D0h]@17
-    POINT v134; // [sp+3Ch] [bp-C8h]@97
-    POINT v135; // [sp+44h] [bp-C0h]@31
-    POINT v136; // [sp+4Ch] [bp-B8h]@97
-    POINT v137; // [sp+54h] [bp-B0h]@17
-    POINT v138; // [sp+5Ch] [bp-A8h]@32
-    POINT v139; // [sp+64h] [bp-A0h]@17
-    POINT v140; // [sp+6Ch] [bp-98h]@31
-    POINT v141; // [sp+74h] [bp-90h]@8
-    POINT v142; // [sp+7Ch] [bp-88h]@31
-    POINT v143; // [sp+84h] [bp-80h]@9
-    GUIWindow dialog_window; // [sp+8Ch] [bp-78h]@1
-    char *Str; // [sp+E0h] [bp-24h]@56
-    int v146; // [sp+E4h] [bp-20h]@24
-    int hilight_color; // [sp+E8h] [bp-1Ch]@1
-    int m_text_color; // [sp+ECh] [bp-18h]@1
-    __int32 v149; // [sp+F0h] [bp-14h]@8
-    Player* _this; // [sp+F4h] [bp-10h]@1
-    unsigned __int8 uPlayerID; // [sp+FBh] [bp-9h]@15
-    int v152; // [sp+FCh] [bp-8h]@24
-    int v153; // [sp+100h] [bp-4h]@44
-    int th;
-    short text_color;
-
-    v0 = pPlayers[uActiveCharacter];
-    _this = pPlayers[uActiveCharacter];
-    memcpy(&dialog_window, window_SpeakInHouse, sizeof(dialog_window));
-    dialog_window.uFrameX = 483;
-    dialog_window.uFrameWidth = 148;
-    dialog_window.uFrameZ = 334;
-    m_text_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-    hilight_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
-    switch (dialog_menu_id)
-        {
-    case 1:  //main shop text
-        {
-        if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-            return;
-        pShopOptions[0] = pGlobalTXT_LocalizationStrings[134]; //"Buy Standard"
-        pShopOptions[1] = pGlobalTXT_LocalizationStrings[152]; //"Buy Special"
-        pShopOptions[2] = pGlobalTXT_LocalizationStrings[159]; //"Display Inventory"
-        pShopOptions[3] = pGlobalTXT_LocalizationStrings[160];
-
-        all_text_height = 0;
-        for(int i=0;i<4;++i)
-            all_text_height += pFontArrus->CalcTextHeight(pShopOptions[i], &dialog_window, 0, 0);
-        v146 = (174 - all_text_height) / 4;
-
-        v23 = (174 - 4 * (174 - all_text_height) / 4 - all_text_height) / 2 - (174 - all_text_height) / 4 / 2 + 138;
-        int j=0;
-        if ( pDialogueWindow->pNumPresenceButton>=0 )
-            {
-            th = 2;
-            for (v152 = pDialogueWindow->pStartingPosActiveItem; v152 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;  ++v152)
-                {
-                control_button = pDialogueWindow->GetControl(v152);
-                control_button->uY = v146 + v23;
-                v27 = pFontArrus->CalcTextHeight(pShopOptions[j], &dialog_window, 0, 0);
-                control_button->uHeight = v27;
-                v23 = control_button->uY + control_button->uHeight - 1;
-                control_button->uW = v23;
-                text_color = hilight_color;
-                if ( pDialogueWindow->pCurrentPosActiveItem != th )
-                    text_color = m_text_color;
-                dialog_window.DrawTitleText(pFontArrus, 0, control_button->uY, text_color, pShopOptions[j], 3);
-                ++th;               
-                ++j;
-                }
-            }
-        }
-        break;
-    case 2: //buy standart
-        {
-        pRenderer->DrawTextureIndexed(8, 8, ShopTexture);
-        textureW = 0;
-        v153 = 0;
-        for(int i=0; i<8; ++i)
-            {
-            if ( pParty->StandartItemsInShops[window_SpeakInHouse->par1C][i].uItemID);
-                {
-                textureW = ItemsInShopTexture[i]->uTextureWidth;
-                textureH = ItemsInShopTexture[i]->uTextureHeight;
-                if ( i >= 4 )  //low row
-                    {
-                    v60 = 90 - (textureW/2);
-                    pRenderer->DrawTextureTransparent(v60 + v153 - 420, 126, ItemsInShopTexture[i]);
-                    v59 = v60 + v153 + 80220;
-                    }
-                else
-                    {
-                    v57 = 98 -  textureH;
-                    v152 = 86 - (textureW/2);
-                    pRenderer->DrawTextureTransparent(v153 + v152, v57, ItemsInShopTexture[i]);
-                    v59 = v153 + v152 + 640 * v57;
-                    }
-                ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v59], ItemsInShopTexture[i], i+1);
-                }
-                v153 += 105;
-
-            }
-
-        if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-            return;
-
-        v149 = 0;
-        for(int i=0; i<8; ++i)
-            {
-            if ( pParty->StandartItemsInShops[window_SpeakInHouse->par1C][i].uItemID);
-            ++v149;
-
-            }
-
-        v69 = GetAsyncKeyState(17);
-        v70 = _this->CanSteal();
-        //Str = (char *)v70;
-        if ( v69 == 0 || v70 == 0 )
-            {
-            v71 = pGlobalTXT_LocalizationStrings[195]; //"Select the Item to Buy"
-            }
-        else
-            {
-            v71 = pGlobalTXT_LocalizationStrings[185];//"Steal item"
-            }
-        DrawTextAtStatusBar(v71, 0);
-        if ( v149 != 0 )
-            {
-            v73 = pMouse->GetCursorPos(&v136);
-            v74 = pRenderer->pActiveZBuffer[v73->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v134)->y]] & 0xFFFF;
-            if ( !v74 )
-                return;
-            v149 = v74 - 1;
-            selected_item = &pParty->StandartItemsInShops[window_SpeakInHouse->par1C][v74-1];
-            if ( v69 ==0 || v70 == 0)
-                {
-                v120 = window_SpeakInHouse->ptr_1C;
-                v15 = (char *)pMerchantsBuyPhrases[_this->_490EEE(selected_item, 2, window_SpeakInHouse->par1C, 2)];
-                }
-            else
-                {
-                v120 = window_SpeakInHouse->ptr_1C;
-                v15 = pGlobalTXT_LocalizationStrings[181]; //"Steal %24"
-                }
-            v36 = BuilDialogueString(v15, uActiveCharacter - 1, selected_item, (char *)v120, 2, 0);
-            v115 = (174 - pFontArrus->CalcTextHeight(v36, &dialog_window, 0, 0)) / 2 + 138;
-            dialog_window.DrawTitleText(pFontArrus, 0, v115, m_text_color, v36, 3);
-            return;
-            }
-        dialog_window.DrawCurrentTime( pParty->field_3C.field_50[window_SpeakInHouse->par1C]- pParty->uTimePlayed);
-        return;
-        }
-        break;
-    case 3:  //sell
-        {
-        draw_leather();
-        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0);//"Select the Item to Sell"
-        if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win())
-            return;
-
-            if((v9 = pMouse->GetCursorPos(&v139)->x - 14,
-            v149 = (v9 >> 5) + 14 * ((pMouse->GetCursorPos(&v133)->y - 17) >> 5),
-            pMouse->GetCursorPos(&v137)->x <= 13)
-            || pMouse->GetCursorPos(&v129)->x >= 462
-            || (v10 = v0->GetItemIDAtInventoryIndex((int *)&v149), v11 = 0, !v10) )
-            return;
-   
-        v116 = (ItemGen *)&v0->pInventoryItems[v10-1];
-   
-        v13 = v0->_490EEE(v116, 2, window_SpeakInHouse->par1C, 3);
-    
-        v15 = (char *)pMerchantsSellPhrases[v0->_490EEE(v116, 2, window_SpeakInHouse->par1C, 3)];
-        v36 = BuilDialogueString(v15, uActiveCharacter - 1, v116, (char *) window_SpeakInHouse->par1C, 3, 0);
-  
-        v115 = (174 - pFontArrus->CalcTextHeight(v36, &dialog_window, 0, 0)) / 2 + 138;
-        dialog_window.DrawTitleText(pFontArrus, 0, v115, m_text_color, v36, 3);
-        return;
-        }
-        break;
-    case 4: //identify
-        {
-        draw_leather();
-        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0); //"Select the Item to Identify"	
-        if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-            {
-            v1 = pMouse->GetCursorPos(&a2)->x - 14;
-            v149 = (v1 >> 5) + 14 * ((pMouse->GetCursorPos(&v128)->y - 17) >> 5);
-            if ( pMouse->GetCursorPos(&v141)->x > 13 )
-                {
-                if ( pMouse->GetCursorPos(&v143)->x < 462 )
-                    {
-                    v2 = v0->GetItemIDAtInventoryIndex((int *)&v149);
-                    if ( v2 )
-                        {
-                        v3 = (ItemGen *)&v0->pInventoryItems[v2-1];
-                        if (v3->Identified())
-                            {
-                            v118 = window_SpeakInHouse->ptr_1C;
-                            v4 = uActiveCharacter - 1;
-                            v5 = "%24";
-                            v114 = v3;
-                            }
-                        else
-                            {
-                            v118 = window_SpeakInHouse->ptr_1C;
-                            v114 = v3;
-                            v7 = (int)window_SpeakInHouse->ptr_1C;
-                            uPlayerID = uActiveCharacter - 1;
-                            v8 = v0->_490EEE(v3, 2, v7, 4);
-                            v4 = uPlayerID;
-                            v5 = (char *)pMerchantsIdentifyPhrases[v8];
-                            }
-                        v6 = BuilDialogueString(v5, v4, v114, (char *)v118, 4, 0);
-                        v115 = (174 - pFontArrus->CalcTextHeight(v6, &dialog_window, 0, 0)) / 2 + 138;
-                        dialog_window.DrawTitleText(pFontArrus, 0, v115, m_text_color, v6, 3);
-                        return;
-                        }
-                    }
-                }
-            }
-        }
-        break;
-    case 5:  //repair
-        {
-        draw_leather();
-        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[198], 0);
-        if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win())
-            return;
-
-          if( (v31 = pMouse->GetCursorPos(&v135)->x - 14,
-            v149 = (v31 >> 5) + 14 * ((pMouse->GetCursorPos(&v142)->y - 17) >> 5),
-            pMouse->GetCursorPos(&v140)->x <= 13)
-            || pMouse->GetCursorPos(&v138)->x >= 462
-            || (v32 = v0->GetItemIDAtInventoryIndex((int *)&v149), v11 = 0, !v32)
-            || (v33 = 9 * v32, !(v0->field_1F5[4 * v33 + 15] & 2)) )
-            return;
-  
-
-        v120 = window_SpeakInHouse->ptr_1C;
-        v116 = (ItemGen *)&v0->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * v33 + 5];
-        v34 = (int)window_SpeakInHouse->ptr_1C;
-        uPlayerID = uActiveCharacter - 1;
-        v35 = v0->_490EEE((ItemGen *)&v0->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * v33 + 5], 2, v34, 5);
-        v14 = uPlayerID;
-        v15 = (char *)pMerchantsRepairPhrases[v35];
-        v36 = BuilDialogueString(v15, v14, v116, (char *)v120, 5, 0);
-        v115 = (174 - pFontArrus->CalcTextHeight(v36, &dialog_window, 0, 0)) / 2 + 138;
-        dialog_window.DrawTitleText(pFontArrus, 0, v115, m_text_color, v36, 3);
-        return;
-        }
-        break;
-    case 6: //buy standart
-        {
-        pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
-        DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[195], 0); //"Select the Item to Buy"
-        if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-            return;
-        v149 = 0;
-        for(int i=0;i<6;++i)
-            if (pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][i].uItemID)
-                ++v149;
-
-
-        if ( v149 )
-            {
-            v94 = pMouse->GetCursorPos(&v132);
-            v149 = pRenderer->pActiveZBuffer[v94->x + pSRZBufferLineOffsets[pMouse->GetCursorPos((POINT *)&v130)->y]];
-            v95 = v149;
-            if ( v149 && v149 != -65536 )
-                {
-                --v149;
- 
-                v97 = uActiveCharacter - 1;
-
-                v99 = _this->_490EEE(
-                    &pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][v95-1], 2,	window_SpeakInHouse->par1C,	2);
-                v100 = BuilDialogueString((char *)pMerchantsBuyPhrases[v99], uActiveCharacter - 1, v98, (char *)window_SpeakInHouse->par1C, 2, 0);
-                v103 = pFontArrus->CalcTextHeight(v100, &dialog_window, 0, 0);
-                dialog_window.DrawTitleText(pFontArrus, 0, (174 - v103) / 2 + 138, m_text_color, v100, 3);
-                }
-            v104 = 0;
-            v153 = 0;
-            do
-                {
-                //if ( pParty->field_C59C[9 * (v104 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
-                if (pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][v104].uItemID)
-                    {
-                    v105 = ItemsInShopTexture[v104];
-                    if ( v104 >= 4 )
-                        {
-                        v110 = 90 - ((signed int)v105->uTextureWidth >> 1);
-                        pRenderer->DrawTextureTransparent(v153 + v110 - 420, 0x7Eu, ItemsInShopTexture[v104]);
-                        v127 = v104 + 1;
-                        v109 = v153 + v110 + 80220;
-                        }
-                    else
-                        {
-                        v106 = 98 - v105->uTextureHeight;
-                        v107 = ItemsInShopTexture[v104];
-                        v108 = 98 - v105->uTextureHeight;
-                        v152 = 86 - ((signed int)v105->uTextureWidth >> 1);
-                        pRenderer->DrawTextureTransparent(v152 + v153, v108, v107);
-                        v127 = v104 + 1;
-                        v109 = v152 + v153 + 640 * v106;
-                        }
-                    ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v109], ItemsInShopTexture[v104], v127);
-                    }
-                v153 += 105;
-                ++v104;
-                }
-                while ( v104 < 8 );
-                return;
-            }
-        dialog_window.DrawCurrentTime(pParty->field_3C.field_50[window_SpeakInHouse->par1C]-  pParty->uTimePlayed);
-        return;
-        }
-        break;
-    case 94: //character inventory
-        {
-        draw_leather();
-        CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-        v79 = pShopOptions;
-        pShopOptions[0] = pGlobalTXT_LocalizationStrings[200]; //"Sell"
-        pShopOptions[1] = pGlobalTXT_LocalizationStrings[113]; //"Identify"
-        pShopOptions[2] = pGlobalTXT_LocalizationStrings[179]; //"Repair"
-
-        all_text_height = 0;
-        for(int i=0;i<3;++i)
-            all_text_height += pFontArrus->CalcTextHeight(pShopOptions[i], &dialog_window, 0, 0);
-        v83 = pDialogueWindow;
-        v152 = (174 - all_text_height) / 3;
-        v84 = pDialogueWindow->pStartingPosActiveItem;
-        v85 = v84 + pDialogueWindow->pNumPresenceButton;
-        v86 = (3 * (58 - v152) - all_text_height) / 2 - v152 / 2 + 138;
-        v24 = -pDialogueWindow->pNumPresenceButton < 0;
-        _this = (Player *)pDialogueWindow->pStartingPosActiveItem;
-        if ( v24 ^ __OFSUB__(v84, v85) )
-            {
-            v153 = 2;
-            do
-                {
-                v87 = v83->GetControl((unsigned int)_this);
-                v88 = v87;
-                v87->uY = v152 + v86;
-                v89 = pFontArrus->CalcTextHeight(*v79, &dialog_window, 0, 0);
-                v90 = v88->uY;
-                v91 = v153;
-                v88->uHeight = v89;
-                v86 = v90 + v89 - 1;
-                v88->uW = v86;
-                v92 = hilight_color;
-                if ( pDialogueWindow->pCurrentPosActiveItem != v91 )
-                    v92 = m_text_color;
-                dialog_window.DrawTitleText(pFontArrus, 0, v90, v92, *v79, 3u);
-                v83 = pDialogueWindow;
-                ++v153;
-                ++v79;
-                _this = (Player *)((char *)_this + 1);
-                }
-                while ( (signed int)_this < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
-            }
-        return;
-        }
-        break;
-    case 95:  //buy spesial
-        {
-
-        pRenderer->DrawTextureIndexed(8, 8, ShopTexture);
-
-        v11 = 0;
-        v61 = 0;
-        v153 = 0;
-        do
-            {
-            if (pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][v61].uItemID)
-                {
-                v62 = ItemsInShopTexture[v61];
-                if ( v61 >= 4 )
-                    {
-                    v67 = 90 - ((signed int)v62->uTextureWidth >> 1);
-                    pRenderer->DrawTextureTransparent(v153 + v67 - 420, 0x7Eu, ItemsInShopTexture[v61]);
-                    v66 = v153 + v67 + 80220;
-                    }
-                else
-                    {
-                    v63 = 98 - v62->uTextureHeight;
-                    v64 = ItemsInShopTexture[v61];
-                    v65 = 98 - v62->uTextureHeight;
-                    v152 = 86 - ((signed int)v62->uTextureWidth >> 1);
-                    pRenderer->DrawTextureTransparent(v152 + v153, v65, v64);
-                    v66 = v152 + v153 + 640 * v63;
-                    }
-                ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v66], ItemsInShopTexture[v61], v61 + 1);
-                }
-            v153 += 105;
-            ++v61;
-            }
-            while ( v61 < 8 );
-
-            if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-                return;
-            v68 = 0;
-            v149 = 0;
-
-            do
-                {
-                // if ( (char *)pParty->field_C59C[9 * (v68 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] != v11 )
-                if (pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][(signed int)v68].uItemID)
-                    ++v149;
-                ++v68;
-                }
-                while ( v68 < 6 );
-
-                v69 = GetAsyncKeyState(17);
-                v70 = _this->CanSteal();
-                Str = (char *)v70;
-                if ( v69 == 0 || (char *)v70 == 0 )
-                    {
-                    v71 = pGlobalTXT_LocalizationStrings[196]; //Select the Special Item to Buy"
-                    }
-                else
-                    {
-                    v71 = pGlobalTXT_LocalizationStrings[185];
-                    }
-                DrawTextAtStatusBar(v71, 0);
-                if ( (char *)v149 != 0 )
-                    {
-                    v73 = pMouse->GetCursorPos(&v136);
-                    v74 = pRenderer->pActiveZBuffer[v73->x + pSRZBufferLineOffsets[pMouse->GetCursorPos((POINT *)&v134)->y]] & 0xFFFF;
-                    if ( !v74 )
-                        return;
-                    v149 = v74 - 1;
-
-                    if ( dialog_menu_id == 2 )
-                        selected_item = &pParty->StandartItemsInShops[window_SpeakInHouse->par1C][v74-1];
-                    else
-                        selected_item = &pParty->SpecialItemsInShops[window_SpeakInHouse->par1C][v74-1];//(ItemGen *)&pParty->field_C59C[v76 + 724];
-                    if ( v69 == 0 || Str == 0 )
-                        {
-                        v120 = window_SpeakInHouse->ptr_1C;
-                        v15 = (char *)pMerchantsBuyPhrases[_this->_490EEE(selected_item, 2, window_SpeakInHouse->par1C, 2)];
-                        }
-                    else
-                        {
-                        v120 = window_SpeakInHouse->ptr_1C;
-                        v15 = pGlobalTXT_LocalizationStrings[181]; //"Steal %24"
-                        }
-                    v36 = BuilDialogueString(v15, uActiveCharacter - 1, selected_item, (char *)v120, 2, 0);
-                    v115 = (174 - pFontArrus->CalcTextHeight(v36, &dialog_window, 0, 0)) / 2 + 138;
-                    dialog_window.DrawTitleText(pFontArrus, 0, v115, m_text_color, v36, 3);
-                    return;
-                    }
-                dialog_window.DrawCurrentTime( pParty->field_3C.field_50[window_SpeakInHouse->par1C]- pParty->uTimePlayed);
-                return;
-        }
-
-        break;
-    case 96:  //skills
-        {
-
-        if (!sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-            return;
-        v152 = 0;
-        v37 = pDialogueWindow;
-        //v38 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (unsigned int)ptr_507BC0->ptr_1C] * 500.0);
-        v38 = (signed __int64)(p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].flt_24 * 500.0);
-        _this = (Player *)(v38 * (100 - v0->GetMerchant()) / 100);
-        if ( (signed int)_this < v38 / 3 )
-            _this = (Player *)(v38 / 3);
-        v39 = v37->pStartingPosActiveItem;
-        v40 = v37->pNumPresenceButton;
-        v153 = 0;
-        if ( (signed int)v39 < (signed int)(v39 + v40) )
-            {
-            do
-                {
-                v41 = v37->GetControl(v39)->uControlParam - 36;
-                if ( byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v41] && !v0->pActiveSkills[v41] )
-                    {
-                    v42 = pFontArrus->CalcTextHeight(pSkillNames[v41], &dialog_window, 0, 0);
-                    v152 += v42;
-                    ++v153;
-                    }
-                ++v39;
-                }
-                while ( (signed int)v39 < v37->pNumPresenceButton + v37->pStartingPosActiveItem );
-                if ( v153 )
-                    {
-                    sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], _this);
-                    dialog_window.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
-                    _this = (Player *)((149 - v152) / v153);
-                    if ( (149 - v152) / v153 > 32 )
-                        _this = (Player *)32;
-                    v43 = (149 - v153 * (signed int)_this - v152) / 2 - (signed int)_this / 2 + 162;
-                    v152 = v37->pStartingPosActiveItem;
-                    v146 = v43;
-                    if ( v152 < v152 + v37->pNumPresenceButton )
-                        {
-                        v153 = 2;
-                        do
-                            {
-                            v44 = v37->GetControl(v152);
-                            v45 = v44;
-                            v46 = v44->uControlParam - 36;
-                            if ( !byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v46] || v0->pActiveSkills[v46] )
-                                {
-                                v45->uW = 0;
-                                v45->uHeight = 0;
-                                v45->uY = 0;
-                                }
-                            else
-                                {
-                                v47 = pSkillNames[v46];
-                                v45->uY = (unsigned int)((char *)_this + v146);
-                                Str = v47;
-                                v48 = pFontArrus->CalcTextHeight(v47, &dialog_window, 0, 0);
-                                v49 = v45->uY;
-                                v50 = v153;
-                                v45->uHeight = v48;
-                                v51 = v49 + v48 - 1;
-                                v45->uW = v51;
-                                v146 = v51;
-                                v52 = hilight_color;
-                                if ( pDialogueWindow->pCurrentPosActiveItem != v50 )
-                                    v52 = m_text_color;
-                                dialog_window.DrawTitleText(pFontArrus, 0, v49, v52, Str, 3u);
-                                }
-                            v53 = v37->pStartingPosActiveItem;
-                            ++v152;
-                            textureH = v37->pNumPresenceButton + v53;
-                            ++v153;
-                            }
-                            while ( v152 < textureH );
-                        }
-                    return;
-                    }
-            }
-        sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v0->pName, pClassNames[v0->classType]); //"Seek knowledge elsewhere %s the %s"
-        strcat(pTmpBuf, "\n \n");
-        strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]); //"I can offer you nothing further."
-        v115 = (174 - pFontArrus->CalcTextHeight(pTmpBuf, &dialog_window, 0, 0)) / 2 + 138;
-        dialog_window.DrawTitleText(pFontArrus, 0, v115, hilight_color, pTmpBuf, 3);
-        return;
-        }
-        break;
-
-        }
-
-    }
 
 //----- (004BB756) --------------------------------------------------------
 signed int __fastcall sub_4BB756(signed int a1)
--- a/mm7_4.cpp	Mon Mar 11 03:37:48 2013 +0200
+++ b/mm7_4.cpp	Mon Mar 11 03:38:59 2013 +0200
@@ -53,6 +53,7 @@
 #include "stru159.h"
 #include "texts.h"
 #include "Log.h"
+#include "UIHouses.h"
 
 #include "mm7_data.h"
 
@@ -9242,16 +9243,7 @@
   }
 }
 
-//----- (004B1E92) --------------------------------------------------------
-void __fastcall HousePlaySomeSound(unsigned int uHouseID, int a2)
-{
-  //if ( BYTE1(pAnimatedRooms[p2DEvents_minus1___02[26 * uHouseID]].field_C) )
-  if ( pAnimatedRooms[p2DEvents[uHouseID - 1].uAnimationID].uRoomSoundId )
-    pAudioPlayer->PlaySound(
-      //(SoundID)(a2 + 100 * (BYTE1(pAnimatedRooms[p2DEvents_minus1___02[26 * uHouseID]].field_C) + 300)),
-      (SoundID)(a2 + 100 * (pAnimatedRooms[p2DEvents[uHouseID - 1].uAnimationID].uRoomSoundId) + 300),
-      806, 0, -1, 0, 0, 0, 0);
-}
+
 
 //----- (004B1ECE) --------------------------------------------------------
 void __cdecl sub_4B1ECE()
@@ -10817,1120 +10809,6 @@
   return 1000 * v1;
 }
 
-//----- (004B4710) --------------------------------------------------------
-int __cdecl TrainingDialog()
-{
-  Player *v0; // ebx@1
-  int color2; // eax@1
-  unsigned int v2; // ecx@1
-  int v3; // eax@1
-  signed int v4; // edx@1
-  int v5; // edi@3
-  unsigned int v6; // esi@3
-  void *v7; // ecx@3
-  int v8; // edx@4
-  double v9; // st7@6
-  signed int v10; // esi@6
-  int v11; // ecx@6
-  int result; // eax@9
-  GUIWindow *v13; // edi@14
-  signed int v14; // esi@14
-  unsigned int v15; // esi@16
-  int v16; // eax@16
-  unsigned int v17; // eax@17
-  int v18; // eax@19
-  int v19; // ecx@24
-  GUIButton *v20; // eax@26
-  GUIButton *v21; // esi@26
-  int v22; // eax@26
-  const char *v23; // eax@28
-  int v24; // eax@28
-  unsigned int v25; // ecx@28
-  int v26; // eax@28
-  unsigned __int16 v27; // ax@28
-  int v28; // eax@32
-  unsigned __int16 v29; // ST14_2@34
-  int v30; // eax@34
-  const char *v31; // ST18_4@36
-  unsigned __int16 v32; // ST14_2@36
-  int v33; // eax@36
-  int v34; // eax@37
-  unsigned int v35; // edi@38
-  unsigned int v36; // eax@38
-  int v37; // ecx@41
-  char *v38; // eax@41
-  int *v39; // eax@45
-  unsigned int v40; // eax@46
-  void *v41; // ecx@46
-  unsigned int v42; // eax@46
-  GUIWindow *v43; // ecx@59
-  int v44; // edx@59
-  char **v45; // esi@60
-  int v46; // eax@62
-  int v47; // eax@68
-  int v48; // edx@69
-  int v49; // ebx@69
-  unsigned __int8 v50; // sf@69
-  char **v51; // edi@70
-  GUIButton *v52; // eax@71
-  GUIButton *v53; // esi@71
-  int v54; // eax@71
-  unsigned int v55; // ecx@71
-  int v56; // eax@71
-  unsigned __int16 v57; // ax@71
-  unsigned __int16 v58; // [sp-Ch] [bp-90h]@38
-  const char *v59; // [sp-Ch] [bp-90h]@63
-  char *v60; // [sp-8h] [bp-8Ch]@38
-  char *v61; // [sp-8h] [bp-8Ch]@63
-  unsigned int v62; // [sp-4h] [bp-88h]@38
-  int v63; // [sp-4h] [bp-88h]@52
-  char *v64; // [sp-4h] [bp-88h]@63
-  GUIWindow v65; // [sp+Ch] [bp-78h]@1
-  __int64 v66; // [sp+60h] [bp-24h]@3
-  unsigned int white; // [sp+68h] [bp-1Ch]@1
-  int v68; // [sp+6Ch] [bp-18h]@3
-  int v69; // [sp+70h] [bp-14h]@6
-  unsigned int i; // [sp+74h] [bp-10h]@1
-  int v71; // [sp+78h] [bp-Ch]@1
-  int v72; // [sp+7Ch] [bp-8h]@16
-  int v73; // [sp+80h] [bp-4h]@14
-
-  v0 = pPlayers[uActiveCharacter];
-  memcpy(&v65, window_SpeakInHouse, sizeof(v65));
-  v65.uFrameX = 483;
-  v65.uFrameWidth = 148;
-  v65.uFrameZ = 334;
-  white = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-  color2 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
-  v2 = v0->uLevel;
-  v71 = color2;
-  v3 = 0;
-  v4 = 0;
-  for ( i = v2; v4 < (signed int)v2; ++v4 )
-    v3 += v4 + 1;
-  v5 = 1000 * v3;
-  v6 = HIDWORD(v0->uExperience);
-  v7 = window_SpeakInHouse->ptr_1C;
-  v68 = (unsigned __int16)word_4F0866[(signed int)v7];
-  v66 = 1000 * v3;
-  if ( (signed __int64)__PAIR__(v6, LODWORD(v0->uExperience)) >= v66 )
-  {
-    v8 = v0->classType % 4 + 1;
-    if ( v8 == 4 )
-      v8 = 3;
-    v9 = (double)(signed int)i;
-    i = 0;
-    v69 = v8;
-    //v10 = (signed __int64)(v9 * p2DEvents_minus1__20[13 * (signed int)v7] * (double)v8);
-    v10 = (signed __int64)(v9 * p2DEvents[(signed int)v7 - 1].fPriceMultiplier * (double)v8);
-    v11 = v10 * (100 - v0->GetMerchant()) / 100;
-    if ( v11 < v10 / 3 )
-      v11 = v10 / 3;
-    i = v11;
-  }
-  result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-  if ( result )
-  {
-    if ( dialog_menu_id != 1 )
-    {
-      if ( dialog_menu_id != 17 )
-      {
-        result = dialog_menu_id - 96;
-        if ( dialog_menu_id == 96 )
-        {
-          result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-          if ( result )
-          {
-            i = 0;
-            v13 = pDialogueWindow;
-            //v14 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (unsigned int)ptr_507BC0->ptr_1C] * 500.0);
-            v14 = (signed __int64)(p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].flt_24 * 500.0);
-            v73 = v14 * (100 - v0->GetMerchant()) / 100;
-            if ( v73 < v14 / 3 )
-              v73 = v14 / 3;
-            v15 = v13->pStartingPosActiveItem;
-            v16 = v13->pNumPresenceButton;
-            v72 = 0;
-            if ( (signed int)v15 >= (signed int)(v15 + v16) )
-              goto LABEL_76;
-            do
-            {
-              v17 = v13->GetControl(v15)->uControlParam - 36;
-              if ( byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v17] && !v0->pActiveSkills[v17] )
-              {
-                v18 = pFontArrus->CalcTextHeight(pSkillNames[v17], &v65, 0, 0);
-                i += v18;
-                ++v72;
-              }
-              ++v15;
-            }
-            while ( (signed int)v15 < v13->pNumPresenceButton + v13->pStartingPosActiveItem );
-            if ( v72 )
-            {
-              sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v73);// "Skill Cost: %lu"
-              v65.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
-              v73 = (signed int)(149 - i) / v72;
-              if ( v73 > 32 )
-                v73 = 32;
-              result = v13->pStartingPosActiveItem;
-              v19 = (signed int)(149 - v72 * v73 - i) / 2 - v73 / 2 + 162;
-              i = result;
-              v68 = v19;
-              if ( result < result + v13->pNumPresenceButton )
-              {
-                v72 = 2;
-                do
-                {
-                  v20 = v13->GetControl(i);
-                  v21 = v20;
-                  v22 = v20->uControlParam - 36;
-                  if ( !byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v22] || v0->pActiveSkills[v22] )
-                  {
-                    v21->uW = 0;
-                    v21->uHeight = 0;
-                    v21->uY = 0;
-                  }
-                  else
-                  {
-                    v23 = pSkillNames[v22];
-                    v21->uY = v73 + v68;
-                    HIDWORD(v66) = (int)v23;
-                    v24 = pFontArrus->CalcTextHeight(v23, &v65, 0, 0);
-                    v25 = v21->uY;
-                    v21->uHeight = v24;
-                    v26 = v25 + v24 - 1;
-                    v21->uW = v26;
-                    v68 = v26;
-                    v27 = v71;
-                    if ( pDialogueWindow->pCurrentPosActiveItem != v72 )
-                      v27 = white;
-                    v65.DrawTitleText(pFontArrus, 0, v25, v27, (char *)HIDWORD(v66), 3u);
-                  }
-                  v28 = v13->pStartingPosActiveItem;
-                  ++i;
-                  result = v13->pNumPresenceButton + v28;
-                  ++v72;
-                }
-                while ( (signed int)i < result );
-              }
-            }
-            else
-            {
-LABEL_76:
-              sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v0->pName, pClassNames[v0->classType]);// 
-                                                // "Seek knowledge elsewhere %s the %s"
-              strcat(pTmpBuf, "\n \n");
-              strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);// "I can offer you nothing further."
-              v29 = v71;
-              v30 = pFontArrus->CalcTextHeight(pTmpBuf, &v65, 0, 0);
-              result = (int)v65.DrawTitleText(pFontArrus, 0, (174 - v30) / 2 + 138, v29, pTmpBuf, 3u);
-            }
-          }
-        }
-        return result;
-      }
-      if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-      {
-        v31 = pNPCTopics[122].pText;
-        v32 = v71;
-        v33 = pFontArrus->CalcTextHeight(pNPCTopics[122].pText, &v65, 0, 0);
-        v65.DrawTitleText(pFontArrus, 0, (212 - v33) / 2 + 101, v32, v31, 3u);
-        result = (int)pDialogueWindow;
-        pDialogueWindow->pNumPresenceButton = 0;
-        return result;
-      }
-      v34 = v0->uLevel;
-      if ( v34 < v68 )
-      {
-        if ( (signed __int64)v0->uExperience >= v66 )
-        {
-          if ( pParty->uNumGold >= i )
-          {
-            Party::TakeGold(i);
-            HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
-            ++v0->uLevel;
-            v0->uSkillPoints += v0->uLevel / 10 + 5;
-            v0->sHealth = v0->GetMaxHealth();
-            v0->sMana = v0->GetMaxMana();
-            v37 = 0;
-            v38 = byte_F8B148;
-            do
-            {
-              if ( *(int *)v38 > v37 )
-                v37 = *(int *)v38;
-              v38 += 4;
-            }
-            while ( (signed int)v38 < (signed int)word_F8B158 );
-            v39 = &dword_F8B144 + uActiveCharacter;
-            ++*v39;
-            if ( *v39 > v37 )
-            {
-              v40 = sub_494820(pParty->uCurrentHour);
-              v41 = window_SpeakInHouse->ptr_1C;
-              v42 = 60 * (v40 + 4) - pParty->uCurrentMinute;
-              if ( v41 == (void *)94 || v41 == (void *)95 )
-                v42 += 720;
-              RestAndHeal((signed int)(v42 + 10080));
-              if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor )
-                pOutdoor->SetFog();
-            }
-            v0->PlaySound(SPEECH_87, 0);
-            sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[430], v0->pName, v0->uLevel, v0->uLevel / 10 + 5);// 
-                                                // "%s is now Level %lu and has earned %lu Skill Points!"
-            ShowStatusBarString(pTmpBuf, 2u);
-            goto LABEL_56;
-          }
-          ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);// "You don't have enough gold"
-          v63 = 4;
-LABEL_55:
-          HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, v63);
-LABEL_56:
-          /*result = pMessageQueue_50CBD0->uNumMessages;
-          if ( (signed int)pMessageQueue_50CBD0->uNumMessages < 40 )
-          {
-            pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].eType = (UIMessageType)113;
-            pMessageQueue_50CBD0->pMessages[pMessageQueue_50CBD0->uNumMessages].param = 1;
-            result = 3 * pMessageQueue_50CBD0->uNumMessages + 3;
-            *(&pMessageQueue_50CBD0->uNumMessages + result) = 0;
-            ++pMessageQueue_50CBD0->uNumMessages;
-          }
-          return result;*/
-          pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-          return 1; // void function actually
-        }
-        sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[538], v5 - LODWORD(v0->uExperience), v34 + 1);// 
-                                                // "You need %d more experience to train to level %d"
-        v35 = 0;
-        v62 = 3;
-        v60 = pTmpBuf;
-        v58 = v71;
-        v36 = (212 - pFontArrus->CalcTextHeight(pTmpBuf, &v65, 0, 0)) / 2 + 88;
-      }
-      else
-      {
-        sprintf(pTmpBuf, "%s\n \n%s", pGlobalTXT_LocalizationStrings[536], pGlobalTXT_LocalizationStrings[529]);// 
-                                                // ""With your skills, you should be working here as a teacher.""
-                                                // ""Sorry, but we are unable to train you.""
-        v35 = 0;
-        v62 = 3;
-        v60 = pTmpBuf;
-        v58 = v71;
-        v36 = (212 - pFontArrus->CalcTextHeight(pTmpBuf, &v65, 0, 0)) / 2 + 101;
-      }
-      v65.DrawTitleText(pFontArrus, v35, v36, v58, v60, v62);
-      v63 = 3;
-      goto LABEL_55;
-    }
-    result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-    if ( result )
-    {
-      v43 = pDialogueWindow;
-      v72 = 0;
-      pShopOptions[0] = pTmpBuf;
-      pShopOptions[1] = pGlobalTXT_LocalizationStrings[160];// "Learn Skills"
-      v44 = pDialogueWindow->pNumPresenceButton;
-      v73 = pDialogueWindow->pStartingPosActiveItem;
-      if ( v73 < v73 + v44 )
-      {
-        v45 = pShopOptions;
-        do
-        {
-          if ( v43->GetControl(v73)->uControlParam == 17 )
-          {
-            v46 = v0->uLevel;
-            if ( v46 < v68 )
-            {
-              if ( (signed __int64)v0->uExperience < v66 )
-              {
-                v64 = (char *)(v46 + 1);
-                v61 = (char *)(v5 - LODWORD(v0->uExperience));
-                v59 = pGlobalTXT_LocalizationStrings[538];// "You need %d more experience to train to level %d"
-              }
-              else
-              {
-                v64 = (char *)i;
-                v61 = (char *)(v46 + 1);
-                v59 = pGlobalTXT_LocalizationStrings[537];// "Train to level %d for %d gold"
-              }
-            }
-            else
-            {
-              v64 = pGlobalTXT_LocalizationStrings[529];// ""Sorry, but we are unable to train you.""
-              v61 = pGlobalTXT_LocalizationStrings[536];// ""With your skills, you should be working here as a teacher.""
-              v59 = "%s\n \n%s";
-            }
-            sprintf(*v45, v59, v61, v64);
-          }
-          v47 = pFontArrus->CalcTextHeight(*v45, &v65, 0, 0);
-          v43 = pDialogueWindow;
-          v72 += v47;
-          ++v45;
-          ++v73;
-        }
-        while ( v73 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
-      }
-      HIDWORD(v66) = (174 - v72) / 2;
-      result = v43->pStartingPosActiveItem;
-      v48 = result + v43->pNumPresenceButton;
-      v49 = (2 * (87 - (174 - v72) / 2) - v72) / 2 - (174 - v72) / 2 / 2 + 138;
-      v50 = -v43->pNumPresenceButton < 0;
-      v73 = v43->pStartingPosActiveItem;
-      if ( v50 ^ __OFSUB__(result, v48) )
-      {
-        i = 2;
-        v51 = pShopOptions;
-        do
-        {
-          v52 = v43->GetControl(v73);
-          v53 = v52;
-          v52->uY = HIDWORD(v66) + v49;
-          v54 = pFontArrus->CalcTextHeight(*v51, &v65, 0, 0);
-          v55 = v53->uY;
-          v53->uHeight = v54;
-          v56 = v54 + v55 - 1;
-          v53->uW = v56;
-          v49 = v56;
-          v57 = v71;
-          if ( pDialogueWindow->pCurrentPosActiveItem != i )
-            v57 = white;
-          v65.DrawTitleText(pFontArrus, 0, v55, v57, *v51, 3u);
-          v43 = pDialogueWindow;
-          ++i;
-          ++v51;
-          ++v73;
-          result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
-        }
-        while ( v73 < result );
-      }
-    }
-  }
-  return result;
-}
-
-
-
-
-
-
-
-
-
-//----- (004B4FCF) --------------------------------------------------------
-void MagicShopDialog()
-    {
-  Player *v0; // ebx@1
-  int result; // eax@6
-  signed int v2; // esi@8
-  unsigned int v3; // ebx@10
-  char *v4; // eax@11
-  char *v5; // eax@12
-  unsigned int v6; // eax@12
-  int v7; // ST08_4@14
-  int v8; // eax@14
-  unsigned __int8 v9; // dl@14
-  char *v10; // ecx@14
-  signed int v11; // esi@16
-  int v12; // ST08_4@19
-  int v13; // eax@19
-  int all_text_height; // edi@21
-  char **v15; // esi@21
-  int v16; // eax@22
-  GUIWindow *v17; // ecx@23
-  int v18; // edx@23
-  int v19; // edi@23
-  unsigned __int8 v20; // sf@23
-  GUIButton *control_button; // esi@25
-  const char **v22; // eax@25
-  int v23; // eax@25
-  unsigned int v24; // ecx@25
-  const char **v25; // edx@25
-  unsigned __int16 text_color; // ax@25
-  signed int v27; // esi@30
-  int v28; // ST08_4@34
-  int v29; // eax@34
-  char *v30; // edx@35
-  GUIWindow *v31; // edi@40
-  void *v32; // eax@40
-  signed int v33; // esi@40
-  unsigned int v34; // esi@42
-  int v35; // eax@42
-  unsigned int v36; // eax@43
-  int v37; // eax@45
-  int v38; // ecx@50
-  GUIButton *v39; // eax@52
-  GUIButton *v40; // esi@52
-  int v41; // eax@52
-  char *v42; // eax@54
-  int v43; // eax@54
-  unsigned int v44; // ecx@54
-  int v45; // edx@54
-  int v46; // eax@54
-  unsigned __int16 v47; // ax@54
-  int v48; // eax@58
-  signed int v49; // esi@62
-  Texture *v50; // ecx@64
-  unsigned int v51; // edi@64
-  unsigned int v52; // esi@66
-  int v53; // edx@70
-  Texture *v54; // ecx@76
-  unsigned int v55; // edi@76
-  unsigned int v56; // esi@76
-  int v57; // edx@80
-  Texture *v58; // ecx@86
-  unsigned int v59; // edi@86
-  unsigned int v60; // esi@88
-  int v61; // edx@92
-  Texture *v62; // ecx@98
-  unsigned int v63; // edi@98
-  unsigned int v64; // esi@100
-  int v65; // edx@104
-  signed int v66; // ecx@109
-  SHORT v67; // di@117
-  bool v68; // eax@117
-  const char *v69; // ecx@119
-  POINT *v70; // esi@124
-  int v71; // ecx@125
-  int v72; // eax@125
-  int v73; // ecx@125
-  ItemGen *v74; // esi@125
-  int v75; // eax@130
-  int v76; // esi@131
-  char **v77; // edi@131
-  int v78; // eax@132
-  GUIWindow *v79; // ecx@133
-  int v80; // edx@133
-  int v81; // edi@133
-  GUIButton *v82; // esi@135
-  const char **v83; // eax@135
-  int v84; // eax@135
-  unsigned int v85; // ecx@135
-  int v86; // edx@135
-  unsigned __int16 v87; // ax@135
-  GUIWindow *v88; // [sp-18h] [bp-110h]@35
-  int v89; // [sp-14h] [bp-10Ch]@35
-  ItemGen *v90; // [sp-10h] [bp-108h]@14
-  int v91; // [sp-10h] [bp-108h]@35
-  unsigned __int16 v92; // [sp-Ch] [bp-104h]@12
-  void *v93; // [sp-Ch] [bp-104h]@14
-  int v94; // [sp-8h] [bp-100h]@11
-  char *v95; // [sp-8h] [bp-100h]@12
-  __int64 *v96; // [sp-4h] [bp-FCh]@11
-  unsigned int v97; // [sp-4h] [bp-FCh]@12
-  POINT v98; // [sp+Ch] [bp-ECh]@8
-  POINT v99; // [sp+14h] [bp-E4h]@16
-  POINT v100; // [sp+1Ch] [bp-DCh]@124
-  POINT v101; // [sp+24h] [bp-D4h]@17
-  POINT v102; // [sp+2Ch] [bp-CCh]@124
-  POINT v103; // [sp+34h] [bp-C4h]@9
-  POINT v104; // [sp+3Ch] [bp-BCh]@31
-  POINT v105; // [sp+44h] [bp-B4h]@16
-  POINT v106; // [sp+4Ch] [bp-ACh]@30
-  POINT v107; // [sp+54h] [bp-A4h]@16
-  POINT v108; // [sp+5Ch] [bp-9Ch]@30
-  POINT a2; // [sp+64h] [bp-94h]@8
-  POINT v110; // [sp+6Ch] [bp-8Ch]@30
-  POINT v111; // [sp+74h] [bp-84h]@8
-  GUIWindow dialog_window; // [sp+7Ch] [bp-7Ch]@1
-  char *Str; // [sp+D0h] [bp-28h]@54
-  int v146; // [sp+D4h] [bp-24h]@23
-  unsigned int hilight_color; // [sp+D8h] [bp-20h]@1
-  unsigned int m_text_color; // [sp+DCh] [bp-1Ch]@1
-  __int32 v117; // [sp+E0h] [bp-18h]@8
-  int v118; // [sp+E4h] [bp-14h]@40
-  const char **v119; // [sp+E8h] [bp-10h]@24
-  Player *_this; // [sp+ECh] [bp-Ch]@1
-  unsigned __int8 uPlayerID; // [sp+F3h] [bp-5h]@14
-  int v152; // [sp+F4h] [bp-4h]@23
-  int v122;
-  int v114;
-
-  v0 = pPlayers[uActiveCharacter];
-  _this = pPlayers[uActiveCharacter];
-  memcpy(&dialog_window, window_SpeakInHouse, sizeof(dialog_window));
-  dialog_window.uFrameX = 483;
-  dialog_window.uFrameWidth = 148;
-  dialog_window.uFrameZ = 334;
-  m_text_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-  hilight_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u);
-  if ( dialog_menu_id > 5 )
-  {
-    if ( dialog_menu_id == 94 )
-    {
-      draw_leather();
-      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-      pShopOptions[0] = pGlobalTXT_LocalizationStrings[200];// "Sell"
-      pShopOptions[1] = pGlobalTXT_LocalizationStrings[113];// "Identify"
-      pShopOptions[2] = pGlobalTXT_LocalizationStrings[179];// "Repair"
-      v76 = 0;
-      v77 = pShopOptions;
-      do
-      {
-        v78 = pFontArrus->CalcTextHeight(*v77, &dialog_window, 0, 0);
-        ++v77;
-        v76 += v78;
-      }
-      while ( (signed int)v77 < (signed int)&pShopOptions[3] );
-      v79 = pDialogueWindow;
-      _this = (Player *)((174 - v76) / 3);
-      result = pDialogueWindow->pStartingPosActiveItem;
-      v80 = result + pDialogueWindow->pNumPresenceButton;
-      v81 = (3 * (58 - (signed int)_this) - v76) / 2 - (174 - v76) / 3 / 2 + 138;
-      v20 = -pDialogueWindow->pNumPresenceButton < 0;
-      v118 = pDialogueWindow->pStartingPosActiveItem;
-      if ( v20 ^ __OFSUB__(result, v80) )
-      {
-        v122 = 2;
-        v119 = (const char **)pShopOptions;
-        do
-        {
-          v82 = v79->GetControl(v118);
-          v83 = v119;
-          v82->uY = (unsigned int)((char *)_this + v81);
-          v84 = pFontArrus->CalcTextHeight(*v83, &dialog_window, 0, 0);
-          v85 = v82->uY;
-          v86 = v122;
-          v82->uHeight = v84;
-          v81 = v84 + v85 - 1;
-          v82->uW = v81;
-          v87 = hilight_color;
-          if ( pDialogueWindow->pCurrentPosActiveItem != v86 )
-            v87 = m_text_color;
-          dialog_window.DrawTitleText(pFontArrus, 0, v85, v87, *v119, 3u);
-          v79 = pDialogueWindow;
-          ++v122;
-          ++v119;
-          ++v118;
-          result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
-        }
-        while ( v118 < result );
-      }
-      return;
-    }
-    if ( dialog_menu_id != 95 )
-    {
-      result = dialog_menu_id - 96;
-      if ( dialog_menu_id == 96 )
-      {
-        result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-        if ( result )
-        {
-          v31 = pDialogueWindow;
-          v3 = 0;
-          v32 = window_SpeakInHouse->ptr_1C;
-          v118 = 0;
-            //v33 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (signed int)v32] * 500.0);
-            v33 = (signed __int64)(p2DEvents[(signed int)v32 - 1].flt_24 * 500.0);
-          v119 = (const char **)(v33 * (100 - _this->GetMerchant()) / 100);
-          if ( (signed int)v119 < v33 / 3 )
-            v119 = (const char **)(v33 / 3);
-          v34 = v31->pStartingPosActiveItem;
-          v35 = v34 + v31->pNumPresenceButton;
-          v122 = 0;
-          if ( (signed int)v34 >= v35 )
-            goto LABEL_140;
-          do
-          {
-            v36 = v31->GetControl(v34)->uControlParam - 36;
-            if ( byte_4ED970_skill_learn_ability_by_class_table[_this->classType][v36] && !_this->pActiveSkills[v36] )
-            {
-              v37 = pFontArrus->CalcTextHeight(pSkillNames[v36], &dialog_window, 0, 0);
-              v118 += v37;
-              ++v122;
-            }
-            ++v34;
-          }
-          while ( (signed int)v34 < v31->pNumPresenceButton + v31->pStartingPosActiveItem );
-          if ( !v122 )
-          {
-LABEL_140:
-            sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], _this->pName, pClassNames[_this->classType]);// 
-                                                // "Seek knowledge elsewhere %s the %s"
-            strcat(pTmpBuf, "\n \n");
-            strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);// "I can offer you nothing further."
-            v30 = pTmpBuf;
-            v97 = 3;
-            v95 = pTmpBuf;
-            v92 = hilight_color;
-            v91 = 0;
-            v89 = 0;
-            v88 = &dialog_window;
-            goto LABEL_61;
-          }
-          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v119);// "Skill Cost: %lu"
-          dialog_window.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
-          v119 = (const char **)((149 - v118) / v122);
-          if ( (149 - v118) / v122 > 32 )
-            v119 = (const char **)32;
-          result = v31->pStartingPosActiveItem;
-          v38 = (149 - v122 * (signed int)v119 - v118) / 2 - (signed int)v119 / 2 + 162;
-          v118 = result;
-          v114 = v38;
-          if ( result < result + v31->pNumPresenceButton )
-          {
-            v122 = 2;
-            do
-            {
-              v39 = v31->GetControl(v118);
-              v40 = v39;
-              v41 = v39->uControlParam - 36;
-              if ( !byte_4ED970_skill_learn_ability_by_class_table[_this->classType][v41] || _this->pActiveSkills[v41] )
-              {
-                v40->uW = 0;
-                v40->uHeight = 0;
-                v40->uY = 0;
-              }
-              else
-              {
-                v42 = pSkillNames[v41];
-                v40->uY = (unsigned int)((char *)v119 + v114);
-                Str = v42;
-                v43 = pFontArrus->CalcTextHeight(v42, &dialog_window, 0, 0);
-                v44 = v40->uY;
-                v45 = v122;
-                v40->uHeight = v43;
-                v46 = v44 + v43 - 1;
-                v40->uW = v46;
-                v114 = v46;
-                v47 = hilight_color;
-                if ( pDialogueWindow->pCurrentPosActiveItem != v45 )
-                  v47 = m_text_color;
-                dialog_window.DrawTitleText(pFontArrus, 0, v44, v47, Str, 3u);
-              }
-              v48 = v31->pStartingPosActiveItem;
-              ++v118;
-              result = v31->pNumPresenceButton + v48;
-              ++v122;
-            }
-            while ( v118 < result );
-          }
-        }
-      }
-      return;
-    }
-  }
-  else
-  {
-    if ( dialog_menu_id == 5 )
-    {
-      draw_leather();
-      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-      DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[198], 0);// "Select the Item to Repair"
-      result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-      if ( !result
-        || (v27 = pMouse->GetCursorPos(&v110)->x - 14,
-            v117 = (v27 >> 5) + 14 * ((pMouse->GetCursorPos(&v108)->y - 17) >> 5),
-            result = (int)pMouse->GetCursorPos(&v106),
-            *(int *)result <= 13)
-        || (result = (int)pMouse->GetCursorPos(&v104), *(int *)result >= 462)
-        || (result = v0->GetItemIDAtInventoryIndex((int *)&v117), v3 = 0, !result)
-        || (result *= 9, !(_this->field_1F5[4 * result + 15] & 2)) )
-        return;
-      v96 = 0;
-      v94 = 5;
-      v93 = window_SpeakInHouse->ptr_1C;
-      v90 = (ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * result + 5];
-      v28 = (int)window_SpeakInHouse->ptr_1C;
-      uPlayerID = uActiveCharacter - 1;
-      v29 = _this->_490EEE((ItemGen *)&_this->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * result + 5], 3, v28, 5);
-      v9 = uPlayerID;
-      v10 = (char *)pMerchantsRepairPhrases[v29];
-      goto LABEL_35;
-    }
-    if ( dialog_menu_id == 1 )
-    {
-     /* result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-      if ( result )
-      {
-        pShopOptions[0] = pGlobalTXT_LocalizationStrings[134];// "Buy Standard"
-        pShopOptions[1] = pGlobalTXT_LocalizationStrings[152];// "Buy Special"
-        pShopOptions[2] = pGlobalTXT_LocalizationStrings[159];// "Display Inventory"
-        v14 = 0;
-        pShopOptions[3] = pGlobalTXT_LocalizationStrings[160];// "Learn Skills"
-        v15 = pShopOptions;
-        do
-        {
-          v16 = pFontArrus->CalcTextHeight(*v15, &dialogue_window, 0, 0);
-          ++v15;
-          v14 += v16;
-        }
-        while ( (signed int)v15 < (signed int)&unk_F8B1C8 );
-        v17 = pDialogueWindow;
-        v114 = (174 - v14) / 4;
-        result = pDialogueWindow->pStartingPosActiveItem;
-        v18 = result + pDialogueWindow->pNumPresenceButton;
-        v19 = (174 - 4 * (174 - v14) / 4 - v14) / 2 - (174 - v14) / 4 / 2 + 138;
-        v20 = -pDialogueWindow->pNumPresenceButton < 0;
-        v122 = pDialogueWindow->pStartingPosActiveItem;
-        if ( v20 ^ __OFSUB__(result, v18) )
-        {
-          v119 = (const char **)2;
-          _this = (Player *)pShopOptions;
-          do
-          {
-            v21 = v17->GetControl(v122);
-            v22 = (const char **)_this;
-            v21->uY = v114 + v19;
-            v23 = pFontArrus->CalcTextHeight(*v22, &dialogue_window, 0, 0);
-            v24 = v21->uY;
-            v25 = v119;
-            v21->uHeight = v23;
-            v19 = v24 + v23 - 1;
-            v21->uW = v19;
-            v26 = color2;
-            if ( (const char **)pDialogueWindow->pCurrentPosActiveItem != v25 )
-              v26 = m_text_color;
-            dialogue_window.DrawTitleText(pFontArrus, 0, v24, v26, (const char *)LODWORD(_this->pConditions[0]), 3u);
-            v17 = pDialogueWindow;
-            v119 = (const char **)((char *)v119 + 1);
-            _this = (Player *)((char *)_this + 4);
-            ++v122;
-            result = pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;
-          }
-          while ( v122 < result );
-        }
-      }*/
-    if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-        return;
-    pShopOptions[0] = pGlobalTXT_LocalizationStrings[134]; //"Buy Standard"
-    pShopOptions[1] = pGlobalTXT_LocalizationStrings[152]; //"Buy Special"
-    pShopOptions[2] = pGlobalTXT_LocalizationStrings[159]; //"Display Inventory"
-    pShopOptions[3] = pGlobalTXT_LocalizationStrings[160];
-
-    all_text_height = 0;
-    for(int i=0;i<4;++i)
-        all_text_height += pFontArrus->CalcTextHeight(pShopOptions[i], &dialog_window, 0, 0);
-    v146 = (174 - all_text_height) / 4;
-
-    v23 = (174 - 4 * (174 - all_text_height) / 4 - all_text_height) / 2 - (174 - all_text_height) / 4 / 2 + 138;
-    int j=0;
-    if ( pDialogueWindow->pNumPresenceButton>=0 )
-        {
-       int th = 2;
-        for (v152 = pDialogueWindow->pStartingPosActiveItem; v152 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem;  ++v152)
-            {
-            control_button = pDialogueWindow->GetControl(v152);
-            control_button->uY = v146 + v23;
-            v27 = pFontArrus->CalcTextHeight(pShopOptions[j], &dialog_window, 0, 0);
-            control_button->uHeight = v27;
-            v23 = control_button->uY + control_button->uHeight - 1;
-            control_button->uW = v23;
-            text_color = hilight_color;
-            if ( pDialogueWindow->pCurrentPosActiveItem != th )
-                text_color = m_text_color;
-            dialog_window.DrawTitleText(pFontArrus, 0, control_button->uY, text_color, pShopOptions[j], 3);
-            ++th;               
-            ++j;
-            }
-        }
-        
-
-      return;
-    }
-    if ( dialog_menu_id != 2 )
-    {
-      if ( dialog_menu_id != 3 )
-      {
-        result = dialog_menu_id - 4;
-        if ( dialog_menu_id == 4 )
-        {
-          draw_leather();
-          CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-          DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0);// "Select the Item to Identify"
-          result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-          if ( result )
-          {
-            v2 = pMouse->GetCursorPos(&a2)->x - 14;
-            v117 = (v2 >> 5) + 14 * ((pMouse->GetCursorPos(&v98)->y - 17) >> 5);
-            result = (int)pMouse->GetCursorPos(&v111);
-            if ( *(int *)result > 13 )
-            {
-              result = (int)pMouse->GetCursorPos(&v103);
-              if ( *(int *)result < 462 )
-              {
-                result = v0->GetItemIDAtInventoryIndex((int *)&v117);
-                v3 = 0;
-                if ( result )
-                {
-                  v96 = 0;
-                  v94 = 4;
-                  v4 = (char *)&_this->pInventoryItems[result-1];
-                  if ( v4[20] & 1 )
-                  {
-                    v5 = BuilDialogueString("%24", uActiveCharacter - 1, (ItemGen *)v4, (char *)window_SpeakInHouse->ptr_1C, 4, 0);
-                    v97 = 3;
-                    v95 = v5;
-                    v92 = m_text_color;
-                    v6 = (212 - pFontArrus->CalcTextHeight(v5, &dialog_window, 0, 0)) / 2 + 101;
-                   
-                       dialog_window.DrawTitleText(pFontArrus, v3, v6, v92, v95, v97); 
-                       return;
-                  }
-                  v93 = window_SpeakInHouse->ptr_1C;
-                  v90 = (ItemGen *)v4;
-                  v7 = (int)window_SpeakInHouse->ptr_1C;
-                  uPlayerID = uActiveCharacter - 1;
-                  v8 = ((Player *)_this)->_490EEE((ItemGen *)v4, 3, v7, 4);
-                  v9 = uPlayerID;
-                  v10 = (char *)pMerchantsIdentifyPhrases[v8];
-                  goto LABEL_35;
-                }
-              }
-            }
-          }
-        }
-        return;
-      }
-      draw_leather();
-      CharacterUI_InventoryTab_Draw(uActiveCharacter, 1);
-      DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0);// "Select the Item to Sell"
-      result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-      if ( !result
-        || (v11 = pMouse->GetCursorPos(&v107)->x - 14,
-            v117 = (v11 >> 5) + 14 * ((pMouse->GetCursorPos(&v99)->y - 17) >> 5),
-            result = (int)pMouse->GetCursorPos(&v105),
-            *(int *)result <= 13)
-        || (result = (int)pMouse->GetCursorPos(&v101), *(int *)result >= 462)
-        || (result = v0->GetItemIDAtInventoryIndex((int *)&v117), v3 = 0, !result) )
-        return;
-      v96 = 0;
-      v94 = 3;
-      v93 = window_SpeakInHouse->ptr_1C;
-      v90 = (ItemGen *)&_this->pInventoryItems[result-1];
-      v12 = (int)window_SpeakInHouse->ptr_1C;
-      uPlayerID = uActiveCharacter - 1;
-      v13 = _this->_490EEE(v90, 3, v12, 3);
-      v9 = uPlayerID;
-      v10 = (char *)pMerchantsSellPhrases[v13];
-LABEL_35:
-      v30 = BuilDialogueString(v10, v9, v90, (char *)v93, v94, v96);
-      v97 = 3;
-      v95 = v30;
-      v92 = m_text_color;
-      v91 = v3;
-      v89 = v3;
-      v88 = &dialog_window;
-LABEL_61:
-      v6 = (174 - pFontArrus->CalcTextHeight(v30, v88, v89, v91)) / 2 + 138;
-      dialog_window.DrawTitleText(pFontArrus, v3, v6, v92, v95, v97);
-      return;
-    }
-  }
-  pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
-  v3 = 0;
-  v49 = 0;
-  v122 = 0;
-  if ( dialog_menu_id == 2 )
-  {
-    do
-    {
-     // if ( pParty->field_777C[9 * (v49 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] )
-	 if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v49].uItemID);
-      {
-        v50 = ItemsInShopTexture[v49];
-        v51 = 152 - v50->uTextureHeight;
-        if ( (signed int)v51 < 1 )
-          v51 = 0;
-        v52 = 75 * v49 - v50->uTextureWidth / 2 + 40;
-        if ( v122 )
-        {
-          if ( v122 == 5 )
-          {
-            v53 = ItemsInShopTexture[5]->uTextureWidth;
-            if ( (signed int)v52 > 457 - v53 )
-              v52 = 457 - v53;
-          }
-        }
-        else
-        {
-          if ( (signed int)v52 < 18 )
-            v52 = 18;
-        }
-        pRenderer->DrawTextureTransparent(v52, v51, v50);
-        sub_40F92A(&pRenderer->pActiveZBuffer[v52 + 640 * v51], ItemsInShopTexture[v122], v122 + 1);
-        v49 = v122;
-      }
-      ++v49;
-      v122 = v49;
-    }
-    while ( v49 < 6 );
-    v122 = 0;
-    do
-    {
-      //if ( pParty->field_777C[9 * (v122 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 54] )
-	if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v122+1].uItemID);
-      {
-        v54 = ItemsInShopTexture[v122 + 6];
-        v55 = 306 - v54->uTextureHeight;
-        v56 = 75 * v122 - v54->uTextureWidth / 2 + 40;
-        if ( v122 )
-        {
-          if ( v122 == 5 )
-          {
-            v57 = ItemsInShopTexture[11]->uTextureWidth;
-            if ( (signed int)v56 > 457 - v57 )
-              v56 = 457 - v57;
-          }
-        }
-        else
-        {
-          if ( (signed int)v56 < 18 )
-            v56 = 18;
-        }
-        pRenderer->DrawTextureTransparent(v56, v55, v54);
-        sub_40F92A(&pRenderer->pActiveZBuffer[v56 + 640 * v55], ItemsInShopTexture[v122 + 6], v122 + 7);
-      }
-      ++v122;
-    }
-    while ( v122 < 6 );
-  }
-  else
-  {
-    do
-    {
-     // if ( pParty->field_C59C[9 * (v49 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
-	if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v49].uItemID)
-      {
-        v58 = ItemsInShopTexture[v49];
-        v59 = 152 - v58->uTextureHeight;
-        if ( (signed int)v59 < 1 )
-          v59 = 0;
-        v60 = 75 * v49 - v58->uTextureWidth / 2 + 40;
-        if ( v122 )
-        {
-          if ( v122 == 5 )
-          {
-            v61 = ItemsInShopTexture[5]->uTextureWidth;
-            if ( (signed int)v60 > 457 - v61 )
-              v60 = 457 - v61;
-          }
-        }
-        else
-        {
-          if ( (signed int)v60 < 18 )
-            v60 = 18;
-        }
-        pRenderer->DrawTextureTransparent(v60, v59, v58);
-        sub_40F92A(&pRenderer->pActiveZBuffer[v60 + 640 * v59], ItemsInShopTexture[v122], v122 + 1);
-        v49 = v122;
-      }
-      ++v49;
-      v122 = v49;
-    }
-    while ( v49 < 6 );
-    v122 = 0;
-    do
-    {
-      //if ( pParty->Spell_Item[(unsigned int)window_SpeakInHouse->ptr_1C][v49] + 778] )  //weak
-		if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v49].uAttributes)
-      {
-        v62 = ItemsInShopTexture[v122 + 6];
-        v63 = 306 - v62->uTextureHeight;
-        if ( (signed int)v63 < 1 )
-          v63 = 0;
-        v64 = 75 * v122 - v62->uTextureWidth / 2 + 40;
-        if ( v122 )
-        {
-          if ( v122 == 5 )
-          {
-            v65 = ItemsInShopTexture[11]->uTextureWidth;
-            if ( (signed int)v64 > 457 - v65 )
-              v64 = 457 - v65;
-          }
-        }
-        else
-        {
-          if ( (signed int)v64 < 18 )
-            v64 = 18;
-        }
-        pRenderer->DrawTextureTransparent(v64, v63, v62);
-        sub_40F92A(&pRenderer->pActiveZBuffer[v64 + 640 * v63], ItemsInShopTexture[v122 + 6], v122 + 7);
-      }
-      ++v122;
-    }
-    while ( v122 < 6 );
-  }
-  result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win();
-  if ( result )
-  {
-    v66 = 0;
-    v117 = 0;
-    if ( dialog_menu_id == 2 )
-    {
-      do
-      {
-        if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v66].uItemID); //9 * (v66 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] )
-          ++v117;
-        ++v66;
-      }
-      while ( v66 < 12 );
-    }
-    else
-    {
-      do
-      {
-        //if ( pParty->field_C59C[9 * (v66 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] )
-	  if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v66].uItemID)
-          ++v117;
-        ++v66;
-      }
-      while ( v66 < 12 );
-    }
-    v67 = GetAsyncKeyState(VK_CONTROL);
-    v68 = _this->CanSteal();
-    Str = (char *)v68;
-    if ( v67 && v68 )
-    {
-      v69 = pGlobalTXT_LocalizationStrings[185];// "Steal item"
-    }
-    else
-    {
-      v69 = pGlobalTXT_LocalizationStrings[195];// "Select the Item to Buy"
-      if ( dialog_menu_id != 2 )
-        v69 = pGlobalTXT_LocalizationStrings[196];// "Select the Special Item to Buy"
-    }
-    DrawTextAtStatusBar(v69, 0);
-    if ( !v117 )
-		{
-      dialog_window.DrawCurrentTime( pParty->field_3C.field_50[(unsigned int)window_SpeakInHouse->ptr_1C] - pParty->uTimePlayed);
-	  return;
-		}
-    v70 = pMouse->GetCursorPos(&v102);
-    result = v70->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v100)->y];
-    if ( pRenderer->pActiveZBuffer[result] & 0xFFFF )
-    {
-      v71 = (pRenderer->pActiveZBuffer[result] & 0xFFFF) - 1;
-      v117 = v71;
-      v72 = (int)window_SpeakInHouse->ptr_1C;
-     // v73 = 9 * (v71 + 12 * v72);
-      v74 = (ItemGen *)&pParty->StandartItemsInShops[v72][v71];
-      if ( dialog_menu_id != 2 )
-       // v74 = (ItemGen *)&pParty->field_C59C[v73 + 724];
-	      v74 =&pParty->SpecialItemsInShops[v72][v71];
-      if ( v67 && Str )
-      {
-        v10 = pGlobalTXT_LocalizationStrings[181];// "Steal %24"
-        v96 = 0;
-        v94 = 2;
-        v93 = window_SpeakInHouse->ptr_1C;
-        v90 = v74;
-        v9 = uActiveCharacter - 1;
-      }
-      else
-      {
-        v96 = 0;
-        v94 = 2;
-        v93 = window_SpeakInHouse->ptr_1C;
-        v90 = v74;
-        uPlayerID = uActiveCharacter - 1;
-        v75 = _this->_490EEE(v74, 3, v72, 2);
-        v9 = uPlayerID;
-        v10 = (char *)pMerchantsBuyPhrases[v75];
-      }
-      goto LABEL_35;
-    }
-  }
-  return;
-}
 
 //----- (004BC49B) --------------------------------------------------------
 void OnSelectDialogueOption(DIALOGUE_TYPE newDialogueType)
@@ -12225,713 +11103,6 @@
 
 
 
-//----- (004B5D7C) --------------------------------------------------------
-void GuildDialog()
-{
-  GUIWindow *v0; // ebx@1
-  Player *currPlayer; // edi@1
-  signed int base_teach_price; // ebx@1
-  int v3; // edi@6
-  int result; // eax@11
-  unsigned int v5; // ebx@13
-  int v6; // esi@13
-  signed int v7; // esi@17
-  int v8; // esi@22
-  signed int v9; // ecx@22
-  char *v10; // eax@22
-  const char *statusbar_string; // ecx@26
-  POINT *v12; // esi@30
-  int v13; // ecx@30
-  void *v14; // ST1C_4@31
-  ItemGen *v15; // ST18_4@31
-  int v16; // ST10_4@31
-  int v17; // eax@31
-  char *v18; // edx@31
-  int v19; // eax@32
-  GUIWindow *v20; // edi@35
-  int v21; // esi@35
-  int v22; // eax@35
-  unsigned int v23; // eax@36
-  int v24; // eax@39
-  int v25; // eax@40
-  int v26; // ecx@47
-  GUIButton *v27; // eax@49
-  GUIButton *v28; // esi@49
-  unsigned int v29; // eax@49
-  char *v30; // eax@52
-  int v31; // eax@55
-  unsigned int v32; // ecx@55
-  int v33; // eax@55
-  unsigned __int16 v34; // ax@55
-  int v35; // eax@58
-  const char *v36; // ST20_4@61
-  unsigned __int16 v37; // ST1C_2@61
-  int v38; // eax@61
-  GUIWindow *v39; // [sp-18h] [bp-304h]@31
-  int v40; // [sp-14h] [bp-300h]@31
-  int v41; // [sp-10h] [bp-2FCh]@31
-  unsigned __int16 v42; // [sp-Ch] [bp-2F8h]@31
-  char *v43; // [sp-8h] [bp-2F4h]@31
-  unsigned int v44; // [sp-4h] [bp-2F0h]@31
-  char Dest[100]; // [sp+Ch] [bp-2E0h]@3
-  char v46[100]; // [sp+70h] [bp-27Ch]@3
-  char v47[100]; // [sp+D4h] [bp-218h]@3
-  char v48[100]; // [sp+138h] [bp-1B4h]@3
-  char v49[100]; // [sp+19Ch] [bp-150h]@3
-  POINT v50; // [sp+264h] [bp-88h]@30
-  POINT v51; // [sp+26Ch] [bp-80h]@30
-  GUIWindow working_window; // [sp+274h] [bp-78h]@1
-  signed int v53; // [sp+27Ch] [bp-70h]@1
-  signed int v54; // [sp+284h] [bp-68h]@1
-  int v55; // [sp+2C8h] [bp-24h]@47
-  int main_text_color; // [sp+2CCh] [bp-20h]@1
-  int hi_text_color; // [sp+2D0h] [bp-1Ch]@1
-  Player *v58; // [sp+2D4h] [bp-18h]@1
-  unsigned __int8 uPlayerID; // [sp+2DBh] [bp-11h]@31
-  char *Str; // [sp+2DCh] [bp-10h]@35
-  int v61; // [sp+2E0h] [bp-Ch]@35
-  unsigned int v62; // [sp+2E4h] [bp-8h]@13
-  int v63; // [sp+2E8h] [bp-4h]@1
-
-  v0 = window_SpeakInHouse;
-  memcpy(&working_window, window_SpeakInHouse, sizeof(GUIWindow));
-  v58 = pPlayers[uActiveCharacter];
-  currPlayer = v58;
-  working_window.uFrameX = 483;
-  working_window.uFrameWidth = 148;
-  working_window.uFrameZ = 334;
-  main_text_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-  hi_text_color = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-  //v2 = (signed __int64)(p2DEvents_minus1__20[13 * (unsigned int)v0->ptr_1C] * 500.0);
-  base_teach_price = (signed __int64)(p2DEvents[(unsigned int)v0->ptr_1C - 1].fPriceMultiplier * 500.0);
-  v63 = base_teach_price * (100 - currPlayer->GetMerchant()) / 100;
-  if ( v63 < base_teach_price / 3 )
-    v63 = base_teach_price / 3;
-  strcpy(Dest, "");
-  strcpy(v46, "");
-  strcpy(v47, "");
-  strcpy(v48, "");
-  strcpy(v49, "");
-  if ( dialog_menu_id != 1 )
-  {
-    if ( dialog_menu_id != 18 ) //buy skill
-    {
-      if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-      {
-        //v3 = (int)(&currPlayer->uIntelligence + dword_F8B19C); //test skill
-        if ( v58->pActiveSkills[dialog_menu_id-36] )
-        {
-          sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[403], pClassNames[dialog_menu_id - 16]); //"You already know the %s skill"
-          ShowStatusBarString(pTmpBuf, 2u);
-          pAudioPlayer->PlaySound(SOUND_27, 0, 0, -1, 0, 0, 0, 0);
-        }
-        else
-        {
-          if ( pParty->uNumGold < v63 )
-          {
-            ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u); //"You don't have enough gold"
-            HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
-          }
-          else
-          {
-            Party::TakeGold(v63);
-            v58->pActiveSkills[dialog_menu_id-36] = 1;
-          }
-        }
-      }
-      pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-      return;
-    }
-    pRenderer->DrawTextureIndexed(8u, 8u, ShopTexture);
-    v5 = 0;
-    v6 = 0;
-    v62 = 0;
-    v63 = 32;
-    do
-    {
-		if (pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C-139][v6].uItemID)
-     // if ( *(&pParty->pPlayers[1].pInstalledBeacons[0].field_18 + 9 * (v6 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)) )
-	  
-      {
-        pRenderer->DrawTextureTransparent(v63, 0x5Au, ItemsInShopTexture[v6]);
-        ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 230528), ItemsInShopTexture[v6], v6 + 1);
-        currPlayer = v58;
-      }
-      v63 += 70;
-      v62 += 280;
-      ++v6;
-    }
-    while ( v63 < 452 );
-
-    v62 = 1680;
-    v7 = 6;
-    v63 = 32;
-    do
-    {
-	if (pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C-139][v7].uItemID)
-     // if ( *(&pParty->pPlayers[1].pInstalledBeacons[0].field_18 + 9 * (v7 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)) )
-      {
-        pRenderer->DrawTextureTransparent(v63, 0xFAu, ItemsInShopTexture[v7]);
-        ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 638448), ItemsInShopTexture[v7], v7 + 1);
-        currPlayer = v58;
-      }
-      v63 += 70;
-      v62 += 280;
-      ++v7;
-    }
-    while ( v63 < 452 );
-
-    if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-    {
-      v8 = 0;
-      v9 = 12;
-     // v10 = (char *)(&pParty->pPlayers[1].pInstalledBeacons[0].field_18 + 108 * (unsigned int)window_SpeakInHouse->ptr_1C);
-	//  v10 =
-      do
-      {
-        if (pParty->SpellBooksInGuilds[window_SpeakInHouse->par1C-139][v9].uItemID )
-          ++v8;
-       // v10 += 36;
-        --v9;
-      }
-      while ( v9 );
-
-      GetAsyncKeyState(17);
-      statusbar_string = pGlobalTXT_LocalizationStrings[195]; //"Select the Item to Buy"
-      if ( dialog_menu_id != 2 )
-        statusbar_string = pGlobalTXT_LocalizationStrings[196]; //"Select the Special Item to Buy"	
-      DrawTextAtStatusBar(statusbar_string, 0);
-      if ( !v8 )
-		  {
-        working_window.DrawCurrentTime(
-                      __PAIR__(
-                        *(int *)&stru_AA1058[3].pSounds[8 * (unsigned int)window_SpeakInHouse->ptr_1C + 44472],
-                        *(int *)&stru_AA1058[3].pSounds[8 * (unsigned int)window_SpeakInHouse->ptr_1C + 44468])
-                    - pParty->uTimePlayed);
-		return;
-		  }
-      v12 = pMouse->GetCursorPos(&v51);
-      result = v12->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v50)->y];
-      v13 = pRenderer->pActiveZBuffer[result] & 0xFFFF;
-      if ( pRenderer->pActiveZBuffer[result] & 0xFFFF )
-      {
-        v14 = window_SpeakInHouse->ptr_1C;
-        v15 = (ItemGen *)(&pParty->pPlayers[1].uExpressionTimeLength + 18 * (v13 + 12 * (int)v14));
-        v16 = (int)window_SpeakInHouse->ptr_1C;
-        uPlayerID = uActiveCharacter - 1;
-        v17 = currPlayer->_490EEE( (ItemGen *)&pParty->pPlayers[1].uExpressionTimeLength + v13 + 12 * (int)v14, 3, v16,  2);
-        v18 = BuilDialogueString((char *)pMerchantsBuyPhrases[v17], uPlayerID, v15, (char *)v14, 2, 0);     
-        v19 = pFontArrus->CalcTextHeight(v18, &working_window, 0, 0);
-        working_window.DrawTitleText(pFontArrus, 0, (174 - v19) / 2 + 138,  main_text_color, v18, 3);
-        return;
-      }
-    }
-    return;
-  }
-  if ( !(unsigned __int16)_449B57_test_bit(
-                            (unsigned __int8 *)currPlayer->_guilds_member_bits,
-                            guild_mambership_flags[(unsigned int)window_SpeakInHouse->ptr_1C-139]) )
-  { //you must me member
-    v38 = pFontArrus->CalcTextHeight(pNPCTopics[121].pText, &working_window, 0, 0);
-    working_window.DrawTitleText(pFontArrus, 0, (212 - v38) / 2 + 101, hi_text_color, pNPCTopics[121].pText, 3u);
-    pDialogueWindow->pNumPresenceButton = 0;
-    return;
-  }
-
-  if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-    return;
-  v20 = pDialogueWindow;
-  v5 = 0;
-  v62 = 0;
-  Str = 0;
-  v21 = pDialogueWindow->pStartingPosActiveItem;
-  v22 = v21 + pDialogueWindow->pNumPresenceButton;
-  v61 = 0;
-  if ( pDialogueWindow->pStartingPosActiveItem >= pDialogueWindow->pStartingPosActiveItem+pDialogueWindow->pNumPresenceButton )
-	  {
-	  sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], pPlayers[uActiveCharacter]->pName, pClassNames[pPlayers[uActiveCharacter]->classType]); // "Seek knowledge elsewhere %s the %s"	
-	strcat(pTmpBuf, "\n \n");
-	strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]); //"I can offer you nothing further."
-	v19 = pFontArrus->CalcTextHeight(pTmpBuf, &working_window, 0, 0);
-	working_window.DrawTitleText(pFontArrus, v5, (174 - v19) / 2 + 138, hi_text_color, pTmpBuf, 3);
-	return;
-	  }
-  do
-  {
-    v23 = v20->GetControl(v21)->uControlParam;
-    if ( v23 == 18 )
-    {
-      v25 = pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[400], &working_window, 0, 0); //"Buy Spells"
-      v62 += v25;
-      ++v61;
-    }
-    else
-    {
-     
-     if((byte_4ED970_skill_learn_ability_by_class_table[v58->classType][v23-36])&&(v58->pActiveSkills[v23-36]))
-      // or
-      //byte_4ED970_skill_learn_ability_by_class_table[v58->uClass - 1][v23 + 1]
-      {
-        v24 = pFontArrus->CalcTextHeight(pClassNames[v23 - 16], &working_window, 0, 0);
-        v62 += v24;
-        ++v61;
-        ++Str;
-      }
-    }
-    ++v21;
-  }
-  while ( v21 < v20->pNumPresenceButton + v20->pStartingPosActiveItem );
-  if ( !v61 )
-  {
-LABEL_64:
-    sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v58->pName, pClassNames[v58->classType]); // "Seek knowledge elsewhere %s the %s"	
-    strcat(pTmpBuf, "\n \n");
-    strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]); //"I can offer you nothing further."
-	v19 = pFontArrus->CalcTextHeight(pTmpBuf, &working_window, 0, 0);
-	working_window.DrawTitleText(pFontArrus, v5, (174 - v19) / 2 + 138, hi_text_color, pTmpBuf, 3);
-	return;
-  }
-  if ( Str )
-  {
-    sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v63); //"Skill Cost: %lu"
-    working_window.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
-  }
-  v63 = (signed int)(149 - v62) / v61;
-  if ( v63 > 32 )
-    v63 = 32;
-  v26 = (signed int)(149 - v61 * v63 - v62) / 2 - v63 / 2 + 162;
-  v62 = v20->pStartingPosActiveItem;
-  v55 = v26;
-  if (v20->pStartingPosActiveItem < v20->pStartingPosActiveItem + v20->pNumPresenceButton )
-  {
-    v61 = 2;
-    while ( 1 )
-    {
-      v27 = v20->GetControl(v62);
-      v28 = v27;
-      v29 = v27->uControlParam;
-      if ( v29 == 18 )
-        break;
-
-    //  __debugbreak();
-      //pSkillAvailabilityPerClass[8 + v58->uClass][4 + v23]
-      // or
-      if ((byte_4ED970_skill_learn_ability_by_class_table[v58->classType][v29 - 36])&&(v58->pActiveSkills[v29-36]))
-      // or
-      //byte_4ED970_skill_learn_ability_by_class_table[v58->uClass - 1][v23 + 1]
-
-      {
-        v30 = pClassNames[v29 -16];
-LABEL_55:
-        Str = v30;
-        v28->uY = v63 + v55;
-        v31 = pFontArrus->CalcTextHeight(v30, &working_window, 0, 0);
-        v32 = v28->uY;
-        v28->uHeight = v31;
-        v33 = v32 + v31 - 1;
-        v28->uW = v33;
-        v55 = v33;
-        v34 = hi_text_color;
-        if ( pDialogueWindow->pCurrentPosActiveItem != v61 )
-          v34 = main_text_color;
-        working_window.DrawTitleText(pFontArrus, 0, v32, v34, Str, 3u);
-		v35 = v20->pStartingPosActiveItem;
-		++v62;
-		++v61;
-		if ( (signed int)v62 >=v20->pNumPresenceButton +v20->pStartingPosActiveItem  )
-			return;
-      }
-      v28->uW = 0;
-      v28->uHeight = 0;
-      v28->uY = 0;
-LABEL_58:
-      v35 = v20->pStartingPosActiveItem;
-      ++v62;
-      ++v61;
-      if ( (signed int)v62 >=v20->pNumPresenceButton +v20->pStartingPosActiveItem  )
-        return;
-    }
-    v30 = pGlobalTXT_LocalizationStrings[400]; //"Buy Spells"
-    goto LABEL_55;
-  }
-  return;
-}
-
-
-
-//----- (004B705E) --------------------------------------------------------
-void TempleDialog()
-	{
-  GUIWindow *v0; // ebx@1
-  Player *v1; // esi@1
-  int v2; // edi@1
-  int result; // eax@4
-  GUIWindow *v4; // edi@6
-  void *v5; // eax@6
-  int v6; // eax@6
-  unsigned int v7; // eax@8
-  int v8; // ecx@8
-  unsigned int v9; // eax@9
-  int v10; // eax@11
-  int v11; // eax@12
-  GUIWindow *v12; // ecx@16
-  int v13; // edx@16
-  GUIButton *v14; // eax@19
-  GUIButton *v15; // edi@19
-  int v16; // eax@19
-  const char *v17; // eax@21
-  int v18; // eax@21
-  unsigned int v19; // ecx@21
-  int v20; // eax@21
-  unsigned __int16 v21; // ax@21
-  unsigned __int16 v22; // ST14_2@27
-  int v23; // eax@27
-  double v24; // st7@28
-  unsigned int v25; // ebx@28
-  DDM_DLV_Header *v26; // edi@29
-  int v27; // eax@31
-  int v28; // eax@32
-  //unsigned int v29; // ecx@34
-  unsigned int v30; // edx@36
-  unsigned int v31; // edx@38
-  unsigned int v32; // edx@40
-  unsigned int v33; // edx@42
-  unsigned int v34; // edx@44
-  int v35; // edi@50
-  signed int v36; // eax@50
-  unsigned __int8 v37; // al@54
-  int v38; // ecx@54
-  GUIWindow *v39; // eax@56
-  unsigned __int8 v40; // al@61
-  GUIButton *v41; // edi@64
-  int v42; // esi@66
-  GUIWindow *v43; // ecx@66
-  int v44; // edi@66
-  int v45; // eax@68
-  signed int v46; // edi@69
-  int v47; // edi@71
-  GUIButton *v48; // eax@73
-  const char *v49; // edx@73
-  GUIButton *v50; // esi@73
-  int v51; // eax@73
-  unsigned int v52; // ecx@73
-  unsigned __int16 v53; // ax@73
-  char a1[300]; // [sp+10h] [bp-1B4h]@64
-  GUIWindow v57; // [sp+13Ch] [bp-88h]@1
-  __int64 v58; // [sp+190h] [bp-34h]@1
-  __int64 v59; // [sp+198h] [bp-2Ch]@1
-  __int64 v60; // [sp+1A0h] [bp-24h]@1
-  GUIWindow *v61; // [sp+1ACh] [bp-18h]@6
-  unsigned int v62; // [sp+1B0h] [bp-14h]@8
-  unsigned __int8 v63; // [sp+1B7h] [bp-Dh]@64
-  int v64; // [sp+1B8h] [bp-Ch]@6
-  unsigned int v65; // [sp+1BCh] [bp-8h]@6
-  DDM_DLV_Header *v66; // [sp+1C0h] [bp-4h]@6
-
-  v0 = window_SpeakInHouse;
-  memcpy(&v57, window_SpeakInHouse, sizeof(v57));
-  v57.uFrameX = 483;
-  v57.uFrameWidth = 148;
-  v57.uFrameZ = 334;
-  HIDWORD(v58) = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu);
-  HIDWORD(v59) = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu);
-  v1 = pPlayers[uActiveCharacter];
-  //v2 = pPlayers[uActiveCharacter]->_4B807C(p2DEvents_minus1__20[13 * (unsigned int)v0->ptr_1C]);
-  v2 = pPlayers[uActiveCharacter]->_4B807C(p2DEvents[(unsigned int)v0->ptr_1C - 1].fPriceMultiplier);
-  HIDWORD(v60) = v2;
-  if ( dialog_menu_id != 1 )
-  {
-    if ( dialog_menu_id != 10 )
-    {
-      if ( dialog_menu_id != 11 )
-      {
-
-        if ( dialog_menu_id == 96 )
-        {
-          if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() )
-          {
-            v4 = pDialogueWindow;
-            v61 = pDialogueWindow;
-            v5 = window_SpeakInHouse->ptr_1C;
-            v66 = 0;
-            //v65 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (signed int)v5] * 500.0);
-            v65 = (signed __int64)(p2DEvents[(signed int)v5 - 1].flt_24 * 500.0);
-            v6 = v1->GetMerchant();
-            v64 = (signed int)(v65 * (100 - v6)) / 100;
-            if ( v64 < (signed int)v65 / 3 )
-              v64 = (signed int)v65 / 3;
-            v7 = v4->pStartingPosActiveItem;
-            v8 = v7 + v4->pNumPresenceButton;
-            v65 = 0;
-            v62 = v7;
-            if ( (signed int)v7 >= v8 )
-              goto LABEL_78;
-            do
-            {
-              v9 = v4->GetControl(v62)->uControlParam - 36;
-              if ( byte_4ED970_skill_learn_ability_by_class_table[v1->classType][v9] && !v1->pActiveSkills[v9] )
-              {
-                v10 = pFontArrus->CalcTextHeight(pSkillNames[v9], &v57, 0, 0);
-                v66 = (DDM_DLV_Header *)((char *)v66 + v10);
-                ++v65;
-              }
-              v11 = v4->pStartingPosActiveItem;
-              ++v62;
-            }
-            while ( (signed int)v62 < v4->pNumPresenceButton + v11 );
-            if ( v65 )
-            {
-              sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], v64);
-              v57.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u);
-              v64 = (149 - (signed int)v66) / (signed int)v65;
-              if ( v64 > 32 )
-                v64 = 32;
-              v65 = (signed int)(149 - v65 * v64 - (int)v66) / 2 - v64 / 2 + 162;
-              v12 = v61;
-              result = v61->pStartingPosActiveItem;
-              v13 = result + v61->pNumPresenceButton;
-              v62 = v61->pStartingPosActiveItem;
-              if ( result < v13 )
-              {
-                v66 = (DDM_DLV_Header *)2;
-                while ( 1 )
-                {
-                  v14 = v12->GetControl(v62);
-                  v15 = v14;
-                  v16 = v14->uControlParam - 36;
-                  if ( !byte_4ED970_skill_learn_ability_by_class_table[v1->classType][v16] || v1->pActiveSkills[v16] )
-                  {
-                    v15->uW = 0;
-                    v15->uHeight = 0;
-                    v15->uY = 0;
-                  }
-                  else
-                  {
-                    v17 = pSkillNames[v16];
-                    v15->uY = v64 + v65;
-                    HIDWORD(v60) = (uint32)v17;
-                    v18 = pFontArrus->CalcTextHeight(v17, &v57, 0, 0);
-                    v19 = v15->uY;
-                    v15->uHeight = v18;
-                    v20 = v19 + v18 - 1;
-                    v15->uW = v20;
-                    v65 = v20;
-                    v21 = WORD2(v59);
-                    if ( (DDM_DLV_Header *)pDialogueWindow->pCurrentPosActiveItem != v66 )
-                      v21 = WORD2(v58);
-                    v57.DrawTitleText(pFontArrus, 0, v19, v21, (const char *)HIDWORD(v60), 3u);
-                  }
-                  result = (int)v61;
-                  ++v62;
-                  v66 = (DDM_DLV_Header *)((char *)v66 + 1);
-                  if ( (signed int)v62 >= v61->pNumPresenceButton + v61->pStartingPosActiveItem )
-                    break;
-                  v12 = v61;
-                }
-              }
-            }
-            else
-            {
-LABEL_78:
-              sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v1->pName, pClassNames[v1->classType]);
-              strcat(pTmpBuf, "\n \n");
-              strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]);
-              v22 = WORD2(v59);
-              v23 = pFontArrus->CalcTextHeight(pTmpBuf, &v57, 0, 0);
-              result = (int)v57.DrawTitleText(pFontArrus, 0, (174 - v23) / 2 + 138, v22, pTmpBuf, 3u);
-            }
-          }
-        }
-        return;
-      }
-
-      // DONATION
-      //v24 = p2DEvents_minus1__20[13 * (unsigned int)ptr_507BC0->ptr_1C];
-      v24 = p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].fPriceMultiplier;
-      v25 = 0;
-      if ( pParty->uNumGold >= (unsigned int)(signed __int64)v24 )
-      {
-        Party::TakeGold((signed __int64)v24);
-        v26 = &pOutdoor->ddm;
-        if ( uCurrentlyLoadedLevelType != LEVEL_Outdoor )
-          v26 = &pIndoor->dlv;
-        v27 = v26->uReputation;
-        v66 = v26;
-        if ( v27 > -5 )
-        {
-          v28 = v27 - 1;
-          v26->uReputation = v28;
-          if ( v28 < -5 )
-            v26->uReputation = -5;
-        }
-        if ( (unsigned __int8)byte_F8B1EF[uActiveCharacter] == pParty->uDaysPlayed % 7 )
-        {
-          if ( v26->uReputation <= -5 )
-          {
-            v30 = pParty->uDaysPlayed % 7 + 1;
-            LOBYTE(v30) = v30 | 0x80;
-            _42777D_CastSpell_UseWand_ShootArrow(SPELL_AIR_WIZARD_EYE, uActiveCharacter - 1, v30, 48, 0);
-          }
-          if ( v26->uReputation <= -10 )
-          {
-            v31 = pParty->uDaysPlayed % 7 + 1;
-            LOBYTE(v31) = v31 | 0x80;
-            _42777D_CastSpell_UseWand_ShootArrow(SPELL_SPIRIT_PRESERVATION, uActiveCharacter - 1, v31, 48, 0);
-            v26 = v66;
-          }
-          if ( v26->uReputation <= -15 )
-          {
-            v32 = pParty->uDaysPlayed % 7 + 1;
-            LOBYTE(v32) = v32 | 0x80;
-            _42777D_CastSpell_UseWand_ShootArrow(SPELL_BODY_PROTECTION_FROM_MAGIC, uActiveCharacter - 1, v32, 48, 0);
-            v26 = v66;
-          }
-          if ( v26->uReputation <= -20 )
-          {
-            v33 = pParty->uDaysPlayed % 7 + 1;
-            LOBYTE(v33) = v33 | 0x80;
-            _42777D_CastSpell_UseWand_ShootArrow(SPELL_LIGHT_HOUR_OF_POWER, uActiveCharacter - 1, v33, 48, 0);
-            v26 = v66;
-          }
-          if ( v26->uReputation <= -25 )
-          {
-            v34 = pParty->uDaysPlayed % 7 + 1;
-            LOBYTE(v34) = v34 | 0x80;
-            _42777D_CastSpell_UseWand_ShootArrow(SPELL_LIGHT_DAY_OF_PROTECTION, uActiveCharacter - 1, v34, 48, 0);
-          }
-        }
-        ++byte_F8B1EF[uActiveCharacter];
-        v1->PlaySound(SPEECH_83, 0);
-        ShowStatusBarString(pGlobalTXT_LocalizationStrings[527], 2u); // "Thank You!"
-        goto LABEL_46;
-      }
-      goto LABEL_55;
-    }
-    if ( !v1->_4B6FF9() )
-      return;
-    v25 = 0;
-    if ( pParty->uNumGold < v2 )
-    {
-LABEL_55:
-      ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);
-      HousePlaySomeSound((unsigned int)window_SpeakInHouse->ptr_1C, 2);
-      goto LABEL_46;
-    }
-    Party::TakeGold(v2);
-    v35 = LODWORD(v1->pConditions[17]);
-    v59 = v1->pConditions[14];
-    v58 = v1->pConditions[15];
-    v60 = v1->pConditions[16];
-    v61 = (GUIWindow *)HIDWORD(v1->pConditions[17]);
-    memset(v1, 0, 0xA0u);
-    v1->sHealth = v1->GetMaxHealth();
-    v1->sMana = v1->GetMaxMana();
-    v36 = (signed int)window_SpeakInHouse->ptr_1C;
-    if ( v36 != 78 && (v36 <= 80 || v36 > 82) )
-    {
-      if ( (unsigned int)v61 | v35 )
-      {
-        v37 = LOBYTE(v1->field_1928);
-        v38 = v1->field_1924;
-        v1->uFace = v37;
-        v1->uVoiceID = v38;
-        ReloadPlayerPortraits(uActiveCharacter - 1, (char)v37);
-      }
-      goto LABEL_63;
-    }
-    v39 = v61;
-    if ( (unsigned int)v61 | v35 )
-    {
-      LODWORD(v1->pConditions[17]) = v35;
-    }
-    else
-    {
-      if ( !v60 && !v58 && !v59 )
-        goto LABEL_63;
-      v1->field_1928 = v1->uFace;
-      v1->field_1924 = v1->uVoiceID;
-      v1->SetCondition(0x11u, 1);
-      v1->uVoiceID = (v1->GetSexByVoice() != 0) + 23;
-      v40 = (v1->GetSexByVoice() != 0) + 23;
-      v1->uFace = v40;
-      ReloadPlayerPortraits(uActiveCharacter - 1, (char)v40);
-      LODWORD(v1->pConditions[17]) = LODWORD(pParty->uTimePlayed);
-      v39 = (GUIWindow *)HIDWORD(pParty->uTimePlayed);
-    }
-    HIDWORD(v1->pConditions[17]) = (int)v39;
-LABEL_63:
-    pAudioPlayer->PlaySound((SoundID)(SOUND_GoldReceived|0x2), -1, 0, -1, 0, 0, 0, 0);
-    v1->PlaySound(SPEECH_82, 0);
-    pOtherOverlayList->_4418B1(20, uActiveCharacter + 99, 0, 65536);
-LABEL_46:
-    pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, v25);
-    return ; // void func
-  }
-  v63 = 1;
-  v41 = pDialogueWindow->GetControl(pDialogueWindow->pStartingPosActiveItem);
-  strcpy(a1, "");
-  v41->uHeight = 0;
-  v41->uY = 0;
-  if ( v1->_4B6FF9() )
-  {
-    sprintf(a1, "%s %d %s", pGlobalTXT_LocalizationStrings[104], HIDWORD(v60), pGlobalTXT_LocalizationStrings[97]);
-    v63 = 0;
-  }
-  strcpy(&a1[100], pGlobalTXT_LocalizationStrings[68]);
-  strcpy(&a1[200], pGlobalTXT_LocalizationStrings[160]);
-  v42 = v63;
-  v43 = pDialogueWindow;
-  v44 = v63;
-  v66 = 0;
-  if ( v63 < pDialogueWindow->pNumPresenceButton )
-  {
-    v61 = (GUIWindow *)&a1[100 * v63];
-    do
-    {
-      v45 = pFontArrus->CalcTextHeight((const char *)v61, &v57, 0, 0);
-      v66 = (DDM_DLV_Header *)((char *)v66 + v45);
-      v43 = pDialogueWindow;
-      v61 = (GUIWindow *)((char *)v61 + 100);
-      ++v44;
-    }
-    while ( v44 < pDialogueWindow->pNumPresenceButton );
-  }
-  v46 = v43->pNumPresenceButton - v42;
-  v64 = (174 - (signed int)v66) / v46;
-  if ( v64 > 32 )
-    v64 = 32;
-  v47 = (174 - v64 * v46 - (signed int)v66) / 2 - v64 / 2 + 138;
-  v65 = v42 + v43->pStartingPosActiveItem;
-  if ( v42 + v43->pStartingPosActiveItem < v43->pStartingPosActiveItem + v43->pNumPresenceButton )
-  {
-    v61 = (GUIWindow *)(v42 + 2);
-    v66 = (DDM_DLV_Header *)&a1[100 * v42];
-    do
-    {
-      v48 = v43->GetControl(v65);
-      v49 = (const char *)v66;
-      v50 = v48;
-      v48->uY = v64 + v47;
-      v51 = pFontArrus->CalcTextHeight(v49, &v57, 0, 0);
-      v52 = v50->uY;
-      v50->uHeight = v51;
-      v47 = v52 + v51 - 1;
-      v50->uW = v47;
-      v53 = WORD2(v59);
-      if ( (GUIWindow *)pDialogueWindow->pCurrentPosActiveItem != v61 )
-        v53 = WORD2(v58);
-      v57.DrawTitleText(pFontArrus, 0, v52, v53, (const char *)v66, 3u);
-      v43 = pDialogueWindow;
-      v66 = (DDM_DLV_Header *)((char *)v66 + 100);
-      v61 = (GUIWindow *)((char *)v61 + 1);
-      ++v65;
-    }
-    while ( (signed int)v65 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem );
-  }
-  return;
-}
-
-
 
 //----- (004B6478) --------------------------------------------------------
 int __cdecl sub_4B6478()
@@ -14116,284 +12287,3 @@
   return result;
 }
 
-//----- (0044606A) --------------------------------------------------------
-void PrepareHouse(HOUSE_ID house)
-{
-  //unsigned int v1; // ebx@1
-  //signed int v2; // esi@1
-  //int uExitPic; // edi@1
-  __int16 uExitMapID; // ax@2
-  //int result; // eax@5
-  //unsigned int *v6; // ecx@8
-  int v7; // ebx@11
-  //int v8; // esi@16
-  //unsigned int v9; // eax@16
-  //unsigned int v10; // eax@19
-  //int v11; // ecx@19
-  //char pContainer[36]; // [sp+Ch] [bp-54h]@16
-  int v13; // [sp+30h] [bp-30h]@11
-  int Dst[6]; // [sp+34h] [bp-2Ch]@1
-  //unsigned int v15; // [sp+4Ch] [bp-14h]@1
-  int uAnimationID; // [sp+50h] [bp-10h]@1
-  //unsigned int *v17; // [sp+54h] [bp-Ch]@3
-  //unsigned int v18; // [sp+58h] [bp-8h]@1
-  //int v19; // [sp+5Ch] [bp-4h]@7
-
-  //v15 = uHouseID;
-  //v1 = 52 * uHouseID;
-  //uAnimationID = p2DEvents_minus1___02[26 * uHouseID];
-  uAnimationID = p2DEvents[house - 1].uAnimationID;
-  //v18 = 52 * uHouseID;
-  memset(Dst, 0, 0x18u);
-  //uExitPic = *(__int16 *)((char *)p2DEvents_minus1_::2C + v1);
-  //uExitPic = p2DEvents[uHouseID - 1].uExitPicID;
-  uNumDialogueNPCPortraits = 0;
-  uHouse_ExitPic = p2DEvents[house - 1].uExitPicID;
-  if ( uHouse_ExitPic )
-  {
-    //uExitMapID = *(__int16 *)((char *)p2DEvents_minus1_::30 + v1);
-    uExitMapID = p2DEvents[house - 1]._quest_related;
-    if ( uExitMapID > 0 )
-    {
-      //v17 = (unsigned int *)(uExitMapID - 1);
-	  if(_449B57_test_bit(pParty->_quest_bits,uExitMapID))
-     // if ( !((unsigned __int8)(0x80u >> (uExitMapID - 1) % 8) & pParty->_quest_bits[(uExitMapID - 1) >> 3]) )
-      {
-        //uExitPic = 0;
-        uHouse_ExitPic = 0;
-      }
-    }
-  }
-
-  dword_591080 = pAnimatedRooms[uAnimationID].field_8;
-  //result = dword_591080;
-
-  //v2 = 0;
-  uNumDialogueNPCPortraits = 0;
-  if ( dword_591080 )
-  {
-    //v2 = 1;
-    Dst[0] = dword_591080;
-    uNumDialogueNPCPortraits = 1;
-  }
-
-  //v19 = 1;
-  for (uint i = 0; i < pNPCStats->uNumNewNPCs; ++i)
-  {
-    auto npc = pNPCStats->pNewNPCData + i;
-    //v6 = &pNPCStats->pNewNPCData[1].uFlags;
-    //v17 = &pNPCStats->pNewNPCData[1].uFlags;
-    //do
-    //{
-    if (npc->Location2D == house )
-    {
-      if (~npc->uFlags & 0x80)
-        //if ( !(*(char *)v6 & 0x80) )
-      {
-        v7 = uNumDialogueNPCPortraits++ - dword_591080 ? 1 : 0;
-        HouseNPCData[v7] = npc;
-        //v6 = v17;
-        //*(&v13 + v2) = *(v17 - 1);
-        Dst[uNumDialogueNPCPortraits - 1] = npc->uPortraitID;
-          //v1 = v18;
-        if ((npc->uFlags & 3) != 2)
-          ++npc->uFlags;
-      }
-    }
-      //++v19;
-      //v6 += 19;
-      //v17 = v6;
-    //}
-    //while ( v19 < (signed int)pNPCStats->uNumNewNPCs );
-  }
-  //uNumDialogueNPCPortraits = v2;
-
-  //v19 = 0;
-  for (uint i = 0; i < uNumDialogueNPCPortraits; ++i)
-  //if ( v2 > 0 )
-  {
-    //do
-    //{
-      //v8 = v19;
-    char icon_name[128];
-    sprintfex(icon_name, "npc%03u", Dst[i]);
-    //v9 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);
-    //++v19;
-    pDialogueNPCPortraits[i] = pIcons_LOD->LoadTexturePtr(icon_name, TEXTURE_16BIT_PALETTE);
-    //result = v19;
-    //}
-    //while ( v19 < uNumDialogueNPCPortraits );
-    //uExitPic = uHouse_ExitPic;
-  }
-
-  if (uHouse_ExitPic)
-  {
-    //v10 = pIcons_LOD->LoadTexture(pHouse_ExitPictures[uHouse_ExitPic], TEXTURE_16BIT_PALETTE);
-    //v11 = uNumDialogueNPCPortraits++;
-    pDialogueNPCPortraits[uNumDialogueNPCPortraits++] = pIcons_LOD->LoadTexturePtr(pHouse_ExitPictures[uHouse_ExitPic], TEXTURE_16BIT_PALETTE);
-    //result = *(__int16 *)((char *)p2DEvents_minus1_::2E + v1);
-    //result = p2DEvents[house - 1].uExitMapID;
-    uHouse_ExitPic = p2DEvents[house - 1].uExitMapID;
-  }
-  //return result;
-}
-
-
-
-//----- (0044622E) --------------------------------------------------------
-bool  EnterHouse(enum HOUSE_ID uHouseID)
-	{
-	//enum HOUSE_ID v1; // edi@1
-	//int v2; // edi@5
-	signed int uOpenTime; // eax@5
-	signed int uCloseTime; // esi@5
-	unsigned int v5; // esi@5
-	int v6; // edx@5
-	signed int am_pm_flag_open; // ecx@10
-	signed int am_pm_flag_close; // eax@10
-	int v9; // esi@10
-	//unsigned int v10; // esi@16
-	int v11; // ecx@17
-	unsigned int v12; // kr00_4@25
-	//Player *v13; // esi@25
-	int v14; // eax@25
-	//Player *v15; // esi@27
-	//signed int v16; // eax@32
-	unsigned int v17; // eax@37
-	signed int v18; // edi@37
-	signed int v19; // edi@41
-	//unsigned int v20; // ecx@41
-	//const char *v22; // [sp-4h] [bp-40h]@33
-	char pContainer[40]; // [sp+Ch] [bp-30h]@32
-	unsigned int v24; // [sp+34h] [bp-8h]@5
-	//enum HOUSE_ID v25; // [sp+38h] [bp-4h]@1
-
-	//v1 = uHouseID;
-	//v25 = uHouseID;
-	GameUI_StatusBar_TimedString[0] = 0;
-	pStatusBarString[0] = 0;
-	ShowStatusBarString("", 2u);
-	if ( pMessageQueue_50CBD0->uNumMessages )
-		pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
-	viewparams->bRedrawGameUI = 1;
-	uDialogueType = 0;
-	pKeyActionMap->_459ED1(3);
-	pKeyActionMap->ResetKeys();
-	if (uHouseID == HOUSE_600 || uHouseID == HOUSE_601)
-		{
-		GameOverMenu(0);
-		return 0;
-		}
-	uOpenTime = p2DEvents[uHouseID - 1].uOpenTime;
-	uCloseTime = p2DEvents[uHouseID - 1].uCloseTime;
-	ptr_F8B1E8 = 0;
-	dword_F8B1E4 = 0;
-	dword_F8B1F4 = 0;
-	memset(byte_F8B1F0, 0, 4);
-	memset(byte_F8B148, 0, 16);
-	pRenderer->ClearZBuffer(0, 479);
-
-	if (((uCloseTime - 1 <= uOpenTime)&&((pParty->uCurrentHour <uOpenTime)&&(pParty->uCurrentHour >(uCloseTime - 1))))||
-		((uCloseTime - 1 >  uOpenTime)&&((pParty->uCurrentHour < uOpenTime)||(pParty->uCurrentHour > (uCloseTime - 1))))) 
-
-		{
-		am_pm_flag_open = 0;
-		am_pm_flag_close = 0;
-		if (uOpenTime > 12 )
-			{
-			uOpenTime -= 12;
-			am_pm_flag_open = 1;
-			}
-		if ( uCloseTime > 12 )
-			{
-			uCloseTime -= 12;
-			am_pm_flag_close = 1;
-			}
-		sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[414], uOpenTime, aAMPMNames[am_pm_flag_open], 
-			uCloseTime, aAMPMNames[am_pm_flag_close]); //"This place is open from %d%s to %d%s"
-		ShowStatusBarString(pTmpBuf, 2u);
-		if ( uActiveCharacter )
-			pPlayers[uActiveCharacter]->PlaySound(SPEECH_3, 0);
-		return 0;
-		}
-	else
-		{
-		//v10 = uHouseID;
-		if ( (signed int)uHouseID < 53 ) //entering shops and guilds
-			{
-			if ( !(pParty->field_3C._shop_ban_times[uHouseID])
-				||  (pParty->field_3C._shop_ban_times[uHouseID] <= pParty->uTimePlayed) )
-				{
-				pParty->field_3C._shop_ban_times[uHouseID] = 0;
-				}
-			else
-				{
-				ShowStatusBarString(pGlobalTXT_LocalizationStrings[191], 2u);// "You've been banned from this shop!"
-				return 0;
-				}
-			}
-		if ( !start_event_seq_number )
-			pAudioPlayer->StopChannels(-1, -1);
-
-		uCurrentHouse_Animation = p2DEvents[uHouseID - 1].uAnimationID;
-		in_current_building_type = pAnimatedRooms[uCurrentHouse_Animation].uBuildingType;
-		if ( in_current_building_type == BildingType_Throne_Room && pParty->uFine )   // going 2 jail
-			{
-			uCurrentHouse_Animation = (signed __int16)p2DEvents[186].uAnimationID;
-			uHouseID = HOUSE_JAIL;
-			pParty->uTimePlayed = pParty->uTimePlayed+ 0x7620000;
-			in_current_building_type = pAnimatedRooms[p2DEvents[HOUSE_LORD_AND_JUDGE].uAnimationID].uBuildingType;
-			++pParty->uNumPrisonTerms;
-			pParty->uFine = 0;
-			for (uint i = 0; i < 4; ++i)
-				{
-				pParty->pPlayers[i].uTimeToRecovery = 0;
-				pParty->pPlayers[i].uNumDivineInterventionCastsThisDay = 0;
-				pParty->pPlayers[i].SetVariable(VAR_Award, 87);
-				}
-			}
-		++pIcons_LOD->uTexturePacksCount;
-		if ( !pIcons_LOD->uNumPrevLoadedFiles )
-			pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles;
-		switch (pParty->alignment)
-			{
-		case PartyAlignment_Good:    sprintf(pContainer, "evt%02d-b", const_2()); break;
-		case PartyAlignment_Neutral: sprintf(pContainer, "evt%02d", const_2()); break;
-		case PartyAlignment_Evil:    sprintf(pContainer, "evt%02d-c", const_2()); break;
-		default: assert(false);
-			}
-
-		v17 = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);
-		pDialogueNPCCount = 0;
-		pTexture_Dialogue_Background = &pIcons_LOD->pTextures[v17];
-		uTextureID_507B04 = uTextureID_right_panel;
-		PrepareHouse(uHouseID);
-		v18 = 1;
-		uTextureID_507B04 = uTextureID_right_panel;
-		if ( uNumDialogueNPCPortraits == 1 )
-			pDialogueNPCCount = 1;
-		pVideoPlayer->_4BF28F(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u);  
-		dword_5C35D4 = 1;
-		if ( (signed int)uHouseID < 139 || (signed int)uHouseID > 172 )
-			{
-			if ( (signed int)uHouseID >= 54 && (signed int)uHouseID <= 73 && !sub_4B68EA(uHouseID - 54) )
-				{
-				return 1;
-				}
-			}
-		else
-			{ //guilds
-			v19 = guild_mambership_flags[uHouseID-139]; //guilds flags 
-			//v20 = uHouseID;
-			//if ( !((unsigned __int8)(0x80u >> v19 % 8) & pPlayers[uActiveCharacter]->_guilds_member_bits[v19 /8]) )
-			if(_449B57_test_bit((unsigned char*)pPlayers[uActiveCharacter]->_guilds_member_bits,v19))
-				{
-				HousePlaySomeSound(uHouseID, 3);
-				return 1;
-				}
-			}
-		HousePlaySomeSound(uHouseID, 1);
-		dword_5C35D4 = 1;
-		return 1;
-		}
-	}
--- a/mm7_5.cpp	Mon Mar 11 03:37:48 2013 +0200
+++ b/mm7_5.cpp	Mon Mar 11 03:38:59 2013 +0200
@@ -44,6 +44,7 @@
 #include "Events2D.h"
 #include "texts.h"
 #include "Log.h"
+#include "UIHouses.h"
 
 #include "mm7_data.h"
 
--- a/mm7_data.cpp	Mon Mar 11 03:37:48 2013 +0200
+++ b/mm7_data.cpp	Mon Mar 11 03:38:59 2013 +0200
@@ -68,205 +68,6 @@
 Award pAwards[104];
 
 #include "stru159.h"
-stru159 pAnimatedRooms[196] = //0x4E5F70
-{
-	{"",                            0x4, 0x1F4, 0, 0, 0},
-	{"Human Armor01",               0x20, 0x2C0, 2, 58, 0},
-{"Necromancer Armor01",         0x20, 0x2D7, 2, 70, 0 },
-{"Dwarven Armor01",             0x20, 0x2EE, 2,  5, 0 },
-{"Wizard Armor",                0x20, 0x3BD, 2, 19, 0 },
-{"Warlock Armor",               0x20, 0x2D6, 2, 35, 0 },
-{"Elf Armor",                   0x20, 0x2BC, 2, 79, 0 },
-{"Human Alchemisht01",          0xE,  0x2BE, 4, 95, 0 },
-{"Necromancer Alchemist01",     0xE,  0x2D6, 4, 69, 0 },
-{"Dwarven Achemist01",          0xE,  0x387, 4,  4, 0 },
-{"Wizard Alchemist",            0xE,  0x232, 4, 25, 0 },
-{"Warlock Alchemist",           0xE,  0x2BE, 4, 42, 0 },
-{"Elf Alchemist",               0xE,  0x38A, 4, 84, 0 },
-{"Human Bank01",                0x6, 0x384, 22, 52, 0 },
-{"Necromancer Bank01",          0x6, 0x2D8, 22, 71, 0 },
-{"Dwarven Bank",                0x6, 0x2F3, 22,  6, 0 },
-{"Wizard Bank",                 0x6, 0x3BA, 22, 20, 0 },
-{"Warlock Bank",                0x6, 0x39F, 22, 36, 0 },
-{"Elf Bank",                    0x6, 0x2BC, 22, 71, 0 },
-{"Boat01",                      0xF,  0x4C, 28, 53, 3 },
-{"Boat01d",                     0xF,  0x4C, 28, 53, 3 },
-{"Human Magic Shop01",          0xA, 0x2C8,  3, 54, 0 },
-{"Necromancer Magic Shop01",    0xE, 0x2DC,  3, 66, 0 },
-{"Dwarven Magic Shop01",        0x2A, 0x2EF, 3, 91, 0 },
-{"Wizard Magic Shop",           0x1E, 0x2DF, 3, 15, 0 },
-{"Warlock Magic Shop",          0x7,  0x3B9, 3, 15, 0 },
-{"Elf Magic Shop",              0x24, 0x2CC, 3, 82, 0 },
-{"Human Stables01",             0x21, 0x31,  27, 48, 3 },
-{"Necromancer Stables",         0x21, 0x2DD, 27, 67, 3 },
-{"",                            0x21, 0x2F0, 27, 91, 3 },
-{"Wizard Stables",              0x21, 0x3BA, 27, 16, 3 },
-{"Warlock Stables",             0x21, 0x181, 27, 77, 3 },
-{"Elf Stables",                 0x21, 0x195, 27, 77, 3 },
-{"Human Tavern01",              0xD, 0x2C2,  21, 49, 0 },
-{"Necromancer Tavern01",        0xD, 0x3B0,  21, 57, 0 },
-{"Dwarven Tavern01",            0xD, 0x2FE,  21, 94, 0 },
-{"Wizard Tavern",               0xD, 0x3BB,  21, 17, 0 },
-{"Warlock Tavern",              0xD, 0x3A8,  21, 33, 0 },
-{"Elf Tavern",                  0xD, 0x2CD,  21, 78, 0 },
-{"Human Temple01",              0x24, 0x2DB, 23, 50, 3 },
-{"Necromancer Temple",          0x24, 0x2DF, 23, 60, 3 },
-{"Dwarven Temple01",            0x24, 0x2F1, 23, 86, 3 },
-{"Wizard Temple",               0x24, 0x2E0, 23, 10, 3 },
-{"Warlock Temple",              0x24, 0x3A4, 23, 27, 3 },
-{"Elf Temple",                  0x24, 0x2CE, 23, 72, 3 },
-{"Human Town Hall",             0x10, 0x39C, 17, 14, 0 },
-{"Necromancer Town Hall01",     0x10, 0x3A4, 17, 61, 0 },
-{"Dwarven Town Hall",           0x10, 0x2DB, 17, 88, 0 },
-{"Wizard Town Hall",            0x10, 0x3BD, 17, 11, 0 },
-{"Warlock Town Hall",           0x10, 0x2DB, 17, 28, 0 },
-{"Elf Town Hall",               0x10, 0x27A, 17, 73, 0 },
-{"Human Training Ground01",     0x18, 0x2C7, 30, 44, 0 },
-{"Necromancer Training Ground", 0x18, 0x3AD, 30, 62, 0 },
-{"Dwarven Training Ground",     0x18, 0x2F2, 30, 89, 0 },
-{"Wizard Training Ground",      0x18, 0x3A3, 30, 12, 0 },
-{"Warlock Training Ground",     0x18, 0x3A6, 30, 29, 0 },
-{"Elf Training Ground",         0x18, 0x19F, 30, 74, 0 },
-{"Human Weapon Smith01",        0x16, 0x2C1, 1, 45, 4 },
-{"Necromancer Weapon Smith01",  0x16, 0x2D9, 1, 63, 4 },
-{"Dwarven Weapon Smith01",      0x16, 0x2EE, 1, 82, 4 },
-{"Wizard Weapon Smith",         0x16, 0x2D5, 1, 13, 4 },
-{"Warlock Weapon Smith",        0x16, 0x2D7, 1, 23, 4 },
-{"Elf Weapon Smith",            0x16, 0x2CA, 1, 75, 4 },
-{"Air Guild",                   0x1D, 0xA4,   6, 1, 3 },
-{"Body Guild",                  0x19, 0x3BF, 11, 2, 0 },
-{"DarkGuild",                   0x19, 0x2D1, 13, 3, 0 },
-{"EarthGuild",                  0x19, 0x2CB, 8, 83, 0 },
-{"Fire Guild",                  0x1C, 0x2BF, 5, 56, 0 },
-{"Light Guild",                 0x1C, 0x2D5, 12, 46, 0 },
-{"Mind Guild",                  0x1C, 0xE5,  10, 40, 0 },
-{"Spirit Guild",                0x1C, 0x2D2,  9, 41, 0 },
-{"Water Guild",                 0x1B, 0x2D3,  7, 24, 0 },
-{"Lord And Judge Out01",        1, 0,        29, 39, 0 },
-{"Human Poor House 1",          8, 0,        29,  0, 0 },
-{"Human Poor House 2",          8, 0,        29,  0, 0 },
-{"Human Poor House 3",          8, 0,        29,  0, 0 },
-{"Human Medium House 1",        8, 0,        29,  0, 0 },
-{"Human Medium House 2",        8, 0,        29,  0, 0 },
-{"Human Medium House 3",        8, 0,        29,  0, 0 },
-{"Human Rich House 1",          8, 0,        29,  0, 0 },
-{"Human Rich House 2",          8, 0,        29,  0, 0 },
-{"Human Rich House 3",          8, 0,        29,  0, 0 },
-{"Elven Poor House 1",          8, 0,        29,  0, 0 },
-{"Elven Poor House 2",          8, 0,        29,  0, 0 },
-{"Elven Poor House 3",          8, 0,        29,  0, 0 },
-{"Elven Medium House 1",        8, 0,        29,  0, 0 },
-{"Elven Medium House 2",        8, 0,        29,  0, 0 },
-{"Elven Medium House 3",        8, 0,        29,  0, 0 },
-{"Elven Rich House 1",          8, 0,        29,  0, 0 },
-{"Elven Rich House 2",          8, 0,        29,  0, 0 },
-{"Elven Rich House 3",          8, 0,        29,  0, 0 },
-{"Dwarven Poor House 1",        8, 0,        29,  0, 0 },
-{"Dwarven Poor House 2",        8, 0,        29,  0, 0 },
-{"Dwarven Poor House 3",        8, 0,        29,  0, 0 },
-{"Dwarven Medium House 1",      8, 0,        29,  0, 0 },
-{"Dwarven Medium house 2",      8, 0,        29,  0, 0 },
-{"Dwarven Medium House 3",      8, 0,        29,  0, 0 },
-{"Dwarven Rich House 1",        8, 0,        29,  0, 0 },
-{"Dwarven Rich House 2",        8, 0,        29,  0, 0 },
-{"Dwarven Rich House 3",        8, 0,        29,  0, 0 },
-{"Wizard Poor House 1",         8, 0,        29,  0, 0 },
-{"Wizard Poor House 2",         8, 0,        29,  0, 0 },
-{"Wizard Poor House 3",         8, 0,        29,  0, 0 },
-{"Wizard Medium House 1",       8, 0,        29,  0, 0 },
-{"Wizard Medium House 2",       8, 0,        29,  0, 0 },
-{"Wizard Mdeium House 3",       8, 0,        29,  0, 0 },
-{"Wizard Rich House 1",         8, 0,        29,  0, 0 },
-{"Wizard Rich House 2",         8, 0,        29,  0, 0 },
-{"Wizard Rich House 3",         8, 0,        29,  0, 0 },
-{"Necromancer Poor House 1",    8, 0,        29,  0, 0 },
-{"Necromancer Poor House 2",    8, 0,        29,  0, 0 },
-{"Necromancer Poor House 3",    8, 0,        29,  0, 0 },
-{"Necromancer Medium House 1",  8, 0,        29,  0, 0 },
-{"Necromancer Medium House 2",  8, 0,        29,  0, 0 },
-{"Necromancer Mdeium House 3",  8, 0,        29,  0, 0 },
-{"Necromancer Rich House 1",    8, 0,        29,  0, 0 },
-{"Necromancer Rich House 2",    8, 0,        29,  0, 0 },
-{"Necromancer Rich House 3",    8, 0,        29,  0, 0 },
-{"Warlock Poor House 1",        8, 0,        29,  0, 0 },
-{"Warlock Poor House 2",        8, 0,        29,  0, 0 },
-{"Warlock Poor House 3",        8, 0,        29,  0, 0 },
-{"Warlock Medium House 1",      8, 0,        29,  0, 0 },
-{"Warlock Medium House 2",      8, 0,        29,  0, 0 },
-{"Warlock Mdeium House 3",      8, 0,        29,  0, 0 },
-{"Warlock Rich House 1",        8, 0,        29,  0, 0 },
-{"Warlock Rich House 2",        8, 0,        29,  0, 0 },
-{"Warlock Rich House 3",        8, 0,        29,  0, 0 },
-{"Out01 Temple of the Moon",    0x24, 0,     25,  0, 0 },
-{"Out01 Dragon Cave",           0x24, 0,     25,  0, 0 },
-{"Out02 Castle Harmondy",       0x24, 0,     25,  0, 0 },
-{"Out02 White Cliff Cave",      0x24, 0,     25,  0, 0 },
-{"Out03 Erathian Sewer",        0x24, 0,     25,  0, 0 },
-{"Out03 Fort Riverstride",      0x24, 0,     25,  0, 0 },
-{"Out03 Castle Gryphonheart",   0x24, 0,     25,  0, 0 },
-{"Out04 Elf Castle",            0x24, 0,     25,  0, 0 },
-{"Out04 Tularean Caves",        0x24, 0,     25,  0, 0 },
-{"Out04 Clanker's Laboratory",  0x24, 0,     25,  0, 0 },
-{"Out05 Hall of the Pit",       0x24, 0,     25,  0, 0 },
-{"Out05 Watchtower 6",          0x24, 0,     25,  0, 0 },
-{"Out06 School of Sorcery",     0x24, 0,     25,  0, 0 },
-{"Out06 Red Dwarf Mines",       0x24, 0,     25,  0, 0 },
-{"Out07 Castle Lambert",        0x24, 0,     25,  0, 0 },
-{"Out07 Walls of Mist",         0x24, 0,     25,  0, 0 },
-{"Out07 Temple of the Light",   0x24, 0,     25,  0, 0 },
-{"Out08 Evil Entrance",         0x24, 0,     25,  0, 0 },
-{"Out08 Breeding Zone",         0x24, 0,     25,  0, 0 },
-{"Out08 Temple of the Dark",    0x24, 0,     25,  0, 0 },
-{"Out09 Grand Temple of the Moon", 0x24, 0,     25,  0, 0 },
-{"Out09 Grand Tempple of the Sun", 0x24, 0,     25,  0, 0 },
-{"Out10 Thunderfist Mountain",  0x24, 0,     25,  0, 0 },
-{"Out10 The Maze",              0x24, 0,     25,  0, 0 },
-{"Out10 Connecting Tunnel Cave #1", 0x24, 0,     25,  0, 0 },
-{"",                            0x24, 0,     25,  0, 0 },
-{"",                            0x24, 0,     25,  0, 0 },
-{"Out11 Stone City",            0x24, 0,     25,  0, 0 },
-{"",                            0x24, 0,     25,  0, 0 },
-{"Out12 Colony Zod",            0x24, 0,     25,  0, 0 },
-{"Out12 Connecting Tunnel Cave #1", 0x24, 0,     25,  0, 0 },
-{"",                            0x24, 0,     25,  0, 0 },
-{"",                            0x24, 0,     25,  0, 0 },
-{"Out13 Mercenary Guild",       0x24, 0,     25,  0, 0 },
-{"Out13 Tidewater Caverns",     0x24, 0,     25,  0, 0 },
-{"Out13 Wine Cellar",           0x24, 0,     25,  0, 0 },
-{"Out14 Titan's Stronghold",    0x24, 0,     25,  0, 0 },
-{"Out14 Temple Of Baa",         0x24, 0,     25,  0, 0 },
-{"Out14 Hall under the Hill",   0x24, 0,     25,  0, 0 },
-{"Out15 The Linclon",           0x24, 0,     25,  0, 0 },
-{"Jail",                        0x24, 0, 31, 0, 0 },
-{"Harmondale Throne Room",      0x24, 0, 29, 0, 0 },
-{"Gryphonheart Throne Room",    0x24, 0, 20, 0, 0 },
-{"Elf Castle Throne Room",      0x24, 0, 20, 0, 0 },
-{"Wizard Castle Throne Room",   0x24, 0, 20, 0, 0 },
-{"Necromancer Casstle Trone Room", 0x24, 0, 20, 0, 0 },
-{"Master Thief",                0x24, 0, 29, 0, 0 },
-{"Dwarven King",                0x24, 0, 20, 0, 0 },
-{"Arms Master",                 0x24, 0, 29, 0, 0 },
-{"Warlock",                     0x24, 0, 29, 0, 0 },
-{"Lord Markam",                 0x24, 0, 20, 0, 0 },
-{"Arbiter Neutral Town",        0x24, 0, 29, 0, 0 },
-{"Arbiter Good Town",           0x24, 0, 29, 0, 0 },
-{"Arbiter Evil Town",           0x24, 0, 29, 0, 0 },
-{"Necromancer Throne Room Empty", 0x24, 0, 20, 0, 0 },
-{"",                            0x24, 0, 29, 0, 0 },
-{"",                            0x24, 0, 29, 0, 0 },
-{"",                            0x24, 0, 29, 0, 0 },
-{"",                            0x24, 0, 29, 0, 0 },
-{"Boat01",                      0xF, 0, 29, 53, 3 },
-{"",                            0x24, 0, 28, 0, 0 },
-{"",                            0x24, 0, 28, 0, 0 },
-{"",                            0x24, 0, 28, 0, 0 },
-{"",                            0x24, 0, 29, 0, 0 },
-{"Arbiter Room Neutral",        0x24, 0, 29, 0, 0 },
-{"Out02 Castle Harmondy Abandoned", 0x24, 0, 25, 0, 0 },
-{"Human Temple02",              0x24, 0x3AB, 23, 27, 0 },
-{"Player Castle Good",          0x24, 0, 25, 0, 0 },
-{"Player Castle Bad",           0x24, 0, 25, 0, 0}
-};
 
 #include "stru160.h"
 stru160 array_4EB8B8[66] =
@@ -2001,7 +1802,7 @@
 __int64 _5773B8_event_timer; // weak
 int dword_5773C0; // weak
 
-int dword_591080; // weak
+
 int dword_591084; // weak
 struct Actor *pDialogue_SpeakingActor;
 unsigned int uDialogueType;
@@ -2018,9 +1819,7 @@
 int dword_59117C_teleportx; // weak
 char byte_591180[600]; // idb
 struct NPCData *HouseNPCData[6];//array_5913D8
-int pDialogueNPCCount;
-struct Texture *pDialogueNPCPortraits[6];
-int uNumDialogueNPCPortraits; // weak
+
 struct Texture *pTexture_591428;
 struct Texture *pTexture_outside; // idb
 struct Texture *pTexture_Dialogue_Background;
@@ -2052,7 +1851,7 @@
 int bDialogueUI_InitializeActor_NPC_ID; // weak
 int dword_5C35C8; // weak
 char *p2DEventsTXT_Raw;
-int uHouse_ExitPic; // weak
+
 int dword_5C35D4; // weak
 char *aAMPMNames[2];
 char byte_5C45AF[777]; // weak
@@ -2261,7 +2060,7 @@
 int dword_723E84[777]; // weak
 int dword_7241C8; // weak
 struct unk_F7B60C stru_73C834; // struct @ MM7.exe::0073C834
-struct NPCStats *pNPCStats = nullptr;
+
 char *aNPCProfessionNames[59];
 char *pAwardsTXT_Raw;
 char *pScrollsTXT_Raw;
--- a/mm7_data.h	Mon Mar 11 03:37:48 2013 +0200
+++ b/mm7_data.h	Mon Mar 11 03:38:59 2013 +0200
@@ -1316,7 +1316,7 @@
 extern __int64 _5773B8_event_timer; // weak
 extern int dword_5773C0; // weak
 
-extern int dword_591080; // weak
+
 extern int dword_591084; // weak
 extern struct Actor *pDialogue_SpeakingActor;
 extern unsigned int uDialogueType;
@@ -1333,9 +1333,7 @@
 extern int dword_59117C_teleportx; // weak
 extern char byte_591180[600]; // idb
 extern struct NPCData *HouseNPCData[6];
-extern int pDialogueNPCCount;
-extern struct Texture *pDialogueNPCPortraits[6];
-extern int uNumDialogueNPCPortraits; // weak
+
 extern struct Texture *pTexture_591428;
 extern struct Texture *pTexture_outside; // idb
 extern struct Texture *pTexture_Dialogue_Background;
@@ -1367,7 +1365,7 @@
 extern int bDialogueUI_InitializeActor_NPC_ID; // weak
 extern int dword_5C35C8; // weak
 extern char *p2DEventsTXT_Raw;
-extern int uHouse_ExitPic; // weak
+
 extern int dword_5C35D4; // weak
 extern char *aAMPMNames[2];
 extern char byte_5C45AF[]; // weak
@@ -1577,7 +1575,7 @@
 extern int dword_723E80_award_related[]; // weak
 extern int dword_723E84[]; // weak
 extern int dword_7241C8; // weak
-extern struct NPCStats *pNPCStats;
+
 extern char *aNPCProfessionNames[59];
 extern char *pAwardsTXT_Raw;
 extern char *pScrollsTXT_Raw;
@@ -2300,7 +2298,7 @@
 void __cdecl sub_4B1A2D();
 void __stdcall RestAndHeal(__int64 uNumMinutes); // idb
 void __cdecl sub_4B1D27();
-void __fastcall HousePlaySomeSound(unsigned int uHouseID, int a2); // idb
+
 void __cdecl sub_4B1ECE();
 void __fastcall ClickNPCTopic(signed int uMessageParam);
 char *__thiscall _4B254D_SkillMasteryTeacher(int _this);
@@ -2318,21 +2316,7 @@
 void  _4B4224_UpdateNPCTopics(int _this);
 char __fastcall DrawTextAtStatusBar(const char *Str, int a5);
 int __fastcall sub_4B46F8(int a1);
-int __cdecl TrainingDialog();
-char *__cdecl JailDialog();
-void  MagicShopDialog();
-void  GuildDialog();
-int __cdecl sub_4B6478();
-bool __fastcall sub_4B68EA(int a1);
-void __cdecl TravelByTransport();
-void TempleDialog();
-void __cdecl TownHallDialog();
-void __cdecl BankDialog();
-void __cdecl TavernDialog();
 
-char *__cdecl WeaponShopDialog();
-POINT *__cdecl AlchemistDialog();
-void __cdecl ArmorShopDialog();
 signed int __fastcall sub_4BB756(signed int a1);
 const char *sub_4BBA85_bounties();
 void __cdecl sub_4BBCDD();
--- a/stru159.h	Mon Mar 11 03:37:48 2013 +0200
+++ b/stru159.h	Mon Mar 11 03:38:59 2013 +0200
@@ -14,4 +14,3 @@
   unsigned __int16 padding_e;
 };
 #pragma pack(pop)
-extern stru159 pAnimatedRooms[196];
\ No newline at end of file