diff --git a/Source/path.cpp b/Source/path.cpp index c4e1ab3f4..325978757 100644 --- a/Source/path.cpp +++ b/Source/path.cpp @@ -4,10 +4,10 @@ PATHNODE path_nodes[300]; int gdwCurPathStep; -int pnode_vals[26]; +int pnode_vals[25]; PATHNODE *pnode_ptr; PATHNODE *pnode_tblptr[300]; -PATHNODE path_2_nodes[300]; +PATHNODE *path_2_nodes; char pathxdir[8] = { -1, -1, 1, 1, -1, 0, 1, 0 }; char pathydir[8] = { -1, 1, -1, 1, 0, -1, 0, 1 }; @@ -22,14 +22,14 @@ int __fastcall FindPath(bool (__fastcall *PosOk)(int, int, int), int PosOkArg, i PATHNODE *v11; // eax int result; // eax PATHNODE *v13; // edx - int v14; // eax + PATHNODE **v14; // eax int v15; // edi bool v16; // zf int *v17; // ecx char v18; // dl pnode_vals[0] = 0; - *(_DWORD *)&path_2_nodes[0].f = (unsigned int)path_new_step(); + path_2_nodes = path_new_step(); gdwCurPathStep = 0; pnode_ptr = path_new_step(); v8 = path_new_step(); @@ -39,7 +39,7 @@ int __fastcall FindPath(bool (__fastcall *PosOk)(int, int, int), int PosOkArg, i v8->x = sx; v8->f = v9 + v8->g; v8->y = sy; - *(_DWORD *)(*(_DWORD *)&path_2_nodes[0].f + 48) = (unsigned int)v8; + path_2_nodes->NextNode = v8; while ( 1 ) { v11 = GetNextPath(); @@ -51,22 +51,19 @@ int __fastcall FindPath(bool (__fastcall *PosOk)(int, int, int), int PosOkArg, i return 0; } v13 = v11; - v14 = (int)&v11->Parent; + v14 = &v11->Parent; v15 = 0; - if ( *(_DWORD *)v14 ) + if ( *v14 ) { while ( 1 ) { v16 = v15 == 25; if ( v15 >= 25 ) break; - pnode_vals[++v15] = path_directions[3 * (v13->y - *(_DWORD *)(*(_DWORD *)v14 + 8)) - - *(_DWORD *)(*(_DWORD *)v14 + 4) - + 4 - + v13->x]; - v13 = *(PATHNODE **)v14; - v14 = *(_DWORD *)v14 + 12; - if ( !*(_DWORD *)v14 ) + pnode_vals[++v15] = path_directions[3 * (v13->y - (*v14)->y) - (*v14)->x + 4 + v13->x]; + v13 = *v14; + v14 = &(*v14)->Parent; + if ( !*v14 ) { v16 = v15 == 25; break; @@ -125,10 +122,10 @@ PATHNODE *__cdecl GetNextPath() { PATHNODE *result; // eax - result = *(PATHNODE **)(*(_DWORD *)&path_2_nodes[0].f + 48); + result = path_2_nodes->NextNode; if ( result ) { - *(_DWORD *)(*(_DWORD *)&path_2_nodes[0].f + 48) = (unsigned int)result->NextNode; + path_2_nodes->NextNode = result->NextNode; result->NextNode = pnode_ptr->NextNode; pnode_ptr->NextNode = result; } @@ -316,7 +313,7 @@ PATHNODE *__fastcall path_get_node1(int dx, int dy) { PATHNODE *result; // eax - result = *(PATHNODE **)&path_2_nodes[0].f; + result = path_2_nodes; do result = result->NextNode; while ( result && (result->x != dx || result->y != dy) ); @@ -339,8 +336,8 @@ void __fastcall path_next_node(PATHNODE *pPath) PATHNODE *v1; // edx PATHNODE *v2; // eax - v1 = *(PATHNODE **)&path_2_nodes[0].f; - v2 = *(PATHNODE **)(*(_DWORD *)&path_2_nodes[0].f + 48); + v1 = path_2_nodes; + v2 = path_2_nodes->NextNode; if ( v2 ) { do