Project Alice
Loading...
Searching...
No Matches
fif_triggers.cpp
Go to the documentation of this file.
1#include "triggers.hpp"
2#include "system_state.hpp"
3#include "demographics.hpp"
6#include "prng.hpp"
10#include "fif.hpp"
11#include "fif_common.hpp"
12
13namespace fif_trigger {
14using namespace fif;
15
16#ifdef WIN32
17#define CALLTYPE __vectorcall
18#else
19#define CALLTYPE
20#endif
21
22[[nodiscard]] std::string compare_values(uint16_t trigger_code) {
23 switch(trigger_code & trigger::association_mask) {
25 return " = ";
27 return " > ";
29 return " < ";
31 return " <= ";
33 return " <> ";
35 return " >= ";
36 default:
37 return " >= ";
38 }
39}
40
41[[nodiscard]] std::string compare_values_eq(uint16_t trigger_code) {
42 switch(trigger_code & trigger::association_mask) {
44 return " = ";
46 return " <> ";
48 return " <> ";
50 return " = ";
52 return " <> ";
54 return " = ";
55 default:
56 return " = ";
57 }
58}
59[[nodiscard]] std::string truth_inversion(uint16_t trigger_code) {
60 switch(trigger_code & trigger::association_mask) {
62 return "";
64 return "not ";
66 return "not ";
68 return "";
70 return "not ";
72 return "";
73 default:
74 return "";
75 }
76}
77
78float read_float_from_payload(uint16_t const* data) {
79 union {
80 struct {
81 uint16_t low;
82 uint16_t high;
83 } v;
84 float f;
85 } pack_float;
86
87 pack_float.v.low = data[0];
88 pack_float.v.high = data[1];
89
90 return pack_float.f;
91}
92int32_t read_int32_t_from_payload(uint16_t const* data) {
93 union {
94 struct {
95 uint16_t low;
96 uint16_t high;
97 } v;
98 int32_t f;
99 } pack_float;
100
101 pack_float.v.low = data[0];
102 pack_float.v.high = data[1];
103
104 return pack_float.f;
105}
106
107std::string CALLTYPE test_trigger_generic(uint16_t const* tval, sys::state& ws);
108#define TRIGGER_FUNCTION(function_name) std::string CALLTYPE function_name(uint16_t const* tval, sys::state& ws)
109
110TRIGGER_FUNCTION(apply_disjuctively) {
111 auto const source_size = 1 + trigger::get_trigger_scope_payload_size(tval);
112 auto sub_units_start = tval + 2 + trigger::trigger_scope_data_payload(tval[0]);
113
114 std::string result = "false >r ";
115 while(sub_units_start < tval + source_size) {
116 result += test_trigger_generic(sub_units_start, ws);
117 result += "r> or >r ";
118 sub_units_start += 1 + trigger::get_trigger_payload_size(sub_units_start);
119 }
120 result += "r> ";
121 return result;
122}
123
124TRIGGER_FUNCTION(apply_conjuctively) {
125 auto const source_size = 1 + trigger::get_trigger_scope_payload_size(tval);
126 auto sub_units_start = tval + 2 + trigger::trigger_scope_data_payload(tval[0]);
127
128 std::string result = "true >r ";
129 while(sub_units_start < tval + source_size) {
130 result += test_trigger_generic(sub_units_start, ws);
131 result += "r> and >r ";
132 sub_units_start += 1 + trigger::get_trigger_payload_size(sub_units_start);
133 }
134 result += "r> ";
135 return result;
136}
137
138TRIGGER_FUNCTION(apply_subtriggers) {
139 if((*tval & trigger::is_disjunctive_scope) != 0)
140 return apply_disjuctively(tval, ws);
141 else
142 return apply_conjuctively(tval, ws);
143}
144
146 return "true ";
147}
148TRIGGER_FUNCTION(tf_unused_1) {
149 return "true ";
150}
151
152TRIGGER_FUNCTION(tf_generic_scope) {
153 return apply_subtriggers(tval, ws);
154}
155
156TRIGGER_FUNCTION(tf_x_neighbor_province_scope) {
157 if(*tval & trigger::is_existence_scope) {
158 return "dup >r false >r make-ap-it "
159 "while more? r@ not and "
160 "loop "
161 "next " // ap on top
162 "if "
163 "swap >r " // hide it
164 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
165 "r> drop >r " // replace bool value with new bool
166 "swap drop "
167 "else "
168 "drop "
169 "end-if "
170 "end-while "
171 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
172 ;
173 } else {
174 return "dup >r true >r make-ap-it "
175 "while more? r@ and "
176 "loop "
177 "next " // ap on top
178 "if "
179 "swap >r " // hide it
180 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
181 "r> drop >r " // replace bool value with new bool
182 "swap drop "
183 "else "
184 "drop "
185 "end-if "
186 "end-while "
187 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
188 ;
189 }
190}
191TRIGGER_FUNCTION(tf_x_neighbor_province_scope_state) {
192 if(*tval & trigger::is_existence_scope) {
193 return "dup >r false >r make-sp-it "
194 "while more? r@ not and "
195 "loop "
196 "next " // it ap on top
197 "if " // [it ap] [SI bool]
198 "swap r> swap >r >r " // [p] [si it bool]
199 "make-ap-it " // [apit] [si it bool]
200 "while more? r@ not and "
201 "loop "
202 "next " // [apit p2] [si it bool]
203 "dup state_membership @ r> r> .parent@ swap >r swap >r = not "
204 "if "
205 "swap >r " // hide it
206 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
207 "r> drop >r " // replace bool value with new bool
208 "swap drop "
209 "else "
210 "drop "
211 "end-if "
212 "end-while "
213 "drop r> r> swap >r " // drop pop-iterator [bool IT], [IT, bool}, {IT], [bool]
214 "else "
215 "drop "
216 "end-if "
217 "end-while "
218 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
219 ;
220 } else {
221 return "dup >r true >r make-sp-it "
222 "while more? r@ and "
223 "loop "
224 "next " // it ap on top
225 "if " // [it ap] [SI bool]
226 "swap r> swap >r >r " // [p] [si it bool]
227 "make-ap-it " // [apit] [si it bool]
228 "while more? r@ and "
229 "loop "
230 "next " // [apit p2] [si it bool]
231 "dup state_membership @ r> r> .parent@ swap >r swap >r = not "
232 "if "
233 "swap >r " // hide it
234 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
235 "r> drop >r " // replace bool value with new bool
236 "swap drop "
237 "else "
238 "drop "
239 "end-if "
240 "end-while "
241 "drop r> r> swap >r " // drop pop-iterator [bool IT], [IT, bool}, {IT], [bool]
242 "else "
243 "drop "
244 "end-if "
245 "end-while "
246 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
247 ;
248 }
249}
250TRIGGER_FUNCTION(tf_x_neighbor_country_scope_nation) {
251 if(*tval & trigger::is_existence_scope) {
252 return "dup >r false >r make-an-it "
253 "while more? r@ not and "
254 "loop "
255 "next " // ap on top
256 "swap >r " // hide it
257 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
258 "r> drop >r " // replace bool value with new bool
259 "swap drop "
260 "end-while "
261 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
262 ;
263 } else {
264 return "dup >r true >r make-an-it "
265 "while more? r@ and "
266 "loop "
267 "next " // ap on top
268 "swap >r " // hide it
269 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
270 "r> drop >r " // replace bool value with new bool
271 "swap drop "
272 "end-while "
273 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
274 ;
275 }
276}
277TRIGGER_FUNCTION(tf_x_neighbor_country_scope_pop) {
278 if(*tval & trigger::is_existence_scope) {
279 return "dup >r " + pop_to_owner() + "false >r make-an-it "
280 "while more? r@ not and "
281 "loop "
282 "next " // ap on top
283 "swap >r " // hide it
284 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
285 "r> drop >r " // replace bool value with new bool
286 "swap drop "
287 "end-while "
288 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
289 ;
290 } else {
291 return "dup >r " + pop_to_owner() + "true >r make-an-it "
292 "while more? r@ and "
293 "loop "
294 "next " // ap on top
295 "swap >r " // hide it
296 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
297 "r> drop >r " // replace bool value with new bool
298 "swap drop "
299 "end-while "
300 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
301 ;
302 }
303}
304TRIGGER_FUNCTION(tf_x_war_countries_scope_nation) {
305 if(*tval & trigger::is_existence_scope) {
306 return "false >r dup >r " // note : removes nation from stack entirely
307 "nation_adjacency-connected_nations dup size " // R bool, nation
308 "while 1 - dup 0 >= r> swap r@ not and swap >r " //war_participant_id
309 "loop "
310 "2dup index @ dup is_attacker @ >r " //war_participant_id on stack, R bool, nation, is attacker
311 "war @ war_participant-war dup size"
312 "while 1 - dup 0 >= r> swap r> swap r@ not and swap >r swap >r "
313 "loop "
314 "2dup index @ dup is_attacker @ r@ <> "
315 "if "
316 "nation @ "
317 "swap >r swap >r swap >r swap >r " // hide array and index (x2)
318 + apply_subtriggers(tval, ws) + " r> swap r> swap r> swap r> swap" // bool result on top
319 "r> swap r> swap r> drop >r >r >r " // replace bool value with new bool
320 "else "
321 "drop "
322 "end-if "
323 "end-while "
324 "drop drop r> drop " // drop array, index, is attacker
325 "end-while "
326 "drop drop r> r> " // drop array, index, move stored self nation to stack, move bool to stack
327 ;
328 } else {
329 return "true >r dup >r " // note : removes nation from stack entirely
330 "nation_adjacency-connected_nations dup size " // R bool, nation
331 "while 1 - dup 0 >= r> swap r@ and swap >r " //war_participant_id
332 "loop "
333 "2dup index @ dup is_attacker @ >r " //war_participant_id on stack, R bool, nation, is attacker
334 "war @ war_participant-war dup size"
335 "while 1 - dup 0 >= r> swap r> swap r@ and swap >r swap >r "
336 "loop "
337 "2dup index @ dup is_attacker @ r@ <> "
338 "if "
339 "nation @ "
340 "swap >r swap >r swap >r swap >r " // hide array and index (x2)
341 + apply_subtriggers(tval, ws) + " r> swap r> swap r> swap r> swap" // bool result on top
342 "r> swap r> swap r> drop >r >r >r " // replace bool value with new bool
343 "else "
344 "drop "
345 "end-if "
346 "end-while "
347 "drop drop r> drop " // drop array, index, is attacker
348 "end-while "
349 "drop drop r> r> " // drop array, index, move stored self nation to stack, move bool to stack
350 ;
351 }
352}
353TRIGGER_FUNCTION(tf_x_war_countries_scope_pop) {
354 if(*tval & trigger::is_existence_scope) {
355 return ">r r@ " + pop_to_owner() + "false >r dup >r " // note : removes nation from stack entirely
356 "nation_adjacency-connected_nations dup size " // R bool, nation
357 "while 1 - dup 0 >= r> swap r@ not and swap >r " //war_participant_id
358 "loop "
359 "2dup index @ dup is_attacker @ >r " //war_participant_id on stack, R bool, nation, is attacker
360 "war @ war_participant-war dup size"
361 "while 1 - dup 0 >= r> swap r> swap r@ not and swap >r swap >r "
362 "loop "
363 "2dup index @ dup is_attacker @ r@ <> "
364 "if "
365 "nation @ "
366 "swap >r swap >r swap >r swap >r " // hide array and index (x2)
367 + apply_subtriggers(tval, ws) + " r> swap r> swap r> swap r> swap" // bool result on top
368 "r> swap r> swap r> drop >r >r >r " // replace bool value with new bool
369 "else "
370 "drop "
371 "end-if "
372 "end-while "
373 "drop drop r> drop " // drop array, index, is attacker
374 "end-while "
375 "drop drop r> drop r> r> swap "// drop array, index, move stored self nation to stack, move bool to stack
376 ;
377 } else {
378 return ">r r@ " + pop_to_owner() + "true >r dup >r " // note : removes nation from stack entirely
379 "nation_adjacency-connected_nations dup size " // R bool, nation
380 "while 1 - dup 0 >= r> swap r@ and swap >r " //war_participant_id
381 "loop "
382 "2dup index @ dup is_attacker @ >r " //war_participant_id on stack, R bool, nation, is attacker
383 "war @ war_participant-war dup size"
384 "while 1 - dup 0 >= r> swap r> swap r@ and swap >r swap >r "
385 "loop "
386 "2dup index @ dup is_attacker @ r@ <> "
387 "if "
388 "nation @ "
389 "swap >r swap >r swap >r swap >r " // hide array and index (x2)
390 + apply_subtriggers(tval, ws) + " r> swap r> swap r> swap r> swap" // bool result on top
391 "r> swap r> swap r> drop >r >r >r " // replace bool value with new bool
392 "else "
393 "drop "
394 "end-if "
395 "end-while "
396 "drop drop r> drop " // drop array, index, is attacker
397 "end-while "
398 "drop drop r> drop r> r> swap " // drop array, index, move stored self nation to stack, move bool to stack
399 ;
400 }
401}
402TRIGGER_FUNCTION(tf_x_country_scope) {
403 if(*tval & trigger::is_existence_scope) {
404 return ">r false >r nation-size @ " // note : removes nation from stack entirely
405 "while 1 - dup 0 >= r@ not and "
406 "loop "
407 "dup >nation_id " // adjacent nation on top
408 "swap >r " // hide index
409 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
410 "r> drop >r " // replace bool value with new bool
411 "swap drop "
412 "end-while "
413 "drop r> r> swap " // drop index, move stored self nation to stack, move bool to stack
414 ;
415 } else {
416 return ">r true >r nation-size @ " // note : removes nation from stack entirely
417 "while 1 - dup 0 >= r@ and "
418 "loop "
419 "dup >nation_id " // adjacent nation on top
420 "swap >r " // hide index
421 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
422 "r> drop >r " // replace bool value with new bool
423 "swap drop "
424 "end-while "
425 "drop r> r> swap " // drop index, move stored self nation to stack, move bool to stack
426 ;
427 }
428}
429TRIGGER_FUNCTION(tf_x_greater_power_scope) {
430 if(*tval & trigger::is_existence_scope) {
431 return ">r false >r make-gp-it "
432 "while more? r@ not and "
433 "loop "
434 "next " // nation on top
435 "dup is_great_power @ "
436 "if "
437 "swap inc-gp >r " // hide it
438 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
439 "r> drop >r " // replace bool value with new bool
440 "swap drop "
441 "else "
442 "drop "
443 "end-if "
444 "end-while "
445 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
446 ;
447 } else {
448 return ">r true >r make-gp-it "
449 "while more? r@ and "
450 "loop "
451 "next " // nation on top
452 "dup is_great_power @ "
453 "if "
454 "swap inc-gp >r " // hide it
455 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
456 "r> drop >r " // replace bool value with new bool
457 "swap drop "
458 "else "
459 "drop "
460 "end-if "
461 "end-while "
462 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
463 ;
464 }
465}
466TRIGGER_FUNCTION(tf_x_owned_province_scope_state) {
467 if(*tval & trigger::is_existence_scope) {
468 return "dup >r false >r make-sp-it "
469 "while more? r@ not and "
470 "loop "
471 "next " // prov + properly in state on top
472 "if "
473 "swap >r " // hide it
474 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
475 "r> drop >r " // replace bool value with new bool
476 "swap drop "
477 "else "
478 "drop "
479 "end-if "
480 "end-while "
481 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
482 ;
483 } else {
484 return "dup >r true >r make-sp-it "
485 "while more? r@ and "
486 "loop "
487 "next " // prov + properly in state on top
488 "if "
489 "swap >r " // hide it
490 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
491 "r> drop >r " // replace bool value with new bool
492 "swap drop "
493 "else "
494 "drop "
495 "end-if "
496 "end-while "
497 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
498 ;
499 }
500}
501TRIGGER_FUNCTION(tf_x_owned_province_scope_nation) {
502 if(*tval & trigger::is_existence_scope) {
503 return "dup >r false >r make-n-it "
504 "while more? r@ not and "
505 "loop "
506 "next " // prov on top
507 "swap >r " // hide it
508 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
509 "r> drop >r " // replace bool value with new bool
510 "swap drop "
511 "end-while "
512 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
513 ;
514 } else {
515 return "dup >r true >r make-n-it "
516 "while more? r@ and "
517 "loop "
518 "next " // prov on top
519 "swap >r " // hide it
520 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
521 "r> drop >r " // replace bool value with new bool
522 "swap drop "
523 "end-while "
524 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
525 ;
526 }
527}
528TRIGGER_FUNCTION(tf_x_core_scope_province) {
529 if(*tval & trigger::is_existence_scope) {
530 return "dup >r false >r make-pc-it "
531 "while more? r@ not and "
532 "loop "
533 "next " // n on top
534 "swap >r " // hide it
535 "dup valid? if "
536 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
537 "r> drop >r " // replace bool value with new bool
538 "swap drop "
539 "else "
540 "drop r> "
541 "end-if "
542 "end-while "
543 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
544 ;
545 } else {
546 return "dup >r true >r make-pc-it "
547 "while more? r@ and "
548 "loop "
549 "next " // n on top
550 "swap >r " // hide it
551 "dup valid? if "
552 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
553 "r> drop >r " // replace bool value with new bool
554 "swap drop "
555 "else "
556 "drop r> "
557 "end-if "
558 "end-while "
559 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
560 ;
561 }
562}
563TRIGGER_FUNCTION(tf_x_core_scope_nation) {
564 if(*tval & trigger::is_existence_scope) {
565 return "dup >r false >r make-nc-it "
566 "while more? r@ not and "
567 "loop "
568 "next " // n on top
569 "swap >r " // hide it
570 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
571 "r> drop >r " // replace bool value with new bool
572 "swap drop "
573 "end-while "
574 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
575 ;
576 } else {
577 return "dup >r true >r make-nc-it "
578 "while more? r@ and "
579 "loop "
580 "next " // n on top
581 "swap >r " // hide it
582 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
583 "r> drop >r " // replace bool value with new bool
584 "swap drop "
585 "end-while "
586 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
587 ;
588 }
589}
590
591TRIGGER_FUNCTION(tf_x_state_scope) {
592 if(*tval & trigger::is_existence_scope) {
593 return "dup >r false >r make-ns-it "
594 "while more? r@ not and "
595 "loop "
596 "next " // n on top
597 "swap >r " // hide it
598 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
599 "r> drop >r " // replace bool value with new bool
600 "swap drop "
601 "end-while "
602 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
603 ;
604 } else {
605 return "dup >r true >r make-ns-it "
606 "while more? r@ and "
607 "loop "
608 "next " // n on top
609 "swap >r " // hide it
610 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
611 "r> drop >r " // replace bool value with new bool
612 "swap drop "
613 "end-while "
614 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
615 ;
616 }
617}
618TRIGGER_FUNCTION(tf_x_substate_scope) {
619 if(*tval & trigger::is_existence_scope) {
620 return "dup >r false >r make-nv-it "
621 "while more? r@ not and "
622 "loop "
623 "next " // n on top
624 "dup is_substate @ "
625 "if "
626 "swap >r " // hide it
627 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
628 "r> drop >r " // replace bool value with new bool
629 "swap drop "
630 "else "
631 "drop "
632 "end-if "
633 "end-while "
634 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
635 ;
636 } else {
637 return "dup >r true >r make-nv-it "
638 "while more? r@ and "
639 "loop "
640 "next " // n on top
641 "dup is_substate @ "
642 "if "
643 "swap >r " // hide it
644 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
645 "r> drop >r " // replace bool value with new bool
646 "swap drop "
647 "else "
648 "drop "
649 "end-if "
650 "end-while "
651 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
652 ;
653 }
654}
655TRIGGER_FUNCTION(tf_x_sphere_member_scope) {
656 if(*tval & trigger::is_existence_scope) {
657 return "dup >r false >r make-ngp-it "
658 "while more? r@ not and "
659 "loop "
660 "next " // n on top
661 "if "
662 "swap >r " // hide it
663 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
664 "r> drop >r " // replace bool value with new bool
665 "swap drop "
666 "else "
667 "drop "
668 "end-if "
669 "end-while "
670 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
671 ;
672 } else {
673 return "dup >r true >r make-ngp-it "
674 "while more? r@ and "
675 "loop "
676 "next " // n on top
677 "if "
678 "swap >r " // hide it
679 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
680 "r> drop >r " // replace bool value with new bool
681 "swap drop "
682 "else "
683 "drop "
684 "end-if "
685 "end-while "
686 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
687 ;
688 }
689}
690TRIGGER_FUNCTION(tf_x_pop_scope_province) {
691 if(*tval & trigger::is_existence_scope) {
692 return "dup >r false >r make-pp-it "
693 "while more? r@ not and "
694 "loop "
695 "next " // n on top
696 "swap >r " // hide it
697 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
698 "r> drop >r " // replace bool value with new bool
699 "swap drop "
700 "end-while "
701 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
702 ;
703 } else {
704 return "dup >r true >r make-pp-it "
705 "while more? r@ and "
706 "loop "
707 "next " // n on top
708 "swap >r " // hide it
709 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
710 "r> drop >r " // replace bool value with new bool
711 "swap drop "
712 "end-while "
713 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
714 ;
715 }
716}
717TRIGGER_FUNCTION(tf_x_pop_scope_state) {
718 if(*tval & trigger::is_existence_scope) {
719 return "dup >r false >r make-sp-it "
720 "while more? r@ not and "
721 "loop "
722 "next " // v on top
723 "if "
724 "swap r> swap >r >r " // hide it [IT bool]
725 "make-pp-it " // state -> it
726 "while more? r@ not and "
727 "loop "
728 "next " // p on top
729 "swap >r " // hide it
730 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
731 "r> drop >r " // replace bool value with new bool
732 "swap drop "
733 "end-while "
734 "drop r> r> swap >r " // drop pop-iterator [bool IT], [IT, bool}, {IT], [bool]
735 "else "
736 "drop "
737 "end-if "
738 "end-while "
739 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
740 ;
741 } else {
742 return "dup >r true >r make-sp-it "
743 "while more? r@ and "
744 "loop "
745 "next " // v on top
746 "if "
747 "swap r> swap >r >r " // hide it [IT bool]
748 "make-pp-it " // state -> it
749 "while more? r@ and "
750 "loop "
751 "next " // p on top
752 "swap >r " // hide it
753 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
754 "r> drop >r " // replace bool value with new bool
755 "swap drop "
756 "end-while "
757 "drop r> r> swap >r " // drop pop-iterator [bool IT], [IT, bool}, {IT], [bool]
758 "else "
759 "drop "
760 "end-if "
761 "end-while "
762 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
763 ;
764 }
765}
766TRIGGER_FUNCTION(tf_x_pop_scope_nation) {
767 if(*tval & trigger::is_existence_scope) {
768 return "dup >r false >r make-n-it "
769 "while more? r@ not and "
770 "loop "
771 "next " // v on top
772 "if "
773 "swap r> swap >r >r " // hide it [IT bool]
774 "make-pp-it " // state -> it
775 "while more? r@ not and "
776 "loop "
777 "next " // p on top
778 "swap >r " // hide it
779 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
780 "r> drop >r " // replace bool value with new bool
781 "swap drop "
782 "end-while "
783 "drop r> r> swap >r " // drop pop-iterator [bool IT], [IT, bool}, {IT], [bool]
784 "else "
785 "drop "
786 "end-if "
787 "end-while "
788 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
789 ;
790 } else {
791 return "dup >r true >r make-n-it "
792 "while more? r@ and "
793 "loop "
794 "next " // v on top
795 "if "
796 "swap r> swap >r >r " // hide it [IT bool]
797 "make-pp-it " // state -> it
798 "while more? r@ and "
799 "loop "
800 "next " // p on top
801 "swap >r " // hide it
802 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
803 "r> drop >r " // replace bool value with new bool
804 "swap drop "
805 "end-while "
806 "drop r> r> swap >r " // drop pop-iterator [bool IT], [IT, bool}, {IT], [bool]
807 "else "
808 "drop "
809 "end-if "
810 "end-while "
811 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
812 ;
813 }
814}
815TRIGGER_FUNCTION(tf_x_provinces_in_variable_region) {
816 if(*tval & trigger::is_existence_scope) {
817 return ">r false >r " + std::to_string(trigger::payload(*(tval + 2)).state_id.index()) + " >state_definition_id make-asp-it "
818 "while more? r@ not and "
819 "loop "
820 "next " // n on top
821 "swap >r " // hide it
822 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
823 "r> drop >r " // replace bool value with new bool
824 "swap drop "
825 "end-while "
826 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
827 ;
828 } else {
829 return ">r true >r " + std::to_string(trigger::payload(*(tval + 2)).state_id.index()) + " >state_definition_id make-asp-it "
830 "while more? r@ and "
831 "loop "
832 "next " // n on top
833 "swap >r " // hide it
834 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
835 "r> drop >r " // replace bool value with new bool
836 "swap drop "
837 "end-while "
838 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
839 ;
840 }
841}
842TRIGGER_FUNCTION(tf_x_provinces_in_variable_region_proper) {
843 if(*tval & trigger::is_existence_scope) {
844 return ">r false >r " + std::to_string(trigger::payload(*(tval + 2)).reg_id.index()) + " >region_id make-arp-it "
845 "while more? r@ not and "
846 "loop "
847 "next " // n on top
848 "swap >r " // hide it
849 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
850 "r> drop >r " // replace bool value with new bool
851 "swap drop "
852 "end-while "
853 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
854 ;
855 } else {
856 return ">r true >r " + std::to_string(trigger::payload(*(tval + 2)).reg_id.index()) + " >region_id make-arp-it "
857 "while more? r@ and "
858 "loop "
859 "next " // n on top
860 "swap >r " // hide it
861 + apply_subtriggers(tval, ws) + " r> swap " // bool result on top
862 "r> drop >r " // replace bool value with new bool
863 "swap drop "
864 "end-while "
865 "drop r> r> swap " // drop it, move stored to stack, move bool to stack
866 ;
867 }
868}
869
870
871TRIGGER_FUNCTION(tf_owner_scope_state) {
872 std::string result;
873 result += "dup >r " + state_to_owner();
874 result += apply_subtriggers(tval, ws);
875 result += "swap drop r> swap ";
876 return result;
877}
878TRIGGER_FUNCTION(tf_owner_scope_province) {
879 std::string result;
880 result += "dup >r " + province_to_owner();
881 result += apply_subtriggers(tval, ws);
882 result += "swap drop r> swap ";
883 return result;
884}
885TRIGGER_FUNCTION(tf_controller_scope) {
886 std::string result;
887 result += "dup >r " + province_to_controller();
888 result += apply_subtriggers(tval, ws);
889 result += "swap drop r> swap ";
890 return result;
891}
892
893TRIGGER_FUNCTION(tf_location_scope) {
894 std::string result;
895 result += "dup >r " + pop_to_location();
896 result += apply_subtriggers(tval, ws);
897 result += "swap drop r> swap ";
898 return result;
899}
900TRIGGER_FUNCTION(tf_country_scope_state) {
901 std::string result;
902 result += "dup >r " + state_to_owner();
903 result += apply_subtriggers(tval, ws);
904 result += "swap drop r> swap ";
905 return result;
906}
907TRIGGER_FUNCTION(tf_country_scope_pop) {
908 std::string result;
909 result += "dup >r " + pop_to_owner();
910 result += apply_subtriggers(tval, ws);
911 result += "swap drop r> swap ";
912 return result;
913}
914TRIGGER_FUNCTION(tf_capital_scope) {
915 std::string result;
916 result += "dup >r capital @ ";
917 result += apply_subtriggers(tval, ws);
918 result += "swap drop r> swap ";
919 return result;
920}
921TRIGGER_FUNCTION(tf_capital_scope_province) {
922 std::string result;
923 result += "dup >r " + province_to_owner() + "capital @ ";
924 result += apply_subtriggers(tval, ws);
925 result += "swap drop r> swap ";
926 return result;
927}
928TRIGGER_FUNCTION(tf_capital_scope_pop) {
929 std::string result;
930 result += "dup >r " + pop_to_owner() + "capital @ ";
931 result += apply_subtriggers(tval, ws);
932 result += "swap drop r> swap ";
933 return result;
934}
935TRIGGER_FUNCTION(tf_this_scope) {
936 std::string result;
937 result += ">r dup ";
938 result += apply_subtriggers(tval, ws);
939 result += "swap drop r> swap ";
940 return result;
941}
942TRIGGER_FUNCTION(tf_from_scope) {
943 std::string result;
944 result += ">r >r dup r> swap ";
945 result += apply_subtriggers(tval, ws);
946 result += "swap drop r> swap ";
947 return result;
948}
949
950TRIGGER_FUNCTION(tf_sea_zone_scope) {
951 std::string result;
952 result += "dup >r port_to @ "; // F T port -- source province on R
953 result += apply_subtriggers(tval, ws);
954 result += "swap drop r> swap "; // put original province back under result value
955 return result;
956}
957
959 return "culture_group_membership-member group @ "
960 "cultural_union_of-culture_group identity @ identity_holder-identity nation @ ";
961}
963 return "primary_culture @ " + culture_to_union_holder();
964}
965
966
967TRIGGER_FUNCTION(tf_cultural_union_scope) {
968 std::string result;
969 result += "dup >r " + nation_to_union_holder();
970 result += apply_subtriggers(tval, ws);
971 result += "swap drop r> swap "; // put original under result value
972 return result;
973}
975 return "overlord-subject ruler @ ";
976}
977TRIGGER_FUNCTION(tf_overlord_scope) {
978 std::string result;
979 result += "dup >r " + overlord_from_subject();
980 result += apply_subtriggers(tval, ws);
981 result += "swap drop r> swap "; // put original under result value
982 return result;
983}
984TRIGGER_FUNCTION(tf_sphere_owner_scope) {
985 std::string result;
986 result += "dup >r in_sphere_of @ ";
987 result += apply_subtriggers(tval, ws);
988 result += "swap drop r> swap "; // put original under result value
989 return result;
990}
991TRIGGER_FUNCTION(tf_independence_scope) {
992 std::string result;
993 result += ">r >r dup defection_target @ identity_holder-identity nation @ r> swap ";
994 result += apply_subtriggers(tval, ws);
995 result += "swap drop r> swap "; // put original under result value
996 return result;
997}
998TRIGGER_FUNCTION(tf_flashpoint_tag_scope) {
999 std::string result;
1000 result += "dup >r flashpoint_tag @ identity_holder-identity nation @ ";
1001 result += apply_subtriggers(tval, ws);
1002 result += "swap drop r> swap "; // put original under result value
1003 return result;
1004}
1005TRIGGER_FUNCTION(tf_crisis_state_scope) {
1006 std::string result;
1007 result += ">r crisis-state @ ";
1008 result += apply_subtriggers(tval, ws);
1009 result += "swap drop r> swap "; // put original under result value
1010 return result;
1011}
1012TRIGGER_FUNCTION(tf_state_scope_province) {
1013 std::string result;
1014 result += "dup >r state_membership @ ";
1015 result += apply_subtriggers(tval, ws);
1016 result += "swap drop r> swap "; // put original under result value
1017 return result;
1018}
1019TRIGGER_FUNCTION(tf_state_scope_pop) {
1020 std::string result;
1021 result += "dup >r " + pop_to_location() + "state_membership @ ";
1022 result += apply_subtriggers(tval, ws);
1023 result += "swap drop r> swap "; // put original under result value
1024 return result;
1025}
1026TRIGGER_FUNCTION(tf_tag_scope) {
1027 auto tag = trigger::payload(tval[2]).tag_id;
1028
1029 std::string result;
1030 result += ">r " + std::to_string(tag.index()) + " >national_identity_id identity_holder-identity nation @ ";
1031 result += apply_subtriggers(tval, ws);
1032 result += "swap drop r> swap "; // put original under result value
1033 return result;
1034}
1035TRIGGER_FUNCTION(tf_integer_scope) {
1036 auto wprov = trigger::payload(tval[2]).prov_id;
1037
1038 std::string result;
1039 result += ">r " + std::to_string(wprov.index()) + " >province_id ";
1040 result += apply_subtriggers(tval, ws);
1041 result += "swap drop r> swap "; // put original under result value
1042 return result;
1043}
1044TRIGGER_FUNCTION(tf_country_scope_nation) {
1045 return apply_subtriggers(tval, ws);
1046}
1047TRIGGER_FUNCTION(tf_country_scope_province) {
1048 std::string result;
1049 result += "dup >r " + province_to_owner();
1050 result += apply_subtriggers(tval, ws);
1051 result += "swap drop r> swap "; // put original under result value
1052 return result;
1053}
1054TRIGGER_FUNCTION(tf_cultural_union_scope_pop) {
1055 std::string result;
1056 result += "dup >r culture @ " + culture_to_union_holder();
1057 result += apply_subtriggers(tval, ws);
1058 result += "swap drop r> swap "; // put original under result value
1059 return result;
1060}
1061
1062//
1063// non scope trigger functions
1064//
1065
1067 return "start-date @ current-date @ >i64 -1 >i64 + + current-year " + std::to_string(int32_t(tval[1])) + compare_values(tval[0]);
1068}
1070 return "start-date @ current-date @ >i64 -1 >i64 + + current-month " + std::to_string(int32_t(tval[1])) + compare_values(tval[0]);
1071}
1073 return "dup is_coast @ ";
1074}
1076 // note: comparison reversed since rank 1 is "greater" than rank 1 + N
1077 return "dup get_rank @ >i32 " + std::to_string(int32_t(tval[1])) + " swap " + compare_values(tval[0]);
1078}
1079TRIGGER_FUNCTION(tf_technology) {
1080 return "dup " + std::to_string(trigger::payload(tval[1]).tech_id.index()) + " >technology_id active_technologies @ " + truth_inversion(tval[0]);
1081}
1082TRIGGER_FUNCTION(tf_technology_province) {
1083 return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).tech_id.index()) + " >technology_id active_technologies @ " + truth_inversion(tval[0]);
1084}
1085TRIGGER_FUNCTION(tf_technology_pop) {
1086 return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).tech_id.index()) + " >technology_id active_technologies @ " + truth_inversion(tval[0]);
1087}
1088TRIGGER_FUNCTION(tf_strata_rich) {
1089 return "dup poptype @ strata @ " + std::to_string(int32_t(culture::pop_strata::rich)) + " >u8 " + compare_values_eq(tval[0]);
1090}
1091TRIGGER_FUNCTION(tf_strata_middle) {
1092 return "dup poptype @ strata @ " + std::to_string(int32_t(culture::pop_strata::middle)) + " >u8 " + compare_values_eq(tval[0]);
1093}
1094TRIGGER_FUNCTION(tf_strata_poor) {
1095 return "dup poptype @ strata @ " + std::to_string(int32_t(culture::pop_strata::poor)) + " >u8 " + compare_values_eq(tval[0]);
1096}
1097TRIGGER_FUNCTION(tf_life_rating_province) {
1098 return "dup life_rating @ " + std::to_string(trigger::payload(tval[1]).signed_value) + " >u8 " + compare_values(tval[0]);
1099}
1100TRIGGER_FUNCTION(tf_life_rating_state) {
1101 return "dup capital @ life_rating @ " + std::to_string(trigger::payload(tval[1]).signed_value) + " >u8 " + compare_values(tval[0]);
1102}
1103
1104TRIGGER_FUNCTION(tf_has_empty_adjacent_state_province) {
1105 return "dup >index state-ptr @ empty-a-province " + truth_inversion(tval[0]);
1106 /*
1107 return "dup false >r >r province_adjacency-connected_provinces dup size "
1108 "while 1 - dup 0 >= loop "
1109 "2dup nth-adjacent dup sea-province? not swap " + province_to_owner() + "valid? not and "
1110 "r> swap r> or >r >r "
1111 "end-while "
1112 "drop drop "
1113 " r> r> " + truth_inversion(tval[0]);
1114 ;
1115 */
1116}
1117
1118TRIGGER_FUNCTION(tf_has_empty_adjacent_state_state) {
1119 return "dup >index state-ptr @ empty-a-state " + truth_inversion(tval[0]);
1120 /*
1121 return
1122 "dup dup dup " + state_to_owner() + ">r false >r definition @ abstract_state_membership-state dup size "
1123 "while 1 - dup 0 >= loop "
1124 "2dup index @ province " // now have a province in scope, just need to iterate over it ...
1125 "dup " + province_to_owner() + "r> swap r@ = swap >r " //
1126 " if "
1127 "dup >r province_adjacency-connected_provinces dup size "
1128 "while 1 - dup 0 >= loop " // R: owner BOOL SOURCE-PROV
1129 "2dup nth-adjacent dup sea-province? not swap " + province_to_owner() + "valid? not and " // proxy - index - bool
1130 "r> swap r> or >r >r "
1131 "end-while "
1132 "drop drop " // drop proxy and index
1133 "r> drop " // discard saved province
1134 " else "
1135 " drop " // drop province
1136 " end-if "
1137 "end-while "
1138 "drop drop " // drop proxy and index
1139 " r> r> swap drop " + truth_inversion(tval[0]);
1140 ;
1141 */
1142}
1143TRIGGER_FUNCTION(tf_state_id_province) {
1144 return "dup abstract_state_membership-province state @ "
1145 + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id abstract_state_membership-province state @ = " + truth_inversion(tval[0]);
1146}
1147TRIGGER_FUNCTION(tf_state_id_state) {
1148 return "dup definition @ "
1149 + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id abstract_state_membership-province state @ = " + truth_inversion(tval[0]);
1150}
1151TRIGGER_FUNCTION(tf_cash_reserves) {
1152 return "true " + truth_inversion(tval[0]);
1153 // commented out because desired_needs_spending is not implemented
1154 //auto ratio = read_float_from_payload(tval + 1);
1155 //auto target = economy::desired_needs_spending(ws, to_pop(primary_slot));
1156 //auto savings_qnty = ws.world.pop_get_savings(to_pop(primary_slot));
1157 //return compare_values(tval[0], ve::select(target != 0.0f, savings_qnty * 100.0f / target, 100.0f), ratio);
1158}
1159
1160
1161TRIGGER_FUNCTION(tf_unemployment_nation) {
1162 return "dup " + std::to_string(demographics::employable.index()) + " >demographics_key demographics @ >r "
1163 "dup " + std::to_string(demographics::employed.index()) + " >demographics_key demographics @ 1.0 swap r@ / - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]);
1164 //auto total_employable = ws.world.nation_get_demographics(to_nation(primary_slot), demographics::employable);
1165 //auto total_employed = ws.world.nation_get_demographics(to_nation(primary_slot), demographics::employed);
1166 //return compare_values(tval[0], ve::select(total_employable > 0.0f, 1.0f - (total_employed / total_employable), 0.0f),
1167 // read_float_from_payload(tval + 1));
1168}
1169TRIGGER_FUNCTION(tf_unemployment_state) {
1170 return "dup " + std::to_string(demographics::employable.index()) + " >demographics_key demographics @ >r "
1171 "dup " + std::to_string(demographics::employed.index()) + " >demographics_key demographics @ 1.0 swap r@ / - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]);
1172}
1173TRIGGER_FUNCTION(tf_unemployment_province) {
1174 return "dup " + std::to_string(demographics::employable.index()) + " >demographics_key demographics @ >r "
1175 "dup " + std::to_string(demographics::employed.index()) + " >demographics_key demographics @ 1.0 swap r@ / - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]);
1176}
1177TRIGGER_FUNCTION(tf_unemployment_pop) {
1178 return "dup poptype @ has_unemployment @ not >r dup size @ >r "
1179 "dup employment @ 1.0 swap r> / - 0.0 r> select " + std::to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]);
1180}
1181TRIGGER_FUNCTION(tf_is_slave_nation) {
1182 return "dup combined_issue_rules @ >i32 " + std::to_string(issue_rule::slavery_allowed) + " and 0 <> " + truth_inversion(tval[0]);
1183}
1184TRIGGER_FUNCTION(tf_is_slave_state) {
1185 return "dup capital @ is_slave @ " + truth_inversion(tval[0]);
1186}
1187TRIGGER_FUNCTION(tf_is_slave_province) {
1188 return "dup is_slave @ " + truth_inversion(tval[0]);
1189}
1190TRIGGER_FUNCTION(tf_is_slave_pop) {
1191 return "dup poptype @ >index " + std::to_string(ws.culture_definitions.slaves.index()) + " " + compare_values_eq(tval[0]);
1192}
1193TRIGGER_FUNCTION(tf_is_independant) {
1194 return "dup overlord-subject ruler @ valid? not " + truth_inversion(tval[0]);
1195}
1196
1198 return ">index " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key ";
1199}
1200TRIGGER_FUNCTION(tf_has_national_minority_province) {
1201 return "dup dup " + province_to_owner() + " primary_culture @ " + demo_culture_key(ws) + "demographics @ >r "
1202 "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ r> <> " + truth_inversion(tval[0]);
1203}
1204TRIGGER_FUNCTION(tf_has_national_minority_state) {
1205 return "dup dup " + state_to_owner() + " primary_culture @ " + demo_culture_key(ws) + "demographics @ >r "
1206 "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ r> <> " + truth_inversion(tval[0]);
1207}
1208TRIGGER_FUNCTION(tf_has_national_minority_nation) {
1209 return "dup dup primary_culture @ " + demo_culture_key(ws) + "demographics @ >r "
1210 "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ r> <> " + truth_inversion(tval[0]);
1211}
1212TRIGGER_FUNCTION(tf_government_nation) {
1213 return "dup government_type @ >index " + std::to_string(trigger::payload(tval[1]).gov_id.index()) + " " + compare_values_eq(tval[0]);
1214}
1215TRIGGER_FUNCTION(tf_government_pop) {
1216 return "dup " + pop_to_owner() + "government_type @ >index " + std::to_string(trigger::payload(tval[1]).gov_id.index()) + " " + compare_values_eq(tval[0]);
1217}
1218TRIGGER_FUNCTION(tf_capital) {
1219 return "dup capital @ >index " + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " " + compare_values_eq(tval[0]);
1220}
1221TRIGGER_FUNCTION(tf_tech_school) {
1222 return "dup tech_school @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]);
1223}
1224TRIGGER_FUNCTION(tf_primary_culture) {
1225 return "dup primary_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]);
1226}
1227TRIGGER_FUNCTION(tf_primary_culture_pop) {
1228 return "dup " + pop_to_owner() + "primary_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]);
1229}
1230TRIGGER_FUNCTION(tf_accepted_culture) {
1231 return "dup " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " >culture_id accepted_cultures @ " + truth_inversion(tval[0]);
1232}
1233TRIGGER_FUNCTION(tf_culture_pop) {
1234 return "dup culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]);
1235}
1236TRIGGER_FUNCTION(tf_culture_state) {
1237 return "dup dominant_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]);
1238}
1239TRIGGER_FUNCTION(tf_culture_province) {
1240 return "dup dominant_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]);
1241}
1242TRIGGER_FUNCTION(tf_culture_nation) {
1243 return "dup primary_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " = >r "
1244 "dup " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " >culture_id accepted_cultures @ r> or " + truth_inversion(tval[0]);
1245}
1246TRIGGER_FUNCTION(tf_culture_pop_reb) {
1247 return ">r >r dup primary_culture @ >index r> swap r> swap >r dup culture @ >index r> " + compare_values_eq(tval[0]);
1248}
1249TRIGGER_FUNCTION(tf_culture_state_reb) {
1250 return ">r >r dup primary_culture @ >index r> swap r> swap >r dup dominant_culture @ >index r> " + compare_values_eq(tval[0]);
1251}
1252TRIGGER_FUNCTION(tf_culture_province_reb) {
1253 return ">r >r dup primary_culture @ >index r> swap r> swap >r dup dominant_culture @ >index r> " + compare_values_eq(tval[0]);
1254}
1255TRIGGER_FUNCTION(tf_culture_nation_reb) {
1256 return ">r >r dup primary_culture @ r> swap r> swap >r dup primary_culture @ r@ = >r "
1257 "dup r> r> swap >r accepted_cultures @ r> or " + truth_inversion(tval[0]);
1258}
1259TRIGGER_FUNCTION(tf_culture_this_nation) {
1260 return "dup culture @ swap >r >r dup primary_culture @ r@ = >r " // R[pop C bool]
1261 "dup r> r> swap >r accepted_cultures @ r> or " + truth_inversion(tval[0]) + "r> swap ";
1262}
1263TRIGGER_FUNCTION(tf_culture_from_nation) {
1264 return "dup culture @ swap >r swap >r >r dup primary_culture @ r@ = >r "
1265 "dup r> r> swap >r accepted_cultures @ r> or " + truth_inversion(tval[0]) + "r> swap r> swap ";
1266}
1267TRIGGER_FUNCTION(tf_culture_this_state) {
1268 return "dup culture @ swap >r >r dup " + state_to_owner() + "dup primary_culture @ r@ = >r "
1269 "r> r> swap >r accepted_cultures @ r> or " + truth_inversion(tval[0]) + "r> swap ";
1270}
1271TRIGGER_FUNCTION(tf_culture_this_pop) {
1272 return "dup culture @ swap >r >r dup " + pop_to_owner() + "dup primary_culture @ r@ = >r "
1273 "r> r> swap >r accepted_cultures @ r> or " + truth_inversion(tval[0]) + "r> swap ";
1274}
1275TRIGGER_FUNCTION(tf_culture_this_province) {
1276 return "dup culture @ swap >r >r dup " + province_to_owner() + "dup primary_culture @ r@ = >r "
1277 "r> r> swap >r accepted_cultures @ r> or " + truth_inversion(tval[0]) + "r> swap ";
1278}
1279TRIGGER_FUNCTION(tf_culture_group_nation) {
1280 return "dup primary_culture @ culture_group_membership-member group @ >index " + std::to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]);
1281}
1282TRIGGER_FUNCTION(tf_culture_group_pop) {
1283 return "dup culture @ culture_group_membership-member group @ >index " + std::to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]);
1284}
1285TRIGGER_FUNCTION(tf_culture_group_province) {
1286 return "dup dominant_culture @ culture_group_membership-member group @ >index " + std::to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]);
1287}
1288TRIGGER_FUNCTION(tf_culture_group_state) {
1289 return "dup dominant_culture @ culture_group_membership-member group @ >index " + std::to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]);
1290}
1291TRIGGER_FUNCTION(tf_culture_group_reb_nation) {
1292 return "dup primary_culture @ culture_group_membership-member group @ >r >r >r dup primary_culture @ culture_group_membership-member group @ r> swap r> swap r> = " + truth_inversion(tval[0]);
1293}
1294TRIGGER_FUNCTION(tf_culture_group_reb_pop) {
1295 return "dup culture @ culture_group_membership-member group @ >r >r >r dup primary_culture @ culture_group_membership-member group @ r> swap r> swap r> = " + truth_inversion(tval[0]);
1296}
1297TRIGGER_FUNCTION(tf_culture_group_nation_this_nation) {
1298 return "dup primary_culture @ culture_group_membership-member group @ >r >r dup primary_culture @ culture_group_membership-member group @ r> swap r> = " + truth_inversion(tval[0]);
1299}
1300TRIGGER_FUNCTION(tf_culture_group_pop_this_nation) {
1301 return "dup culture @ culture_group_membership-member group @ >r >r dup primary_culture @ culture_group_membership-member group @ r> swap r> = " + truth_inversion(tval[0]);
1302}
1303TRIGGER_FUNCTION(tf_culture_group_nation_from_nation) {
1304 return "dup primary_culture @ culture_group_membership-member group @ >r >r >r dup primary_culture @ culture_group_membership-member group @ r> swap r> swap r> = " + truth_inversion(tval[0]);
1305}
1306TRIGGER_FUNCTION(tf_culture_group_pop_from_nation) {
1307 return "dup culture @ culture_group_membership-member group @ >r >r >r dup primary_culture @ culture_group_membership-member group @ r> swap r> swap r> = " + truth_inversion(tval[0]);
1308}
1309TRIGGER_FUNCTION(tf_culture_group_nation_this_province) {
1310 return "dup primary_culture @ culture_group_membership-member group @ >r >r dup " + province_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap r> = " + truth_inversion(tval[0]);
1311}
1312TRIGGER_FUNCTION(tf_culture_group_pop_this_province) {
1313 return "dup culture @ culture_group_membership-member group @ >r >r dup " + province_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap r> = " + truth_inversion(tval[0]);
1314}
1315TRIGGER_FUNCTION(tf_culture_group_nation_this_state) {
1316 return "dup primary_culture @ culture_group_membership-member group @ >r >r dup " + state_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap r> = " + truth_inversion(tval[0]);
1317}
1318TRIGGER_FUNCTION(tf_culture_group_pop_this_state) {
1319 return "dup culture @ culture_group_membership-member group @ >r >r dup " + state_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap r> = " + truth_inversion(tval[0]);
1320}
1321TRIGGER_FUNCTION(tf_culture_group_nation_this_pop) {
1322 return "dup primary_culture @ culture_group_membership-member group @ >r >r dup " + pop_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap r> = " + truth_inversion(tval[0]);
1323}
1324TRIGGER_FUNCTION(tf_culture_group_pop_this_pop) {
1325 return "dup culture @ culture_group_membership-member group @ >r >r dup " + pop_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap r> = " + truth_inversion(tval[0]);
1326}
1327TRIGGER_FUNCTION(tf_religion) {
1328 return "dup religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " " + compare_values_eq(tval[0]);
1329}
1330TRIGGER_FUNCTION(tf_religion_reb) {
1331 return ">r >r dup religion @ >index r> swap r> swap >r dup religion @ >index r> " + compare_values_eq(tval[0]);
1332}
1333TRIGGER_FUNCTION(tf_religion_from_nation) {
1334 return ">r >r dup religion @ >index r> swap r> swap >r dup religion @ >index r> " + compare_values_eq(tval[0]);
1335}
1336TRIGGER_FUNCTION(tf_religion_this_nation) {
1337 return ">r dup religion @ >index r> swap >r dup religion @ >index r> " + compare_values_eq(tval[0]);
1338}
1339TRIGGER_FUNCTION(tf_religion_this_state) {
1340 return ">r dup " + state_to_owner() + "religion @ >index r> swap >r dup religion @ >index r> " + compare_values_eq(tval[0]);
1341}
1342TRIGGER_FUNCTION(tf_religion_this_province) {
1343 return ">r dup " + province_to_owner() + "religion @ >index r> swap >r dup religion @ >index r> " + compare_values_eq(tval[0]);
1344}
1345TRIGGER_FUNCTION(tf_religion_this_pop) {
1346 return ">r dup " + pop_to_owner() + "religion @ >index r> swap >r dup religion @ >index r> " + compare_values_eq(tval[0]);
1347}
1348TRIGGER_FUNCTION(tf_terrain_province) {
1349 return "dup terrain @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]);
1350}
1351TRIGGER_FUNCTION(tf_terrain_pop) {
1352 return "dup " + pop_to_location() + "terrain @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]);
1353}
1354TRIGGER_FUNCTION(tf_trade_goods) {
1355 return "dup rgo @ >index " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " " + compare_values_eq(tval[0]);
1356}
1357
1358TRIGGER_FUNCTION(tf_is_secondary_power_nation) {
1359 return "dup rank @ >i32 " + std::to_string(int32_t(ws.defines.colonial_rank)) + " <= " + truth_inversion(tval[0]);
1360}
1361TRIGGER_FUNCTION(tf_is_secondary_power_pop) {
1362 return "dup " + pop_to_owner() + "rank @ >i32 " + std::to_string(int32_t(ws.defines.colonial_rank)) + " <= " + truth_inversion(tval[0]);
1363}
1364TRIGGER_FUNCTION(tf_has_faction_nation) {
1365 return "false >r dup rebellion_within-ruler dup size "
1366 "while 1 - dup 0 >= loop "
1367 "2dup index @ rebels type @ >index " + std::to_string(trigger::payload(tval[1]).reb_id.index()) + " = r> or >r "
1368 "end-while "
1369 "drop drop "
1370 "r> " + truth_inversion(tval[0]);
1371 ;
1372}
1373TRIGGER_FUNCTION(tf_has_faction_pop) {
1374 return "dup pop_rebellion_membership-pop type @ >index " + std::to_string(trigger::payload(tval[1]).reb_id.index()) + " " + compare_values_eq(tval[0]);
1375}
1376
1377TRIGGER_FUNCTION(tf_has_unclaimed_cores) {
1378 return "dup >index state-ptr @ unowned-core " + truth_inversion(tval[0]);
1379}
1380TRIGGER_FUNCTION(tf_have_core_in_nation_tag) {
1381 return "dup identity_holder-nation @ identity >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id identity_holder-identity nation @ >index state-ptr @ core-in-nation " + truth_inversion(tval[0]);
1382}
1383TRIGGER_FUNCTION(tf_have_core_in_nation_this) {
1384 return "dup identity_holder-nation @ identity >index >r >r dup >index r> swap r> swap state-ptr @ core-in-nation " + truth_inversion(tval[0]);
1385}
1386TRIGGER_FUNCTION(tf_have_core_in_nation_from) {
1387 return "dup identity_holder-nation @ identity >index >r >r >r dup >index r> swap r> swap r> swap state-ptr @ core-in-nation " + truth_inversion(tval[0]);
1388}
1389
1390TRIGGER_FUNCTION(tf_is_cultural_union_bool) {
1391 return "dup identity_holder-nation @ identity cultural_union_of-identity @ valid? " + truth_inversion(tval[0]);
1392}
1393TRIGGER_FUNCTION(tf_is_cultural_union_this_self_pop) {
1394 return "dup culture @ culture_group_membership-member group @ >r >r "
1395 "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group r> swap r> = " + truth_inversion(tval[0]);
1396}
1397TRIGGER_FUNCTION(tf_is_cultural_union_pop_this_pop) {
1398 return "dup culture @ culture_group_membership-member group @ >r >r "
1399 "dup " + pop_to_owner() + "identity_holder-nation @ identity cultural_union_of-identity @ culture_group r> swap r> = " + truth_inversion(tval[0]);
1400}
1401TRIGGER_FUNCTION(tf_is_cultural_union_this_nation) {
1402 return "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group >r >r "
1403 "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group r> swap r> = " + truth_inversion(tval[0]);
1404}
1405TRIGGER_FUNCTION(tf_is_cultural_union_this_pop) {
1406 return "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group >r >r "
1407 "dup " + pop_to_owner() + "identity_holder-nation @ identity cultural_union_of-identity @ culture_group r> swap r> = " + truth_inversion(tval[0]);
1408}
1409TRIGGER_FUNCTION(tf_is_cultural_union_this_state) {
1410 return "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group >r >r "
1411 "dup " + state_to_owner() + "identity_holder-nation @ identity cultural_union_of-identity @ culture_group r> swap r> = " + truth_inversion(tval[0]);
1412}
1413TRIGGER_FUNCTION(tf_is_cultural_union_this_province) {
1414 return "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group >r >r "
1415 "dup " + province_to_owner() + "identity_holder-nation @ identity cultural_union_of-identity @ culture_group r> swap r> = " + truth_inversion(tval[0]);
1416}
1417TRIGGER_FUNCTION(tf_is_cultural_union_this_rebel) {
1418 return "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group >r >r >r "
1419 "dup primary_culture @ culture_group_membership-member group @ r> swap r> swap r> = " + truth_inversion(tval[0]);
1420}
1421TRIGGER_FUNCTION(tf_is_cultural_union_tag_nation) {
1422 return "dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index "
1423 + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r "
1424 "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group "
1425 + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = "
1426 "r> or " + truth_inversion(tval[0]);
1427}
1428TRIGGER_FUNCTION(tf_is_cultural_union_tag_this_pop) {
1429 return ">r dup culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index "
1430 + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = r> swap " + truth_inversion(tval[0]);
1431}
1432TRIGGER_FUNCTION(tf_is_cultural_union_tag_this_state) {
1433 return ">r dup " + state_to_owner() + "primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index "
1434 + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r "
1435 "dup " + state_to_owner() + "identity_holder-nation @ identity cultural_union_of-identity @ culture_group "
1436 + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = "
1437 "r> or r> swap" + truth_inversion(tval[0]);
1438}
1439TRIGGER_FUNCTION(tf_is_cultural_union_tag_this_province) {
1440 return ">r dup " + state_to_owner() + "primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index "
1441 + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r "
1442 "dup " + state_to_owner() + "identity_holder-nation @ identity cultural_union_of-identity @ culture_group "
1443 + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = "
1444 "r> or r> swap" + truth_inversion(tval[0]);
1445}
1446TRIGGER_FUNCTION(tf_is_cultural_union_tag_this_nation) {
1447 return ">r dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index "
1448 + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r "
1449 "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group "
1450 + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = "
1451 "r> or r> swap" + truth_inversion(tval[0]);
1452}
1453TRIGGER_FUNCTION(tf_can_build_factory_nation) {
1454 return "dup combined_issue_rules @ >i32 " + std::to_string(issue_rule::pop_build_factory) + " and 0 <> " + truth_inversion(tval[0]);
1455}
1456TRIGGER_FUNCTION(tf_can_build_factory_province) {
1457 return "dup " + province_to_owner() + "combined_issue_rules @ >i32 " + std::to_string(issue_rule::pop_build_factory) + " and 0 <> " + truth_inversion(tval[0]);
1458}
1459TRIGGER_FUNCTION(tf_can_build_factory_pop) {
1460 return "dup " + pop_to_owner() + "combined_issue_rules @ >i32 " + std::to_string(issue_rule::pop_build_factory) + " and 0 <> " + truth_inversion(tval[0]);
1461}
1462TRIGGER_FUNCTION(tf_war_nation) {
1463 return "dup is_at_war @ " + truth_inversion(tval[0]);
1464}
1465TRIGGER_FUNCTION(tf_war_pop) {
1466 return "dup " + pop_to_owner() + "is_at_war @ " + truth_inversion(tval[0]);
1467}
1468TRIGGER_FUNCTION(tf_war_exhaustion_nation) {
1469 return "dup war_exhaustion @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1470}
1471TRIGGER_FUNCTION(tf_war_exhaustion_province) {
1472 return "dup " + province_to_owner() + "war_exhaustion @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1473}
1474TRIGGER_FUNCTION(tf_war_exhaustion_pop) {
1475 return "dup " + pop_to_owner() + "war_exhaustion @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1476}
1477TRIGGER_FUNCTION(tf_blockade) {
1478 return "dup central_ports @ >f32 >r dup central_blockaded @ >f32 r@ / 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1479}
1481 return "dup " + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + province_to_owner() + " = " + truth_inversion(tval[0]);
1482}
1483TRIGGER_FUNCTION(tf_owns_province) {
1484 return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + province_to_owner() + " = " + truth_inversion(tval[0]);
1485}
1486TRIGGER_FUNCTION(tf_controls) {
1487 return "dup " + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + province_to_controller() + " = " + truth_inversion(tval[0]);
1488}
1489TRIGGER_FUNCTION(tf_is_core_integer) {
1490 return "dup " + nation_to_tag() + ">index " + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " state-ptr @ core-in-province " + truth_inversion(tval[0]);
1491}
1492TRIGGER_FUNCTION(tf_is_core_this_nation) {
1493 return "dup >index >r >r dup " + nation_to_tag() + ">index r> swap r> state-ptr @ core-in-province " + truth_inversion(tval[0]);
1494}
1495TRIGGER_FUNCTION(tf_is_core_this_state) {
1496 return "dup >index >r >r dup " + state_to_owner() + nation_to_tag() + ">index r> swap r> state-ptr @ core-in-province " + truth_inversion(tval[0]);
1497}
1498TRIGGER_FUNCTION(tf_is_core_this_province) {
1499 return "dup >index >r >r dup " + province_to_owner() + nation_to_tag() + ">index r> swap r> state-ptr @ core-in-province " + truth_inversion(tval[0]);
1500}
1501TRIGGER_FUNCTION(tf_is_core_this_pop) {
1502 return "dup >index >r >r dup " + pop_to_owner() + nation_to_tag() + ">index r> swap r> state-ptr @ core-in-province " + truth_inversion(tval[0]);
1503}
1504TRIGGER_FUNCTION(tf_is_core_from_nation) {
1505 return "dup >index >r >r >r dup " + nation_to_tag() + ">index r> swap r> swap r> state-ptr @ core-in-province " + truth_inversion(tval[0]);
1506}
1507TRIGGER_FUNCTION(tf_is_core_reb) {
1508 return "dup >index >r >r >r dup defection_target @ >index r> swap r> swap r> state-ptr @ core-in-province " + truth_inversion(tval[0]);
1509}
1510TRIGGER_FUNCTION(tf_is_core_state_from_nation) {
1511 return "dup >index >r >r >r dup " + nation_to_tag() + ">index r> swap r> swap r> state-ptr @ core-in-state " + truth_inversion(tval[0]);
1512}
1513TRIGGER_FUNCTION(tf_is_core_state_this_nation) {
1514 return "dup >index >r >r dup " + nation_to_tag() + ">index r> swap r> state-ptr @ core-in-state " + truth_inversion(tval[0]);
1515}
1516TRIGGER_FUNCTION(tf_is_core_state_this_province) {
1517 return "dup >index >r >r dup " + province_to_owner() + nation_to_tag() + ">index r> swap r> state-ptr @ core-in-state " + truth_inversion(tval[0]);
1518}
1519TRIGGER_FUNCTION(tf_is_core_state_this_pop) {
1520 return "dup >index >r >r dup " + pop_to_owner() + nation_to_tag() + ">index r> swap r> state-ptr @ core-in-state " + truth_inversion(tval[0]);
1521}
1522TRIGGER_FUNCTION(tf_is_core_boolean) {
1523 return "dup is_owner_core @ " + truth_inversion(tval[0]);
1524}
1525TRIGGER_FUNCTION(tf_is_core_tag) {
1526 return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " swap state-ptr @ core-in-province " + truth_inversion(tval[0]);
1527}
1528TRIGGER_FUNCTION(tf_is_core_pop_tag) {
1529 return "dup " + pop_to_location() + ">index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " swap state-ptr @ core-in-province " + truth_inversion(tval[0]);
1530}
1531TRIGGER_FUNCTION(tf_is_core_state_tag) {
1532 return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " swap state-ptr @ core-fully-state " + truth_inversion(tval[0]);
1533}
1534TRIGGER_FUNCTION(tf_num_of_revolts) {
1535 return "dup rebel_controlled_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
1536}
1537TRIGGER_FUNCTION(tf_revolt_percentage) {
1538 return "dup central_province_count @ >f32 >r dup central_rebel_controlled @ >f32 r@ / 0.0 r> 0.0 <= select "
1539 + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1540}
1541TRIGGER_FUNCTION(tf_num_of_cities_int) {
1542 return "dup owned_province_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
1543}
1544TRIGGER_FUNCTION(tf_num_of_cities_from_nation) {
1545 return ">r >r dup owned_province_count @ r> swap r> swap >r dup owned_province_count @ r> " + compare_values(tval[0]);
1546}
1547TRIGGER_FUNCTION(tf_num_of_cities_this_nation) {
1548 return ">r dup owned_province_count @ r> swap >r dup owned_province_count @ r> " + compare_values(tval[0]);
1549}
1550TRIGGER_FUNCTION(tf_num_of_cities_this_state) {
1551 return ">r dup " + state_to_owner() + "owned_province_count @ r> swap >r dup owned_province_count @ r> " + compare_values(tval[0]);
1552}
1553TRIGGER_FUNCTION(tf_num_of_cities_this_province) {
1554 return ">r dup " + province_to_owner() + "owned_province_count @ r> swap >r dup owned_province_count @ r> " + compare_values(tval[0]);
1555}
1556TRIGGER_FUNCTION(tf_num_of_cities_this_pop) {
1557 return ">r dup " + pop_to_owner() + "owned_province_count @ r> swap >r dup owned_province_count @ r> " + compare_values(tval[0]);
1558}
1559TRIGGER_FUNCTION(tf_num_of_ports) {
1560 return "dup central_ports @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
1561}
1562TRIGGER_FUNCTION(tf_num_of_allies) {
1563 return "dup allies_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
1564}
1565TRIGGER_FUNCTION(tf_num_of_vassals) {
1566 return "dup vassals_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
1567}
1568TRIGGER_FUNCTION(tf_owned_by_tag) {
1569 return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]);
1570}
1571TRIGGER_FUNCTION(tf_owned_by_this_nation) {
1572 return ">r dup r> swap >r dup " + province_to_owner() + " r> = " + truth_inversion(tval[0]);
1573}
1574TRIGGER_FUNCTION(tf_owned_by_from_nation) {
1575 return ">r >r dup r> swap r> swap >r dup " + province_to_owner() + " r> = " + truth_inversion(tval[0]);
1576}
1577TRIGGER_FUNCTION(tf_owned_by_this_province) {
1578 return ">r dup " + province_to_owner() + "r> swap >r dup " + province_to_owner() + " r> = " + truth_inversion(tval[0]);
1579}
1580TRIGGER_FUNCTION(tf_owned_by_this_state) {
1581 return ">r dup " + state_to_owner() + "r> swap >r dup " + province_to_owner() + " r> = " + truth_inversion(tval[0]);
1582}
1583TRIGGER_FUNCTION(tf_owned_by_this_pop) {
1584 return ">r dup " + pop_to_owner() + "r> swap >r dup " + province_to_owner() + " r> = " + truth_inversion(tval[0]);
1585}
1586TRIGGER_FUNCTION(tf_owned_by_state_tag) {
1587 return "dup " + state_to_owner() + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]);
1588}
1589TRIGGER_FUNCTION(tf_owned_by_state_this_nation) {
1590 return ">r dup r> swap >r dup " + state_to_owner() + " r> = " + truth_inversion(tval[0]);
1591}
1592TRIGGER_FUNCTION(tf_owned_by_state_from_nation) {
1593 return ">r >r dup r> swap r> swap >r dup " + state_to_owner() + " r> = " + truth_inversion(tval[0]);
1594}
1595TRIGGER_FUNCTION(tf_owned_by_state_this_province) {
1596 return ">r dup " + province_to_owner() + "r> swap >r dup " + state_to_owner() + " r> = " + truth_inversion(tval[0]);
1597}
1598TRIGGER_FUNCTION(tf_owned_by_state_this_state) {
1599 return ">r dup " + state_to_owner() + "r> swap >r dup " + state_to_owner() + " r> = " + truth_inversion(tval[0]);
1600}
1601TRIGGER_FUNCTION(tf_owned_by_state_this_pop) {
1602 return ">r dup " + pop_to_owner() + "r> swap >r dup " + state_to_owner() + " r> = " + truth_inversion(tval[0]);
1603}
1604TRIGGER_FUNCTION(tf_exists_bool) {
1605 return "dup owned_province_count @ >i32 0 <> " + truth_inversion(tval[0]);
1606}
1607TRIGGER_FUNCTION(tf_exists_tag) {
1608 return std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "owned_province_count @ >i32 0 <> " + truth_inversion(tval[0]);
1609}
1610TRIGGER_FUNCTION(tf_has_country_flag) {
1611 return "dup " + std::to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]);
1612}
1613TRIGGER_FUNCTION(tf_has_country_flag_pop) {
1614 return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]);
1615}
1616TRIGGER_FUNCTION(tf_has_country_flag_province) {
1617 return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]);
1618}
1619TRIGGER_FUNCTION(tf_has_country_flag_state) {
1620 return "dup " + state_to_owner() + std::to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]);
1621}
1622TRIGGER_FUNCTION(tf_continent_province) {
1623 return "dup continent @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]);
1624}
1625TRIGGER_FUNCTION(tf_continent_state) {
1626 return "dup capital @ continent @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]);
1627}
1628TRIGGER_FUNCTION(tf_continent_nation) {
1629 return "dup capital @ continent @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]);
1630}
1631TRIGGER_FUNCTION(tf_continent_pop) {
1632 return "dup " + pop_to_location() + "continent @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]);
1633}
1634TRIGGER_FUNCTION(tf_continent_nation_this) {
1635 return ">r dup capital @ continent @ r> swap >r dup capital @ continent @ r> = " + truth_inversion(tval[0]);
1636}
1637TRIGGER_FUNCTION(tf_continent_state_this) {
1638 return ">r dup capital @ continent @ r> swap >r dup capital @ continent @ r> = " + truth_inversion(tval[0]);
1639}
1640TRIGGER_FUNCTION(tf_continent_province_this) {
1641 return ">r dup capital @ continent @ r> swap >r dup continent @ r> = " + truth_inversion(tval[0]);
1642}
1643TRIGGER_FUNCTION(tf_continent_pop_this) {
1644 return ">r dup capital @ continent @ r> swap >r dup " + pop_to_location() + "continent @ r> = " + truth_inversion(tval[0]);
1645}
1646TRIGGER_FUNCTION(tf_continent_nation_from) {
1647 return ">r >r dup capital @ continent @ r> swap r> swap >r dup capital @ continent @ r> = " + truth_inversion(tval[0]);
1648}
1649TRIGGER_FUNCTION(tf_continent_state_from) {
1650 return ">r >r dup capital @ continent @ r> swap r> swap >r dup capital @ continent @ r> = " + truth_inversion(tval[0]);
1651}
1652TRIGGER_FUNCTION(tf_continent_province_from) {
1653 return ">r >r dup capital @ continent @ r> swap r> swap >r dup continent @ r> = " + truth_inversion(tval[0]);
1654}
1655TRIGGER_FUNCTION(tf_continent_pop_from) {
1656 return ">r >r dup capital @ continent @ r> swap r> swap >r dup " + pop_to_location() + "continent @ r> = " + truth_inversion(tval[0]);
1657}
1658TRIGGER_FUNCTION(tf_casus_belli_tag) {
1659 return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ has-cb-against " + truth_inversion(tval[0]);
1660}
1661TRIGGER_FUNCTION(tf_casus_belli_from) {
1662 return ">r >r dup r> swap r> swap >r dup >index r> >index state-ptr @ has-cb-against " + truth_inversion(tval[0]);
1663}
1664TRIGGER_FUNCTION(tf_casus_belli_this_nation) {
1665 return ">r >dup r> swap >r dup >index r> >index state-ptr @ has-cb-against " + truth_inversion(tval[0]);
1666}
1667TRIGGER_FUNCTION(tf_casus_belli_this_state) {
1668 return ">r >dup " + state_to_owner() + "r> swap >r dup >index r> >index state-ptr @ has-cb-against " + truth_inversion(tval[0]);
1669}
1670TRIGGER_FUNCTION(tf_casus_belli_this_province) {
1671 return ">r >dup " + province_to_owner() + "r> swap >r dup >index r> >index state-ptr @ has-cb-against " + truth_inversion(tval[0]);
1672}
1673TRIGGER_FUNCTION(tf_casus_belli_this_pop) {
1674 return ">r >dup " + pop_to_owner() + "r> swap >r dup >index r> >index state-ptr @ has-cb-against " + truth_inversion(tval[0]);
1675}
1676TRIGGER_FUNCTION(tf_military_access_tag) {
1677 return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ has-access-with " + truth_inversion(tval[0]);
1678}
1679TRIGGER_FUNCTION(tf_military_access_from) {
1680 return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ has-access-with " + truth_inversion(tval[0]);
1681}
1682TRIGGER_FUNCTION(tf_military_access_this_nation) {
1683 return ">r dup >index r> swap >r dup >index r> state-ptr @ has-access-with " + truth_inversion(tval[0]);
1684}
1685TRIGGER_FUNCTION(tf_military_access_this_state) {
1686 return ">r dup " + state_to_owner() + ">index r> swap >r dup >index r> state-ptr @ has-access-with " + truth_inversion(tval[0]);
1687}
1688TRIGGER_FUNCTION(tf_military_access_this_province) {
1689 return ">r dup " + province_to_owner() + ">index r> swap >r dup >index r> state-ptr @ has-access-with " + truth_inversion(tval[0]);
1690}
1691TRIGGER_FUNCTION(tf_military_access_this_pop) {
1692 return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> state-ptr @ has-access-with " + truth_inversion(tval[0]);
1693}
1694TRIGGER_FUNCTION(tf_prestige_value) {
1695 return "dup prestige @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1696}
1697TRIGGER_FUNCTION(tf_prestige_from) {
1698 return ">r >r dup prestige @ r> swap r> swap >r dup prestige @ r> " + compare_values(tval[0]);
1699}
1700TRIGGER_FUNCTION(tf_prestige_this_nation) {
1701 return ">r dup prestige @ r> swap >r dup prestige @ r> " + compare_values(tval[0]);
1702}
1703TRIGGER_FUNCTION(tf_prestige_this_state) {
1704 return ">r dup " + state_to_owner() + "prestige @ r> swap >r dup prestige @ r> " + compare_values(tval[0]);
1705}
1706TRIGGER_FUNCTION(tf_prestige_this_province) {
1707 return ">r dup " + province_to_owner() + "prestige @ r> swap >r dup prestige @ r> " + compare_values(tval[0]);
1708}
1709TRIGGER_FUNCTION(tf_prestige_this_pop) {
1710 return ">r dup " + pop_to_owner() + "prestige @ r> swap >r dup prestige @ r> " + compare_values(tval[0]);
1711}
1713 return "dup infamy @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1714}
1715TRIGGER_FUNCTION(tf_has_building_fort) {
1716 return "dup " + std::to_string(int32_t(economy::province_building_type::fort)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]);
1717}
1718TRIGGER_FUNCTION(tf_has_building_railroad) {
1719 return "dup " + std::to_string(int32_t(economy::province_building_type::railroad)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]);
1720}
1721TRIGGER_FUNCTION(tf_has_building_naval_base) {
1722 return "dup " + std::to_string(int32_t(economy::province_building_type::naval_base)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]);
1723}
1724TRIGGER_FUNCTION(tf_has_building_factory) {
1725 return "dup >index state-ptr @ has-any-factory " + truth_inversion(tval[0]);
1726}
1727TRIGGER_FUNCTION(tf_has_building_state) {
1728 return "dup >index " + std::to_string(trigger::payload(tval[1]).fac_id.index()) + " state-ptr @ has-factory " + truth_inversion(tval[0]);
1729}
1730TRIGGER_FUNCTION(tf_has_building_state_from_province) {
1731 return "dup state_membership @ >index " + std::to_string(trigger::payload(tval[1]).fac_id.index()) + " state-ptr @ has-factory " + truth_inversion(tval[0]);
1732}
1733TRIGGER_FUNCTION(tf_has_building_factory_from_province) {
1734 return "dup state_membership @ >index state-ptr @ has-any-factory " + truth_inversion(tval[0]);
1735}
1737 return "dup " + province_to_owner() + "make nation_id = " + truth_inversion(tval[0]);
1738}
1739TRIGGER_FUNCTION(tf_empty_state) {
1740 return "dup make state_instance_id = " + truth_inversion(tval[0]);
1741}
1742TRIGGER_FUNCTION(tf_is_blockaded) {
1743 return "dup is_blockaded @ " + truth_inversion(tval[0]);
1744}
1745TRIGGER_FUNCTION(tf_has_country_modifier) {
1746 return "dup >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " state-ptr @ has-nmod " + truth_inversion(tval[0]);
1747}
1748TRIGGER_FUNCTION(tf_has_country_modifier_province) {
1749 return "dup " + province_to_owner() + ">index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " state-ptr @ has-nmod " + truth_inversion(tval[0]);
1750}
1751TRIGGER_FUNCTION(tf_has_province_modifier) {
1752 return "dup >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " state-ptr @ has-pmod " + truth_inversion(tval[0]);
1753}
1755 return "dup abstract_state_membership-province state @ >index " + std::to_string(trigger::payload(tval[1]).state_id.index()) + " " + compare_values_eq(tval[0]);
1756}
1757TRIGGER_FUNCTION(tf_region_state) {
1758 return "dup definition @ >index " + std::to_string(trigger::payload(tval[1]).state_id.index()) + " " + compare_values_eq(tval[0]);
1759}
1760TRIGGER_FUNCTION(tf_region_pop) {
1761 return "dup " + pop_to_location() + "abstract_state_membership-province state @ >index " + std::to_string(trigger::payload(tval[1]).state_id.index()) + " " + compare_values_eq(tval[0]);
1762}
1763
1764TRIGGER_FUNCTION(tf_region_proper) {
1765 return "dup >index " + std::to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ in-region " + truth_inversion(tval[0]);
1766}
1767TRIGGER_FUNCTION(tf_region_proper_state) {
1768 return "dup capital @ >index " + std::to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ in-region " + truth_inversion(tval[0]);
1769}
1770TRIGGER_FUNCTION(tf_region_proper_pop) {
1771 return "dup " + pop_to_location() + ">index " + std::to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ in-region " + truth_inversion(tval[0]);
1772}
1773TRIGGER_FUNCTION(tf_owns_region_proper) {
1774 return "dup >index " + std::to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ owns-region " + truth_inversion(tval[0]);
1775}
1776TRIGGER_FUNCTION(tf_owns_region) {
1777 return "dup >index " + std::to_string(trigger::payload(tval[1]).state_id.index()) + " state-ptr @ owns-state " + truth_inversion(tval[0]);
1778}
1779TRIGGER_FUNCTION(tf_tag_tag) {
1780 return "dup " + nation_to_tag() + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id = " + truth_inversion(tval[0]);
1781}
1782TRIGGER_FUNCTION(tf_tag_this_nation) {
1783 return "2dup = " + truth_inversion(tval[0]);
1784}
1785TRIGGER_FUNCTION(tf_tag_this_province) {
1786 return ">r dup " + province_to_owner() + " r> swap >r dup r> = " + truth_inversion(tval[0]);
1787}
1788TRIGGER_FUNCTION(tf_tag_from_nation) {
1789 return ">r >r dup r> swap r> swap >r dup r> = " + truth_inversion(tval[0]);
1790}
1791TRIGGER_FUNCTION(tf_tag_from_province) {
1792 return ">r >r dup " + province_to_owner() + " r> swap r> swap >r dup r> = " + truth_inversion(tval[0]);
1793}
1794TRIGGER_FUNCTION(tf_tag_pop) {
1795 return "dup " + pop_to_owner() + nation_to_tag() + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id = " + truth_inversion(tval[0]);
1796}
1797TRIGGER_FUNCTION(tf_stronger_army_than_tag) {
1798 return "dup active_regiments @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "active_regiments @ " + compare_values(tval[0]);
1799}
1800TRIGGER_FUNCTION(tf_stronger_army_than_this_nation) {
1801 return ">r dup active_regiments @ r> swap >r dup active_regiments @ r> " + compare_values(tval[0]);
1802}
1803TRIGGER_FUNCTION(tf_stronger_army_than_this_state) {
1804 return ">r dup " + state_to_owner() + "active_regiments @ r> swap >r dup active_regiments @ r> " + compare_values(tval[0]);
1805}
1806TRIGGER_FUNCTION(tf_stronger_army_than_this_province) {
1807 return ">r dup " + province_to_owner() + "active_regiments @ r> swap >r dup active_regiments @ r> " + compare_values(tval[0]);
1808}
1809TRIGGER_FUNCTION(tf_stronger_army_than_this_pop) {
1810 return ">r dup " + pop_to_owner() + "active_regiments @ r> swap >r dup active_regiments @ r> " + compare_values(tval[0]);
1811}
1812TRIGGER_FUNCTION(tf_stronger_army_than_from_nation) {
1813 return ">r >r dup active_regiments @ r> swap r> swap >r dup active_regiments @ r> " + compare_values(tval[0]);
1814}
1815TRIGGER_FUNCTION(tf_stronger_army_than_from_province) {
1816 return ">r >r dup " + province_to_owner() + "active_regiments @ r> swap r> swap >r dup active_regiments @ r> " + compare_values(tval[0]);
1817}
1818TRIGGER_FUNCTION(tf_neighbour_tag) {
1819 return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + " >index state-ptr @ nation-a " + truth_inversion(tval[0]);
1820}
1821TRIGGER_FUNCTION(tf_neighbour_this) {
1822 return ">r dup >index r> swap >r dup >index r> state-ptr @ nation-a " + truth_inversion(tval[0]);
1823}
1824TRIGGER_FUNCTION(tf_neighbour_from) {
1825 return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ nation-a " + truth_inversion(tval[0]);
1826}
1827TRIGGER_FUNCTION(tf_neighbour_this_province) {
1828 return ">r dup " + province_to_owner() + ">index r> swap >r dup >index r> state-ptr @ nation-a " + truth_inversion(tval[0]);
1829}
1830TRIGGER_FUNCTION(tf_neighbour_from_province) {
1831 return ">r >r dup " + province_to_owner() + ">index r> swap r> swap >r dup >index r> state-ptr @ nation-a " + truth_inversion(tval[0]);
1832}
1833TRIGGER_FUNCTION(tf_country_units_in_state_from) {
1834 return ">r >r dup >index r> swap r> swap >r dup >index r> swap state-ptr @ units-in-state " + truth_inversion(tval[0]);
1835}
1836TRIGGER_FUNCTION(tf_country_units_in_state_this_nation) {
1837 return ">r dup >index r> swap >r dup >index r> swap state-ptr @ units-in-state " + truth_inversion(tval[0]);
1838}
1839TRIGGER_FUNCTION(tf_country_units_in_state_this_province) {
1840 return ">r dup " + province_to_owner() + ">index r> swap >r dup >index r> swap state-ptr @ units-in-state " + truth_inversion(tval[0]);
1841}
1842TRIGGER_FUNCTION(tf_country_units_in_state_this_state) {
1843 return ">r dup " + state_to_owner() + ">index r> swap >r dup >index r> swap state-ptr @ units-in-state " + truth_inversion(tval[0]);
1844}
1845TRIGGER_FUNCTION(tf_country_units_in_state_this_pop) {
1846 return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> swap state-ptr @ units-in-state " + truth_inversion(tval[0]);
1847}
1848TRIGGER_FUNCTION(tf_country_units_in_state_tag) {
1849 return std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index >r dup >index r> swap state-ptr @ units-in-state " + truth_inversion(tval[0]);
1850}
1851TRIGGER_FUNCTION(tf_units_in_province_value) {
1852 return "dup >index state-ptr @ count-p-units " + std::to_string(int32_t(tval[1])) + " " + compare_values(tval[0]);
1853}
1854TRIGGER_FUNCTION(tf_units_in_province_tag) {
1855 return "dup >index >r " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index r> state-ptr @ units-in-province " + truth_inversion(tval[0]);
1856}
1857
1858TRIGGER_FUNCTION(tf_units_in_province_from) {
1859 return "dup >index >r >r >r dup >index r> swap r> swap r> state-ptr @ units-in-province " + truth_inversion(tval[0]);
1860}
1861TRIGGER_FUNCTION(tf_units_in_province_this_nation) {
1862 return "dup >index >r >r dup >index r> swap r> state-ptr @ units-in-province " + truth_inversion(tval[0]);
1863}
1864TRIGGER_FUNCTION(tf_units_in_province_this_province) {
1865 return "dup >index >r >r dup " + province_to_owner() + ">index r> swap r> state-ptr @ units-in-province " + truth_inversion(tval[0]);
1866}
1867TRIGGER_FUNCTION(tf_units_in_province_this_state) {
1868 return "dup >index >r >r dup " + state_to_owner() + ">index r> swap r> state-ptr @ units-in-province " + truth_inversion(tval[0]);
1869}
1870TRIGGER_FUNCTION(tf_units_in_province_this_pop) {
1871 return "dup >index >r >r dup " + pop_to_owner() + ">index r> swap r> state-ptr @ units-in-province " + truth_inversion(tval[0]);
1872}
1873TRIGGER_FUNCTION(tf_war_with_tag) {
1874 return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ at-war? " + truth_inversion(tval[0]);
1875}
1876TRIGGER_FUNCTION(tf_war_with_from) {
1877 return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ at-war? " + truth_inversion(tval[0]);
1878}
1879TRIGGER_FUNCTION(tf_war_with_this_nation) {
1880 return ">r dup >index r> swap >r dup >index r> state-ptr @ at-war? " + truth_inversion(tval[0]);
1881}
1882TRIGGER_FUNCTION(tf_war_with_this_province) {
1883 return ">r dup " + province_to_owner() + ">index r> swap >r dup >index r> state-ptr @ at-war? " + truth_inversion(tval[0]);
1884}
1885TRIGGER_FUNCTION(tf_war_with_this_state) {
1886 return ">r dup " + state_to_owner() + ">index r> swap >r dup >index r> state-ptr @ at-war? " + truth_inversion(tval[0]);
1887}
1888TRIGGER_FUNCTION(tf_war_with_this_pop) {
1889 return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> state-ptr @ at-war? " + truth_inversion(tval[0]);
1890}
1891TRIGGER_FUNCTION(tf_unit_in_battle) {
1892 return "dup land_battle_location-location size 0 <> " + truth_inversion(tval[0]);
1893}
1894TRIGGER_FUNCTION(tf_unit_has_leader) {
1895 return "dup >index state-ptr @ general-in-province? " + truth_inversion(tval[0]);
1896}
1897TRIGGER_FUNCTION(tf_has_national_focus_state) {
1898 return "dup owner_focus @ >index " + std::to_string(trigger::payload(tval[1]).nf_id.index()) + " " + compare_values_eq(tval[0]);
1899}
1900TRIGGER_FUNCTION(tf_has_national_focus_province) {
1901 return "dup state_membership @ owner_focus @ >index " + std::to_string(trigger::payload(tval[1]).nf_id.index()) + " " + compare_values_eq(tval[0]);
1902}
1903TRIGGER_FUNCTION(tf_total_amount_of_divisions) {
1904 return "dup active_regiments @ >i32 " + std::to_string(int32_t(tval[1])) + " " + compare_values(tval[0]);
1905}
1907 return "dup 0 >commodity_id @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1908}
1909TRIGGER_FUNCTION(tf_money_province) {
1910 return "dup " + province_to_owner() + "0 >commodity_id @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1911}
1912TRIGGER_FUNCTION(tf_lost_national) {
1913 return "dup revanchism @ 1.0 swap - " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1914}
1915TRIGGER_FUNCTION(tf_is_vassal) {
1916 return "dup overlord-subject ruler @ valid? " + truth_inversion(tval[0]);
1917}
1918TRIGGER_FUNCTION(tf_ruling_party_ideology_nation) {
1919 return "dup ruling_party @ ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " " + compare_values_eq(tval[0]);
1920}
1921TRIGGER_FUNCTION(tf_ruling_party_ideology_pop) {
1922 return "dup " + pop_to_owner() + "ruling_party @ ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " " + compare_values_eq(tval[0]);
1923}
1924TRIGGER_FUNCTION(tf_ruling_party_ideology_province) {
1925 return "dup " + province_to_owner() + "ruling_party @ ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " " + compare_values_eq(tval[0]);
1926}
1927TRIGGER_FUNCTION(tf_ruling_party) {
1928 return "dup ruling_party @ name @ >index " + std::to_string(read_int32_t_from_payload(tval + 1)) + " " + compare_values_eq(tval[0]);
1929}
1930TRIGGER_FUNCTION(tf_is_ideology_enabled) {
1931 return std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " >ideology_id enabled @ " + truth_inversion(tval[0]);
1932}
1933TRIGGER_FUNCTION(tf_political_reform_want_nation) {
1934 return "dup dup >r " + std::to_string(demographics::political_reform_desire.index()) + " >demographics_key demographics @ " + std::to_string(ws.defines.movement_support_uh_factor) + " * r> non_colonial_population @ / " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1935}
1936TRIGGER_FUNCTION(tf_political_reform_want_pop) {
1937 return "dup political_reform_desire @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1938}
1939TRIGGER_FUNCTION(tf_social_reform_want_nation) {
1940 return "dup dup >r " + std::to_string(demographics::social_reform_desire.index()) + " >demographics_key demographics @ " + std::to_string(ws.defines.movement_support_uh_factor) + " * r> non_colonial_population @ / " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1941}
1942TRIGGER_FUNCTION(tf_social_reform_want_pop) {
1943 return "dup social_reform_desire @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1944}
1945TRIGGER_FUNCTION(tf_total_amount_of_ships) {
1946 return "dup >index state-ptr @ count-ships " + std::to_string(int32_t(tval[1])) + " " + compare_values(tval[0]);
1947}
1948TRIGGER_FUNCTION(tf_plurality) {
1949 return "dup plurality @ " + std::to_string(read_float_from_payload(tval + 1)) + " 100.0 / " + compare_values(tval[0]);
1950}
1951TRIGGER_FUNCTION(tf_plurality_pop) {
1952 return "dup " + pop_to_owner() + "plurality @ " + std::to_string(read_float_from_payload(tval + 1)) + " 100.0 / " + compare_values(tval[0]);
1953}
1954TRIGGER_FUNCTION(tf_corruption) {
1955 return "dup central_province_count @ >f32 >r dup central_crime_count @ >f32 r@ / 0.0 r> 0.0 <= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
1956}
1957TRIGGER_FUNCTION(tf_is_state_religion_pop) {
1958 return " dup >r r@ " + pop_to_owner() + "religion @ r> religion @ = " + truth_inversion(tval[0]);
1959}
1960TRIGGER_FUNCTION(tf_is_state_religion_province) {
1961 return " dup >r r@ " + province_to_owner() + "religion @ r> dominant_religion @ = " + truth_inversion(tval[0]);
1962}
1963TRIGGER_FUNCTION(tf_is_state_religion_state) {
1964 return " dup >r r@ " + state_to_owner() + "religion @ r> dominant_religion @ = " + truth_inversion(tval[0]);
1965}
1966TRIGGER_FUNCTION(tf_is_primary_culture_pop) {
1967 return " dup >r r@ " + pop_to_owner() + "primary_culture @ r> culture @ = " + truth_inversion(tval[0]);
1968}
1969TRIGGER_FUNCTION(tf_is_primary_culture_province) {
1970 return " dup >r r@ " + province_to_owner() + "primary_culture @ r> dominant_culture @ = " + truth_inversion(tval[0]);
1971}
1972TRIGGER_FUNCTION(tf_is_primary_culture_state) {
1973 return " dup >r r@ " + state_to_owner() + "primary_culture @ r> dominant_culture @ = " + truth_inversion(tval[0]);
1974}
1975TRIGGER_FUNCTION(tf_primary_culture_from_nation) {
1976 return ">r >r dup r> swap r> swap >r dup primary_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
1977}
1978TRIGGER_FUNCTION(tf_primary_culture_from_province) {
1979 return ">r >r dup " + province_to_owner() + "r> swap r> swap >r dup primary_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
1980}
1981TRIGGER_FUNCTION(tf_is_primary_culture_nation_this_nation) {
1982 return ">r dup r> swap >r dup primary_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
1983}
1984TRIGGER_FUNCTION(tf_is_primary_culture_nation_this_pop) {
1985 return ">r dup culture @ r> swap >r dup primary_culture @ r> = " + truth_inversion(tval[0]);
1986}
1987TRIGGER_FUNCTION(tf_is_primary_culture_nation_this_state) {
1988 return ">r dup " + state_to_owner() + "r> swap >r dup primary_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
1989}
1990TRIGGER_FUNCTION(tf_is_primary_culture_nation_this_province) {
1991 return ">r dup " + province_to_owner() + "r> swap >r dup primary_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
1992}
1993TRIGGER_FUNCTION(tf_is_primary_culture_state_this_nation) {
1994 return ">r dup r> swap >r dup dominant_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
1995}
1996TRIGGER_FUNCTION(tf_is_primary_culture_state_this_pop) {
1997 return ">r dup " + pop_to_owner() + "r> swap >r dup dominant_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
1998}
1999TRIGGER_FUNCTION(tf_is_primary_culture_state_this_state) {
2000 return ">r dup " + state_to_owner() + "r> swap >r dup dominant_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
2001}
2002TRIGGER_FUNCTION(tf_is_primary_culture_state_this_province) {
2003 return ">r dup " + province_to_owner() + "r> swap >r dup dominant_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
2004}
2005TRIGGER_FUNCTION(tf_is_primary_culture_province_this_nation) {
2006 return ">r dup r> swap >r dup dominant_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
2007}
2008TRIGGER_FUNCTION(tf_is_primary_culture_province_this_pop) {
2009 return ">r dup " + pop_to_owner() + "r> swap >r dup dominant_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
2010}
2011TRIGGER_FUNCTION(tf_is_primary_culture_province_this_state) {
2012 return ">r dup " + state_to_owner() + "r> swap >r dup dominant_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
2013}
2014TRIGGER_FUNCTION(tf_is_primary_culture_province_this_province) {
2015 return ">r dup " + province_to_owner() + "r> swap >r dup dominant_culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
2016}
2017TRIGGER_FUNCTION(tf_is_primary_culture_pop_this_nation) {
2018 return ">r dup r> swap >r dup culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
2019}
2020TRIGGER_FUNCTION(tf_is_primary_culture_pop_this_pop) {
2021 return ">r dup " + pop_to_owner() + "r> swap >r dup culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
2022}
2023TRIGGER_FUNCTION(tf_is_primary_culture_pop_this_state) {
2024 return ">r dup " + state_to_owner() + "r> swap >r dup culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
2025}
2026TRIGGER_FUNCTION(tf_is_primary_culture_pop_this_province) {
2027 return ">r dup " + province_to_owner() + "r> swap >r dup culture @ r> primary_culture @ = " + truth_inversion(tval[0]);
2028}
2029
2030TRIGGER_FUNCTION(tf_is_accepted_culture_nation_this_nation) {
2031 return ">r dup primary_culture @ r> swap >r dup r> accepted_cultures @ " + truth_inversion(tval[0]);
2032}
2033TRIGGER_FUNCTION(tf_is_accepted_culture_nation_this_pop) {
2034 return ">r dup culture @ r> swap >r dup r> accepted_cultures @ " + truth_inversion(tval[0]);
2035}
2036TRIGGER_FUNCTION(tf_is_accepted_culture_nation_this_state) {
2037 return ">r dup " + state_to_owner() + "primary_culture @ r> swap >r dup r> accepted_cultures @ " + truth_inversion(tval[0]);
2038}
2039TRIGGER_FUNCTION(tf_is_accepted_culture_nation_this_province) {
2040 return ">r dup " + province_to_owner() + "primary_culture @ r> swap >r dup r> accepted_cultures @ " + truth_inversion(tval[0]);
2041}
2042TRIGGER_FUNCTION(tf_is_accepted_culture_state_this_nation) {
2043 return ">r dup primary_culture @ r> swap >r dup " + state_to_owner() + "r> accepted_cultures @ " + truth_inversion(tval[0]);
2044}
2045TRIGGER_FUNCTION(tf_is_accepted_culture_state_this_pop) {
2046 return ">r dup " + pop_to_owner() + "primary_culture @ r> swap >r dup " + state_to_owner() + "r> accepted_cultures @ " + truth_inversion(tval[0]);
2047}
2048TRIGGER_FUNCTION(tf_is_accepted_culture_state_this_state) {
2049 return ">r dup " + state_to_owner() + "primary_culture @ r> swap >r dup " + state_to_owner() + "r> accepted_cultures @ " + truth_inversion(tval[0]);
2050}
2051TRIGGER_FUNCTION(tf_is_accepted_culture_state_this_province) {
2052 return ">r dup " + province_to_owner() + "primary_culture @ r> swap >r dup " + state_to_owner() + "r> accepted_cultures @ " + truth_inversion(tval[0]);
2053}
2054TRIGGER_FUNCTION(tf_is_accepted_culture_province_this_nation) {
2055 return ">r dup primary_culture @ r> swap >r dup " + province_to_owner() + "r> accepted_cultures @ " + truth_inversion(tval[0]);
2056}
2057TRIGGER_FUNCTION(tf_is_accepted_culture_province_this_pop) {
2058 return ">r dup " + pop_to_owner() + "primary_culture @ r> swap >r dup " + province_to_owner() + "r> accepted_cultures @ " + truth_inversion(tval[0]);
2059}
2060TRIGGER_FUNCTION(tf_is_accepted_culture_province_this_state) {
2061 return ">r dup " + state_to_owner() + "primary_culture @ r> swap >r dup " + province_to_owner() + "r> accepted_cultures @ " + truth_inversion(tval[0]);
2062}
2063TRIGGER_FUNCTION(tf_is_accepted_culture_province_this_province) {
2064 return ">r dup " + province_to_owner() + "primary_culture @ r> swap >r dup " + province_to_owner() + "r> accepted_cultures @ " + truth_inversion(tval[0]);
2065}
2066TRIGGER_FUNCTION(tf_is_accepted_culture_pop_this_nation) {
2067 return ">r dup r> swap >r dup culture r> swap accepted_cultures @ " + truth_inversion(tval[0]);
2068}
2069TRIGGER_FUNCTION(tf_is_accepted_culture_pop_this_pop) {
2070 return ">r dup " + pop_to_owner() + "r> swap >r dup culture r> swap accepted_cultures @ " + truth_inversion(tval[0]);
2071}
2072TRIGGER_FUNCTION(tf_is_accepted_culture_pop_this_state) {
2073 return ">r dup " + state_to_owner() + "r> swap >r dup culture r> swap accepted_cultures @ " + truth_inversion(tval[0]);
2074}
2075TRIGGER_FUNCTION(tf_is_accepted_culture_pop_this_province) {
2076 return ">r dup " + province_to_owner() + "r> swap >r dup culture r> swap accepted_cultures @ " + truth_inversion(tval[0]);
2077}
2078
2079TRIGGER_FUNCTION(tf_is_accepted_culture_pop) {
2080 return "dup dup culture @ >r " + pop_to_owner() + " r> accepted_cultures @ " + truth_inversion(tval[0]);
2081}
2082TRIGGER_FUNCTION(tf_is_accepted_culture_province) {
2083 return "dup dup dominant_culture @ >r " + province_to_owner() + " r> accepted_cultures @ " + truth_inversion(tval[0]);
2084}
2085TRIGGER_FUNCTION(tf_is_accepted_culture_state) {
2086 return "dup dup dominant_culture @ >r " + state_to_owner() + " r> accepted_cultures @ " + truth_inversion(tval[0]);
2087}
2088TRIGGER_FUNCTION(tf_is_coastal_province) {
2089 return "dup is_coast @ " + truth_inversion(tval[0]);
2090}
2091TRIGGER_FUNCTION(tf_is_coastal_state) {
2092 return "dup >index state-ptr @ coastal-s? @ " + truth_inversion(tval[0]);
2093}
2094TRIGGER_FUNCTION(tf_in_sphere_tag) {
2095 return "dup in_sphere_of @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]);
2096}
2097TRIGGER_FUNCTION(tf_in_sphere_from) {
2098 return ">r >r dup r> swap r> swap >r dup in_sphere_of @ r> = " + truth_inversion(tval[0]);
2099}
2100TRIGGER_FUNCTION(tf_in_sphere_this_nation) {
2101 return ">r dup r> swap >r dup in_sphere_of @ r> = " + truth_inversion(tval[0]);
2102}
2103TRIGGER_FUNCTION(tf_in_sphere_this_province) {
2104 return ">r dup " + province_to_owner() + "r> swap >r dup in_sphere_of @ r> = " + truth_inversion(tval[0]);
2105}
2106TRIGGER_FUNCTION(tf_in_sphere_this_state) {
2107 return ">r dup " + state_to_owner() + "r> swap >r dup in_sphere_of @ r> = " + truth_inversion(tval[0]);
2108}
2109TRIGGER_FUNCTION(tf_in_sphere_this_pop) {
2110 return ">r dup " + pop_to_owner() + "r> swap >r dup in_sphere_of @ r> = " + truth_inversion(tval[0]);
2111}
2112TRIGGER_FUNCTION(tf_produces_nation) {
2113 return "dup " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " >commodity_id domestic_market_pool 0.0 > " + truth_inversion(tval[0]);
2114}
2115TRIGGER_FUNCTION(tf_produces_province) {
2116 return "dup rgo @ >index " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " " + compare_values_eq(tval[0]);
2117}
2118TRIGGER_FUNCTION(tf_produces_state) {
2119 return "dup >index " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " state-ptr @ state-produces? " + truth_inversion(tval[0]);
2120}
2121TRIGGER_FUNCTION(tf_produces_pop) {
2122 return "false " + truth_inversion(tval[0]);
2123}
2124TRIGGER_FUNCTION(tf_average_militancy_nation) {
2125 return "dup dup >r " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2126}
2127TRIGGER_FUNCTION(tf_average_militancy_state) {
2128 return "dup dup >r " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2129}
2130TRIGGER_FUNCTION(tf_average_militancy_province) {
2131 return "dup dup >r " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2132}
2133TRIGGER_FUNCTION(tf_average_consciousness_nation) {
2134 return "dup dup >r " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2135}
2136TRIGGER_FUNCTION(tf_average_consciousness_state) {
2137 return "dup dup >r " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2138}
2139TRIGGER_FUNCTION(tf_average_consciousness_province) {
2140 return "dup dup >r " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2141}
2142TRIGGER_FUNCTION(tf_is_next_reform_nation) {
2143 return "dup " + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " >issue_option_id parent_issue @ issues @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index() - 1) + " " + compare_values_eq(tval[0]);
2144}
2145TRIGGER_FUNCTION(tf_is_next_reform_pop) {
2146 return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " >issue_option_id parent_issue @ issues @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index() - 1) + " " + compare_values_eq(tval[0]);
2147}
2148TRIGGER_FUNCTION(tf_is_next_rreform_nation) {
2149 return "dup " + std::to_string(trigger::payload(tval[1]).ropt_id.index()) + " >reform_option_id parent_reform @ reforms @ >index " + std::to_string(trigger::payload(tval[1]).ropt_id.index() - 1) + " " + compare_values_eq(tval[0]);
2150}
2151TRIGGER_FUNCTION(tf_is_next_rreform_pop) {
2152 return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).ropt_id.index()) + " >reform_option_id parent_reform @ reforms @ >index " + std::to_string(trigger::payload(tval[1]).ropt_id.index() - 1) + " " + compare_values_eq(tval[0]);
2153}
2154TRIGGER_FUNCTION(tf_rebel_power_fraction) {
2155 return "false " + truth_inversion(tval[0]);
2156 // note: virtually unused
2157}
2158TRIGGER_FUNCTION(tf_recruited_percentage_nation) {
2159 return "dup dup >r active_regiments @ >f32 r> recruitable_regiments @ >f32 dup >r / 1.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2160}
2161TRIGGER_FUNCTION(tf_recruited_percentage_pop) {
2162 return "dup " + pop_to_owner() + "dup >r active_regiments @ >f32 r> recruitable_regiments @ >f32 dup >r / 1.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2163}
2164TRIGGER_FUNCTION(tf_has_culture_core) {
2165 return "dup dup >r " + pop_to_location() + ">index r> culture >index state-ptr @ has-culture-core? " + truth_inversion(tval[0]);
2166}
2167TRIGGER_FUNCTION(tf_has_culture_core_province_this_pop) {
2168 return ">r dup culture @ >index r> swap >r dup >index r> state-ptr @ has-culture-core? " + truth_inversion(tval[0]);
2169}
2170TRIGGER_FUNCTION(tf_nationalism) {
2171 return "dup nationalism @ " + std::to_string(float(tval[1])) + " " + compare_values(tval[0]);
2172}
2173TRIGGER_FUNCTION(tf_is_overseas) {
2174 return "dup dup >r " + province_to_owner() + "capital @ dup continent @ r@ continent @ = not r> swap >r >r "
2175 "connected_region_id @ r> connected_region_id @ <> r> and " + truth_inversion(tval[0]);
2176}
2177TRIGGER_FUNCTION(tf_is_overseas_pop) {
2178 return "dup " + pop_to_location() + "dup >r " + province_to_owner() + "capital @ dup continent @ r@ continent @ = not r> swap >r >r "
2179 "connected_region_id @ r> connected_region_id @ <> r> and " + truth_inversion(tval[0]);
2180}
2181TRIGGER_FUNCTION(tf_is_overseas_state) {
2182 return "dup capital @ dup >r " + province_to_owner() + "capital @ dup continent @ r@ continent @ = not r> swap >r >r "
2183 "connected_region_id @ r> connected_region_id @ <> r> and " + truth_inversion(tval[0]);
2184}
2185TRIGGER_FUNCTION(tf_controlled_by_rebels) {
2186 return "dup province_rebel_control-province rebel_faction @ valid? " + truth_inversion(tval[0]);
2187}
2188TRIGGER_FUNCTION(tf_controlled_by_tag) {
2189 return "dup " + province_to_controller() + nation_to_tag() + ">index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " " + compare_values_eq(tval[0]);
2190}
2191TRIGGER_FUNCTION(tf_controlled_by_from) {
2192 return ">r >r dup r> swap r> swap >r dup " + province_to_controller() + "r> = " + truth_inversion(tval[0]);
2193}
2194TRIGGER_FUNCTION(tf_controlled_by_this_nation) {
2195 return ">r dup r> swap >r dup " + province_to_controller() + "r> = " + truth_inversion(tval[0]);
2196}
2197TRIGGER_FUNCTION(tf_controlled_by_this_province) {
2198 return ">r dup " + province_to_owner() + "r> swap >r dup " + province_to_controller() + "r> = " + truth_inversion(tval[0]);
2199}
2200TRIGGER_FUNCTION(tf_controlled_by_this_state) {
2201 return ">r dup " + state_to_owner() + "r> swap >r dup " + province_to_controller() + "r> = " + truth_inversion(tval[0]);
2202}
2203TRIGGER_FUNCTION(tf_controlled_by_this_pop) {
2204 return ">r dup " + pop_to_owner() + "r> swap >r dup " + province_to_controller() + "r> = " + truth_inversion(tval[0]);
2205}
2206TRIGGER_FUNCTION(tf_controlled_by_owner) {
2207 return "dup dup >r " + province_to_owner() + "r> " + province_to_controller() + " = " + truth_inversion(tval[0]);
2208}
2209TRIGGER_FUNCTION(tf_controlled_by_reb) {
2210 return ">r >r dup r> swap r> swap >r dup province_rebel_control-province rebel_faction @ r> = " + truth_inversion(tval[0]);
2211}
2212TRIGGER_FUNCTION(tf_is_canal_enabled) {
2213 return std::to_string(tval[1] - 1) + " state-ptr @ canal-enabled? " + truth_inversion(tval[0]);
2214}
2215TRIGGER_FUNCTION(tf_is_state_capital) {
2216 return "dup dup >r state_membership @ capital @ r> = " + truth_inversion(tval[0]);
2217}
2218TRIGGER_FUNCTION(tf_is_state_capital_pop) {
2219 return "dup " + pop_to_location() + "dup >r state_membership @ capital @ r> = " + truth_inversion(tval[0]);
2220}
2221TRIGGER_FUNCTION(tf_truce_with_tag) {
2222 return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ truce-with? " + truth_inversion(tval[0]);
2223}
2224TRIGGER_FUNCTION(tf_truce_with_from) {
2225 return ">r >r dup r> swap r> swap >r dup >index r> >index state-ptr @ truce-with? " + truth_inversion(tval[0]);
2226}
2227TRIGGER_FUNCTION(tf_truce_with_this_nation) {
2228 return ">r dup r> swap >r dup >index r> >index state-ptr @ truce-with? " + truth_inversion(tval[0]);
2229}
2230TRIGGER_FUNCTION(tf_truce_with_this_province) {
2231 return ">r dup " + province_to_owner() + "r> swap >r dup >index r> >index state-ptr @ truce-with? " + truth_inversion(tval[0]);
2232}
2233TRIGGER_FUNCTION(tf_truce_with_this_state) {
2234 return ">r dup " + state_to_owner() + "r> swap >r dup >index r> >index state-ptr @ truce-with? " + truth_inversion(tval[0]);
2235}
2236TRIGGER_FUNCTION(tf_truce_with_this_pop) {
2237 return ">r dup " + pop_to_owner() + "r> swap >r dup >index r> >index state-ptr @ truce-with? " + truth_inversion(tval[0]);
2238}
2239TRIGGER_FUNCTION(tf_total_pops_nation) {
2240 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2241}
2242TRIGGER_FUNCTION(tf_total_pops_state) {
2243 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2244}
2245TRIGGER_FUNCTION(tf_total_pops_province) {
2246 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2247}
2248TRIGGER_FUNCTION(tf_total_pops_pop) {
2249 return "dup " + pop_to_location() + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2250}
2251TRIGGER_FUNCTION(tf_has_pop_type_nation) {
2252 return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[1]).popt_id.index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2253}
2254TRIGGER_FUNCTION(tf_has_pop_type_state) {
2255 return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[1]).popt_id.index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2256}
2257TRIGGER_FUNCTION(tf_has_pop_type_province) {
2258 return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[1]).popt_id.index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2259}
2260TRIGGER_FUNCTION(tf_has_pop_type_pop) {
2261 return "dup poptype @ >index " + std::to_string(trigger::payload(tval[1]).popt_id.index()) + " = " + truth_inversion(tval[0]);
2262}
2263TRIGGER_FUNCTION(tf_has_empty_adjacent_province) {
2264 return "dup >index state-ptr @ empty-a-province " + truth_inversion(tval[0]);
2265}
2266TRIGGER_FUNCTION(tf_has_leader) {
2267 return "dup >index " + std::to_string(read_int32_t_from_payload(tval + 1)) + " state-ptr @ has-named-leader? " + truth_inversion(tval[0]);
2268}
2270 return "dup is_player_controlled @ not " + truth_inversion(tval[0]);
2271}
2272//can-release?
2273//national_identity-size
2274TRIGGER_FUNCTION(tf_can_create_vassals) {
2275 return "dup >index >r false 0"
2276 "while "
2277 ">r dup not r> swap >r "
2278 "dup national_identity-size < r> and "
2279 "loop "
2280 "dup r@ swap state-ptr @ can-release? "
2281 ">r swap drop r> swap "
2282 "1 + "
2283 "end-while "
2284 "r> drop drop "
2285 + truth_inversion(tval[0]);
2286}
2287TRIGGER_FUNCTION(tf_is_possible_vassal) {
2288 return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " state-ptr @ can-release? " + truth_inversion(tval[0]);
2289}
2290TRIGGER_FUNCTION(tf_province_id) {
2291 return "dup >index " + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " " + compare_values_eq(tval[0]);
2292}
2293TRIGGER_FUNCTION(tf_vassal_of_tag) {
2294 return "dup overlord-subject ruler @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]);
2295}
2296TRIGGER_FUNCTION(tf_vassal_of_from) {
2297 return ">r >r dup r> swap r> swap >r dup overlord-subject ruler @ = " + truth_inversion(tval[0]);
2298}
2299TRIGGER_FUNCTION(tf_vassal_of_this_nation) {
2300 return ">r dup r> swap >r dup overlord-subject ruler @ = " + truth_inversion(tval[0]);
2301}
2302TRIGGER_FUNCTION(tf_vassal_of_this_province) {
2303 return ">r dup " + province_to_owner() + "r> swap >r dup overlord-subject ruler @ = " + truth_inversion(tval[0]);
2304}
2305TRIGGER_FUNCTION(tf_vassal_of_this_state) {
2306 return ">r dup " + state_to_owner() + "r> swap >r dup overlord-subject ruler @ = " + truth_inversion(tval[0]);
2307}
2308TRIGGER_FUNCTION(tf_vassal_of_this_pop) {
2309 return ">r dup " + pop_to_owner() + "r> swap >r dup overlord-subject ruler @ = " + truth_inversion(tval[0]);
2310}
2311TRIGGER_FUNCTION(tf_vassal_of_province_tag) {
2312 return "dup " + province_to_owner() + "overlord-subject ruler @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]);
2313}
2314TRIGGER_FUNCTION(tf_vassal_of_province_from) {
2315 return ">r >r dup r> swap r> swap >r dup " + province_to_owner() + "overlord-subject ruler @ = " + truth_inversion(tval[0]);
2316}
2317TRIGGER_FUNCTION(tf_vassal_of_province_this_nation) {
2318 return ">r dup r> swap >r dup " + province_to_owner() + "overlord-subject ruler @ = " + truth_inversion(tval[0]);
2319}
2320TRIGGER_FUNCTION(tf_vassal_of_province_this_province) {
2321 return ">r dup " + province_to_owner() + "r> swap >r dup " + province_to_owner() + "overlord-subject ruler @ = " + truth_inversion(tval[0]);
2322}
2323TRIGGER_FUNCTION(tf_vassal_of_province_this_state) {
2324 return ">r dup " + state_to_owner() + "r> swap >r dup " + province_to_owner() + "overlord-subject ruler @ = " + truth_inversion(tval[0]);
2325}
2326TRIGGER_FUNCTION(tf_vassal_of_province_this_pop) {
2327 return ">r dup " + pop_to_owner() + "r> swap >r dup " + province_to_owner() + "overlord-subject ruler @ = " + truth_inversion(tval[0]);
2328}
2329
2330TRIGGER_FUNCTION(tf_substate_of_tag) {
2331 return "dup overlord-subject ruler @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= "
2332 ">r dup is_substate @ r> and " + truth_inversion(tval[0]);
2333}
2334TRIGGER_FUNCTION(tf_substate_of_from) {
2335 return ">r >r dup r> swap r> swap >r dup overlord-subject ruler @ = >r dup is_substate @ r> and " + truth_inversion(tval[0]);
2336}
2337TRIGGER_FUNCTION(tf_substate_of_this_nation) {
2338 return ">r dup r> swap >r dup overlord-subject ruler @ = >r dup is_substate @ r> and " + truth_inversion(tval[0]);
2339}
2340TRIGGER_FUNCTION(tf_substate_of_this_province) {
2341 return ">r dup " + province_to_owner() + "r> swap >r dup overlord-subject ruler @ = >r dup is_substate @ r> and " + truth_inversion(tval[0]);
2342}
2343TRIGGER_FUNCTION(tf_substate_of_this_state) {
2344 return ">r dup " + state_to_owner() + "r> swap >r dup overlord-subject ruler @ = >r dup is_substate @ r> and " + truth_inversion(tval[0]);
2345}
2346TRIGGER_FUNCTION(tf_substate_of_this_pop) {
2347 return ">r dup " + pop_to_owner() + "r> swap >r dup overlord-subject ruler @ = >r dup is_substate @ r> and " + truth_inversion(tval[0]);
2348}
2349TRIGGER_FUNCTION(tf_alliance_with_tag) {
2350 return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity " + tag_to_nation() + "state-ptr @ are-allied? " + truth_inversion(tval[0]);
2351}
2352TRIGGER_FUNCTION(tf_alliance_with_from) {
2353 return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ are-allied? " + truth_inversion(tval[0]);
2354}
2355TRIGGER_FUNCTION(tf_alliance_with_this_nation) {
2356 return ">r dup >index r> swap >r dup >index r> state-ptr @ are-allied? " + truth_inversion(tval[0]);
2357}
2358TRIGGER_FUNCTION(tf_alliance_with_this_province) {
2359 return ">r dup " + province_to_owner() + ">index r> swap >r dup >index r> state-ptr @ are-allied? " + truth_inversion(tval[0]);
2360}
2361TRIGGER_FUNCTION(tf_alliance_with_this_state) {
2362 return ">r dup " + state_to_owner() + ">index r> swap >r dup >index r> state-ptr @ are-allied? " + truth_inversion(tval[0]);
2363}
2364TRIGGER_FUNCTION(tf_alliance_with_this_pop) {
2365 return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> state-ptr @ are-allied? " + truth_inversion(tval[0]);
2366}
2367TRIGGER_FUNCTION(tf_has_recently_lost_war) {
2368 return "dup last_war_loss ptr-cast ptr(u16) @ >i32 dup 0 <> >r 365 5 * + current-date @ >i32 >= r> and " + truth_inversion(tval[0]);
2369}
2370TRIGGER_FUNCTION(tf_has_recently_lost_war_pop) {
2371 return "dup " + pop_to_owner() + "last_war_loss ptr-cast ptr(u16) @ >i32 dup 0 <> >r 365 5 * + current-date @ >i32 >= r> and " + truth_inversion(tval[0]);
2372}
2373TRIGGER_FUNCTION(tf_is_mobilised) {
2374 return "dup is_mobilized @ " + truth_inversion(tval[0]);
2375}
2376TRIGGER_FUNCTION(tf_mobilisation_size) {
2377 return "dup " + std::to_string(sys::national_mod_offsets::mobilization_size.index()) + " >national_modifier_value modifier_values @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2378}
2379TRIGGER_FUNCTION(tf_crime_higher_than_education_nation) {
2380 return "dup dup >r administrative_spending @ r> education_spending @ >= " + truth_inversion(tval[0]);
2381}
2382TRIGGER_FUNCTION(tf_crime_higher_than_education_state) {
2383 return "dup " + state_to_owner() + "dup >r administrative_spending @ r> education_spending @ >= " + truth_inversion(tval[0]);
2384}
2385TRIGGER_FUNCTION(tf_crime_higher_than_education_province) {
2386 return "dup " + province_to_owner() + "dup >r administrative_spending @ r> education_spending @ >= " + truth_inversion(tval[0]);
2387}
2388TRIGGER_FUNCTION(tf_crime_higher_than_education_pop) {
2389 return "dup " + pop_to_owner() + "dup >r administrative_spending @ r> education_spending @ >= " + truth_inversion(tval[0]);
2390}
2391TRIGGER_FUNCTION(tf_agree_with_ruling_party) {
2392 return "dup dup >r " + pop_to_owner() + "ruling_party @ ideology @ dup valid? if >index " + std::to_string(pop_demographics::count_special_keys) + " + >pop_demographics_key "
2393 "r> dup size @ >r swap demographics @ r@ / 0.0 0.0 r> >= select else drop r> drop 0.0 end-if " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2394}
2395TRIGGER_FUNCTION(tf_is_colonial_state) {
2396 return "dup capital @ is_colonial @ " + truth_inversion(tval[0]);
2397}
2398TRIGGER_FUNCTION(tf_is_colonial_province) {
2399 return "dup is_colonial @ " + truth_inversion(tval[0]);
2400}
2401TRIGGER_FUNCTION(tf_is_colonial_pop) {
2402 return "dup " + pop_to_location() + "is_colonial @ " + truth_inversion(tval[0]);
2403}
2404TRIGGER_FUNCTION(tf_has_factories_state) {
2405 return "dup >index state-ptr @ has-any-factory " + truth_inversion(tval[0]);
2406}
2407TRIGGER_FUNCTION(tf_has_factories_nation) {
2408 return "dup >index state-ptr @ nation-has-any-factory " + truth_inversion(tval[0]);
2409}
2410TRIGGER_FUNCTION(tf_in_default_bool) {
2411 return "dup is_bankrupt @ " + truth_inversion(tval[0]);
2412}
2413//bankrupt-debtor-to?
2414TRIGGER_FUNCTION(tf_in_default_tag) {
2415 return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "state-ptr @ bankrupt-debtor-to? " + truth_inversion(tval[0]);
2416}
2417TRIGGER_FUNCTION(tf_in_default_from) {
2418 return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ bankrupt-debtor-to? " + truth_inversion(tval[0]);
2419}
2420TRIGGER_FUNCTION(tf_in_default_this_nation) {
2421 return ">r dup >index r> swap >r dup >index r> state-ptr @ bankrupt-debtor-to? " + truth_inversion(tval[0]);
2422}
2423TRIGGER_FUNCTION(tf_in_default_this_province) {
2424 return ">r dup " + province_to_owner() + ">index r> swap >r dup >index r> state-ptr @ bankrupt-debtor-to? " + truth_inversion(tval[0]);
2425}
2426TRIGGER_FUNCTION(tf_in_default_this_state) {
2427 return ">r dup " + state_to_owner() + ">index r> swap >r dup >index r> state-ptr @ bankrupt-debtor-to? " + truth_inversion(tval[0]);
2428}
2429TRIGGER_FUNCTION(tf_in_default_this_pop) {
2430 return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> state-ptr @ bankrupt-debtor-to? " + truth_inversion(tval[0]);
2431}
2432TRIGGER_FUNCTION(tf_total_num_of_ports) {
2433 return "dup total_ports @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
2434}
2436 return "true " + truth_inversion(tval[0]);
2437}
2438TRIGGER_FUNCTION(tf_election) {
2439 return "dup election_ends ptr-cast ptr(u16) @ >i32 dup 0 <> swap current-date @ >i32 > and " + truth_inversion(tval[0]);
2440}
2441TRIGGER_FUNCTION(tf_has_global_flag) {
2442 return std::to_string(trigger::payload(tval[1]).glob_id.index()) + " state-ptr @ global-flag-set? " + truth_inversion(tval[0]);
2443}
2444TRIGGER_FUNCTION(tf_is_capital) {
2445 return "dup dup " + province_to_owner() + "capital @ = " + truth_inversion(tval[0]);
2446}
2447TRIGGER_FUNCTION(tf_nationalvalue_nation) {
2448 return "dup national_value @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]) ;
2449}
2450TRIGGER_FUNCTION(tf_nationalvalue_pop) {
2451 return "dup " + pop_to_owner() + "national_value @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]);
2452}
2453TRIGGER_FUNCTION(tf_nationalvalue_province) {
2454 return "dup " + province_to_owner() + "national_value @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]);
2455}
2456TRIGGER_FUNCTION(tf_industrial_score_value) {
2457 return "dup industrial_score @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
2458}
2459TRIGGER_FUNCTION(tf_industrial_score_tag) {
2460 return "dup industrial_score @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "industrial_score @ " + compare_values(tval[0]);
2461}
2462TRIGGER_FUNCTION(tf_industrial_score_from_nation) {
2463 return ">r >r dup industrial_score @ r> swap r> swap >r dup industrial_score @ r> " + compare_values(tval[0]);
2464}
2465TRIGGER_FUNCTION(tf_industrial_score_this_nation) {
2466 return ">r dup industrial_score @ r> swap >r dup industrial_score @ r> " + compare_values(tval[0]);
2467}
2468TRIGGER_FUNCTION(tf_industrial_score_this_pop) {
2469 return ">r dup " + pop_to_owner() + "industrial_score @ r> swap >r dup industrial_score @ r> " + compare_values(tval[0]);
2470}
2471TRIGGER_FUNCTION(tf_industrial_score_this_state) {
2472 return ">r dup " + state_to_owner() + "industrial_score @ r> swap >r dup industrial_score @ r> " + compare_values(tval[0]);
2473}
2474TRIGGER_FUNCTION(tf_industrial_score_this_province) {
2475 return ">r dup " +province_to_owner() + "industrial_score @ r> swap >r dup industrial_score @ r> " + compare_values(tval[0]);
2476}
2477TRIGGER_FUNCTION(tf_military_score_value) {
2478 return "dup military_score @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
2479}
2480TRIGGER_FUNCTION(tf_military_score_tag) {
2481 return "dup military_score @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "military_score @ " + compare_values(tval[0]);
2482}
2483TRIGGER_FUNCTION(tf_military_score_from_nation) {
2484 return ">r >r dup military_score @ r> swap r> swap >r dup military_score @ r> " + compare_values(tval[0]);
2485}
2486TRIGGER_FUNCTION(tf_military_score_this_nation) {
2487 return ">r dup military_score @ r> swap >r dup military_score @ r> " + compare_values(tval[0]);
2488}
2489TRIGGER_FUNCTION(tf_military_score_this_pop) {
2490 return ">r dup " + pop_to_owner() + "military_score @ r> swap >r dup military_score @ r> " + compare_values(tval[0]);
2491}
2492TRIGGER_FUNCTION(tf_military_score_this_state) {
2493 return ">r dup " + state_to_owner() + "military_score @ r> swap >r dup military_score @ r> " + compare_values(tval[0]);
2494}
2495TRIGGER_FUNCTION(tf_military_score_this_province) {
2496 return ">r dup " + province_to_owner() + "military_score @ r> swap >r dup military_score @ r> " + compare_values(tval[0]);
2497}
2498TRIGGER_FUNCTION(tf_civilized_nation) {
2499 return "dup is_civilized @ " + truth_inversion(tval[0]);
2500}
2501TRIGGER_FUNCTION(tf_civilized_pop) {
2502 return "dup " + pop_to_owner() + "is_civilized @ " + truth_inversion(tval[0]);
2503}
2504TRIGGER_FUNCTION(tf_civilized_province) {
2505 return "dup " + province_to_owner() + "is_civilized @ " + truth_inversion(tval[0]);
2506}
2507TRIGGER_FUNCTION(tf_national_provinces_occupied) {
2508 return "dup owned_province_count @ >f32 >r dup occupied_count @ >f32 r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2509}
2510TRIGGER_FUNCTION(tf_is_greater_power_nation) {
2511 return "dup is_great_power @ " + truth_inversion(tval[0]);
2512}
2513TRIGGER_FUNCTION(tf_is_greater_power_pop) {
2514 return "dup " + pop_to_owner() + "is_great_power @ " + truth_inversion(tval[0]);
2515}
2516TRIGGER_FUNCTION(tf_is_greater_power_province) {
2517 return "dup " + province_to_owner() + "is_great_power @ " + truth_inversion(tval[0]);
2518}
2519TRIGGER_FUNCTION(tf_rich_tax) {
2520 return "dup rich_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]);
2521}
2522TRIGGER_FUNCTION(tf_middle_tax) {
2523 return "dup middle_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]);
2524}
2525TRIGGER_FUNCTION(tf_poor_tax) {
2526 return "dup poor_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]);
2527}
2528TRIGGER_FUNCTION(tf_rich_tax_pop) {
2529 return "dup " + pop_to_owner() + "rich_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]);
2530}
2531TRIGGER_FUNCTION(tf_middle_tax_pop) {
2532 return "dup " + pop_to_owner() + "middle_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]);
2533}
2534TRIGGER_FUNCTION(tf_poor_tax_pop) {
2535 return "dup " + pop_to_owner() + "poor_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]);
2536}
2537TRIGGER_FUNCTION(tf_social_spending_nation) {
2538 return "dup dup >r social_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2539}
2540TRIGGER_FUNCTION(tf_social_spending_pop) {
2541 return "dup " + pop_to_owner() + "dup >r social_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2542}
2543TRIGGER_FUNCTION(tf_social_spending_province) {
2544 return "dup " + province_to_owner() + "dup >r social_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2545}
2546TRIGGER_FUNCTION(tf_military_spending_nation) {
2547 return "dup dup >r military_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2548}
2549TRIGGER_FUNCTION(tf_military_spending_pop) {
2550 return "dup " + pop_to_owner() + "dup >r military_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2551}
2552TRIGGER_FUNCTION(tf_military_spending_province) {
2553 return "dup " + province_to_owner() + "dup >r military_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2554}
2555TRIGGER_FUNCTION(tf_military_spending_state) {
2556 return "dup " + state_to_owner() + "dup >r military_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2557}
2558TRIGGER_FUNCTION(tf_administration_spending_nation) {
2559 return "dup dup >r administrative_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2560}
2561TRIGGER_FUNCTION(tf_administration_spending_pop) {
2562 return "dup " + pop_to_owner() + "dup >r administrative_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2563}
2564TRIGGER_FUNCTION(tf_administration_spending_province) {
2565 return "dup " + province_to_owner() + "dup >r administrative_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2566}
2567TRIGGER_FUNCTION(tf_administration_spending_state) {
2568 return "dup " + state_to_owner() + "dup >r administrative_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2569}
2570TRIGGER_FUNCTION(tf_education_spending_nation) {
2571 return "dup dup >r education_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2572}
2573TRIGGER_FUNCTION(tf_education_spending_pop) {
2574 return "dup " + pop_to_owner() + "dup >r education_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2575}
2576TRIGGER_FUNCTION(tf_education_spending_province) {
2577 return "dup " + province_to_owner() + "dup >r education_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2578}
2579TRIGGER_FUNCTION(tf_education_spending_state) {
2580 return "dup " + state_to_owner() + "dup >r education_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
2581}
2582TRIGGER_FUNCTION(tf_colonial_nation) {
2583 return "dup is_colonial_nation @ " + truth_inversion(tval[0]);
2584}
2585TRIGGER_FUNCTION(tf_pop_majority_religion_nation) {
2586 return "dup dominant_religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " = " + truth_inversion(tval[0]);
2587}
2588TRIGGER_FUNCTION(tf_pop_majority_religion_nation_this_nation) {
2589 return ">r dup religion @ r> swap >r dup dominant_religion @ r> = " + truth_inversion(tval[0]);
2590}
2591TRIGGER_FUNCTION(tf_pop_majority_religion_state) {
2592 return "dup dominant_religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " = " + truth_inversion(tval[0]);
2593}
2594TRIGGER_FUNCTION(tf_pop_majority_religion_province) {
2595 return "dup dominant_religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " = " + truth_inversion(tval[0]);
2596}
2597TRIGGER_FUNCTION(tf_pop_majority_culture_nation) {
2598 return "dup dominant_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " = " + truth_inversion(tval[0]);
2599}
2600TRIGGER_FUNCTION(tf_pop_majority_culture_state) {
2601 return "dup dominant_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " = " + truth_inversion(tval[0]);
2602}
2603TRIGGER_FUNCTION(tf_pop_majority_culture_province) {
2604 return "dup dominant_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " = " + truth_inversion(tval[0]);
2605}
2606TRIGGER_FUNCTION(tf_pop_majority_issue_nation) {
2607 return "dup dominant_issue_option @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]);
2608}
2609TRIGGER_FUNCTION(tf_pop_majority_issue_state) {
2610 return "dup dominant_issue_option @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]);
2611}
2612TRIGGER_FUNCTION(tf_pop_majority_issue_province) {
2613 return "dup dominant_issue_option @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]);
2614}
2615TRIGGER_FUNCTION(tf_pop_majority_issue_pop) {
2616 return "dup dominant_issue_option @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]);
2617}
2618TRIGGER_FUNCTION(tf_pop_majority_ideology_nation) {
2619 return "dup dominant_ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]);
2620}
2621TRIGGER_FUNCTION(tf_pop_majority_ideology_state) {
2622 return "dup dominant_ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]);
2623}
2624TRIGGER_FUNCTION(tf_pop_majority_ideology_province) {
2625 return "dup dominant_ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]);
2626}
2627TRIGGER_FUNCTION(tf_pop_majority_ideology_pop) {
2628 return "dup dominant_ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]);
2629}
2630TRIGGER_FUNCTION(tf_poor_strata_militancy_nation) {
2631 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r "
2632 "dup " + std::to_string(demographics::poor_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select "
2633 + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2634}
2635TRIGGER_FUNCTION(tf_poor_strata_militancy_state) {
2636 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r "
2637 "dup " + std::to_string(demographics::poor_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select "
2638 + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2639}
2640TRIGGER_FUNCTION(tf_poor_strata_militancy_province) {
2641 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r "
2642 "dup " + std::to_string(demographics::poor_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select "
2643 + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2644}
2645TRIGGER_FUNCTION(tf_poor_strata_militancy_pop) {
2646 return "dup poptype @ strata @ >i32 " + std::to_string(uint8_t(culture::pop_strata::poor)) + " <> >r "
2647 "dup militancy @ 0.0 r> select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2648}
2649TRIGGER_FUNCTION(tf_middle_strata_militancy_nation) {
2650 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r "
2651 "dup " + std::to_string(demographics::middle_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select "
2652 + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2653}
2654TRIGGER_FUNCTION(tf_middle_strata_militancy_state) {
2655 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r "
2656 "dup " + std::to_string(demographics::middle_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select "
2657 + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2658}
2659TRIGGER_FUNCTION(tf_middle_strata_militancy_province) {
2660 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r "
2661 "dup " + std::to_string(demographics::middle_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select "
2662 + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2663}
2664TRIGGER_FUNCTION(tf_middle_strata_militancy_pop) {
2665 return "dup poptype @ strata @ >i32 " + std::to_string(uint8_t(culture::pop_strata::middle)) + " <> >r "
2666 "dup militancy @ 0.0 r> select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2667}
2668TRIGGER_FUNCTION(tf_rich_strata_militancy_nation) {
2669 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r "
2670 "dup " + std::to_string(demographics::rich_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select "
2671 + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2672}
2673TRIGGER_FUNCTION(tf_rich_strata_militancy_state) {
2674 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r "
2675 "dup " + std::to_string(demographics::rich_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select "
2676 + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2677}
2678TRIGGER_FUNCTION(tf_rich_strata_militancy_province) {
2679 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r "
2680 "dup " + std::to_string(demographics::rich_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select "
2681 + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2682}
2683TRIGGER_FUNCTION(tf_rich_strata_militancy_pop) {
2684 return "dup poptype @ strata @ >i32 " + std::to_string(uint8_t(culture::pop_strata::rich)) + " <> >r "
2685 "dup militancy @ 0.0 r> select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2686}
2687TRIGGER_FUNCTION(tf_rich_tax_above_poor) {
2688 return "dup dup >r rich_tax @ r> poor_tax @ > " + truth_inversion(tval[0]);
2689}
2690TRIGGER_FUNCTION(tf_culture_has_union_tag_pop) {
2691 return "dup culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ valid? " + truth_inversion(tval[0]);
2692}
2693TRIGGER_FUNCTION(tf_culture_has_union_tag_nation) {
2694 return "dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ valid? " + truth_inversion(tval[0]);
2695}
2696TRIGGER_FUNCTION(tf_this_culture_union_tag) {
2697 return "dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = " + truth_inversion(tval[0]);
2698}
2699TRIGGER_FUNCTION(tf_this_culture_union_from) {
2700 return ">r >r dup " + nation_to_tag() + "r> swap r> swap >r dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ r> = " + truth_inversion(tval[0]);
2701}
2702TRIGGER_FUNCTION(tf_this_culture_union_this_nation) {
2703 return ">r dup " + nation_to_tag() + "r> swap >r dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ r> = " + truth_inversion(tval[0]);
2704}
2705TRIGGER_FUNCTION(tf_this_culture_union_this_province) {
2706 return ">r dup " + province_to_owner() + nation_to_tag() + "r> swap >r dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ r> = " + truth_inversion(tval[0]);
2707}
2708TRIGGER_FUNCTION(tf_this_culture_union_this_state) {
2709 return ">r dup " + state_to_owner() + nation_to_tag() + "r> swap >r dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ r> = " + truth_inversion(tval[0]);
2710}
2711TRIGGER_FUNCTION(tf_this_culture_union_this_pop) {
2712 return ">r dup " + pop_to_owner() + nation_to_tag() + "r> swap >r dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ r> = " + truth_inversion(tval[0]);
2713}
2714TRIGGER_FUNCTION(tf_this_culture_union_this_union_nation) {
2715 return ">r dup primary_culture @ culture_group_membership-member group @ r> swap >r dup primary_culture @ culture_group_membership-member group @ r> = " + truth_inversion(tval[0]);
2716}
2717TRIGGER_FUNCTION(tf_this_culture_union_this_union_province) {
2718 return ">r dup " + province_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap >r dup primary_culture @ culture_group_membership-member group @ r> = " + truth_inversion(tval[0]);
2719}
2720TRIGGER_FUNCTION(tf_this_culture_union_this_union_state) {
2721 return ">r dup " + state_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap >r dup primary_culture @ culture_group_membership-member group @ r> = " + truth_inversion(tval[0]);
2722}
2723TRIGGER_FUNCTION(tf_this_culture_union_this_union_pop) {
2724 return ">r dup " + pop_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap >r dup primary_culture @ culture_group_membership-member group @ r> = " + truth_inversion(tval[0]);
2725}
2726TRIGGER_FUNCTION(tf_minorities_nation) {
2727 return "dup dup >r " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ "
2728 "r@ " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r@ primary_culture @ >index + >demographics_key demographics @ - "
2729 "0 "
2730 "while "
2731 "dup culture-size < "
2732 "loop "
2733 "dup >culture_id r@ swap accepted_cultures @ "
2734 "if "
2735 "dup r@ swap >r "
2736 + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r> + >demographics_key demographics @ "
2737 ">r swap r> - swap "
2738 "then "
2739 "1 + "
2740 "end-while "
2741 "drop r> drop 0.0 > "
2742 + truth_inversion(tval[0]);
2743}
2744TRIGGER_FUNCTION(tf_minorities_state) {
2745 return "dup dup >r " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ "
2746 "r@ " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r@ " + state_to_owner() + "primary_culture @ >index + >demographics_key demographics @ - "
2747 "0 "
2748 "while "
2749 "dup culture-size < "
2750 "loop "
2751 "dup >culture_id r@ " + state_to_owner() + "swap accepted_cultures @ "
2752 "if "
2753 "dup r@ swap >r "
2754 + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r> + >demographics_key demographics @ "
2755 ">r swap r> - swap "
2756 "then "
2757 "1 + "
2758 "end-while "
2759 "drop r> drop 0.0 > "
2760 + truth_inversion(tval[0]);
2761}
2762TRIGGER_FUNCTION(tf_minorities_province) {
2763 return "dup dup >r " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ "
2764 "r@ " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r@ " + province_to_owner() + "primary_culture @ >index + >demographics_key demographics @ - "
2765 "0 "
2766 "while "
2767 "dup culture-size < "
2768 "loop "
2769 "dup >culture_id r@ " + province_to_owner() + "swap accepted_cultures @ "
2770 "if "
2771 "dup r@ swap >r "
2772 + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r> + >demographics_key demographics @ "
2773 ">r swap r> - swap "
2774 "then "
2775 "1 + "
2776 "end-while "
2777 "drop r> drop 0.0 > "
2778 + truth_inversion(tval[0]);
2779}
2780TRIGGER_FUNCTION(tf_revanchism_nation) {
2781 return "dup revanchism @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2782}
2783TRIGGER_FUNCTION(tf_revanchism_pop) {
2784 return "dup " + pop_to_owner() + "revanchism @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2785}
2786TRIGGER_FUNCTION(tf_has_crime) {
2787 return "dup crime @ valid? " + truth_inversion(tval[0]);
2788}
2789TRIGGER_FUNCTION(tf_num_of_substates) {
2790 return "dup substates_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
2791}
2792TRIGGER_FUNCTION(tf_num_of_vassals_no_substates) {
2793 return "dup dup >r vassals_count @ >i32 r> substates_count @ >i32 - " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
2794}
2795TRIGGER_FUNCTION(tf_brigades_compare_this) {
2796 return ">r dup active_regiments >f32 r> swap >r dup active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2797}
2798TRIGGER_FUNCTION(tf_brigades_compare_from) {
2799 return ">r >r dup active_regiments >f32 r> swap r> swap >r dup active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2800}
2801TRIGGER_FUNCTION(tf_brigades_compare_province_this) {
2802 return ">r dup active_regiments >f32 r> swap >r dup " + province_to_owner() + "active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2803}
2804TRIGGER_FUNCTION(tf_brigades_compare_province_from) {
2805 return ">r >r dup active_regiments >f32 r> swap r> swap >r dup " + province_to_owner() + "active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2806}
2807TRIGGER_FUNCTION(tf_constructing_cb_tag) {
2808 return "dup constructing_cb_target @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + " = " + truth_inversion(tval[0]);
2809}
2810TRIGGER_FUNCTION(tf_constructing_cb_from) {
2811 return ">r >r dup r> swap r> swap >r dup constructing_cb_target @ r> = " + truth_inversion(tval[0]);
2812}
2813TRIGGER_FUNCTION(tf_constructing_cb_this_nation) {
2814 return ">r dup r> swap >r dup constructing_cb_target @ r> = " + truth_inversion(tval[0]);
2815}
2816TRIGGER_FUNCTION(tf_constructing_cb_this_province) {
2817 return ">r dup " + province_to_owner() + "r> swap >r dup constructing_cb_target @ r> = " + truth_inversion(tval[0]);
2818}
2819TRIGGER_FUNCTION(tf_constructing_cb_this_state) {
2820 return ">r dup " + state_to_owner() + "r> swap >r dup constructing_cb_target @ r> = " + truth_inversion(tval[0]);
2821}
2822TRIGGER_FUNCTION(tf_constructing_cb_this_pop) {
2823 return ">r dup " + pop_to_owner() + "r> swap >r dup constructing_cb_target @ r> = " + truth_inversion(tval[0]);
2824}
2825TRIGGER_FUNCTION(tf_constructing_cb_discovered) {
2826 return "dup constructing_cb_is_discovered @ " + truth_inversion(tval[0]);
2827}
2828TRIGGER_FUNCTION(tf_constructing_cb_progress) {
2829 return "dup constructing_cb_progress @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2830}
2831TRIGGER_FUNCTION(tf_civilization_progress) {
2832 return "dup " + std::to_string(sys::national_mod_offsets::civilization_progress_modifier.index()) + " >national_modifier_value modifier_values @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2833}
2834TRIGGER_FUNCTION(tf_constructing_cb_type) {
2835 return "dup constructing_cb_type @ >index " + std::to_string(trigger::payload(tval[1]).cb_id.index()) + " " + compare_values_eq(tval[0]);
2836}
2837TRIGGER_FUNCTION(tf_is_our_vassal_tag) {
2838 return std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "overlord-subject ruler @ >r dup r> = " + truth_inversion(tval[0]);
2839}
2840TRIGGER_FUNCTION(tf_is_our_vassal_from) {
2841 return ">r >r dup overlord-subject ruler @ r> swap r> swap >r dup r> = " + truth_inversion(tval[0]);
2842}
2843TRIGGER_FUNCTION(tf_is_our_vassal_this_nation) {
2844 return ">r dup overlord-subject ruler @ r> swap >r dup r> = " + truth_inversion(tval[0]);
2845}
2846TRIGGER_FUNCTION(tf_is_our_vassal_this_province) {
2847 return ">r dup " + province_to_owner() + "overlord-subject ruler @ r> swap >r dup r> = " + truth_inversion(tval[0]);
2848}
2849TRIGGER_FUNCTION(tf_is_our_vassal_this_state) {
2850 return ">r dup " + state_to_owner() + "overlord-subject ruler @ r> swap >r dup r> = " + truth_inversion(tval[0]);
2851}
2852TRIGGER_FUNCTION(tf_is_our_vassal_this_pop) {
2853 return ">r dup " + pop_to_owner() + "overlord-subject ruler @ r> swap >r dup r> = " + truth_inversion(tval[0]);
2854}
2855TRIGGER_FUNCTION(tf_is_our_vassal_province_tag) {
2856 return ">r >r dup overlord-subject ruler @ r> swap r> swap >r dup " + province_to_owner() + "r> = " + truth_inversion(tval[0]);
2857}
2858TRIGGER_FUNCTION(tf_is_our_vassal_province_from) {
2859 return ">r >r dup overlord-subject ruler @ r> swap r> swap >r dup " + province_to_owner() + "r> = " + truth_inversion(tval[0]);
2860}
2861TRIGGER_FUNCTION(tf_is_our_vassal_province_this_nation) {
2862 return ">r dup overlord-subject ruler @ r> swap >r dup " + province_to_owner() + "r> = " + truth_inversion(tval[0]);
2863}
2864TRIGGER_FUNCTION(tf_is_our_vassal_province_this_province) {
2865 return ">r dup " + province_to_owner() + "overlord-subject ruler @ r> swap >r dup " + province_to_owner() + "r> = " + truth_inversion(tval[0]);
2866}
2867TRIGGER_FUNCTION(tf_is_our_vassal_province_this_state) {
2868 return ">r dup " + state_to_owner() + "overlord-subject ruler @ r> swap >r dup " + province_to_owner() + "r> = " + truth_inversion(tval[0]);
2869}
2870TRIGGER_FUNCTION(tf_is_our_vassal_province_this_pop) {
2871 return ">r dup " + pop_to_owner() + "overlord-subject ruler @ r> swap >r dup " + province_to_owner() + "r> = " + truth_inversion(tval[0]);
2872}
2873TRIGGER_FUNCTION(tf_is_substate) {
2874 return "dup is_substate @ " + truth_inversion(tval[0]);
2875}
2876TRIGGER_FUNCTION(tf_great_wars_enabled) {
2877 return std::to_string(offsetof(sys::state, military_definitions) + offsetof(military::global_military_state, great_wars_enabled)) + " state-ptr @ buf-add ptr-cast ptr(i8) @ 0 >i8 <> " + truth_inversion(tval[0]);
2878}
2879TRIGGER_FUNCTION(tf_can_nationalize) {
2880 return "dup >index state-ptr @ can-nationalize? " + truth_inversion(tval[0]);
2881}
2882TRIGGER_FUNCTION(tf_part_of_sphere) {
2883 return "dup in_sphere_of @ valid? " + truth_inversion(tval[0]);
2884}
2885TRIGGER_FUNCTION(tf_is_sphere_leader_of_tag) {
2886 return std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "in_sphere_of @ >r dup r> = " + truth_inversion(tval[0]);
2887}
2888TRIGGER_FUNCTION(tf_is_sphere_leader_of_from) {
2889 return ">r >r dup in_sphere_of @ r> swap r> swap >r dup r> = " + truth_inversion(tval[0]);
2890}
2891TRIGGER_FUNCTION(tf_is_sphere_leader_of_this_nation) {
2892 return ">r dup in_sphere_of @ r> swap >r dup r> = " + truth_inversion(tval[0]);
2893}
2894TRIGGER_FUNCTION(tf_is_sphere_leader_of_this_province) {
2895 return ">r " + province_to_owner() + "dup in_sphere_of @ r> swap >r dup r> = " + truth_inversion(tval[0]);
2896}
2897TRIGGER_FUNCTION(tf_is_sphere_leader_of_this_state) {
2898 return ">r " + state_to_owner() + "dup in_sphere_of @ r> swap >r dup r> = " + truth_inversion(tval[0]);
2899}
2900TRIGGER_FUNCTION(tf_is_sphere_leader_of_this_pop) {
2901 return ">r " + pop_to_owner() + "dup in_sphere_of @ r> swap >r dup r> = " + truth_inversion(tval[0]);
2902}
2903TRIGGER_FUNCTION(tf_number_of_states) {
2904 return "dup owned_state_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]);
2905}
2906TRIGGER_FUNCTION(tf_war_score) {
2907 return "true " + truth_inversion(tval[0]);
2908}
2909TRIGGER_FUNCTION(tf_is_releasable_vassal_from) {
2910 return ">r >r dup " + nation_to_tag() + "is_not_releasable @ not r> swap r> swap" + truth_inversion(tval[0]);
2911}
2912TRIGGER_FUNCTION(tf_is_releasable_vassal_other) {
2913 return ">r >r dup " + nation_to_tag() + "is_not_releasable @ not r> swap r> swap" + truth_inversion(tval[0]);
2914}
2915TRIGGER_FUNCTION(tf_has_recent_imigration) {
2916 return "dup last_immigration ptr-cast ptr(u16) @ >i32 " + std::to_string(tval[1]) + " + current-date @ >i32 " + compare_values(tval[0]);
2917}
2918TRIGGER_FUNCTION(tf_province_control_days) {
2919 return "dup last_control_change ptr-cast ptr(u16) @ >i32 " + std::to_string(tval[1]) + " + current-date @ >i32 " + compare_values(tval[0]);
2920}
2921TRIGGER_FUNCTION(tf_is_disarmed) {
2922 return "dup disarmed_until ptr-cast ptr(u16) @ >i32 dup 0 <> swap current-date @ >i32 > and " + truth_inversion(tval[0]);
2923}
2924TRIGGER_FUNCTION(tf_is_disarmed_pop) {
2925 return "dup " + pop_to_owner() + "disarmed_until ptr-cast ptr(u16) @ >i32 dup 0 <> swap current-date @ >i32 > and " + truth_inversion(tval[0]);
2926}
2927TRIGGER_FUNCTION(tf_big_producer) {
2928 return "false " + truth_inversion(tval[0]);
2929}
2930TRIGGER_FUNCTION(tf_someone_can_form_union_tag_from) {
2931 return "false " + truth_inversion(tval[0]);
2932}
2933TRIGGER_FUNCTION(tf_someone_can_form_union_tag_other) {
2934 return "false " + truth_inversion(tval[0]);
2935}
2936TRIGGER_FUNCTION(tf_social_movement_strength) {
2937 return "dup >index true state-ptr @ movement-str " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2938}
2939TRIGGER_FUNCTION(tf_political_movement_strength) {
2940 return "dup >index false state-ptr @ movement-str " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
2941}
2942TRIGGER_FUNCTION(tf_can_build_factory_in_capital_state) {
2943 return "true " + truth_inversion(tval[0]);
2944}
2945TRIGGER_FUNCTION(tf_social_movement) {
2946 return "dup pop_movement_membership-pop movement @ get_associated_issue_option @ dup >r valid? r> parent_issue @ issue_type @ >i32 " + std::to_string(int32_t(culture::issue_type::social)) + " = and " + truth_inversion(tval[0]);
2947}
2948TRIGGER_FUNCTION(tf_political_movement) {
2949 return "dup pop_movement_membership-pop movement @ get_associated_issue_option @ dup >r valid? r> parent_issue @ issue_type @ >i32 " + std::to_string(int32_t(culture::issue_type::political)) + " = and " + truth_inversion(tval[0]);
2950}
2951TRIGGER_FUNCTION(tf_political_movement_from_reb) {
2952 // returns false because I'm not sure exactly what it is supposed to do (applies to the below as well)
2953 // it is called in nation scope while modifying chances for a rebel faction to spawn
2954 // perhaps reducing the chance if there is an "appropriate" movement (because there is almost always some movement)
2955 // however, the logic from working backwards from rebel factions to movements is not clear to me
2956 return "false " + truth_inversion(tval[0]);
2957}
2958TRIGGER_FUNCTION(tf_social_movement_from_reb) {
2959 return "false " + truth_inversion(tval[0]);
2960}
2961TRIGGER_FUNCTION(tf_has_cultural_sphere) {
2962 return "dup >index state-ptr @ has-union-sphere? " + truth_inversion(tval[0]);
2963}
2964TRIGGER_FUNCTION(tf_world_wars_enabled) {
2965 return std::to_string(offsetof(sys::state, military_definitions) + offsetof(military::global_military_state, world_wars_enabled)) + " state-ptr @ buf-add ptr-cast ptr(i8) @ 0 >i8 <> " + truth_inversion(tval[0]);
2966}
2967TRIGGER_FUNCTION(tf_has_pop_culture_pop_this_pop) {
2968 return ">r dup culture @ r> swap >r dup culture r> = " + truth_inversion(tval[0]);
2969}
2970TRIGGER_FUNCTION(tf_has_pop_culture_state_this_pop) {
2971 return ">r dup culture @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2972}
2973TRIGGER_FUNCTION(tf_has_pop_culture_province_this_pop) {
2974 return ">r dup culture @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2975}
2976TRIGGER_FUNCTION(tf_has_pop_culture_nation_this_pop) {
2977 return ">r dup culture @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2978}
2979TRIGGER_FUNCTION(tf_has_pop_culture_pop) {
2980 return "dup culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]);
2981}
2982TRIGGER_FUNCTION(tf_has_pop_culture_state) {
2983 return "dup " + std::to_string(trigger::payload(tval[1]).cul_id.index() + demographics::count_special_keys + ws.world.pop_type_size() * 2) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2984}
2985TRIGGER_FUNCTION(tf_has_pop_culture_province) {
2986 return "dup " + std::to_string(trigger::payload(tval[1]).cul_id.index() + demographics::count_special_keys + ws.world.pop_type_size() * 2) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2987}
2988TRIGGER_FUNCTION(tf_has_pop_culture_nation) {
2989 return "dup " + std::to_string(trigger::payload(tval[1]).cul_id.index() + demographics::count_special_keys + ws.world.pop_type_size() * 2) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2990}
2991TRIGGER_FUNCTION(tf_has_pop_religion_pop_this_pop) {
2992 return ">r dup religion @ r> swap >r dup religion r> = " + truth_inversion(tval[0]);
2993}
2994TRIGGER_FUNCTION(tf_has_pop_religion_state_this_pop) {
2995 return ">r dup religion @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2 + ws.world.culture_size() + ws.world.ideology_size() + ws.world.issue_option_size()) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2996}
2997TRIGGER_FUNCTION(tf_has_pop_religion_province_this_pop) {
2998 return ">r dup religion @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2 + ws.world.culture_size() + ws.world.ideology_size() + ws.world.issue_option_size()) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
2999}
3000TRIGGER_FUNCTION(tf_has_pop_religion_nation_this_pop) {
3001 return ">r dup religion @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2 + ws.world.culture_size() + ws.world.ideology_size() + ws.world.issue_option_size()) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
3002}
3003TRIGGER_FUNCTION(tf_has_pop_religion_pop) {
3004 return "dup religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " " + compare_values_eq(tval[0]);
3005}
3006TRIGGER_FUNCTION(tf_has_pop_religion_state) {
3007 return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).rel_id).index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
3008}
3009TRIGGER_FUNCTION(tf_has_pop_religion_province) {
3010 return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).rel_id).index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
3011}
3012TRIGGER_FUNCTION(tf_has_pop_religion_nation) {
3013 return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).rel_id).index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]);
3014}
3015TRIGGER_FUNCTION(tf_life_needs) {
3016 return "dup life_needs_satisfaction @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3017}
3018TRIGGER_FUNCTION(tf_everyday_needs) {
3019 return "dup everyday_needs_satisfaction @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3020}
3021TRIGGER_FUNCTION(tf_luxury_needs) {
3022 return "dup luxury_needs_satisfaction @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3023}
3024TRIGGER_FUNCTION(tf_consciousness_pop) {
3025 return "dup consciousness @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3026}
3027TRIGGER_FUNCTION(tf_consciousness_province) {
3028 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3029}
3030TRIGGER_FUNCTION(tf_consciousness_state) {
3031 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3032}
3033TRIGGER_FUNCTION(tf_consciousness_nation) {
3034 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3035}
3036TRIGGER_FUNCTION(tf_literacy_pop) {
3037 return "dup literacy @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3038}
3039TRIGGER_FUNCTION(tf_literacy_province) {
3040 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::literacy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3041}
3042TRIGGER_FUNCTION(tf_literacy_state) {
3043 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::literacy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3044}
3045TRIGGER_FUNCTION(tf_literacy_nation) {
3046 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::literacy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3047}
3048TRIGGER_FUNCTION(tf_militancy_pop) {
3049 return "dup militancy @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3050}
3051TRIGGER_FUNCTION(tf_militancy_province) {
3052 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3053}
3054TRIGGER_FUNCTION(tf_militancy_state) {
3055 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3056}
3057TRIGGER_FUNCTION(tf_militancy_nation) {
3058 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3059}
3060TRIGGER_FUNCTION(tf_trade_goods_in_state_state) {
3061 return "dup >index " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " state-ptr @ state-has-rgo? " + truth_inversion(tval[0]);
3062}
3063TRIGGER_FUNCTION(tf_trade_goods_in_state_province) {
3064 return "dup state_membership @ >index " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " state-ptr @ state-has-rgo? " + truth_inversion(tval[0]);
3065}
3066TRIGGER_FUNCTION(tf_has_flashpoint) {
3067 return "dup flashpoint_tag @ valid? " + truth_inversion(tval[0]);
3068}
3069TRIGGER_FUNCTION(tf_flashpoint_tension) {
3070 return "dup flashpoint_tension @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3071}
3072TRIGGER_FUNCTION(tf_flashpoint_tension_province) {
3073 return "dup state_membership @ flashpoint_tension @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3074}
3075TRIGGER_FUNCTION(tf_crisis_exist) {
3076 return std::to_string(offsetof(sys::state, current_crisis)) + " state-ptr @ buf-add ptr-cast ptr(i32) @ " + std::to_string(int32_t(sys::crisis_type::none)) + " <> " + truth_inversion(tval[0]);
3077}
3078TRIGGER_FUNCTION(tf_is_liberation_crisis) {
3079 return std::to_string(offsetof(sys::state, current_crisis)) + " state-ptr @ buf-add ptr-cast ptr(i32) @ " + std::to_string(int32_t(sys::crisis_type::liberation)) + " " + compare_values_eq(tval[0]);
3080}
3081TRIGGER_FUNCTION(tf_is_claim_crisis) {
3082 return std::to_string(offsetof(sys::state, current_crisis)) + " state-ptr @ buf-add ptr-cast ptr(i32) @ " + std::to_string(int32_t(sys::crisis_type::claim)) + " " + compare_values_eq(tval[0]);
3083}
3084TRIGGER_FUNCTION(tf_crisis_temperature) {
3085 return std::to_string(offsetof(sys::state, crisis_temperature)) + " state-ptr @ buf-add ptr-cast ptr(f32) @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3086}
3087TRIGGER_FUNCTION(tf_involved_in_crisis_nation) {
3088 return "dup >index state-ptr @ in-crisis? " + truth_inversion(tval[0]);
3089}
3090TRIGGER_FUNCTION(tf_involved_in_crisis_pop) {
3091 return "dup " + pop_to_owner() + ">index state-ptr @ in-crisis? " + truth_inversion(tval[0]);
3092}
3093TRIGGER_FUNCTION(tf_rich_strata_life_needs_nation) {
3094 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3095}
3096TRIGGER_FUNCTION(tf_rich_strata_life_needs_state) {
3097 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3098}
3099TRIGGER_FUNCTION(tf_rich_strata_life_needs_province) {
3100 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3101}
3102TRIGGER_FUNCTION(tf_rich_strata_life_needs_pop) {
3103 return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3104}
3105TRIGGER_FUNCTION(tf_rich_strata_everyday_needs_nation) {
3106 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3107}
3108TRIGGER_FUNCTION(tf_rich_strata_everyday_needs_state) {
3109 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3110}
3111TRIGGER_FUNCTION(tf_rich_strata_everyday_needs_province) {
3112 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3113}
3114TRIGGER_FUNCTION(tf_rich_strata_everyday_needs_pop) {
3115 return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3116}
3117TRIGGER_FUNCTION(tf_rich_strata_luxury_needs_nation) {
3118 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3119}
3120TRIGGER_FUNCTION(tf_rich_strata_luxury_needs_state) {
3121 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3122}
3123TRIGGER_FUNCTION(tf_rich_strata_luxury_needs_province) {
3124 return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3125}
3126TRIGGER_FUNCTION(tf_rich_strata_luxury_needs_pop) {
3127 return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3128}
3129TRIGGER_FUNCTION(tf_middle_strata_life_needs_nation) {
3130 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3131}
3132TRIGGER_FUNCTION(tf_middle_strata_life_needs_state) {
3133 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3134}
3135TRIGGER_FUNCTION(tf_middle_strata_life_needs_province) {
3136 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3137}
3138TRIGGER_FUNCTION(tf_middle_strata_life_needs_pop) {
3139 return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3140}
3141TRIGGER_FUNCTION(tf_middle_strata_everyday_needs_nation) {
3142 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3143}
3144TRIGGER_FUNCTION(tf_middle_strata_everyday_needs_state) {
3145 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3146}
3147TRIGGER_FUNCTION(tf_middle_strata_everyday_needs_province) {
3148 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3149}
3150TRIGGER_FUNCTION(tf_middle_strata_everyday_needs_pop) {
3151 return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3152}
3153TRIGGER_FUNCTION(tf_middle_strata_luxury_needs_nation) {
3154 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3155}
3156TRIGGER_FUNCTION(tf_middle_strata_luxury_needs_state) {
3157 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3158}
3159TRIGGER_FUNCTION(tf_middle_strata_luxury_needs_province) {
3160 return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3161}
3162TRIGGER_FUNCTION(tf_middle_strata_luxury_needs_pop) {
3163 return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3164}
3165TRIGGER_FUNCTION(tf_poor_strata_life_needs_nation) {
3166 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3167}
3168TRIGGER_FUNCTION(tf_poor_strata_life_needs_state) {
3169 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3170}
3171TRIGGER_FUNCTION(tf_poor_strata_life_needs_province) {
3172 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3173}
3174TRIGGER_FUNCTION(tf_poor_strata_life_needs_pop) {
3175 return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3176}
3177TRIGGER_FUNCTION(tf_poor_strata_everyday_needs_nation) {
3178 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3179}
3180TRIGGER_FUNCTION(tf_poor_strata_everyday_needs_state) {
3181 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3182}
3183TRIGGER_FUNCTION(tf_poor_strata_everyday_needs_province) {
3184 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3185}
3186TRIGGER_FUNCTION(tf_poor_strata_everyday_needs_pop) {
3187 return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3188}
3189TRIGGER_FUNCTION(tf_poor_strata_luxury_needs_nation) {
3190 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3191}
3192TRIGGER_FUNCTION(tf_poor_strata_luxury_needs_state) {
3193 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3194}
3195TRIGGER_FUNCTION(tf_poor_strata_luxury_needs_province) {
3196 return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3197}
3198TRIGGER_FUNCTION(tf_poor_strata_luxury_needs_pop) {
3199 return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3200}
3201TRIGGER_FUNCTION(tf_diplomatic_influence_tag) {
3202 return "dup >index " + std::to_string(trigger::payload(tval[2]).tag_id.index()) +" >national_identity_id " + tag_to_nation() + ">index state-ptr @ influence-on " + std::to_string(tval[1]) + ".0 " + compare_values(tval[0]);
3203}
3204TRIGGER_FUNCTION(tf_diplomatic_influence_this_nation) {
3205 return ">r dup r> swap >r dup >index r> >index state-ptr @ influence-on " + std::to_string(tval[1]) + ".0 " + compare_values(tval[0]);
3206}
3207TRIGGER_FUNCTION(tf_diplomatic_influence_this_province) {
3208 return ">r dup " + province_to_owner() + "r> swap >r dup >index r> >index state-ptr @ influence-on " + std::to_string(tval[1]) + ".0 " + compare_values(tval[0]);
3209}
3210TRIGGER_FUNCTION(tf_diplomatic_influence_from_nation) {
3211 return ">r >r dup r> swap r> swap >r dup >index r> >index state-ptr @ influence-on " + std::to_string(tval[1]) + ".0 " + compare_values(tval[0]);
3212}
3213TRIGGER_FUNCTION(tf_diplomatic_influence_from_province) {
3214 return ">r >r dup " + province_to_owner() + "r> swap r> swap >r dup >index r> >index state-ptr @ influence-on " + std::to_string(tval[1]) + ".0 " + compare_values(tval[0]);
3215}
3216TRIGGER_FUNCTION(tf_pop_unemployment_nation) {
3217 return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r "
3218 "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ "
3219 "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3220}
3221TRIGGER_FUNCTION(tf_pop_unemployment_state) {
3222 return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r "
3223 "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ "
3224 "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3225}
3226TRIGGER_FUNCTION(tf_pop_unemployment_province) {
3227 return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r "
3228 "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ "
3229 "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3230}
3231TRIGGER_FUNCTION(tf_pop_unemployment_pop) {
3232 return "dup size @ >r dup employment @ r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3233}
3234TRIGGER_FUNCTION(tf_pop_unemployment_nation_this_pop) {
3235 return
3236 ">r dup poptype @ >index r> swap >r "
3237 "dup " + std::to_string(demographics::count_special_keys) + " r@ + >demographics_key demographics @ >r "
3238 "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size()) + " r> r> swap >r + >demographics_key demographics @ "
3239 "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3240}
3241TRIGGER_FUNCTION(tf_pop_unemployment_state_this_pop) {
3242 return
3243 ">r dup poptype @ >index r> swap >r "
3244 "dup " + std::to_string(demographics::count_special_keys) + " r@ + >demographics_key demographics @ >r "
3245 "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size()) + " r> r> swap >r + >demographics_key demographics @ "
3246 "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3247}
3248TRIGGER_FUNCTION(tf_pop_unemployment_province_this_pop) {
3249 return
3250 ">r dup poptype @ >index r> swap >r "
3251 "dup " + std::to_string(demographics::count_special_keys) + " r@ + >demographics_key demographics @ >r "
3252 "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size()) + " r> r> swap >r + >demographics_key demographics @ "
3253 "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3254}
3255TRIGGER_FUNCTION(tf_relation_tag) {
3256 return "dup >index " +std::to_string(trigger::payload(tval[2]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3257}
3258TRIGGER_FUNCTION(tf_relation_this_nation) {
3259 return ">r dup >index r> swap >r dup >index r> state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3260}
3261TRIGGER_FUNCTION(tf_relation_this_province) {
3262 return ">r dup " + province_to_owner() + ">index r> swap >r dup >index r> state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3263}
3264TRIGGER_FUNCTION(tf_relation_this_pop) {
3265 return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3266}
3267TRIGGER_FUNCTION(tf_relation_from_nation) {
3268 return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3269}
3270TRIGGER_FUNCTION(tf_relation_from_province) {
3271 return ">r >r dup " + province_to_owner() + ">index r> swap r> swap >r dup >index r> state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3272}
3273TRIGGER_FUNCTION(tf_check_variable) {
3274 return "dup " + std::to_string(trigger::payload(tval[3]).natv_id.index()) + " >national_variable_id variables @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3275}
3276TRIGGER_FUNCTION(tf_upper_house) {
3277 return "dup " + std::to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id upper_house @ " + std::to_string(100.0f * read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3278}
3279TRIGGER_FUNCTION(tf_unemployment_by_type_nation) {
3280 return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r "
3281 "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ "
3282 "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3283}
3284TRIGGER_FUNCTION(tf_unemployment_by_type_state) {
3285 return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r "
3286 "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ "
3287 "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3288}
3289TRIGGER_FUNCTION(tf_unemployment_by_type_province) {
3290 return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r "
3291 "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ "
3292 "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3293}
3294TRIGGER_FUNCTION(tf_unemployment_by_type_pop) {
3295 return "dup " + pop_to_location() + "state_membership @ dup "
3296 + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r "
3297 + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ "
3298 "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]);
3299}
3300TRIGGER_FUNCTION(tf_party_loyalty_nation_province_id) {
3301 return std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + std::to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]);
3302}
3303TRIGGER_FUNCTION(tf_party_loyalty_from_nation_province_id) {
3304 return std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + std::to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]);
3305}
3306TRIGGER_FUNCTION(tf_party_loyalty_province_province_id) {
3307 return std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + std::to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]);
3308}
3309TRIGGER_FUNCTION(tf_party_loyalty_from_province_province_id) {
3310 return std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + std::to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]);
3311}
3312TRIGGER_FUNCTION(tf_party_loyalty_nation_from_province) {
3313 return ">r >r dup r> swap r> swap " + std::to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
3314}
3315TRIGGER_FUNCTION(tf_party_loyalty_generic) {
3316 return "dup " + std::to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
3317}
3318TRIGGER_FUNCTION(tf_party_loyalty_from_nation_scope_province) {
3319 return "dup " + std::to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
3320}
3321TRIGGER_FUNCTION(tf_party_loyalty_from_province_scope_province) {
3322 return "dup " + std::to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]);
3323}
3324TRIGGER_FUNCTION(tf_can_build_in_province_railroad_no_limit_from_nation) {
3325 return ">r >r dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap r> swap >r "
3326 "dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r "
3327 "dup " + std::to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]);
3328}
3329TRIGGER_FUNCTION(tf_can_build_in_province_railroad_yes_limit_from_nation) {
3330 return ">r >r dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap r> swap >r "
3331 "dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r "
3332 "dup " + std::to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]);
3333}
3334TRIGGER_FUNCTION(tf_can_build_in_province_railroad_no_limit_this_nation) {
3335 return ">r dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap >r "
3336 "dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r "
3337 "dup " + std::to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]);
3338}
3339TRIGGER_FUNCTION(tf_can_build_in_province_railroad_yes_limit_this_nation) {
3340 return ">r dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap >r "
3341 "dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r "
3342 "dup " + std::to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]);
3343}
3344TRIGGER_FUNCTION(tf_can_build_in_province_fort_no_limit_from_nation) {
3345 return ">r >r dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap r> swap >r "
3346 "dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r "
3347 "dup " + std::to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]);
3348}
3349TRIGGER_FUNCTION(tf_can_build_in_province_fort_yes_limit_from_nation) {
3350 return ">r >r dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap r> swap >r "
3351 "dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r "
3352 "dup " + std::to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]);
3353}
3354TRIGGER_FUNCTION(tf_can_build_in_province_fort_no_limit_this_nation) {
3355 return ">r dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap >r "
3356 "dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r "
3357 "dup " + std::to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]);
3358}
3359TRIGGER_FUNCTION(tf_can_build_in_province_fort_yes_limit_this_nation) {
3360 return ">r dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap >r "
3361 "dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r "
3362 "dup " + std::to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]);
3363}
3364TRIGGER_FUNCTION(tf_can_build_in_province_naval_base_no_limit_from_nation) {
3365 return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ can-build-naval-base? " + truth_inversion(tval[0]);
3366}
3367TRIGGER_FUNCTION(tf_can_build_in_province_naval_base_yes_limit_from_nation) {
3368 return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ can-build-naval-base? " + truth_inversion(tval[0]);
3369}
3370TRIGGER_FUNCTION(tf_can_build_in_province_naval_base_no_limit_this_nation) {
3371 return ">r dup >index r> swap >r dup >index r> state-ptr @ can-build-naval-base? " + truth_inversion(tval[0]);
3372}
3373TRIGGER_FUNCTION(tf_can_build_in_province_naval_base_yes_limit_this_nation) {
3374 return ">r dup >index r> swap >r dup >index r> state-ptr @ can-build-naval-base? " + truth_inversion(tval[0]);
3375}
3376TRIGGER_FUNCTION(tf_can_build_railway_in_capital_yes_whole_state_yes_limit) {
3377 return "true " + truth_inversion(tval[0]);
3378}
3379TRIGGER_FUNCTION(tf_can_build_railway_in_capital_yes_whole_state_no_limit) {
3380 return "true " + truth_inversion(tval[0]);
3381}
3382TRIGGER_FUNCTION(tf_can_build_railway_in_capital_no_whole_state_yes_limit) {
3383 return "true " + truth_inversion(tval[0]);
3384}
3385TRIGGER_FUNCTION(tf_can_build_railway_in_capital_no_whole_state_no_limit) {
3386 return "true " + truth_inversion(tval[0]);
3387}
3388TRIGGER_FUNCTION(tf_can_build_fort_in_capital_yes_whole_state_yes_limit) {
3389 return "true " + truth_inversion(tval[0]);
3390}
3391TRIGGER_FUNCTION(tf_can_build_fort_in_capital_yes_whole_state_no_limit) {
3392 return "true " + truth_inversion(tval[0]);
3393}
3394TRIGGER_FUNCTION(tf_can_build_fort_in_capital_no_whole_state_yes_limit) {
3395 return "true " + truth_inversion(tval[0]);
3396}
3397TRIGGER_FUNCTION(tf_can_build_fort_in_capital_no_whole_state_no_limit) {
3398 return "true " + truth_inversion(tval[0]);
3399}
3400TRIGGER_FUNCTION(tf_work_available_nation) {
3401 return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ >r "
3402 "dup " + std::to_string(demographics::to_employment_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ "
3403 " r> >= " + truth_inversion(tval[0]);
3404}
3405TRIGGER_FUNCTION(tf_work_available_state) {
3406 return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ >r "
3407 "dup " + std::to_string(demographics::to_employment_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ "
3408 " r> >= " + truth_inversion(tval[0]);
3409}
3410TRIGGER_FUNCTION(tf_work_available_province) {
3411 return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ >r "
3412 "dup " + std::to_string(demographics::to_employment_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ "
3413 " r> >= " + truth_inversion(tval[0]);
3414}
3415TRIGGER_FUNCTION(tf_variable_ideology_name_nation) {
3416 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r "
3417 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >demographics_key demographics @ "
3418 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3419}
3420TRIGGER_FUNCTION(tf_variable_ideology_name_state) {
3421 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r "
3422 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >demographics_key demographics @ "
3423 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3424}
3425TRIGGER_FUNCTION(tf_variable_ideology_name_province) {
3426 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r "
3427 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >demographics_key demographics @ "
3428 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3429}
3430TRIGGER_FUNCTION(tf_variable_ideology_name_pop) {
3431 return "dup size @ >r "
3432 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >pop_demographics_key demographics @ "
3433 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3434}
3435TRIGGER_FUNCTION(tf_variable_issue_name_nation) {
3436 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r "
3437 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >demographics_key demographics @ "
3438 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3439}
3440TRIGGER_FUNCTION(tf_variable_issue_name_state) {
3441 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r "
3442 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >demographics_key demographics @ "
3443 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3444}
3445TRIGGER_FUNCTION(tf_variable_issue_name_province) {
3446 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r "
3447 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >demographics_key demographics @ "
3448 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3449}
3450TRIGGER_FUNCTION(tf_variable_issue_name_pop) {
3451 return "dup size @ >r "
3452 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >pop_demographics_key demographics @ "
3453 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3454}
3455TRIGGER_FUNCTION(tf_variable_issue_group_name_nation) {
3456 return "dup " + std::to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + std::to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]);
3457}
3458TRIGGER_FUNCTION(tf_variable_issue_group_name_state) {
3459 return "dup " + state_to_owner() + std::to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + std::to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]);
3460}
3461TRIGGER_FUNCTION(tf_variable_issue_group_name_province) {
3462 return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + std::to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]);
3463}
3464TRIGGER_FUNCTION(tf_variable_issue_group_name_pop) {
3465 return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + std::to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]);
3466}
3467TRIGGER_FUNCTION(tf_variable_reform_group_name_nation) {
3468 return "dup " + std::to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + std::to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]);
3469}
3470TRIGGER_FUNCTION(tf_variable_reform_group_name_state) {
3471 return "dup " + state_to_owner() + std::to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + std::to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]);
3472}
3473TRIGGER_FUNCTION(tf_variable_reform_group_name_province) {
3474 return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + std::to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]);
3475}
3476TRIGGER_FUNCTION(tf_variable_reform_group_name_pop) {
3477 return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + std::to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]);
3478}
3479TRIGGER_FUNCTION(tf_variable_pop_type_name_nation) {
3480 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r "
3481 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ "
3482 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3483}
3484TRIGGER_FUNCTION(tf_variable_pop_type_name_state) {
3485 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r "
3486 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ "
3487 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3488}
3489TRIGGER_FUNCTION(tf_variable_pop_type_name_province) {
3490 return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r "
3491 "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ "
3492 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3493}
3494TRIGGER_FUNCTION(tf_variable_pop_type_name_pop) {
3495 return "dup " + pop_to_location() + "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r "
3496 + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ "
3497 " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3498}
3499TRIGGER_FUNCTION(tf_variable_good_name) {
3500 return "dup " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " >commodity_id stockpiles @ " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]);
3501}
3502TRIGGER_FUNCTION(tf_religion_nation) {
3503 return "dup religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " " + compare_values_eq(tval[0]);
3504}
3505TRIGGER_FUNCTION(tf_religion_nation_reb) {
3506 return ">r >r dup religion @ r> swap r> swap >r dup religion @ r> = " + truth_inversion(tval[0]);
3507}
3508TRIGGER_FUNCTION(tf_religion_nation_from_nation) {
3509 return ">r >r dup religion @ r> swap r> swap >r dup religion @ r> = " + truth_inversion(tval[0]);
3510}
3511TRIGGER_FUNCTION(tf_religion_nation_this_nation) {
3512 return ">r dup religion @ r> swap >r dup religion @ r> = " + truth_inversion(tval[0]);
3513}
3514TRIGGER_FUNCTION(tf_religion_nation_this_state) {
3515 return ">r dup " + state_to_owner() + "religion @ r> swap >r dup religion @ r> = " + truth_inversion(tval[0]);
3516}
3517TRIGGER_FUNCTION(tf_religion_nation_this_province) {
3518 return ">r dup " + province_to_owner() + "religion @ r> swap >r dup religion @ r> = " + truth_inversion(tval[0]);
3519}
3520TRIGGER_FUNCTION(tf_religion_nation_this_pop) {
3521 return ">r dup " + pop_to_owner() + "religion @ r> swap >r dup religion @ r> = " + truth_inversion(tval[0]);
3522}
3523TRIGGER_FUNCTION(tf_invention) {
3524 return "dup " + std::to_string(trigger::payload(tval[1]).invt_id.index()) + " >invention_id active_inventions @ " + truth_inversion(tval[0]);
3525}
3526TRIGGER_FUNCTION(tf_invention_province) {
3527 return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).invt_id.index()) + " >invention_id active_inventions @ " + truth_inversion(tval[0]);
3528}
3529TRIGGER_FUNCTION(tf_invention_pop) {
3530 return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).invt_id.index()) + " >invention_id active_inventions @ " + truth_inversion(tval[0]);
3531}
3533 auto sid = trigger::payload(tval[1]).str_id;
3534 auto tid = ws.world.stored_trigger_get_function(sid);
3535 return test_trigger_generic(ws.trigger_data.data() + ws.trigger_data_indices[tid.index() + 1], ws) + truth_inversion(tval[0]);
3536}
3537
3538TRIGGER_FUNCTION(tf_has_building_bank) {
3539 return "dup " + std::to_string(int32_t(economy::province_building_type::bank)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]);
3540}
3541TRIGGER_FUNCTION(tf_has_building_university) {
3542 return "dup " + std::to_string(int32_t(economy::province_building_type::university)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]);
3543}
3544
3546 constexpr static std::string (
3547 CALLTYPE* trigger_functions[])(uint16_t const* tval, sys::state& ws) = {
3548 tf_none,
3549#define TRIGGER_BYTECODE_ELEMENT(code, name, arg) tf_##name ,
3551#undef TRIGGER_BYTECODE_ELEMENT
3552 //
3553 // scopes
3554 //
3555 tf_generic_scope, // constexpr uint16_t generic_scope = 0x0000; // or & and
3556 tf_x_neighbor_province_scope, // constexpr uint16_t x_neighbor_province_scope = 0x0001;
3557 tf_x_neighbor_country_scope_nation, // constexpr uint16_t x_neighbor_country_scope_nation = 0x0002;
3558 tf_x_neighbor_country_scope_pop, // constexpr uint16_t x_neighbor_country_scope_pop = 0x0003;
3559 tf_x_war_countries_scope_nation, // constexpr uint16_t x_war_countries_scope_nation = 0x0004;
3560 tf_x_war_countries_scope_pop, // constexpr uint16_t x_war_countries_scope_pop = 0x0005;
3561 tf_x_greater_power_scope, // constexpr uint16_t x_greater_power_scope = 0x0006;
3562 tf_x_owned_province_scope_state, // constexpr uint16_t x_owned_province_scope_state = 0x0007;
3563 tf_x_owned_province_scope_nation, // constexpr uint16_t x_owned_province_scope_nation = 0x0008;
3564 tf_x_core_scope_province, // constexpr uint16_t x_core_scope_province = 0x0009;
3565 tf_x_core_scope_nation, // constexpr uint16_t x_core_scope_nation = 0x000A;
3566 tf_x_state_scope, // constexpr uint16_t x_state_scope = 0x000B;
3567 tf_x_substate_scope, // constexpr uint16_t x_substate_scope = 0x000C;
3568 tf_x_sphere_member_scope, // constexpr uint16_t x_sphere_member_scope = 0x000D;
3569 tf_x_pop_scope_province, // constexpr uint16_t x_pop_scope_province = 0x000E;
3570 tf_x_pop_scope_state, // constexpr uint16_t x_pop_scope_state = 0x000F;
3571 tf_x_pop_scope_nation, // constexpr uint16_t x_pop_scope_nation = 0x0010;
3572 tf_x_provinces_in_variable_region, // constexpr uint16_t x_provinces_in_variable_region = 0x0011; // variable name
3573 tf_owner_scope_state, // constexpr uint16_t owner_scope_state = 0x0012;
3574 tf_owner_scope_province, // constexpr uint16_t owner_scope_province = 0x0013;
3575 tf_controller_scope, // constexpr uint16_t controller_scope = 0x0014;
3576 tf_location_scope, // constexpr uint16_t location_scope = 0x0015;
3577 tf_country_scope_state, // constexpr uint16_t country_scope_state = 0x0016;
3578 tf_country_scope_pop, // constexpr uint16_t country_scope_pop = 0x0017;
3579 tf_capital_scope, // constexpr uint16_t capital_scope = 0x0018;
3580 tf_this_scope, // constexpr uint16_t this_scope_pop = 0x0019;
3581 tf_this_scope, // constexpr uint16_t this_scope_nation = 0x001A;
3582 tf_this_scope, // constexpr uint16_t this_scope_state = 0x001B;
3583 tf_this_scope, // constexpr uint16_t this_scope_province = 0x001C;
3584 tf_from_scope, // constexpr uint16_t from_scope_pop = 0x001D;
3585 tf_from_scope, // constexpr uint16_t from_scope_nation = 0x001E;
3586 tf_from_scope, // constexpr uint16_t from_scope_state = 0x001F;
3587 tf_from_scope, // constexpr uint16_t from_scope_province = 0x0020;
3588 tf_sea_zone_scope, // constexpr uint16_t sea_zone_scope = 0x0021;
3589 tf_cultural_union_scope, // constexpr uint16_t cultural_union_scope = 0x0022;
3590 tf_overlord_scope, // constexpr uint16_t overlord_scope = 0x0023;
3591 tf_sphere_owner_scope, // constexpr uint16_t sphere_owner_scope = 0x0024;
3592 tf_independence_scope, // constexpr uint16_t independence_scope = 0x0025;
3593 tf_flashpoint_tag_scope, // constexpr uint16_t flashpoint_tag_scope = 0x0026;
3594 tf_crisis_state_scope, // constexpr uint16_t crisis_state_scope = 0x0027;
3595 tf_state_scope_pop, // constexpr uint16_t state_scope_pop = 0x0028;
3596 tf_state_scope_province, // constexpr uint16_t state_scope_province = 0x0029;
3597 tf_tag_scope, // constexpr uint16_t tag_scope = 0x002A; // variable name
3598 tf_integer_scope, // constexpr uint16_t integer_scope = 0x002B; // variable name
3599 tf_country_scope_nation, // constexpr uint16_t country_scope_nation = 0x002C;
3600 tf_country_scope_province, // constexpr uint16_t country_scope_province = 0x002D;
3601 tf_cultural_union_scope_pop, // constexpr uint16_t cultural_union_scope_pop = 0x002E;
3602 tf_capital_scope_province, // constexpr uint16_t capital_scope_province = 0x002F;
3603 tf_capital_scope_pop, //constexpr inline uint16_t capital_scope_pop = first_scope_code + 0x0030;
3604 tf_x_country_scope, //constexpr inline uint16_t x_country_scope = first_scope_code + 0x0031;
3605 tf_x_neighbor_province_scope_state, //constexpr inline uint16_t x_neighbor_province_scope_state = first_scope_code + 0x0032;
3606 tf_x_provinces_in_variable_region_proper, //constexpr inline uint16_t x_provinces_in_variable_region_proper = first_scope_code + 0x0033;
3607 };
3608};
3609
3610
3611std::string CALLTYPE test_trigger_generic(uint16_t const* tval, sys::state& ws) {
3612 return trigger_container::trigger_functions[*tval & trigger::code_mask](tval, ws);
3613}
3614
3615std::string multiplicative_modifier(sys::state& state, dcon::value_modifier_key modifier) {
3616 auto base = state.value_modifiers[modifier];
3617 std::string result;
3618 result += std::to_string(base.factor) + " >r ";
3619
3620 for(uint32_t i = 0; i < base.segments_count; ++i) {
3621 auto seg = state.value_modifier_segments[base.first_segment_offset + i];
3622 if(seg.condition) {
3623 result += test_trigger_generic(state.trigger_data.data() + state.trigger_data_indices[seg.condition.index() + 1], state);
3624 result += "1.0 swap " + std::to_string(seg.factor) + " swap select r> * >r "; // multiply by either 1.0 or the segement factor depending on bool result
3625 }
3626 }
3627 return result;
3628}
3629std::string additive_modifier(sys::state& state, dcon::value_modifier_key modifier) {
3630 auto base = state.value_modifiers[modifier];
3631 std::string result;
3632 result += std::to_string(base.base) + " >r ";
3633
3634 for(uint32_t i = 0; i < base.segments_count; ++i) {
3635 auto seg = state.value_modifier_segments[base.first_segment_offset + i];
3636 if(seg.condition) {
3637 result += test_trigger_generic(state.trigger_data.data() + state.trigger_data_indices[seg.condition.index() + 1], state);
3638 result += "0.0 swap " + std::to_string(seg.factor) + " swap select r> + >r "; // multiply by either 1.0 or the segement factor depending on bool result
3639 }
3640 }
3641 result += "r> " + std::to_string(base.factor) + " * >r ";
3642 return result;
3643}
3644
3645std::string evaluate(sys::state& state, dcon::trigger_key key) {
3646 return test_trigger_generic(state.trigger_data.data() + state.trigger_data_indices[key.index() + 1], state);
3647}
3648
3649#undef CALLTYPE
3650#undef TRIGGER_FUNCTION
3651
3652} // namespace trigger
#define CALLTYPE
#define TRIGGER_FUNCTION(function_name)
constexpr dcon::demographics_key rich_life_needs(13)
constexpr dcon::demographics_key poor_luxury_needs(17)
constexpr dcon::demographics_key middle_life_needs(12)
constexpr dcon::demographics_key rich_militancy(10)
constexpr dcon::demographics_key middle_total(21)
constexpr dcon::demographics_key middle_luxury_needs(18)
constexpr dcon::demographics_key political_reform_desire(6)
constexpr dcon::demographics_key total(0)
constexpr dcon::demographics_key rich_everyday_needs(16)
constexpr dcon::demographics_key poor_militancy(8)
constexpr dcon::demographics_key rich_luxury_needs(19)
constexpr dcon::demographics_key poor_everyday_needs(14)
constexpr dcon::demographics_key middle_militancy(9)
dcon::demographics_key to_key(sys::state const &state, dcon::pop_type_id v)
constexpr uint32_t count_special_keys
constexpr dcon::demographics_key employable(1)
constexpr dcon::demographics_key consciousness(3)
constexpr dcon::demographics_key rich_total(22)
constexpr dcon::demographics_key poor_total(20)
constexpr dcon::demographics_key poor_life_needs(11)
constexpr dcon::demographics_key employed(2)
dcon::demographics_key to_employment_key(sys::state const &state, dcon::pop_type_id v)
constexpr dcon::demographics_key social_reform_desire(7)
constexpr dcon::demographics_key literacy(5)
constexpr dcon::demographics_key middle_everyday_needs(15)
constexpr dcon::demographics_key militancy(4)
int32_t read_int32_t_from_payload(uint16_t const *data)
float read_float_from_payload(uint16_t const *data)
std::string nation_to_union_holder()
std::string culture_to_union_holder()
std::string CALLTYPE test_trigger_generic(uint16_t const *tval, sys::state &ws)
std::string evaluate(sys::state &state, dcon::trigger_key key)
std::string multiplicative_modifier(sys::state &state, dcon::value_modifier_key modifier)
std::string compare_values_eq(uint16_t trigger_code)
std::string additive_modifier(sys::state &state, dcon::value_modifier_key modifier)
std::string compare_values(uint16_t trigger_code)
std::string overlord_from_subject()
std::string demo_culture_key(sys::state &ws)
std::string truth_inversion(uint16_t trigger_code)
Definition: fif.hpp:44
std::string province_to_controller()
std::string tag_to_nation()
std::string nation_to_tag()
std::string province_to_owner()
std::string pop_to_location()
std::string pop_to_owner()
std::string state_to_owner()
constexpr uint32_t slavery_allowed
Definition: culture.hpp:27
constexpr uint32_t pop_build_factory
Definition: culture.hpp:14
constexpr uint32_t count_special_keys
Definition: demographics.hpp:8
constexpr uint16_t code_mask
int32_t get_trigger_scope_payload_size(uint16_t const *data)
constexpr uint16_t is_disjunctive_scope
constexpr uint16_t association_gt
constexpr uint16_t association_le
constexpr uint16_t association_ge
constexpr uint16_t association_mask
constexpr uint16_t association_lt
constexpr uint16_t is_existence_scope
int32_t trigger_scope_data_payload(uint16_t code)
int32_t get_trigger_payload_size(uint16_t const *data)
constexpr uint16_t association_ne
constexpr uint16_t association_eq
uint uint32_t
uchar uint8_t
#define TRIGGER_BYTECODE_LIST
static constexpr sys::state & ws
static constexpr std::string(CALLTYPE *trigger_functions[])(uint16_t const *tval
dcon::data_container world
dcon::national_identity_id tag_id
dcon::stored_trigger_id str_id
dcon::province_id prov_id
dcon::pop_type_id popt_id