mirror of
https://github.com/redstrate/Physis.git
synced 2025-04-23 13:17:44 +00:00
Add write support for chardat files
This commit is contained in:
parent
3eec5764a2
commit
30d5cd5996
1 changed files with 47 additions and 2 deletions
|
@ -1,5 +1,5 @@
|
||||||
use crate::gamedata::MemoryBuffer;
|
use crate::gamedata::MemoryBuffer;
|
||||||
use binrw::binread;
|
use binrw::binrw;
|
||||||
use binrw::BinRead;
|
use binrw::BinRead;
|
||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
use crate::race::{Gender, Race, Subrace};
|
use crate::race::{Gender, Race, Subrace};
|
||||||
|
@ -18,6 +18,19 @@ fn convert_dat_race(x: u8) -> Race {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn convert_race_dat(race: &Race) -> u8 {
|
||||||
|
match race {
|
||||||
|
Race::Hyur => 1,
|
||||||
|
Race::Elezen => 2,
|
||||||
|
Race::Lalafell => 3,
|
||||||
|
Race::Miqote => 4,
|
||||||
|
Race::Roegadyn => 5,
|
||||||
|
Race::AuRa => 6,
|
||||||
|
Race::Hrothgar => 7,
|
||||||
|
Race::Viera => 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn convert_dat_gender(x: u8) -> Gender {
|
fn convert_dat_gender(x: u8) -> Gender {
|
||||||
match x {
|
match x {
|
||||||
0 => Gender::Male,
|
0 => Gender::Male,
|
||||||
|
@ -26,6 +39,13 @@ fn convert_dat_gender(x: u8) -> Gender {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn convert_gender_dat(gender: &Gender) -> u8 {
|
||||||
|
match gender {
|
||||||
|
Gender::Male => 0,
|
||||||
|
Gender::Female => 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn convert_dat_subrace(x: u8) -> Subrace {
|
fn convert_dat_subrace(x: u8) -> Subrace {
|
||||||
match x {
|
match x {
|
||||||
1 => Subrace::Midlander,
|
1 => Subrace::Midlander,
|
||||||
|
@ -48,7 +68,28 @@ fn convert_dat_subrace(x: u8) -> Subrace {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[binread]
|
fn convert_subrace_dat(subrace: &Subrace) -> u8 {
|
||||||
|
match subrace {
|
||||||
|
Subrace::Midlander => 1,
|
||||||
|
Subrace::Highlander => 2,
|
||||||
|
Subrace::Wildwood => 3,
|
||||||
|
Subrace::Duskwight => 4,
|
||||||
|
Subrace::Plainsfolk => 5,
|
||||||
|
Subrace::Dunesfolk => 6,
|
||||||
|
Subrace::Seeker => 7,
|
||||||
|
Subrace::Keeper => 8,
|
||||||
|
Subrace:: SeaWolf => 9,
|
||||||
|
Subrace::Hellsguard => 10,
|
||||||
|
Subrace::Raen => 11,
|
||||||
|
Subrace::Xaela => 12,
|
||||||
|
Subrace::Hellion => 13,
|
||||||
|
Subrace::Lost => 14,
|
||||||
|
Subrace::Rava => 15,
|
||||||
|
Subrace::Veena => 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[binrw]
|
||||||
#[br(little)]
|
#[br(little)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[br(magic = 0x2013FF14u32)]
|
#[br(magic = 0x2013FF14u32)]
|
||||||
|
@ -59,16 +100,20 @@ pub struct CharDat { // version 4
|
||||||
pub checksum: u32,
|
pub checksum: u32,
|
||||||
|
|
||||||
#[br(map = | x: u8 | convert_dat_race(x) )]
|
#[br(map = | x: u8 | convert_dat_race(x) )]
|
||||||
|
#[bw(map = | race: &Race | convert_race_dat(race) )]
|
||||||
pub race: Race,
|
pub race: Race,
|
||||||
#[br(map = | x: u8 | convert_dat_gender(x) )]
|
#[br(map = | x: u8 | convert_dat_gender(x) )]
|
||||||
|
#[bw(map = | gender: &Gender | convert_gender_dat(gender) )]
|
||||||
pub gender: Gender,
|
pub gender: Gender,
|
||||||
pub age: u8, // Normal = 1, Old = 3, Young = 4
|
pub age: u8, // Normal = 1, Old = 3, Young = 4
|
||||||
pub height: u8,
|
pub height: u8,
|
||||||
#[br(map = | x: u8 | convert_dat_subrace(x) )]
|
#[br(map = | x: u8 | convert_dat_subrace(x) )]
|
||||||
|
#[bw(map = | subrace: &Subrace | convert_subrace_dat(subrace) )]
|
||||||
pub subrace: Subrace,
|
pub subrace: Subrace,
|
||||||
pub head: u8,
|
pub head: u8,
|
||||||
pub hair: u8,
|
pub hair: u8,
|
||||||
#[br(map = | x: u8 | x != 0 )]
|
#[br(map = | x: u8 | x != 0 )]
|
||||||
|
#[bw(map = | x: &bool | if *x { 1u8 } else { 0u8 } )]
|
||||||
pub enable_highlights: bool,
|
pub enable_highlights: bool,
|
||||||
pub skin_tone: u8,
|
pub skin_tone: u8,
|
||||||
pub right_eye_color: u8,
|
pub right_eye_color: u8,
|
||||||
|
|
Loading…
Add table
Reference in a new issue