changeset 1431:4d13549db029

UIMapBook_sub continue
author Ritor1
date Fri, 02 Aug 2013 17:30:23 +0600
parents 71a2cf416478
children a6d966e85611 6b1c8c41c83f
files UI/Books/UIMapBook.cpp
diffstat 1 files changed, 439 insertions(+), 525 deletions(-) [+]
line wrap: on
line diff
--- a/UI/Books/UIMapBook.cpp	Fri Aug 02 13:48:57 2013 +0600
+++ b/UI/Books/UIMapBook.cpp	Fri Aug 02 17:30:23 2013 +0600
@@ -208,544 +208,460 @@
   return BeaconID;
 }
 
-
 //----- (00413980) --------------------------------------------------------
 void BookUI_Map_Draw()
-    { 
-    int v6; // eax@31
-    unsigned int map_id; // eax@35
-    Texture *buttnTxtr; // [sp-4h] [bp-DCh]@3
-    char party_coord[120]; // [sp+Ch] [bp-CCh]@37
-    GUIWindow map_window; // [sp+84h] [bp-54h]@35
-    unsigned int textrX, textrY;
+{
+  unsigned int map_id; // eax@35
+  Texture *buttnTxtr; // [sp-4h] [bp-DCh]@3
+  char party_coord[120]; // [sp+Ch] [bp-CCh]@37
+  GUIWindow map_window; // [sp+84h] [bp-54h]@35
+  unsigned int textrX, textrY;
 
-    pRenderer->DrawTextureIndexed(pViewport->uViewportTL_X, pViewport->uViewportTL_Y, pSpellBookPagesTextr_12);
-    if ( BtnUp_flag || viewparams->field_2C / 128 >= 12 )
-        {
-        buttnTxtr = pTex_tab_an_6a__zoom_off;
-        textrY = pViewport->uViewportTL_Y + 2;
-        textrX = pViewport->uViewportTL_X + 408;
-        }
-    else
-        {
-        buttnTxtr = pTex_tab_an_6b__zoom_on;
-        textrY = pViewport->uViewportTL_Y + 1;
-        textrX = pViewport->uViewportTL_X + 398;
-        }
-    pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
-    if ( BtnDown_flag || viewparams->field_2C / 128 <= 3 )
-        {
-        buttnTxtr = pTex_tab_an_7a__zoot_off;
-        textrY = pViewport->uViewportTL_Y + 38;
-        textrX = pViewport->uViewportTL_X + 408;
-        }
-    else
-        {
-        buttnTxtr = pTex_tab_an_7b__zoot_on;
-        textrY = pViewport->uViewportTL_Y + 38;
-        textrX = pViewport->uViewportTL_X + 398;
-        }
-    pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
-    if ( Book_PageBtn3_flag )
-        {
-        buttnTxtr = pTexture_506390;
-        textrY = pViewport->uViewportTL_Y + 113;
-        textrX = pViewport->uViewportTL_X + 408;
-        }
-    else
-        {
-        buttnTxtr = pTexture_506394;
-        textrY = pViewport->uViewportTL_Y + 113;
-        textrX = pViewport->uViewportTL_X + 398;
-        }
-    pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
-    if ( Book_PageBtn4_flag )
-        {
-        buttnTxtr = pTexture_506388;
-        textrY = pViewport->uViewportTL_X + 150;
-        textrX = pViewport->uViewportTL_Y + 408;
-        }
-    else
-        {
-        buttnTxtr = pTexture_50638C;
-        textrY = pViewport->uViewportTL_X + 150;
-        textrX = pViewport->uViewportTL_Y + 399;
-        }
-    pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
-    if ( Book_PageBtn5_flag )
-        {
-        buttnTxtr = pTexture_506380;
-        textrY = pViewport->uViewportTL_Y + 188;
-        textrX = pViewport->uViewportTL_X + 408;
-        }
-    else
-        {
-        buttnTxtr = pTexture_506384;
-        textrY = pViewport->uViewportTL_Y + 188;
-        textrX = pViewport->uViewportTL_X + 397;
-        }
-    pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
-    if ( Book_PageBtn6_flag )
-        {
-        buttnTxtr = pTexture_506378;
-        textrY = pViewport->uViewportTL_Y + 226;
-        textrX = pViewport->uViewportTL_X + 408;
-        }
-    else
-        {
-        buttnTxtr = pTexture_50637C;
-        textrY = pViewport->uViewportTL_Y + 226;
-        textrX = pViewport->uViewportTL_X + 397;
-        }
-    pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
-    if ( BtnDown_flag )
-        viewparams->CenterOnParty2();
-    if ( BtnUp_flag )
-        viewparams->CenterOnParty();
-    if ( Book_PageBtn3_flag )
-        viewparams->_443219();
-    if ( Book_PageBtn4_flag )
-        viewparams->_443231();
-    if ( Book_PageBtn5_flag )
-        viewparams->_44323D();
-    if ( Book_PageBtn6_flag )
-        viewparams->_443225();
+  pRenderer->DrawTextureIndexed(pViewport->uViewportTL_X, pViewport->uViewportTL_Y, pSpellBookPagesTextr_12);
+  if ( BtnUp_flag || viewparams->field_2C / 128 >= 12 )
+  {
+    buttnTxtr = pTex_tab_an_6a__zoom_off;
+    textrY = pViewport->uViewportTL_Y + 2;
+    textrX = pViewport->uViewportTL_X + 408;
+  }
+  else
+  {
+    buttnTxtr = pTex_tab_an_6b__zoom_on;
+    textrY = pViewport->uViewportTL_Y + 1;
+    textrX = pViewport->uViewportTL_X + 398;
+  }
+  pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
+  if ( BtnDown_flag || viewparams->field_2C / 128 <= 3 )
+  {
+    buttnTxtr = pTex_tab_an_7a__zoot_off;
+    textrY = pViewport->uViewportTL_Y + 38;
+    textrX = pViewport->uViewportTL_X + 408;
+  }
+  else
+  {
+    buttnTxtr = pTex_tab_an_7b__zoot_on;
+    textrY = pViewport->uViewportTL_Y + 38;
+    textrX = pViewport->uViewportTL_X + 398;
+  }
+  pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
+  if ( Book_PageBtn3_flag )
+  {
+    buttnTxtr = pTexture_506390;
+    textrY = pViewport->uViewportTL_Y + 113;
+    textrX = pViewport->uViewportTL_X + 408;
+  }
+  else
+  {
+    buttnTxtr = pTexture_506394;
+    textrY = pViewport->uViewportTL_Y + 113;
+    textrX = pViewport->uViewportTL_X + 398;
+  }
+  pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
+  if ( Book_PageBtn4_flag )
+  {
+    buttnTxtr = pTexture_506388;
+    textrY = pViewport->uViewportTL_X + 150;
+    textrX = pViewport->uViewportTL_Y + 408;
+  }
+  else
+  {
+    buttnTxtr = pTexture_50638C;
+    textrY = pViewport->uViewportTL_X + 150;
+    textrX = pViewport->uViewportTL_Y + 399;
+  }
+  pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
+  if ( Book_PageBtn5_flag )
+  {
+    buttnTxtr = pTexture_506380;
+    textrY = pViewport->uViewportTL_Y + 188;
+    textrX = pViewport->uViewportTL_X + 408;
+  }
+  else
+  {
+    buttnTxtr = pTexture_506384;
+    textrY = pViewport->uViewportTL_Y + 188;
+    textrX = pViewport->uViewportTL_X + 397;
+  }
+  pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
+  if ( Book_PageBtn6_flag )
+  {
+    buttnTxtr = pTexture_506378;
+    textrY = pViewport->uViewportTL_Y + 226;
+    textrX = pViewport->uViewportTL_X + 408;
+  }
+  else
+  {
+    buttnTxtr = pTexture_50637C;
+    textrY = pViewport->uViewportTL_Y + 226;
+    textrX = pViewport->uViewportTL_X + 397;
+  }
+  pRenderer->DrawTextureTransparent(textrX, textrY, buttnTxtr);
+  if ( BtnDown_flag )
+    viewparams->CenterOnParty2();
+  if ( BtnUp_flag )
+    viewparams->CenterOnParty();
+  if ( Book_PageBtn3_flag )
+    viewparams->_443219();
+  if ( Book_PageBtn4_flag )
+    viewparams->_443231();
+  if ( Book_PageBtn5_flag )
+    viewparams->_44323D();
+  if ( Book_PageBtn6_flag )
+    viewparams->_443225();
 
-    if ( BtnUp_flag | BtnDown_flag | Book_PageBtn3_flag | Book_PageBtn4_flag | Book_PageBtn5_flag | Book_PageBtn6_flag )
-        pAudioPlayer->PlaySound(SOUND_Button2, 0, 0, -1, 0, 0, 0, 0);
-    BtnUp_flag = 0;
-    BtnDown_flag = 0;
-    Book_PageBtn6_flag = 0;
-    Book_PageBtn5_flag = 0;
-    Book_PageBtn4_flag = 0;
-    Book_PageBtn3_flag = 0;
-    DrawBook_Map_sub(97, 49, 361, 313, 0);
-    pRenderer->DrawTextureTransparent(75, 22, pTexture_mapbordr);
-    map_window.uFrameWidth = game_viewport_width;
-    map_window.uFrameHeight = game_viewport_height;
-    map_window.uFrameX = game_viewport_x;
-    map_window.uFrameY = game_viewport_y;
-    map_window.uFrameZ = game_viewport_z;
-    map_window.uFrameW = game_viewport_w;
-    map_id = pMapStats->GetMapInfo(pCurrentMapName.data());
-    if ( map_id )
-        map_window.DrawTitleText(pBook2Font, -14, 12, ui_book_map_title_color, pMapStats->pInfos[map_id].pName, 3);
+  if ( BtnUp_flag | BtnDown_flag | Book_PageBtn3_flag | Book_PageBtn4_flag | Book_PageBtn5_flag | Book_PageBtn6_flag )
+    pAudioPlayer->PlaySound(SOUND_Button2, 0, 0, -1, 0, 0, 0, 0);
+  BtnUp_flag = 0;
+  BtnDown_flag = 0;
+  Book_PageBtn6_flag = 0;
+  Book_PageBtn5_flag = 0;
+  Book_PageBtn4_flag = 0;
+  Book_PageBtn3_flag = 0;
+  DrawBook_Map_sub(97, 49, 361, 313, 0);
+  pRenderer->DrawTextureTransparent(75, 22, pTexture_mapbordr);
+  map_window.uFrameWidth = game_viewport_width;
+  map_window.uFrameHeight = game_viewport_height;
+  map_window.uFrameX = game_viewport_x;
+  map_window.uFrameY = game_viewport_y;
+  map_window.uFrameZ = game_viewport_z;
+  map_window.uFrameW = game_viewport_w;
+  map_id = pMapStats->GetMapInfo(pCurrentMapName.data());
+  if ( map_id )
+    map_window.DrawTitleText(pBook2Font, -14, 12, ui_book_map_title_color, pMapStats->pInfos[map_id].pName, 3);
 
-    map_window.uFrameX = 0;
-    sprintf(party_coord, pGlobalTXT_LocalizationStrings[659], pParty->vPosition.x, pParty->vPosition.y); //"x: %d  y: %d"
-    map_window.DrawTitleText(pFontComic, 0, 320, ui_book_map_coordinates_color, party_coord, 0);
-    }
+  map_window.uFrameX = 0;
+  sprintf(party_coord, pGlobalTXT_LocalizationStrings[659], pParty->vPosition.x, pParty->vPosition.y); //"x: %d  y: %d"
+  map_window.DrawTitleText(pFontComic, 0, 320, ui_book_map_coordinates_color, party_coord, 0);
+}
 
 //----- (00442955) --------------------------------------------------------
 void DrawBook_Map_sub( unsigned int tl_x, unsigned int tl_y, unsigned int br_x, int br_y, int _48074 )
