paavohtl Claude Sonnet 4.6 commited on
Commit
b3d1b2f
·
1 Parent(s): 5071a1d

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