Да 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