There was a discussion about PERSUADRATON. Point is that players do not know what are rules when it comes to skills, attributes etc.
So here is code for 1.99.2 so you can see how it done. BELOW I also print code for the upcoming version 1.99.3
Main difference is that in 1.99.2 only manipulation is important and there is big bonus towards persuasion success.
In 1.99.3 there are multiple skills and attributes involved: intelligence, strength, charisma, engineer, hacking, manipulation - not at the same time of course. Process is divided to levels.
CURRENT VERSION 1.99.2
common_battle_persuadraton = (
ti_on_agent_hit, 0, 0, [],
[
(store_trigger_param, ":agent_no", 2), #attacker
(store_trigger_param, ":troop_id", 1), #defender
(try_begin),
(agent_get_wielded_item, ":item_w", ":agent_no", 0),
(eq, ":item_w", "itm_persuadraton"), #does attacker wields persuadraton
(agent_get_troop_id, ":troop_id_A", ":agent_no"),
(agent_get_troop_id, ":troop_id_D", ":troop_id"),
(store_skill_level, ":persuasion_attacker", "skl_persuasion", ":troop_id_A"),
(store_skill_level, ":persuasion_defender", "skl_persuasion", ":troop_id_D"),
(str_store_troop_name, s7, ":troop_id_A"),
(str_store_troop_name, s8, ":troop_id_D"),
#(display_message, "@ Persuasion attempt: {s7}"), #debug info
#(display_message, "@ Defender: {s8}"), #debug info
(val_mul, ":persuasion_defender", 3),
(val_mul, ":persuasion_attacker", 5),
(try_begin),
(item_get_slot, ":book_read", "itm_book_cyberwar", slot_item_book_read),
(eq, ":book_read", 1),
(try_begin),
(eq, ":troop_id_A", "trp_player"),
(val_mul, ":persuasion_attacker", 13),
(val_div, ":persuasion_attacker", 10),
(try_end),
(try_end),
(try_begin),
(item_get_slot, ":book_read", "itm_book_cyberwar", slot_item_book_read),
(eq, ":book_read", 1),
(try_begin),
(eq, ":troop_id_D", "trp_player"),
(val_mul, ":persuasion_defender", 13),
(val_div, ":persuasion_defender", 10),
(try_end),
(try_end),
#######TEST#####STAART########
(assign, reg1, ":persuasion_defender"),
(assign, reg0, ":persuasion_attacker"),
#(display_message, "@ Attacker - {s7} persuasion: {reg0}"), #debug info
#(display_message, "@ Defender - {s8} persuasion: {reg1}"), #debug info
#######TEST#####FINISH########
(store_random_in_range, ":persuasion_bonus", 1, 30), #randomize chance to persuade and...
(val_add, ":persuasion_attacker", ":persuasion_bonus"),
(val_sub, ":persuasion_attacker", ":persuasion_defender"),
(try_begin),
(store_random_in_range, ":persuasion_chance", 10, 100), #randomize chance to persuade and...
(try_begin),
(ge,":persuasion_attacker", ":persuasion_chance"), # check if persuasion skill is greater, then
(agent_get_team, ":persuaded_faction",":agent_no"), #get attacker team
#MOST IMPORTANT: DEFENDER TROOP BECOMES ATTACKER TROOP
(agent_set_team, ":troop_id", ":persuaded_faction"), #
(try_begin),
(get_player_agent_no, ":player_agent"),
(eq, ":player_agent",":troop_id"),
(play_sound,"snd_quest_failed"),
(start_presentation, "prsnt_player_damage_persuadraton"),
(try_end),
#(str_store_troop_name, s7, ":troop_id_A"),
#(str_store_troop_name, s8, ":troop_id_D"),
#(display_message, "@ DEBUG: attacker after_TROOP name: {s7}"), #debug info
#(display_message, "@ DEBUG: defender after_TROOP name: {s8}"), #debug info
(assign, reg0, ":persuasion_attacker"),
(assign, reg1, ":persuasion_chance"),
(try_begin), ##BATTLEFIELD MESSAGE SYSTEM ON OFF
(troop_get_slot, ":messages_on", "trp_running_speed", slot_troop_autofire_mode),
(eq, ":messages_on", 1),
(display_message, "@***PERSUADRATON***FIGHT***WIN***{s7} VS. {s8}*** {reg0} VS. {reg1} *********",0xFFff9c00),
(else_try),
(eq, ":messages_on", 2), ##FULL PERSUASION REPORT
(display_message, "@ *************PERSUADRATON***PERSUASION***FIGHT***WIN******************************",0xFFff9c00),
(display_message, "@^^"), #debug info
(display_message, "@ *** {s7} VS. {s8} ***",0xFFff9c00),
(display_message, "@ *** {reg0} VS. {reg1} ***",0xFFff9c00),
(try_end), ##BATTLEFIELD MESSAGE SYSTEM ON OFF
(try_begin),
(item_get_slot, ":book_read", "itm_book_cyberwar", slot_item_book_read),
(eq, ":book_read", 1),
(try_begin),
(eq, ":troop_id_A", "trp_player"),
(neg|troop_is_hero, ":troop_id_D"),
(store_random_in_range, ":chance_constant", 1, 100), #randomize chance to persuade and...
(gt, ":chance_constant", 49),
(party_force_add_members, "p_main_party", ":troop_id_D", 1),
(else_try),
(party_force_add_prisoners, "p_main_party", ":troop_id_D", 1),
(try_end),
(try_end),
# (party_force_add_members, <party_id>, <troop_id>, <number>),
# Adds troops to party ignoring party size limits. Mostly used to add hero troops.
# (party_force_add_prisoners, <party_id>, <troop_id>, <number>),
# Adds prisoners to party ignoring party size limits. Mostly used to add hero prisoners.
(play_sound, "snd_orc_victory"),
(try_end),
(try_end),
(try_end),
])
and here is code for 1.99.3
#script on attacker persuading defender to change faction during the batlle
#####PERSUADRATON - item that on hit there is a chance that enemy will become attacker's ally
#
common_battle_persuadraton = (
ti_on_agent_hit, 0, 0, [],
[
(store_trigger_param, ":agent_no", 2), #attacker
(store_trigger_param, ":troop_id", 1), #defender
(try_begin),
(agent_get_wielded_item, ":item_w", ":agent_no", 0),
(eq, ":item_w", "itm_persuadraton"), #does attacker wields persuadraton
(agent_get_troop_id, ":troop_id_A", ":agent_no"),
(agent_get_troop_id, ":troop_id_D", ":troop_id"),
(str_store_troop_name, s7, ":troop_id_A"),
(str_store_troop_name, s8, ":troop_id_D"),
#calculating ATTACKER
#1-manipulation power
(store_skill_level, ":persuasion_attacker", "skl_persuasion", ":troop_id_A"),
(store_attribute_level, ":charisma_attacker", ":troop_id_A", ca_charisma),
#2-hacking power
(store_skill_level, ":hacker_attacker", "skl_hacking", ":troop_id_A"),
(store_skill_level, ":engineer_attacker", "skl_engineer", ":troop_id_A"),
(store_attribute_level, ":intelligence_attacker", ":troop_id_A", ca_intelligence),
(store_character_level, ":troop_level_attacker", ":troop_id_A"),
(val_div, ":charisma_attacker", 2), #(1-63) max: 63
(val_mul, ":persuasion_attacker", 2), #(1-30) max: 30
(val_div, ":intelligence_attacker", 2), #(1-63) max: 63
(val_mul, ":hacker_attacker", 3), #(1-45) max: 30
(val_mul, ":engineer_attacker", 2), #(1-30) max: 30
(store_add, ":attacker_manipulation_power", ":charisma_attacker",":persuasion_attacker"), #m######
(store_add, ":attacker_hacking_power", ":intelligence_attacker",":hacker_attacker"), #h#######
(val_add, ":attacker_hacking_power", ":engineer_attacker"), #(1-30) max: 30########
#calculating DEFENDER
(store_skill_level, ":persuasion_defender", "skl_persuasion", ":troop_id_D"),
(store_attribute_level, ":charisma_defender", ":troop_id_D", ca_charisma),
#2-hacking power
(store_skill_level, ":hacker_defender", "skl_hacking", ":troop_id_D"),
(store_skill_level, ":engineer_defender", "skl_engineer", ":troop_id_D"),
(store_attribute_level, ":intelligence_defender", ":troop_id_D", ca_intelligence),
(store_character_level, ":troop_level_defender", ":troop_id_D"),
(val_div, ":charisma_defender", 2), #(1-63) max: 63
(val_mul, ":persuasion_defender", 2), #(1-30) max: 30
(val_div, ":intelligence_defender", 2), #(1-63) max: 63
(val_mul, ":hacker_defender", 3), #(1-45) max: 30
(val_mul, ":engineer_defender", 2), #(1-30) max: 30
(store_add, ":defender_manipulation_power", ":charisma_defender",":persuasion_defender"), #m######
(store_add, ":defender_hacking_power", ":intelligence_defender",":hacker_defender"), #h#######
(val_add, ":defender_hacking_power", ":engineer_defender"), #(1-30) max: 30########
(try_begin),
(item_get_slot, ":book_read", "itm_book_cyberwar", slot_item_book_read),
(eq, ":book_read", 1),
(try_begin),
(eq, ":troop_id_A", "trp_player"),
(val_mul, ":attacker_hacking_power", 13),
(val_div, ":attacker_hacking_power", 10),
(try_end),
(try_end),
(try_begin),
(item_get_slot, ":book_read", "itm_book_cyberwar", slot_item_book_read),
(eq, ":book_read", 1),
(try_begin),
(eq, ":troop_id_D", "trp_player"),
(val_mul, ":defender_hacking_power", 13),
(val_div, ":defender_hacking_power", 10),
(try_end),
(try_end),
#######TEST#####STAART#######
# LEVEL 1 - MANIPULATION Attack
(store_random_in_range, ":attacker_bonus", 1, 30), #randomize chance
(store_random_in_range, ":defender_bonus", 1, 30), #randomize chance
(val_add, ":attacker_manipulation_power", ":attacker_bonus"),
(val_add, ":defender_manipulation_power", ":defender_bonus"),
(ge,":attacker_manipulation_power", ":defender_manipulation_power"),
# LEVEL 2 - Persuadraton connecting to central nervous system
#2-hacking power
(store_skill_level, ":bodybuilding_defender", "skl_ironflesh", ":troop_id_D"), #(1-30) max: 30
(store_skill_level, ":vanguard_defender", "skl_shield", ":troop_id_D"), #(1-30) max: 30
(store_attribute_level, ":strength_defender", ":troop_id_D", ca_strength), #(1-30) max: 63
(val_div, ":strength_defender", 4),
(val_add, ":strength_defender", ":bodybuilding_defender"),
(val_add, ":strength_defender", ":vanguard_defender"),
(try_begin),
(troop_get_type, ":defender_race", ":troop_id_D"),
(eq, ":defender_race", tf_beauty_fem),
(val_add, ":strength_defender",30),
(try_end),
(try_begin),
(this_or_next|is_between, ":troop_id_D", kings_begin, kings_end),
(this_or_next|is_between, ":troop_id_D", lords_begin, lords_end),
(is_between, ":troop_id_D", boss_begin, boss_end),
(val_add, ":strength_defender",20),
(try_end),
(try_begin),
(agent_get_wielded_item, ":shield_item", ":troop_id", 0),
(eq, ":shield_item", "itm_depersuadraton_noisener"),
(store_skill_level, ":hacker_bonus", "skl_hacking", ":troop_id_D"),
(store_skill_level, ":engineer_bonus", "skl_engineer", ":troop_id_D"),
(val_add, ":strength_defender",":hacker_bonus"),
(val_add, ":strength_defender",":engineer_bonus"),
(val_add, ":strength_defender",35),
(try_end),
(store_random_in_range, ":persuasion_chance", 1, 101), #randomize chance to persuade and...
(lt,":strength_defender", ":persuasion_chance"), #Check for defender organism to defend against neural connection
# LEVEL 3 - Persuadraton connected and starting HACKING
(store_random_in_range, ":hacking_bonus_attacker", 1, 30), #randomize chance to persuade and...
(store_random_in_range, ":hacking_bonus_defender", 1, 30), #randomize chance to persuade and...
(val_add, ":attacker_hacking_power", ":hacking_bonus_attacker"),
(val_add, ":defender_hacking_power", ":hacking_bonus_defender"),
(try_begin), #critical chance = if attacker hacking skillx3 is lower than d100 roll then add troop level to its hacking power
(store_random_in_range, ":hacking_critical", 1, 100),
(lt,":hacker_attacker", ":hacking_critical"), #Check for defender organism to defend against neural connection
(val_add, ":attacker_hacking_power", ":troop_level_attacker",),
(try_end),
(try_begin), #critical chance = if attacker hacking skillx3 is lower than d100 roll then add troop level to its hacking power
(store_random_in_range, ":hacking_critical", 1, 100),
(lt,":hacker_defender", ":hacking_critical"), #Check for defender organism to defend against neural connection
(val_add, ":defender_hacking_power", ":troop_level_defender"),
(try_end),
(val_sub, ":attacker_hacking_power", ":defender_hacking_power"), ###attackers hacking power - defender hacking power = real hack power
(try_begin),
(lt,":attacker_hacking_power", 0),
(store_random_in_range, ":hacking_critical", 1, 100),
(lt,":intelligence_attacker", ":hacking_critical"), #If attacker hacking power is lower than defender's, than attacker get system crash and loose of sanity in consequence
(call_script, "script_change_troop_sanity", ":troop_id_A", -1),
(try_end),
(store_random_in_range, ":hacking_chance", 1, 100), #test against succesful hacking
(ge,":attacker_hacking_power", ":hacking_chance"), # check if persuasion skill is greater, then
(agent_get_team, ":persuaded_faction",":agent_no"), #get attacker team
#MOST IMPORTANT: DEFENDER TROOP BECOMES ATTACKER TROOP
(agent_set_team, ":troop_id", ":persuaded_faction"), #
(try_begin),
(get_player_agent_no, ":player_agent"),
(eq, ":player_agent",":troop_id"),
(play_sound,"snd_quest_failed"),
(start_presentation, "prsnt_player_damage_persuadraton"),
(try_end),
#(str_store_troop_name, s7, ":troop_id_A"),
#(str_store_troop_name, s8, ":troop_id_D"),
#(display_message, "@ DEBUG: attacker after_TROOP name: {s7}"), #debug info
#(display_message, "@ DEBUG: defender after_TROOP name: {s8}"), #debug info
(assign, reg0, ":attacker_hacking_power"),
(assign, reg1, ":defender_hacking_power"),
(try_begin), ##BATTLEFIELD MESSAGE SYSTEM ON OFF
(troop_get_slot, ":messages_on", "trp_running_speed", slot_troop_autofire_mode),
(eq, ":messages_on", 1),
(display_message, "@***PERSUADRATON***FIGHT***WIN***{s7} VS. {s8}*** {reg0} VS. {reg1} *********",0xFFff9c00),
(else_try),
(eq, ":messages_on", 2), ##FULL PERSUASION REPORT
(display_message, "@ *************PERSUADRATON***PERSUASION***FIGHT***WIN******************************",0xFFff9c00),
(display_message, "@^^"), #debug info
(display_message, "@ *** {s7} VS. {s8} ***",0xFFff9c00),
(display_message, "@ *** {reg0} VS. {reg1} ***",0xFFff9c00),
(try_end), ##BATTLEFIELD MESSAGE SYSTEM ON OFF
(try_begin),
(item_get_slot, ":book_read", "itm_book_cyberwar", slot_item_book_read),
(eq, ":book_read", 1),
(try_begin),
(eq, ":troop_id_A", "trp_player"),
(neg|troop_is_hero, ":troop_id_D"),
(store_random_in_range, ":chance_constant", 1, 100), #randomize chance to persuade and...
(gt, ":chance_constant", 49),
(party_force_add_members, "p_main_party", ":troop_id_D", 1),
(else_try),
(party_force_add_prisoners, "p_main_party", ":troop_id_D", 1),
(try_end),
(try_end),
# (party_force_add_members, <party_id>, <troop_id>, <number>),
# Adds troops to party ignoring party size limits. Mostly used to add hero troops.
# (party_force_add_prisoners, <party_id>, <troop_id>, <number>),
# Adds prisoners to party ignoring party size limits. Mostly used to add hero prisoners.
(play_sound, "snd_orc_victory"),
(try_end),
])