1use serde::{Serialize, Deserialize};
2use crate::{common::{FileRef, Pos}, Homm5Type};
3
4#[derive(Debug, Serialize, Deserialize)]
5#[allow(non_snake_case)]
6pub struct Spell {
7 pub Spell: String,
8 pub Mastery: String,
9}
10
11#[derive(Debug, Serialize, Deserialize)]
12#[allow(non_snake_case)]
13pub struct MagicElement {
14 pub First: String,
15 pub Second: String,
16}
17
18#[derive(Debug, Serialize, Deserialize)]
19#[allow(non_snake_case)]
20pub struct Resources {
21 pub Wood: u16,
22 pub Ore: u16,
23 pub Mercury: u16,
24 pub Crystal: u16,
25 pub Sulfur: u16,
26 pub Gem: u16,
27 pub Gold: u32
28}
29
30#[derive(Debug, Serialize, Deserialize)]
31#[allow(non_snake_case)]
32pub struct Abilities {
33 #[serde(rename = "Item")]
34 pub Abilities: Option<Vec<String>>,
35}
36
37#[derive(Debug, Serialize, Deserialize)]
38pub struct KnownSpells {
39 #[serde(rename = "Item")]
40 pub spells: Option<Vec<Spell>>,
41}
42
43#[derive(Debug, Serialize, Deserialize)]
44#[allow(non_snake_case)]
45pub struct CreatureVisual {
46 pub CreatureNameFileRef: Option<FileRef>,
47 pub DescriptionFileRef: Option<FileRef>,
48 pub Icon128: Option<FileRef>
49}
50
51#[derive(Debug, Serialize, Deserialize)]
52#[allow(non_snake_case)]
53pub struct AdvMapCreatureShared {
54 pub AttackSkill: u16,
55 pub DefenceSkill: u16,
56 pub MinDamage: u16,
57 pub MaxDamage: u16,
58 pub Speed: u8,
59 pub Initiative: u16,
60 pub Flying: bool,
61 pub Health: u32,
62 pub KnownSpells: KnownSpells,
63 pub SpellPoints: u16,
64 pub Exp: u64,
65 pub Power: u64,
66 pub CreatureTier: u8,
67 pub Upgrade: bool,
68 pub PairCreature: String,
69 pub CreatureTown: String,
70 pub MagicElement: MagicElement,
71 pub WeeklyGrowth: u16,
72 pub Cost: Resources,
73 pub SubjectOfRandomGeneration: bool,
74 pub MonsterShared: Option<FileRef>,
75 pub CombatSize: u8,
76 pub Visual: Option<FileRef>,
77 pub Range: i8,
78 pub BaseCreature: Option<String>,
79 #[serde(rename = "Item")]
80 pub Upgrades: Option<Vec<String>>,
81 pub Abilities: Abilities,
82 pub VisualExplained: Option<CreatureVisual>
83}
84
85#[derive(Debug, Serialize, Deserialize)]
86pub struct Stack {
87 #[serde(rename = "Creature")]
88 pub creature: String,
89 #[serde(rename = "CustomAmount")]
90 pub is_custom_amount: bool,
91 #[serde(rename = "Amount")]
92 pub min_count: u32,
93 #[serde(rename = "Amount2")]
94 pub max_count: u32
95}
96
97#[derive(Debug, Serialize, Deserialize)]
98pub struct AdditionalStacks {
99 #[serde(rename = "Item")]
100 pub items: Option<Vec<Stack>>
101}
102
103#[derive(Debug, Serialize, Deserialize)]
104pub struct AdvMapMonster {
105 #[serde(rename = "Pos")]
106 pub pos: Pos,
107 #[serde(rename = "Rot")]
108 pub rot: f32,
109 #[serde(rename = "Floor")]
110 pub floor: u8,
111 #[serde(rename = "Name")]
112 pub name: Option<String>,
113 #[serde(rename = "CombatScript")]
114 pub combat_script: Option<String>,
115 #[serde(rename = "pointLights")]
116 pub point_lights: Option<String>,
117 #[serde(rename = "Shared")]
118 pub shared: Option<FileRef>,
119 #[serde(rename = "Custom")]
120 pub is_custom_amount: bool,
121 #[serde(rename = "Amount")]
122 pub min_count: u32,
123 #[serde(rename = "Amount2")]
124 pub max_count: u32,
125 #[serde(rename = "AttackType")]
126 pub attack_type: String,
127 #[serde(rename = "MoveType")]
128 pub move_type: String,
129 #[serde(rename = "DoesNotGrow")]
130 pub does_not_grow: bool,
131 #[serde(rename = "MessageFileRef")]
132 pub message_file_ref: Option<FileRef>,
133 #[serde(rename = "Script")]
134 pub script: Option<String>,
135 #[serde(rename = "Resources")]
136 pub resources: Resources,
137 #[serde(rename = "ArtifactID")]
138 pub art_id: String,
139 #[serde(rename = "Mood")]
140 pub mood: String,
141 #[serde(rename = "Courage")]
142 pub courage: String,
143 #[serde(rename = "AllowQuickCombat")]
144 pub allow_quick_combat: bool,
145 #[serde(rename = "DoesNotDependOnDifficulty")]
146 pub does_not_depends_on_difficulty: bool,
147 #[serde(rename = "AdditionalStacks")]
148 pub additional_stacks: Option<AdditionalStacks>,
149 #[serde(rename = "SingleMonsterNameFileRef")]
150 pub single_monster_name: Option<FileRef>,
151 #[serde(rename = "MultipleMonstersNameFileRef")]
152 pub multiple_monster_name: Option<FileRef>,
153 #[serde(rename = "RacesRandomGroupID")]
154 pub race_random_group_id: u32,
155 #[serde(rename = "relationsOverrides")]
156 pub relations_override: Option<String>
157}
158
159impl Homm5Type for AdvMapMonster {
160}