tiger_lib/ck3/tables/
effects.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
use std::sync::LazyLock;

use crate::ck3::effect_validation::*;
use crate::ck3::tables::misc::{LEGEND_QUALITY, OUTBREAK_INTENSITIES};
use crate::effect::Effect;
use crate::effect_validation::*;
use crate::everything::Everything;
use crate::helpers::TigerHashMap;
use crate::item::Item;
use crate::scopes::Scopes;
use crate::token::Token;

use Effect::*;

pub fn scope_effect(name: &Token, data: &Everything) -> Option<(Scopes, Effect)> {
    let name_lc = name.as_str().to_ascii_lowercase();

    if let result @ Some(_) = SCOPE_EFFECT_MAP.get(&*name_lc).copied() {
        return result;
    }

    if let Some(x) = name_lc.strip_suffix("_perk_points") {
        if let Some(lifestyle) = x.strip_prefix("add_") {
            data.verify_exists_implied(Item::Lifestyle, lifestyle, name);
            return Some((Scopes::Character, Effect::ScriptValue));
        }
    }
    if let Some(x) = name_lc.strip_suffix("_xp") {
        if let Some(lifestyle) = x.strip_prefix("add_") {
            data.verify_exists_implied(Item::Lifestyle, lifestyle, name);
            return Some((Scopes::Character, Effect::ScriptValue));
        }
    }
    if let Some(relation) = name_lc.strip_prefix("set_relation_") {
        data.verify_exists_implied(Item::Relation, relation, name);
        return Some((Scopes::Character, Vbv(validate_set_relation)));
    }
    if let Some(relation) = name_lc.strip_prefix("remove_relation_") {
        data.verify_exists_implied(Item::Relation, relation, name);
        return Some((Scopes::Character, Effect::Scope(Scopes::Character)));
    }
    std::option::Option::None
}

/// A hashed version of [`SCOPE_EFFECT`], for quick lookup by effect name.
static SCOPE_EFFECT_MAP: LazyLock<TigerHashMap<&'static str, (Scopes, Effect)>> =
    LazyLock::new(|| {
        let mut hash = TigerHashMap::default();
        for (from, s, effect) in SCOPE_EFFECT.iter().copied() {
            hash.insert(s, (from, effect));
        }
        hash
    });

// LAST UPDATED CK3 VERSION 1.14.0.2
// See `effects.log` from the game data dumps
const SCOPE_EFFECT: &[(Scopes, &str, Effect)] = &[
    (Scopes::TravelPlan, "abort_travel_plan", Boolean),
    (Scopes::Character, "accept_activity_invite", Scope(Scopes::Activity)),
    (Scopes::Character, "accept_activity_invite_without_travel", Scope(Scopes::Activity)),
    (
        Scopes::all(),
        "accept_invitation_for_character",
        Removed(
            "1.9",
            "replaced by `accept_activity_invite` or `accept_activity_invite_without_travel`",
        ),
    ),
    (Scopes::Character, "accept_task_contract", Scope(Scopes::TaskContract)),
    (Scopes::Accolade, "activate_accolade", Yes),
    (Scopes::Faith, "activate_holy_site", Item(Item::HolySite)),
    (Scopes::Struggle, "activate_struggle_catalyst", Vbv(validate_activate_struggle_catalyst)),
    (Scopes::Activity, "add_activity_log_entry", Vb(validate_add_activity_log_entry)),
    (Scopes::Scheme, "add_agent_slot", Item(Item::AgentType)),
    (Scopes::Character, "add_amenity_level", ItemValue("type", Item::Amenity)),
    (Scopes::Artifact, "add_artifact_history", Vb(validate_add_artifact_history)),
    (Scopes::Artifact, "add_artifact_modifier", Vv(validate_add_artifact_modifier)),
    (Scopes::Artifact, "add_artifact_title_history", Vb(validate_add_artifact_title_history)),
    (Scopes::War, "add_attacker", Scope(Scopes::Character)),
    (Scopes::Province, "add_building", Item(Item::Building)),
    (
        Scopes::all(),
        "add_building_slot",
        Removed("1.9", "replaced by the `extra_building_slot` modifier"),
    ),
    (Scopes::Character, "add_character_flag", Vbv(validate_add_character_flag)),
    (Scopes::Character, "add_character_modifier", Vbv(validate_add_modifier)),
    (Scopes::TravelPlan, "add_companion", Scope(Scopes::Character)),
    (Scopes::Character, "add_contact", Scope(Scopes::Character)),
    (Scopes::LandedTitle, "add_county_modifier", Vbv(validate_add_modifier)),
    (Scopes::Character, "add_courtier", Scope(Scopes::Character)),
    (
        Scopes::Culture,
        "add_culture_tradition",
        ScopeOrItem(Scopes::CultureTradition, Item::CultureTradition),
    ),
    (Scopes::Character, "add_dead_character_flag", Vb(validate_add_dead_character_flag)),
    (Scopes::War, "add_defender", Scope(Scopes::Character)),
    (Scopes::TravelPlan, "add_destination_progress", Timespan),
    (Scopes::Character, "add_diplomacy_skill", ScriptValue),
    (Scopes::Faith, "add_doctrine", ScopeOrItem(Scopes::Doctrine, Item::Doctrine)),
    (Scopes::Domicile, "add_domicile_building", Item(Item::DomicileBuilding)),
    (Scopes::Character, "add_dread", ScriptValue),
    (Scopes::Artifact, "add_durability", ScriptValue),
    (Scopes::Dynasty, "add_dynasty_modifier", Vbv(validate_add_modifier)),
    (Scopes::Dynasty, "add_dynasty_perk", Item(Item::DynastyPerk)),
    (Scopes::Dynasty, "add_dynasty_prestige", ScriptValue),
    (Scopes::Dynasty, "add_dynasty_prestige_level", ScriptValue),
    (Scopes::Faction, "add_faction_discontent", ScriptValue),
    (Scopes::Character, "add_focus_progress", ScriptValue),
    (Scopes::CasusBelli, "add_from_contribution_attackers", Vb(validate_add_from_contribution)),
    (Scopes::CasusBelli, "add_from_contribution_defenders", Vb(validate_add_from_contribution)),
    (Scopes::Accolade, "add_glory", ScriptValue),
    (Scopes::Character, "add_gold", NonNegativeValue),
    (Scopes::Character, "add_hook", Vb(validate_add_hook)),
    (Scopes::Character, "add_hook_no_toast", Vb(validate_add_hook)),
    (Scopes::DynastyHouse, "add_house_artifact_claim", Scope(Scopes::Artifact)),
    (Scopes::DynastyHouse, "add_house_modifier", Vbv(validate_add_modifier)),
    (Scopes::DynastyHouse, "add_house_unity_modifier", Vbv(validate_add_modifier)),
    (Scopes::Culture, "add_innovation", Item(Item::Innovation)),
    (Scopes::None, "add_internal_flag", Unchecked),
    (Scopes::Character, "add_intrigue_skill", ScriptValue),
    (Scopes::Character, "add_joined_faction_discontent", ScriptValue),
    (Scopes::Character, "add_knows_of_killer", Scope(Scopes::Character)),
    (Scopes::Character, "add_learning_skill", ScriptValue),
    (Scopes::Legend, "add_legend_county_modifier", Vbv(validate_add_modifier)),
    (Scopes::Legend, "add_legend_owner_modifier", Vbv(validate_add_modifier)),
    (Scopes::Legend, "add_legend_province_modifier", Vbv(validate_add_modifier)),
    (Scopes::Province, "add_legend_spread", Scope(Scopes::Legend)),
    (Scopes::Character, "add_legitimacy", ScriptValue),
    (Scopes::Character, "add_long_term_gold", ScriptValue),
    (Scopes::Army, "add_loot", ScriptValue),
    (Scopes::Character, "add_martial_skill", ScriptValue),
    (Scopes::Culture, "add_name_list", Item(Item::NameList)),
    (Scopes::Character, "add_opinion", Vb(validate_add_opinion)),
    (Scopes::Character, "add_perk", Item(Item::Perk)),
    (Scopes::Character, "add_personal_artifact_claim", Scope(Scopes::Artifact)),
    (Scopes::Character, "add_piety", Effect::ScriptValue),
    (Scopes::Character, "add_piety_experience", ScriptValue),
    (Scopes::Character, "add_piety_level", ScriptValue),
    (Scopes::Character, "add_piety_no_experience", ScriptValue),
    (Scopes::Character, "add_pressed_claim", Scope(Scopes::LandedTitle)),
    (Scopes::Character, "add_prestige", Effect::ScriptValue),
    (Scopes::Character, "add_prestige_experience", ScriptValue),
    (Scopes::Character, "add_prestige_level", ScriptValue),
    (Scopes::Character, "add_prestige_no_experience", ScriptValue),
    (Scopes::Province, "add_province_modifier", Vbv(validate_add_modifier)),
    (Scopes::Character, "add_prowess_skill", ScriptValue),
    (
        Scopes::Culture,
        "add_random_innovation",
        Choice(&["culture_group_military", "culture_group_civic", "culture_group_regional", "yes"]),
    ),
    (Scopes::Culture, "add_random_valid_tradition", Scope(Scopes::Character)),
    (Scopes::Culture, "add_random_valid_tradition_replace_if_necessary", Scope(Scopes::Character)),
    (Scopes::Character, "add_realm_law", Item(Item::Law)),
    (Scopes::Character, "add_realm_law_skip_effects", Item(Item::Law)),
    (Scopes::Character, "add_relation_flag", Vb(validate_add_relation_flag)),
    (Scopes::Character, "add_reserved_gold", ScriptValue),
    (Scopes::Scheme, "add_scheme_breach", ScriptValue),
    (Scopes::Character, "add_scheme_cooldown", Vb(validate_scheme_cooldown)),
    (Scopes::Scheme, "add_scheme_modifier", Vb(validate_scheme_modifier)),
    (Scopes::Scheme, "add_scheme_progress", ScriptValue),
    (Scopes::Character, "add_secret", Vb(validate_add_secret)),
    (Scopes::Secret, "add_secret_participant", Scope(Scopes::Character)),
    (Scopes::Character, "add_short_term_gold", ScriptValue),
    (Scopes::Province, "add_special_building", Item(Item::SpecialBuilding)),
    (Scopes::Province, "add_special_building_slot", Item(Item::SpecialBuilding)),
    (Scopes::Character, "add_stewardship_skill", ScriptValue),
    (Scopes::Character, "add_stress", ScriptValue),
    (Scopes::Army, "add_supply", NonNegativeValue),
    (Scopes::Character, "add_targeting_factions_discontent", ScriptValue),
    (Scopes::LandedTitle, "add_title_law", Item(Item::Law)),
    (Scopes::LandedTitle, "add_title_law_effects", Item(Item::Law)),
    (Scopes::Character, "add_to_activity", Scope(Scopes::Activity)),
    (Scopes::Character, "add_to_activity_without_travel", Scope(Scopes::Activity)),
    (Scopes::Character, "add_to_agent_slot", Scope(Scopes::AgentSlot)),
    // TODO: figure out the name = parameter for this
    (
        Scopes::Activity,
        "add_to_current_phase_guest_subset",
        Vb(validate_current_phase_guest_subset),
    ),
    (Scopes::None, "add_to_global_variable_list", Vb(validate_add_to_variable_list)),
    // TODO: figure out the parameters for this
    (Scopes::Activity, "add_to_guest_subset", Vb(validate_guest_subset)),
    (Scopes::all(), "add_to_list", Vbv(validate_add_to_list_ck3)),
    (Scopes::None, "add_to_local_variable_list", Vb(validate_add_to_variable_list)),
    (Scopes::all(), "add_to_scheme", Removed("1.13", "replaced with add_to_agent_slot")),
    (Scopes::all(), "add_to_temporary_list", Vbv(validate_add_to_list_ck3)),
    (Scopes::None, "add_to_variable_list", Vb(validate_add_to_variable_list)),
    (Scopes::Character, "add_trait", ScopeOrItem(Scopes::Trait, Item::Trait)),
    (Scopes::Character, "add_trait_force_tooltip", ScopeOrItem(Scopes::Trait, Item::Trait)),
    (Scopes::Character, "add_trait_xp", Vb(validate_add_trait_xp)),
    (Scopes::Character, "add_travel_option", Item(Item::TravelOption)),
    (Scopes::TravelPlan, "add_travel_plan_modifier", Vbv(validate_add_modifier)),
    (Scopes::Province, "add_travel_point_of_interest", Item(Item::PointOfInterest)),
    (Scopes::TravelPlan, "add_travel_waypoint", Scope(Scopes::Province)),
    (Scopes::Character, "add_truce_both_ways", Vb(validate_add_truce)),
    (Scopes::Character, "add_truce_one_way", Vb(validate_add_truce)),
    (Scopes::Character, "add_tyranny", ScriptValue),
    (Scopes::DynastyHouse, "add_unity_value", Vb(validate_add_unity)),
    (Scopes::Character, "add_unpressed_claim", Scope(Scopes::LandedTitle)),
    (Scopes::Character, "add_visiting_courtier", Scope(Scopes::Character)),
    (Scopes::Character, "add_war_chest_gold", ScriptValue),
    (Scopes::Character, "adopt", Scope(Scopes::Character)),
    (
        Scopes::Character,
        "ai_attempt_to_host_activity",
        ScopeOrItem(Scopes::ActivityType, Item::ActivityType),
    ),
    (Scopes::Character, "ai_start_best_war", Vb(validate_start_best_war)),
    (Scopes::Character, "allow_alliance", Scope(Scopes::Character)),
    (Scopes::Character, "allow_in_scheme", Scope(Scopes::Scheme)),
    (Scopes::Character, "apply_ai_vassal_obligation_liege_most_desired", Yes),
    (Scopes::Character, "apply_ai_vassal_obligation_vassal_most_desired", Yes),
    (
        Scopes::Character,
        "appoint_court_position",
        ItemTarget("court_position", Item::CourtPosition, "recipient", Scopes::Character),
    ),
    (Scopes::None, "assert_if", Unchecked),
    (Scopes::Army, "assign_commander", Scope(Scopes::Character)),
    (Scopes::Character, "assign_council_task", Vb(validate_assign_council_task)),
    (Scopes::Character, "assign_councillor_type", Vb(validate_assign_councillor_type)),
    (Scopes::Character, "banish", Yes),
    (Scopes::CombatSide, "battle_event", Vb(validate_battle_event)),
    (Scopes::Character, "becomes_independent", Target("change", Scopes::TitleAndVassalChange)),
    (Scopes::Province, "begin_create_holding", Vbv(validate_begin_create_holding)),
    (Scopes::Character, "break_alliance", Scope(Scopes::Character)),
    (Scopes::Character, "break_betrothal", Scope(Scopes::Character)),
    (Scopes::TravelPlan, "cancel_travel_plan", Boolean),
    (Scopes::Character, "cancel_truce_both_ways", Scope(Scopes::Character)),
    (Scopes::Character, "cancel_truce_one_way", Scope(Scopes::Character)),
    (Scopes::Character, "change_age", ScriptValue),
    (
        Scopes::LandedTitle,
        "change_appointment_investment",
        Vb(validate_change_appointment_investment),
    ),
    (Scopes::LandedTitle, "change_county_control", ScriptValue),
    (Scopes::Culture, "change_cultural_acceptance", Vb(validate_change_cultural_acceptance)),
    (Scopes::Character, "change_current_court_grandeur", ScriptValue),
    (Scopes::Character, "change_current_weight", ScriptValue),
    (
        Scopes::LandedTitle,
        "change_de_jure_drift_progress",
        TargetValue("target", Scopes::LandedTitle, "value"),
    ),
    (Scopes::LandedTitle, "change_development_level", ScriptValue),
    (Scopes::LandedTitle, "change_development_progress", ScriptValue),
    (Scopes::LandedTitle, "change_development_progress_with_overflow", ScriptValue),
    (Scopes::Character, "change_diarchy_swing", ScriptValue),
    (Scopes::Faith, "change_fervor", ScriptValue),
    (Scopes::Character, "change_first_name", Vbv(validate_change_first_name)),
    (Scopes::None, "change_global_variable", Vb(validate_change_variable)),
    (Scopes::Character, "change_government", Item(Item::GovernmentType)),
    (Scopes::Character, "change_influence", ScriptValue),
    (Scopes::Character, "change_influence_experience", ScriptValue),
    (Scopes::Character, "change_influence_level", ScriptValue),
    (Scopes::Character, "change_influence_no_experience", ScriptValue),
    (Scopes::Inspiration, "change_inspiration_progress", Integer),
    (Scopes::Character, "change_liege", Vb(validate_change_liege)),
    (Scopes::None, "change_local_variable", Vb(validate_change_variable)),
    (Scopes::Regiment, "change_maa_regiment_size", Vbv(validate_change_maa_regiment_size)),
    (Scopes::Regiment, "change_maa_troops_count", ScriptValue),
    (Scopes::Scheme, "change_opportunities", ScriptValue),
    (Scopes::Character, "change_prison_type", Item(Item::PrisonType)),
    (Scopes::Domicile, "change_provisions", ScriptValue),
    (Scopes::Character, "change_strife_opinion", ScriptValue),
    (Scopes::Struggle, "change_struggle_phase", Vbv(validate_change_struggle_phase)),
    (
        Scopes::Struggle,
        "change_struggle_phase_duration",
        Vb(validate_change_struggle_phase_duration),
    ),
    (Scopes::Character, "change_target_weight", ScriptValue),
    (Scopes::LandedTitle, "change_title_holder", Vb(validate_change_title_holder)),
    (Scopes::LandedTitle, "change_title_holder_include_vassals", Vb(validate_change_title_holder)),
    (Scopes::Character, "change_trait_rank", Vb(validate_change_trait_rank)),
    (Scopes::None, "change_variable", Vb(validate_change_variable)),
    (Scopes::GreatHolyWar, "change_war_chest_gold", ScriptValue),
    (Scopes::GreatHolyWar, "change_war_chest_piety", ScriptValue),
    (Scopes::GreatHolyWar, "change_war_chest_prestige", ScriptValue),
    (Scopes::None, "clamp_global_variable", Vb(validate_clamp_variable)),
    (Scopes::None, "clamp_local_variable", Vb(validate_clamp_variable)),
    (Scopes::None, "clamp_variable", Vb(validate_clamp_variable)),
    (Scopes::Artifact, "clear_artifact_modifiers", Yes),
    (Scopes::War, "clear_claimant", Yes),
    (Scopes::Culture, "clear_culture_traditions", Yes),
    (Scopes::Character, "clear_designated_heir", Yes),
    (Scopes::Character, "clear_forced_vote", Yes),
    (Scopes::None, "clear_global_variable_list", Unchecked),
    (Scopes::Legend, "clear_legend_chapter", Item(Item::LegendChapter)),
    (Scopes::None, "clear_local_variable_list", Unchecked),
    (Scopes::None, "clear_saved_scope", Unchecked),
    (Scopes::Army, "clear_supply", Yes),
    (Scopes::LandedTitle, "clear_title_laws", Yes),
    (Scopes::LandedTitle, "clear_title_laws_effects", Yes),
    (Scopes::Character, "clear_traits", Yes),
    (Scopes::None, "clear_variable_list", Unchecked),
    (Scopes::None, "close_all_views", Yes),
    (Scopes::None, "close_view", Vbv(validate_close_view)),
    (Scopes::Activity, "complete_activity", Removed("1.9", "")),
    (Scopes::Character, "complete_activity_intent", Boolean),
    (Scopes::TaskContract, "complete_task_contract", Item(Item::TaskContractReward)),
    (Scopes::TravelPlan, "complete_travel_plan", Boolean),
    (Scopes::Domicile, "construct_domicile_building", Item(Item::DomicileBuilding)),
    (Scopes::Character, "consume_banish_reasons", Scope(Scopes::Character)),
    (Scopes::Character, "consume_divorce_reasons", Scope(Scopes::Character)),
    (Scopes::Character, "consume_execute_reasons", Scope(Scopes::Character)),
    (Scopes::Character, "consume_imprisonment_reasons", Scope(Scopes::Character)),
    (Scopes::Character, "consume_revoke_title_reason", Scope(Scopes::Character)),
    (Scopes::Culture, "copy_all_traditions_from", Scope(Scopes::Culture)),
    (Scopes::Artifact, "copy_artifact_modifiers", Scope(Scopes::Artifact)),
    (Scopes::Character, "copy_inheritable_appearance_from", Scope(Scopes::Character)),
    (Scopes::Character, "copy_localized_text", Vb(validate_copy_localized_text)),
    (Scopes::LandedTitle, "copy_title_history", Scope(Scopes::LandedTitle)),
    (Scopes::Character, "copy_traits", Scope(Scopes::Character)),
    (Scopes::None, "create_accolade", Vb(validate_create_accolade)),
    (Scopes::None, "create_adventurer_title", Vb(validate_create_adventurer_title)),
    (Scopes::Character, "create_alliance", Vbv(validate_create_alliance)),
    (Scopes::Character, "create_artifact", Vb(validate_create_artifact)),
    (Scopes::Character, "create_betrothal", Scope(Scopes::Character)),
    (Scopes::Character, "create_betrothal_matrilineal", Scope(Scopes::Character)),
    (Scopes::Character, "create_cadet_branch", Yes),
    (Scopes::None, "create_character", Vb(validate_create_character)),
    (Scopes::Character, "create_character_memory", Vb(validate_create_character_memory)),
    (Scopes::Character, "create_divergent_culture", Yes),
    (Scopes::Character, "create_divergent_culture_with_side_effects", Yes),
    (Scopes::Character, "create_divergent_culture_with_side_effects_excluding_cost", Yes),
    (Scopes::None, "create_dynamic_title", Vb(validate_create_dynamic_title)),
    (Scopes::Province, "create_epidemic_outbreak", Vb(validate_create_epidemic_outbreak)),
    (
        Scopes::Character,
        "create_faction",
        ItemTarget("type", Item::Faction, "target", Scopes::Character),
    ),
    (Scopes::None, "create_holy_order", Vb(validate_create_holy_order)),
    (Scopes::Character, "create_hybrid_culture", Scope(Scopes::Culture)),
    (Scopes::Character, "create_hybrid_culture_with_side_effects", Scope(Scopes::Culture)),
    (Scopes::Character, "create_inspiration", Vbv(validate_create_inspiration)),
    (Scopes::Character, "create_legend", Vb(validate_create_legend)),
    (Scopes::Character, "create_legend_seed", Vb(validate_create_legend)),
    (Scopes::Character, "create_maa_regiment", Vb(validate_create_maa_regiment)),
    (Scopes::Character, "create_story", Vbv(validate_create_story)),
    (Scopes::Character, "create_task_contract", Vb(validate_create_task_contract)),
    (Scopes::None, "create_title_and_vassal_change", Vb(validate_create_title_and_vassal_change)),
    (Scopes::None, "custom_description", Control),
    (Scopes::None, "custom_description_no_bullet", Control),
    (Scopes::None, "custom_label", ControlOrLabel),
    (Scopes::None, "custom_tooltip", ControlOrLabel),
    (Scopes::Accolade, "deactivate_accolade", Yes),
    (Scopes::Faith, "deactivate_holy_site", Item(Item::HolySite)),
    (Scopes::Character, "death", Vbv(validate_death)),
    (Scopes::None, "debug_log", Unchecked),
    (Scopes::None, "debug_log_date", Yes),
    (Scopes::None, "debug_log_scopes", Boolean),
    (Scopes::None, "debug_trigger_event", Item(Item::Event)),
    (Scopes::Character, "decline_activity_invite", Scope(Scopes::Activity)),
    (
        Scopes::all(),
        "decline_invitation_for_character",
        Removed("1.9", "replaced by `decline_activity_invite`"),
    ),
    (Scopes::Character, "decline_invitation_for_character", Scope(Scopes::Activity)),
    (Scopes::TravelPlan, "delay_travel_plan", Vb(validate_delay_travel_plan)),
    (Scopes::Army, "deplete_army_by_percentage", ScriptValue),
    (Scopes::Character, "depose", Yes),
    (Scopes::Character, "depose_diarch", Boolean),
    (Scopes::Character, "designate_diarch", Scope(Scopes::Character)),
    (Scopes::None, "destroy_artifact", ScopeOkThis(Scopes::Artifact)),
    (Scopes::None, "destroy_character_memory", Scope(Scopes::CharacterMemory)),
    (Scopes::Faction, "destroy_faction", Yes),
    (Scopes::None, "destroy_inspiration", Scope(Scopes::Inspiration)),
    (Scopes::Regiment, "destroy_maa_regiment", Boolean),
    (Scopes::Character, "destroy_owned_artifact", Scope(Scopes::Artifact)),
    (Scopes::Character, "destroy_title", Scope(Scopes::LandedTitle)),
    (Scopes::Secret, "disable_exposure_by", Scope(Scopes::Character)),
    (Scopes::GreatHolyWar, "divide_war_chest", Vb(validate_divide_war_chest)),
    (Scopes::Character, "divorce", Scope(Scopes::Character)),
    (Scopes::GreatHolyWar, "do_ghw_title_handout", Scope(Scopes::TitleAndVassalChange)),
    (Scopes::Character, "duel", Vb(validate_duel)),
    (Scopes::None, "else", Control),
    (Scopes::None, "else_if", Control),
    (Scopes::Character, "end_diarchy", Boolean),
    (Scopes::Character, "end_inspiration_sponsorship", Scope(Scopes::Inspiration)),
    (Scopes::Character, "end_pregnancy", Yes),
    (Scopes::Scheme, "end_scheme", Yes),
    (Scopes::StoryCycle, "end_story", Yes),
    (Scopes::Struggle, "end_struggle", Vv(validate_end_struggle)),
    // "invalidated" is undocumented
    (Scopes::War, "end_war", Choice(&["attacker", "defender", "white_peace", "invalidated"])),
    (Scopes::Artifact, "equip_artifact_to_owner", Yes),
    (Scopes::Artifact, "equip_artifact_to_owner_replace", Yes),
    (Scopes::None, "error_log", Unchecked),
    (Scopes::Character, "execute_decision", Item(Item::Decision)),
    (Scopes::Scheme, "expose_scheme", Yes),
    (Scopes::Scheme, "expose_scheme_agent", Scope(Scopes::Character)),
    (Scopes::Secret, "expose_secret", Scope(Scopes::Character)),
    (Scopes::Faction, "faction_remove_war", Yes),
    (Scopes::Faction, "faction_start_war", Vb(validate_faction_start_war)),
    (Scopes::Character, "finish_council_task", Yes),
    (Scopes::Character, "fire_councillor", Scope(Scopes::Character)),
    (Scopes::Character, "fire_tax_collector", Scope(Scopes::Character)),
    (Scopes::Character, "forbid_from_scheme", Scope(Scopes::Scheme)),
    (
        Scopes::all(),
        "force_add_to_scheme",
        Removed("1.13", "replaced with force_add_to_agent_slot"),
    ),
    (Scopes::Character, "force_add_to_agent_slot", Vb(validate_force_add_to_agent_slot)),
    (Scopes::Character, "force_character_skill_recalculation", Yes),
    (Scopes::Character, "force_step_down_landed_titles", Yes),
    (Scopes::Character, "force_vote_as", Vb(validate_force_vote_as)),
    (Scopes::Province, "generate_building", Yes),
    (
        Scopes::LandedTitle.union(Scopes::Dynasty).union(Scopes::DynastyHouse),
        "generate_coa",
        Vv(validate_generate_coa),
    ),
    (Scopes::Culture, "get_all_innovations_from", Scope(Scopes::Culture)),
    (Scopes::Culture, "get_random_innovation_from", Scope(Scopes::Culture)),
    (Scopes::Character, "get_title", Scope(Scopes::LandedTitle)),
    (Scopes::Character, "give_nickname", Item(Item::Nickname)),
    (Scopes::Character, "give_noble_family_title", Vb(validate_give_noble_family_title)),
    (Scopes::None, "hidden_effect", Control),
    (
        Scopes::None,
        "hidden_effect_new_artifact",
        Removed("1.9", "replaced by `hidden_effect_new_object`"),
    ),
    (Scopes::None, "hidden_effect_new_object", Control),
    (Scopes::None, "if", Control),
    (Scopes::Character, "imprison", Vb(validate_imprison)),
    (Scopes::Character, "infect_with_epidemic", Scope(Scopes::Epidemic)),
    (Scopes::None, "invalidate_activity", Scope(Scopes::Activity)),
    (Scopes::TaskContract, "invalidate_contract", Boolean),
    (Scopes::Character, "invalidate_diarch_if_needed", Boolean),
    (Scopes::Inspiration, "invest_gold", NonNegativeValue),
    (
        Scopes::all(),
        "invite_character_to_activity",
        Removed("1.9", "replaced by `invite_to_activity` which works the other way around"),
    ),
    (Scopes::Character, "invite_to_activity", Scope(Scopes::Activity)),
    (Scopes::Culture, "join_era", Item(Item::CultureEra)),
    (Scopes::Character, "join_faction", Scope(Scopes::Faction)),
    (Scopes::Character, "join_faction_forced", Vb(validate_join_faction_forced)),
    (Scopes::Character, "join_faction_skip_check", Scope(Scopes::Faction)),
    (Scopes::Character, "learn_court_language_of", ScopeOkThis(Scopes::Character)),
    (Scopes::Character, "learn_language", Item(Item::Language)),
    (Scopes::Character, "learn_language_of_culture", Scope(Scopes::Culture)),
    (Scopes::LandedTitle, "lease_out_to", Scope(Scopes::HolyOrder)),
    (Scopes::Culture, "leave_era", Item(Item::CultureEra)),
    (Scopes::Character, "leave_faction", Scope(Scopes::Faction)),
    (Scopes::all(), "lose_combat", Removed("1.9", "")),
    (Scopes::Domicile, "lower_domicile_building", Item(Item::DomicileBuilding)),
    (Scopes::Domicile, "lower_domicile_building_no_refund", Item(Item::DomicileBuilding)),
    (Scopes::Character, "make_claim_strong", Scope(Scopes::LandedTitle)),
    (Scopes::Character, "make_claim_weak", Scope(Scopes::LandedTitle)),
    (Scopes::Character, "make_concubine", Scope(Scopes::Character)),
    (Scopes::Character, "make_pregnant", Vb(validate_make_pregnant)),
    (Scopes::Character, "make_pregnant_no_checks", Vb(validate_make_pregnant)),
    (Scopes::StoryCycle, "make_story_owner", Scope(Scopes::Character)),
    (Scopes::Character, "make_trait_active", ScopeOrItem(Scopes::Trait, Item::Trait)),
    (Scopes::Character, "make_trait_active_force_tooltip", ScopeOrItem(Scopes::Trait, Item::Trait)),
    (Scopes::Character, "make_trait_inactive", ScopeOrItem(Scopes::Trait, Item::Trait)),
    (
        Scopes::Character,
        "make_trait_inactive_force_tooltip",
        ScopeOrItem(Scopes::Trait, Item::Trait),
    ),
    (Scopes::Character, "make_unprunable", Yes),
    (Scopes::Character, "marry", Scope(Scopes::Character)),
    (Scopes::Character, "marry_matrilineal", Scope(Scopes::Character)),
    (Scopes::all(), "move_activity", Removed("1.9", "")),
    (Scopes::Character, "move_budget_gold", Vb(validate_move_budget_gold)),
    (Scopes::Domicile, "move_domicile", Scope(Scopes::Province)),
    (Scopes::Character, "move_to_pool", Yes),
    (Scopes::Character, "move_to_pool_at", Scope(Scopes::Province)),
    // multiply_focus_progress -- no idea of syntax or effect
    (Scopes::Character, "open_appoint_court_position_window", Item(Item::CourtPosition)),
    (Scopes::None, "open_interaction_window", Vb(validate_open_interaction_window)),
    (Scopes::None, "open_view", Vbv(validate_open_view)),
    (Scopes::all_but_none(), "open_view_data", Vbv(validate_open_view)),
    (Scopes::None, "pan_camera_to_province", Scope(Scopes::Province)),
    (Scopes::None, "pan_camera_to_title", Scope(Scopes::LandedTitle)),
    (Scopes::TravelPlan, "pause_travel_plan", Boolean),
    (Scopes::TravelPlan, "pause_travel_plan_mp", Boolean),
    (Scopes::Character, "pay_long_term_gold", Vb(validate_pay_gold)),
    (Scopes::Character, "pay_long_term_income", Vb(validate_pay_income)),
    (Scopes::Character, "pay_reserved_gold", Vb(validate_pay_gold)),
    (Scopes::Character, "pay_reserved_income", Vb(validate_pay_income)),
    (Scopes::Character, "pay_short_term_gold", Vb(validate_pay_gold)),
    (Scopes::Character, "pay_short_term_income", Vb(validate_pay_income)),
    (Scopes::Character, "pay_war_chest_gold", Vb(validate_pay_gold)),
    (Scopes::Character, "pay_war_chest_income", Vb(validate_pay_income)),
    (Scopes::Character, "play_music_cue", Item(Item::Music)),
    (Scopes::Character, "play_sound_effect", Item(Item::Sound)),
    (Scopes::GreatHolyWar, "pledge_attacker", Scope(Scopes::Character)),
    (Scopes::GreatHolyWar, "pledge_defender", Scope(Scopes::Character)),
    (Scopes::Character, "populate_task_contracts_for_area", Vb(validate_contracts_for_area)),
    (Scopes::Activity, "progress_activity_phase_after", Timespan),
    (Scopes::None, "random", Control),
    (Scopes::None, "random_list", Vb(validate_random_list)),
    (Scopes::None, "random_log_scopes", Boolean),
    (Scopes::all(), "recruit_courtier", Removed("1.9.1", "replaced by `add_courtier`")),
    (Scopes::Province, "refill_garrison", Yes),
    (Scopes::Province, "refill_levy", Yes),
    (Scopes::Army, "refill_supply", Yes),
    (Scopes::Artifact, "reforge_artifact", Vb(validate_create_artifact)),
    (Scopes::Character, "refund_all_perks", Yes),
    (Scopes::Character, "refund_perks", Item(Item::Lifestyle)),
    (Scopes::Character, "release_from_prison", Yes),
    (Scopes::Accolade, "remove_acclaimed_knight", Yes),
    (Scopes::Scheme, "remove_agent_slot", Scope(Scopes::AgentSlot)),
    (Scopes::Character, "remove_all_character_modifier_instances", Item(Item::Modifier)),
    (Scopes::LandedTitle, "remove_all_county_modifier_instances", Item(Item::Modifier)),
    (Scopes::Dynasty, "remove_all_dynasty_modifier_instances", Item(Item::Modifier)),
    (Scopes::DynastyHouse, "remove_all_house_modifier_instances", Item(Item::Modifier)),
    (Scopes::DynastyHouse, "remove_all_house_unity_modifier_instances", Item(Item::Modifier)),
    (Scopes::Legend, "remove_all_legend_county_modifier_instances", Item(Item::Modifier)),
    (Scopes::Legend, "remove_all_legend_owner_modifier_instances", Item(Item::Modifier)),
    (Scopes::Legend, "remove_all_legend_province_modifier_instances", Item(Item::Modifier)),
    (Scopes::Province, "remove_all_province_modifier_instances", Item(Item::Modifier)),
    (Scopes::TravelPlan, "remove_all_travel_plan_modifier_instances", Item(Item::Modifier)),
    (Scopes::Artifact, "remove_artifact_feature_group", Item(Item::ArtifactFeatureGroup)),
    (Scopes::Artifact, "remove_artifact_modifier", Item(Item::Modifier)),
    (Scopes::Province, "remove_building", Item(Item::Building)),
    (Scopes::TravelPlan, "remove_character", Scope(Scopes::Character)),
    (Scopes::Character, "remove_character_flag", Unchecked),
    (Scopes::Character, "remove_character_modifier", Item(Item::Modifier)),
    (Scopes::Character, "remove_character_secret_faith", Yes),
    (Scopes::Character, "remove_claim", Scope(Scopes::LandedTitle)),
    (Scopes::Army, "remove_commanded", Yes),
    (Scopes::Character, "remove_concubine", Scope(Scopes::Character)),
    (Scopes::LandedTitle, "remove_county_modifier", Item(Item::Modifier)),
    (Scopes::Character, "remove_courtier_or_guest", Vbv(validate_remove_courtier_or_guest)),
    (
        Scopes::Culture,
        "remove_culture_tradition",
        ScopeOrItem(Scopes::CultureTradition, Item::CultureTradition),
    ),
    (Scopes::Character, "remove_dead_character_variable", Unchecked),
    (Scopes::Character, "remove_decision_cooldown", Item(Item::Decision)),
    (Scopes::Faith, "remove_doctrine", ScopeOrItem(Scopes::Doctrine, Item::Doctrine)),
    (Scopes::Domicile, "remove_domicile_building", Item(Item::DomicileBuilding)),
    (Scopes::Domicile, "remove_domicile_building_no_refund", Item(Item::DomicileBuilding)),
    (Scopes::Dynasty, "remove_dynasty_modifier", Item(Item::Modifier)),
    (Scopes::Dynasty, "remove_dynasty_perk", Item(Item::DynastyPerk)),
    (Scopes::Character, "remove_from_activity", Scope(Scopes::Activity)),
    (
        Scopes::Activity,
        "remove_from_current_phase_guest_subset",
        Vb(validate_current_phase_guest_subset),
    ),
    (Scopes::Activity, "remove_from_guest_subset", Vb(validate_guest_subset)),
    (Scopes::all_but_none(), "remove_from_list", Vv(validate_remove_from_list)),
    (Scopes::None, "remove_global_variable", Unchecked),
    (Scopes::Province, "remove_holding", Yes),
    (Scopes::Character, "remove_hook", ItemTarget("type", Item::Hook, "target", Scopes::Character)),
    (Scopes::DynastyHouse, "remove_house_artifact_claim", Scope(Scopes::Artifact)),
    (Scopes::DynastyHouse, "remove_house_modifier", Item(Item::Modifier)),
    (Scopes::DynastyHouse, "remove_house_unity_modifier", Item(Item::Modifier)),
    (Scopes::LandedTitle, "remove_important_location", Yes),
    (Scopes::Culture, "remove_innovation", Item(Item::Innovation)),
    (Scopes::Character, "remove_interaction_cooldown", Item(Item::CharacterInteraction)),
    (
        Scopes::Character,
        "remove_interaction_cooldown_against",
        ItemTarget("interaction", Item::CharacterInteraction, "target", Scopes::Character),
    ),
    (Scopes::Legend, "remove_legend_county_modifier", Item(Item::Modifier)),
    (Scopes::Legend, "remove_legend_owner_modifier", Item(Item::Modifier)),
    (Scopes::Legend, "remove_legend_province_modifier", Item(Item::Modifier)),
    (Scopes::Province, "remove_legend_spread", Scope(Scopes::Legend)),
    (Scopes::None, "remove_list_global_variable", Vb(validate_add_to_variable_list)),
    (Scopes::None, "remove_list_local_variable", Vb(validate_add_to_variable_list)),
    (Scopes::None, "remove_list_variable", Vb(validate_add_to_variable_list)),
    (Scopes::None, "remove_local_variable", Unchecked),
    (Scopes::Character, "remove_localized_text", Unchecked),
    (Scopes::Character, "remove_long_term_gold", NonNegativeValue),
    (Scopes::Character, "remove_nickname", Boolean),
    (Scopes::Character, "remove_opinion", Vb(validate_remove_opinion)),
    (Scopes::War, "remove_participant", Scope(Scopes::Character)),
    (Scopes::Character, "remove_perk", Item(Item::Perk)),
    (Scopes::Character, "remove_personal_artifact_claim", Scope(Scopes::Artifact)),
    (Scopes::Province, "remove_province_modifier", Item(Item::Modifier)),
    (Scopes::Culture, "remove_random_culture_tradition", Yes),
    (Scopes::Character, "remove_realm_law", Item(Item::Law)),
    (Scopes::Character, "remove_relation_flag", Vb(validate_add_relation_flag)),
    (Scopes::Faith, "remove_religious_head_title", Yes),
    (Scopes::Character, "remove_reserved_gold", NonNegativeValue),
    (
        Scopes::Character,
        "remove_scheme_cooldown_against",
        ItemTarget("scheme", Item::Scheme, "target", Scopes::Character),
    ),
    (Scopes::Scheme, "remove_scheme_modifier", Item(Item::Modifier)),
    (Scopes::Secret, "remove_secret", Yes),
    (Scopes::Character, "remove_short_term_gold", NonNegativeValue),
    (Scopes::Faction, "remove_special_character", Yes),
    (Scopes::Faction, "remove_special_title", Yes),
    (Scopes::LandedTitle, "remove_title_from_important_location", Scope(Scopes::LandedTitle)),
    // docs say these next two are scope None, but that does not make sense.
    (Scopes::LandedTitle, "remove_title_law", Item(Item::Law)),
    (Scopes::LandedTitle, "remove_title_law_effects", Item(Item::Law)),
    (Scopes::Character, "remove_trait", ScopeOrItem(Scopes::Trait, Item::Trait)),
    (Scopes::Character, "remove_trait_force_tooltip", ScopeOrItem(Scopes::Trait, Item::Trait)),
    (Scopes::TravelPlan, "remove_travel_option", Item(Item::TravelOption)),
    (Scopes::TravelPlan, "remove_travel_plan_modifier", Item(Item::Modifier)),
    (Scopes::Province, "remove_travel_point_of_interest", Item(Item::PointOfInterest)),
    (Scopes::None, "remove_variable", Unchecked),
    (Scopes::Character, "remove_war_chest_gold", NonNegativeValue),
    (Scopes::Character, "replace_court_position", Vb(validate_replace_court_position)),
    (Scopes::TravelPlan, "reroute_to_home", Boolean),
    (Scopes::Character, "reset_beneficiary", Yes),
    (Scopes::LandedTitle.union(Scopes::Dynasty).union(Scopes::DynastyHouse), "reset_coa", Yes),
    (Scopes::Culture, "reset_culture_creation_date", Yes),
    (Scopes::GreatHolyWar, "reset_designated_winner", Yes),
    (Scopes::Scheme, "reset_scheme_progress", Yes),
    (Scopes::LandedTitle, "reset_title_name", Yes),
    (Scopes::LandedTitle, "reset_title_prefix", Yes),
    (Scopes::None, "resolve_title_and_vassal_change", Scope(Scopes::TitleAndVassalChange)),
    (Scopes::TravelPlan, "resume_travel_plan", Boolean),
    (Scopes::TravelPlan, "resume_travel_plan_mp", Boolean),
    (Scopes::Character, "return_hostage", Yes),
    (Scopes::Character, "return_to_court", Yes),
    (Scopes::Secret, "reveal_to", Scope(Scopes::Character)),
    (Scopes::Character, "reverse_add_opinion", Vb(validate_add_opinion)),
    (Scopes::Character, "revoke_court_position", Vb(validate_revoke_court_position)),
    (Scopes::LandedTitle, "revoke_lease", Yes),
    (Scopes::None, "round_global_variable", Vb(validate_round_variable)),
    (Scopes::None, "round_local_variable", Vb(validate_round_variable)),
    (Scopes::None, "round_variable", Vb(validate_round_variable)),
    (Scopes::None, "run_interaction", Vb(validate_open_interaction_window)),
    (Scopes::Character, "save_opinion_value_as", Vb(validate_save_opinion_value)),
    (Scopes::all_but_none(), "save_scope_as", Vv(validate_save_scope)),
    (Scopes::None, "save_scope_value_as", Vb(validate_save_scope_value)),
    (Scopes::Character, "save_temporary_opinion_value_as", Vb(validate_save_opinion_value)),
    (Scopes::all_but_none(), "save_temporary_scope_as", Vv(validate_save_scope)),
    (Scopes::None, "save_temporary_scope_value_as", Vb(validate_save_scope_value)),
    (Scopes::all(), "scheme_freeze_days", Removed("1.9", "replaced by `scheme_freeze`")),
    (Scopes::Scheme, "scheme_freeze", Vb(validate_scheme_freeze)),
    (Scopes::Scheme, "scheme_unfreeze", Yes),
    (Scopes::Character, "send_interface_message", Control),
    (Scopes::Character, "send_interface_popup", Control),
    (Scopes::Character, "send_interface_toast", Control),
    (Scopes::None, "send_long_tutorial_finished_telemetry", Yes),
    (Scopes::None, "send_long_tutorial_started_telemetry", Yes),
    (Scopes::None, "send_short_tutorial_finished_telemetry", Yes),
    (Scopes::None, "send_short_tutorial_started_telemetry", Yes),
    (Scopes::Character, "set_absolute_country_control", Boolean),
    (Scopes::Activity, "set_activity_host", Scope(Scopes::Character)),
    (Scopes::Character, "set_age", ScriptValue),
    (Scopes::LandedTitle, "set_always_follows_primary_heir", Yes),
    (Scopes::Character, "set_amenity_level", ItemValue("type", Item::Amenity)),
    (Scopes::Army, "set_army_location", Scope(Scopes::Province)),
    (Scopes::Artifact, "set_artifact_description", Desc),
    (Scopes::Artifact, "set_artifact_feature", Item(Item::ArtifactFeature)),
    (Scopes::Artifact, "set_artifact_feature_group", Item(Item::ArtifactFeatureGroup)),
    (Scopes::Artifact, "set_artifact_name", Desc),
    (Scopes::Artifact, "set_artifact_rarity", Item(Item::ArtifactRarity)),
    (Scopes::Character, "set_beneficiary", Scope(Scopes::Character)),
    (Scopes::War, "set_called_to", Scope(Scopes::Character)),
    (Scopes::LandedTitle, "set_can_be_named_after_dynasty", Boolean),
    (Scopes::LandedTitle, "set_capital_barony", Yes),
    (Scopes::LandedTitle, "set_capital_county", Scope(Scopes::LandedTitle)),
    (Scopes::War, "set_casus_belli", Item(Item::CasusBelli)),
    (Scopes::Character, "set_character_faith", Scope(Scopes::Faith)),
    (Scopes::Character, "set_character_faith_history", Scope(Scopes::Faith)),
    (Scopes::Character, "set_character_faith_with_conversion", Scope(Scopes::Faith)),
    (Scopes::Character, "set_character_secret_faith", Scope(Scopes::Faith)),
    (Scopes::Character, "set_child_of_concubine_on_pregnancy", Boolean),
    (
        Scopes::LandedTitle.union(Scopes::Dynasty).union(Scopes::DynastyHouse),
        "set_coa",
        Vv(validate_set_coa),
    ),
    (Scopes::LandedTitle, "set_color_from_title", Scope(Scopes::LandedTitle)),
    (Scopes::Character, "set_council_task", Vb(validate_set_council_task)),
    (Scopes::LandedTitle, "set_county_culture", Scope(Scopes::Culture)),
    (Scopes::LandedTitle, "set_county_faith", Scope(Scopes::Faith)),
    (Scopes::Character, "set_court_language", Item(Item::Language)),
    (Scopes::Character, "set_court_type", Item(Item::CourtType)),
    (Scopes::Culture, "set_cultural_acceptance", TargetValue("target", Scopes::Culture, "value")),
    (Scopes::Character, "set_culture", Scope(Scopes::Culture)),
    (Scopes::Struggle, "set_culture_as_involved", Scope(Scopes::Culture)),
    (Scopes::Struggle, "set_culture_as_uninvolved", Scope(Scopes::Culture)),
    (Scopes::Culture, "set_culture_name", Vb(validate_set_culture_name)),
    (Scopes::Culture, "set_culture_pillar", Item(Item::CulturePillar)),
    (Scopes::Character, "set_culture_same_as", Scope(Scopes::Character)),
    (Scopes::Character, "set_current_court_grandeur", ScriptValue),
    (Scopes::LandedTitle, "set_de_jure_liege_title", Scope(Scopes::LandedTitle)),
    (Scopes::Character, "set_dead_character_variable", Vb(validate_set_dead_character_variable)),
    (Scopes::Character, "set_death_reason", Vb(validate_set_death_reason)),
    (Scopes::Character, "set_default_education", Yes),
    (Scopes::LandedTitle, "set_definitive_form", Boolean),
    (Scopes::LandedTitle, "set_delete_on_destroy", Boolean),
    (Scopes::Character, "set_designated_heir", Scope(Scopes::Character)),
    (Scopes::Character, "set_designated_heir_unsafe", Scope(Scopes::Character)),
    (Scopes::GreatHolyWar, "set_designated_winner", Scope(Scopes::Character)),
    (Scopes::LandedTitle, "set_destroy_if_invalid_heir", Boolean),
    (Scopes::LandedTitle, "set_destroy_on_gain_same_tier", Boolean),
    (Scopes::LandedTitle, "set_destroy_on_succession", Boolean),
    (Scopes::Character, "set_diarch", Scope(Scopes::Character)),
    (Scopes::Character, "set_diarchy_mandate", Item(Item::DiarchyMandate)),
    (Scopes::Character, "set_diarchy_swing", ScriptValue),
    (Scopes::Character, "set_diarchy_type", Item(Item::DiarchyType)),
    (Scopes::Domicile, "set_domicile_owner", Scope(Scopes::Character)),
    (Scopes::Dynasty, "set_dynasty_name", Item(Item::Localization)),
    (Scopes::Character, "set_employer", Scope(Scopes::Character)),
    (Scopes::Epidemic, "set_epidemic_outbreak_intensity", Choice(OUTBREAK_INTENSITIES)),
    (Scopes::Character, "set_ethnicity", Item(Item::Ethnicity)),
    (Scopes::Culture, "set_ethos_from", Scope(Scopes::Culture)),
    (Scopes::Struggle, "set_faith_as_involved", Scope(Scopes::Faith)),
    (Scopes::Struggle, "set_faith_as_uninvolved", Scope(Scopes::Faith)),
    (Scopes::Character, "set_father", Scope(Scopes::Character)),
    (Scopes::Character, "set_focus", Vv(validate_set_focus)),
    // set_focus_progress ??
    (Scopes::None, "set_generated_asexuality_chance", ScriptValue),
    (Scopes::None, "set_generated_bisexuality_chance", ScriptValue),
    (Scopes::None, "set_generated_homosexuality_chance", ScriptValue),
    (Scopes::None, "set_global_variable", Vbv(validate_set_variable)),
    (Scopes::GreatHolyWar, "set_great_holy_war_target", Vb(validate_set_ghw_target)),
    (Scopes::Culture, "set_heritage_from", Scope(Scopes::Culture)),
    (Scopes::Province, "set_holding_type", Item(Item::HoldingType)),
    (Scopes::Character, "set_house", Scope(Scopes::DynastyHouse)),
    (Scopes::DynastyHouse, "set_house_head", Scope(Scopes::Character)),
    (Scopes::DynastyHouse, "set_house_name", Item(Item::Localization)),
    (Scopes::DynastyHouse, "set_house_name_from_dynasty", Scope(Scopes::Dynasty)),
    (Scopes::DynastyHouse, "set_house_name_from_house", Scope(Scopes::DynastyHouse)),
    (Scopes::Character, "set_immortal_age", ScriptValue),
    (Scopes::LandedTitle, "set_important_location", Vb(validate_set_important_location)),
    (Scopes::Character, "set_killer_public", Boolean),
    (Scopes::Character, "set_knight_status", Choice(&["force", "forbid", "default", "allow"])),
    (Scopes::Character, "set_known_bastard_on_pregnancy", Boolean),
    (Scopes::LandedTitle, "set_landless_title", Boolean),
    (Scopes::Culture, "set_language_from", Scope(Scopes::Culture)),
    (Scopes::Legend, "set_legend_chapter", Vb(validate_set_legend_chapter)),
    (Scopes::Legend, "set_legend_property", Vb(validate_set_legend_property)),
    (Scopes::Legend, "set_legend_quality", Choice(LEGEND_QUALITY)),
    (Scopes::None, "set_local_variable", Vbv(validate_set_variable)),
    (Scopes::Character, "set_location", Vbv(validate_set_location)),
    (Scopes::Character, "set_location_to_default", Boolean),
    (Scopes::Culture, "set_martial_custom_from", Scope(Scopes::Culture)),
    (Scopes::Artifact, "set_max_durability", ScriptValue),
    (Scopes::Character, "set_mother", Scope(Scopes::Character)),
    (Scopes::Culture, "set_name_list", Item(Item::NameList)),
    (Scopes::LandedTitle, "set_no_automatic_claims", Yes),
    (Scopes::LandedTitle, "set_noble_family_title", Boolean),
    (Scopes::Character, "set_num_pregnancy_children", Integer),
    (Scopes::Character, "set_override_designated_winner", Boolean),
    (Scopes::Character, "set_owned_legend", Scope(Scopes::Legend)),
    (Scopes::Artifact, "set_owner", Vbv(validate_set_owner)),
    (Scopes::Character, "set_player_character", Scope(Scopes::Character)),
    (Scopes::Character, "set_pregnancy_assumed_father", Scope(Scopes::Character)),
    (Scopes::Character, "set_pregnancy_gender", Choice(&["male", "female", "random"])),
    (Scopes::Character, "set_primary_spouse", Scope(Scopes::Character)),
    (Scopes::Character, "set_primary_title_to", Scope(Scopes::LandedTitle)),
    (Scopes::Character, "set_promoted_legend", Scope(Scopes::Legend)),
    (Scopes::Character, "set_real_father", Scope(Scopes::Character)),
    (Scopes::Character, "set_real_mother", Scope(Scopes::Character)),
    (Scopes::Character, "set_realm_capital", Scope(Scopes::LandedTitle)),
    (Scopes::Faith, "set_religious_head_title", Scope(Scopes::LandedTitle)),
    (Scopes::Character, "set_reserved_gold_maximum", ScriptValue),
    (Scopes::Secret, "set_secret_owner", Scope(Scopes::Character)),
    (Scopes::Character, "set_sexuality", Item(Item::Sexuality)),
    (Scopes::Artifact, "set_should_decay", Boolean),
    (Scopes::Faction, "set_special_character", Scope(Scopes::Character)),
    (Scopes::Faction, "set_special_title", Scope(Scopes::LandedTitle)),
    (Scopes::LandedTitle, "set_state_faith", Scope(Scopes::Faith)),
    (Scopes::TaskContract, "set_task_contract_target", Scope(Scopes::Character)),
    (Scopes::LandedTitle, "set_title_name", Vv(validate_set_title_name)),
    (Scopes::LandedTitle, "set_title_prefix", Item(Item::Localization)),
    (Scopes::Character, "set_to_lowborn", Yes),
    (Scopes::Character, "set_trait_rank", Vb(validate_change_trait_rank)),
    (Scopes::TravelPlan, "set_travel_leader", Scope(Scopes::Character)),
    (Scopes::TravelPlan, "set_travel_plan_owner", Scope(Scopes::Character)),
    (Scopes::None, "set_variable", Vbv(validate_set_variable)),
    (Scopes::Character, "set_vassal_contract_modification_blocked", Boolean),
    (Scopes::GreatHolyWar, "set_war_declarer", Scope(Scopes::Character)),
    (Scopes::None, "setup_claim_cb", Vb(validate_setup_cb)),
    (Scopes::None, "setup_de_jure_cb", Vb(validate_setup_cb)),
    (Scopes::None, "setup_invasion_cb", Vb(validate_setup_cb)),
    (Scopes::None, "show_as_tooltip", Control),
    (Scopes::Activity, "skip_activity_phase", Boolean),
    (Scopes::all(), "spawn_activity", Removed("1.9", "")),
    (Scopes::Character, "spawn_army", Vb(validate_spawn_army)),
    (Scopes::Secret, "spend_by", Scope(Scopes::Character)),
    (Scopes::Character, "sponsor_inspiration", Scope(Scopes::Inspiration)),
    (Scopes::Character, "start_default_task", Yes),
    (Scopes::Character, "start_diarchy", Item(Item::DiarchyType)),
    (Scopes::GreatHolyWar, "start_ghw_war", Item(Item::CasusBelli)),
    (Scopes::Faith, "start_great_holy_war", Vb(validate_set_ghw_target)),
    (Scopes::Character, "start_scheme", Vb(validate_start_scheme)),
    (Scopes::None, "start_struggle", Vb(validate_start_struggle)),
    (Scopes::Character, "start_travel_plan", Vb(validate_start_travel_plan)),
    (Scopes::None, "start_tutorial_lesson", UncheckedTodo),
    (Scopes::Character, "start_war", Vb(validate_start_war)),
    (Scopes::None, "stats_log", Unchecked),
    (Scopes::Character, "stop_promoting_legend", Yes),
    (Scopes::Character, "store_localized_text_in_death", Unchecked),
    (Scopes::Character, "stress_impact", Vb(validate_stress_impact)),
    (Scopes::Army, "subtract_supply", NonNegativeValue),
    (Scopes::None, "switch", Vb(validate_switch)),
    (Scopes::Character, "take_hostage", Scope(Scopes::Character)),
    (
        Scopes::LandedTitle,
        "title_create_faction",
        ItemTarget("type", Item::Faction, "target", Scopes::Character),
    ),
    (Scopes::LandedTitle, "title_join_faction", Scope(Scopes::Faction)),
    (Scopes::LandedTitle, "title_leave_faction", Scope(Scopes::Faction)),
    (Scopes::LandedTitle, "transfer_owned_maa_control", Scope(Scopes::LandedTitle)),
    (Scopes::Regiment, "transfer_title_maa", Scope(Scopes::LandedTitle)),
    (Scopes::LandedTitle, "transfer_title_maa_ownership", Scope(Scopes::LandedTitle)),
    (Scopes::None, "trigger_event", Vbv(validate_trigger_event)),
    (Scopes::None, "try_create_important_action", Vb(validate_try_create_important_action)),
    (Scopes::None, "try_create_suggestion", Vb(validate_try_create_suggestion)),
    (Scopes::Artifact, "unequip_artifact_from_owner", Yes),
    (Scopes::Character, "unlearn_court_language_of", ScopeOkThis(Scopes::Character)),
    (Scopes::Character, "unlearn_language", Item(Item::Language)),
    (Scopes::Character, "unlearn_language_of_culture", Scope(Scopes::Culture)),
    (Scopes::GreatHolyWar, "unpledge_attacker", Scope(Scopes::Character)),
    (Scopes::GreatHolyWar, "unpledge_defender", Scope(Scopes::Character)),
    (Scopes::LandedTitle, "update_dynamic_coa", Yes),
    (Scopes::Character, "use_hook", Scope(Scopes::Character)),
    (Scopes::Character, "vassal_contract_decrease_obligation_level", Item(Item::VassalContract)),
    (Scopes::Character, "vassal_contract_increase_obligation_level", Item(Item::VassalContract)),
    (
        Scopes::Character,
        "vassal_contract_set_obligation_level",
        Vb(validate_vassal_contract_set_obligation_level),
    ),
    (Scopes::Character, "visit_court_of", Scope(Scopes::Character)),
    (Scopes::None, "while", Control),
    (Scopes::all(), "win_combat", Removed("1.9", "")),
];