Woke up with a terrible headache and decided to release it.
spearwall_trigger_1 = (0.2, 0, ti_once, [], [
(assign,"$spear_in_position",0),
(try_for_agents,":agent"),
(agent_set_slot,":agent",slot_agent_spearwall,0),
(agent_set_slot,":agent",slot_agent_x,0),
(agent_set_slot,":agent",slot_agent_y,0),
(agent_set_slot,":agent",slot_agent_z,0),
(agent_set_slot,":agent",slot_agent_speed,0),
(try_end),
])
spearwall_trigger_2 = (0.2, 0, 0, [(eq,"$setting_use_spearwall",1)], [
(set_fixed_point_multiplier, 100),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(agent_get_slot,":oldagentx",":agent",slot_agent_x),
(agent_get_slot,":oldagenty",":agent",slot_agent_y),
(agent_get_slot,":oldagentz",":agent",slot_agent_z),
(agent_get_position, pos1, ":agent"),
(position_get_x,":agentx",pos1),
(position_get_y,":agenty",pos1),
(position_get_z,":agentz",pos1),
(position_set_x,pos2,":oldagentx"),
(position_set_y,pos2,":oldagenty"),
(position_set_z,pos2,":oldagentz"),
(position_set_x,pos1,":agentx"),
(position_set_y,pos1,":agenty"),
(position_set_z,pos1,":agentz"),
(get_distance_between_positions,":speed",pos1,pos2),
(agent_set_slot,":agent",slot_agent_x,":agentx"),
(agent_set_slot,":agent",slot_agent_y,":agenty"),
(agent_set_slot,":agent",slot_agent_z,":agentz"),
(agent_set_slot,":agent",slot_agent_speed,":speed"),
(try_end),
])
spearwall_trigger_3 = (0, 0, 0, [(eq,"$spear_in_position",1),(this_or_next|game_key_clicked, gk_attack),
(this_or_next|game_key_clicked, gk_defend),(this_or_next|game_key_clicked, gk_defend),
(this_or_next|game_key_clicked, gk_move_forward),(this_or_next|game_key_clicked, gk_move_backward),
(this_or_next|game_key_clicked, gk_move_left),(this_or_next|game_key_clicked, gk_move_right),
(this_or_next|game_key_clicked, gk_equip_primary_weapon),(this_or_next|game_key_clicked, gk_equip_secondary_weapon),
(this_or_next|game_key_clicked, gk_action),(game_key_clicked, gk_sheath_weapon)
],
[(get_player_agent_no,":player"),
(agent_is_alive,":player"),
(display_message,"@Releasing spear.",0x6495ed),
(agent_set_animation, ":player", "anim_release_thrust_staff"),
(assign,"$spear_in_position",0),
])
spearwall_trigger_4 = (0.2, 0, 0, [(eq,"$setting_use_spearwall",1)], [
(try_for_agents,":agent"),
(agent_get_horse,":horse",":agent"),
(neg|gt,":horse",0),
(agent_get_slot,":speartimer",":agent",slot_agent_spearwall),
(lt,":speartimer",10),
(val_add,":speartimer",2),
(agent_set_slot,":agent",slot_agent_spearwall,":speartimer"),
(try_end),
])
spearwall_trigger_5 = (3, 0, 0, [(eq,"$spear_in_position",1)],[
(get_player_agent_no,":player"),
(agent_is_alive,":player"),
(agent_set_animation, ":player", "anim_spearwall_hold"),
])
spearwall_trigger_6 = (0.1, 0, 0, [(eq,"$setting_use_spearwall",1)], [
(get_player_agent_no,":player"),
(agent_get_team,":playerteam",":player"),
(try_for_agents,":agent"),
(agent_is_alive,":agent"),
(neq,":agent",":player"),
(agent_is_human,":agent"),
(agent_get_horse,":horse",":agent"),
(neg|gt,":horse",0),
(agent_get_slot,":speartimer",":agent",slot_agent_spearwall),
(ge,":speartimer",10),
(agent_get_simple_behavior,":state",":agent"),
(agent_get_team,":team1",":agent"),
(agent_get_class,":class",":agent"),
(team_get_movement_order,":order",":team1",":class"),
(assign,":continue",0),
(try_begin),
(neq,":team1",":playerteam"),
(this_or_next|eq,":state",aisb_hold),
(this_or_next|eq,":state",aisb_flock),
(eq,":state",aisb_go_to_pos),
(assign,":continue",1),
(else_try),
(this_or_next|eq,":order",mordr_hold),
(eq,":order",mordr_stand_ground),
(this_or_next|eq,":state",aisb_hold),
(this_or_next|eq,":state",aisb_flock),
(this_or_next|eq,":state",aisb_melee),
(eq,":state",aisb_go_to_pos),
(assign,":continue",1),
(try_end),
(eq,":continue",1),
(assign,":continue",0),
(try_begin),
(eq,":team1",":playerteam"),
(eq,"$rout",0),
(assign,":continue",1),
(else_try),
(eq,"$airout",0),
(assign,":continue",1),
(try_end),
(eq,":continue",1),
(assign,":continue",0),
(agent_get_wielded_item, ":handone", ":agent", 0),
(agent_get_wielded_item, ":handtwo", ":agent", 1),
(assign,":speardist",145),
(try_for_range,":spear","itm_pitch_fork","itm_wooden_shield"),
(this_or_next|eq,":handone",":spear"),
(eq,":handtwo",":spear"),
(assign,":continue",1),
(try_begin),
(eq,":spear","itm_war_spear"),
(assign,":speardist",160),
(else_try),
(eq,":spear","itm_spear_e_2-5m"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_light_lance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_lance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_heavy_lance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_pike"),
(assign,":speardist",255),
(else_try),
(eq,":spear","itm_ashwood_pike"),
(assign,":speardist",255),
(else_try),
(eq,":spear","itm_awlpike"),
(assign,":speardist",170),
(else_try),
(eq,":spear","itm_pitch_fork"),
(assign,":speardist",164),
(else_try),
(eq,":spear","itm_military_fork"),
(assign,":speardist",145),
(else_try),
(eq,":spear","itm_battle_fork"),
(assign,":speardist",152),
(else_try),
(eq,":spear","itm_boar_spear"),
(assign,":speardist",167),
(else_try),
(eq,":spear","itm_glaive"),
(assign,":speardist",167),
(else_try),
(eq,":spear","itm_poleaxe"),
(assign,":speardist",190),
(else_try),
(eq,":spear","itm_polehammer"),
(assign,":speardist",140),
(else_try),
(eq,":spear","itm_shortened_spear"),
(assign,":speardist",130),
(else_try),
(eq,":spear","itm_halberd"),
(assign,":speardist",185),
(else_try),
(eq,":spear","itm_ancient_halbard"),
(assign,":speardist",185),
(else_try),
(eq,":spear","itm_klance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_jousting_lance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_double_sided_lance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_staff"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_quarter_staff"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_iron_staff"),
(assign,":continue",0),
(try_end),
(try_end),
(eq,":continue",1),
(assign,":victim",-1),
(agent_get_position,pos1,":agent"),
(try_for_agents,":possible_victim"),
(agent_is_alive,":possible_victim"),
(neg|agent_is_human,":possible_victim"),
(agent_get_rider,":rider",":possible_victim"),
(ge,":rider",0),
(agent_get_team,":team2",":rider"),
(teams_are_enemies,":team1",":team2"),
(agent_get_position,pos2,":possible_victim"),
(get_distance_between_positions,":dist",pos1,pos2),
(lt,":dist",":speardist"),
(neg|position_is_behind_position,pos2,pos1),
(agent_get_slot,":speed",":possible_victim",slot_agent_speed),
(ge,":speed",120), # Remember to change this if the timing on speed checks changes
(assign,":victim",":possible_victim"),
(try_end),
(gt,":victim",-1),
(agent_set_animation, ":agent", "anim_spearwall_hold"),
(agent_play_sound,":victim","snd_metal_hit_high_armor_high_damage"),
(store_agent_hit_points,":hp",":victim",0),
(store_agent_hit_points,":oldhp",":victim",1),
(val_div,":speed",2), # Remember to change this if the timing on speed checks changes
(val_sub,":speed",15),
(val_sub,":hp",":speed"),
(val_max,":hp",0),
(agent_set_slot,":agent",slot_agent_spearwall,0),
(agent_get_horse,":playerhorse",":player"),
(agent_set_hit_points,":victim",":hp",0),
(agent_deliver_damage_to_agent,":victim",":victim"),
(try_begin),
(eq,":victim",":playerhorse"),
(store_agent_hit_points,":hp",":victim",1),
(val_sub,":oldhp",":hp"),
(assign,reg1,":oldhp"),
(display_message,"@Your horse received {reg1} damage from a braced spear!",0xff4040),
(try_end),
(try_end),
])
spearwall_trigger_7 = (0.1, 0, 0, [(eq,"$spear_in_position",1)], [
(get_player_agent_no,":player"),
(agent_is_alive,":player"),
(store_agent_hit_points,":hp",":player",1),
(lt,":hp","$spear_hp"),
(display_message,"@The injury causes your grip on the spear to slip!",0xff4040),
(agent_set_animation, ":player", "anim_release_thrust_staff"),
(assign,"$spear_in_position",0),
])
spearwall_trigger_8 = (0.1, 0, 0, [(eq,"$spear_in_position",1)], [
(get_player_agent_no,":player"),
(agent_is_alive,":player"),
(agent_get_slot,":speartimer",":player",slot_agent_spearwall),
(ge,":speartimer",10),
(assign,":victim",-1),
(agent_get_position,pos1,":player"),
(try_for_agents,":possible_victim"),
(agent_is_alive,":possible_victim"),
(neg|agent_is_human,":possible_victim"),
(agent_get_rider,":rider",":possible_victim"),
(ge,":rider",0),
(neg|agent_is_ally,":rider"),
(agent_get_position,pos2,":possible_victim"),
(get_distance_between_positions,":dist",pos1,pos2),
(lt,":dist","$spear_dist"),
(neg|position_is_behind_position,pos2,pos1),
(agent_get_slot,":speed",":possible_victim",slot_agent_speed),
(ge,":speed",120), # Remember to change this if the timing on speed checks changes
(assign,":victim",":possible_victim"),
(try_end),
(gt,":victim",-1),
(agent_play_sound,":victim","snd_metal_hit_high_armor_high_damage"),
(store_agent_hit_points,":hp",":victim",0),
(store_agent_hit_points,":oldhp",":victim",1),
(val_div,":speed",2), # Remember to change this if the timing on speed checks changes
(val_sub,":speed",15),
(val_sub,":hp",":speed"),
(val_max,":hp",0),
(agent_set_hit_points,":victim",":hp",0),
(agent_deliver_damage_to_agent,":victim",":victim"),
(agent_set_slot,":player",slot_agent_spearwall,0),
(store_agent_hit_points,":hp",":victim",1),
(val_sub,":oldhp",":hp"),
(assign,reg1,":oldhp"),
(display_message,"@Spear-wall dealt {reg1} damage!"),
])
spearwall_trigger_9 = (0, 0, 2, [(key_clicked, key_b),(eq,"$setting_use_spearwall",1)],
[(assign,":continue",0),
(get_player_agent_no,":player"),
(agent_is_alive,":player"),
(agent_get_wielded_item, ":handone", ":player", 0),
(agent_get_wielded_item, ":handtwo", ":player", 1),
(assign,"$spear_dist",145),
(try_for_range,":spear","itm_pitch_fork","itm_wooden_shield"),
(this_or_next|eq,":handone",":spear"),
(eq,":handtwo",":spear"),
(assign,":continue",1),
(try_begin),
(eq,":spear","itm_war_spear"),
(assign,"$spear_dist",160),
(else_try),
(eq,":spear","itm_spear_e_2-5m"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_light_lance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_lance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_heavy_lance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_pike"),
(assign,"$spear_dist",255),
(else_try),
(eq,":spear","itm_ashwood_pike"),
(assign,"$spear_dist",255),
(else_try),
(eq,":spear","itm_awlpike"),
(assign,"$spear_dist",170),
(else_try),
(eq,":spear","itm_pitch_fork"),
(assign,"$spear_dist",164),
(else_try),
(eq,":spear","itm_military_fork"),
(assign,"$spear_dist",145),
(else_try),
(eq,":spear","itm_battle_fork"),
(assign,"$spear_dist",152),
(else_try),
(eq,":spear","itm_boar_spear"),
(assign,"$spear_dist",167),
(else_try),
(eq,":spear","itm_glaive"),
(assign,"$spear_dist",167),
(else_try),
(eq,":spear","itm_poleaxe"),
(assign,"$spear_dist",190),
(else_try),
(eq,":spear","itm_polehammer"),
(assign,"$spear_dist",140),
(else_try),
(eq,":spear","itm_shortened_spear"),
(assign,"$spear_dist",130),
(else_try),
(eq,":spear","itm_halberd"),
(assign,"$spear_dist",185),
(else_try),
(eq,":spear","itm_ancient_halbard"),
(assign,"$spear_dist",185),
(else_try),
(eq,":spear","itm_klance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_jousting_lance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_double_sided_lance"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_staff"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_quarter_staff"),
(assign,":continue",0),
(else_try),
(eq,":spear","itm_iron_staff"),
(assign,":continue",0),
(try_end),
(try_end),
(eq,":continue",1),
(agent_get_horse,":horse",":player"),
(neg|gt,":horse",0),
(neq, "$spear_in_position", 1),
(display_message,"@Bracing spear for charge.",0x6495ed),
(agent_set_animation, ":player", "anim_spearwall_hold"),
(assign, "$spear_in_position", 1),
(store_agent_hit_points,"$spear_hp",":player",1),
])
Stick that in at the top of mission templates, with the rest of the triggers.
spearwall_trigger_1,
spearwall_trigger_2,
spearwall_trigger_3,
spearwall_trigger_4,
spearwall_trigger_5,
spearwall_trigger_6,
spearwall_trigger_7,
spearwall_trigger_8,
spearwall_trigger_9,
Put that in in the end of the mission that you want to use bracing in (such as lead_charge) right before the final
],
),
Agents you need:
slot_agent_spearwall = 142
slot_agent_x = 143
slot_agent_y = 144
slot_agent_z = 145
slot_agent_speed = 146
Toss in module_constants.
Animations:
["spearwall_hold", acf_thrust|acf_enforce_all|acf_align_with_ground,
[4.0, "anim_human", combat+7310, combat+7310, blend_in_ready],
],
In module_animations, overwriting one of the unused. (That was just for you, jik)
I believe that's all of it. Now, for your own mod, you have to change parts.
Find this: (try_for_range,":spear","itm_pitch_fork","itm_wooden_shield"),
and change the first item to the beginning of where the spears are in your mod and the "item_wooden_shield" to the end.
Next, scroll down a small bit to see the area where it starts with:
(try_begin),
(eq,":spear","itm_war_spear"),
(assign,":speardist",160),
and ends with:
(else_try),
(eq,":spear","itm_iron_staff"),
(assign,":continue",0),
(try_end),
You need to change it. Each "itm_somethinghere" needs to become an spear in your mod. For items that you don't want braced (iron staff is an example here), set it to ":continue",0. The other values are the length of the spear when braced. So, the war spear can kill horses from 160 M&B distance units away. This part of the code enables the AI to brace their spears.
Now scroll down to the second: (try_for_range,":spear","itm_pitch_fork","itm_wooden_shield"),
Change it again.
Then scroll down a tiny bit and change it (the spear lengths) again.
This part enables the player to brace spears.
I think that's all. I'm going to go get some coffee.
Remember to credit the development team of NE if you use this.
EDIT: Oh yeah, I forgot. You need to copy the code part into mission templates, any mission where you feel that you need to be able to skewer horses.
Here's an added bonus thingie:
call_horse_trigger_1 = (0, 0, 3, [(key_clicked, key_m)], [
(get_player_agent_no,":agent"),
(agent_get_horse,":horse",":agent"),
(neg|gt,":horse",0),
(troop_get_slot,":horse",":agent",slot_troop_horse),
(agent_play_sound,":agent","snd_whistle"),
(display_message,"@You whistle for your horse."),
(gt,":horse",0),
(agent_is_alive,":horse"),
(agent_get_position, pos1, ":agent"),
(agent_set_scripted_destination, ":horse", pos1, 0),
])
call_horse_trigger_2 = (0.2, 0, ti_once, [], [
(get_player_agent_no,":agent"),
(agent_get_horse,":horse",":agent"),
(troop_set_slot,":agent",slot_troop_horse,":horse"),
])
Yes, it lets you whistle for your horse to come to you. Assuming it's alive, that is. It also goes into module_mission_templates.
Forgot a second thing. You hit B to brace in this version. Or maybe it's G.
Hit your keyboard randomly. You'll find it eventually.