Project Alice
Loading...
Searching...
No Matches
fif_common.hpp
Go to the documentation of this file.
1#pragma once
2#include "fif.hpp"
3
4namespace fif {
5
6
7inline constexpr sys::year_month_day civil_from_days(int64_t z) noexcept {
8 z += 719468;
9 const int32_t era = int32_t((z >= 0 ? z : z - 146096) / 146097);
10 unsigned const doe = static_cast<unsigned>(z - era * 146097); // [0, 146096]
11 unsigned const yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; // [0, 399]
12 const int32_t y = static_cast<int32_t>(yoe) + era * 400;
13 unsigned const doy = doe - (365 * yoe + yoe / 4 - yoe / 100); // [0, 365]
14 unsigned const mp = (5 * doy + 2) / 153; // [0, 11]
15 unsigned const d = doy - (153 * mp + 2) / 5 + 1; // [1, 31]
16 unsigned const m = mp < 10 ? mp + 3 : mp - 9; // [1, 12]
17 return sys::year_month_day{ int32_t(y + (m <= 2)), uint16_t(m), uint16_t(d) };
18}
19
20inline int32_t f_date_to_year(int64_t v) {
21 return civil_from_days(v).year;
22}
23inline int32_t f_date_to_month(int64_t v) {
24 return int32_t(civil_from_days(v).month);
25}
26inline int32_t* f_date_to_year_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
29 return p + 2;
30 s.pop_main();
31 s.push_back_main(fif::fif_i32, 0, nullptr);
32 return p + 2;
33 }
34
35 auto r = f_date_to_year(s.main_data_back(0));
36 s.pop_main();
37 s.push_back_main(fif::fif_i32, r, nullptr);
38
39 return p + 2;
40}
41inline int32_t* f_date_to_month_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
44 return p + 2;
45 s.pop_main();
46 s.push_back_main(fif::fif_i32, 0, nullptr);
47 return p + 2;
48 }
49
50 auto r = f_date_to_month(s.main_data_back(0));
51 s.pop_main();
52 s.push_back_main(fif::fif_i32, r, nullptr);
53
54 return p + 2;
55}
56
57inline bool f_empty_adjacent_province(sys::state* state, int32_t p_index) {
58 dcon::province_id p{ dcon::province_id::value_base_t(p_index) };
59 for(auto a : state->world.province_get_province_adjacency(p)) {
60 auto other = a.get_connected_provinces(0) == p ? a.get_connected_provinces(1) : a.get_connected_provinces(0);
61 if(other.get_nation_from_province_ownership() == dcon::nation_id() && other.id.index() < state->province_definitions.first_sea_province.index())
62 return true;
63 }
64 return false;
65}
69 return p + 2;
70 s.pop_main();
71 s.pop_main();
72 s.push_back_main(fif::fif_bool, 0, nullptr);
73 return p + 2;
74 }
75
76 sys::state* state = (sys::state*)(s.main_data_back(0));
77 s.pop_main();
78 int32_t index = int32_t(s.main_data_back(0));
79 s.pop_main();
80
82
83 return p + 2;
84}
85inline bool f_empty_adjacent_state(sys::state* state, int32_t p_index) {
86 dcon::state_instance_id s{ dcon::state_instance_id::value_base_t(p_index) };
87 auto owner = state->world.state_instance_get_nation_from_state_ownership(s);
88 for(auto p : state->world.state_instance_get_definition(s).get_abstract_state_membership()) {
89 if(p.get_province().get_nation_from_province_ownership() == owner) {
90 for(auto a : p.get_province().get_province_adjacency()) {
91 auto other = a.get_connected_provinces(0) == p.get_province() ? a.get_connected_provinces(1) : a.get_connected_provinces(0);
92 if(other.get_nation_from_province_ownership() == dcon::nation_id() && other.id.index() < state->province_definitions.first_sea_province.index())
93 return true;
94 }
95 }
96 }
97 return false;
98}
99inline int32_t* f_empty_adjacent_state_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
102 return p + 2;
103 s.pop_main();
104 s.pop_main();
105 s.push_back_main(fif::fif_bool, 0, nullptr);
106 return p + 2;
107 }
108
109 sys::state* state = (sys::state*)(s.main_data_back(0));
110 s.pop_main();
111 int32_t index = int32_t(s.main_data_back(0));
112 s.pop_main();
113
114 s.push_back_main(fif::fif_bool, f_empty_adjacent_state(state, index), nullptr);
115
116 return p + 2;
117}
118
119
120template<typename F>
121class f_true_accumulator : public F {
122private:
123 ve::tagged_vector<int32_t> value;
124 uint32_t index = 0;
125 int32_t accumulated_mask = 0;
126
127public:
128 bool result = false;
129
130 f_true_accumulator(F&& f) : F(std::move(f)) { }
131
132 inline void add_value(int32_t v) {
133 if(!result) {
134 accumulated_mask |= (int32_t(v != -1) << index);
135 value.set(index++, v);
136
137 if(index == ve::vector_size) {
138 result = (ve::compress_mask(F::operator()(value)).v & accumulated_mask) != 0;
139 value = ve::tagged_vector<int32_t>();
140 index = 0;
141 accumulated_mask = 0;
142 }
143 }
144 }
145 inline void flush() {
146 if(index != 0 && !result) {
147 result = (ve::compress_mask(F::operator()(value)).v & accumulated_mask) != 0;
148 index = 0;
149 }
150 }
151};
152
153template<typename F>
155 return f_true_accumulator<F>(std::forward<F>(f));
156}
157
158
159inline bool f_unowned_core(sys::state* state, int32_t n_index) {
160 dcon::nation_id n{ dcon::nation_id::value_base_t(n_index) };
161 auto nation_tag = state->world.nation_get_identity_from_identity_holder(n);
162
163 auto acc = f_make_true_accumulator([state, n](ve::tagged_vector<int32_t> v) {
164 auto owners = state->world.province_get_nation_from_province_ownership(trigger::to_prov(v));
165 return owners != n;
166 });
167
168 for(auto p : state->world.national_identity_get_core(nation_tag)) {
169 acc.add_value(trigger::to_generic(p.get_province().id));
170 if(acc.result)
171 return true;
172 }
173
174 acc.flush();
175 return acc.result;
176}
177inline int32_t* f_unowned_core_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
180 return p + 2;
181 s.pop_main();
182 s.pop_main();
183 s.push_back_main(fif::fif_bool, 0, nullptr);
184 return p + 2;
185 }
186
187 sys::state* state = (sys::state*)(s.main_data_back(0));
188 s.pop_main();
189 int32_t index = int32_t(s.main_data_back(0));
190 s.pop_main();
191
192 s.push_back_main(fif::fif_bool, f_unowned_core(state, index), nullptr);
193
194 return p + 2;
195}
196inline bool f_core_in_nation(sys::state* state, int32_t n_index, int32_t t_index) {
197 dcon::nation_id n{ dcon::nation_id::value_base_t(n_index) };
198 dcon::national_identity_id t{ dcon::national_identity_id::value_base_t(t_index) };
199
200 for(auto p : state->world.nation_get_province_ownership(n)) {
201 if(state->world.get_core_by_prov_tag_key(p.get_province(), t))
202 return true;
203 }
204 return false;
205}
206inline int32_t* f_core_in_nation_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
209 return p + 2;
210 s.pop_main();
211 s.pop_main();
212 s.pop_main();
213 s.push_back_main(fif::fif_bool, 0, nullptr);
214 return p + 2;
215 }
216
217 sys::state* state = (sys::state*)(s.main_data_back(0));
218 s.pop_main();
219 int32_t nindex = int32_t(s.main_data_back(0));
220 s.pop_main();
221 int32_t tindex = int32_t(s.main_data_back(0));
222 s.pop_main();
223
224 s.push_back_main(fif::fif_bool, f_core_in_nation(state, nindex, tindex), nullptr);
225
226 return p + 2;
227}
228inline bool f_core_in_province(sys::state* state, int32_t p_index, int32_t t_index) {
229 dcon::province_id p{ dcon::province_id::value_base_t(p_index) };
230 dcon::national_identity_id t{ dcon::national_identity_id::value_base_t(t_index) };
231
232 auto core = state->world.get_core_by_prov_tag_key(p, t);
233 return bool(core);
234}
235inline int32_t* f_core_in_province_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
238 return p + 2;
239 s.pop_main();
240 s.pop_main();
241 s.pop_main();
242 s.push_back_main(fif::fif_bool, 0, nullptr);
243 return p + 2;
244 }
245
246 sys::state* state = (sys::state*)(s.main_data_back(0));
247 s.pop_main();
248 int32_t nindex = int32_t(s.main_data_back(0));
249 s.pop_main();
250 int32_t tindex = int32_t(s.main_data_back(0));
251 s.pop_main();
252
253 s.push_back_main(fif::fif_bool, f_core_in_province(state, nindex, tindex), nullptr);
254
255 return p + 2;
256}
257inline bool f_core_in_state(sys::state* state, int32_t s_index, int32_t t_index) {
258 dcon::state_instance_id s{ dcon::state_instance_id::value_base_t(s_index) };
259 dcon::national_identity_id t{ dcon::national_identity_id::value_base_t(t_index) };
260
261 auto ab = state->world.state_instance_get_definition(s);
262 for(auto p : state->world.state_definition_get_abstract_state_membership(ab)) {
263 if(state->world.get_core_by_prov_tag_key(p.get_province(), t))
264 return true;
265 }
266 return false;
267}
268inline int32_t* f_core_in_state_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
271 return p + 2;
272 s.pop_main();
273 s.pop_main();
274 s.pop_main();
275 s.push_back_main(fif::fif_bool, 0, nullptr);
276 return p + 2;
277 }
278
279 sys::state* state = (sys::state*)(s.main_data_back(0));
280 s.pop_main();
281 int32_t nindex = int32_t(s.main_data_back(0));
282 s.pop_main();
283 int32_t tindex = int32_t(s.main_data_back(0));
284 s.pop_main();
285
286 s.push_back_main(fif::fif_bool, f_core_in_state(state, nindex, tindex), nullptr);
287
288 return p + 2;
289}
290inline bool f_core_fully_state(sys::state* state, int32_t s_index, int32_t t_index) {
291 dcon::state_instance_id s{ dcon::state_instance_id::value_base_t(s_index) };
292 dcon::national_identity_id t{ dcon::national_identity_id::value_base_t(t_index) };
293
294 auto ab = state->world.state_instance_get_definition(s);
295 for(auto p : state->world.state_definition_get_abstract_state_membership(ab)) {
296 if(!bool(state->world.get_core_by_prov_tag_key(p.get_province(), t)))
297 return false;
298 }
299 return true;
300}
301inline int32_t* f_core_fully_state_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
304 return p + 2;
305 s.pop_main();
306 s.pop_main();
307 s.pop_main();
308 s.push_back_main(fif::fif_bool, 0, nullptr);
309 return p + 2;
310 }
311
312 sys::state* state = (sys::state*)(s.main_data_back(0));
313 s.pop_main();
314 int32_t nindex = int32_t(s.main_data_back(0));
315 s.pop_main();
316 int32_t tindex = int32_t(s.main_data_back(0));
317 s.pop_main();
318
319 s.push_back_main(fif::fif_bool, f_core_fully_state(state, nindex, tindex), nullptr);
320
321 return p + 2;
322}
323inline bool f_has_cb_against(sys::state* state, int32_t targ_index, int32_t source_index) {
324 dcon::nation_id s{ dcon::nation_id::value_base_t(source_index) };
325 dcon::nation_id t{ dcon::nation_id::value_base_t(targ_index) };
326 return military::can_use_cb_against(*state, s, t);
327}
328inline int32_t* f_has_cb_against_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
331 return p + 2;
332 s.pop_main();
333 s.pop_main();
334 s.pop_main();
335 s.push_back_main(fif::fif_bool, 0, nullptr);
336 return p + 2;
337 }
338
339 sys::state* state = (sys::state*)(s.main_data_back(0));
340 s.pop_main();
341 int32_t nindex = int32_t(s.main_data_back(0));
342 s.pop_main();
343 int32_t tindex = int32_t(s.main_data_back(0));
344 s.pop_main();
345
346 s.push_back_main(fif::fif_bool, f_has_cb_against(state, nindex, tindex), nullptr);
347
348 return p + 2;
349}
350inline bool f_has_access_with(sys::state* state, int32_t targ_index, int32_t source_index) {
351 dcon::nation_id s{ dcon::nation_id::value_base_t(source_index) };
352 dcon::nation_id t{ dcon::nation_id::value_base_t(targ_index) };
353 if(auto p = state->world.get_unilateral_relationship_by_unilateral_pair(t, s); p) {
354 return state->world.unilateral_relationship_get_military_access(p);
355 }
356 return false;
357}
358inline int32_t* f_has_access_with_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
361 return p + 2;
362 s.pop_main(); s.pop_main(); s.pop_main();
363 s.push_back_main(fif::fif_bool, 0, nullptr);
364 return p + 2;
365 }
366
367 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
368 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
369 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
370
371 s.push_back_main(fif::fif_bool, f_has_access_with(state, nindex, tindex), nullptr);
372
373 return p + 2;
374}
375inline bool f_has_any_factory(sys::state* state, int32_t s_index) {
376 dcon::state_instance_id s{ dcon::state_instance_id::value_base_t(s_index) };
377 return economy::has_factory(*state, s);
378}
379inline int32_t* f_has_any_factory_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
382 return p + 2;
383 s.pop_main(); s.pop_main();
384 s.push_back_main(fif::fif_bool, 0, nullptr);
385 return p + 2;
386 }
387
388 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
389 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
390
391 s.push_back_main(fif::fif_bool, f_has_any_factory(state, nindex), nullptr);
392
393 return p + 2;
394}
395inline bool f_has_factory(sys::state* state, int32_t findex, int32_t s_index) {
396 dcon::factory_type_id f{ dcon::factory_type_id::value_base_t(findex) };
397 dcon::state_instance_id s{ dcon::state_instance_id::value_base_t(s_index) };
398 return economy::has_building(*state, s, f);
399}
400inline int32_t* f_has_factory_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
403 return p + 2;
404 s.pop_main(); s.pop_main(); s.pop_main();
405 s.push_back_main(fif::fif_bool, 0, nullptr);
406 return p + 2;
407 }
408
409 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
410 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
411 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
412
413 s.push_back_main(fif::fif_bool, f_has_factory(state, nindex, tindex), nullptr);
414
415 return p + 2;
416}
417inline bool f_has_nmod(sys::state* state, int32_t m_index, int32_t n_index) {
418 dcon::modifier_id f{ dcon::modifier_id::value_base_t(m_index) };
419 dcon::nation_id s{ dcon::nation_id::value_base_t(n_index) };
420 for(auto m : state->world.nation_get_current_modifiers(s)) {
421 if(m.mod_id == f)
422 return true;
423 }
424 return false;
425}
426inline int32_t* f_has_nmod_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
429 return p + 2;
430 s.pop_main(); s.pop_main(); s.pop_main();
431 s.push_back_main(fif::fif_bool, 0, nullptr);
432 return p + 2;
433 }
434
435 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
436 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
437 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
438
439 s.push_back_main(fif::fif_bool, f_has_nmod(state, nindex, tindex), nullptr);
440
441 return p + 2;
442}
443inline bool f_has_pmod(sys::state* state, int32_t m_index, int32_t p_index) {
444 dcon::modifier_id f{ dcon::modifier_id::value_base_t(m_index) };
445 dcon::province_id s{ dcon::province_id::value_base_t(p_index) };
446 for(auto m : state->world.province_get_current_modifiers(s)) {
447 if(m.mod_id == f)
448 return true;
449 }
450 return false;
451}
452inline int32_t* f_has_pmod_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
455 return p + 2;
456 s.pop_main(); s.pop_main(); s.pop_main();
457 s.push_back_main(fif::fif_bool, 0, nullptr);
458 return p + 2;
459 }
460
461 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
462 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
463 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
464
465 s.push_back_main(fif::fif_bool, f_has_pmod(state, nindex, tindex), nullptr);
466
467 return p + 2;
468}
469inline bool f_in_region(sys::state* state, int32_t rindex, int32_t p_index) {
470 dcon::region_id f{ dcon::region_id::value_base_t(rindex) };
471 dcon::province_id s{ dcon::province_id::value_base_t(p_index) };
472 for(auto m : state->world.province_get_region_membership(s)) {
473 if(m.get_region() == f)
474 return true;
475 }
476 return false;
477}
478inline int32_t* f_in_region_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
481 return p + 2;
482 s.pop_main(); s.pop_main(); s.pop_main();
483 s.push_back_main(fif::fif_bool, 0, nullptr);
484 return p + 2;
485 }
486
487 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
488 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
489 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
490
491 s.push_back_main(fif::fif_bool, f_in_region(state, nindex, tindex), nullptr);
492
493 return p + 2;
494}
495inline bool f_owns_region(sys::state* state, int32_t rindex, int32_t n_index) {
496 dcon::region_id f{ dcon::region_id::value_base_t(rindex) };
497 dcon::nation_id s{ dcon::nation_id::value_base_t(n_index) };
498 for(auto m : state->world.region_get_region_membership(f)) {
499 if(m.get_province().get_nation_from_province_ownership() != s)
500 return false;
501 }
502 return true;
503}
504inline int32_t* f_owns_region_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
507 return p + 2;
508 s.pop_main(); s.pop_main(); s.pop_main();
509 s.push_back_main(fif::fif_bool, 0, nullptr);
510 return p + 2;
511 }
512
513 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
514 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
515 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
516
517 s.push_back_main(fif::fif_bool, f_owns_region(state, nindex, tindex), nullptr);
518
519 return p + 2;
520}
521inline bool f_owns_state(sys::state* state, int32_t rindex, int32_t n_index) {
522 dcon::state_definition_id f{ dcon::state_definition_id::value_base_t(rindex) };
523 dcon::nation_id s{ dcon::nation_id::value_base_t(n_index) };
524 for(auto m : state->world.state_definition_get_abstract_state_membership(f)) {
525 if(m.get_province().get_nation_from_province_ownership() != s)
526 return false;
527 }
528 return true;
529}
530inline int32_t* f_owns_state_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
533 return p + 2;
534 s.pop_main(); s.pop_main(); s.pop_main();
535 s.push_back_main(fif::fif_bool, 0, nullptr);
536 return p + 2;
537 }
538
539 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
540 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
541 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
542
543 s.push_back_main(fif::fif_bool, f_owns_state(state, nindex, tindex), nullptr);
544
545 return p + 2;
546}
547inline bool f_nation_a(sys::state* state, int32_t aindex, int32_t bindex) {
548 dcon::nation_id a{ dcon::nation_id::value_base_t(aindex) };
549 dcon::nation_id b{ dcon::nation_id::value_base_t(bindex) };
550 return bool(state->world.get_nation_adjacency_by_nation_adjacency_pair(a, b));
551}
552inline int32_t* f_nation_a_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
555 return p + 2;
556 s.pop_main(); s.pop_main(); s.pop_main();
557 s.push_back_main(fif::fif_bool, 0, nullptr);
558 return p + 2;
559 }
560
561 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
562 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
563 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
564
565 s.push_back_main(fif::fif_bool, f_nation_a(state, nindex, tindex), nullptr);
566
567 return p + 2;
568}
569inline bool f_units_in_state(sys::state* state, int32_t sindex, int32_t nindex) {
570 dcon::state_instance_id s{ dcon::state_instance_id::value_base_t(sindex) };
571 dcon::nation_id n{ dcon::nation_id::value_base_t(nindex) };
572
573 for(auto p : state->world.state_definition_get_abstract_state_membership(state->world.state_instance_get_definition(s))) {
574 if(p.get_province().get_state_membership() == s) {
575 for(auto a : state->world.province_get_army_location(p.get_province())) {
576 if(a.get_army().get_controller_from_army_control() == n)
577 return true;
578 }
579 }
580 }
581 return false;
582}
583inline int32_t* f_units_in_state_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
586 return p + 2;
587 s.pop_main(); s.pop_main(); s.pop_main();
588 s.push_back_main(fif::fif_bool, 0, nullptr);
589 return p + 2;
590 }
591
592 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
593 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
594 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
595
596 s.push_back_main(fif::fif_bool, f_units_in_state(state, nindex, tindex), nullptr);
597
598 return p + 2;
599}
600inline bool f_units_in_province(sys::state* state, int32_t sindex, int32_t nindex) {
601 dcon::province_id s{ dcon::province_id::value_base_t(sindex) };
602 dcon::nation_id n{ dcon::nation_id::value_base_t(nindex) };
603
604 for(auto a : state->world.province_get_army_location(s)) {
605 if(a.get_army().get_controller_from_army_control() == n)
606 return true;
607 }
608 return false;
609}
610inline int32_t* f_units_in_province_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
613 return p + 2;
614 s.pop_main(); s.pop_main(); s.pop_main();
615 s.push_back_main(fif::fif_bool, 0, nullptr);
616 return p + 2;
617 }
618
619 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
620 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
621 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
622
623 s.push_back_main(fif::fif_bool, f_units_in_province(state, nindex, tindex), nullptr);
624
625 return p + 2;
626}
627inline int32_t f_count_p_units(sys::state* state, int32_t sindex) {
628 dcon::province_id s{ dcon::province_id::value_base_t(sindex) };
629
630 int32_t total = 0;
631 for(auto a : state->world.province_get_army_location(s)) {
632 auto mrange = a.get_army().get_army_membership();
633 total += int32_t(mrange.end() - mrange.begin());
634 }
635 return total;
636}
637inline int32_t* f_count_p_units_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
640 return p + 2;
641 s.pop_main(); s.pop_main();
642 s.push_back_main(fif::fif_i32, 0, nullptr);
643 return p + 2;
644 }
645
646 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
647 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
648
649 s.push_back_main(fif::fif_i32, f_count_p_units(state, nindex), nullptr);
650
651 return p + 2;
652}
653inline bool f_are_at_war(sys::state* state, int32_t sindex, int32_t nindex) {
654 dcon::nation_id s{ dcon::nation_id::value_base_t(sindex) };
655 dcon::nation_id n{ dcon::nation_id::value_base_t(nindex) };
656 return military::are_at_war(*state, s, n);
657}
658inline int32_t* f_are_at_war_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
661 return p + 2;
662 s.pop_main(); s.pop_main(); s.pop_main();
663 s.push_back_main(fif::fif_bool, 0, nullptr);
664 return p + 2;
665 }
666
667 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
668 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
669 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
670
671 s.push_back_main(fif::fif_bool, f_units_in_province(state, nindex, tindex), nullptr);
672
673 return p + 2;
674}
675inline bool f_general_in_p(sys::state* state, int32_t sindex) {
676 dcon::province_id s{ dcon::province_id::value_base_t(sindex) };
677 for(const auto ar : state->world.province_get_army_location(s)) {
678 if(state->world.army_leadership_get_general(state->world.army_get_army_leadership(state->world.army_location_get_army(ar)))) {
679 return true;
680 }
681 }
682 return false;
683}
684inline int32_t* f_general_in_p_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
687 return p + 2;
688 s.pop_main(); s.pop_main();
689 s.push_back_main(fif::fif_bool, 0, nullptr);
690 return p + 2;
691 }
692
693 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
694 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
695
696 s.push_back_main(fif::fif_bool, f_general_in_p(state, nindex), nullptr);
697
698 return p + 2;
699}
700inline int32_t f_count_ships(sys::state* state, int32_t sindex) {
701 dcon::nation_id s{ dcon::nation_id::value_base_t(sindex) };
702
703 int32_t total = 0;
704 for(auto a : state->world.nation_get_navy_control(s)) {
705 auto mrange = a.get_navy().get_navy_membership();
706 total += int32_t(mrange.end() - mrange.begin());
707 }
708 return total;
709}
710inline int32_t* f_count_ships_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
713 return p + 2;
714 s.pop_main(); s.pop_main();
715 s.push_back_main(fif::fif_i32, 0, nullptr);
716 return p + 2;
717 }
718
719 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
720 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
721
722 s.push_back_main(fif::fif_i32, f_count_ships(state, nindex), nullptr);
723
724 return p + 2;
725}
726inline bool f_coastal_s(sys::state* state, int32_t sindex) {
727 dcon::state_instance_id s{ dcon::state_instance_id::value_base_t(sindex) };
728 return province::state_is_coastal(*state, s);
729}
730inline int32_t* f_coastal_s_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
733 return p + 2;
734 s.pop_main(); s.pop_main();
735 s.push_back_main(fif::fif_bool, 0, nullptr);
736 return p + 2;
737 }
738
739 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
740 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
741
742 s.push_back_main(fif::fif_bool, f_coastal_s(state, nindex), nullptr);
743
744 return p + 2;
745}
746inline bool f_state_produces(sys::state* state, int32_t cindex, int32_t sindex) {
747 dcon::commodity_id c{ dcon::commodity_id::value_base_t(cindex) };
748 dcon::state_instance_id si{ dcon::state_instance_id::value_base_t(sindex) };
749
750 auto o = state->world.state_instance_get_nation_from_state_ownership(si);
751 auto d = state->world.state_instance_get_definition(si);
752 for(auto p : state->world.state_definition_get_abstract_state_membership(d)) {
753 if(p.get_province().get_nation_from_province_ownership() == o) {
754 if(p.get_province().get_rgo() == c)
755 return true;
756 for(auto f : p.get_province().get_factory_location()) {
757 if(f.get_factory().get_building_type().get_output() == c)
758 return true;
759 }
760 }
761 }
762
763 return false;
764}
765inline int32_t* f_state_produces_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
768 return p + 2;
769 s.pop_main(); s.pop_main(); s.pop_main();
770 s.push_back_main(fif::fif_bool, 0, nullptr);
771 return p + 2;
772 }
773
774 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
775 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
776 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
777
778 s.push_back_main(fif::fif_bool, f_state_produces(state, nindex, tindex), nullptr);
779
780 return p + 2;
781}
782inline bool f_has_culture_core(sys::state* state, int32_t cindex, int32_t sindex) {
783 dcon::culture_id c{ dcon::culture_id::value_base_t(cindex) };
784 dcon::province_id p{ dcon::province_id::value_base_t(sindex) };
785
786 for(auto co : state->world.province_get_core(p)) {
787 if(co.get_identity().get_primary_culture() == c)
788 return true;
789 }
790 return false;
791}
792inline int32_t* f_has_culture_core_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
795 return p + 2;
796 s.pop_main(); s.pop_main(); s.pop_main();
797 s.push_back_main(fif::fif_bool, 0, nullptr);
798 return p + 2;
799 }
800
801 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
802 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
803 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
804
805 s.push_back_main(fif::fif_bool, f_has_culture_core(state, nindex, tindex), nullptr);
806
807 return p + 2;
808}
809inline bool f_canal_enabled(sys::state* state, int32_t sindex) {
810 return (state->world.province_adjacency_get_type(state->province_definitions.canals[sindex]) & province::border::impassible_bit) == 0;
811}
812inline int32_t* f_canal_enabled_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
815 return p + 2;
816 s.pop_main(); s.pop_main();
817 s.push_back_main(fif::fif_bool, 0, nullptr);
818 return p + 2;
819 }
820
821 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
822 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
823
824 s.push_back_main(fif::fif_bool, f_canal_enabled(state, nindex), nullptr);
825
826 return p + 2;
827}
828inline bool f_truce_with(sys::state* state, int32_t tindex, int32_t sindex) {
829 dcon::nation_id target{ dcon::nation_id::value_base_t(tindex) };
830 dcon::nation_id source{ dcon::nation_id::value_base_t(sindex) };
831
832 return military::has_truce_with(*state, source, target);
833}
834inline int32_t* f_truce_with_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
837 return p + 2;
838 s.pop_main(); s.pop_main(); s.pop_main();
839 s.push_back_main(fif::fif_bool, 0, nullptr);
840 return p + 2;
841 }
842
843 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
844 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
845 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
846
847 s.push_back_main(fif::fif_bool, f_truce_with(state, nindex, tindex), nullptr);
848
849 return p + 2;
850}
851inline bool f_has_named_leader(sys::state* state, int32_t name, int32_t nindex) {
852 dcon::nation_id n{ dcon::nation_id::value_base_t(nindex) };
853 dcon::unit_name_id t{ dcon::unit_name_id::value_base_t(name) };
854
855 for(auto l : state->world.nation_get_leader_loyalty(n)) {
856 auto lname = l.get_leader().get_name();
857 if(state->to_string_view(lname) == state->to_string_view(t))
858 return true;
859 }
860 return false;
861}
862inline int32_t* f_has_named_leader_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
865 return p + 2;
866 s.pop_main(); s.pop_main(); s.pop_main();
867 s.push_back_main(fif::fif_bool, 0, nullptr);
868 return p + 2;
869 }
870
871 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
872 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
873 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
874
875 s.push_back_main(fif::fif_bool, f_has_named_leader(state, nindex, tindex), nullptr);
876
877 return p + 2;
878}
879inline bool f_can_release(sys::state* state, int32_t tindex, int32_t nindex) {
880 dcon::nation_id n{ dcon::nation_id::value_base_t(nindex) };
881 dcon::national_identity_id t{ dcon::national_identity_id::value_base_t(tindex) };
882 return nations::can_release_as_vassal(*state, n, t);
883}
884inline int32_t* f_can_release_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
887 return p + 2;
888 s.pop_main(); s.pop_main(); s.pop_main();
889 s.push_back_main(fif::fif_bool, 0, nullptr);
890 return p + 2;
891 }
892
893 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
894 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
895 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
896
897 s.push_back_main(fif::fif_bool, f_can_release(state, nindex, tindex), nullptr);
898
899 return p + 2;
900}
901inline bool f_are_allied(sys::state* state, int32_t tindex, int32_t sindex) {
902 dcon::nation_id target{ dcon::nation_id::value_base_t(tindex) };
903 dcon::nation_id source{ dcon::nation_id::value_base_t(sindex) };
904
905 return nations::are_allied(*state, source, target);
906}
907inline int32_t* f_are_allied_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
910 return p + 2;
911 s.pop_main(); s.pop_main(); s.pop_main();
912 s.push_back_main(fif::fif_bool, 0, nullptr);
913 return p + 2;
914 }
915
916 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
917 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
918 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
919
920 s.push_back_main(fif::fif_bool, f_are_allied(state, nindex, tindex), nullptr);
921 return p + 2;
922}
923inline bool f_nation_has_any_factory(sys::state* state, int32_t s_index) {
924 dcon::nation_id s{ dcon::nation_id::value_base_t(s_index) };
925 for(auto p : state->world.nation_get_province_ownership(s)) {
926 auto rng = p.get_province().get_factory_location();
927 if(rng.begin() != rng.end())
928 return true;
929 }
930 return false;
931}
935 return p + 2;
936 s.pop_main(); s.pop_main();
937 s.push_back_main(fif::fif_bool, 0, nullptr);
938 return p + 2;
939 }
940
941 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
942 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
943
944 s.push_back_main(fif::fif_bool, f_nation_has_any_factory(state, nindex), nullptr);
945 return p + 2;
946}
947inline bool f_is_bankrupt_debtor_to(sys::state* state, int32_t tindex, int32_t sindex) {
948 dcon::nation_id target{ dcon::nation_id::value_base_t(tindex) };
949 dcon::nation_id source{ dcon::nation_id::value_base_t(sindex) };
950
951 return economy::is_bankrupt_debtor_to(*state, source, target);
952}
956 return p + 2;
957 s.pop_main(); s.pop_main(); s.pop_main();
958 s.push_back_main(fif::fif_bool, 0, nullptr);
959 return p + 2;
960 }
961
962 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
963 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
964 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
965
966 s.push_back_main(fif::fif_bool, f_is_bankrupt_debtor_to(state, nindex, tindex), nullptr);
967 return p + 2;
968}
969inline bool f_global_flag_set(sys::state* state, int32_t s_index) {
970 dcon::global_flag_id s{ dcon::global_flag_id::value_base_t(s_index) };
971 return state->national_definitions.is_global_flag_variable_set(s);
972}
973inline int32_t* f_global_flag_set_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
976 return p + 2;
977 s.pop_main(); s.pop_main();
978 s.push_back_main(fif::fif_bool, 0, nullptr);
979 return p + 2;
980 }
981
982 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
983 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
984
985 s.push_back_main(fif::fif_bool, f_global_flag_set(state, nindex), nullptr);
986 return p + 2;
987}
988inline bool f_can_nationalize(sys::state* state, int32_t s_index) {
989 dcon::nation_id s{ dcon::nation_id::value_base_t(s_index) };
990 for(auto c : state->world.nation_get_unilateral_relationship_as_target(s)) {
991 if(c.get_foreign_investment() > 0.0f)
992 return true;
993 }
994 return false;
995}
996inline int32_t* f_can_nationalize_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
999 return p + 2;
1000 s.pop_main(); s.pop_main();
1001 s.push_back_main(fif::fif_bool, 0, nullptr);
1002 return p + 2;
1003 }
1004
1005 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
1006 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
1007
1008 s.push_back_main(fif::fif_bool, f_can_nationalize(state, nindex), nullptr);
1009 return p + 2;
1010}
1011inline float f_movement_str(sys::state* state, bool is_social, int32_t s_index) {
1012 dcon::nation_id s{ dcon::nation_id::value_base_t(s_index) };
1014
1015 float max_str = 0.0f;
1016 for(auto m : state->world.nation_get_movement_within(s)) {
1017 auto issue = m.get_movement().get_associated_issue_option();
1018 if(issue) {
1019 if(culture::issue_type(issue.get_parent_issue().get_issue_type()) == itype && m.get_movement().get_pop_support() > max_str) {
1020 max_str = m.get_movement().get_pop_support();
1021 }
1022 }
1023 }
1024 auto ncpop = state->world.nation_get_non_colonial_population(s);
1025 return ncpop > 0.0f ? max_str * state->defines.movement_support_uh_factor / ncpop : 0.0f;
1026}
1027inline int32_t* f_movement_str_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
1030 return p + 2;
1031 s.pop_main(); s.pop_main(); s.pop_main();
1032 s.push_back_main(fif::fif_f32, 0, nullptr);
1033 return p + 2;
1034 }
1035
1036 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
1037 bool social = s.main_data_back(0) != 0; s.pop_main();
1038 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
1039
1040 auto fres = f_movement_str(state, social, nindex);
1041 int64_t data = 0;
1042 memcpy(&data, &fres, 4);
1043 s.push_back_main(fif::fif_f32, data, nullptr);
1044 return p + 2;
1045}
1046inline float f_influence_on(sys::state* state, int32_t t_index, int32_t n_index) {
1047 dcon::nation_id gp{ dcon::nation_id::value_base_t(n_index) };
1048 dcon::nation_id t{ dcon::nation_id::value_base_t(t_index) };
1049
1050 auto gpr = state->world.get_gp_relationship_by_gp_influence_pair(t, gp);
1051 return state->world.gp_relationship_get_influence(gpr);
1052}
1053inline int32_t* f_influence_on_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
1056 return p + 2;
1057 s.pop_main(); s.pop_main(); s.pop_main();
1058 s.push_back_main(fif::fif_f32, 0, nullptr);
1059 return p + 2;
1060 }
1061
1062 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
1063 int32_t sindex = int32_t(s.main_data_back(0)); s.pop_main();
1064 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
1065
1066 auto fres = f_influence_on(state, sindex, nindex);
1067 int64_t data = 0;
1068 memcpy(&data, &fres, 4);
1069 s.push_back_main(fif::fif_f32, data, nullptr);
1070 return p + 2;
1071}
1072inline float f_relations(sys::state* state, int32_t t_index, int32_t n_index) {
1073 dcon::nation_id n{ dcon::nation_id::value_base_t(n_index) };
1074 dcon::nation_id t{ dcon::nation_id::value_base_t(t_index) };
1075
1076 auto rel = state->world.get_diplomatic_relation_by_diplomatic_pair(t, n);
1077 return state->world.diplomatic_relation_get_value(rel);
1078}
1079inline int32_t* f_relations_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
1082 return p + 2;
1083 s.pop_main(); s.pop_main(); s.pop_main();
1084 s.push_back_main(fif::fif_f32, 0, nullptr);
1085 return p + 2;
1086 }
1087
1088 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
1089 int32_t sindex = int32_t(s.main_data_back(0)); s.pop_main();
1090 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
1091
1092 auto fres = f_relations(state, sindex, nindex);
1093 int64_t data = 0;
1094 memcpy(&data, &fres, 4);
1095 s.push_back_main(fif::fif_f32, data, nullptr);
1096 return p + 2;
1097}
1098inline bool f_has_union_sphere(sys::state* state, int32_t s_index) {
1099 dcon::nation_id n{ dcon::nation_id::value_base_t(s_index) };
1100 auto prim_culture = state->world.nation_get_primary_culture(n);
1101 auto culture_group = state->world.culture_get_group_from_culture_group_membership(prim_culture);
1102
1103 for(auto s : state->world.nation_get_gp_relationship_as_great_power(n)) {
1105 s.get_influence_target().get_primary_culture().get_group_from_culture_group_membership() == culture_group) {
1106 return true;
1107 }
1108 }
1109 return false;
1110}
1111inline int32_t* f_has_union_sphere_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
1114 return p + 2;
1115 s.pop_main(); s.pop_main();
1116 s.push_back_main(fif::fif_bool, 0, nullptr);
1117 return p + 2;
1118 }
1119
1120 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
1121 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
1122
1123 s.push_back_main(fif::fif_bool, f_has_union_sphere(state, nindex), nullptr);
1124 return p + 2;
1125}
1126inline bool f_state_rgo(sys::state* state, int32_t cindex, int32_t sindex) {
1127 dcon::commodity_id c{ dcon::commodity_id::value_base_t(cindex) };
1128 dcon::state_instance_id si{ dcon::state_instance_id::value_base_t(sindex) };
1129
1130 auto o = state->world.state_instance_get_nation_from_state_ownership(si);
1131 auto d = state->world.state_instance_get_definition(si);
1132 for(auto p : state->world.state_definition_get_abstract_state_membership(d)) {
1133 if(p.get_province().get_nation_from_province_ownership() == o) {
1134 if(p.get_province().get_rgo() == c)
1135 return true;
1136 }
1137 }
1138
1139 return false;
1140}
1141inline int32_t* f_state_rgo_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
1144 return p + 2;
1145 s.pop_main(); s.pop_main(); s.pop_main();
1146 s.push_back_main(fif::fif_bool, 0, nullptr);
1147 return p + 2;
1148 }
1149
1150 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
1151 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
1152 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
1153
1154 s.push_back_main(fif::fif_bool, f_state_rgo(state, nindex, tindex), nullptr);
1155 return p + 2;
1156}
1157inline bool f_in_crisis(sys::state* state, int32_t nindex) {
1158 dcon::nation_id n{ dcon::nation_id::value_base_t(nindex) };
1159
1160 auto sz = state->crisis_participants.size();
1161 for(uint32_t i = 0; i < sz; ++i) {
1162 if(!state->crisis_participants[i].id)
1163 return false;
1164 if(state->crisis_participants[i].id == n)
1165 return true;
1166 }
1167 return false;
1168}
1169inline int32_t* f_in_crisis_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
1172 return p + 2;
1173 s.pop_main(); s.pop_main();
1174 s.push_back_main(fif::fif_bool, 0, nullptr);
1175 return p + 2;
1176 }
1177
1178 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
1179 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
1180
1181 s.push_back_main(fif::fif_bool, f_in_crisis(state, nindex), nullptr);
1182 return p + 2;
1183}
1184inline bool f_can_build_naval_base(sys::state* state, int32_t cindex, int32_t sindex) {
1185 dcon::province_id p{ dcon::province_id::value_base_t(cindex) };
1186 dcon::nation_id n{ dcon::nation_id::value_base_t(sindex) };
1187
1188 return state->world.province_get_is_coast(p)
1189 && (state->world.province_get_building_level(p, uint8_t(economy::province_building_type::naval_base)) < state->world.nation_get_max_building_level(n, uint8_t(economy::province_building_type::naval_base)))
1190 && (state->world.province_get_building_level(p, uint8_t(economy::province_building_type::naval_base)) != 0 || !military::state_has_naval_base(*state, state->world.province_get_state_membership(p)));
1191}
1195 return p + 2;
1196 s.pop_main(); s.pop_main(); s.pop_main();
1197 s.push_back_main(fif::fif_bool, 0, nullptr);
1198 return p + 2;
1199 }
1200
1201 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
1202 int32_t nindex = int32_t(s.main_data_back(0)); s.pop_main();
1203 int32_t tindex = int32_t(s.main_data_back(0)); s.pop_main();
1204
1205 s.push_back_main(fif::fif_bool, f_can_build_naval_base(state, nindex, tindex), nullptr);
1206 return p + 2;
1207}
1208inline void* f_ranked_nations(sys::state* state) {
1209 return state->nations_by_rank.data();
1210}
1211inline int32_t* f_ranked_nations_b(fif::state_stack& s, int32_t* p, fif::environment* e) {
1214 return p + 2;
1215 s.pop_main();
1216 s.push_back_main(fif::fif_opaque_ptr, 0, nullptr);
1217 return p + 2;
1218 }
1219
1220 sys::state* state = (sys::state*)(s.main_data_back(0)); s.pop_main();
1221 int64_t res = (int64_t)(f_ranked_nations(state));
1222
1223 s.push_back_main(fif::fif_opaque_ptr, res, nullptr);
1224 return p + 2;
1225}
1226
1227inline std::string state_to_owner() {
1228 return "state_ownership-state nation @ ";
1229}
1230inline std::string province_to_owner() {
1231 return "province_ownership-province nation @ ";
1232}
1233inline std::string province_to_controller() {
1234 return "province_control-province nation @ ";
1235}
1236inline std::string pop_to_location() {
1237 return "pop_location-pop province @ ";
1238}
1239inline std::string pop_to_owner() {
1241}
1242inline std::string nation_to_tag() {
1243 return "identity_holder-nation @ identity ";
1244}
1245inline std::string tag_to_nation() {
1246 return "identity_holder-identity nation @ ";
1247}
1248
1251
1252 fif::interpreter_stack values{ };
1253
1254 fif::run_fif_interpreter(env, fif::container_interface(), values);
1255
1256 values.push_back_main(fif::fif_opaque_ptr, (int64_t)(&(state.world)), nullptr);
1257 fif::run_fif_interpreter(env, "set-container ", values);
1258 values.push_back_main(fif::fif_opaque_ptr, (int64_t)(dcon::shared_backing_storage.allocation), nullptr);
1259 fif::run_fif_interpreter(env, "set-vector-storage ", values);
1260
1262 " ptr(nil) global state-ptr "
1263 " : set-state state-ptr ! ; "
1264 " :export set_state ptr(nil) set-state ; ",
1265 values);
1266
1267 values.push_back_main(fif::fif_opaque_ptr, (int64_t)(&state), nullptr);
1268 fif::run_fif_interpreter(env, "set-state", values);
1269
1270 //fif::run_fif_interpreter(env, "ptr(nil) global state-ptr state-ptr ! ", values);
1271
1272 auto nation_id_type = env.dict.types.find("nation_id")->second;
1273 auto prov_id_type = env.dict.types.find("province_id")->second;
1274
1275 fif::add_import("current-year", (void *) f_date_to_year, f_date_to_year_b, { fif::fif_i64 }, { fif::fif_i32 }, env);
1276 fif::add_import("current-month", (void *) f_date_to_month, f_date_to_month_b, { fif::fif_i64 }, { fif::fif_i32 }, env);
1298 fif::add_import("general-in-province?", (void *) f_general_in_p, f_general_in_p_b, { fif::fif_i32, fif::fif_opaque_ptr }, { fif::fif_bool }, env);
1314 fif::add_import("state-has-rgo?", (void *) f_state_rgo, f_state_rgo_b, { fif::fif_i32, fif::fif_opaque_ptr }, { fif::fif_bool }, env);
1319 fif::add_import("ranked-nation-array", (void *) f_ranked_nations, f_ranked_nations_b, { fif::fif_opaque_ptr }, { fif::fif_opaque_ptr }, env);
1320
1321
1323 " : first-sea-province " + std::to_string(offsetof(sys::state, province_definitions) + offsetof(province::global_provincial_state, first_sea_province)) + " state-ptr @ buf-add ptr-cast ptr(province_id) ; "
1324 " : start-date " + std::to_string(offsetof(sys::state, start_date)) + " state-ptr @ buf-add ptr-cast ptr(i64) ; "
1325 " : current-date " + std::to_string(offsetof(sys::state, current_date)) + " state-ptr @ buf-add ptr-cast ptr(u16) ; "
1326 " : crisis-state " + std::to_string(offsetof(sys::state, crisis_state)) + " state-ptr @ buf-add ptr-cast ptr(state_instance_id) ; "
1327 " : sea-province? >index first-sea-province @ >index >= ; "
1328 " :s >owner pop_id s: " + pop_to_owner() + " ; "
1329 " :s >owner province_id s: " + province_to_owner() + " ; "
1330 " :s >owner state_instance_id s: " + state_to_owner() + " ; "
1331 " :s >location pop_id s: " + pop_to_location() + " ; "
1332
1333 ":struct gp-iterator ptr(nil) base i32 count i32 size i32 gp-count ; "
1334 ":s next gp-iterator s: let it it .count " + std::to_string(sizeof(dcon::nation_id)) + " * it .base buf-add ptr-cast ptr(nation_id) @ it .count@ 1 + swap .count! swap ; "
1335 ":s more? gp-iterator s: let it it .count it .size < it .gp-count " + std::to_string(state.defines.great_nations_count) + " < and it swap ; "
1336 ":s inc-gp gp-iterator s: .gp-count@ 1 + swap .gp-count! ; "
1337 ": make-gp-it make gp-iterator state-ptr @ ranked-nation-array swap .base! nation-size swap .size! ; "
1338
1339 ":struct state-prov-iterator vpool-abstract_state_membership-state base i32 count state_instance_id parent ; "
1340 ":s next state-prov-iterator s: let it it .base it .count index @ province it .count@ 1 - swap .count! swap dup state_membership @ it .parent = ; "
1341 ":s more? state-prov-iterator s: .count@ 0 >= ; "
1342 ": make-sp-it dup definition @ abstract_state_membership-state make state-prov-iterator .base! .parent! .base@ size 1 - swap .count! ; "
1343
1344 ":struct nation-prov-iterator vpool-province_ownership-nation base i32 count ; "
1345 ":s next nation-prov-iterator s: let it it .base it .count index @ province it .count@ 1 - swap .count! swap ; "
1346 ":s more? nation-prov-iterator s: .count@ 0 >= ; "
1347 ": make-n-it province_ownership-nation make nation-prov-iterator .base! .base@ size 1 - swap .count! ; "
1348
1349 ":struct pcore-iterator vpool-core-province base i32 count ; "
1350 ":s next pcore-iterator s: let it it .base it .count index @ identity @ " + tag_to_nation() + " it .count@ 1 - swap .count! swap ; "
1351 ":s more? pcore-iterator s: .count@ 0 >= ; "
1352 ": make-pc-it core-province make pcore-iterator .base! .base@ size 1 - swap .count! ; "
1353
1354 ":struct ncore-iterator vpool-core-identity base i32 count ; "
1355 ":s next ncore-iterator s: let it it .base it .count index @ province @ it .count@ 1 - swap .count! swap ; "
1356 ":s more? ncore-iterator s: .count@ 0 >= ; "
1357 ": make-nc-it core-identity make ncore-iterator .base! .base@ size 1 - swap .count! ; "
1358
1359 ":struct nation-state-iterator vpool-state_ownership-nation base i32 count ; "
1360 ":s next nation-state-iterator s: let it it .base it .count index @ state it .count@ 1 - swap .count! swap ; "
1361 ":s more? nation-state-iterator s: .count@ 0 >= ; "
1362 ": make-ns-it state_ownership-nation make nation-state-iterator .base! .base@ size 1 - swap .count! ; "
1363
1364 ":struct nation-vassal-iterator vpool-overlord-ruler base i32 count ; "
1365 ":s next nation-vassal-iterator s: let it it .base it .count index @ subject it .count@ 1 - swap .count! swap ; "
1366 ":s more? nation-vassal-iterator s: .count@ 0 >= ; "
1367 ": make-nv-it overlord-ruler make nation-vassal-iterator .base! .base@ size 1 - swap .count! ; "
1368
1369 ":struct nation-gp-iterator vpool-gp_relationship-great_power base i32 count ; "
1370 ":s next nation-gp-iterator s: let it it .base it .count index @ dup influence_target @ swap status @ >i32 " + std::to_string(nations::influence::level_mask) + " and " + std::to_string(nations::influence::level_in_sphere) + " = >r it .count@ 1 - swap .count! swap r> ; "
1371 ":s more? nation-gp-iterator s: .count@ 0 >= ; "
1372 ": make-ngp-it gp_relationship-great_power make nation-gp-iterator .base! .base@ size 1 - swap .count! ; "
1373
1374 ":struct prov-pop-iterator vpool-pop_location-province base i32 count ; "
1375 ":s next prov-pop-iterator s: let it it .base it .count index @ pop it .count@ 1 - swap .count! swap ; "
1376 ":s more? prov-pop-iterator s: .count@ 0 >= ; "
1377 ": make-pp-it pop_location-province make prov-pop-iterator .base! .base@ size 1 - swap .count! ; "
1378
1379 ":struct astate-prov-iterator vpool-abstract_state_membership-state base i32 count ; "
1380 ":s next astate-prov-iterator s: let it it .base it .count index @ province it .count@ 1 - swap .count! swap ; "
1381 ":s more? astate-prov-iterator s: .count@ 0 >= ; "
1382 ": make-asp-it abstract_state_membership-state make astate-prov-iterator .base! .base@ size 1 - swap .count! ; "
1383
1384 ":struct aregion-prov-iterator vpool-region_membership-region base i32 count ; "
1385 ":s next aregion-prov-iterator s: let it it .base it .count index @ province @ it .count@ 1 - swap .count! swap ; "
1386 ":s more? aregion-prov-iterator s: .count@ 0 >= ; "
1387 ": make-arp-it region_membership-region make aregion-prov-iterator .base! .base@ size 1 - swap .count! ; "
1388
1389 ":struct adj-prov-iterator vpool-province_adjacency-connected_provinces base i32 count province_id parent ; "
1390 ":s next adj-prov-iterator s: let it it .base it .count index @ dup >r "
1391 "connected_provinces .wrapped dup ptr-cast ptr(nil) " + std::to_string(sizeof(dcon::province_id)) + " swap buf-add ptr-cast ptr(province_id) @ swap @ dup it .parent = not select "
1392 "it .count@ 1 - swap .count! swap "
1393 "r> type @ " + std::to_string(int32_t(province::border::impassible_bit)) + " >i8 and 0 >i8 = ; "
1394 ":s more? adj-prov-iterator s: .count@ 0 >= ; "
1395 ": make-ap-it dup province_adjacency-connected_provinces make adj-prov-iterator .base! .parent! .base@ size 1 - swap .count! ; "
1396
1397 ":struct adj-nation-iterator vpool-nation_adjacency-connected_nations base i32 count nation_id parent ; "
1398 ":s next adj-nation-iterator s: let it it .base it .count index @ "
1399 "connected_nations .wrapped dup ptr-cast ptr(nil) " + std::to_string(sizeof(dcon::nation_id)) + " swap buf-add ptr-cast ptr(nation_id) @ swap @ dup it .parent = not select "
1400 "it .count@ 1 - swap .count! swap ; "
1401 ":s more? adj-nation-iterator s: .count@ 0 >= ; "
1402 ": make-an-it dup nation_adjacency-connected_nations make adj-nation-iterator .base! .parent! .base@ size 1 - swap .count! ; "
1403 ,
1404 values);
1405
1407}
1408
1409
1410}
1411
1412namespace fif_trigger {
1413std::string multiplicative_modifier(sys::state& state, dcon::value_modifier_key modifier);
1414std::string additive_modifier(sys::state& state, dcon::value_modifier_key modifier);
1415std::string evaluate(sys::state& state, dcon::trigger_key key);
1416}
1417
ankerl::unordered_dense::map< std::string, int32_t > types
Definition: fif.hpp:505
fif_mode mode
Definition: fif.hpp:767
dictionary dict
Definition: fif.hpp:762
void add_value(int32_t v)
Definition: fif_common.hpp:132
virtual int64_t main_data_back(size_t index) const =0
virtual void pop_main()=0
virtual void push_back_main(int32_t type, int64_t data, LLVMValueRef expr)=0
#define assert(condition)
Definition: debug.h:74
bool has_building(sys::state const &state, dcon::state_instance_id si, dcon::factory_type_id fac)
Definition: economy.cpp:384
bool is_bankrupt_debtor_to(sys::state &state, dcon::nation_id debt_holder, dcon::nation_id debtor)
Definition: economy.cpp:398
bool has_factory(sys::state const &state, dcon::state_instance_id si)
Definition: economy.cpp:128
std::string evaluate(sys::state &state, dcon::trigger_key key)
std::string multiplicative_modifier(sys::state &state, dcon::value_modifier_key modifier)
std::string additive_modifier(sys::state &state, dcon::value_modifier_key modifier)
Definition: fif.hpp:44
bool f_units_in_province(sys::state *state, int32_t sindex, int32_t nindex)
Definition: fif_common.hpp:600
bool f_core_in_province(sys::state *state, int32_t p_index, int32_t t_index)
Definition: fif_common.hpp:228
bool f_has_culture_core(sys::state *state, int32_t cindex, int32_t sindex)
Definition: fif_common.hpp:782
int32_t f_date_to_year(int64_t v)
Definition: fif_common.hpp:20
int32_t * f_has_nmod_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:426
std::string province_to_controller()
bool f_is_bankrupt_debtor_to(sys::state *state, int32_t tindex, int32_t sindex)
Definition: fif_common.hpp:947
int32_t * f_core_in_province_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:235
int32_t * f_unowned_core_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:177
bool f_unowned_core(sys::state *state, int32_t n_index)
Definition: fif_common.hpp:159
int32_t * f_core_fully_state_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:301
int32_t * f_has_any_factory_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:379
bool f_owns_region(sys::state *state, int32_t rindex, int32_t n_index)
Definition: fif_common.hpp:495
void run_fif_interpreter(environment &env, std::string_view on_text)
Definition: fif.hpp:5096
int32_t * f_has_culture_core_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:792
constexpr int32_t fif_i32
Definition: fif.hpp:483
int32_t * f_state_rgo_b(fif::state_stack &s, int32_t *p, fif::environment *e)
bool f_are_at_war(sys::state *state, int32_t sindex, int32_t nindex)
Definition: fif_common.hpp:653
int32_t * f_influence_on_b(fif::state_stack &s, int32_t *p, fif::environment *e)
int32_t * f_has_access_with_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:358
std::string tag_to_nation()
bool f_has_factory(sys::state *state, int32_t findex, int32_t s_index)
Definition: fif_common.hpp:395
int32_t * f_coastal_s_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:730
bool f_core_in_state(sys::state *state, int32_t s_index, int32_t t_index)
Definition: fif_common.hpp:257
int32_t * f_truce_with_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:834
int32_t * f_units_in_province_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:610
bool f_has_pmod(sys::state *state, int32_t m_index, int32_t p_index)
Definition: fif_common.hpp:443
constexpr int32_t fif_bool
Definition: fif.hpp:485
bool f_empty_adjacent_state(sys::state *state, int32_t p_index)
Definition: fif_common.hpp:85
bool f_owns_state(sys::state *state, int32_t rindex, int32_t n_index)
Definition: fif_common.hpp:521
bool f_in_crisis(sys::state *state, int32_t nindex)
float f_influence_on(sys::state *state, int32_t t_index, int32_t n_index)
int32_t * f_can_build_naval_base_b(fif::state_stack &s, int32_t *p, fif::environment *e)
int32_t * f_can_nationalize_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:996
int32_t * f_are_at_war_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:658
int32_t * f_canal_enabled_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:812
std::string nation_to_tag()
bool f_state_produces(sys::state *state, int32_t cindex, int32_t sindex)
Definition: fif_common.hpp:746
int32_t * f_in_region_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:478
int32_t * f_global_flag_set_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:973
int32_t * f_general_in_p_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:684
int32_t * f_nation_has_any_factory_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:932
void common_fif_environment(sys::state &state, fif::environment &env)
bool typechecking_mode(fif_mode m)
Definition: fif.hpp:719
bool f_core_in_nation(sys::state *state, int32_t n_index, int32_t t_index)
Definition: fif_common.hpp:196
bool f_coastal_s(sys::state *state, int32_t sindex)
Definition: fif_common.hpp:726
bool f_nation_a(sys::state *state, int32_t aindex, int32_t bindex)
Definition: fif_common.hpp:547
int32_t * f_count_ships_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:710
bool f_has_cb_against(sys::state *state, int32_t targ_index, int32_t source_index)
Definition: fif_common.hpp:323
std::string province_to_owner()
int32_t * f_core_in_nation_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:206
void add_import(std::string_view name, void *ptr, fif_call interpreter_implementation, std::vector< int32_t > const &params, std::vector< int32_t > const &returns, environment &env)
Definition: fif.hpp:5154
bool f_truce_with(sys::state *state, int32_t tindex, int32_t sindex)
Definition: fif_common.hpp:828
bool f_units_in_state(sys::state *state, int32_t sindex, int32_t nindex)
Definition: fif_common.hpp:569
std::string pop_to_location()
int32_t * f_ranked_nations_b(fif::state_stack &s, int32_t *p, fif::environment *e)
int32_t * f_movement_str_b(fif::state_stack &s, int32_t *p, fif::environment *e)
int32_t * f_can_release_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:884
bool f_has_union_sphere(sys::state *state, int32_t s_index)
int32_t * f_has_named_leader_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:862
bool f_has_nmod(sys::state *state, int32_t m_index, int32_t n_index)
Definition: fif_common.hpp:417
std::string pop_to_owner()
int32_t f_count_p_units(sys::state *state, int32_t sindex)
Definition: fif_common.hpp:627
int32_t * f_has_union_sphere_b(fif::state_stack &s, int32_t *p, fif::environment *e)
bool f_core_fully_state(sys::state *state, int32_t s_index, int32_t t_index)
Definition: fif_common.hpp:290
int32_t * f_nation_a_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:552
int32_t * f_empty_adjacent_state_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:99
int32_t * f_relations_b(fif::state_stack &s, int32_t *p, fif::environment *e)
int32_t * f_core_in_state_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:268
std::string state_to_owner()
bool f_has_any_factory(sys::state *state, int32_t s_index)
Definition: fif_common.hpp:375
int32_t * f_owns_state_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:530
int32_t * f_date_to_year_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:26
int32_t * f_date_to_month_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:41
int32_t * f_has_cb_against_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:328
int32_t f_count_ships(sys::state *state, int32_t sindex)
Definition: fif_common.hpp:700
int32_t * f_has_factory_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:400
bool f_empty_adjacent_province(sys::state *state, int32_t p_index)
Definition: fif_common.hpp:57
int32_t * f_owns_region_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:504
bool f_can_release(sys::state *state, int32_t tindex, int32_t nindex)
Definition: fif_common.hpp:879
bool f_general_in_p(sys::state *state, int32_t sindex)
Definition: fif_common.hpp:675
bool typechecking_failed(fif_mode m)
Definition: fif.hpp:723
constexpr sys::year_month_day civil_from_days(int64_t z) noexcept
Definition: fif_common.hpp:7
constexpr int32_t fif_f32
Definition: fif.hpp:484
int32_t * f_are_allied_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:907
constexpr int32_t fif_opaque_ptr
Definition: fif.hpp:497
bool f_has_access_with(sys::state *state, int32_t targ_index, int32_t source_index)
Definition: fif_common.hpp:350
bool f_can_nationalize(sys::state *state, int32_t s_index)
Definition: fif_common.hpp:988
bool f_can_build_naval_base(sys::state *state, int32_t cindex, int32_t sindex)
void initialize_standard_vocab(environment &fif_env)
Definition: fif.hpp:9485
int32_t f_date_to_month(int64_t v)
Definition: fif_common.hpp:23
bool f_in_region(sys::state *state, int32_t rindex, int32_t p_index)
Definition: fif_common.hpp:469
auto f_make_true_accumulator(F &&f) -> f_true_accumulator< F >
Definition: fif_common.hpp:154
int32_t * f_empty_adjacent_province_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:66
bool f_are_allied(sys::state *state, int32_t tindex, int32_t sindex)
Definition: fif_common.hpp:901
float f_movement_str(sys::state *state, bool is_social, int32_t s_index)
int32_t * f_state_produces_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:765
bool f_nation_has_any_factory(sys::state *state, int32_t s_index)
Definition: fif_common.hpp:923
bool f_canal_enabled(sys::state *state, int32_t sindex)
Definition: fif_common.hpp:809
int32_t * f_has_pmod_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:452
constexpr int32_t fif_i64
Definition: fif.hpp:487
int32_t * f_in_crisis_b(fif::state_stack &s, int32_t *p, fif::environment *e)
float f_relations(sys::state *state, int32_t t_index, int32_t n_index)
int32_t * f_count_p_units_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:637
void * f_ranked_nations(sys::state *state)
bool f_has_named_leader(sys::state *state, int32_t name, int32_t nindex)
Definition: fif_common.hpp:851
int32_t * f_is_bankrupt_debtor_to_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:953
bool f_global_flag_set(sys::state *state, int32_t s_index)
Definition: fif_common.hpp:969
int32_t * f_units_in_state_b(fif::state_stack &s, int32_t *p, fif::environment *e)
Definition: fif_common.hpp:583
bool f_state_rgo(sys::state *state, int32_t cindex, int32_t sindex)
bool can_use_cb_against(sys::state &state, dcon::nation_id from, dcon::nation_id target)
Definition: military.cpp:95
bool has_truce_with(sys::state &state, dcon::nation_id attacker, dcon::nation_id target)
Definition: military.cpp:2037
bool state_has_naval_base(sys::state const &state, dcon::state_instance_id si)
Definition: military.cpp:463
bool are_at_war(sys::state const &state, dcon::nation_id a, dcon::nation_id b)
Definition: military.cpp:475
constexpr uint8_t level_in_sphere
Definition: nations.hpp:169
constexpr uint8_t level_mask
Definition: nations.hpp:163
bool can_release_as_vassal(sys::state const &state, dcon::nation_id n, dcon::national_identity_id releasable)
Definition: nations.cpp:176
bool are_allied(sys::state &state, dcon::nation_id a, dcon::nation_id b)
Definition: nations.cpp:198
constexpr uint8_t impassible_bit
Definition: constants.hpp:595
bool state_is_coastal(sys::state &state, dcon::state_instance_id s)
Definition: province.cpp:1476
Definition: prng.cpp:6
int32_t to_generic(dcon::province_id v)
Definition: triggers.hpp:12
dcon::province_id to_prov(int32_t v)
Definition: triggers.hpp:88
bool compress_mask(bool v)
uint uint32_t
uchar uint8_t