/* typedef struct bb_guildcard_data { uint8_t unk1[0x0114]; struct { uint32_t guildcard; uint16_t name[0x18]; uint16_t team[0x10]; uint16_t desc[0x58]; uint8_t reserved1; uint8_t language; uint8_t section; uint8_t ch_class; } blocked[29]; uint8_t unk2[0x78]; struct { uint32_t guildcard; uint16_t name[0x18]; uint16_t team[0x10]; uint16_t desc[0x58]; uint8_t reserved1; uint8_t language; uint8_t section; uint8_t ch_class; uint32_t padding; uint16_t comment[0x58]; } entries[104]; uint8_t unk3[0x01BC]; } bb_gc_data_t; */ #[derive(Copy, Clone)] pub struct BlockedGuildCard { pub guildcard: u32, pub name: [u16; 0x18], pub team: [u16; 0x10], pub desc: [u16; 0x58], pub reserved1: u8, pub language: u8, pub section_id: u8, pub class: u8, } impl Default for BlockedGuildCard { fn default() -> BlockedGuildCard { BlockedGuildCard { guildcard: 0, name: [0; 0x18], team: [0; 0x10], desc: [0; 0x58], reserved1: 0, language: 0, section_id: 0, class: 0, } } } #[derive(Copy, Clone)] pub struct GuildCard { pub guildcard: u32, pub name: [u16; 0x18], pub team: [u16; 0x10], pub desc: [u16; 0x58], pub reserved1: u8, pub language: u8, pub section_id: u8, pub class: u8, pub paddding: u32, pub comment: [u16; 0x58], } impl Default for GuildCard { fn default() -> GuildCard { GuildCard { guildcard: 0, name: [0; 0x18], team: [0; 0x10], desc: [0; 0x58], reserved1: 0, language: 0, section_id: 0, class: 0, paddding: 0, comment: [0; 0x58], } } } #[derive(Copy, Clone)] pub struct GuildCardData { pub _unknown1: [u8; 0x114], pub blocked: [BlockedGuildCard; 29], pub _unknown2: [u8; 0x78], pub friends: [GuildCard; 104], pub _unknown3: [u8; 0x1BC], } impl Default for GuildCardData { fn default() -> GuildCardData { GuildCardData { _unknown1: [0; 0x114], blocked: [BlockedGuildCard::default(); 29], _unknown2: [0; 0x78], friends: [GuildCard::default(); 104], _unknown3: [0; 0x1BC], } } } impl GuildCardData { pub fn from_bytes(bytes: [u8; 0xD590]) -> GuildCardData { unsafe { std::mem::transmute(bytes) } } pub fn as_bytes(&self) -> [u8; 0xD590] { unsafe { std::mem::transmute(*self) } } } #[cfg(test)] mod tests { #[test] fn guildcard_default_zero() { let gc = super::GuildCardData::default(); let bytes = gc.as_bytes(); for k in bytes.iter() { assert!(*k == 0); } } }