From ea66ed6216220ca0c1fb75e028056ca0cbd0699a Mon Sep 17 00:00:00 2001
From: Sveinung Kvilhaugsvik <sveinung84@users.sourceforge.net>
Date: Thu, 18 Mar 2021 18:44:39 +0100
Subject: [PATCH] sandbox: demonstrate spy nuke

Copy the rules I made for webperimental but adjust them for Treuga Dei.

Intended to have a blast radius of 0 but that is only possible in 3.2.

See osdn #41809
---
 data/sandbox/effects.ruleset | 104 +++++++++++++++++++++++++++++++++++
 data/sandbox/game.ruleset    |  60 ++++++++++++++++++++
 2 files changed, 164 insertions(+)

diff --git a/data/sandbox/effects.ruleset b/data/sandbox/effects.ruleset
index 7bf92dffaf..e999b0eb55 100644
--- a/data/sandbox/effects.ruleset
+++ b/data/sandbox/effects.ruleset
@@ -4877,6 +4877,110 @@ reqs    =
       "Building", "Treuga Dei",           "World", TRUE
     }
 
+; Treuga Dei Casus Belli
+[effect_treuga_dei_casus_belli_suitcase_nuke]
+type    = "Casus_Belli_Success"
+value   = 1000
+reqs    =
+    { "type",     "name",                 "range", "survives"
+      "Action",   "Suitcase Nuke",        "Local", FALSE
+      "Building", "Treuga Dei",           "World", TRUE
+    }
+
+; Treuga Dei Casus Belli
+[effect_treuga_dei_casus_belli_suitcase_nuke_escape]
+type    = "Casus_Belli_Success"
+value   = 1000
+reqs    =
+    { "type",     "name",                 "range", "survives"
+      "Action",   "Suitcase Nuke Escape", "Local", FALSE
+      "Building", "Treuga Dei",           "World", TRUE
+    }
+
+; informant (veteran level 0) and handler (veteran level 1) does the
+; non escape version
+[effect_suitcase_nuke_odds_base]
+type	= "Action_Odds_Pct"
+value	= -69
+reqs	=
+    { "type",   "name",          "range"
+      "Action", "Suitcase Nuke", "Local"
+    }
+
+; give handler (veteran leven 2) better odds
+[effect_suitcase_nuke_odds_first_veteran]
+type	= "Action_Odds_Pct"
+value	= 6
+reqs	=
+    { "type",       "name",          "range"
+      "Action",     "Suitcase Nuke", "Local"
+      "MinVeteran", "1",             "Local"
+    }
+
+; agent (veteran level 2) and spymaster (veteran level 3) does the
+; escape version
+[effect_suitcase_nuke_esc_odds_base]
+type	= "Action_Odds_Pct"
+value	= -57
+reqs	=
+    { "type",   "name",                 "range"
+      "Action", "Suitcase Nuke Escape", "Local"
+    }
+
+; give spymaster (veteran leven 3) better odds
+[effect_suitcase_nuke_esc_odds_last_veteran]
+type	= "Action_Odds_Pct"
+value	= 6
+reqs	=
+    { "type",       "name",                 "range"
+      "Action",     "Suitcase Nuke Escape", "Local"
+      "MinVeteran", "3",                    "Local"
+    }
+
+[effect_action_suitcase_nuke_escape_success_move_cost]
+type    = "Action_Success_Actor_Move_Cost"
+value   = 65535
+reqs    =
+    { "type",   "name",                 "range", "quiet"
+      "Action", "Suitcase Nuke Escape", "Local", TRUE
+    }
+
+[effect_incident_success_suitcase_nuke]
+type	= "Casus_Belli_Success"
+value	= 1
+reqs	=
+    { "type", "name", "range", "present"
+      "Action", "Suitcase Nuke", "Local", TRUE
+      "DiplRel", "War", "Local", TRUE
+    }
+
+[effect_incident_success_suitcase_nuke_terrorist_state]
+type	= "Casus_Belli_Success"
+value	= 1000
+reqs	=
+    { "type", "name", "range", "present"
+      "Action", "Suitcase Nuke", "Local", TRUE
+      "DiplRel", "War", "Local", FALSE
+    }
+
+[effect_incident_success_suitcase_nuke_veteran]
+type	= "Casus_Belli_Success"
+value	= 1
+reqs	=
+    { "type", "name", "range", "present"
+      "Action", "Suitcase Nuke Escape", "Local", TRUE
+      "DiplRel", "War", "Local", TRUE
+    }
+
+[effect_incident_success_suitcase_nuke_veteran_terrorist_state]
+type	= "Casus_Belli_Success"
+value	= 1000
+reqs	=
+    { "type", "name", "range", "present"
+      "Action", "Suitcase Nuke Escape", "Local", TRUE
+      "DiplRel", "War", "Local", FALSE
+    }
+
 [effect_unit_shield_value_recycle]
 type    = "Unit_Shield_Value_Pct"
 value   = -50
diff --git a/data/sandbox/game.ruleset b/data/sandbox/game.ruleset
index 3ac2cc462f..261314ae72 100644
--- a/data/sandbox/game.ruleset
+++ b/data/sandbox/game.ruleset
@@ -1390,6 +1390,66 @@ actor_reqs =
       "Tech",         "Communism",    "World",  TRUE,      TRUE
     }
 
+[actionenabler_suitcase_nuke]
+action = "Suitcase Nuke"
+actor_reqs    =
+    { "type",         "name",              "range",  "present"
+      "UnitFlag",     "Spy",               "Local",  TRUE
+      "MinVeteran",   "2",                 "Local",  FALSE
+      "DiplRel",      "Alliance",          "Local",  FALSE
+      "DiplRel",      "Team",              "Local",  FALSE
+      "DiplRel",      "Foreign",           "Local",  TRUE
+      "UnitState",    "OnLivableTile",     "Local",  TRUE
+      "MinMoveFrags", "1",                 "Local",  TRUE
+      "Building",     "Manhattan Project", "Player", TRUE
+      "Building",     "Treuga Dei",        "World",  FALSE
+    }
+
+[actionenabler_suitcase_nuke_despite_treuga_dei]
+action = "Suitcase Nuke"
+actor_reqs    =
+    { "type",         "name",              "range",  "present", "survives"
+      "UnitFlag",     "Spy",               "Local",  TRUE,      FALSE
+      "MinVeteran",   "2",                 "Local",  FALSE,     FALSE
+      "DiplRel",      "Alliance",          "Local",  FALSE,     FALSE
+      "DiplRel",      "Team",              "Local",  FALSE,     FALSE
+      "DiplRel",      "Foreign",           "Local",  TRUE,      FALSE
+      "UnitState",    "OnLivableTile",     "Local",  TRUE,      FALSE
+      "MinMoveFrags", "1",                 "Local",  TRUE,      FALSE
+      "Building",     "Manhattan Project", "Player", TRUE,      FALSE
+      "Tech",         "Communism",         "World",  TRUE,      TRUE
+    }
+
+[actionenabler_suitcase_nuke_escape]
+action = "Suitcase Nuke Escape"
+actor_reqs    =
+    { "type",         "name",              "range",  "present"
+      "UnitFlag",     "Spy",               "Local",  TRUE
+      "MinVeteran",   "2",                 "Local",  TRUE
+      "DiplRel",      "Alliance",          "Local",  FALSE
+      "DiplRel",      "Team",              "Local",  FALSE
+      "DiplRel",      "Foreign",           "Local",  TRUE
+      "UnitState",    "OnLivableTile",     "Local",  TRUE
+      "MinMoveFrags", "1",                 "Local",  TRUE
+      "Building",     "Manhattan Project", "Player", TRUE
+      "Building",     "Treuga Dei",        "World",  FALSE
+    }
+
+[actionenabler_suitcase_nuke_escape_despite_treuga_dei]
+action = "Suitcase Nuke Escape"
+actor_reqs    =
+    { "type",         "name",              "range",  "present", "survives"
+      "UnitFlag",     "Spy",               "Local",  TRUE,      FALSE
+      "MinVeteran",   "2",                 "Local",  TRUE,      FALSE
+      "DiplRel",      "Alliance",          "Local",  FALSE,     FALSE
+      "DiplRel",      "Team",              "Local",  FALSE,     FALSE
+      "DiplRel",      "Foreign",           "Local",  TRUE,      FALSE
+      "UnitState",    "OnLivableTile",     "Local",  TRUE,      FALSE
+      "MinMoveFrags", "1",                 "Local",  TRUE,      FALSE
+      "Building",     "Manhattan Project", "Player", TRUE,      FALSE
+      "Tech",         "Communism",         "World",  TRUE,      TRUE
+    }
+
 ; The GameLoss unit requirement makes sending units on a suicide mission to
 ; capture and destroy cities deep inside enemy terrain national suicide.
 ; The risk of moving a GameLoss unit to the target city increases the cost
-- 
2.20.1