diff --git a/doc/editor/appendix/Specials.html b/doc/editor/appendix/Specials.html
index 39348986..79b2ee8b 100644
--- a/doc/editor/appendix/Specials.html
+++ b/doc/editor/appendix/Specials.html
@@ -1674,7 +1674,7 @@ spell pattern relative to a specified space.
spell pattern relative to a specified space.
- Extra 1a, Extra 1b, Extra 1c:
- Same as above node.
-- Extra 2a
- The type of damage to deal
+- Extra 2a:
- The type of damage to deal
- The amount of damage to deal. This is the number of six-sided dice to roll to
calculate the damage.
- If 0, it will animate each affected creature sequentially using simply booms,
diff --git a/rsrc/strings/specials-text-affect.txt b/rsrc/strings/specials-text-affect.txt
index 3b4a37f0..1d3481a7 100644
--- a/rsrc/strings/specials-text-affect.txt
+++ b/rsrc/strings/specials-text-affect.txt
@@ -152,10 +152,10 @@ Unused
Unused
How many AP
0 - give, 1 = take
-extra 1c
-extra 2a
-extra 2b
-extra 2c
+Unused
+Unused
+Unused
+Unused
Special to Jump To
--------------------
Affect Name
@@ -174,16 +174,32 @@ Unused
Unused
Special to Jump To
--------------------
-Unused Node
-Unused
-Unused
+Affect Level
+Unused
+Unused
+First part of message
+Second part of message
+Unused
+Unused
+Unused
+Number of levels
+0 - add levels, 1 - remove
Unused
Unused
Unused
Unused
+Special to Jump To
+--------------------
+Affect Morale
+Unused
+Unused
+First part of message
+Second part of message
Unused
Unused
Unused
+Amount to change
+0 - increase, 1 - decrease
Unused
Unused
Unused
@@ -222,66 +238,50 @@ Unused
Unused
Special to Jump To
--------------------
-Unused Node
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
+Affect Soul Crystal
+Unused
+Unused
+First part of message
+Second part of message
Unused
Unused
Unused
+0 - record, 1 - erase
+0 - allow resist, 1 - force
Unused
Unused
Unused
Unused
Special to Jump To
--------------------
-Unused Node
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
+Affect Monster Attack
+Unused
+Unused
+First part of message
+Second part of message
Unused
Unused
Unused
+Attack to change (0 ... 2)
+Amount to change dice
+Amount to change sides
+0 - increase, 1 - decrease
Unused
Unused
Special to Jump To
--------------------
-Unused Node
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Special to Jump To
---------------------
-Unused Node
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
-Unused
+Affect Monster Statistic
+Unused
+Unused
+First part of message
+Second part of message
Unused
Unused
Unused
+Amount to change
+0 - increase, 1 - decrease
Unused
+Which stat (0 ... 10)
Unused
Unused
Special to Jump To
diff --git a/src/classes/special.cpp b/src/classes/special.cpp
index dec4eaed..ce0ef9d6 100644
--- a/src/classes/special.cpp
+++ b/src/classes/special.cpp
@@ -365,6 +365,7 @@ std::istream& operator >> (std::istream& in, eSpecType& e) {
// I - Choose button to select a special item
// t - Choose button to select a terrain type
// c - Choose button to select a monster type
+// C - Choose button to select a monster statistic
// a - Choose button to select an alchemy recipe
// A - Choose button to select a mage spell
// P - Choose button to select a priest spell
@@ -420,7 +421,7 @@ static const char*const button_dict[7][11] = {
"s s s S", // ex2b
" ", // ex2c
}, { // affect pc nodes
- "mmmmmmmmmmm mmmmmmmmmm", // msg1
+ "mmmmmmmmmmmmm mmmmmmmmmmmmm", // msg1
" ", // msg2
" M M ", // msg3
" 5 ", // pic
@@ -428,7 +429,7 @@ static const char*const button_dict[7][11] = {
" w q AP a ", // ex1a
" s", // ex1b
" e Q ", // ex1c
- " K E ", // ex2a
+ " CK E ", // ex2a
" D ", // ex2b
" x ", // ex2c
}, { // if-then nodes
diff --git a/src/scenedit/scen.keydlgs.cpp b/src/scenedit/scen.keydlgs.cpp
index 15634dff..f0d96468 100644
--- a/src/scenedit/scen.keydlgs.cpp
+++ b/src/scenedit/scen.keydlgs.cpp
@@ -337,6 +337,12 @@ short choose_text(eStrType list, unsigned short cur_choice, cDialog* parent, std
case STRT_TREASURE:
strings = {"0 - Junk", "1 - Lousy", "2 - So-so", "3 - Good", "4 - Great"};
break;
+ case STRT_MONST_STAT:
+ strings = {
+ "Maximum Health", "Maximum Magic Points", "Armor", "Skill", "Speed", "Mage Spells", "Priest Spells",
+ "Magic Resistance", "Fire Resistance", "Cold Resistance", "Poison Resistance",
+ };
+ break;
}
if(cur_choice < 0 || cur_choice >= strings.size())
cur_choice = -1;
@@ -780,6 +786,7 @@ static bool edit_spec_enc_value(cDialog& me, std::string item_hit, node_stack_t&
case 'I': strt = STRT_SPEC_ITEM; title = "Which special item?"; break;
case 't': strt = STRT_TER; title = "Which terrain?"; break;
case 'c': strt = STRT_MONST; title = "Which monster?"; break;
+ case 'C': strt = STRT_MONST_STAT; title = "Which statistic?"; break;
case 'a': strt = STRT_ALCHEMY; title = "Which recipe?"; break;
case 'A': strt = STRT_MAGE; title = "Which spell?"; break;
case 'P': strt = STRT_PRIEST; title = "Which spell?"; break;
diff --git a/src/scenedit/scen.keydlgs.h b/src/scenedit/scen.keydlgs.h
index f00417e9..2290696b 100644
--- a/src/scenedit/scen.keydlgs.h
+++ b/src/scenedit/scen.keydlgs.h
@@ -12,7 +12,7 @@ enum eStrType {
STRT_SHOP, STRT_COST_ADJ, STRT_STAIR_MODE, STRT_TALK_NODE,
STRT_STATUS, STRT_SPELL_PAT, STRT_SUMMON, STRT_TALK,
STRT_ENCHANT, STRT_DIR, STRT_QUEST, STRT_QUEST_STATUS,
- STRT_HEALING, STRT_TREASURE,
+ STRT_HEALING, STRT_TREASURE, STRT_MONST_STAT,
};
bool cre(short val,short min,short max,std::string text1,std::string text2,cDialog* parent) ;