Making the AI able to deploy pavise shields(friend and foe),
they will deploy when shooting and recover when moving away from it.
Inspierd by Cartread Deployable Pavise Shield.
*One issuse is that the banner mesh that apply on the heraldic shields is the one of the enemy, if some1 can help with that it will be great.
Needed files to edit:
module_constants.py
module_scene_props.py
module_mission_templates.py
module_game_menus.py
The steps:
1)
2.0)
2.1)
3.0)
3.1)
4)
You also need the collision of the shield, downalod it here(brf with collision, mesh, mat and texture of the shield):
and add in the module.ini file this line: load_mod_resource = pavise_shield
they will deploy when shooting and recover when moving away from it.
Inspierd by Cartread Deployable Pavise Shield.
*One issuse is that the banner mesh that apply on the heraldic shields is the one of the enemy, if some1 can help with that it will be great.
Needed files to edit:
module_constants.py
module_scene_props.py
module_mission_templates.py
module_game_menus.py
The steps:
1)
Add those lines in the end of the file:
Code:
slot_agent_attached_prop = 23
slot_prop_pavise_banner_mesh = 24
slot_agent_attached_pavise_item = 26
slot_agent_pavise_on_ground = 0
slot_agent_pavise_allow = 0
pavise_begin = "itm_tab_shield_pavise_a" # the first pavise shield item id
pavise_end = "itm_tab_shield_small_round_a"# one line after the last pavise shield item id
Add this block somewhere in the start of the file :
Code:
pavise_init = (ti_on_init_scene_prop,
[
(store_trigger_param_1, ":instance_no"),
(assign, ":agent_no", reg5), #reg5 is caller agent, set before (spawn_scene_prop) in "cf_agent_deploy_pavise"
(try_begin),
(agent_is_active, ":agent_no"),
(agent_get_troop_id, ":troop_no", ":agent_no"),
(call_script, "script_agent_troop_get_banner_mesh", ":agent_no", ":troop_no"),
(assign, ":mesh", reg0),
(else_try),
(assign, ":mesh", "mesh_banners_default_b"),
(try_end),
(scene_prop_set_slot, ":instance_no", slot_prop_pavise_banner_mesh, ":mesh"),
(assign, ":tableau", "tableau_pavise_shield_2"),
(try_begin),
(prop_instance_get_scene_prop_kind, reg0, ":instance_no"),
(eq, reg0, "spr_pavise_1"),
(assign, ":tableau", "tableau_pavise_shield_1"),
(try_end),
(cur_scene_prop_set_tableau_material, ":tableau", ":mesh"),
])
Add this line at the end of the file :
Code:
("pavise_1", sokf_moveable, "tableau_shield_pavise_prop_1", "bo_tableau_shield_pavise_prop_1", [pavise_init]),
Add those blocks somewhere in the start of the file :
Code:
#Pavise
deploy_pavise_on_ground_allies = (
0, 0, 3,
[
(troop_slot_eq, "trp_player", slot_agent_pavise_allow, 1),
],[
(try_for_agents, ":agent"),
(agent_is_alive, ":agent"),
(agent_is_human, ":agent"),
(agent_is_ally, ":agent"),
(agent_is_non_player, ":agent"),
(agent_get_class, ":agent_class", ":agent"),
(try_for_range, ":item", all_items_begin, all_items_end),
(is_between, ":item", pavise_begin, pavise_end),
(agent_has_item_equipped, ":agent", ":item"),
(agent_slot_eq, ":agent", slot_agent_pavise_on_ground, 0),
(agent_set_slot, ":agent", slot_agent_attached_pavise_item, ":item"),
(eq, ":agent_class", grc_archers),
(agent_get_combat_state, ":agent_cs", ":agent"),
(this_or_next | eq, ":agent_cs", 3),
(eq, ":agent_cs", 4), # 7 = no visible targets (state for ranged units)
(agent_get_position, pos2, ":agent"),
(position_move_y, pos2, 90),
(set_spawn_position, pos2),
(spawn_scene_prop, "spr_pavise_1"), # pavise spawn
(agent_set_slot, ":agent", slot_agent_pavise_on_ground, 1),
(agent_set_slot, ":agent", slot_agent_attached_prop, reg0),
(agent_get_slot, ":spr_pavise", ":agent", slot_agent_attached_prop),
(prop_instance_enable_physics, ":spr_pavise", 1),
(agent_unequip_item, ":agent", ":item"),
(else_try),
(try_end),
(try_end),
])
deploy_pavise_remove_allies = (
0, 0, 3, [
(troop_slot_eq, "trp_player", slot_agent_pavise_allow, 1),
], [
(try_for_agents, ":agent"),
(agent_is_alive, ":agent"),
(agent_is_human, ":agent"),
(agent_is_ally, ":agent"),
(agent_is_non_player, ":agent"),
(agent_slot_eq, ":agent", slot_agent_pavise_on_ground, 1),
(agent_get_position, pos2, ":agent"),
(agent_get_slot, ":spr_pavise", ":agent", slot_agent_attached_prop),
(prop_instance_get_position, pos3, ":spr_pavise"),
(get_distance_between_positions, ":cur_distance", pos3, pos2),
(ge, ":cur_distance", 100), # 1 meters
(agent_get_slot, ":spr_pavise_itnm", ":agent", slot_agent_attached_pavise_item),
(agent_equip_item, ":agent", ":spr_pavise_itnm"),
(position_move_z, pos4, -350), # moving back to ground level
(prop_instance_set_position, ":spr_pavise", pos4),
(scene_prop_fade_out, ":spr_pavise", 1),
(prop_instance_enable_physics, ":spr_pavise", 0),
(agent_set_slot, ":agent", slot_agent_pavise_on_ground, 0),
(else_try),
(try_end),
])
deploy_pavise_on_ground_enemies = (
0, 0, 3,
[
(troop_slot_eq, "trp_player", slot_agent_pavise_allow, 1),
],[
(try_for_agents, ":agent"),
(agent_is_alive, ":agent"),
(agent_is_human, ":agent"),
(neg | agent_is_ally, ":agent"),
(agent_is_non_player, ":agent"),
(agent_get_class, ":agent_class", ":agent"),
(try_for_range, ":item", all_items_begin, all_items_end),
(is_between, ":item", pavise_begin, pavise_end),
(agent_slot_eq, ":agent", slot_agent_pavise_on_ground, 0),
(agent_has_item_equipped, ":agent", ":item"),
(agent_set_slot, ":agent", slot_agent_attached_pavise_item, ":item"),
(eq, ":agent_class", grc_archers),
(agent_get_combat_state, ":agent_cs", ":agent"),
(this_or_next | eq, ":agent_cs", 3),
(eq, ":agent_cs", 4), # 7 = no visible targets (state for ranged units)
(agent_get_position, pos2, ":agent"),
(position_move_y, pos2, 90),
(set_spawn_position, pos2),
(spawn_scene_prop, "spr_pavise_1"), # pavise spawn
(agent_set_slot, ":agent", slot_agent_pavise_on_ground, 1),
(agent_set_slot, ":agent", slot_agent_attached_prop, reg0),
(agent_get_slot, ":spr_pavise", ":agent", slot_agent_attached_prop),
(prop_instance_enable_physics, ":spr_pavise", 1),
(agent_unequip_item, ":agent", ":item"),
(else_try),
(try_end),
(try_end),
])
deploy_pavise_remove_enemies = (
0, 0, 3, [
(troop_slot_eq, "trp_player", slot_agent_pavise_allow, 1),
], [
(try_for_agents, ":agent"),
(agent_is_alive, ":agent"),
(agent_is_human, ":agent"),
(neg | agent_is_ally, ":agent"),
(agent_is_non_player, ":agent"),
(agent_slot_eq, ":agent", slot_agent_pavise_on_ground, 1),
(agent_get_position, pos2, ":agent"),
(agent_get_slot, ":spr_pavise", ":agent", slot_agent_attached_prop),
(prop_instance_get_position, pos3, ":spr_pavise"),
(get_distance_between_positions, ":cur_distance", pos3, pos2),
(ge, ":cur_distance", 100), # 1 meters
(agent_get_slot, ":spr_pavise_itnm", ":agent", slot_agent_attached_pavise_item),
(agent_equip_item, ":agent", ":spr_pavise_itnm"),
(position_move_z, pos4, -350), # moving back to ground level
(prop_instance_set_position, ":spr_pavise", pos4),
(scene_prop_fade_out, ":spr_pavise", 1),
(prop_instance_enable_physics, ":spr_pavise", 0),
(agent_set_slot, ":agent", slot_agent_pavise_on_ground, 0),
(else_try),
(try_end),
])
#Pavise
Add those new blocks names in any mission you want it to be active on, for example on lead charge missions,
In this entry :
Scroll down and you will see this line:
common_battle_init_banner,
Add to this the new blocks names so it will look like this:
common_battle_init_banner,
deploy_pavise_remove_enemies,
deploy_pavise_on_ground_enemies,
deploy_pavise_remove_allies,
deploy_pavise_on_ground_allies,
In this entry :
Code:
"lead_charge",mtf_battle_mode|mtf_synch_inventory,charge,
"You lead your men to battle.",
[
Scroll down and you will see this line:
common_battle_init_banner,
Add to this the new blocks names so it will look like this:
common_battle_init_banner,
deploy_pavise_remove_enemies,
deploy_pavise_on_ground_enemies,
deploy_pavise_remove_allies,
deploy_pavise_on_ground_allies,
In the camp actions menu below the "camp_recruit_prisoners" entry(or anywhere else you want it to be) add those lines:
Code:
("pavise_allow_yes", [(troop_slot_eq, "trp_player", slot_agent_pavise_allow, 0), ], "Enable auto deploy and recover of pavise shield(currently disabled)",
[
(troop_set_slot, "trp_player", slot_agent_pavise_allow, 1),
(jump_to_menu, "mnu_camp_action"),
]),
("pavise_allow_no", [(troop_slot_eq, "trp_player", slot_agent_pavise_allow, 1), ], "Disable auto deploy and recover of pavise shield(currently enabled)",
[
(troop_set_slot, "trp_player", slot_agent_pavise_allow, 0),
(jump_to_menu, "mnu_camp_action"),
]),
File on MEGA
mega.nz
https://imgur.com/a/8d9HQNO