use crate::types::*;
use crate::combat::types::*;
pub struct PartyTemplate {
pub id: &'static str,
pub name: &'static str,
pub hp: i32,
pub nerve: i32,
pub ammo: i32,
pub speed: i32,
pub accuracy: i32,
pub damage: i32,
pub skills: Vec<SkillId>,
pub duo_techs: Vec<DuoTechId>,
}
pub fn galen(phase: AgePhase) -> PartyTemplate {
match phase {
AgePhase::Youth => PartyTemplate {
id: "galen", name: "Galen Rook",
hp: 30, nerve: 20, ammo: 8,
speed: 14, accuracy: 65, damage: 7,
skills: vec![
SkillId::new("quick_draw"),
SkillId::new("snap_shot"),
SkillId::new("duck"),
SkillId::new("sprint"),
],
duo_techs: vec![],
},
AgePhase::YoungMan => PartyTemplate {
id: "galen", name: "Galen Rook",
hp: 35, nerve: 25, ammo: 10,
speed: 13, accuracy: 68, damage: 9,
skills: vec![
SkillId::new("quick_draw"),
SkillId::new("snap_shot"),
SkillId::new("duck"),
SkillId::new("steady_aim"),
SkillId::new("trail_eye"),
SkillId::new("called_shot_basic"),
SkillId::new("cold_read"),
SkillId::new("grit"),
],
duo_techs: vec![],
},
AgePhase::Adult => PartyTemplate {
id: "galen", name: "Galen Rook",
hp: 40, nerve: 30, ammo: 12,
speed: 12, accuracy: 70, damage: 10, skills: vec![
SkillId::new("quick_draw"),
SkillId::new("called_shot"), SkillId::new("take_cover"), SkillId::new("trail_sense"), SkillId::new("rally"), SkillId::new("setup_shot"), SkillId::new("overwatch"), SkillId::new("steady_aim"), SkillId::new("cold_read"),
SkillId::new("grit"),
],
duo_techs: vec![
DuoTechId::new("loaded_deck"), DuoTechId::new("stay_with_me"), ],
},
AgePhase::Older => PartyTemplate {
id: "galen", name: "Galen Rook",
hp: 35, nerve: 35, ammo: 10,
speed: 8, accuracy: 75, damage: 12, skills: vec![
SkillId::new("called_shot_precise"), SkillId::new("overwatch"), SkillId::new("initiative_read"), SkillId::new("party_command"), SkillId::new("judgment_shot"), SkillId::new("steady_aim"), SkillId::new("cold_read"),
SkillId::new("grit"),
],
duo_techs: vec![
DuoTechId::new("loaded_deck"),
DuoTechId::new("stay_with_me"),
],
},
}
}
pub fn eli_adult() -> PartyTemplate {
PartyTemplate {
id: "eli", name: "Eli Winter",
hp: 30, nerve: 25, ammo: 8,
speed: 10, accuracy: 50, damage: 6,
skills: vec![
SkillId::new("sidearm"),
SkillId::new("fast_talk"),
SkillId::new("quick_hands"),
SkillId::new("bluff"),
SkillId::new("dirty_trick"),
SkillId::new("patch_up"),
SkillId::new("read_the_room"), SkillId::new("double_down"), ],
duo_techs: vec![
DuoTechId::new("loaded_deck"),
DuoTechId::new("second_opinion"), ],
}
}
pub fn ada() -> PartyTemplate {
PartyTemplate {
id: "ada", name: "Dr. Ada Mercer",
hp: 25, nerve: 30, ammo: 4, speed: 8, accuracy: 40, damage: 4,
skills: vec![
SkillId::new("treat_wounds"),
SkillId::new("tourniquet"),
SkillId::new("steady_nerves"),
SkillId::new("smelling_salts"),
SkillId::new("derringer"),
],
duo_techs: vec![
DuoTechId::new("stay_with_me"), DuoTechId::new("second_opinion"), ],
}
}
impl PartyTemplate {
pub fn to_combat_tuple(&self) -> (String, String, i32, i32, i32, i32, i32, i32, Vec<SkillId>, Vec<DuoTechId>, Vec<Wound>) {
(
self.id.to_string(),
self.name.to_string(),
self.hp, self.nerve, self.ammo,
self.speed, self.accuracy, self.damage,
self.skills.clone(),
self.duo_techs.clone(),
vec![],
)
}
}
pub fn ch3_party() -> Vec<(String, String, i32, i32, i32, i32, i32, i32, Vec<SkillId>, Vec<DuoTechId>, Vec<Wound>)> {
vec![
galen(AgePhase::Adult).to_combat_tuple(),
eli_adult().to_combat_tuple(),
ada().to_combat_tuple(),
]
}
pub fn ch3_party_pre_ada() -> Vec<(String, String, i32, i32, i32, i32, i32, i32, Vec<SkillId>, Vec<DuoTechId>, Vec<Wound>)> {
vec![
galen(AgePhase::Adult).to_combat_tuple(),
eli_adult().to_combat_tuple(),
]
}
pub fn rosa() -> PartyTemplate {
PartyTemplate {
id: "rosa", name: "Rosa Varela",
hp: 38, nerve: 22, ammo: 6,
speed: 9, accuracy: 55, damage: 11, skills: vec![
SkillId::new("lariat"), SkillId::new("brace"), SkillId::new("rifle_shot"), SkillId::new("grit"), ],
duo_techs: vec![
DuoTechId::new("rope_and_shot"), DuoTechId::new("fencepost_thunder"), ],
}
}
pub fn miriam() -> PartyTemplate {
PartyTemplate {
id: "miriam", name: "Rev. Miriam Slate",
hp: 28, nerve: 35, ammo: 3, speed: 7, accuracy: 35, damage: 3, skills: vec![
SkillId::new("hymn"), SkillId::new("witness"), SkillId::new("sermon"), SkillId::new("rebuke"), SkillId::new("shotgun"), ],
duo_techs: vec![
DuoTechId::new("false_confession"), DuoTechId::new("sheltered_fire"), ],
}
}
pub fn ch5_roster() -> Vec<(String, String, i32, i32, i32, i32, i32, i32, Vec<SkillId>, Vec<DuoTechId>, Vec<Wound>)> {
vec![
galen(AgePhase::Adult).to_combat_tuple(),
eli_adult().to_combat_tuple(),
ada().to_combat_tuple(),
rosa().to_combat_tuple(),
miriam().to_combat_tuple(),
]
}
pub fn lucien() -> PartyTemplate {
PartyTemplate {
id: "lucien", name: "Lucien \"Fuse\" Marr",
hp: 32, nerve: 18, ammo: 5, speed: 8,
accuracy: 48, damage: 8, skills: vec![
SkillId::new("throw_dynamite"), SkillId::new("quick_fuse"), SkillId::new("pistol"), SkillId::new("demolish"), SkillId::new("gut_feeling"), ],
duo_techs: vec![
DuoTechId::new("fencepost_thunder"), ],
}
}
pub fn ch4_party() -> Vec<(String, String, i32, i32, i32, i32, i32, i32, Vec<SkillId>, Vec<DuoTechId>, Vec<Wound>)> {
vec![
galen(AgePhase::Adult).to_combat_tuple(),
eli_adult().to_combat_tuple(),
ada().to_combat_tuple(),
rosa().to_combat_tuple(),
]
}