libpso/src/character/guildcard.rs
2019-09-08 23:48:35 -07:00

142 lines
2.9 KiB
Rust

/*
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);
}
}
}