// TODO: ch_class to CharacterClass enum // TODO: section_id to SectionId enum // TODO: techniques to enum? #[derive(Default)] pub struct Character { pub atp: u16, pub mst: u16, pub evp: u16, pub hp: u16, pub dfp: u16, pub ata: u16, pub lck: u16, pub _unknown1: u16, pub _unknown2: [u32; 2], pub level: u32, pub exp: u32, pub meseta: u32, pub guildcard: [u8; 16], pub _unknown3: [u32; 2], pub name_color: u32, pub model: u8, pub _unused: [u8; 11], pub play_time: u32, pub name_color_checksum: u32, pub section_id: u8, pub ch_class: u8, pub v2flags: u8, pub version: u8, pub v1flags: u8, pub costume: u16, pub skin: u16, pub face: u16, pub head: u16, pub hair: u16, pub hair_r: u16, pub hair_g: u16, pub hair_b: u16, pub prop_x: f32, pub prop_y: f32, pub name: [u16; 16], //pub config: [u8; 0xE8], pub techniques: [u8; 0x14], } impl Character { pub fn as_select_screen(self) -> SelectScreenCharacter { SelectScreenCharacter { exp: self.exp, level: self.level, guildcard: self.guildcard, _unknown: self._unknown3, name_color: self.name_color, model: self.model, _unused: [0; 15], name_color_checksum: self.name_color_checksum, section_id: self.section_id, ch_class: self.ch_class, v2flags: self.v2flags, version: self.version, v1flags: self.v1flags, costume: self.costume, skin: self.skin, face: self.face, head: self.head, hair: self.hair, hair_r: self.hair_r, hair_g: self.hair_g, hair_b: self.hair_b, prop_x: self.prop_x, prop_y: self.prop_y, name: self.name, play_time: self.play_time, } } } pub struct SelectScreenCharacter { pub exp: u32, pub level: u32, pub guildcard: [u8; 16], pub _unknown: [u32; 2], pub name_color: u32, pub model: u8, pub _unused: [u8; 15], pub name_color_checksum: u32, pub section_id: u8, pub ch_class: u8, pub v2flags: u8, pub version: u8, pub v1flags: u8, pub costume: u16, pub skin: u16, pub face: u16, pub head: u16, pub hair: u16, pub hair_r: u16, pub hair_g: u16, pub hair_b: u16, pub prop_x: f32, pub prop_y: f32, pub name: [u16; 16], pub play_time: u32, }