(24,
[
(try_for_parties, ":party_no"),
(neq, ":party_no", "p_main_party"),
(neq, ":party_no", "p_temp_party"),
(assign, ":continue", 0),
(try_begin),
(this_or_next|party_slot_eq, ":party_no", slot_party_type, spt_kingdom_hero_party),
(party_slot_eq, ":party_no", slot_party_type, spt_kingdom_caravan),
(party_is_active, ":party_no"),
(assign, ":continue", 1),
(try_begin),
(party_stack_get_troop_id, ":cur_troop", ":party_no", 0),
(this_or_next|troop_is_hero, ":cur_troop"),
(eq, ":cur_troop", "trp_caravan_master"),
(assign, ":first_stack", 1),
(else_try),
(assign, ":first_stack", 0),
(try_end),
(else_try),
(this_or_next|party_slot_eq, ":party_no", slot_party_type, spt_castle),
(party_slot_eq, ":party_no", slot_party_type, spt_town),
(neg|party_slot_eq, ":party_no", slot_town_lord, "trp_player"[/COLOR][COLOR=#000000]),
(assign, ":first_stack", 0),
(assign, ":continue", 1),
(try_end),
(eq, ":continue", 1),
(party_get_num_companion_stacks, ":num_stacks", ":party_no"),
(gt, ":num_stacks", ":first_stack"),
(assign, ":last_stack", ":num_stacks"),
# start to sort
(store_sub, ":num_times", ":num_stacks", ":first_stack"),
(try_for_range, ":unused", 0, ":num_times"),
# find highest-level troop
(assign, ":best_stack", -1),
(assign, ":best_level", -1),
(try_for_range, ":cur_stack", ":first_stack", ":last_stack"),
(party_stack_get_troop_id, ":cur_troop", ":party_no", ":cur_stack"),
(store_character_level, ":troop_level", ":cur_troop"),
(gt, ":troop_level", ":best_level"),
(assign, ":best_level", ":troop_level"),
(assign, ":best_stack", ":cur_stack"),
(try_end),
# move to the end
(try_begin),
(gt, ":best_level", -1),
(party_stack_get_troop_id, ":stack_troop", ":party_no", ":best_stack"),
(party_stack_get_size, ":stack_size", ":party_no", ":best_stack"),
(party_stack_get_num_wounded, ":num_wounded", ":party_no", ":best_stack"),
(party_remove_members, ":party_no", ":stack_troop", ":stack_size"),
(party_add_members, ":party_no", ":stack_troop", ":stack_size"),
(party_wound_members, ":party_no", ":stack_troop", ":num_wounded"),
(val_sub, ":last_stack", 1),
(try_end),
(try_end),
(try_end),
]),