Skip to main content

homm5_types/quest/
mod.rs

1use serde::{Serialize, Deserialize};
2use crate::common::{ArmySlot, SkillMastery, FileRef, Trigger};
3
4#[derive(Debug, Deserialize, Serialize, Clone)]
5#[serde(rename = "cell")]
6pub struct Cell {
7    pub x: u8,
8    pub y: u8
9}
10
11#[derive(Debug, Deserialize, Serialize, Clone)]
12pub struct Coordinates {
13    #[serde(rename = "FloorID")]
14    pub floor_id: u8,
15    pub cell: Cell
16}
17
18#[derive(Debug, Deserialize, Serialize, Clone)]
19pub struct Target {
20    #[serde(rename = "Type")]
21    pub _type: String,
22    #[serde(rename = "Name")]
23    pub name: String,
24    #[serde(rename = "Coords")]
25    pub coords: Coordinates
26}
27
28#[derive(Debug, Deserialize, Serialize, Clone)]
29pub struct TargetGlance {
30    #[serde(rename = "Target")]
31    pub target: Target,
32    #[serde(rename = "Radius")]
33    pub radius: u16,
34    #[serde(rename = "Duration")]
35    pub duration: u32
36}
37
38#[derive(Debug, Deserialize, Serialize, Clone)]
39pub struct Resource {
40    #[serde(rename = "Wood")]
41    pub wood: u16,
42    #[serde(rename = "Ore")]
43    pub ore: u16,
44    #[serde(rename = "Mercury")]
45    pub mercury: u16,
46    #[serde(rename = "Crystal")]
47    pub crystal: u16,
48    #[serde(rename = "Sulfur")]
49    pub sulfur: u16,
50    #[serde(rename = "Gem")]
51    pub gem: u16,
52    #[serde(rename = "Gold")]
53    pub gold: u16
54}
55
56#[derive(Debug, Deserialize, Serialize, Clone)]
57pub struct Award {
58    #[serde(rename = "Type")]
59    pub _type: String,
60    #[serde(rename = "Experience")]
61    pub experience: u32,
62    #[serde(rename = "Resources")]
63    pub resources: Resource,
64    #[serde(rename = "Attribute")]
65    pub attribute: String,
66    #[serde(rename = "AttributeAmount")]
67    pub attribute_amount: u16,
68    #[serde(rename = "ArtifactID")]
69    pub artifact_id: String,
70    #[serde(rename = "SpellID")]
71    pub spell_id: String,
72    #[serde(rename = "ArmySlot")]
73    pub army_slot: ArmySlot,
74    #[serde(rename = "SpellPoints")]
75    pub spell_points: u16,
76    #[serde(rename = "Morale")]
77    pub morale: u8,
78    #[serde(rename = "Luck")]
79    pub luck: u8,
80    #[serde(rename = "SkillWithMastery")]
81    pub skill_with_mastery: SkillMastery,
82}
83
84#[derive(Debug, Deserialize, Serialize, Clone)]
85#[serde(rename = "Item")]
86#[allow(non_snake_case)]
87pub struct Quest {
88    #[serde(rename = "Name")]
89    pub name: String,
90    #[serde(rename = "CaptionFileRef")]
91    pub caption_file_ref: FileRef,
92    #[serde(rename = "ObscureCaptionFileRef")]
93    pub obscure_caption_file_ref: FileRef,
94    #[serde(rename = "DescriptionFileRef")]
95    pub description_file_ref: FileRef,
96    #[serde(rename = "ProgressCommentsFileRef")]
97    pub progress_comments_file_ref: FileRef,
98    #[serde(rename = "Kind")]
99    pub kind: String,
100    #[serde(rename = "Parameters")]
101    pub parameters: String,
102    #[serde(rename = "Timeout")]
103    pub timeout: i8,
104    #[serde(rename = "Holdout")]
105    pub holdout: i8,
106    #[serde(rename = "CheckDelay")]
107    pub check_delay: i8,
108    #[serde(rename = "Dependencies")]
109    pub dependencies: String,
110    #[serde(rename = "InstantVictory")]
111    pub instant_victory: bool,
112    #[serde(rename = "TargetGlance")]
113    pub target_glance: TargetGlance,
114    #[serde(rename = "Award")]
115    pub award: Award,
116    #[serde(rename = "TakeContribution")]
117    pub take_contribution: bool,
118    #[serde(rename = "CanUncomplete")]
119    pub can_uncomplete: bool,
120    #[serde(rename = "IsInitialyActive")]
121    pub is_initialy_active: bool,
122    #[serde(rename = "IsInitialyVisible")]
123    pub is_initialy_visible: bool,
124    #[serde(rename = "IsHidden")]
125    pub is_hidden: bool,
126    #[serde(rename = "Ignore")]
127    pub ignore: bool,
128    #[serde(rename = "ShowCompleted")]
129    pub show_completed: bool,
130    #[serde(rename = "NeedComplete")]
131    pub need_complete: bool,
132    #[serde(rename = "StateChangeTrigger")]
133    pub state_change_trigger: Trigger,
134    #[serde(rename = "SoundActivated")]
135    pub sound_activated: String,
136    #[serde(rename = "SoundComplete")]
137    pub sound_complete: String,
138    #[serde(rename = "SoundFailed")]
139    pub sound_failed: String,
140    #[serde(rename = "AllowMultipleActivations")]
141    pub allow_multiple_activations: bool,
142    #[serde(rename = "AllowMultipleCompletions")]
143    pub allow_multiple_completions: bool
144}
145
146#[derive(Serialize, Deserialize, Debug, Clone)]
147pub struct Objectives {
148    #[serde(rename = "Item")]
149    pub items: Option<Vec<Quest>>
150}
151
152#[derive(Serialize, Deserialize, Debug, Clone)]
153pub struct QuestList {
154    #[serde(rename = "Objectives")]
155    pub objectives: Option<Objectives>,
156    #[serde(rename = "DieInWeekWithoutTowns")]
157    pub die_in_week_without_towns: bool
158}