(try_begin),
(ge, ":collective_casualties", 0),
(party_get_num_companion_stacks, ":num_stacks", ":collective_casualties"),
(else_try),
(assign, ":num_stacks", 0),
(try_end),
(try_for_range, ":troop_iterator", 0, ":num_stacks"),
(party_stack_get_troop_id, ":cur_troop_id", ":collective_casualties", ":troop_iterator"),
(troop_is_hero, ":cur_troop_id"),
(call_script, "script_remove_troop_from_prison", ":cur_troop_id"),
(troop_set_slot, ":cur_troop_id", slot_troop_leaded_party, -1),
(store_random_in_range, ":rand", 0, 100),
(str_store_troop_name_link, s1, ":cur_troop_id"),
(str_store_faction_name_link, s2, ":faction_receiving_prisoners"),
(store_troop_faction, ":defeated_troop_faction", ":cur_troop_id"),
(str_store_faction_name_link, s3, ":defeated_troop_faction"),
(try_begin),
(ge, ":rand", hero_escape_after_defeat_chance),
(party_stack_get_troop_id, ":leader_troop_id", ":nonempty_winner_party", 0),
(is_between, ":leader_troop_id", kingdom_heroes_begin, kingdom_heroes_end), #disable non-kingdom parties capturing enemy lords
(party_add_prisoners, ":nonempty_winner_party", ":cur_troop_id", 1),
(gt, reg0, 0),
#(troop_set_slot, ":cur_troop_id", slot_troop_is_prisoner, 1),
(troop_set_slot, ":cur_troop_id", slot_troop_prisoner_of_party, ":nonempty_winner_party"),
(display_log_message, "str_hero_taken_prisoner"),
(else_try),
(display_message,"@{s1} of {s3} was defeated in battle but managed to escape."),
(try_end),
(try_begin),
(store_troop_faction, ":cur_troop_faction", ":cur_troop_id"),
(faction_slot_eq, ":cur_troop_faction", slot_faction_marshall, ":cur_troop_id"),
#Marshall is defeated, refresh ai.
(assign, "$g_recalculate_ais", 1),
(try_end),
(try_end),
(try_begin),
(ge, ":collective_casualties", 0),
(party_get_num_prisoner_stacks, ":num_stacks", ":collective_casualties"),
(else_try),
(assign, ":num_stacks", 0),
(try_end),
(try_for_range, ":troop_iterator", 0, ":num_stacks"),
(party_prisoner_stack_get_troop_id, ":cur_troop_id", ":collective_casualties", ":troop_iterator"),
(troop_is_hero, ":cur_troop_id"),
(call_script, "script_remove_troop_from_prison", ":cur_troop_id"),
(store_troop_faction, ":cur_troop_faction", ":cur_troop_id"),
(str_store_troop_name_link, s1, ":cur_troop_id"),
(str_store_faction_name_link, s2, ":faction_receiving_prisoners"),
(str_store_faction_name_link, s3, ":cur_troop_faction"),
(display_log_message,"str_hero_freed"),
(try_end),