#script_party_calculate_strength:
# INPUT: arg1 = party_id, arg2 = exclude leader
# OUTPUT: reg0 = strength
("party_calculate_strength",
[
(store_script_param_1, ":party"), #Party_id
(store_script_param_2, ":exclude_leader"), #Party_id
(assign, reg0,0),
(party_get_num_companion_stacks, ":num_stacks", ":party"),
(assign, ":first_stack", 0),
#TEMPERED ADDED FOR ENTRENCHMENT BONUS
(assign,":entrench",0),
(try_begin),
(eq,":party","p_main_party"),
(party_get_slot,":entrench","p_main_party",slot_party_entrenched),
(try_end),
#TEMPERED CHANGES END
(try_begin),
(neq, ":exclude_leader", 0),
(assign, ":first_stack", 1),
(try_end),
(assign, reg0,0),
(try_for_range, ":i_stack", ":first_stack", ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop",":party", ":i_stack"),
(store_character_level, ":stack_strength", ":stack_troop"),
#TEMPERED# ADDED BONUS FOR HEROES, BONUSES ARE FOR MORE REALISTIC AUTOCALC BATTLE RESULTS
(try_begin),
(troop_is_hero, ":stack_troop"),
(val_add, ":stack_strength", 2),
(try_end),
#TEMPERED# ADD BONUS FOR MOUNTED TROOPS
(try_begin),
(troop_is_mounted, ":stack_troop"),
(val_add, ":stack_strength", 5),
(try_end),
#TEMPERED# ADD BONUS FOR HIGH LEVEL TROOPS
(store_div,":strength_bonus",":stack_strength",4),
(val_add, ":stack_strength",":strength_bonus"),
#TEMPERED ADDED BONUS FOR ENTRENCHMENT
(try_begin),
(eq,":entrench",1),
(val_add,":stack_strength",2),
(try_end),
#TEMPERED# BONUSES END
(val_add, ":stack_strength", 4), #new was 12 (patch 1.125)
(val_mul, ":stack_strength", ":stack_strength"),
(val_mul, ":stack_strength", 2), #new (patch 1.125)
(val_div, ":stack_strength", 100),
(val_max, ":stack_strength", 1), #new (patch 1.125)
##AotE terrain advantages
(party_get_current_terrain, ":terrain_type", ":party"),
(try_begin),
(eq, ":terrain_type", rt_steppe),
(troop_is_guarantee_horse, ":stack_troop"),
(val_mul, ":stack_strength", 150),
(else_try),
(eq, ":terrain_type", rt_plain),
(troop_is_guarantee_horse, ":stack_troop"),
(val_mul, ":stack_strength", 110),
(else_try),
(eq, ":terrain_type", rt_snow),
# (try_for_range,":items","itm_zrak_wildman_chest","itm_zrak_berserker_chest"),
# (troop_has_item_equipped,":stack_troop",":items"),
# (val_mul, ":stack_strength", 1.4),
# (try_end),
# (try_for_range,":items","itm_vaegir_woodcutter_coat","itm_vaegir_woodcutter_helmet"),
# (troop_has_item_equipped,":stack_troop",":items"),
# (val_mul, ":stack_strength", 1.5),
# (try_end),
(val_mul, ":stack_strength", 95),
(else_try),
(eq, ":terrain_type", rt_desert),
# (try_for_range,":items","itm_kabiel_villager_chest","itm_kabiel_villager_helmet"),
# (troop_is_guarantee_horse, ":stack_troop"),
# (troop_has_item_equipped,":stack_troop",":items"),
# (val_mul, ":stack_strength", 1.8 ),
# (else_try),
# (troop_is_guarantee_horse, ":stack_troop"),
# (val_mul, ":stack_strength", 1.4),
# (try_end),
(val_mul, ":stack_strength", 95),
(else_try),
(eq, ":terrain_type", rt_steppe_forest),
(troop_is_guarantee_horse, ":stack_troop"),
(val_mul, ":stack_strength", 120),
(else_try),
(eq, ":terrain_type", rt_forest),
(neg|troop_is_guarantee_horse, ":stack_troop"),
(neg|troop_is_guarantee_ranged, ":stack_troop"),
(val_mul, ":stack_strength", 120),
(else_try),
(eq, ":terrain_type", rt_snow_forest),
# (try_for_range,":items","itm_zrak_wildman_chest","itm_zrak_berserker_chest"),
# (troop_has_item_equipped,":stack_troop",":items"),
# (val_mul, ":stack_strength", 1.2),
# (try_end),
# (try_for_range,":items","itm_vaegir_woodcutter_coat","itm_vaegir_woodcutter_helmet"),
# (troop_has_item_equipped,":stack_troop",":items"),
# (val_mul, ":stack_strength", 1.2),
# (try_end),
(neg|troop_is_guarantee_horse, ":stack_troop"),
(neg|troop_is_guarantee_ranged, ":stack_troop"),
(val_mul, ":stack_strength", 120),
(else_try),
(val_mul, ":stack_strength", 100),
(try_end),
##AotE terrain advantages
(val_div, ":stack_strength", 100),
(try_begin),
(neg|troop_is_hero, ":stack_troop"),
(party_stack_get_size, ":stack_size",":party",":i_stack"),
(party_stack_get_num_wounded, ":num_wounded",":party",":i_stack"),
(val_sub, ":stack_size", ":num_wounded"),
(val_mul, ":stack_strength", ":stack_size"),
(else_try),
(troop_is_wounded, ":stack_troop"), #hero & wounded
(assign, ":stack_strength", 0),
(try_end),
(val_add, reg0, ":stack_strength"),
(try_end),
(party_set_slot, ":party", slot_party_cached_strength, reg0),
]),