+{
+  //unsigned int v11; // edx@11
+  //__int16 v12; // cx@12
+  //signed int v13; // eax@15
+  //int v14; // eax@16
+  int v20; // eax@16
+  signed int v21; // esi@18
+  int v22; // ecx@21
+  BLVMapOutline *v23; // ecx@21
+  Vec3_short_ *v24; // edx@21
+  Vec3_short_ *v25; // eax@21
+  int v26; // ecx@21
+  unsigned __int16 *v27; // edi@21
+  int v28; // edx@21
+  int v29; // eax@21
+  double v30; // st7@23
+  signed __int64 v31; // qax@23
+  unsigned short *v32; // edx@23
+  int textr_width; // esi@23
+  signed int v34; // eax@23
+  signed int v35; // ecx@23
+  int v36; // esi@27
+  int v37; // ecx@27
+  int v38; // edx@31
+  unsigned int v39; // eax@33
+  short *v40; // esi@33
+  short *v41; // edi@33
+  unsigned __int8 v42; // cf@33
+  unsigned int v43; // ecx@33
+  short *v44; // edi@33
+  short *v45; // esi@33
+  int v46; // ecx@33
+  signed int v47; // esi@38
+  signed int v48; // ecx@38
+  int v49; // eax@38
+  signed int v50; // edx@55
+  unsigned int v51; // ecx@55
+  int result; // eax@72
+  int v53; // eax@75
+  int v54; // esi@75
+  int v55; // eax@75
+  __int16 v56; // si@85
+  double v57; // st7@85
+  int v58; // ebx@85
+  signed __int64 v59; // qax@85
+  signed int v60; // edi@85
+  signed __int64 v61; // qax@85
+  signed int v62; // ebx@85
+  signed int v63; // esi@85
+  int v64; // eax@87
+  unsigned int v65; // ebx@95
+  unsigned short *v66; // edx@95
+  unsigned __int16 *v67; // esi@96
+  int v68; // edi@98
+  unsigned __int16 v69; // cx@99
+  unsigned int v70; // [sp-10h] [bp-48074h]@80
+  unsigned int v71; // [sp-Ch] [bp-48070h]@80
+  unsigned int v72; // [sp-8h] [bp-4806Ch]@80
+  signed int v73; // [sp-4h] [bp-48068h]@59
+  unsigned __int16 v74; // [sp-4h] [bp-48068h]@79
+  unsigned short map_texture_16[147456]; // [sp+Ch] [bp-48058h]@23
+  int v76; // [sp+4800Ch] [bp-58h]@23
+  unsigned __int16 *v77; // [sp+48010h] [bp-54h]@27
+  unsigned __int16 *pPalette_16; // [sp+48014h] [bp-50h]@23
+  int v81; // [sp+48020h] [bp-44h]@23
+  unsigned __int16* render16_data;
+  unsigned char* texture8_data;
+  unsigned char* curr_line;
+  int scale_increment;
+  int scaled_posX;
+  int scaled_posY;
+  int stepX_r;
+  int stepY_r;
+  unsigned int teal; // [sp+48028h] [bp-3Ch]@8
+  int pCenterY; // [sp+4802Ch] [bp-38h]@1
+  int screenCenter_X; // [sp+48030h] [bp-34h]@1
+  int pCenterX; // [sp+48034h] [bp-30h]@1
+  int v87; // [sp+48038h] [bp-2Ch]@16
+  unsigned int v88; // [sp+4803Ch] [bp-28h]@16
+  int black; // [sp+48040h] [bp-24h]@8
+  int screenCenterY; // [sp+48044h] [bp-20h]@1
+  unsigned int i; // [sp+48048h] [bp-1Ch]@9
+  unsigned int screenHeight; // [sp+4804Ch] [bp-18h]@16
+  unsigned __int16 *v93; // [sp+48050h] [bp-14h]@16
+  signed int screenWidth; // [sp+48054h] [bp-10h]@8
+  unsigned int v95; // [sp+48058h] [bp-Ch]@16
+  int v96; // [sp+4805Ch] [bp-8h]@10
+  const void *v97; // [sp+48060h] [bp-4h]@16
+  unsigned short *a4a; // [sp+4806Ch] [bp+8h]@85
+  int a5a; // [sp+48070h] [bp+Ch]@86
+
+  screenCenter_X = (signed int)(tl_x + br_x) / 2;
+  screenCenterY = (signed int)(tl_y + br_y) / 2;
+  pRenderer->SetRasterClipRect(tl_x, tl_y, br_x, br_y);
+  pCenterX = viewparams->sViewCenterX;
+  pCenterY = viewparams->sViewCenterY;
+  if ( viewparams->field_2C != 384 )
+  {
+    if ( viewparams->field_2C == 768 )
     {
-    int v5; // ebx@1
-    int v6; // edi@1
-    BLVMapOutlines *v7; // eax@8
-    unsigned __int8 v8; // zf@8
-    unsigned __int8 v9; // sf@8
-    int v10; // esi@10
-    unsigned int v11; // edx@11
-    __int16 v12; // cx@12
-    signed int v13; // eax@15
-    int v14; // eax@16
-    Vec3_short_ *v15; // ecx@16
-    int v16; // edx@16
-    int v17; // ecx@16
-    Vec3_short_ *v18; // eax@16
-    int v19; // ecx@16
-    int v20; // eax@16
-    signed int v21; // esi@18
-    int v22; // ecx@21
-    BLVMapOutline *v23; // ecx@21
-    Vec3_short_ *v24; // edx@21
-    Vec3_short_ *v25; // eax@21
-    int v26; // ecx@21
-    unsigned __int16 *v27; // edi@21
-    int v28; // edx@21
-    int v29; // eax@21
-    double v30; // st7@23
-    signed __int64 v31; // qax@23
-    unsigned short *v32; // edx@23
-    int textr_width; // esi@23
-    signed int v34; // eax@23
-    signed int v35; // ecx@23
-    int v36; // esi@27
-    int v37; // ecx@27
-    int v38; // edx@31
-    unsigned int v39; // eax@33
-    short *v40; // esi@33
-    short *v41; // edi@33
-    unsigned __int8 v42; // cf@33
-    unsigned int v43; // ecx@33
-    short *v44; // edi@33
-    short *v45; // esi@33
-    int v46; // ecx@33
-    signed int v47; // esi@38
-    signed int v48; // ecx@38
-    int v49; // eax@38
-    signed int v50; // edx@55
-    unsigned int v51; // ecx@55
-    int result; // eax@72
-    int v53; // eax@75
-    int v54; // esi@75
-    int v55; // eax@75
-    __int16 v56; // si@85
-    double v57; // st7@85
-    int v58; // ebx@85
-    signed __int64 v59; // qax@85
-    signed int v60; // edi@85
-    signed __int64 v61; // qax@85
-    signed int v62; // ebx@85
-    signed int v63; // esi@85
-    int v64; // eax@87
-    unsigned int v65; // ebx@95
-    unsigned short *v66; // edx@95
-    unsigned __int16 *v67; // esi@96
-    int v68; // edi@98
-    unsigned __int16 v69; // cx@99
-    unsigned int v70; // [sp-10h] [bp-48074h]@80
-    unsigned int v71; // [sp-Ch] [bp-48070h]@80
-    unsigned int v72; // [sp-8h] [bp-4806Ch]@80
-    signed int v73; // [sp-4h] [bp-48068h]@59
-    unsigned __int16 v74; // [sp-4h] [bp-48068h]@79
-    unsigned short map_texture_16[147456]; // [sp+Ch] [bp-48058h]@23
-    int v76; // [sp+4800Ch] [bp-58h]@23
-    unsigned __int16 *v77; // [sp+48010h] [bp-54h]@27
-    unsigned __int16 *pPalette_16; // [sp+48014h] [bp-50h]@23
-    unsigned int surfPitch; // [sp+48018h] [bp-4Ch]@1
+      if ( uCurrentlyLoadedLevelType == LEVEL_Indoor)
+        viewparams->field_2C = 680;
+    }
+  }
+  else
+  {
+    viewparams->sViewCenterX = viewparams->indoor_center_x;
+    pCenterX = viewparams->indoor_center_x;
+    pCenterY = viewparams->indoor_center_y;
+    if ( uCurrentlyLoadedLevelType == LEVEL_Indoor)
+      viewparams->field_2C = viewparams->field_2C - 34;
+  }
+  if ( uCurrentlyLoadedLevelType != LEVEL_Indoor)
+  {
+    screenWidth = br_x - tl_x + 1;
+    screenHeight = br_y - tl_y + 1;
+    render16_data = &pRenderer->pTargetSurface[tl_x + tl_y * pRenderer->uTargetSurfacePitch];
+    texture8_data = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pLevelOfDetail0_prolly_alpha_mask;
+    pPalette_16 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pPalette16;
+    scale_increment = (1 << (pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2 + 16)) / viewparams->field_2C;
 
-    int v81; // [sp+48020h] [bp-44h]@23
-    unsigned __int16* render16_data;
-    unsigned char* texture8_data;
-    unsigned char* curr_line;
-    int scale_increment;
-    int scaled_posX;
-    int scaled_posY;
-    int stepX_r;
-    int stepY_r;
+    v30 = (double)(1 << (16 - pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2));
+
+    teal = (unsigned int)(signed __int64)((double)(viewparams->sViewCenterX - 22528 / (viewparams->field_2C / 384) + 32768) / v30) << 16;
+    //  v97 = (const void *)((unsigned int)(signed __int64)((double)(v6 - 22528 / (v5 / 384) + 32768) / v30) << 16);
 
+    //   v32 = map_texture_16;
+    textr_width = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uTextureWidth;
+    stepY_r =            (int)(signed __int64)((double)(- pCenterY - 22528 / (viewparams->field_2C / 384)+ 32768) / v30) << 16;
+    //   v81 =   (signed __int16)(signed __int64)((double)(v6 - 22528 / (v5 / 384) + 32768) / v30);
+    black = (signed __int16)(signed __int64)((double)(viewparams->sViewCenterX - 22528 / (viewparams->field_2C / 384) + 32768) / v30);
 
-    unsigned int teal; // [sp+48028h] [bp-3Ch]@8
-    int v84; // [sp+4802Ch] [bp-38h]@1
-    int screenCenter_X; // [sp+48030h] [bp-34h]@1
-    int v86; // [sp+48034h] [bp-30h]@1
-    int v87; // [sp+48038h] [bp-2Ch]@16
-    unsigned int v88; // [sp+4803Ch] [bp-28h]@16
-    int black; // [sp+48040h] [bp-24h]@8
-    int screenCenterY; // [sp+48044h] [bp-20h]@1
-    unsigned int i; // [sp+48048h] [bp-1Ch]@9
-    unsigned int screenHeight; // [sp+4804Ch] [bp-18h]@16
-    unsigned __int16 *v93; // [sp+48050h] [bp-14h]@16
-    signed int screenWidth; // [sp+48054h] [bp-10h]@8
-    unsigned int v95; // [sp+48058h] [bp-Ch]@16
-    int v96; // [sp+4805Ch] [bp-8h]@10
-    const void *v97; // [sp+48060h] [bp-4h]@16
-    unsigned short *a4a; // [sp+4806Ch] [bp+8h]@85
-    int a5a; // [sp+48070h] [bp+Ch]@86
-
-    tl_x = tl_x;
-    tl_y = tl_y;
-    screenCenter_X = (signed int)(tl_x + br_x) >> 1;
-    screenCenterY = (signed int)(tl_y + br_y) >> 1;
-    surfPitch = pRenderer->uTargetSurfacePitch;
-    pRenderer->SetRasterClipRect(tl_x, tl_y, br_x, br_y);
-    v5 = viewparams->field_2C;
-    v6 = viewparams->sViewCenterX;
-    v86 = viewparams->sViewCenterX;
-    v84 = viewparams->sViewCenterY;
-    if ( viewparams->field_2C != 384 )
+    //  v76 = textr_width;
+    scaled_posY = stepY_r >> 16;
+    //nearest neiborhood scaling
+    if ( texture8_data)  
+    {
+      for( uint i = 0; i < screenHeight; ++i )
+      {
+        curr_line=&texture8_data[scaled_posY*textr_width];
+        stepX_r=teal;
+        for( uint j = 0; j < screenWidth; ++j )
         {
-        if ( viewparams->field_2C == 768 )
-            {
-            if ( uCurrentlyLoadedLevelType == LEVEL_Indoor)
-                v5 = 680;
-            }
+          scaled_posX=stepX_r>>16;
+          map_texture_16[i*screenWidth+j]=pPalette_16[*(curr_line+scaled_posX)];
+          stepX_r+=scale_increment;      
         }
-    else
-        {
-        v6 = viewparams->indoor_center_x;
-        v86 = viewparams->indoor_center_x;
-        v84 = viewparams->indoor_center_y;
-        if ( uCurrentlyLoadedLevelType == LEVEL_Indoor)
-            v5 = viewparams->field_2C - 34;
-        }
-    if ( uCurrentlyLoadedLevelType != LEVEL_Indoor)
+        stepY_r+=scale_increment;
+        scaled_posY=stepY_r>>16;
+      }
+    }
+    //move visible square to render
+    for( uint i = 0; i < screenHeight; ++i )
+    {
+      if ( screenWidth > 0 )
+        memcpy((void*)&render16_data[pRenderer->uTargetSurfacePitch * i],(void*)&map_texture_16[i*screenWidth], screenWidth*2);
+    }
+  }
+  else
+  {
+    black = TargetColor(0, 0, 0);
+    teal = TargetColor(0, 0xFFu, 0xFFu);
+    uNumBlueFacesInBLVMinimap = 0;
+    if ( pIndoor->pMapOutlines->uNumOutlines )
+    {
+     for ( uint i = 0; i < pIndoor->pMapOutlines->uNumOutlines; ++i )
+      {
+        if ( !(BYTE1(pIndoor->pFaces[pIndoor->pMapOutlines->pOutlines[i].uFace1ID].uAttributes) & 0x20 
+           || (BYTE1(pIndoor->pFaces[pIndoor->pMapOutlines->pOutlines[i].uFace2ID].uAttributes) & 0x20) ))
         {
-        screenWidth = br_x - tl_x + 1;
-        screenHeight = br_y - tl_y + 1;
-        render16_data = &pRenderer->pTargetSurface[tl_x + tl_y * surfPitch];
-        texture8_data = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pLevelOfDetail0_prolly_alpha_mask;
-        pPalette_16 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].pPalette16;
-        scale_increment = (1 << (pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2 + 16)) / v5;
-
-        v30 = (double)(1 << (16 - pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2));
-
-
-        teal =               (unsigned int)(signed __int64)((double)(v6 - 22528 / (v5 / 384) + 32768) / v30) << 16;
-        //  v97 = (const void *)((unsigned int)(signed __int64)((double)(v6 - 22528 / (v5 / 384) + 32768) / v30) << 16);
-
-        //   v32 = map_texture_16;
-        textr_width = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uTextureWidth;
-        stepY_r =            (int)(signed __int64)((double)(- v84 - 22528 / (v5 / 384)+ 32768) / v30) << 16;
-        //   v81 =   (signed __int16)(signed __int64)((double)(v6 - 22528 / (v5 / 384) + 32768) / v30);
-        black = (signed __int16)(signed __int64)((double)(v6 - 22528 / (v5 / 384) + 32768) / v30);
-
-        //  v76 = textr_width;
-        scaled_posY = stepY_r >> 16;
-        //nearest neiborhood scaling
-        if ( texture8_data)  
+          if ( !(pIndoor->pMapOutlines->pOutlines[i].uFlags & 1) )
+          {
+            if ( !(!(pIndoor->pFaces[pIndoor->pMapOutlines->pOutlines[i].uFace1ID].uAttributes & 0x80)
+                && !(pIndoor->pFaces[pIndoor->pMapOutlines->pOutlines[i].uFace2ID].uAttributes & 0x80u) ))
             {
-            for(uint i=0; i<screenHeight;++i)
-                {
-                curr_line=&texture8_data[scaled_posY*textr_width];
-                stepX_r=teal;
-                for(uint j=0; j<screenWidth;++j)
-                    {
-                    scaled_posX=stepX_r>>16;
-                    map_texture_16[i*screenWidth+j]=pPalette_16[*(curr_line+scaled_posX)];
-                    stepX_r+=scale_increment;      
-                    }
-                stepY_r+=scale_increment;
-                scaled_posY=stepY_r>>16;
-                }
+              pIndoor->pMapOutlines->pOutlines[i].uFlags = pIndoor->pMapOutlines->pOutlines[i].uFlags | 1;
+              pIndoor->_visible_outlines[i >> 3] |= 1 << (7 - i % 8);
             }
-        //move visible square to render
-        for(uint i=0; i<screenHeight;++i)
-            {
-            if ( screenWidth > 0 )
-                {
-                memcpy((void*)&render16_data[surfPitch*i],(void*)&map_texture_16[i*screenWidth], screenWidth*2);
-                }
-            }
+          }
+          if ( (!(pIndoor->pMapOutlines->pOutlines[i].uFlags & 1) 
+            && !(!(pIndoor->pFaces[pIndoor->pMapOutlines->pOutlines[i].uFace1ID].uAttributes & 0x80)
+            && !(pIndoor->pFaces[pIndoor->pMapOutlines->pOutlines[i].uFace2ID].uAttributes & 0x80u) ))
+            || pIndoor->pMapOutlines->pOutlines[i].uFlags & 1)
+          {
+            v93 = (unsigned __int16 *)(pIndoor->pVertices[pIndoor->pMapOutlines->pOutlines[i].uVertex1ID].x - viewparams->sViewCenterX);
+            screenHeight = pIndoor->pVertices[pIndoor->pMapOutlines->pOutlines[i].uVertex1ID].y - pCenterY;
+            v20 = pIndoor->pVertices[pIndoor->pMapOutlines->pOutlines[i].uVertex2ID].y - pCenterY;
+            v95 = pIndoor->pVertices[pIndoor->pMapOutlines->pOutlines[i].uVertex2ID].x - viewparams->sViewCenterX;
+            v97 = (const void *)v20;
+            v88 = (unsigned __int64)((pIndoor->pVertices[pIndoor->pMapOutlines->pOutlines[i].uVertex1ID].x - viewparams->sViewCenterX) * (signed __int64)viewparams->field_2C) >> 16;
+            v87 = (unsigned __int64)((signed int)screenHeight * (signed __int64)viewparams->field_2C) >> 16;
+            v93 = (unsigned __int16 *)((unsigned __int64)((pIndoor->pVertices[pIndoor->pMapOutlines->pOutlines[i].uVertex2ID].x - viewparams->sViewCenterX) * (signed __int64)viewparams->field_2C) >> 16);
+            screenHeight = (unsigned __int64)(v20 * (signed __int64)viewparams->field_2C) >> 16;
+            pRenderer->RasterLine2D(screenCenter_X + v88, screenCenterY - v87,
+            screenCenter_X + ((unsigned __int64)((pIndoor->pVertices[pIndoor->pMapOutlines->pOutlines[i].uVertex2ID].x - viewparams->sViewCenterX) * (signed __int64)viewparams->field_2C) >> 16), screenCenterY - screenHeight, black);
+          }
         }
-    else
-        {
-        black = TargetColor(0, 0, 0);
-        teal = TargetColor(0, 0xFFu, 0xFFu);
-        v7 = pIndoor->pMapOutlines;
-        uNumBlueFacesInBLVMinimap = 0;
-        v8 = pIndoor->pMapOutlines->uNumOutlines == 0;
-        v9 = pIndoor->pMapOutlines->uNumOutlines < 0;
-        screenWidth = 0;
-        if ( !(v9 | v8) )
-            {
-            i = 0;
-            do
+      }
+    }
+    v21 = 0;
+    if ( (signed int)uNumBlueFacesInBLVMinimap > 0 )
+    {
+      while ( 1 )
+      {
+        v22 = pBlueFacesInBLVMinimapIDs[v21];
+        v87 = viewparams->field_2C;
+        v23 = &pIndoor->pMapOutlines->pOutlines[v22];
+        v24 = &pIndoor->pVertices[v23->uVertex1ID];
+        v25 = &pIndoor->pVertices[v23->uVertex2ID];
+        v26 = v25->x;
+        v27 = (unsigned __int16 *)(v24->x - pCenterX);
+        v28 = v24->y - pCenterY;
+        v29 = v25->y - pCenterY;
+        v93 = v27;
+        screenHeight = v28;
+        v97 = (const void *)v29;
+        v87 = (unsigned __int64)((signed int)v27 * (signed __int64)viewparams->field_2C) >> 16;
+        v88 = (unsigned __int64)(v28 * (signed __int64)viewparams->field_2C) >> 16;
+        uint i = (unsigned __int64)((v26 - pCenterX) * (signed __int64)viewparams->field_2C) >> 16;
+        v95 = (unsigned __int64)(v29 * (signed __int64)viewparams->field_2C) >> 16;
+        pRenderer->RasterLine2D(screenCenter_X + ((unsigned __int64)((signed int)v27 * (signed __int64)viewparams->field_2C) >> 16),
+        screenCenterY - v88, screenCenter_X + ((unsigned __int64)((v26 - pCenterX) * (signed __int64)viewparams->field_2C) >> 16), screenCenterY - v95, teal);
+        ++v21;
+        if ( v21 >= (signed int)uNumBlueFacesInBLVMinimap )
+          break;
+      }
+      viewparams->sViewCenterX = pCenterX;
+    }
+  }
+  v47 = ((unsigned __int64)((pParty->vPosition.x - viewparams->sViewCenterX) * (signed __int64)viewparams->field_2C) >> 16) + screenCenter_X - 3;
+  v81 = pParty->vPosition.y - pCenterY;
+  v97 = (const void *)((unsigned __int64)((pParty->vPosition.y - pCenterY) * (signed __int64)viewparams->field_2C) >> 16);
+  v48 = 1;
+  v49 = screenCenterY - (int)v97 - 3;
+  if ( v47 >= (signed int)tl_x )
+  {
+    if ( v47 > (signed int)br_x )
+    {
+      if ( (signed int)(((unsigned __int64)((pParty->vPosition.x - viewparams->sViewCenterX) * (signed __int64)viewparams->field_2C) >> 16) + screenCenter_X - 6) > (signed int)br_x )
+        v48 = 0;
+      v47 = br_x;
+    }
+  }
+  else
+  {
+    if ( (signed int)(((unsigned __int64)((pParty->vPosition.x - viewparams->sViewCenterX) * (signed __int64)viewparams->field_2C) >> 16) + screenCenter_X) < (signed int)tl_x )
+      v48 = 0;
+    v47 = tl_x;
+  }
+  if ( v49 >= (signed int)tl_y )
+  {
+    if ( v49 > br_y )
+    {
+      if ( screenCenterY - (signed int)v97 - 6 > br_y )
+        v48 = 0;
+      v49 = br_y;
+    }
+  }
+  else
+  {
+    if ( screenCenterY - (signed int)v97 < (signed int)tl_y )
+      v48 = 0;
+    v49 = tl_y;
+  }
+  if ( v48 == 1 )
+  {
+    v51 = pParty->sRotationY & stru_5C6E00->uDoublePiMask;
+    if ( (signed int)v51 <= 1920 )
+      v50 = 7;
+    if ( (signed int)v51 < 1664 )
+      v50 = 6;
+    if ( (signed int)v51 <= 1408 )
+      v50 = 5;
+    if ( (signed int)v51 < 1152 )
+      v50 = 4;
+    if ( (signed int)v51 <= 896 )
+      v50 = 3;
+    if ( (signed int)v51 < 640 )
+      v50 = 2;
+    if ( (signed int)v51 <= 384 )
+      v50 = 1;
+    if ( (signed int)v51 < 128 )
+      v50 = 0;
+    pRenderer->DrawTransparentRedShade(v47, v49, pIcons_LOD->GetTexture(pTextureIDs_pMapDirs[v50]));
+  }
+  result = TargetColor(0xFFu, 0xFFu, 0xFFu);
+  v95 = 0;
+  pCenterX = result;
+  if ( (signed int)uNumLevelDecorations > 0 )
+  {
+    screenWidth = (unsigned int)&pLevelDecorations[0].vPosition;
+    do
+    {
+      if ( *(char *)(screenWidth - 2) & 8 )
+      {
+        v53 = *(int *)(screenWidth + 4) - pCenterY;
+        v93 = (unsigned __int16 *)(*(int *)screenWidth - viewparams->sViewCenterX);
+              screenHeight = v53;
+              v54 = ((unsigned __int64)((signed int)v93 * (signed __int64)viewparams->field_2C) >> 16) + screenCenter_X;
+              v97 = (const void *)((unsigned __int64)(v53 * (signed __int64)viewparams->field_2C) >> 16);
+              v55 = screenCenterY - (int)v97;
+              if ( v54 >= pRenderer->raster_clip_x )
+              {
+                if ( v54 <= pRenderer->raster_clip_z && v55 >= pRenderer->raster_clip_y && v55 <= pRenderer->raster_clip_w )
                 {
-                v10 = (int)((char *)v7 + i + 4);
-                v96 = pIndoor->pFaces[*(short *)((char *)v7 + i + 8)].uAttributes;
-                if ( !(BYTE1(v96) & 0x20 || (v11 = pIndoor->pFaces[*(short *)((char *)v7 + i + 10)].uAttributes, BYTE1(v11) & 0x20) ))
-                    {
-                    v12 = *(short *)((char *)v7 + i + 14);
-                    if ( !(v12 & 1) )
-                        {
-                        if ( !(!(v96 & 0x80) && (v11 & 0x80u) == 0 ))
-                            {
-                            v96 = (signed int)screenWidth >> 3;
-                            v13 = screenWidth;
-                            *(short *)(v10 + 10) = v12 | 1;
-                            pIndoor->_visible_outlines[v96] |= 1 << (7 - v13 % 8);
-                            }
-                        }
-                    if ( (!(v12 & 1) && !(!(v96 & 0x80) && (v11 & 0x80u) == 0 )) || v12 & 1)
-                        {
-                        v14 = *(short *)v10;
-                        v88 = v5;
-                        v15 = &pIndoor->pVertices[v14];
-                        v16 = v15->x;
-                        v17 = v15->y - v84;
-                        v93 = (unsigned __int16 *)(v16 - v6);
-                        screenHeight = v17;
-                        v18 = &pIndoor->pVertices[*(short *)(v10 + 2)];
-                        v19 = v18->x;
-                        v20 = v18->y - v84;
-                        v95 = v19 - v6;
-                        v97 = (const void *)v20;
-                        v88 = (unsigned __int64)((v16 - v6) * (signed __int64)v5) >> 16;
-                        v87 = (unsigned __int64)((signed int)screenHeight * (signed __int64)v5) >> 16;
-                        v93 = (unsigned __int16 *)((unsigned __int64)((v19 - v6) * (signed __int64)v5) >> 16);
-                        screenHeight = (unsigned __int64)(v20 * (signed __int64)v5) >> 16;
-                        pRenderer->RasterLine2D(
-                            screenCenter_X + v88,
-                            screenCenterY - v87,
-                            screenCenter_X + ((unsigned __int64)((v19 - v6) * (signed __int64)v5) >> 16),
-                            screenCenterY - screenHeight,
-                            black);
-                        v7 = pIndoor->pMapOutlines;
-                        }
-                    }
-                ++screenWidth;
-                i += 12;
+                  if ( viewparams->field_2C > 512 )
+                  {
+                    v96 = v55 + 1;
+                    black = v55 - 1;
+                    pRenderer->RasterLine2D(v54 - 1, v55 - 1, v54 - 1, v55 + 1, pCenterX);
+                    pRenderer->RasterLine2D(v54, black, v54, v96, pCenterX);
+                    ++v54;
+                    v72 = v96;
+                    v71 = v54;
+                    v70 = black;
+                  }
+                  else
+                  {
+                    v72 = screenCenterY - (int)v97;
+                    v71 = ((unsigned __int64)((signed int)v93 * (signed __int64)viewparams->field_2C) >> 16) + screenCenter_X;
+                    v70 = screenCenterY - (int)v97;
+                  }
+                  pRenderer->RasterLine2D(v54, v70, v71, v72, pCenterX);
                 }
-                while ( screenWidth < (signed int)v7->uNumOutlines );
-            }
-        v21 = 0;
-        if ( (signed int)uNumBlueFacesInBLVMinimap > 0 )
-            {
-            while ( 1 )
-                {
-                v22 = pBlueFacesInBLVMinimapIDs[v21];
-                v87 = v5;
-                v23 = &v7->pOutlines[v22];
-                v24 = &pIndoor->pVertices[v23->uVertex1ID];
-                v25 = &pIndoor->pVertices[v23->uVertex2ID];
-                v26 = v25->x;
-                v27 = (unsigned __int16 *)(v24->x - v86);
-                v28 = v24->y - v84;
-                v29 = v25->y - v84;
-                v93 = v27;
-                screenHeight = v28;
-                v97 = (const void *)v29;
-                v87 = (unsigned __int64)((signed int)v27 * (signed __int64)v5) >> 16;
-                v88 = (unsigned __int64)(v28 * (signed __int64)v5) >> 16;
-                i = (unsigned __int64)((v26 - v86) * (signed __int64)v5) >> 16;
-                v95 = (unsigned __int64)(v29 * (signed __int64)v5) >> 16;
-                pRenderer->RasterLine2D(
-                    screenCenter_X + ((unsigned __int64)((signed int)v27 * (signed __int64)v5) >> 16),
-                    screenCenterY - v88,
-                    screenCenter_X + ((unsigned __int64)((v26 - v86) * (signed __int64)v5) >> 16),
-                    screenCenterY - v95,
-                    teal);
-                ++v21;
-                if ( v21 >= (signed int)uNumBlueFacesInBLVMinimap )
-                    break;
-                v7 = pIndoor->pMapOutlines;
-                }
-            v6 = v86;
-            }
-        }
-    v47 = ((unsigned __int64)((pParty->vPosition.x - v6) * (signed __int64)v5) >> 16) + screenCenter_X - 3;
-    v81 = pParty->vPosition.y - v84;
-    v97 = (const void *)((unsigned __int64)((pParty->vPosition.y - v84) * (signed __int64)v5) >> 16);
-    v48 = 1;
-    v49 = screenCenterY - (int)v97 - 3;
-    if ( v47 >= (signed int)tl_x )
-        {
-        if ( v47 > (signed int)br_x )
-            {
-            if ( (signed int)(((unsigned __int64)((pParty->vPosition.x - v6) * (signed __int64)v5) >> 16) + screenCenter_X - 6) > (signed int)br_x )
-                v48 = 0;
-            v47 = br_x;
+              }
             }
-        }
-    else
-        {
-        if ( (signed int)(((unsigned __int64)((pParty->vPosition.x - v6) * (signed __int64)v5) >> 16) + screenCenter_X) < (signed int)tl_x )
-            v48 = 0;
-        v47 = tl_x;
-        }
-    if ( v49 >= (signed int)tl_y )
-        {
-        if ( v49 > br_y )
-            {
-            if ( screenCenterY - (signed int)v97 - 6 > br_y )
-                v48 = 0;
-            v49 = br_y;
-            }
-        }
-    else
-        {
-        if ( screenCenterY - (signed int)v97 < (signed int)tl_y )
-            v48 = 0;
-        v49 = tl_y;
-        }
-    if ( v48 == 1 )
-        {
-        v50 = 0;
-        v51 = pParty->sRotationY & stru_5C6E00->uDoublePiMask;
-        if ( (signed int)(pParty->sRotationY & stru_5C6E00->uDoublePiMask) >= 128 )
-            {
-            if ( (signed int)v51 > 384 )
-                {
-                if ( (signed int)v51 >= 640 )
-                    {
-                    if ( (signed int)v51 > 896 )
-                        {
-                        if ( (signed int)v51 >= 1152 )
-                            {
-                            if ( (signed int)v51 > 1408 )
-                                {
-                                if ( (signed int)v51 >= 1664 )
-                                    {
-                                    if ( (signed int)v51 <= 1920 )
-                                        v73 = 7;
-                                    }
-                                else
-                                    {
-                                    v73 = 6;
-                                    }
-                                }
-                            else
-                                {
-                                v73 = 5;
-                                }
-                            }
-                        else
-                            {
-                            v73 = 4;
-                            }
-                        }
-                    else
-                        {
-                        v73 = 3;
-                        }
-                    }
-                else
-                    {
-                    v73 = 2;
-                    }
-                if( (signed int)v51 <=1920)
-                    v50 = v73;
-                }
-            else
-                v50 = 1;
-            }
-        pRenderer->DrawTransparentRedShade(v47, v49, pIcons_LOD->GetTexture(pTextureIDs_pMapDirs[v50]));
-        }
-    result = TargetColor(0xFFu, 0xFFu, 0xFFu);
-    v95 = 0;
-    v86 = result;
-    if ( (signed int)uNumLevelDecorations > 0 )
-        {
-        screenWidth = (unsigned int)&pLevelDecorations[0].vPosition;
-        do
-            {
-            if ( *(char *)(screenWidth - 2) & 8 )
-                {
-                v53 = *(int *)(screenWidth + 4) - v84;
-                v93 = (unsigned __int16 *)(*(int *)screenWidth - v6);
-                screenHeight = v53;
-                v54 = ((unsigned __int64)((signed int)v93 * (signed __int64)v5) >> 16) + screenCenter_X;
-                v97 = (const void *)((unsigned __int64)(v53 * (signed __int64)v5) >> 16);
-                v55 = screenCenterY - (int)v97;
-                if ( v54 >= pRenderer->raster_clip_x )
-                    {
-                    if ( v54 <= pRenderer->raster_clip_z && v55 >= pRenderer->raster_clip_y && v55 <= pRenderer->raster_clip_w )
-                        {
-                        v74 = v86;
-                        if ( v5 > 512 )
-                            {
-                            v96 = v55 + 1;
-                            black = v55 - 1;
-                            pRenderer->RasterLine2D(v54 - 1, v55 - 1, v54 - 1, v55 + 1, v86);
-                            pRenderer->RasterLine2D(v54, black, v54, v96, v86);
-                            ++v54;
-                            v74 = v86;
-                            v72 = v96;
-                            v71 = v54;
-                            v70 = black;
-                            }
-                        else
-                            {
-                            v72 = screenCenterY - (int)v97;
-                            v71 = ((unsigned __int64)((signed int)v93 * (signed __int64)v5) >> 16) + screenCenter_X;
-                            v70 = screenCenterY - (int)v97;
-                            }
-                        pRenderer->RasterLine2D(v54, v70, v71, v72, v74);
-                        }
-                    }
-                }
             ++v95;
             result = v95;
             screenWidth += 32;
@@ -756,15 +672,15 @@
         {
         screenCenterY = br_x - tl_x + 1;
         v95 = br_y - tl_y + 1;
-        v77 = &pRenderer->pTargetSurface[tl_x + tl_y * surfPitch];
+        v77 = &pRenderer->pTargetSurface[tl_x + tl_y * pRenderer->uTargetSurfacePitch];
         v56 = pIcons_LOD->pTextures[viewparams->uTextureID_LocationMap].uWidthLn2;
-        black = (1 << (v56 + 16)) / v5;
+        black = (1 << (v56 + 16)) / viewparams->field_2C;
         v57 = (double)(1 << (16 - v56));
-        v58 = 22528 / (v5 / 384);
-        v59 = (signed __int64)((double)(v6 - v58 + 32768) / v57);
+        v58 = 22528 / (viewparams->field_2C / 384);
+        v59 = (signed __int64)((double)(viewparams->sViewCenterX - v58 + 32768) / v57);
         v60 = (int)v59 << 16;
         v97 = (const void *)((int)v59 << 16);
-        v61 = (signed __int64)((double)(32768 - v58 - v84) / v57);
+        v61 = (signed __int64)((double)(32768 - v58 - pCenterY) / v57);
         pPalette_16 = (unsigned __int16 *)(v60 >> 16);
         v62 = (int)v61 << 16;
         teal = v60 >> 16;
@@ -813,7 +729,7 @@
         if ( (signed int)v95 > 0 )
             {
             v67 = v77;
-            result = 2 * (surfPitch - screenCenterY);
+            result = 2 * (pRenderer->uTargetSurfacePitch - screenCenterY);
             do
                 {
                 if ( screenCenterY > 0 )
@@ -837,5 +753,3 @@
             }
         }
     }
-
-