File size: 1,334 Bytes
1a163b2 f2d43fe 17e3bdc f2d43fe 17e3bdc 1a163b2 17e3bdc 04e939e 1a163b2 04e939e 17e3bdc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | /// Vtable for InputCtrl (0x66B3FC).
///
/// Only slot 0 (destructor) is known — called on init failure cleanup.
#[openwa_core::vtable(size = 1, va = 0x0066_B3FC, class = "InputCtrl")]
pub struct InputCtrlVtable {
/// Destructor(this, flags) — scalar deleting destructor
#[slot(0)]
pub destructor: fn(this: *mut InputCtrl, flags: u32),
}
/// InputCtrl — input controller subsystem.
///
/// Initializer: FUN_0058C0D0, usercall(ESI=this) + stdcall(4 params), RET 0x10.
/// Vtable: 0x66B3FC.
/// Size: 0x1800 bytes.
///
/// Created by GameEngine__InitHardware when param4 != 0.
/// Stored at GameSession+0xB8.
///
/// OPAQUE: Internal layout not yet mapped beyond vtable and a few known fields.
#[repr(C)]
pub struct InputCtrl {
/// 0x000: Vtable pointer (0x66B3FC)
pub vtable: *const InputCtrlVtable,
pub _unknown_004: [u8; 0xD74 - 4],
/// 0xD74: Set to 0x3F9 during inline construction.
pub _field_d74: u32,
pub _unknown_d78: [u8; 0x1800 - 0xD78],
}
const _: () = assert!(core::mem::size_of::<InputCtrl>() == 0x1800);
// Generate calling wrappers: InputCtrl::destructor()
bind_InputCtrlVtable!(InputCtrl, vtable);
impl InputCtrl {
/// Vtable[0]: Destroy and optionally free (flags & 1 = free).
pub unsafe fn destroy(&mut self, flags: u32) {
self.destructor(flags);
}
}
|