research: full acclient.exe decompilation — 22,225 functions, 688K lines

Complete decompilation of the retail Asheron's Call client using
Ghidra 12.0.4 + pyghidra headless. 22,225 of 22,226 functions
successfully decompiled in 75 seconds.

Output: docs/research/decompiled/ (54 files, 688,567 lines of C)

Key findings already identified:
- CLandBlockStruct::ConstructPolygons at chunk_00530000.c:2270
  (split direction formula with 0x0CCAC033 constants)
- Motion command handlers at chunk_00510000.c (0x45000005 etc)
- Motion interpreter at chunk_00520000.c
- Portal space UI at chunk_004D0000.c and chunk_00560000.c

Next: identify CPhysicsObj, CMotionInterp, collision, and movement
functions by cross-referencing against ACE's C# port.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-04-12 23:25:51 +02:00
parent 370c6e3133
commit 4d36756b91
56 changed files with 688744 additions and 0 deletions

View file

@ -0,0 +1,63 @@
# Decompiled acclient.exe — Full Index
- Total functions: 22226
- Successfully decompiled: 22225
- Failed: 1
- Time: 75s
## Files by address chunk
- `chunk_00400000.c` — 27183 lines
- `chunk_00410000.c` — 26338 lines
- `chunk_00420000.c` — 20753 lines
- `chunk_00430000.c` — 25677 lines
- `chunk_00440000.c` — 26028 lines
- `chunk_00450000.c` — 25113 lines
- `chunk_00460000.c` — 24486 lines
- `chunk_00470000.c` — 21998 lines
- `chunk_00480000.c` — 18223 lines
- `chunk_00490000.c` — 18343 lines
- `chunk_004A0000.c` — 15931 lines
- `chunk_004B0000.c` — 11281 lines
- `chunk_004C0000.c` — 19050 lines
- `chunk_004D0000.c` — 15220 lines
- `chunk_004E0000.c` — 18282 lines
- `chunk_004F0000.c` — 21835 lines
- `chunk_00500000.c` — 28121 lines
- `chunk_00510000.c` — 28028 lines
- `chunk_00520000.c` — 23705 lines
- `chunk_00530000.c` — 23720 lines
- `chunk_00540000.c` — 26339 lines
- `chunk_00550000.c` — 24576 lines
- `chunk_00560000.c` — 21414 lines
- `chunk_00570000.c` — 15793 lines
- `chunk_00580000.c` — 21493 lines
- `chunk_00590000.c` — 23709 lines
- `chunk_005A0000.c` — 24042 lines
- `chunk_005B0000.c` — 24113 lines
- `chunk_005C0000.c` — 24425 lines
- `chunk_005D0000.c` — 24483 lines
- `chunk_005E0000.c` — 27149 lines
- `chunk_005F0000.c` — 26972 lines
- `chunk_00600000.c` — 14936 lines
- `chunk_00610000.c` — 14454 lines
- `chunk_00620000.c` — 10453 lines
- `chunk_00630000.c` — 15174 lines
- `chunk_00640000.c` — 21923 lines
- `chunk_00650000.c` — 37209 lines
- `chunk_00660000.c` — 22737 lines
- `chunk_00670000.c` — 23715 lines
- `chunk_00680000.c` — 27365 lines
- `chunk_00690000.c` — 24155 lines
- `chunk_006A0000.c` — 27857 lines
- `chunk_006B0000.c` — 20525 lines
- `chunk_006C0000.c` — 5584 lines
- `chunk_00700000.c` — 60 lines
- `chunk_00720000.c` — 29398 lines
- `chunk_00730000.c` — 45271 lines
- `chunk_00740000.c` — 45251 lines
- `chunk_00750000.c` — 45773 lines
- `chunk_00760000.c` — 49981 lines
- `chunk_00770000.c` — 49778 lines
- `chunk_00780000.c` — 45954 lines
- `chunk_00790000.c` — 8918 lines

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,33 @@
// Decompiled from acclient.exe — chunk 0x00700000
// Ghidra 12.0.4 + pyghidra headless
// --- FUN_00706f20 at 0x00706F20 (size: 83) ---
void FUN_00706f20(void)
{
int iVar1;
undefined4 *puVar2;
puVar2 = &DAT_008674d0;
iVar1 = 10;
do {
puVar2[-0x11] = &PTR_LAB_00797910;
puVar2[-0x10] = 0;
puVar2[-0xf] = 0x3f800000;
puVar2[-0xe] = 0;
puVar2[-0xd] = 0;
puVar2[-0xc] = 0;
puVar2[-2] = 0;
puVar2[-1] = 0;
*puVar2 = 0;
FUN_00535b30();
puVar2 = puVar2 + 0x5a;
iVar1 = iVar1 + -1;
} while (iVar1 != 0);
_atexit((_func_4879 *)&LAB_007728f0);
return;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff