Да HD и без него работает правильно.
Ну вот адрес основной функции (итерации основного цикла) диалога обмена армией: 0x5B0100
Как именно там орабатывается эта обводка - хз, надо исследовать... 
*********
signed int __thiscall A0_SwapMgr_Main_sub_5B0100(_SwapMgr_ *this, _EventMsg_ *DlgMsg)
{
    _SwapMgr_ *this_v2; // ebx@1
    _EventMsg_ *v3; // edi@1
    int v4; // ecx@1
    _Hero_ *v5; // esi@3
    _Hero_ *v6; // ebx@4
    _Hero_ *v7; // esi@10
    _Hero_ *v8; // eax@11
    int v9; // eax@16
    _Hero_ *v10; // esi@24
    _Hero_ *v11; // eax@25
    int v12; // eax@29
    int v13; // eax@31
    signed int v14; // ecx@31
    _Hero_ *v15; // ecx@34
    signed int v16; // edx@35
    _Hero_ *v17; // esi@37
    signed int v18; // eax@52
    _Hero_ *v19; // eax@61
    int v20; // esi@61
    int v21; // ST24_4@61
    char *v22; // edi@61
    int v23; // eax@61
    char v24; // al@63
    _Hero_ *v25; // ecx@63
    signed int v26; // edi@64
    _Hero_ *v27; // esi@67
    signed __int64 v28; // qax@67
    signed int v29; // ecx@69
    int v30; // edi@69
    char v31; // zf@71
    char v32; // cl@73
    unsigned int v33; // ecx@73
    void *v34; // edi@73
    int v35; // esi@73
    char v36; // al@73
    const void *v37; // esi@73
    _Hero_ *v38; // eax@79
    int v39; // esi@79
    char *v40; // edi@79
    char v41; // al@81
    _Hero_ *v42; // ecx@81
    signed int v43; // edi@82
    _Hero_ *v44; // esi@85
    signed int v45; // ecx@88
    int v46; // edi@88
    char v47; // zf@90
    unsigned int v48; // ecx@92
    char v49; // dl@92
    const void *v50; // esi@92
    int v51; // eax@109
    signed int result; // eax@110
    int v53; // [sp-20h] [bp-50h]@35
    int v54; // [sp-1Ch] [bp-4Ch]@35
    int v55; // [sp-18h] [bp-48h]@35
    int v56; // [sp-14h] [bp-44h]@35
    int v57; // [sp-10h] [bp-40h]@35
    char *v58; // [sp-10h] [bp-40h]@79
    int v59; // [sp-Ch] [bp-3Ch]@35
    int v60; // [sp-Ch] [bp-3Ch]@79
    int v61; // [sp-8h] [bp-38h]@35
    int v62; // [sp-8h] [bp-38h]@52
    int v63; // [sp-8h] [bp-38h]@79
    int v64; // [sp-4h] [bp-34h]@35
    char v65; // [sp-4h] [bp-34h]@52
    int v66; // [sp-4h] [bp-34h]@79
    signed int v67; // [sp+Ch] [bp-24h]@6
    int v68; // [sp+10h] [bp-20h]@6
    signed int v69; // [sp+14h] [bp-1Ch]@6
    signed int v70; // [sp+18h] [bp-18h]@6
    int v71; // [sp+1Ch] [bp-14h]@6
    float v72; // [sp+20h] [bp-10h]@67
    char *Str; // [sp+24h] [bp-Ch]@1
    int v74; // [sp+28h] [bp-8h]@1
    int v75; // [sp+2Ch] [bp-4h]@1
    v3 = DlgMsg;
    this_v2 = this;
    v74 = 0;
    v4 = DlgMsg->flags;
    LOBYTE(v75) = (DlgMsg->flags >> 9) & 1;
    LOBYTE(Str) = (v4 & 3) != 0;
    if ( sub_557E40(&A0_TurnTimer_stru_69D680) )
    {
      if ( A0_IsOnline_dword_69959C )
      {
        v5 = this_v2->hero[0];
        if ( v5->owner_id == A0_GameMgr_GetMyID_AsPlayer_sub_4CE6E0(A0_GameMgr_dword_699538) )
          v6 = this_v2->hero[1];
        else
          v6 = v5;
        v69 = 1065;
        v67 = -1;
        v70 = 20;
        v68 = 0;
        v71 = 0;
        A0_SomeSend_Net_Msg_sub_5549E0((_NetMsg_ *)&v67, v6->owner_id, 0);
      }
LABEL_117:
      v3->type = 16384;
      v3->subtype = 4;
      return 2;
    }
    if ( A0_IsOnline_dword_69959C
      && ((*(void (__stdcall **)(_DWORD, _DWORD))(**(_DWORD **)&this_v2->f58[8] + 4))(0, 0),
          *(_BYTE *)(*(_DWORD *)&this_v2->f58[8] + 12)) )
    {
      if ( this_v2->hero[0]->owner_id == A0_GameMgr_GetMyID_AsPlayer_sub_4CE6E0(A0_GameMgr_dword_699538) )
      {
        v7 = this_v2->hero[0];
        if ( v7->owner_id == A0_GameMgr_GetMyID_AsPlayer_sub_4CE6E0(A0_GameMgr_dword_699538) )
          v8 = this_v2->hero[1];
        else
          v8 = v7;
        v69 = 1065;
        v67 = -1;
        v70 = 20;
        v68 = 0;
        v71 = 0;
        A0_SomeSend_Net_Msg_sub_5549E0((_NetMsg_ *)&v67, v8->owner_id, 0);
      }
      v74 = 1;
    }
    else
    {
      if ( !v74 )
      {
        v9 = DlgMsg->type;
        if ( DlgMsg->type == 4 )
        {
          sub_602920(WndMgr_dword_6992D0, DlgMsg);
          v51 = DlgMsg->item_id;
          if ( v51 == WndMgr_dword_6992D0->field_3C )
            return 1;
          WndMgr_dword_6992D0->field_3C = v51;
          sub_5B0BC0((int)this_v2, DlgMsg->item_id);
        }
        else
        {
          if ( v9 == 32 )
          {
            if ( !(_BYTE)v75 )
            {
              A0_SwapMgr_SetLuckAndMorale_sub_5AE900(this_v2);
              sub_5B1200(this_v2);
              (*((void (__stdcall **)(_DWORD, _DWORD, _DWORD))this_v2->dlg->v_table + 5))(0, -65535, 65535);
              A0_WndMgr_FlipScreenArea_sub_603190((int)WndMgr_dword_6992D0, 0, 0, 800, 600);
            }
          }
          else
          {
            if ( v9 == 512 )
            {
              switch ( DlgMsg->subtype )
              {
                case 13:
                  if ( !(_BYTE)v75 )
                    sub_5B13E0((int)this_v2, (int)&v74, (int)DlgMsg, (int)&v74);
                  break;
                case 10:
                  if ( A0_IsOnline_dword_69959C )
                  {
                    if ( this_v2->f58[0] )
                    {
                      v10 = this_v2->hero[0];
                      if ( v10->owner_id == A0_GameMgr_GetMyID_AsPlayer_sub_4CE6E0(A0_GameMgr_dword_699538) )
                        v11 = this_v2->hero[1];
                      else
                        v11 = v10;
                      v69 = 1065;
                      v67 = -1;
                      v70 = 20;
                      v68 = 0;
                      v71 = 0;
                      A0_SomeSend_Net_Msg_sub_5549E0((_NetMsg_ *)&v67, v11->owner_id, 0);
                    }
                  }
                  v74 = 1;
                  break;
                case 12:
                case 14:
                  v12 = DlgMsg->item_id;
                  switch ( v12 )
                  {
                    case 200:
                    case 201:
                    case 202:
                    case 203:
                    case 204:
                    case 205:
                    case 206:
                    case 207:
                      if ( A0_SelectedArtifactNum_art698AD8.id != -1 )
                        break;
                      v14 = 0;
                      v13 = v12 - 200;
                      Str = 0;
                      goto LABEL_34;
                    case 208:
                    case 209:
                    case 210:
                    case 211:
                    case 212:
                    case 213:
                    case 214:
                    case 215:
                      if ( A0_SelectedArtifactNum_art698AD8.id != -1 )
                        break;
                      v14 = 1;
                      v13 = v12 - 208;
                      Str = (char *)1;
LABEL_34:
                      v15 = this_v2->hero[v14];
                      if ( v13 >= v15->second_skill_count )
                        break;
                      v16 = sub_4E2610(v15, v13);
                      v64 = 0;
                      v61 = -1;
                      v59 = 0;
                      v57 = -1;
                      v56 = 0;
                      v55 = -1;
                      strcpy(
                        A0_TextBuffer_unk_697428,
                        *((const char **)off_67DCF0 + this_v2->hero[(_DWORD)Str]->second_skill[v16] + 4 * v16));
                      v54 = this_v2->hero[(_DWORD)Str]->second_skill[v16] + 3 * v16 + 2;
                      v53 = 20;
                      goto LABEL_95;
                    case 1:                       // Показ героя
                      if ( A0_SelectedArtifactNum_art698AD8.id != -1 )
                        break;
                      v17 = this_v2->hero[0];
                      goto LABEL_38;
                    case 2:
                      if ( A0_SelectedArtifactNum_art698AD8.id == -1 )
                      {
                        v17 = this_v2->hero[1];
LABEL_38:
                        if ( v17->owner_id == A0_GameMgr_GetMyID_AsPlayer_sub_4CE6E0(A0_GameMgr_dword_699538) )
                        {
                          if ( this_v2->f58[1] )
                          {
                            A0_HeroWindow_Show_sub_4E1A70(v17->id, 0, 0);
                            (*((void (__stdcall **)(_DWORD, _DWORD, _DWORD))this_v2->dlg->v_table + 5))(0, -65535, 65535);
                            A0_WndMgr_FlipScreenArea_sub_603190((int)WndMgr_dword_6992D0, 0, 0, 800, 600);
                            A0_SwapMgr_SetLuckAndMorale_sub_5AE900(this_v2);
                            sub_5AFF80(this_v2);
                          }
                        }
                      }
                      break;
                    case 27:
                    case 28:
                    case 29:
                    case 30:
                    case 31:
                    case 32:
                    case 33:
                    case 34:
                    case 35:
                    case 36:
                    case 37:
                    case 38:
                    case 39:
                    case 40:
                    case 41:
                    case 42:
                    case 43:
                    case 44:
                    case 45:
                      sub_5AF920((int)this_v2, 0, v12 - 27, v75);
                      sub_5AFF80(this_v2);
                      break;
                    case 46:
                    case 47:
                    case 48:
                    case 49:
                    case 50:
                    case 51:
                    case 52:
                    case 53:
                    case 54:
                    case 55:
                    case 56:
                    case 57:
                    case 58:
                    case 59:
                    case 60:
                    case 61:
                    case 62:
                    case 63:
                    case 64:
                      sub_5AF920((int)this_v2, 1, v12 - 46, v75);
                      sub_5AFF80(this_v2);
                      break;
                    case 89:
                    case 90:
                    case 91:
                    case 92:
                    case 93:
                      sub_5AFD20(this_v2, 0, v12 - 89, v75);
                      sub_5AFF80(this_v2);
                      break;
                    case 94:
                    case 95:
                    case 96:
                    case 97:
                    case 98:
                      sub_5AFD20(this_v2, 1, v12 - 94, v75);
                      sub_5AFF80(this_v2);
                      break;
                    case 13:
                    case 14:
                    case 15:
                    case 16:
                    case 17:
                    case 18:
                    case 19:
                      if ( A0_SelectedArtifactNum_art698AD8.id == -1 )
                      {
                        A0_HeroExchange_Action_sub_5AF640((int)this_v2, 0, v12 - 13, (unsigned __int8)v75, (char)Str);
                        sub_5AFF80(this_v2);
                      }
                      break;
                    case 65:
                    case 66:
                    case 67:
                    case 68:
                    case 69:
                    case 70:
                    case 71:
                      if ( A0_SelectedArtifactNum_art698AD8.id == -1 )
                      {
                        A0_HeroExchange_Action_sub_5AF640((int)this_v2, 0, v12 - 65, (unsigned __int8)v75, (char)Str);
                        sub_5AFF80(this_v2);
                      }
                      break;
                    case 20:
                    case 21:
                    case 22:
                    case 23:
                    case 24:
                    case 25:
                    case 26:
                      if ( A0_SelectedArtifactNum_art698AD8.id != -1 )
                        break;
                      v65 = (char)Str;
                      v62 = (unsigned __int8)v75;
                      v18 = v12 - 20;
                      goto LABEL_55;
                    case 72:
                    case 73:
                    case 74:
                    case 75:
                    case 76:
                    case 77:
                    case 78:
                      if ( A0_SelectedArtifactNum_art698AD8.id == -1 )
                      {
                        v65 = (char)Str;
                        v62 = (unsigned __int8)v75;
                        v18 = v12 - 72;
LABEL_55:
                        A0_HeroExchange_Action_sub_5AF640((int)this_v2, 1, v18, v62, v65);
                        sub_5AFF80(this_v2);
                      }
                      break;
                    case 107:
                      if ( A0_SelectedArtifactNum_art698AD8.id == -1 )
                        sub_4F3930(this_v2->hero[0], (_BYTE)v75 != 0 ? 4 : 1);
                      break;
                    case 109:
                      if ( A0_SelectedArtifactNum_art698AD8.id == -1 )
                        A0_Hero_ViewLuckInfo_sub_4F3BD0(this_v2->hero[0], (_BYTE)v75 != 0 ? 4 : 1);
                      break;
                    case 111:
                      if ( A0_SelectedArtifactNum_art698AD8.id != -1 )
                        break;
                      v19 = this_v2->hero[0];
                      v20 = v19->level;
                      v21 = v19->expa;
                      v22 = (char *)A0_Txt_GENRLTXT_off_6A5DC4->lines_4dword28.data_dword4[3];
                      v23 = sub_4DA610(v20 + 1);
                      sprintf(A0_TextBuffer_unk_697428, v22, v20, v23, v21);
                      goto LABEL_94;
                    case 113:
                      if ( A0_SelectedArtifactNum_art698AD8.id != -1 )
                        break;
                      v25 = this_v2->hero[0];
                      v24 = v25->knowledge;
                      if ( v24 <= 99 )
                      {
                        v26 = v24;
                        if ( v24 <= 0 )
                          v26 = 1;
                      }
                      else
                      {
                        v26 = 99;
                      }
                      v27 = this_v2->hero[0];
                      LODWORD(v72) = A0_Txt_GENRLTXT_off_6A5DC4->lines_4dword28.data_dword4[206];
                      *(float *)&Str = (double)(10 * v26);
                      v28 = (signed __int64)(A0_Hero_GetIntelligence_Modif_sub_4E4B20(v25) * *(float *)&Str);
                      sprintf(A0_TextBuffer_unk_697428, LODWORD(v72), (int)v27->name, v27->spell_points, v28);
                      goto LABEL_94;
                    case 105:
                      if ( A0_SelectedArtifactNum_art698AD8.id != -1 )
                        break;
                      v30 = *((_DWORD *)A0_HeroSpecTable_off_679C80 + 10 * this_v2->hero[0]->id + 9);
                      v29 = -1;
                      do
                      {
                        if ( !v29 )
                          break;
                        v31 = *(_BYTE *)v30++ == 0;
                        --v29;
                      }
                      while ( !v31 );
                      v33 = ~v29;
                      v36 = v33;
                      v37 = (const void *)(v30 - v33);
                      v33 >>= 2;
                      memcpy(A0_TextBuffer_unk_697428, v37, 4 * v33);
                      v35 = (int)((char *)v37 + 4 * v33);
                      v34 = &A0_TextBuffer_unk_697428[4 * v33];
                      v32 = v36;
                      goto LABEL_93;
                    case 108:
                      if ( A0_SelectedArtifactNum_art698AD8.id == -1 )
                        sub_4F3930(this_v2->hero[1], (_BYTE)v75 != 0 ? 4 : 1);
                      break;
                    case 110:
                      if ( A0_SelectedArtifactNum_art698AD8.id == -1 )
                        A0_Hero_ViewLuckInfo_sub_4F3BD0(this_v2->hero[1], (_BYTE)v75 != 0 ? 4 : 1);
                      break;
                    case 112:
                      if ( A0_SelectedArtifactNum_art698AD8.id != -1 )
                        break;
                      v38 = this_v2->hero[1];
                      v39 = v38->level;
                      v66 = v38->expa;
                      v40 = (char *)A0_Txt_GENRLTXT_off_6A5DC4->lines_4dword28.data_dword4[3];
                      v63 = sub_4DA610(v39 + 1);
                      v60 = v39;
                      v58 = v40;
                      goto LABEL_86;
                    case 114:
                      if ( A0_SelectedArtifactNum_art698AD8.id == -1 )
                      {
                        v42 = this_v2->hero[1];
                        v41 = v42->knowledge;
                        if ( v41 <= 99 )
                        {
                          v43 = v41;
                          if ( v41 <= 0 )
                            v43 = 1;
                        }
                        else
                        {
                          v43 = 99;
                        }
                        v44 = this_v2->hero[1];
                        Str = (char *)A0_Txt_GENRLTXT_off_6A5DC4->lines_4dword28.data_dword4[206];
                        v72 = (double)(10 * v43);
                        v66 = (signed __int64)(A0_Hero_GetIntelligence_Modif_sub_4E4B20(v42) * v72);
                        v63 = v44->spell_points;
                        v60 = (int)v44->name;
                        v58 = Str;
LABEL_86:
                        sprintf(A0_TextBuffer_unk_697428, v58, v60, v63, v66);
                        A0_MsgBox_sub_4F6C00(
                          A0_TextBuffer_unk_697428,
                          (_BYTE)v75 != 0 ? 4 : 1,
                          -1,
                          (char *)0xFFFFFFFF,
                          -1,
                          0,
                          -1,
                          0,
                          -1,
                          0,
                          -1,
                          0);
                        v3 = DlgMsg;
                      }
                      break;
                    case 106:
                      if ( A0_SelectedArtifactNum_art698AD8.id == -1 )
                      {
                        v45 = -1;
                        v46 = *((_DWORD *)A0_HeroSpecTable_off_679C80 + 10 * this_v2->hero[1]->id + 9);
                        do
                        {
                          if ( !v45 )
                            break;
                          v47 = *(_BYTE *)v46++ == 0;
                          --v45;
                        }
                        while ( !v47 );
                        v48 = ~v45;
                        v49 = v48;
                        v50 = (const void *)(v46 - v48);
                        v48 >>= 2;
                        memcpy(A0_TextBuffer_unk_697428, v50, 4 * v48);
                        v35 = (int)((char *)v50 + 4 * v48);
                        v34 = &A0_TextBuffer_unk_697428[4 * v48];
                        v32 = v49;
LABEL_93:
                        memcpy(v34, (const void *)v35, v32 & 3);
LABEL_94:
                        v64 = 0;
                        v61 = -1;
                        v59 = 0;
                        v57 = -1;
                        v56 = 0;
                        v55 = -1;
                        v54 = 0;
                        v53 = -1;
LABEL_95:
                        A0_MsgBox_sub_4F6C00(
                          A0_TextBuffer_unk_697428,
                          (_BYTE)v75 != 0 ? 4 : 1,
                          -1,
                          (char *)0xFFFFFFFF,
                          v53,
                          v54,
                          v55,
                          v56,
                          v57,
                          v59,
                          v61,
    &nb