Skip to main content

ed_journals/modules/civilization/models/
engineer.rs

1use crate::try_from_deserialize_impl;
2use serde::Serialize;
3use std::fmt::{Display, Formatter};
4use thiserror::Error;
5
6/// Names of the engineers that are available in the game.
7#[derive(Debug, Serialize, Clone, PartialEq)]
8pub enum Engineer {
9    DidiVatermann,
10    BillTurner,
11    BrooTarquin,
12    TheSarge,
13    ZacariahNemo,
14    LizRyder,
15    HeraTani,
16    FelicityFarseer,
17    RamTah,
18    LeiCheung,
19    PetraOlmanova,
20    ColonelBrisDekker,
21    MarshaHicks,
22    ElviraMartuuk,
23    TheDweller,
24    MarcoQwent,
25    SeleneJean,
26    ProfessorPalin,
27    LoriJameson,
28    JuriIshmaak,
29    TodTheBlasterMcQuinn,
30    TianaFortune,
31    MelBrandon,
32    EtienneDorn,
33    ChloeSedesi,
34    JudeNavarro,
35    DominoGreen,
36    HeroFerrari,
37    KitFowler,
38    WellingtonBeck,
39    TerraVelasquez,
40    UmaLaszlo,
41    OdenGeiger,
42    YardenBond,
43    Baltanos,
44    EleanorBresa,
45    RosaDayette,
46    YiShen,
47
48    /// This is a special engineer that does not actually exist, but seems to be used for
49    /// pre-engineered modules.
50    System,
51}
52
53impl Engineer {
54    pub fn id(&self) -> u64 {
55        match self {
56            Engineer::DidiVatermann => 300000,
57            Engineer::BillTurner => 300010,
58            Engineer::BrooTarquin => 300030,
59            Engineer::TheSarge => 300040,
60            Engineer::ZacariahNemo => 300050,
61            Engineer::LizRyder => 300080,
62            Engineer::HeraTani => 300090,
63            Engineer::FelicityFarseer => 300100,
64            Engineer::RamTah => 300110,
65            Engineer::LeiCheung => 300120,
66            Engineer::PetraOlmanova => 300130,
67            Engineer::ColonelBrisDekker => 300140,
68            Engineer::MarshaHicks => 300150,
69            Engineer::ElviraMartuuk => 300160,
70            Engineer::TheDweller => 300180,
71            Engineer::MarcoQwent => 300200,
72            Engineer::SeleneJean => 300210,
73            Engineer::ProfessorPalin => 300220,
74            Engineer::LoriJameson => 300230,
75            Engineer::JuriIshmaak => 300250,
76            Engineer::TodTheBlasterMcQuinn => 300260,
77            Engineer::TianaFortune => 300270,
78            Engineer::MelBrandon => 300280,
79            Engineer::EtienneDorn => 300290,
80            Engineer::ChloeSedesi => 300300,
81            Engineer::JudeNavarro => 400001,
82            Engineer::DominoGreen => 400002,
83            Engineer::HeroFerrari => 400003,
84            Engineer::KitFowler => 400004,
85            Engineer::WellingtonBeck => 400005,
86            Engineer::TerraVelasquez => 400006,
87            Engineer::UmaLaszlo => 400007,
88            Engineer::OdenGeiger => 400008,
89            Engineer::YardenBond => 400009,
90            Engineer::Baltanos => 400010,
91            Engineer::EleanorBresa => 400011,
92            Engineer::RosaDayette => 400012,
93            Engineer::YiShen => 400013,
94            Engineer::System => 399999,
95        }
96    }
97
98    pub fn get_system_address(&self) -> u64 {
99        match self {
100            Engineer::DidiVatermann => 3932277478114,
101            Engineer::BillTurner => 1109989017963,
102            Engineer::BrooTarquin => 4481966019282,
103            Engineer::TheSarge => 2827992680811,
104            Engineer::ZacariahNemo => 6131367744226,
105            Engineer::LizRyder => 1458309141194,
106            Engineer::HeraTani => 1733321102034,
107            Engineer::FelicityFarseer => 6681123623626,
108            Engineer::RamTah => 3790082132323,
109            Engineer::LeiCheung => 4305444669811,
110            Engineer::PetraOlmanova => 12274907287851,
111            Engineer::ColonelBrisDekker => 10477373803,
112            Engineer::MarshaHicks => 48996147307082,
113            Engineer::ElviraMartuuk => 3107241104074,
114            Engineer::TheDweller => 5031654888146,
115            Engineer::MarcoQwent => 121569805492,
116            Engineer::SeleneJean => 24859942069665,
117            Engineer::ProfessorPalin => 113573366131,
118            Engineer::LoriJameson => 3932277478106,
119            Engineer::JuriIshmaak => 4481899074282,
120            Engineer::TodTheBlasterMcQuinn => 3107576681170,
121            Engineer::TianaFortune => 164098653,
122            Engineer::MelBrandon => 66038577537618,
123            Engineer::EtienneDorn => 11887629902418,
124            Engineer::ChloeSedesi => 594676730147,
125            Engineer::JudeNavarro => 7268024067513,
126            Engineer::DominoGreen => 5068464399785,
127            Engineer::HeroFerrari => 7269634614689,
128            Engineer::KitFowler => 2827975936355,
129            Engineer::WellingtonBeck => 2832832893634,
130            Engineer::TerraVelasquez => 3721329101171,
131            Engineer::UmaLaszlo => 16065190962585,
132            Engineer::OdenGeiger => 8879744226018,
133            Engineer::YardenBond => 670686455169,
134            Engineer::Baltanos => 71536135676490,
135            Engineer::EleanorBresa => 38001031029322,
136            Engineer::RosaDayette => 59166629864010,
137            Engineer::YiShen => 13736779007129,
138            Engineer::System => 0,
139        }
140    }
141
142    pub fn get_market_id(&self) -> u64 {
143        match self {
144            Engineer::DidiVatermann => 128673927,
145            Engineer::BillTurner => 128674183,
146            Engineer::BrooTarquin => 128674695,
147            Engineer::TheSarge => 128674951,
148            Engineer::ZacariahNemo => 128675207,
149            Engineer::LizRyder => 128675975,
150            Engineer::HeraTani => 128676231,
151            Engineer::FelicityFarseer => 128676487,
152            Engineer::RamTah => 128676743,
153            Engineer::LeiCheung => 128676999,
154            Engineer::PetraOlmanova => 128677255,
155            Engineer::ColonelBrisDekker => 128677511,
156            Engineer::MarshaHicks => 128677767,
157            Engineer::ElviraMartuuk => 128678023,
158            Engineer::TheDweller => 128678535,
159            Engineer::MarcoQwent => 128679047,
160            Engineer::SeleneJean => 128679303,
161            Engineer::ProfessorPalin => 128679559,
162            Engineer::LoriJameson => 128679815,
163            Engineer::JuriIshmaak => 128680327,
164            Engineer::TodTheBlasterMcQuinn => 128680583,
165            Engineer::TianaFortune => 128680839,
166            Engineer::MelBrandon => 128681095,
167            Engineer::EtienneDorn => 128681351,
168            Engineer::ChloeSedesi => 128954244,
169            Engineer::JudeNavarro => 128972903,
170            Engineer::DominoGreen => 128973159,
171            Engineer::HeroFerrari => 128973415,
172            Engineer::KitFowler => 128973671,
173            Engineer::WellingtonBeck => 128973927,
174            Engineer::TerraVelasquez => 128974183,
175            Engineer::UmaLaszlo => 128974439,
176            Engineer::OdenGeiger => 128974695,
177            Engineer::YardenBond => 128974951,
178            Engineer::Baltanos => 128986843,
179            Engineer::EleanorBresa => 128987099,
180            Engineer::RosaDayette => 128986587,
181            Engineer::YiShen => 128987355,
182            Engineer::System => 0,
183        }
184    }
185}
186
187impl Display for Engineer {
188    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
189        write!(
190            f,
191            "{}",
192            match self {
193                Engineer::DidiVatermann => "Didi Vatermann",
194                Engineer::BillTurner => "Bill Turner",
195                Engineer::BrooTarquin => "Broo Tarquin",
196                Engineer::TheSarge => "The Sarge",
197                Engineer::ZacariahNemo => "Zacariah Nemo",
198                Engineer::LizRyder => "Liz Ryder",
199                Engineer::HeraTani => "Hera Tani",
200                Engineer::FelicityFarseer => "Felicity Farseer",
201                Engineer::RamTah => "Ram Tah",
202                Engineer::LeiCheung => "Lei Cheung",
203                Engineer::PetraOlmanova => "Petra Olmanova",
204                Engineer::ColonelBrisDekker => "Colonel Bris Dekker",
205                Engineer::MarshaHicks => "Marsha Hicks",
206                Engineer::ElviraMartuuk => "Elvira Martuuk",
207                Engineer::TheDweller => "The Dweller",
208                Engineer::MarcoQwent => "Marco Qwent",
209                Engineer::SeleneJean => "Selene Jean",
210                Engineer::ProfessorPalin => "Professor Palin",
211                Engineer::LoriJameson => "Lori Jameson",
212                Engineer::JuriIshmaak => "Juri Ishmaak",
213                Engineer::TodTheBlasterMcQuinn => "Tod 'The Blaster' McQuinn",
214                Engineer::TianaFortune => "Tiana Fortune",
215                Engineer::MelBrandon => "Mel Brandon",
216                Engineer::EtienneDorn => "Etienne Dorn",
217                Engineer::ChloeSedesi => "Chloe Sedesi",
218                Engineer::JudeNavarro => "Jude Navarro",
219                Engineer::DominoGreen => "Domino Green",
220                Engineer::HeroFerrari => "Hero Ferrari",
221                Engineer::KitFowler => "Kit Fowler",
222                Engineer::WellingtonBeck => "Wellington Beck",
223                Engineer::TerraVelasquez => "Terra Velasquez",
224                Engineer::UmaLaszlo => "Uma Laszlo",
225                Engineer::OdenGeiger => "Oden Geiger",
226                Engineer::YardenBond => "Yarden Bond",
227                Engineer::Baltanos => "Baltanos",
228                Engineer::EleanorBresa => "Eleanor Bresa",
229                Engineer::RosaDayette => "Rosa Dayette",
230                Engineer::YiShen => "Yi Shen",
231                Engineer::System => "System",
232            }
233        )
234    }
235}
236
237#[derive(Debug, Error)]
238pub enum EngineerError {
239    #[error("Unknown engineer for id: {0}")]
240    UnknownEngineerId(u64),
241}
242
243impl TryFrom<u64> for Engineer {
244    type Error = EngineerError;
245
246    fn try_from(value: u64) -> Result<Self, Self::Error> {
247        Ok(match value {
248            300000 => Engineer::DidiVatermann,
249            300010 => Engineer::BillTurner,
250            300030 => Engineer::BrooTarquin,
251            300040 => Engineer::TheSarge,
252            300050 => Engineer::ZacariahNemo,
253            300080 => Engineer::LizRyder,
254            300090 => Engineer::HeraTani,
255            300100 => Engineer::FelicityFarseer,
256            300110 => Engineer::RamTah,
257            300120 => Engineer::LeiCheung,
258            300130 => Engineer::PetraOlmanova,
259            300140 => Engineer::ColonelBrisDekker,
260            300150 => Engineer::MarshaHicks,
261            300160 => Engineer::ElviraMartuuk,
262            300180 => Engineer::TheDweller,
263            300200 => Engineer::MarcoQwent,
264            300210 => Engineer::SeleneJean,
265            300220 => Engineer::ProfessorPalin,
266            300230 => Engineer::LoriJameson,
267            300250 => Engineer::JuriIshmaak,
268            300260 => Engineer::TodTheBlasterMcQuinn,
269            300270 => Engineer::TianaFortune,
270            300280 => Engineer::MelBrandon,
271            300290 => Engineer::EtienneDorn,
272            300300 => Engineer::ChloeSedesi,
273            400001 => Engineer::JudeNavarro,
274            400002 => Engineer::DominoGreen,
275            400003 => Engineer::HeroFerrari,
276            400004 => Engineer::KitFowler,
277            400005 => Engineer::WellingtonBeck,
278            400006 => Engineer::TerraVelasquez,
279            400007 => Engineer::UmaLaszlo,
280            400008 => Engineer::OdenGeiger,
281            400009 => Engineer::YardenBond,
282            400010 => Engineer::Baltanos,
283            400011 => Engineer::EleanorBresa,
284            400012 => Engineer::RosaDayette,
285            400013 => Engineer::YiShen,
286            399999 => Engineer::System,
287
288            _ => return Err(EngineerError::UnknownEngineerId(value)),
289        })
290    }
291}
292
293try_from_deserialize_impl!(u64 => Engineer);