feat: add CTaskMissile vtable, label methods in Ghidra, clean up inspector
Browse files- Add CTASK_MISSILE_VTABLE (0x664438) to address.rs
- Add CTaskMissile to KNOWN_VTABLES in debug UI census
- Remove shared_data/owns_data/ddgame from CTask base inspector (same for every entity)
- Ghidra: label CTaskMissile__vtable and rename 6 overridden methods
(Init, Free, HandleMessage, PhysicsUpdate_Maybe, vt12, vt18_GetField130)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
crates/openwa-core/src/address.rs
CHANGED
|
@@ -63,6 +63,8 @@ pub mod va {
|
|
| 63 |
pub const CTASK_SPRITE_ANIM_VTABLE: u32 = 0x0066_9D00;
|
| 64 |
/// CTaskCPU vtable - AI/CPU bot controller (1 per game, constructor 0x548620)
|
| 65 |
pub const CTASK_CPU_VTABLE: u32 = 0x0066_9D54;
|
|
|
|
|
|
|
| 66 |
/// CTaskMine vtable - mine entity (constructor 0x506660)
|
| 67 |
pub const CTASK_MINE_VTABLE: u32 = 0x0066_43E8;
|
| 68 |
/// CTaskOilDrum vtable - oil drum entity (constructor 0x504AF0)
|
|
|
|
| 63 |
pub const CTASK_SPRITE_ANIM_VTABLE: u32 = 0x0066_9D00;
|
| 64 |
/// CTaskCPU vtable - AI/CPU bot controller (1 per game, constructor 0x548620)
|
| 65 |
pub const CTASK_CPU_VTABLE: u32 = 0x0066_9D54;
|
| 66 |
+
/// CTaskMissile vtable - projectile/missile entity (constructor 0x507D10)
|
| 67 |
+
pub const CTASK_MISSILE_VTABLE: u32 = 0x0066_4438;
|
| 68 |
/// CTaskMine vtable - mine entity (constructor 0x506660)
|
| 69 |
pub const CTASK_MINE_VTABLE: u32 = 0x0066_43E8;
|
| 70 |
/// CTaskOilDrum vtable - oil drum entity (constructor 0x504AF0)
|
crates/openwa-debugui/src/app.rs
CHANGED
|
@@ -20,6 +20,7 @@ const KNOWN_VTABLES: &[(u32, &str)] = &[
|
|
| 20 |
(va::CTASK_DIRT_VTABLE, "CTaskDirt"),
|
| 21 |
(va::CTASK_SPRITE_ANIM_VTABLE, "CTaskSpriteAnim"),
|
| 22 |
(va::CTASK_CPU_VTABLE, "CTaskCPU"),
|
|
|
|
| 23 |
(va::CTASK_MINE_VTABLE, "CTaskMine"),
|
| 24 |
(va::CTASK_OILDRUM_VTABLE, "CTaskOilDrum"),
|
| 25 |
(va::CTASK_CLOUD_VTABLE, "CTaskCloud"),
|
|
@@ -344,9 +345,6 @@ impl DebugApp {
|
|
| 344 |
// children_size = slot high-watermark (sparse array); live = non-null slots
|
| 345 |
ui.label("child slots"); ui.label(format!("{} used / {} cap", (*task).children_size, (*task).children_max_size)); ui.end_row();
|
| 346 |
ui.label("class_type"); ui.label(format!("{:?}", (*task).class_type)); ui.end_row();
|
| 347 |
-
ui.label("shared_data"); ui.label(format!("{:#010X}", (*task).shared_data as u32)); ui.end_row();
|
| 348 |
-
ui.label("owns_data"); ui.label(format!("{}", (*task).owns_shared_data)); ui.end_row();
|
| 349 |
-
ui.label("ddgame"); ui.label(format!("{:#010X}", (*task).ddgame as u32)); ui.end_row();
|
| 350 |
});
|
| 351 |
});
|
| 352 |
|
|
|
|
| 20 |
(va::CTASK_DIRT_VTABLE, "CTaskDirt"),
|
| 21 |
(va::CTASK_SPRITE_ANIM_VTABLE, "CTaskSpriteAnim"),
|
| 22 |
(va::CTASK_CPU_VTABLE, "CTaskCPU"),
|
| 23 |
+
(va::CTASK_MISSILE_VTABLE, "CTaskMissile"),
|
| 24 |
(va::CTASK_MINE_VTABLE, "CTaskMine"),
|
| 25 |
(va::CTASK_OILDRUM_VTABLE, "CTaskOilDrum"),
|
| 26 |
(va::CTASK_CLOUD_VTABLE, "CTaskCloud"),
|
|
|
|
| 345 |
// children_size = slot high-watermark (sparse array); live = non-null slots
|
| 346 |
ui.label("child slots"); ui.label(format!("{} used / {} cap", (*task).children_size, (*task).children_max_size)); ui.end_row();
|
| 347 |
ui.label("class_type"); ui.label(format!("{:?}", (*task).class_type)); ui.end_row();
|
|
|
|
|
|
|
|
|
|
| 348 |
});
|
| 349 |
});
|
| 350 |
|