Skip to main content

homm5_types/creature/
mod.rs

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}