To review: On pages
2 &
3 of this thread, RobboLito's/Houdini's main() are posted. Since
Houdini is RobboLito with modifications, the functions called in main() are the same, the code in those functions are the same, and the call order are the same. As previously stated, the difference with casual observation is of course due to modified/shuffled routines, compiler, and optimization flags.
Houdini's binary was re-opened with different decompiling option and the addresses (not content) have changed.
Houdini's main():
Code: Select all
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // eax@1
DWORD v4; // ecx@1
struct _SYSTEM_INFO SystemInfo; // [sp+4h] [bp-24h]@1
sub_428B5A("Houdini w32 1_CPU\nbuild %d-%.2d-%.2d \nby Robert Houdart\n", 2010);
v3 = sub_4287BF();
fflush((FILE *)(v3 + 32));
GetSystemInfo(&SystemInfo);
v4 = SystemInfo.dwNumberOfProcessors;
dword_926878 = SystemInfo.dwNumberOfProcessors;
if ( (signed __int32)SystemInfo.dwNumberOfProcessors > 1 )
v4 = 1;
dword_43CED0 = v4;
dword_4840C8 = 0;
if ( (signed int)v4 > 0 )
{
dword_4840C8 = (int)_aligned_malloc(0x200000u, 0x40u);
memset((void *)dword_4840C8, 0, 0x200000u);
}
sub_40F0D0(128);
memset32(&word_8FB368, 134219776, 0x200u);
sub_409310();
sub_421F80();
_cfltcvt_init();
sub_428340();
sub_40F760();
sub_4240A0();
sub_4274B0(1);
while ( 1 )
sub_426470();
}
RobboLito's main():
Code: Select all
int main()
{
show_version();
pawn_zobrist_initialization();
initialization_zobrist(128);
history_reset();
initialization_capture();
pile_initialization();
pawn_initialization();
initialization_value();
static_initialization();
game_new(TRUE);
while( 1 )
input_console();
return 0;
}
On the previous pages, decompilation of static_initialization() was not posted so here it is.
For comparison, here is RobboLito's static table initialization dis-assembled:
Code: Select all
signed int __cdecl sub_422920()
{
_UNKNOWN *v0; // ecx@24
signed int result; // eax@24
signed int v2; // esi@1
signed int v3; // edi@1
int v4; // ebx@2
signed int v5; // edi@3
int v6; // ebx@4
signed int v7; // edi@5
int v8; // ecx@6
signed int v9; // eax@6
int v10; // ebp@7
int v11; // ebx@9
int v12; // eax@11
signed int v13; // edi@12
int v14; // ecx@13
signed int v15; // eax@13
int v16; // ebp@14
int v17; // ebx@16
int v18; // eax@18
signed int v19; // eax@19
_UNKNOWN *v20; // ecx@19
int v21; // ebp@20
int v22; // ebp@20
int v23; // ebp@20
int v24; // ebp@20
int v25; // edx@20
int v26; // edx@20
int v27; // ebp@20
int v28; // ebp@20
signed int v29; // edi@21
int v30; // ebx@22
int v31; // edi@23
int v32; // [sp+Ch] [bp-40h]@20
int v33; // [sp+10h] [bp-3Ch]@20
int v34; // [sp+14h] [bp-38h]@20
int v35; // [sp+18h] [bp-34h]@20
int v36; // [sp+1Ch] [bp-30h]@20
int v37; // [sp+20h] [bp-2Ch]@20
int v38; // [sp+24h] [bp-28h]@20
int v39; // [sp+28h] [bp-24h]@20
int v40; // [sp+2Ch] [bp-20h]@6
int v41; // [sp+30h] [bp-1Ch]@6
int v42; // [sp+34h] [bp-18h]@6
int v43; // [sp+38h] [bp-14h]@6
int v44; // [sp+3Ch] [bp-10h]@6
int v45; // [sp+40h] [bp-Ch]@6
int v46; // [sp+44h] [bp-8h]@6
int v47; // [sp+48h] [bp-4h]@6
v2 = 0;
v3 = 0;
do
{
v4 = sub_4222A0(v3) << 16;
dword_781900[v3] = sub_422340(v3) + v4;
++v3;
}
while ( v3 <= 63 );
v5 = 0;
do
{
v6 = sub_4223E0(v5) << 16;
dword_781A00[v5] = sub_422480(v5) + v6;
++v5;
}
while ( v5 <= 63 );
v7 = 0;
do
{
v44 = -2;
v45 = -2;
v46 = -3;
v47 = -3;
v8 = v7 & 7;
v9 = v7 >> 3;
v40 = 3;
v41 = 2;
v42 = 0;
v43 = 0;
if ( (v7 & 7) - (v7 >> 3) < 0 )
v10 = v9 - v8;
else
v10 = (v7 & 7) - (v7 >> 3);
v11 = v8 + v9 - 7;
if ( v11 < 0 )
v11 = 7 - v8 - v9;
v12 = sub_422560(v7++);
dword_781BFC[v7] = *(&v40 + v10) + *(&v40 + v11) + (v12 << 16);
}
while ( v7 <= 63 );
v13 = 0;
do
{
v44 = -2;
v45 = -2;
v46 = -3;
v47 = -3;
v14 = v13 & 7;
v15 = v13 >> 3;
v40 = 3;
v41 = 2;
v42 = 0;
v43 = 0;
if ( (v13 & 7) - (v13 >> 3) < 0 )
v16 = v15 - v14;
else
v16 = (v13 & 7) - (v13 >> 3);
v17 = v14 + v15 - 7;
if ( v17 < 0 )
v17 = 7 - v14 - v15;
v18 = sub_422560(v13++);
dword_781CFC[v13] = *(&v40 + v16) + *(&v40 + v17) + (v18 << 16);
}
while ( v13 <= 63 );
v19 = 2;
v20 = &unk_781E04;
do
{
v32 = -4;
v39 = -4;
v44 = 1;
v45 = 1;
v46 = 1;
v33 = 0;
v34 = 4;
v35 = 8;
v36 = 8;
v37 = 4;
v38 = 0;
v21 = *(&v32 + (((_BYTE)v19 - 2) & 7)) << 16;
v40 = 0;
v41 = 0;
v42 = 0;
v43 = 0;
v47 = -2;
v22 = *(&v40 + ((v19 - 2) >> 3)) + v21;
v32 = -4;
v39 = -4;
v44 = 1;
v45 = 1;
v46 = 1;
*((_DWORD *)v20 - 1) = v22;
v33 = 0;
v34 = 4;
v35 = 8;
v36 = 8;
v37 = 4;
v38 = 0;
v23 = *(&v32 + (((_BYTE)v19 - 1) & 7)) << 16;
v40 = 0;
v41 = 0;
v42 = 0;
v43 = 0;
v47 = -2;
v24 = *(&v40 + ((v19 - 1) >> 3)) + v23;
v32 = -4;
v39 = -4;
v44 = 1;
v45 = 1;
v46 = 1;
*(_DWORD *)v20 = v24;
v33 = 0;
v34 = 4;
v35 = 8;
v36 = 8;
v37 = 4;
v38 = 0;
v25 = *(&v32 + (v19 & 7)) << 16;
v40 = 0;
v41 = 0;
v42 = 0;
v43 = 0;
v47 = -2;
v26 = *(&v40 + (v19 >> 3)) + v25;
v33 = 0;
*((_DWORD *)v20 + 1) = v26;
v32 = -4;
v39 = -4;
v44 = 1;
v45 = 1;
v46 = 1;
v34 = 4;
v35 = 8;
v36 = 8;
v37 = 4;
v38 = 0;
v27 = *(&v32 + (((_BYTE)v19 + 1) & 7)) << 16;
v40 = 0;
v41 = 0;
v42 = 0;
v43 = 0;
v47 = -2;
v28 = *(&v40 + ((v19 + 1) >> 3)) + v27;
v19 += 4;
*((_DWORD *)v20 + 2) = v28;
v20 = (char *)v20 + 16;
}
while ( v19 - 2 <= 63 );
v29 = 0;
do
{
v30 = sub_422620(v20) << 16;
dword_781F00[v29] = sub_4226E0(v29) + v30;
++v29;
}
while ( v29 <= 63 );
do
{
v31 = sub_4227A0(v2) << 16;
dword_781B00[v2++] = sub_422830() + v31;
}
while ( v2 <= 63 );
v0 = &unk_782200;
result = (signed int)&unk_781AFC;
do
{
*((_DWORD *)v0 - 64) = -*(_DWORD *)(result - 256);
*(_DWORD *)v0 = -*(_DWORD *)result;
*((_DWORD *)v0 + 128) = -*(_DWORD *)(result + 512);
*((_DWORD *)v0 + 192) = -*(_DWORD *)(result + 768);
*((_DWORD *)v0 + 256) = -*(_DWORD *)(result + 1024);
*((_DWORD *)v0 + 320) = -*(_DWORD *)(result + 1280);
*((_DWORD *)v0 + 64) = -*(_DWORD *)(result + 256);
result -= 4;
v0 = (char *)v0 + 4;
}
while ( result >= (signed int)dword_781A00 );
return result;
}
Houdini's static table initialization:
Code: Select all
int __cdecl sub_4240A0()
{
int v0; // ebp@1
signed int v1; // esi@1
signed int v2; // ebx@1
int v3; // edi@3
int v4; // edi@3
int v5; // edi@3
int v6; // edi@3
int v7; // ebp@3
int v8; // eax@3
int v9; // eax@3
int v10; // eax@3
int v11; // eax@3
int v12; // eax@3
int v13; // eax@3
int v14; // eax@3
int v15; // edi@3
int v16; // edi@3
int v17; // edi@3
int result; // eax@3
int v19; // edi@3
int v20; // [sp+10h] [bp-4Ch]@1
int v21; // [sp+14h] [bp-48h]@3
int v22; // [sp+18h] [bp-44h]@3
int v23; // [sp+1Ch] [bp-40h]@3
int v24; // [sp+20h] [bp-3Ch]@3
int v25; // [sp+24h] [bp-38h]@3
int v26; // [sp+28h] [bp-34h]@3
int v27; // [sp+2Ch] [bp-30h]@3
int v28; // [sp+30h] [bp-2Ch]@3
int v29; // [sp+34h] [bp-28h]@3
int v30; // [sp+38h] [bp-24h]@3
int v31; // [sp+3Ch] [bp-20h]@3
int v32; // [sp+40h] [bp-1Ch]@3
int v33; // [sp+44h] [bp-18h]@3
int v34; // [sp+48h] [bp-14h]@3
int v35; // [sp+4Ch] [bp-10h]@3
int v36; // [sp+50h] [bp-Ch]@3
int v37; // [sp+54h] [bp-8h]@3
unsigned int v38; // [sp+58h] [bp-4h]@1
v38 = (unsigned int)&v20 ^ __security_cookie;
v0 = 0;
v1 = 0;
v2 = (signed int)&unk_932A8C;
while ( 1 )
{
v3 = sub_423970(v1) << 16;
v4 = 2 * (sub_423A30(v1) + v3);
dword_932090[v1] = v4;
*(_DWORD *)(v2 - 256) = -v4;
v5 = sub_423AF0(v1) << 16;
v6 = 2 * (sub_423BB0(v1) + v5);
dword_932190[v1] = v6;
*(_DWORD *)v2 = -v6;
v24 = v0;
v25 = v0;
v26 = -2;
v27 = -2;
v22 = 3;
v23 = 2;
v28 = -3;
v29 = -3;
v7 = v1 & 7;
v21 = sub_423CB0(v1) << 16;
v8 = abs(v7 - (v1 >> 3));
v20 = v8;
v9 = *(&v22 + v8) + *(&v22 + abs((v1 >> 3) + v7 - 7));
v22 = 3;
v23 = 2;
v10 = 2 * (v21 + v9);
dword_932390[v1] = v10;
*(_DWORD *)(v2 + 512) = -v10;
v24 = 0;
v25 = 0;
v26 = -2;
v27 = -2;
v28 = -3;
v29 = -3;
v11 = abs(v7 - (v1 >> 3));
v20 = v11;
v12 = 2 * (v21 + *(&v22 + v11) + *(&v22 + abs((v1 >> 3) + v7 - 7)));
dword_932490[v1] = v12;
*(_DWORD *)(v2 + 768) = -v12;
v23 = 0;
v28 = 0;
v30 = 0;
v31 = 0;
v32 = 0;
v33 = 0;
v34 = 1;
v35 = 1;
v36 = 1;
v24 = 4;
v25 = 8;
v26 = 8;
v27 = 4;
v22 = -4;
v29 = -4;
v13 = *(&v22 + v7) << 16;
v37 = -2;
v14 = 2 * (*(&v30 + (v1 >> 3)) + v13);
dword_932590[v1] = v14;
*(_DWORD *)(v2 + 1024) = -v14;
v15 = sub_423D70(v1) << 16;
v16 = 2 * (sub_423E40(v1) + v15);
dword_932690[v1] = v16;
*(_DWORD *)(v2 + 1280) = -v16;
v17 = sub_423F00(v1) << 16;
result = sub_423FB0(v1);
v19 = 2 * (result + v17);
dword_932290[v1] = v19;
*(_DWORD *)(v2 + 256) = -v19;
v2 -= 4;
++v1;
if ( v2 < (signed int)&unk_932990 )
break;
v0 = 0;
}
return result;
}
Bishop ending, Rook opening/ending are in the above de-compiled routine for reasons that become apparent when compared to the others, at least to programmers who these posts are for anyways...
RobboLito's Bishop ending static table, (static.c):
Code: Select all
static int endgame_bishop( int qu )
{
int V[8] =
{
3, 2, 0, 0, -2, -2, -3, -3
};
int tr = RANK(qu), co = FILE(qu);
int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
return V[d] + V[e];
}
RobboLito's Rook opening static table, (static.c):
Code: Select all
static int opening_rook( int qu )
{
int C[8] =
{
-4, 0, 4, 8, 8, 4, 0, -4
};
return C[FILE(qu)];
}
RobboLito's Rook ending static table, (static.c):
Code: Select all
static int endgame_rook( int qu )
{
int T[8] =
{
0, 0, 0, 0, 1, 1, 1, -2
};
return T[RANK(qu)];
}
Houdini's Pawn opening static table:
Code: Select all
int __cdecl sub_423970(signed int a1)
{
signed int v1; // ecx@1
int result; // eax@3
int v3; // [sp+0h] [bp-44h]@1
int v4; // [sp+4h] [bp-40h]@1
int v5; // [sp+8h] [bp-3Ch]@1
int v6; // [sp+Ch] [bp-38h]@1
int v7; // [sp+10h] [bp-34h]@1
int v8; // [sp+14h] [bp-30h]@1
int v9; // [sp+18h] [bp-2Ch]@1
int v10; // [sp+1Ch] [bp-28h]@1
int v11; // [sp+20h] [bp-24h]@1
int v12; // [sp+24h] [bp-20h]@1
int v13; // [sp+28h] [bp-1Ch]@1
int v14; // [sp+2Ch] [bp-18h]@1
int v15; // [sp+30h] [bp-14h]@1
int v16; // [sp+34h] [bp-10h]@1
int v17; // [sp+38h] [bp-Ch]@1
int v18; // [sp+3Ch] [bp-8h]@1
unsigned int v19; // [sp+40h] [bp-4h]@1
v19 = (unsigned int)&v3 ^ __security_cookie;
v5 = -2;
v8 = -2;
v13 = -2;
v6 = 5;
v7 = 5;
v1 = a1 >> 3;
v3 = -20;
v4 = -8;
v9 = -8;
v10 = -20;
v11 = 0;
v12 = -3;
v14 = -1;
v15 = 1;
v16 = 2;
v17 = 3;
v18 = 0;
if ( a1 >> 3 && v1 != 7 )
result = *(&v11 + v1) + *(&v3 + (a1 & 7));
else
result = 0;
return result;
}
RobboLito's, (static.c):
Code: Select all
static int opening_pawn( int qu )
{
int C[8] =
{
-20, -8, -2, 5, 5, -2, -8, -20
};
int T[8] =
{
0, -3, -2, -1, 1, 2, 3, 0
};
int co = FILE(qu), tr = RANK(qu);
if( tr == T1 || tr == T8 )
return 0;
return C[co] + T[tr];
}
Houdini's Pawn ending static table:
Code: Select all
int __cdecl sub_423A30(signed int a1)
{
signed int v1; // ecx@1
int result; // eax@3
int v3; // [sp+0h] [bp-44h]@1
int v4; // [sp+4h] [bp-40h]@1
int v5; // [sp+8h] [bp-3Ch]@1
int v6; // [sp+Ch] [bp-38h]@1
int v7; // [sp+10h] [bp-34h]@1
int v8; // [sp+14h] [bp-30h]@1
int v9; // [sp+18h] [bp-2Ch]@1
int v10; // [sp+1Ch] [bp-28h]@1
int v11; // [sp+20h] [bp-24h]@1
int v12; // [sp+24h] [bp-20h]@1
int v13; // [sp+28h] [bp-1Ch]@1
int v14; // [sp+2Ch] [bp-18h]@1
int v15; // [sp+30h] [bp-14h]@1
int v16; // [sp+34h] [bp-10h]@1
int v17; // [sp+38h] [bp-Ch]@1
int v18; // [sp+3Ch] [bp-8h]@1
unsigned int v19; // [sp+40h] [bp-4h]@1
v19 = (unsigned int)&v3 ^ __security_cookie;
v6 = -10;
v7 = -10;
v12 = -3;
v13 = -3;
v5 = -8;
v8 = -8;
v1 = a1 >> 3;
v3 = -4;
v4 = -6;
v9 = -6;
v10 = -4;
v11 = 0;
v14 = -2;
v15 = -1;
v16 = 0;
v17 = 2;
v18 = 0;
if ( a1 >> 3 && v1 != 7 )
result = *(&v11 + v1) + *(&v3 + (a1 & 7));
else
result = 0;
return result;
}
RobboLito's, (static.c):
Code: Select all
static int endgame_pawn( int qu )
{
int C[8] =
{
-4, -6, -8, -10, -10, -8, -6, -4
};
int T[8] =
{
0, -3, -3, -2, -1, 0, 2, 0
};
int co = FILE(qu), tr = RANK(qu);
if( tr == T1 || tr == T8 )
return 0;
return C[co] + T[tr];
}
Houdini's Knight opening static table:
Code: Select all
int __fastcall sub_423AF0(signed int a1)
{
int result; // eax@3
int v2; // [sp+0h] [bp-44h]@1
int v3; // [sp+4h] [bp-40h]@1
int v4; // [sp+8h] [bp-3Ch]@1
int v5; // [sp+Ch] [bp-38h]@1
int v6; // [sp+10h] [bp-34h]@1
int v7; // [sp+14h] [bp-30h]@1
int v8; // [sp+18h] [bp-2Ch]@1
int v9; // [sp+1Ch] [bp-28h]@1
int v10; // [sp+20h] [bp-24h]@1
int v11; // [sp+24h] [bp-20h]@1
int v12; // [sp+28h] [bp-1Ch]@1
int v13; // [sp+2Ch] [bp-18h]@1
int v14; // [sp+30h] [bp-14h]@1
int v15; // [sp+34h] [bp-10h]@1
int v16; // [sp+38h] [bp-Ch]@1
int v17; // [sp+3Ch] [bp-8h]@1
unsigned int v18; // [sp+40h] [bp-4h]@1
v18 = (unsigned int)&v2 ^ __security_cookie;
v10 = -32;
v11 = -10;
v12 = 6;
v13 = 15;
v14 = 21;
v15 = 19;
v16 = 10;
v17 = -11;
v2 = -26;
v3 = -10;
v4 = 1;
v5 = 5;
v6 = 5;
v7 = 1;
v8 = -10;
v9 = -26;
if ( a1 == 56 || a1 == 63 )
result = -120;
else
result = *(&v10 + (a1 >> 3)) + *(&v2 + (a1 & 7));
return result;
}
RobboLito's, (static.c):
Code: Select all
static int opening_knight( int qu )
{
int T[8] =
{
-32, -10, 6, 15, 21, 19, 10, -11
};
int C[8] =
{
-26, -10, 1, 5, 5, 1, -10, -26
};
int tr = RANK(qu), co = FILE(qu);
return (qu == A8 || qu == H8) ? (-120) : (T[tr] + C[co]);
}
Houdini's Knight ending static table:
Code: Select all
int __cdecl sub_423BB0(signed int a1)
{
__int64 v1; // qax@1
int v3; // [sp+Ch] [bp-64h]@1
int v4; // [sp+10h] [bp-60h]@1
int v5; // [sp+14h] [bp-5Ch]@1
int v6; // [sp+18h] [bp-58h]@1
int v7; // [sp+1Ch] [bp-54h]@1
int v8; // [sp+20h] [bp-50h]@1
int v9; // [sp+24h] [bp-4Ch]@1
int v10; // [sp+28h] [bp-48h]@1
int v11; // [sp+2Ch] [bp-44h]@1
int v12; // [sp+30h] [bp-40h]@1
int v13; // [sp+34h] [bp-3Ch]@1
int v14; // [sp+38h] [bp-38h]@1
int v15; // [sp+3Ch] [bp-34h]@1
int v16; // [sp+40h] [bp-30h]@1
int v17; // [sp+44h] [bp-2Ch]@1
int v18; // [sp+48h] [bp-28h]@1
int v19; // [sp+4Ch] [bp-24h]@1
int v20; // [sp+50h] [bp-20h]@1
int v21; // [sp+54h] [bp-1Ch]@1
int v22; // [sp+58h] [bp-18h]@1
int v23; // [sp+5Ch] [bp-14h]@1
int v24; // [sp+60h] [bp-10h]@1
int v25; // [sp+64h] [bp-Ch]@1
int v26; // [sp+68h] [bp-8h]@1
unsigned int v27; // [sp+6Ch] [bp-4h]@1
v27 = (unsigned int)&v3 ^ __security_cookie;
v3 = 2;
v25 = 2;
v13 = 2;
v16 = 2;
v6 = -1;
v12 = -1;
v17 = -1;
v8 = -4;
v10 = -10;
v19 = -10;
v11 = -4;
v18 = -4;
v1 = (a1 & 7) + (a1 >> 3) - 7;
v14 = 4;
v15 = 4;
v7 = -2;
v21 = -2;
v4 = 1;
v5 = 0;
v9 = -7;
LODWORD(v1) = *(&v11 + (a1 & 7))
+ *(&v3 + abs((a1 & 7) - (a1 >> 3)))
+ *(&v3 + (HIDWORD(v1) ^ ((a1 & 7) + (a1 >> 3) - 7)) - HIDWORD(v1));
v20 = -5;
v22 = 1;
v23 = 3;
v24 = 5;
v26 = -3;
return *(&v19 + (a1 >> 3)) + v1;
}
RobboLito's, (static.c):
Code: Select all
static int endgame_knight( int qu )
{
int V[8] =
{
2, 1, 0, -1, -2, -4, -7, -10
};
int T[8] =
{
-10, -5, -2, 1, 3, 5, 2, -3
};
int C[8] =
{
-4, -1, 2, 4, 4, 2, -1, -4
};
int tr = RANK(qu), co = FILE(qu);
int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
return V[d] + V[e] + T[tr] + C[co];
}
Houdini's Bishop opening static table:
Code: Select all
int v13; // [sp+30h] [bp-1Ch]@1
int v14; // [sp+34h] [bp-18h]@1
int v15; // [sp+38h] [bp-14h]@1
int v16; // [sp+3Ch] [bp-10h]@1
int v17; // [sp+40h] [bp-Ch]@1
int v18; // [sp+44h] [bp-8h]@1
unsigned int v19; // [sp+48h] [bp-4h]@1
v19 = (unsigned int)&v3 ^ __security_cookie;
v7 = -5;
v11 = -5;
v12 = 0;
v13 = 0;
v14 = 0;
v15 = 0;
v16 = 0;
v17 = 0;
v18 = 0;
v1 = (a1 & 7) + (a1 >> 3) - 7;
v3 = 10;
v4 = 5;
v5 = 1;
v6 = -3;
v8 = -7;
v9 = -8;
v10 = -12;
return *(&v11 + (a1 >> 3))
+ *(&v3 + abs((a1 & 7) - (a1 >> 3)))
+ *(&v3 + (HIDWORD(v1) ^ ((a1 & 7) + (a1 >> 3) - 7)) - HIDWORD(v1));
}
RobboLito's, (static.c):
Code: Select all
static int opening_bishop( int qu )
{
int V[8] =
{
10, 5, 1, -3, -5, -7, -8, -12
};
int W[8] =
{
-5, 0, 0, 0, 0, 0, 0, 0
};
int tr = RANK(qu), co = FILE(qu);
int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
return V[d] + V[e] + W[tr];
}
Houdini's Queen opening static table:
Code: Select all
int __cdecl sub_423D70(signed int a1)
{
__int64 v1; // qax@1
int v3; // [sp+Ch] [bp-44h]@1
int v4; // [sp+10h] [bp-40h]@1
int v5; // [sp+14h] [bp-3Ch]@1
int v6; // [sp+18h] [bp-38h]@1
int v7; // [sp+1Ch] [bp-34h]@1
int v8; // [sp+20h] [bp-30h]@1
int v9; // [sp+24h] [bp-2Ch]@1
int v10; // [sp+28h] [bp-28h]@1
int v11; // [sp+2Ch] [bp-24h]@1
int v12; // [sp+30h] [bp-20h]@1
int v13; // [sp+34h] [bp-1Ch]@1
int v14; // [sp+38h] [bp-18h]@1
int v15; // [sp+3Ch] [bp-14h]@1
int v16; // [sp+40h] [bp-10h]@1
int v17; // [sp+44h] [bp-Ch]@1
int v18; // [sp+48h] [bp-8h]@1
unsigned int v19; // [sp+4Ch] [bp-4h]@1
v19 = (unsigned int)&v3 ^ __security_cookie;
v7 = -2;
v11 = -2;
v18 = -2;
v4 = 2;
v14 = 2;
v15 = 2;
v5 = 1;
v13 = 1;
v16 = 1;
v1 = (a1 & 7) + (a1 >> 3) - 7;
v3 = 3;
v6 = 0;
v8 = -4;
v9 = -7;
v10 = -10;
LODWORD(v1) = *(&v3 + abs((a1 & 7) - (a1 >> 3))) + *(&v3 + (HIDWORD(v1) ^ ((a1 & 7) + (a1 >> 3) - 7)) - HIDWORD(v1));
v12 = 0;
v17 = 0;
return *(&v11 + (a1 >> 3)) + *(&v11 + (a1 & 7)) - 5 * (a1 >> 3 == 0) + v1;
}
RobboLito's, (static.c):
Code: Select all
static int opening_queen( int qu )
{
int V[8] =
{
3, 2, 1, 0, -2, -4, -7, -10
};
int W[8] =
{
-2, 0, 1, 2, 2, 1, 0, -2
};
int tr = RANK(qu), co = FILE(qu);
int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
return V[d] + V[e] + W[tr] + W[co] - 5 * (tr == T1);
}
Houdini's Queen ending static table:
Code: Select all
int __cdecl sub_423E40(signed int a1)
{
__int64 v1; // qax@1
int v3; // [sp+Ch] [bp-44h]@1
int v4; // [sp+10h] [bp-40h]@1
int v5; // [sp+14h] [bp-3Ch]@1
int v6; // [sp+18h] [bp-38h]@1
int v7; // [sp+1Ch] [bp-34h]@1
int v8; // [sp+20h] [bp-30h]@1
int v9; // [sp+24h] [bp-2Ch]@1
int v10; // [sp+28h] [bp-28h]@1
int v11; // [sp+2Ch] [bp-24h]@1
int v12; // [sp+30h] [bp-20h]@1
int v13; // [sp+34h] [bp-1Ch]@1
int v14; // [sp+38h] [bp-18h]@1
int v15; // [sp+3Ch] [bp-14h]@1
int v16; // [sp+40h] [bp-10h]@1
int v17; // [sp+44h] [bp-Ch]@1
int v18; // [sp+48h] [bp-8h]@1
unsigned int v19; // [sp+4Ch] [bp-4h]@1
v19 = (unsigned int)&v3 ^ __security_cookie;
v4 = 0;
v12 = 0;
v17 = 0;
v14 = 2;
v15 = 2;
v3 = 1;
v13 = 1;
v16 = 1;
v1 = (a1 & 7) + (a1 >> 3) - 7;
v11 = -2;
v18 = -2;
v5 = -1;
v6 = -3;
v7 = -4;
v8 = -6;
v9 = -8;
v10 = -12;
return *(&v11 + (a1 >> 3))
+ *(&v11 + (a1 & 7))
+ *(&v3 + abs((a1 & 7) - (a1 >> 3)))
+ *(&v3 + (HIDWORD(v1) ^ ((a1 & 7) + (a1 >> 3) - 7)) - HIDWORD(v1));
}
RobboLito's, (static.c):
Code: Select all
static int endgame_queen( int qu )
{
int V[8] =
{
1, 0, -1, -3, -4, -6, -8, -12
};
int W[8] =
{
-2, 0, 1, 2, 2, 1, 0, -2
};
int tr = RANK(qu), co = FILE(qu);
int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
return V[d] + V[e] + W[tr] + W[co];
}
Houdini King opening static table:
Code: Select all
int __fastcall sub_423F00(signed int a1)
{
int v1; // eax@1
int v3; // [sp+0h] [bp-44h]@1
int v4; // [sp+4h] [bp-40h]@1
int v5; // [sp+8h] [bp-3Ch]@1
int v6; // [sp+Ch] [bp-38h]@1
int v7; // [sp+10h] [bp-34h]@1
int v8; // [sp+14h] [bp-30h]@1
int v9; // [sp+18h] [bp-2Ch]@1
int v10; // [sp+1Ch] [bp-28h]@1
int v11; // [sp+20h] [bp-24h]@1
int v12; // [sp+24h] [bp-20h]@1
int v13; // [sp+28h] [bp-1Ch]@1
int v14; // [sp+2Ch] [bp-18h]@1
int v15; // [sp+30h] [bp-14h]@1
int v16; // [sp+34h] [bp-10h]@1
int v17; // [sp+38h] [bp-Ch]@1
int v18; // [sp+3Ch] [bp-8h]@1
unsigned int v19; // [sp+40h] [bp-4h]@1
v19 = (unsigned int)&v3 ^ __security_cookie;
v14 = -5;
v6 = -5;
v7 = -5;
v3 = 40;
v4 = 45;
v5 = 15;
v8 = 15;
v9 = 45;
v10 = 40;
v1 = *(&v3 + (a1 & 7));
v11 = 4;
v12 = 1;
v13 = -2;
v15 = -10;
v16 = -15;
v17 = -25;
v18 = -35;
return *(&v11 + (a1 >> 3)) + v1;
}
RobboLito's, (static.c):
Code: Select all
static int opening_king( int qu )
{
int T[8] =
{
4, 1, -2, -5, -10, -15, -25, -35
};
int C[8] =
{
40, 45, 15, -5, -5, 15, 45, 40
};
int tr = RANK(qu), co = FILE(qu);
return T[tr] + C[co];
}
Houdini's King ending static table:
Code: Select all
int __cdecl sub_423FB0(signed int a1)
{
__int64 v1; // qax@1
int v3; // [sp+Ch] [bp-64h]@1
int v4; // [sp+10h] [bp-60h]@1
int v5; // [sp+14h] [bp-5Ch]@1
int v6; // [sp+18h] [bp-58h]@1
int v7; // [sp+1Ch] [bp-54h]@1
int v8; // [sp+20h] [bp-50h]@1
int v9; // [sp+24h] [bp-4Ch]@1
int v10; // [sp+28h] [bp-48h]@1
int v11; // [sp+2Ch] [bp-44h]@1
int v12; // [sp+30h] [bp-40h]@1
int v13; // [sp+34h] [bp-3Ch]@1
int v14; // [sp+38h] [bp-38h]@1
int v15; // [sp+3Ch] [bp-34h]@1
int v16; // [sp+40h] [bp-30h]@1
int v17; // [sp+44h] [bp-2Ch]@1
int v18; // [sp+48h] [bp-28h]@1
int v19; // [sp+4Ch] [bp-24h]@1
int v20; // [sp+50h] [bp-20h]@1
int v21; // [sp+54h] [bp-1Ch]@1
int v22; // [sp+58h] [bp-18h]@1
int v23; // [sp+5Ch] [bp-14h]@1
int v24; // [sp+60h] [bp-10h]@1
int v25; // [sp+64h] [bp-Ch]@1
int v26; // [sp+68h] [bp-8h]@1
unsigned int v27; // [sp+6Ch] [bp-4h]@1
v27 = (unsigned int)&v3 ^ __security_cookie;
v6 = -5;
v20 = -5;
v4 = 0;
v21 = 0;
v25 = 0;
v12 = 0;
v17 = 0;
v22 = 5;
v24 = 5;
v10 = -30;
v19 = -30;
v14 = 15;
v15 = 15;
v23 = 10;
v13 = 10;
v16 = 10;
v1 = (a1 & 7) + (a1 >> 3) - 7;
v11 = -15;
v18 = -15;
v3 = 2;
v5 = -2;
v7 = -8;
v8 = -12;
v9 = -20;
LODWORD(v1) = *(&v11 + (a1 & 7))
+ *(&v3 + abs((a1 & 7) - (a1 >> 3)))
+ *(&v3 + (HIDWORD(v1) ^ ((a1 & 7) + (a1 >> 3) - 7)) - HIDWORD(v1));
v26 = -10;
return *(&v19 + (a1 >> 3)) + v1;
}
RobboLito's, (static.c):
Code: Select all
static int endgame_king( int qu )
{
int V[8] =
{
2, 0, -2, -5, -8, -12, -20, -30
};
int T[8] =
{
-30, -5, 0, 5, 10, 5, 0, -10
};
int C[8] =
{
-15, 0, 10, 15, 15, 10, 0, -15
};
int tr = RANK(qu), co = FILE(qu);
int d = ABSOLUTE_(co - tr), e = ABSOLUTE_(co + tr - 7);
return V[d] + V[e] + T[tr] + C[co];
}
RobboLito's static table Initialization, (static.c):
Code: Select all
void static_initialization()
{
int qu;
for ( qu = A1; qu <= H8; qu++ )
static_value[count_pawn_white][qu] = absorb(opening_pawn(qu), endgame_pawn(qu));
for ( qu = A1; qu <= H8; qu++ )
static_value[count_knight_white][qu] = absorb(opening_knight(qu), endgame_knight(qu));
for ( qu = A1; qu <= H8; qu++ )
static_value[count_clear_white][qu] = absorb(opening_bishop(qu), endgame_bishop(qu));
for ( qu = A1; qu <= H8; qu++ )
static_value[count_dark_white][qu] = absorb(opening_bishop(qu), endgame_bishop(qu));
for ( qu = A1; qu <= H8; qu++ )
static_value[count_rook_white][qu] = absorb(opening_rook(qu), endgame_rook(qu));
for ( qu = A1; qu <= H8; qu++ )
static_value[count_queen_white][qu] = absorb(opening_queen(qu), endgame_queen(qu));
for ( qu = A1; qu <= H8; qu++ )
static_value[count_king_white][qu] = absorb(opening_king(qu), endgame_king(qu));
black_white();
}
Robert Houdart actually stated to the computer chess community that "Houdini does NOT contain any Ippolit code," when in fact
Houdini is RobboLito (IPPOLIT) modified. It is time for the community to tell Mr. Houdart, 'you lied to us,' and pressure him to come clean.