At the end of header_parties.py, insert the following:
#------LYX-COMPANION-PARTIES----------------------------
hold_personality = aggressiveness_0 | courage_15
#------LYX-COMPANION-PARTIES----------------------------
In module_dialogs.py, after the line...
[anyone|plyr,"member_castellan_talk", [], "[Leave]", "close_window",[]],
...insert the following:
#---LYX-BEGIN-COMPANION-PARTIES----------------------------------------
[anyone,"start", [(is_between, "$g_talk_troop", companions_begin, companions_end),
(store_encountered_party,"$temp"),
(party_get_template_id, ":partytemplate", "$temp"),
(eq, "$talk_context", tc_party_encounter),
(eq, ":partytemplate", "pt_player_patrol")
],
"Yes?", "memberparty_talk",[(assign, "$g_leave_encounter", 1)]],
[anyone|plyr,"memberparty_talk", [],"I have a task for you.", "memberparty_order_ask",[]],
[anyone,"memberparty_order_ask", [], "What do you wish?", "memberparty_order",[]],
[anyone|plyr,"memberparty_order", [],"Follow me.","memberparty_follow",[]],
[anyone,"memberparty_follow", [],"All right. i'll be right behind you.","close_window",[
(party_set_ai_object,"$temp","p_main_party"),
(party_set_ai_behavior,"$temp",ai_bhvr_escort_party)
]],
[anyone|plyr,"memberparty_order", [],"Wait here.","memberparty_stay",[]],
[anyone,"memberparty_stay", [],"Okay, we'll hold this position.","close_window",[
(party_set_ai_behavior,"$temp",ai_bhvr_hold),
(party_get_position, pos1, "$temp"),
(party_set_ai_target_position,"$temp",pos1)
]],
[anyone|plyr,"memberparty_order", [],"Patrol this area.","memberparty_patrol",[]],
[anyone,"memberparty_patrol", [],"All right.","close_window",[
(party_set_ai_behavior,"$temp",ai_bhvr_patrol_location),
(party_get_position, pos1, "$temp"),
(party_set_ai_target_position,"$temp",pos1)
]],
[anyone|plyr,"memberparty_order", [],"Go to...", "memberparty_order_details_ask",[(assign, "$temp_1", spai_holding_center),]],
[anyone|plyr,"memberparty_order", [],"Patrol around...", "memberparty_order_details_ask",[(assign, "$temp_1", spai_patrolling_around_center),]],
[anyone|plyr,"memberparty_order", [],"Forget it.", "memberparty_pre_talk",[]],
[anyone,"memberparty_order_details_ask", [], "Where?", "memberparty_order_details",[]],
[anyone|plyr|repeat_for_parties, "memberparty_order_details",
[
(store_repeat_object, ":party_no"),
(assign, ":continue", 0),
(try_begin),
(eq, "$temp_1", spai_holding_center),
(try_begin),
(this_or_next|party_slot_eq, ":party_no", slot_party_type, spt_castle),
(party_slot_eq, ":party_no", slot_party_type, spt_town),
(assign, ":continue", 1),
(try_end),
(else_try),
(eq, "$temp_1", spai_patrolling_around_center),
(try_begin),
(is_between, ":party_no", centers_begin, centers_end),
(assign, ":continue", 1),
(try_end),
(try_end),
(eq, ":continue", 1),
(neq, ":party_no", "$g_encountered_party"),
(str_store_party_name, s1, ":party_no")
],
"{s1}", "memberparty_order_details_done", [ (store_repeat_object, "$temp_2") ]
],
[anyone,"memberparty_order_details_done", [],"All right.","close_window",[
(try_begin),
(eq,"$temp_1", spai_holding_center),
(party_set_ai_behavior,"$temp",ai_bhvr_travel_to_point),
(party_get_position, pos1, "$temp_2"),
(map_get_land_position_around_position, pos1, pos1,1),
(party_set_ai_target_position,"$temp",pos1),
(try_end),
(try_begin),
(eq,"$temp_1", spai_patrolling_around_center),
(party_set_ai_behavior,"$temp",ai_bhvr_patrol_party),
(party_set_ai_object,"$temp","$temp_2"),
(party_set_ai_patrol_radius ,"$temp",1),
(try_end)
]],
[anyone|plyr,"memberparty_talk", [], "I want to discuss troop-management with you.", "memberparty_troops_done", [
(call_script,"script_game_get_party_companion_limit",3),
(display_message, "@allowed party size {reg0}"),
(change_screen_give_members)
]],
[anyone,"memberparty_troops_done", [], "Okay.", "memberparty_pre_talk",[
(store_encountered_party,":cur_party"),
(call_script,"script_cf_fix_party_size",":cur_party",1)
]],
[anyone,"memberparty_pre_talk", [], "Anything else you want to discuss?", "memberparty_talk",[]],
[anyone|plyr,"memberparty_talk", [], "I want to you to join me again.", "memberparty_rejoin",[]],
[anyone,"memberparty_rejoin", [(party_can_join)], "Very well, it will be nice traveling together again.", "close_window",[(party_join)]],
[anyone,"memberparty_rejoin", [(neg|party_can_join)], "I'm sorry, but you currently do not have enough capacity.","memberparty_talk",[]],
[anyone|plyr,"memberparty_talk", [], "Nevermind.", "close_window",[]],
#---LYX-END-COMPANION-PARTIES------------------------------------------
In module_dialogs.py, after the line...
[anyone|plyr,"member_talk", [], "I'd like to ask you something.", "member_question",[]],
...insert the following:
#---LYX-BEGIN-COMPANION-PARTIES----------------------------------------
[anyone|plyr,"member_talk", [(is_between, "$g_talk_troop", companions_begin, companions_end)],
"I want you to form a warband.", "member_create_party",[]],
[anyone,"member_create_party", [], "Great, but i hope you give me some good troops.","close_window",[
(store_conversation_troop,":member"),
(remove_member_from_party,":member"),
(set_spawn_radius,1),
(spawn_around_party,"p_main_party","pt_player_patrol"),
(assign, ":party", reg(0)),
(party_set_ai_behavior, ":party", ai_bhvr_hold),
(troop_set_slot, ":member", slot_troop_leaded_party, ":party"),
(party_add_leader, ":party", ":member"),
(str_store_troop_name, s5, ":member"),
(party_set_name, ":party", "@{s5}'s Party")
]],
#---LYX-END-COMPANION-PARTIES------------------------------------------
In module_game_menus.py, search for the line...
"total_victory",0,
...and in this menu item further down for the lines...
(try_begin),
(gt, "$g_ally_party", 0),
(call_script, "script_party_add_party", "$g_ally_party", "p_temp_party"), #Add remaining prisoners to ally TODO: FIX it.
...immediately below this, insert the following:
#---LYX-COMPANION-PARTIES----------------------------------------------
(call_script,"script_cf_fix_party_size", "$g_ally_party",0),
#---END-COMPANION-PARTIES----------------------------------------------
Just a bit below, find the lines...
(else_try),
(party_get_num_attached_parties, ":num_quick_attachments", "p_main_party"),
(gt, ":num_quick_attachments", 0),
(party_get_attached_party_with_rank, ":helper_party", "p_main_party", 0),
(call_script, "script_party_add_party", ":helper_party", "p_temp_party"), #Add remaining prisoners to our reinforcements
...immediatelly below those, insert the following:
#---LYX-COMPANION-PARTIES----------------------------------------------
(call_script,"script_cf_fix_party_size", ":helper_party",0),
#---LYX-COMPANION-PARTIES----------------------------------------------
In module_party_templates.py, after the "looters" party, insert the following:
#-LYX-COMPANION-PARTIES------------------------------------------------
("player_patrol","Patrol",icon_gray_knight,0,fac_player_faction,hold_personality,[]),
#-LYX-COMPANION-PARTIES------------------------------------------------
In module_scripts.py, search for "game_event_simulate_battle". This is a long one. Locate the following lines...
(try_begin),
(ge, ":collective_casualties", 0),
(party_clear, "p_temp_party"),
(assign, "$g_move_heroes", 0), #heroes are already processed above. Skip them here.
(call_script, "script_party_add_party_prisoners", "p_temp_party", ":collective_casualties"),
(call_script, "script_party_prisoners_add_party_companions", "p_temp_party", ":collective_casualties"),
(distribute_party_among_party_group, "p_temp_party", ":root_winner_party"),
(call_script, "script_clear_party_group", ":root_defeated_party"),
...Immediately below those, insert the following:
#---LYX-COMPANION-PARTIES----------------------------------------------
(call_script,"script_cf_fix_party_size", "p_temp_party",0),
#---LYX-COMPANION-PARTIES----------------------------------------------
In module_scripts.py, search for "let_nearby_parties_join_current_battle". In this, locate the following lines...
(party_quick_attach_to_current_battle, ":party_no", ":enemy_side"), #attach as enemy
(str_store_party_name, s1, ":party_no"),
(display_message, "str_s1_joined_battle_enemy"),
...immediately below those, insert the following:
#---BEGIN-LYX-COMPANION-PARTIES----------------------------------------
(else_try),
(eq, ":dont_add_friends", 0),
(party_get_template_id, ":partytemplate", ":party_no"),
(eq, ":partytemplate", "pt_player_patrol"),
(party_quick_attach_to_current_battle, ":party_no", 0), #attach as ally
(str_store_party_name, s1, ":party_no"),
(display_message, "str_s1_joined_battle_friend"),
#---END-LYX-COMPANION-PARTIES------------------------------------------
In module_scripts.py, search for the following line...
(faction_set_name, "fac_player_supporters_faction", "@{s1} Rebels"),
...immediatelly below this, insert the following:
#---BEGIN-LYX-Player Kingdomname without "...rebels"---------
(try_begin),
(le, "$supported_pretender", 0),
(faction_set_name, "fac_player_supporters_faction", "@Kingdom of {playername}"),
(try_end),
#---END-LYX-Player Kingdomname without "...rebels"-----------
At the end of module_scripts.py, but before the closing ], insert the following:
#---BEGIN-LYX-COMPANION-PARTIES----------------------------------------
#identify party as patrol
#input: party
#output: reg0
#0 yes, 1 no
("cf_is_patrol",
[
(store_script_param, ":cur_party", 1),
(assign,reg0,0),
(store_faction_of_party,":cur_faction",":cur_party"),
(eq, ":cur_faction", "fac_player_faction"),
(party_stack_get_troop_id,":cur_troop",":cur_party",0),
(neq,":cur_troop","trp_player"),
(try_for_range,":num",companions_begin,heroes_end),
(eq,":cur_troop",":num"),
(assign, reg0,1),
(try_end),
]
),
#find all patrols and count them
#input: none
#output: reg0
#amount of existing patrols
("check_for_patrols",
[
(assign,":num",0),
(try_for_parties,":cur_party"),
(call_script, "script_cf_is_patrol",":cur_party"),
(eq,reg0,0),
(val_add,":num",1),
(try_end),
(assign,reg0,":num"),
]
),
#enforce patrol party size limit
#it is assumed that the party prisoner limit equals zero
#except for npc prisoners
#input: party, mode
#mode 0: delete all troops w/o doing anything else
#mode 1: all deleted troops are being added to the player party
#output: none (it uses reg0, but the information is useless outside of this script and its recursive brother)
("cf_fix_party_size",
[
(store_script_param, ":cur_party", 1),
(store_script_param, ":mode", 2),
(call_script, "script_cf_is_patrol",":cur_party"),
(try_begin),
(eq,reg0,0),
(call_script,"script_game_get_party_companion_limit",3),
(call_script,"script_cf_fix_party_size_recursive",":cur_party",":mode"),
(assign,":bool",0),
(party_get_num_prisoner_stacks, ":num_stacks",":cur_party"),
(try_for_range_backwards,":index",0,":num_stacks"),
(party_prisoner_stack_get_troop_id,":cur_troop",":cur_party",":index"),
(party_prisoner_stack_get_size,":cur_size",":cur_party",":index"),
(try_for_range,":num",companions_begin,heroes_end),
(eq,":cur_troop",":num"),
(assign,":bool",1),
(try_end),
(try_begin),
(neq,":bool",1),
(party_remove_prisoners,":cur_party",":cur_troop",":cur_size"),
(try_end),
(try_end),
(try_end),
]
),
#a while do loop for cf_fix_party_size
#don't use it outside of the previous script
("cf_fix_party_size_recursive", #I am not exactly happy about the recursive
[
(store_script_param, ":cur_party", 1),
(store_script_param, ":mode", 2),
(assign,":reg0_backup",reg0),
(store_party_size_wo_prisoners,":num",":cur_party"),
(try_begin),
(gt,":num",reg0),
(neq,0,reg0),
(store_sub,":delta",":num",reg0),
(party_get_num_companion_stacks,":num_stacks",":cur_party"),
(assign, ":to_del_stack",0),
(assign, ":checker", 100),
(try_for_range,":index",0,":num_stacks"),
(party_stack_get_troop_id,":cur_troop",":cur_party",":index"),
(store_character_level,":cur_level",":cur_troop"),
(le,":cur_level",":checker"),
(assign,":checker",":cur_level"),
(assign,":to_del_stack",":index"),
(try_end),
(party_stack_get_size,":num_troop",":cur_party",":to_del_stack"),
(party_stack_get_troop_id,":cur_troop",":cur_party",":to_del_stack"),
(try_begin),
(le,":num_troop",":delta"),
(assign, ":delta", ":num_troop"),
(try_end),
(party_remove_members,":cur_party",":cur_troop",":delta"),
(try_begin),
(eq,":mode",1),
(party_add_members,"p_main_party",":cur_troop",":delta"),
(try_end),
(assign,reg0,":reg0_backup"),
(call_script,"script_cf_fix_party_size_recursive",":cur_party",":mode"),
(try_end),
]
),
#---END-LYX-COMPANION-PARTIES------------------------------------------