("cf_formation",
[(team_get_leader, ":teamleader", reg0),
(gt,":teamleader",-1),
(assign,":leader",-1),
(agent_get_class,":class",":teamleader"),
(try_begin),
(eq,":class",reg1),
(get_player_agent_no,":player"),
(neq,":teamleader",":player"),
(assign,":leader",":teamleader"),
(else_try),
(call_script,"script_choose_formation_leader"),
(gt,reg2,-1),
(assign,":leader",reg2),
(end_try),
(gt,":leader",-1),
(agent_get_position,1,":leader"),
(position_move_x,1,100),
(assign,":collumn",1),
(try_for_agents,reg(5)),
(neq,reg5,":leader"),
(agent_is_alive,reg(5)),
(agent_is_human,reg(5)),
(agent_get_team ,":team", reg5),
(eq,":team",reg0),
(agent_get_class ,":class", reg5),
(eq,":class",reg1),
(agent_set_scripted_destination,reg(5),1),
(position_move_x,1,100),
(try_begin),
(eq,":collumn",12),
(position_move_x,1,-12*100),
(position_move_y,1,-200),
(assign,":collumn",1),
(else_try),
(val_add,":collumn",1),
(end_try),
(end_try)]),
("cf_formation_stagger",
[(team_get_leader, ":teamleader", reg0),
(gt,":teamleader",-1),
(assign,":leader",-1),
(agent_get_class,":class",":teamleader"),
(try_begin),
(eq,":class",reg1),
(get_player_agent_no,":player"),
(neq,":teamleader",":player"),
(assign,":leader",":teamleader"),
(else_try),
(call_script,"script_choose_formation_leader"),
(gt,reg2,-1),
(assign,":leader",reg2),
(end_try),
(gt,":leader",-1),
(agent_get_position,1,":leader"),
(position_move_x,1,100),
(assign,":move_y",-100),
(try_for_agents,reg(5)),
(neq,reg5,":leader"),
(agent_is_alive,reg(5)),
(agent_is_human,reg(5)),
(agent_get_team ,":team", reg5),
(eq,":team",reg0),
(agent_get_class ,":class", reg5),
(eq,":class",reg1),
(agent_set_scripted_destination,reg(5),1),
(position_move_x,1,100),
(position_move_y,1,":move_y"),
(val_mul,":move_y",-1),
(end_try)]),
("cf_formation_wedge",
[(team_get_leader, ":teamleader", reg0),
(gt,":teamleader",-1),
(assign,":leader",-1),
(agent_get_class,":class",":teamleader"),
(try_begin),
(eq,":class",reg1),
(get_player_agent_no,":player"),
(neq,":teamleader",":player"),
(assign,":fail",0),
(try_for_range,":ranged_item","itm_jarid","itm_flintlock_pistol"),
(agent_has_item_equipped,":teamleader",":ranged_item"),
(assign,":fail",1),
(end_try),
(eq,":fail",0),
(assign,":leader",":teamleader"),
(else_try),
(assign,reg2,-1),
(assign,":max_xp",0),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_is_human,":agent"),
(agent_get_team,":team",":agent"),
(eq,":team",reg0),
(agent_get_class,":class",":agent"),
(eq,":class",reg1),
(get_player_agent_no,":player"),
(neq,":player",":agent"),
(assign,":fail",0),
(try_for_range,":ranged_item","itm_jarid","itm_flintlock_pistol"),
(agent_has_item_equipped,":agent",":ranged_item"),
(assign,":fail",1),
(end_try),
(eq,":fail",0),
(agent_get_troop_id,":troop", ":agent"),
(troop_get_xp, ":xp", ":troop"),
(gt,":xp",":max_xp"),
(assign,":max_xp",":xp"),
(assign,reg2,":agent"),
(end_try),
(gt,reg2,-1),
(assign,":leader",reg2),
(end_try),
(gt,":leader",-1),
(agent_get_position,1,":leader"),
(assign,":collumn",1),
(assign,":nc",3),
(position_move_x,1,-150),
(try_for_agents,reg(5)),
(neq,reg5,":leader"),
(agent_is_alive,reg(5)),
(agent_is_human,reg(5)),
(agent_get_team ,":team", reg5),
(eq,":team",reg0),
(agent_get_class ,":class", reg5),
(eq,":class",reg1),
(assign,":fail",0),
(try_for_range,":ranged_item","itm_jarid","itm_flintlock_pistol"),
(agent_has_item_equipped,reg5,":ranged_item"),
(assign,":fail",1),
(end_try),
(eq,":fail",0),
(agent_set_scripted_destination,reg(5),1),
(try_begin),
(eq,":collumn",":nc"),
(val_mul,":nc",-150),
(position_move_x,1,":nc"),
(position_move_y,1,-300),
(assign,":collumn",1),
(val_div,":nc",-150),
(val_add,":nc",2),
(else_try),
(position_move_x,1,150),
(val_add,":collumn",1),
(end_try),
(end_try)]),
("formation_end",
[(try_for_agents,reg(5)),
(agent_is_alive,reg(5)),
(agent_is_human,reg(5)),
(agent_get_team ,":team", reg5),
(eq,":team",reg0),
(agent_get_class ,":class", reg5),
(eq,":class",reg1),
(agent_clear_scripted_mode,reg5),
(try_end),]),
("choose_formation_leader",
[(assign,reg2,-1),
(assign,":max_xp",0),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_is_human,":agent"),
(agent_get_team,":team",":agent"),
(eq,":team",reg0),
(agent_get_class,":class",":agent"),
(eq,":class",reg1),
(get_player_agent_no,":player"),
(neq,":player",":agent"),
(agent_get_troop_id,":troop", ":agent"),
(troop_get_xp, ":xp", ":troop"),
(gt,":xp",":max_xp"),
(assign,":max_xp",":xp"),
(assign,reg2,":agent"),
(end_try),]),
#script_healthbars
("healthbars",
[
(assign,reg1,"$allies_coh_base"),
(assign,reg2,"$enemies_coh"),
(assign,reg3,"$new_kills"),
(display_message,"@Your troops are at {reg1}% cohesion (+{reg3}% bonus), the enemy at {reg2}%!",0x6495ed),
]),
#script_morale_check
("morale_check",
[
(try_begin),
(lt,"$allies_coh",80),
(store_random_in_range,":routed",1,101),
(assign,":chance_ply",85),
(val_sub,":chance_ply","$allies_coh"),
(try_begin),
(le,":routed",":chance_ply"),
(display_message,"@Morale of your troops wavers!",0xff4040),
(call_script, "script_flee_allies"),
(try_end),
(try_end),
(try_begin),
(lt,"$enemies_coh",80),
(store_random_in_range,":routed",1,101),
(assign,":chance_ply",85),
(val_sub,":chance_ply","$enemies_coh"),
(try_begin),
(le,":routed",":chance_ply"),
(display_message,"@Morale of your enemies wavers!",0x7ccd7c),
(call_script, "script_flee_enemies"),
(try_end),
(try_end),
]),
#script_battle_cry
("battle_cry",
[
(store_skill_level,":leader","skl_leadership","trp_player"),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_is_human,":agent"),
(agent_is_ally,":agent"),
(store_agent_hit_points,":hitpoints",":agent",0),
(try_begin),
(le,":hitpoints",80),
(val_add,":hitpoints",":leader"),
(val_add,":hitpoints",10),
(agent_set_hit_points,":agent",":hitpoints"),
(try_end),
(end_try),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_is_human,":agent"),
(agent_is_ally,":agent"),
(store_agent_hit_points,":hitpoints",":agent",0),
(val_sub,":hitpoints",10),
(store_random_in_range,":routed",1,101),
(try_begin),
(le,":routed",":hitpoints"),
(agent_clear_scripted_mode,":agent"),
(try_end),
(end_try),
]),
("rally",
[
#(display_message,"@Your enemies rally to rejoin the battle!",0xff4040),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_is_human,":agent"),
(store_agent_hit_points,":hitpoints",":agent",0),
#(val_sub,":hitpoints",10),
(store_random_in_range,":routed",1,101),
(try_begin),
(le,":routed",":hitpoints"),
(agent_clear_scripted_mode,":agent"),
(try_end),
(end_try),
]),
#script_rout_check
("rout_check",
[
(assign,":ally","$allies_coh"),
#(assign,reg2,"$allies_coh"),
#(display_message,"@allies {reg2}% cohesion!"),
(assign,":enemy","$enemies_coh"),
#(assign,reg2,"$enemies_coh"),
#(display_message,"@enemies {reg2}% cohesion!"),
(val_sub,":ally",":enemy"),
#(assign,reg2,":ally"),
#(display_message,"@difference {reg2}."),
(try_begin),
(ge,":ally",40),
(display_message,"@Your enemies flee in terror!",0x7ccd7c),
(call_script, "script_rout_enemies"),
(assign,"$airout",1),
(try_end),
(try_begin),
(le,":ally",-40),
(display_message,"@Your troops flee in terror!",0xff4040),
(call_script, "script_rout_allies"),
(assign,"$rout",1),
(try_end),
]),
## script_flee
("flee_allies",
[
(get_scene_boundaries, pos3, pos4),
(position_get_x,":xmin",pos3),
(position_get_y,":ymin",pos3),
(position_get_x,":xmax",pos4),
(position_get_y,":ymax",pos4),
(val_div,":xmin",100),
(val_div,":xmax",100),
(store_random_in_range,":xrout_point3",":xmin",":xmax"),
(val_mul,":xrout_point3",100),
(store_random_in_range,":yrout_point3",":xmin",":xmax"),
(val_mul,":yrout_point3",100),
(store_random_in_range,":xrout_point4",":xmin",":xmax"),
(val_mul,":xrout_point4",100),
(store_random_in_range,":yrout_point4",":xmin",":xmax"),
(val_mul,":yrout_point4",100),
(val_mul,":xmin",100),
(val_mul,":xmax",100),
(val_add,":xrout_point3",":xmin"),
(val_add,":xrout_point3",":xmin"),
(val_add,":xrout_point3",":xmin"),
(val_div,":xrout_point3",4),
(position_set_x,pos3,":xrout_point3"),
(val_add,":yrout_point3",":ymin"),
(val_add,":yrout_point3",":ymin"),
(val_add,":yrout_point3",":ymin"),
(val_div,":yrout_point3",4),
(position_set_y,pos3,":yrout_point3"),
(val_add,":xrout_point4",":xmax"),
(val_add,":xrout_point4",":xmax"),
(val_add,":xrout_point4",":xmax"),
(val_div,":xrout_point4",4),
(position_set_x,pos4,":xrout_point4"),
(val_add,":yrout_point4",":ymax"),
(val_add,":yrout_point4",":ymax"),
(val_add,":yrout_point4",":ymax"),
(val_div,":yrout_point4",4),
(position_set_y,pos4,":yrout_point4"),
(store_skill_level,":leader","skl_leadership","trp_player"),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_is_human,":agent"),
(agent_is_ally,":agent"),
(store_agent_hit_points,":hitpoints",":agent",0),
(agent_get_troop_id,":troop_type", ":agent"),
(store_character_level, ":troop_level", ":troop_type"),
(val_div,":troop_level",10),
(val_add,":hitpoints",":troop_level"),
(assign,":chance_ply",100),
(val_sub,":chance_ply",":hitpoints"),
(val_sub,":chance_ply",":leader"),
(val_div,":chance_ply",2),
(store_random_in_range,":routed",1,101),
(try_begin),
(le,":routed",":chance_ply"),
# (display_message,"@One ally runs!"),
(agent_get_position,pos2,":agent"),
(position_move_z,pos2,200,0),
(agent_clear_scripted_mode,":agent"),
(agent_set_scripted_destination,":agent",pos4,1),
(try_end),
(end_try),
]),
("flee_enemies",
[
(get_scene_boundaries, pos3, pos4),
(position_get_x,":xmin",pos3),
(position_get_y,":ymin",pos3),
(position_get_x,":xmax",pos4),
(position_get_y,":ymax",pos4),
(val_div,":xmin",100),
(val_div,":xmax",100),
(store_random_in_range,":xrout_point3",":xmin",":xmax"),
(val_mul,":xrout_point3",100),
(store_random_in_range,":yrout_point3",":xmin",":xmax"),
(val_mul,":yrout_point3",100),
(store_random_in_range,":xrout_point4",":xmin",":xmax"),
(val_mul,":xrout_point4",100),
(store_random_in_range,":yrout_point4",":xmin",":xmax"),
(val_mul,":yrout_point4",100),
(val_mul,":xmin",100),
(val_mul,":xmax",100),
(val_add,":xrout_point3",":xmin"),
(val_add,":xrout_point3",":xmin"),
(val_add,":xrout_point3",":xmin"),
(val_div,":xrout_point3",4),
(position_set_x,pos3,":xrout_point3"),
(val_add,":yrout_point3",":ymin"),
(val_add,":yrout_point3",":ymin"),
(val_add,":yrout_point3",":ymin"),
(val_div,":yrout_point3",4),
(position_set_y,pos3,":yrout_point3"),
(val_add,":xrout_point4",":xmax"),
(val_add,":xrout_point4",":xmax"),
(val_add,":xrout_point4",":xmax"),
(val_div,":xrout_point4",4),
(position_set_x,pos4,":xrout_point4"),
(val_add,":yrout_point4",":ymax"),
(val_add,":yrout_point4",":ymax"),
(val_add,":yrout_point4",":ymax"),
(val_div,":yrout_point4",4),
(position_set_y,pos4,":yrout_point4"),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_is_human,":agent"),
(neg|agent_is_ally,":agent"),
(store_agent_hit_points,":hitpoints",":agent",0),
(agent_get_troop_id,":troop_type", ":agent"),
(store_character_level, ":troop_level", ":troop_type"),
(val_div,":troop_level",10),
(val_add,":hitpoints",":troop_level"),
(assign,":chance_ply",100),
(val_sub,":chance_ply",":hitpoints"),
(val_sub,":chance_ply",4),
(val_div,":chance_ply",2),
(store_random_in_range,":routed",1,101),
(try_begin),
(le,":routed",":chance_ply"),
# (display_message,"@One enemy runs!"),
(agent_get_position,pos2,":agent"),
(position_move_z,pos2,200,0),
(agent_clear_scripted_mode,":agent"),
(agent_set_scripted_destination,":agent",pos3,1),
(try_end),
(end_try),
]),
## script_rout
("rout_allies",
[
(get_scene_boundaries, pos3, pos4),
(position_get_x,":xmin",pos3),
(position_get_y,":ymin",pos3),
(position_get_x,":xmax",pos4),
(position_get_y,":ymax",pos4),
(val_div,":xmin",100),
(val_div,":xmax",100),
(store_random_in_range,":xrout_point3",":xmin",":xmax"),
(val_mul,":xrout_point3",100),
(store_random_in_range,":yrout_point3",":xmin",":xmax"),
(val_mul,":yrout_point3",100),
(store_random_in_range,":xrout_point4",":xmin",":xmax"),
(val_mul,":xrout_point4",100),
(store_random_in_range,":yrout_point4",":xmin",":xmax"),
(val_mul,":yrout_point4",100),
(val_mul,":xmin",100),
(val_mul,":xmax",100),
(val_add,":xrout_point3",":xmin"),
(val_add,":xrout_point3",":xmin"),
(val_add,":xrout_point3",":xmin"),
(val_div,":xrout_point3",4),
(position_set_x,pos3,":xrout_point3"),
(val_add,":yrout_point3",":ymin"),
(val_add,":yrout_point3",":ymin"),
(val_add,":yrout_point3",":ymin"),
(val_div,":yrout_point3",4),
(position_set_y,pos3,":yrout_point3"),
(val_add,":xrout_point4",":xmax"),
(val_add,":xrout_point4",":xmax"),
(val_add,":xrout_point4",":xmax"),
(val_div,":xrout_point4",4),
(position_set_x,pos4,":xrout_point4"),
(val_add,":yrout_point4",":ymax"),
(val_add,":yrout_point4",":ymax"),
(val_add,":yrout_point4",":ymax"),
(val_div,":yrout_point4",4),
(position_set_y,pos4,":yrout_point4"),
(store_skill_level,":leader","skl_leadership","trp_player"),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_is_human,":agent"),
(agent_is_ally,":agent"),
(store_agent_hit_points,":hitpoints",":agent",0),
(agent_get_troop_id,":troop_type", ":agent"),
(store_character_level, ":troop_level", ":troop_type"),
(val_div,":troop_level",10),
(val_div,":hitpoints",3),
(assign,":chance_ply",100),
(val_sub,":chance_ply",":hitpoints"),
(val_sub,":chance_ply",":leader"),
(val_sub,":chance_ply",":troop_level"),
(store_random_in_range,":routed",1,101),
(try_begin),
(le,":routed",":chance_ply"),
# (display_message,"@One ally runs!"),
(agent_get_position,pos2,":agent"),
(position_move_z,pos2,200,0),
(agent_clear_scripted_mode,":agent"),
(agent_set_scripted_destination,":agent",pos4,1),
(try_end),
(end_try),
]),
("rout_enemies",
[
(get_scene_boundaries, pos3, pos4),
(position_get_x,":xmin",pos3),
(position_get_y,":ymin",pos3),
(position_get_x,":xmax",pos4),
(position_get_y,":ymax",pos4),
(val_div,":xmin",100),
(val_div,":xmax",100),
(store_random_in_range,":xrout_point3",":xmin",":xmax"),
(val_mul,":xrout_point3",100),
(store_random_in_range,":yrout_point3",":xmin",":xmax"),
(val_mul,":yrout_point3",100),
(store_random_in_range,":xrout_point4",":xmin",":xmax"),
(val_mul,":xrout_point4",100),
(store_random_in_range,":yrout_point4",":xmin",":xmax"),
(val_mul,":yrout_point4",100),
(val_mul,":xmin",100),
(val_mul,":xmax",100),
(val_add,":xrout_point3",":xmin"),
(val_add,":xrout_point3",":xmin"),
(val_add,":xrout_point3",":xmin"),
(val_div,":xrout_point3",4),
(position_set_x,pos3,":xrout_point3"),
(val_add,":yrout_point3",":ymin"),
(val_add,":yrout_point3",":ymin"),
(val_add,":yrout_point3",":ymin"),
(val_div,":yrout_point3",4),
(position_set_y,pos3,":yrout_point3"),
(val_add,":xrout_point4",":xmax"),
(val_add,":xrout_point4",":xmax"),
(val_add,":xrout_point4",":xmax"),
(val_div,":xrout_point4",4),
(position_set_x,pos4,":xrout_point4"),
(val_add,":yrout_point4",":ymax"),
(val_add,":yrout_point4",":ymax"),
(val_add,":yrout_point4",":ymax"),
(val_div,":yrout_point4",4),
(position_set_y,pos4,":yrout_point4"),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_is_human,":agent"),
(neg|agent_is_ally,":agent"),
(store_agent_hit_points,":hitpoints",":agent",0),
(agent_get_troop_id,":troop_type", ":agent"),
(store_character_level, ":troop_level", ":troop_type"),
(val_div,":troop_level",10),
(val_div,":hitpoints",3),
(assign,":chance_ply",100),
(val_sub,":chance_ply",":hitpoints"),
(val_sub,":chance_ply",3), ## AI's Leadership bonus
(val_sub,":chance_ply",":troop_level"),
(store_random_in_range,":routed",1,101),
(try_begin),
(le,":routed",":chance_ply"),
# (display_message,"@One enemy runs!"),
(agent_get_position,pos2,":agent"),
(position_move_z,pos2,200,0),
(agent_clear_scripted_mode,":agent"),
(agent_set_scripted_destination,":agent",pos3,1),
(try_end),
(end_try),
]),
#script_coherence
("coherence",
[
(get_scene_boundaries, pos3, pos4),
(assign,":num_allies",0),
(assign,":coh_allies",0),
(assign,":num_enemies",0),
(assign,":coh_enemies",0),
(try_for_agents,":agent"),
(agent_is_ally,":agent"),
(agent_is_human,":agent"),
(store_agent_hit_points,":hitpoints",":agent",0),
(agent_get_troop_id,":troop_type", ":agent"),
(store_character_level, ":troop_level", ":troop_type"),
# (val_div,":troop_level",10),
(val_mul,":hitpoints",":troop_level"),
(val_add,":num_allies",":troop_level"),
(val_add,":coh_allies",":hitpoints"),
(else_try),
(agent_is_human,":agent"),
(store_agent_hit_points,":hitpoints",":agent",0),
(agent_get_troop_id,":troop_type", ":agent"),
(store_character_level, ":troop_level", ":troop_type"),
# (val_div,":troop_level",10),
(val_mul,":hitpoints",":troop_level"),
(val_add,":num_enemies",":troop_level"),
(val_add,":coh_enemies",":hitpoints"),
(end_try),
(val_div,":coh_allies",":num_allies"),
(assign,"$allies_coh_base",":coh_allies"),
(assign,"$allies_coh","$allies_coh_base"),
(val_add,"$allies_coh","$new_kills"),
(val_div,":coh_enemies",":num_enemies"),
(assign,"$enemies_coh",":coh_enemies"),
]),
#script_hero_exp_penalty
("hero_exp_penalty",
[(store_character_level,":level","trp_player"),
(val_mul,":level",-20),
(add_xp_to_troop,":level","trp_player"),
(assign,reg1,":level"),
(display_message, "@You lost {reg1} experience points.",0x8fbc8f),
]),