research: complete acclient.exe function map — 70+ identified functions
Maps decompiled functions to their real AC class::method names by cross-referencing against ACE's C# physics port. Covers: - CPhysicsObj (13 functions): Euler integration, velocity, gravity, collision dispatch, friction, contact checking - CMotionInterp (18 functions): full motion state machine including jump, movement, velocity computation, motion dispatch - CLandBlockStruct (7 functions): terrain mesh construction, split direction, UVs, water depth, normal lighting - CLandBlock (6 functions): landblock lifecycle, static object loading, cell management, neighbor expansion - LandDefs (4 functions): coordinate system constants and transforms - Collision/Transition (13 functions): sphere-polygon intersection, ray-plane tests, BSP traversal, walkable surface detection, slide/step sphere, main collision loop - WeenieObject vtable (7 entries): confirmed from call site analysis Also documents PhysicsObj struct layout (13 fields with offsets) and MotionInterp struct layout (14 fields with offsets). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4d36756b91
commit
50c0704ada
1 changed files with 146 additions and 0 deletions
146
docs/research/acclient_function_map.md
Normal file
146
docs/research/acclient_function_map.md
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
# acclient.exe Decompiled Function Map
|
||||
|
||||
Mapped from 22,225 decompiled functions (688K lines of C) against ACE's
|
||||
C# physics port and ACME's ClientReference.cs.
|
||||
|
||||
## CPhysicsObj (chunk_00510000.c, chunk_00500000.c)
|
||||
|
||||
| Address | FUN name | ACE method | Description |
|
||||
|---------|----------|-----------|-------------|
|
||||
| 0x515020 | FUN_00515020 | PhysicsObj::update_object | Top-level per-frame update |
|
||||
| 0x5111D0 | FUN_005111d0 | PhysicsObj::UpdatePhysicsInternal | Euler integration: `pos += vel*dt + 0.5*accel*dt²` |
|
||||
| 0x511420 | FUN_00511420 | PhysicsObj::calc_acceleration | Sets gravity (-9.8 Z) when Gravity flag set |
|
||||
| 0x511EC0 | FUN_00511ec0 | PhysicsObj::set_velocity | Stores velocity, clamps to MaxVelocity (50.0) |
|
||||
| 0x511FA0 | FUN_00511fa0 | PhysicsObj::set_local_velocity | Body→world transform then set_velocity |
|
||||
| 0x511DE0 | FUN_00511de0 | PhysicsObj::set_on_walkable | Sets/clears OnWalkable transient flag |
|
||||
| 0x511560 | FUN_00511560 | PhysicsObj::report_collision_start | Fires environment collision callback |
|
||||
| 0x513AC0 | FUN_00513ac0 | PhysicsObj::report_collision_end | Fires collision-end callback |
|
||||
| 0x513B60 | FUN_00513b60 | PhysicsObj::handle_obj_collision | Object-to-object collision dispatch |
|
||||
| 0x515280 | FUN_00515280 | PhysicsObj::handle_collision | Elasticity bounce response |
|
||||
| 0x513730 | FUN_00513730 | PhysicsObj::UpdatePositionInternal | Position advance + interpenetration resolve |
|
||||
| 0x50F940 | FUN_0050f940 | PhysicsObj::calc_friction | Friction from ground normal + slope |
|
||||
| 0x510080 | FUN_00510080 | PhysicsObj::check_contact_velocity | Velocity vs contact normal check |
|
||||
|
||||
### PhysicsObj Struct Layout
|
||||
|
||||
| Offset | Field | Type |
|
||||
|--------|-------|------|
|
||||
| +0xA8 | State (PhysicsState flags) | uint |
|
||||
| +0xAC | TransientState | uint |
|
||||
| +0xB0 | Elasticity | float |
|
||||
| +0xD8 | LastUpdateTime | double |
|
||||
| +0xE0/E4/E8 | Velocity XYZ | float[3] |
|
||||
| +0xEC/F0/F4 | Acceleration XYZ | float[3] |
|
||||
| +0xF8/FC/100 | Omega XYZ | float[3] |
|
||||
| +0x12C | WeenieObject ptr | ptr |
|
||||
| +0x130/134/138 | Ground normal XYZ | float[3] |
|
||||
|
||||
## CMotionInterp (chunk_00520000.c)
|
||||
|
||||
| Address | FUN name | ACE method | Description |
|
||||
|---------|----------|-----------|-------------|
|
||||
| 0x5286B0 | FUN_005286b0 | MotionInterp::get_jump_v_z | Jump Z velocity (delegates to WeenieObj) |
|
||||
| 0x528660 | FUN_00528660 | MotionInterp::jump_charge_is_allowed | Can charge jump? |
|
||||
| 0x5285E0 | FUN_005285e0 | MotionInterp::motion_allows_jump | Current anim permits jump? |
|
||||
| 0x528EC0 | FUN_00528ec0 | MotionInterp::jump_is_allowed | Top-level jump permission |
|
||||
| 0x528CD0 | FUN_00528cd0 | MotionInterp::get_leave_ground_velocity | Full 3D launch vector |
|
||||
| 0x529390 | FUN_00529390 | MotionInterp::jump | Initiate jump |
|
||||
| 0x529710 | FUN_00529710 | MotionInterp::LeaveGround | Reset jump state on airborne |
|
||||
| 0x5296D0 | FUN_005296d0 | MotionInterp::HitGround | Landing handler |
|
||||
| 0x528960 | FUN_00528960 | MotionInterp::get_state_velocity | Compute velocity for current motion |
|
||||
| 0x528A50 | FUN_00528a50 | MotionInterp::StopCompletely | Reset to Ready/idle |
|
||||
| 0x5287F0 | FUN_005287f0 | MotionInterp::adjust_motion | Apply pending motion adjustments |
|
||||
| 0x5293F0 | FUN_005293f0 | MotionInterp::apply_raw_movement | Raw→interpreted state conversion |
|
||||
| 0x529210 | FUN_00529210 | MotionInterp::apply_current_movement | Set physics velocity from interpreted state |
|
||||
| 0x528DD0 | FUN_00528dd0 | MotionInterp::contact_allows_move | Slope angle check |
|
||||
| 0x528F70 | FUN_00528f70 | MotionInterp::DoInterpretedMotion | Core animation state machine |
|
||||
| 0x529080 | FUN_00529080 | MotionInterp::StopInterpretedMotion | Stop specific interpreted motion |
|
||||
| 0x529140 | FUN_00529140 | MotionInterp::StopMotion | Stop specific raw motion |
|
||||
| 0x529930 | FUN_00529930 | MotionInterp::DoMotion | Process one raw motion command |
|
||||
| 0x529A90 | FUN_00529a90 | MotionInterp::PerformMovement | Top-level dispatcher (switch 1-5) |
|
||||
|
||||
### MotionInterp Struct Layout
|
||||
|
||||
| Offset | Field | ACE name |
|
||||
|--------|-------|----------|
|
||||
| +0x04 | WeenieObject ptr | WeenieObj |
|
||||
| +0x08 | PhysicsObject ptr | PhysicsObj |
|
||||
| +0x14 | RawMotionState start | RawState |
|
||||
| +0x20 | ForwardCommand | RawState.ForwardCommand |
|
||||
| +0x28 | ForwardSpeed | RawState.ForwardSpeed |
|
||||
| +0x2C | SideStepCommand | RawState.SideStepCommand |
|
||||
| +0x38 | TurnCommand | RawState.TurnCommand |
|
||||
| +0x44 | InterpretedMotionState start | InterpretedState |
|
||||
| +0x4C | InterpretedState.ForwardCommand | |
|
||||
| +0x50 | InterpretedState.ForwardSpeed | |
|
||||
| +0x70 | StandingLongJump | bool |
|
||||
| +0x74 | JumpExtent | float |
|
||||
| +0x7C | MyRunRate | float |
|
||||
|
||||
## CLandBlockStruct (chunk_00530000.c)
|
||||
|
||||
| Address | FUN name | ACE method | Description |
|
||||
|---------|----------|-----------|-------------|
|
||||
| 0x531D10 | FUN_00531d10 | IsSWtoNECut | Split direction helper (inner) |
|
||||
| 0x532A50 | FUN_00532a50 | ConstructPolygons | Outer 8×8 loop with 0xCCAC033 constants |
|
||||
| 0x532EB0 | FUN_00532eb0 | GetCellRotation / ConstructUVs | PalCode computation |
|
||||
| 0x532D10 | FUN_00532d10 | unpack | Deserialize from dat stream |
|
||||
| 0x531F10 | FUN_00531f10 | get_packed_size | Returns 0xF4 (244 bytes) |
|
||||
| 0x532440 | FUN_00532440 | AdjustPlanes | Normal accumulation + lighting |
|
||||
| 0x532290 | FUN_00532290 | CalcCellWater | Water depth check |
|
||||
|
||||
## CLandBlock (chunk_00530000.c)
|
||||
|
||||
| Address | FUN name | ACE method | Description |
|
||||
|---------|----------|-----------|-------------|
|
||||
| 0x530690 | FUN_00530690 | Init / constructor | Initialize landblock fields |
|
||||
| 0x5307E0 | FUN_005307e0 | release_all | Free all resources |
|
||||
| 0x531780 | FUN_00531780 | init_static_objs | Load static objects from LandBlockInfo |
|
||||
| 0x531000 | FUN_00531000 | release_visible_cells | Free cell data |
|
||||
| 0x5301E0 | FUN_005301e0 | grab_visible_cells | BFS neighbor expansion |
|
||||
| 0x530650 | FUN_00530650 | add_server_object | Add entity to landblock |
|
||||
|
||||
## LandDefs (chunk_005A0000.c)
|
||||
|
||||
| Address | FUN name | ACE method | Description |
|
||||
|---------|----------|-----------|-------------|
|
||||
| 0x5AAA30 | FUN_005aaa30 | get_vars | Set 8 coordinate constants |
|
||||
| 0x5AABB0 | FUN_005aabb0 | get_outside_lcoord | Cell ID → world coord |
|
||||
| 0x5AAC70 | FUN_005aac70 | AdjustToOutside | Normalize position to outdoor coords |
|
||||
| 0x5AAB50 | FUN_005aab50 | get_block_dir | Quadrant → Direction enum |
|
||||
|
||||
## Collision / Transition (chunk_00530000.c)
|
||||
|
||||
| Address | FUN name | ACE method | Description |
|
||||
|---------|----------|-----------|-------------|
|
||||
| 0x5384E0 | FUN_005384e0 | Sphere::SphereIntersectsRay | Ray-sphere intersection |
|
||||
| 0x539500 | FUN_00539500 | Polygon::sphere_intersects_poly | Sphere-polygon contact |
|
||||
| 0x539750 | FUN_00539750 | Polygon::sphere_intersects_solid | Both-side penetration |
|
||||
| 0x539BA0 | FUN_00539ba0 | Polygon::find_time_of_collision | Ray-plane-polygon t |
|
||||
| 0x539DF0 | FUN_00539df0 | Polygon::find_time_of_collision | Cylinder variant |
|
||||
| 0x53A040 | FUN_0053a040 | Polygon::find_walkable_collision | Edge normal return |
|
||||
| 0x539110 | FUN_00539110 | Polygon::calc_normal | Face normal from vertices |
|
||||
| 0x539060 | FUN_00539060 | Plane::ray_plane_intersect | Basic ray-plane t |
|
||||
| 0x538EB0 | FUN_00538eb0 | Sphere::slide_sphere | Slide along surface |
|
||||
| 0x538F50 | FUN_00538f50 | Sphere::land_on_sphere | Step down to surface |
|
||||
| 0x538180 | FUN_00538180 | CTransition::collide_with_point | Point collision handler |
|
||||
| 0x5387C0 | FUN_005387c0 | CTransition::find_collisions | Main collision loop |
|
||||
| 0x53A230 | FUN_0053a230 | Polygon::hits_walkable | Walkable surface check |
|
||||
|
||||
## WeenieObject vtable (confirmed from call sites)
|
||||
|
||||
| vtable offset | ACE method | Called from |
|
||||
|--------------|-----------|------------|
|
||||
| +0x30 | InqJumpVelocity | get_jump_v_z |
|
||||
| +0x34 | InqRunRate | get_state_velocity |
|
||||
| +0x3C | CanJump | jump_is_allowed |
|
||||
| +0x4C | HandleCollisionEnd | report_collision_end |
|
||||
| +0x50 | HandleCollisionStart | handle_obj_collision |
|
||||
| +0x54 | HandleMissileCollision | handle_obj_collision |
|
||||
| +0x58 | HandleEnvironmentCollision | report_collision_start |
|
||||
|
||||
## PhysicsEngine (chunk_00450000.c)
|
||||
|
||||
| Address | FUN name | ACE method | Description |
|
||||
|---------|----------|-----------|-------------|
|
||||
| 0x452A10 | FUN_00452a10 | PhysicsEngine::update | Main simulation loop |
|
||||
Loading…
Add table
Add a link
Reference in a new issue