("initialize_exchange_screen_extensions",
[
(store_script_param, ":troop_id", 1),
(try_begin), #MASS PRISONER TRANSFER AFTER BATTLE
(key_is_down, key_left_control), (key_is_down, key_a),
(troop_slot_eq, "trp_zann_invasion_troop", slot_adv_transfer_mode, 10),
(party_get_num_prisoner_stacks, ":num_prisoner_stacks","p_temp_party"),
(assign, ":stop_stack", -1),
(assign, ":stop_no", -1),
(try_for_range, ":stack_no", 0, ":num_prisoner_stacks"),
(eq, ":stop_stack", -1),
(party_get_free_prisoners_capacity, ":player_prisoner_capacity", "p_main_party"),
(party_prisoner_stack_get_troop_id, ":stack_troop","p_temp_party",":stack_no"),
(party_prisoner_stack_get_size, ":stack_size","p_temp_party",":stack_no"),
(try_begin),
(ge, ":player_prisoner_capacity", ":stack_size"),
(party_add_prisoners, "p_main_party", ":stack_troop", ":stack_size"),
(else_try),
(party_add_prisoners, "p_main_party", ":stack_troop", ":player_prisoner_capacity"),
(assign, ":stop_stack", ":stack_no"),
(assign, ":stop_no", ":player_prisoner_capacity"),
(try_end),
(try_end),
(try_begin),
(neq, ":stop_stack", -1),
(store_add, ":stop_stack_plus_one", ":stop_stack", 1),
(else_try),
(assign, ":stop_stack_plus_one", ":num_prisoner_stacks"),
(try_end),
(try_for_range_backwards, ":stack_no", 0, ":stop_stack_plus_one"),
(party_prisoner_stack_get_troop_id, ":stack_troop","p_temp_party",":stack_no"),
(party_prisoner_stack_get_size, ":stack_size","p_temp_party",":stack_no"),
(try_begin),
(neq, ":stop_no", -1),
(eq, ":stack_no", ":stop_stack"),
(party_remove_prisoners, "p_temp_party", ":stack_troop", ":stop_no"),
(else_try),
(party_remove_prisoners, "p_temp_party", ":stack_troop", ":stack_size"),
(try_end),
(try_end),
(try_end),
#++++++++++++++++++++++++++++++++++++++++++++++++ MASS TRANSFER OF RESCUED PRISONERS AFTER BATTLE
(try_begin),
#(display_message, "@Working!"),
(key_is_down, key_left_control), (key_is_down, key_s),
(troop_slot_eq, "trp_zann_invasion_troop", slot_adv_transfer_mode, 10),
(party_get_num_companion_stacks, ":num_companion_stacks","p_temp_party"),
(assign, ":stop_stack", -1),
(assign, ":stop_no", -1),
(try_for_range, ":stack_no", 0, ":num_companion_stacks"),
(eq, ":stop_stack", -1),
(party_get_free_companions_capacity, ":player_companion_capacity", "p_main_party"),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":stack_no"),
(party_stack_get_size, ":stack_size","p_temp_party",":stack_no"),
(try_begin),
(ge, ":player_companion_capacity", ":stack_size"),
(party_add_members, "p_main_party", ":stack_troop", ":stack_size"),
(else_try),
(party_add_members, "p_main_party", ":stack_troop", ":player_companion_capacity"),
(assign, ":stop_stack", ":stack_no"),
(assign, ":stop_no", ":player_companion_capacity"),
(try_end),
(try_end),
(try_begin),
(neq, ":stop_stack", -1),
(store_add, ":stop_stack_plus_one", ":stop_stack", 1),
(else_try),
(assign, ":stop_stack_plus_one", ":num_companion_stacks"),
(try_end),
(try_for_range_backwards, ":stack_no", 0, ":stop_stack_plus_one"),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":stack_no"),
(party_stack_get_size, ":stack_size","p_temp_party",":stack_no"),
(try_begin),
(neq, ":stop_no", -1),
(eq, ":stack_no", ":stop_stack"),
(party_remove_members, "p_temp_party", ":stack_troop", ":stop_no"),
(else_try),
(party_remove_members, "p_temp_party", ":stack_troop", ":stack_size"),
(try_end),
(try_end),
(try_end),
#++++++++++++++++++++++++++++++++++++++++++++++++ SORTING GARRISONS
(try_begin), #ARROW UP
(troop_slot_eq, "trp_zann_invasion_troop", slot_adv_transfer_mode, 12),
(troop_slot_eq, "trp_zann_invasion_troop", slot_last_requested_troop, ":troop_id"),
(key_is_down, key_up),
(party_clear, "p_temp_party"),
(call_script, "script_party_add_party_companions", "p_temp_party", "$current_town"),
(party_get_num_companion_stacks, ":num_stacks","$current_town"),
(assign, ":key_stack", -1),
(try_for_range, ":stack_no", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(try_begin),
(eq, ":stack_troop", ":troop_id"),
(neq, ":stack_no", 0), #key_up can't be used with stack 0
(assign, ":key_stack", ":stack_no"),
(try_end),
(try_end),
(neq, ":key_stack", -1),
(try_for_range_backwards, ":stack_no", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(party_stack_get_size, ":stack_size","$current_town",":stack_no"),
(party_remove_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(store_sub, ":key_stack_minus_one", ":key_stack", 1),
(store_add, ":key_stack_plus_one", ":key_stack", 1),
(try_for_range, ":stack_no", 0, ":key_stack_minus_one"),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":stack_no"),
(party_stack_get_size, ":stack_size","p_temp_party",":stack_no"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":key_stack"),
(party_stack_get_size, ":stack_size","p_temp_party",":key_stack"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":key_stack_minus_one"),
(party_stack_get_size, ":stack_size","p_temp_party",":key_stack_minus_one"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(try_for_range, ":stack_no", ":key_stack_plus_one", ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":stack_no"),
(party_stack_get_size, ":stack_size","p_temp_party",":stack_no"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(party_remove_members, "p_main_party", ":troop_id", 1),
(party_add_members, "$current_town", ":troop_id", 1),
(try_end),
(try_begin), #ARROW DOWN
(troop_slot_eq, "trp_zann_invasion_troop", slot_adv_transfer_mode, 12),
(troop_slot_eq, "trp_zann_invasion_troop", slot_last_requested_troop, ":troop_id"),
(key_is_down, key_down),
(party_clear, "p_temp_party"),
(call_script, "script_party_add_party_companions", "p_temp_party", "$current_town"),
(party_get_num_companion_stacks, ":num_stacks","$current_town"),
(store_sub, ":num_stacks_minus_one", ":num_stacks", 1),
(assign, ":key_stack", -1),
(try_for_range, ":stack_no", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(try_begin),
(eq, ":stack_troop", ":troop_id"),
(neq, ":stack_no", ":num_stacks_minus_one"), #key_down can't be used with last stack
(assign, ":key_stack", ":stack_no"),
(try_end),
(try_end),
(neq, ":key_stack", -1),
(try_for_range_backwards, ":stack_no", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(party_stack_get_size, ":stack_size","$current_town",":stack_no"),
(party_remove_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(store_add, ":key_stack_plus_one", ":key_stack", 1),
(store_add, ":key_stack_plus_two", ":key_stack", 2),
(try_for_range, ":stack_no", 0, ":key_stack"),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":stack_no"),
(party_stack_get_size, ":stack_size","p_temp_party",":stack_no"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":key_stack_plus_one"),
(party_stack_get_size, ":stack_size","p_temp_party",":key_stack_plus_one"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":key_stack"),
(party_stack_get_size, ":stack_size","p_temp_party",":key_stack"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(try_for_range, ":stack_no", ":key_stack_plus_two", ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":stack_no"),
(party_stack_get_size, ":stack_size","p_temp_party",":stack_no"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(party_remove_members, "p_main_party", ":troop_id", 1),
(party_add_members, "$current_town", ":troop_id", 1),
(try_end),
(try_begin), #PAGE UP
(troop_slot_eq, "trp_zann_invasion_troop", slot_adv_transfer_mode, 12),
(troop_slot_eq, "trp_zann_invasion_troop", slot_last_requested_troop, ":troop_id"),
(key_is_down, key_page_up),
(party_clear, "p_temp_party"),
(call_script, "script_party_add_party_companions", "p_temp_party", "$current_town"),
(party_get_num_companion_stacks, ":num_stacks","$current_town"),
(assign, ":key_stack", -1),
(try_for_range, ":stack_no", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(try_begin),
(eq, ":stack_troop", ":troop_id"),
(neq, ":stack_no", 0), #key_page_up can't be used with stack 0
(assign, ":key_stack", ":stack_no"),
(try_end),
(try_end),
(neq, ":key_stack", -1),
(try_for_range_backwards, ":stack_no", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(party_stack_get_size, ":stack_size","$current_town",":stack_no"),
(party_remove_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":key_stack"),
(party_stack_get_size, ":stack_size","p_temp_party",":key_stack"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(try_for_range, ":stack_no", 0, ":num_stacks"),
(neq, ":stack_no", ":key_stack"),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":stack_no"),
(party_stack_get_size, ":stack_size","p_temp_party",":stack_no"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(party_remove_members, "p_main_party", ":troop_id", 1),
(party_add_members, "$current_town", ":troop_id", 1),
(try_end),
(try_begin), #PAGE DOWN
(troop_slot_eq, "trp_zann_invasion_troop", slot_adv_transfer_mode, 12),
(troop_slot_eq, "trp_zann_invasion_troop", slot_last_requested_troop, ":troop_id"),
(key_is_down, key_page_down),
(party_clear, "p_temp_party"),
(call_script, "script_party_add_party_companions", "p_temp_party", "$current_town"),
(party_get_num_companion_stacks, ":num_stacks","$current_town"),
(store_sub, ":num_stacks_minus_one", ":num_stacks", 1),
(assign, ":key_stack", -1),
(try_for_range, ":stack_no", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(try_begin),
(eq, ":stack_troop", ":troop_id"),
(neq, ":stack_no", ":num_stacks_minus_one"), #key_down can't be used with last stack
(assign, ":key_stack", ":stack_no"),
(try_end),
(try_end),
(neq, ":key_stack", -1),
(try_for_range_backwards, ":stack_no", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(party_stack_get_size, ":stack_size","$current_town",":stack_no"),
(party_remove_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(try_for_range, ":stack_no", 0, ":num_stacks"),
(neq, ":stack_no", ":key_stack"),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":stack_no"),
(party_stack_get_size, ":stack_size","p_temp_party",":stack_no"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(party_stack_get_troop_id, ":stack_troop","p_temp_party",":key_stack"),
(party_stack_get_size, ":stack_size","p_temp_party",":key_stack"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(party_remove_members, "p_main_party", ":troop_id", 1),
(party_add_members, "$current_town", ":troop_id", 1),
(try_end),
#++++++++++++++++++++++++++++++++++++++++++++++++ MASSIVE TRANSFERS TO/FROM GARRISON
(try_begin), #TROOPS FROM GARRISON TO PLAYER'S PARTY
(key_is_down, key_right_control), (key_is_down, key_right),
(troop_slot_eq, "trp_zann_invasion_troop", slot_adv_transfer_mode, 12),
(party_get_num_companion_stacks, ":num_companion_stacks","$current_town"),
(assign, ":stop_stack", -1),
(assign, ":stop_no", -1),
(try_for_range, ":stack_no", 0, ":num_companion_stacks"),
(eq, ":stop_stack", -1),
(party_get_free_companions_capacity, ":player_companion_capacity", "p_main_party"),
(party_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(party_stack_get_size, ":stack_size","$current_town",":stack_no"),
(try_begin),
(ge, ":player_companion_capacity", ":stack_size"),
(party_add_members, "p_main_party", ":stack_troop", ":stack_size"),
(else_try),
(party_add_members, "p_main_party", ":stack_troop", ":player_companion_capacity"),
(assign, ":stop_stack", ":stack_no"),
(assign, ":stop_no", ":player_companion_capacity"),
(try_end),
(try_end),
(try_begin),
(neq, ":stop_stack", -1),
(store_add, ":stop_stack_plus_one", ":stop_stack", 1),
(else_try),
(assign, ":stop_stack_plus_one", ":num_companion_stacks"),
(try_end),
(try_for_range_backwards, ":stack_no", 0, ":stop_stack_plus_one"),
(party_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(party_stack_get_size, ":stack_size","$current_town",":stack_no"),
(try_begin),
(neq, ":stop_no", -1),
(eq, ":stack_no", ":stop_stack"),
(party_remove_members, "$current_town", ":stack_troop", ":stop_no"),
(else_try),
(party_remove_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(try_end),
(try_end),
(try_begin), #TROOPS FROM PLAYER'S PARTY TO GARRISON
(key_is_down, key_right_control), (key_is_down, key_left),
(troop_slot_eq, "trp_zann_invasion_troop", slot_adv_transfer_mode, 12),
(party_get_num_companion_stacks, ":num_companion_stacks","p_main_party"),
(try_for_range, ":stack_no", 0, ":num_companion_stacks"),
(party_stack_get_troop_id, ":stack_troop","p_main_party",":stack_no"),
(neg|troop_is_hero, ":stack_troop"),
(party_stack_get_size, ":stack_size","p_main_party",":stack_no"),
(party_add_members, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(try_for_range_backwards, ":stack_no", 0, ":num_companion_stacks"),
(party_stack_get_troop_id, ":stack_troop","p_main_party",":stack_no"),
(neg|troop_is_hero, ":stack_troop"),
(party_stack_get_size, ":stack_size","p_main_party",":stack_no"),
(party_remove_members, "p_main_party", ":stack_troop", ":stack_size"),
(try_end),
(try_end),
(try_begin), #PRISONERS FROM GARRISON TO PLAYER'S PARTY
(key_is_down, key_left_control), (key_is_down, key_a),
(troop_slot_eq, "trp_zann_invasion_troop", slot_adv_transfer_mode, 12),
(party_get_num_prisoner_stacks, ":num_prisoner_stacks","$current_town"),
(assign, ":stop_stack", -1),
(assign, ":stop_no", -1),
(try_for_range, ":stack_no", 0, ":num_prisoner_stacks"),
(eq, ":stop_stack", -1),
(party_get_free_prisoners_capacity, ":player_prisoner_capacity", "p_main_party"),
(party_prisoner_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(neg|troop_is_hero, ":stack_troop"),
(party_prisoner_stack_get_size, ":stack_size","$current_town",":stack_no"),
(try_begin),
(ge, ":player_prisoner_capacity", ":stack_size"),
(party_add_prisoners, "p_main_party", ":stack_troop", ":stack_size"),
(else_try),
(party_add_prisoners, "p_main_party", ":stack_troop", ":player_prisoner_capacity"),
(assign, ":stop_stack", ":stack_no"),
(assign, ":stop_no", ":player_prisoner_capacity"),
(try_end),
(try_end),
(try_begin),
(neq, ":stop_stack", -1),
(store_add, ":stop_stack_plus_one", ":stop_stack", 1),
(else_try),
(assign, ":stop_stack_plus_one", ":num_prisoner_stacks"),
(try_end),
(try_for_range_backwards, ":stack_no", 0, ":stop_stack_plus_one"),
(party_prisoner_stack_get_troop_id, ":stack_troop","$current_town",":stack_no"),
(neg|troop_is_hero, ":stack_troop"),
(party_prisoner_stack_get_size, ":stack_size","$current_town",":stack_no"),
(try_begin),
(neq, ":stop_no", -1),
(eq, ":stack_no", ":stop_stack"),
(party_remove_prisoners, "$current_town", ":stack_troop", ":stop_no"),
(else_try),
(party_remove_prisoners, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(try_end),
(try_end),
(try_begin), #PRISONERS FROM PLAYER'S PARTY TO GARRISON
(key_is_down, key_left_control), (key_is_down, key_d),
(troop_slot_eq, "trp_zann_invasion_troop", slot_adv_transfer_mode, 12),
(party_get_num_prisoner_stacks, ":num_prisoner_stacks","p_main_party"),
(try_for_range, ":stack_no", 0, ":num_prisoner_stacks"),
(party_prisoner_stack_get_troop_id, ":stack_troop","p_main_party",":stack_no"),
(neg|troop_is_hero, ":stack_troop"),
(party_prisoner_stack_get_size, ":stack_size","p_main_party",":stack_no"),
(party_add_prisoners, "$current_town", ":stack_troop", ":stack_size"),
(try_end),
(try_for_range_backwards, ":stack_no", 0, ":num_prisoner_stacks"),
(party_prisoner_stack_get_troop_id, ":stack_troop","p_main_party",":stack_no"),
(neg|troop_is_hero, ":stack_troop"),
(party_prisoner_stack_get_size, ":stack_size","p_main_party",":stack_no"),
(party_remove_prisoners, "p_main_party", ":stack_troop", ":stack_size"),
(try_end),
(try_end),
]
),