("freelancer_equip_troop",
[
(store_script_param_1, ":source_troop"),
(str_clear, s2),
(set_show_messages, 0),
(assign, ":recording_slot", slot_freelancer_equip_start),
(troop_get_inventory_capacity, ":troop_cap", ":source_troop"),
(assign, ":melee_given", 0),
(assign, ":needs_ammo", 0),
(assign, ":open_weapon_slot", 0),
(try_for_range, ":type", itp_type_horse, itp_type_pistol),
(neq, ":type", itp_type_goods),
(neq, ":type", itp_type_arrows),
(neq, ":type", itp_type_bolts),
#Assign Prob. of Getting Type
(assign, ":continue", 0),
(try_begin),
(troop_is_guarantee_horse, ":source_troop"),
(eq, ":type", itp_type_horse),
(assign, ":continue", 1),
(else_try),
(troop_is_guarantee_ranged, ":source_troop"),
(this_or_next|eq, ":type", itp_type_bow),
(this_or_next|eq, ":type", itp_type_crossbow),
(eq, ":type", itp_type_thrown),
(assign, ":continue", 1),
(else_try),
(this_or_next|eq, ":type", itp_type_shield), #Shields and all armor pieces are guaranteed
(ge, ":type", itp_type_head_armor),
(assign, ":continue", 1),
(else_try),
(neq, ":type", itp_type_horse),
(lt, ":open_weapon_slot", 4),
(store_random_in_range, ":continue", 0, 3), # 1 chance in three of being 1
(try_end),
(eq, ":continue", 1),
#Clear Temp Array
(try_for_range, ":inv_slot", 0, 20),
(troop_set_slot, "trp_temp_array_a", ":inv_slot", 0),
(try_end),
#Collect Items from Source Troop
(assign, ":type_count", 0),
(try_for_range, ":inv_slot", 0, ":troop_cap"),
(troop_get_inventory_slot, ":item", ":source_troop", ":inv_slot"),
(gt, ":item", 0),
(item_get_type, ":item_type", ":item"),
(eq, ":item_type", ":type"),
(call_script, "script_dplmc_troop_can_use_item", "trp_player", ":item", 0),
(eq, reg0, 1),
(troop_set_slot, "trp_temp_array_a", ":type_count", ":item"),
(val_add, ":type_count", 1),
(try_end),
(gt, ":type_count", 0),
#Pick Random Item of Type from Troop
(try_begin),
(eq, ":type_count", 1),
(assign, ":index", 0),
(else_try),
(store_random_in_range, ":index", 0, ":type_count"),
(try_end),
(troop_get_slot, ":item", "trp_temp_array_a", ":index"),
(gt, ":item", 0),
(str_store_item_name, s3, ":item"),
(str_store_string, s2, "@{s3}, {s2}"),
#Select correct EK slot to force equip
(try_begin),
(eq, ":type", itp_type_horse),
(assign, ":ek_slot", ek_horse),
(else_try),
(is_between, ":type", itp_type_head_armor, itp_type_pistol),
(store_sub, ":shift", ":type", itp_type_head_armor),
(store_add, ":ek_slot", ek_head, ":shift"),
(else_try),
(store_add, ":ek_slot", ek_item_0, ":open_weapon_slot"),
(try_end),
#Check for item already there, move it if present
(try_begin),
(troop_get_inventory_slot, ":old_item", "trp_player", ":ek_slot"),
(gt, ":old_item", 0),
(troop_get_inventory_slot_modifier, ":old_item_imod", "trp_player", ":ek_slot"),
(troop_add_item, "trp_player", ":old_item", ":old_item_imod"),
(try_end),
#Add Item
(troop_set_inventory_slot, "trp_player", ":ek_slot", ":item"),
(party_set_slot, "p_player_party_backup", ":recording_slot", ":item"),
(val_add, ":recording_slot", 1),
(try_begin),
(is_between, ":type", itp_type_one_handed_wpn, itp_type_head_armor), #Uses one of the 4 weapon slots
(val_add, ":open_weapon_slot", 1),
(try_begin),
(is_between, ":type", itp_type_one_handed_wpn, itp_type_arrows),
(assign, ":melee_given", 1),
(else_try),
(eq, ":type", itp_type_bow),
(assign, ":needs_ammo", itp_type_arrows),
(else_try),
(eq, ":type", itp_type_crossbow),
(assign, ":needs_ammo", itp_type_bolts),
(try_end),
(try_end),
(try_end), #Item Types Loop
#add ammo for any equipped bow
(try_begin),
(neq, ":needs_ammo", 0),
#Check for item already in the last slot, move it if present
(try_begin),
(troop_get_inventory_slot, ":old_item", "trp_player", ek_item_3),
(gt, ":old_item", 0),
(troop_get_inventory_slot_modifier, ":old_item_imod", "trp_player", ek_item_3),
(troop_add_item, "trp_player", ":old_item", ":old_item_imod"),
(try_end),
(assign, ":end", ":troop_cap"),
(try_for_range, ":inv_slot", 0, ":end"),
(troop_get_inventory_slot, ":item", ":source_troop", ":inv_slot"),
(gt, ":item", 0),
(item_get_type, ":type", ":item"),
(eq, ":type", ":needs_ammo"),
(troop_set_inventory_slot, "trp_player", ek_item_3, ":item"),
(party_set_slot, "p_player_party_backup", ":recording_slot", ":item"),
(val_add, ":recording_slot", 1),
(assign, ":open_weapon_slot", 4),
(str_store_item_name, s3, ":item"),
(str_store_string, s2, "@{s3}, {s2}"),
(assign, ":end", 0),
(try_end),
(try_end),
#double check melee was given
(try_begin),
(eq, ":melee_given", 0),
(assign, ":end", ":troop_cap"),
(try_for_range, ":inv_slot", 0, ":end"),
(troop_get_inventory_slot, ":item", ":source_troop", ":inv_slot"),
(gt, ":item", 0),
(item_get_type, ":type", ":item"),
(is_between, ":type", itp_type_one_handed_wpn, itp_type_arrows),
(call_script, "script_dplmc_troop_can_use_item", "trp_player", ":item", 0),
(eq, reg0, 1),
(try_begin),
(gt, ":open_weapon_slot", 3),
(assign, ":open_weapon_slot", 2),
(try_end),
#Check for item already there
(try_begin),
(troop_get_inventory_slot, ":old_item", "trp_player", ":open_weapon_slot"),
(gt, ":old_item", 0),
(troop_get_inventory_slot_modifier, ":old_item_imod", "trp_player", ":open_weapon_slot"),
(troop_add_item, "trp_player", ":old_item", ":old_item_imod"),
(try_end),
(troop_set_inventory_slot, "trp_player", ":open_weapon_slot", ":item"),
(party_set_slot, "p_player_party_backup", ":recording_slot", ":item"),
(val_add, ":recording_slot", 1),
(str_store_item_name, s3, ":item"),
(str_store_string, s2, "@{s3}, {s2}"),
(assign, ":end", 0),
(try_end),
(try_end),
(set_show_messages, 1),
(try_begin),
(neg|str_is_empty, s2),
(val_sub, ":recording_slot", slot_freelancer_equip_start),
(party_set_slot, "p_player_party_backup", slot_freelancer_equip_start - 1, ":recording_slot"), #Record Number of Items Added
(str_store_troop_name, s1, ":source_troop"),
(display_message, "@The equipment of a {s1}: {s2}is assigned to you."),
(try_end),
]),
("freelancer_unequip_troop",
[
(store_script_param_1, ":source_troop"),
(str_clear, s2),
(set_show_messages, 0),
(party_get_slot, ":num_items", "p_player_party_backup", slot_freelancer_equip_start - 1), #Num of items previously given
(troop_get_inventory_capacity, ":cap", "trp_player"),
(try_for_range, ":i", 0, ":num_items"),
(store_add, ":slot", slot_freelancer_equip_start, ":i"),
(party_get_slot, ":given_item", "p_player_party_backup", ":slot"),
(gt, ":given_item", 0),
(assign, ":end", ":cap"),
(try_for_range, ":inv_slot", 0, ":end"),
(troop_get_inventory_slot, ":item", "trp_player", ":inv_slot"),
(eq, ":item", ":given_item"),
(troop_get_inventory_slot_modifier, ":imod", "trp_player", ":inv_slot"),
(eq, ":imod", 0), #Native troop items never have modifiers
(troop_set_inventory_slot, "trp_player", ":inv_slot", -1),
(str_store_item_name, s3, ":item"),
(str_store_string, s2, "@{s3}, {s2}"),
(assign, ":end", 0), #Break
(try_end), #Player Inventory Loop
(try_end), #Item Given Slot Loop
(set_show_messages, 1),
(try_begin),
(neg|str_is_empty, s2),
(party_set_slot, "p_player_party_backup", slot_freelancer_equip_start - 1, 0), #Reset Number of Items Added
(str_store_troop_name, s1, ":source_troop"),
(display_message, "@The equipment of a {s1}: {s2}is taken from you."),
(try_end),
(troop_equip_items, "trp_player"),
]),