@ XanMag (and SeaChameleon):
(Randomization + Stringlists + If Scripts) and (Randomization + Scriptdictionaries) produce the same results for what you want, just different ways of doing them (essentially, for what you want to do, the Scriptdictionary just combines Stringlists+If Scripts into "one process", a Scriptdictionary). As can be seen/demonstrated below:
Randomization + Stringlist + If Scripts:
game.combat_action_stringlist = split ("attack; defend; cast/magic; item; escape", ";")
// 'monster' Object's 'fight' Verb:
monster.AI_combat_choice_string = StringListItem (game.combat_action_string, GetRandomInt (0, ListCount (game.combat_action_list) - 1))
if (monster.AI_combat_choice_string = "attack") {
player.current_life = player.current_life - monster.damage
}
else if (monster.AI_combat_choice_string = "defend") {
monster.defense = monster.defense * 2
}
// etc etc etc etc 'else ifs', for: cast/magic, item, escape
// tecnically, we wouldn't do the Stringlist for the AI's combat choices, as the Stringlist is only needed for humans to know their choices ("attack=0, defend=1, cast/magic=2, item=3, escape=4" to decide (aka, it wouldn't even be using randomization to begin with), whereas the computer/AI doesn't need to know that "0 = attack", as it is using randomization, as it just "decides" (does) what the randomization selects (0-4), it doesn't need to know that '0' is "attack, '1' is "defend", etc etc etc
is the same as:
Randomization + Scriptdictionary:
<game name="xxx">
<attr name="AI_combat_action_scriptdictionary" type="scriptdictionary">
<item key="0">
player.current_life = player.current_life - monster.damage
</item>
<item key="1">
monster.defense = monster.defense * 2
</item>
// etc etc etc 'item keys' for: cast/magic, item, escape
</attr>
</game>
// 'monster' Object's 'fight' Verb:
invoke (ScriptDictionaryItem (game.AI_combat_action_scriptdictionary, GetRandomInt (0, DictionaryCount (game.AI_combat_action_scriptdictionary) - 1)))