Entity list
ENTITY LIST READING DIAGRAM
===========================
MEMORY STRUCTURE & OFFSET FLOW
-------------------------------
Base Address (Game Module)
|
v
GetWorldOffset() [Pattern Scan]
|
v
World Address + GetWorldOffset() = World Pointer
|
v
World Address + NODE_INFO_OFFSET (0x7C) = Node Info Structure
|
+-- ENTITY_BASE_OFFSET (0x0) = Entity List Base Address
+-- ENTITY_SIZE_OFFSET (0x8) = Entity Count
+-- ENTITY_STEP_OFFSET (0x4) = Entity Size/Step
|
v
Entity List Iteration:
for (i = 0; i < size; i++) {
baseAddr + (i * step) = Entity Node Address
}
|
+-- ENTITY_POINTER_OFFSET (0x10) = Entity Wrapper Pointer
| |
| +-- ENTITY_WRAPPER_OFFSET (0xC4) = Wrapper Data
| |
| +-- ENTITY_WRAPPER_DATA_OFFSET (0x4) = Actual Entity
|
v
|
+-- NAME EXTRACTION:
| ENTITY_COMPONENT_OFFSET (0x58) + 0x64 = Name String Address
|
+-- POSITION EXTRACTION:
| ENTITY_COMPONENT_OFFSET (0x58)
| |
| +-- TRANSFORM_COMPONENT_OFFSET (0xC4) = Transform Component
| |
| +-- TRANSFORM_DATA_OFFSET (0x4) = Transform Data
| |
| +-- POSITION_OFFSET (0x80) = Position Vector [x,y,z]
|
+-- HEALTH EXTRACTION:
0x58 + 0x64 = Health Value (double)
| Offset Name | Value | Usage | Description |
|-----------------------------|--------|--------------------------------------|--------------------------------|
| NODE_INFO_OFFSET | 0x7C | World Address + 0x7C | Entity list node info |
| ENTITY_BASE_OFFSET | 0x0 | Node Info + 0x0 | Entity list base address |
| ENTITY_SIZE_OFFSET | 0x8 | Node Info + 0x8 | Number of entities |
| ENTITY_STEP_OFFSET | 0x4 | Node Info + 0x4 | Entity structure size |
| ENTITY_POINTER_OFFSET | 0x10 | Entity Node + 0x10 | Entity wrapper pointer |
| ENTITY_WRAPPER_OFFSET | 0xC4 | Wrapper + 0xC4 | Wrapper data section |
| ENTITY_WRAPPER_DATA_OFFSET | 0x4 | Wrapper Data + 0x4 | Actual entity pointer |
| ENTITY_COMPONENT_OFFSET | 0x58 | Entity + 0x58 | Component array |
| TRANSFORM_COMPONENT_OFFSET | 0xC4 | Component + 0xC4 | Transform component |
| TRANSFORM_DATA_OFFSET | 0x4 | Transform + 0x4 | Transform data |
| POSITION_OFFSET | 0x80 | Transform Data + 0x80 | Position vector (x,y,z) |
Level 1: World/Entity List
[Base Address] + [World Offset] = World Address
[World Address] + 0x7C = Node Info
[Node Info] + 0x0 = Entity Base
[Node Info] + 0x8 = Entity Count
[Node Info] + 0x4 = Entity Step
Level 2: Entity Node
[Entity Base] + [i * Step] = Entity Node Address
Level 3: Entity Wrapper Resolution
[Entity Node] + 0x10 = Wrapper Pointer
[Wrapper] + 0xC4 = Wrapper Data
[Wrapper Data] + 0x4 = Actual Entity
Level 4: Entity Data
[Entity] + 0x58 + 0x64 = Name String
[Entity] + 0x58 + 0xC4 + 0x4 + 0x80 = Position (x,y,z)
[Entity] + 0x58 + 0x64 = Health Value
Entity Name:
Base → ENTITY_POINTER_OFFSET (0x10) → ENTITY_WRAPPER_OFFSET (0xC4) →
ENTITY_WRAPPER_DATA_OFFSET (0x4) → ENTITY_COMPONENT_OFFSET (0x58) → 0x64
Entity Position:
Base → ENTITY_POINTER_OFFSET (0x10) → ENTITY_WRAPPER_OFFSET (0xC4) →
ENTITY_WRAPPER_DATA_OFFSET (0x4) → ENTITY_COMPONENT_OFFSET (0x58) →
TRANSFORM_COMPONENT_OFFSET (0xC4) → TRANSFORM_DATA_OFFSET (0x4) →
POSITION_OFFSET (0x80) = [x, y, z] float array
Entity Health:
Base → ENTITY_POINTER_OFFSET (0x10) → ENTITY_WRAPPER_OFFSET (0xC4) →
ENTITY_WRAPPER_DATA_OFFSET (0x4) → 0x58 → 0x64 = Health (double)