Add methods to manipulate robe tier and color
This commit is contained in:
parent
23b5050811
commit
b1676babe9
@ -54,7 +54,7 @@ pub struct Savefile {
|
|||||||
#[br(count = 8)]
|
#[br(count = 8)]
|
||||||
_unknown0: Vec<u8>,
|
_unknown0: Vec<u8>,
|
||||||
|
|
||||||
pub robe: u32,
|
robe: u32,
|
||||||
|
|
||||||
pub symbol: u32,
|
pub symbol: u32,
|
||||||
|
|
||||||
@ -164,12 +164,33 @@ impl Savefile {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_robe_color(&mut self, color: RobeColor) {
|
||||||
|
self.robe = match (self.robe_color(), color) {
|
||||||
|
(RobeColor::Red, RobeColor::White) => self.robe + 4,
|
||||||
|
(RobeColor::White, RobeColor::Red) => self.robe - 4,
|
||||||
|
_ => return,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn robe_tier(&self) -> u32 {
|
pub fn robe_tier(&self) -> u32 {
|
||||||
match self.robe_color() {
|
match self.robe_color() {
|
||||||
RobeColor::Red => self.robe + 1,
|
RobeColor::Red => self.robe + 1,
|
||||||
RobeColor::White => self.robe - 2,
|
RobeColor::White => self.robe - 2,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_robe_tier(&mut self, tier: u32) {
|
||||||
|
if tier < 1 || tier > 4 {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.robe = match self.robe_color() {
|
||||||
|
RobeColor::Red => tier - 1,
|
||||||
|
// There can't be a tier 1 white robe, setting it to the lowers possible tier
|
||||||
|
RobeColor::White if tier == 1 => 4,
|
||||||
|
RobeColor::White => tier + 2,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[binrw::parser(reader, endian)]
|
#[binrw::parser(reader, endian)]
|
||||||
|
@ -149,6 +149,58 @@ fn murals() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn change_robe_color() {
|
||||||
|
let mut savefile = savefile();
|
||||||
|
|
||||||
|
// lowest tier
|
||||||
|
savefile.robe = 0;
|
||||||
|
|
||||||
|
savefile.set_robe_color(RobeColor::White);
|
||||||
|
assert_eq!(savefile.robe_color(), RobeColor::White);
|
||||||
|
|
||||||
|
savefile.set_robe_color(RobeColor::Red);
|
||||||
|
assert_eq!(savefile.robe_color(), RobeColor::Red);
|
||||||
|
|
||||||
|
// highest tier
|
||||||
|
savefile.robe = 3;
|
||||||
|
|
||||||
|
savefile.set_robe_color(RobeColor::White);
|
||||||
|
assert_eq!(savefile.robe_color(), RobeColor::White);
|
||||||
|
|
||||||
|
savefile.set_robe_color(RobeColor::Red);
|
||||||
|
assert_eq!(savefile.robe_color(), RobeColor::Red);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn change_robe_tier() {
|
||||||
|
let mut savefile = savefile();
|
||||||
|
|
||||||
|
savefile.set_robe_tier(1);
|
||||||
|
assert_eq!(savefile.robe_tier(), 1);
|
||||||
|
assert_eq!(savefile.robe_color(), RobeColor::Red);
|
||||||
|
|
||||||
|
savefile.set_robe_tier(4);
|
||||||
|
assert_eq!(savefile.robe_tier(), 4);
|
||||||
|
assert_eq!(savefile.robe_color(), RobeColor::Red);
|
||||||
|
|
||||||
|
savefile.set_robe_color(RobeColor::White);
|
||||||
|
|
||||||
|
savefile.set_robe_tier(2);
|
||||||
|
assert_eq!(savefile.robe_tier(), 2);
|
||||||
|
assert_eq!(savefile.robe_color(), RobeColor::White);
|
||||||
|
|
||||||
|
savefile.set_robe_tier(1);
|
||||||
|
assert_eq!(savefile.robe_tier(), 2);
|
||||||
|
assert_eq!(savefile.robe_color(), RobeColor::White);
|
||||||
|
|
||||||
|
savefile.set_robe_tier(4);
|
||||||
|
assert_eq!(savefile.robe_tier(), 4);
|
||||||
|
assert_eq!(savefile.robe_color(), RobeColor::White);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fn savefile() -> Savefile {
|
fn savefile() -> Savefile {
|
||||||
const TEST_FILE: &[u8] = include_bytes!("../test.bin");
|
const TEST_FILE: &[u8] = include_bytes!("../test.bin");
|
||||||
let mut savefile = Cursor::new(TEST_FILE);
|
let mut savefile = Cursor::new(TEST_FILE);
|
||||||
|
Loading…
Reference in New Issue
Block a user