Dual-Wield Project and other Acrobatic/Assasin combat styles

Users who are viewing this thread

ThaneWulfgharn

Master Knight
Hi,I'm ThaneWulfgharn,and I'm thinking to start up an assasin project that will be Open-Source for all modders.The first(and most important feature) will be Dual Wield.Dual Wield will work when you are wielding 2 weapons;1h or 2h/1h(like bastard swords).It will be based on the Dual Wielding skill.Damage of dual wield is got by this formula:
[(d1+d2):v1]+v2
(d1 is the damage of the right-hand weapon and d2 is the damage of left-hand weapon,v1 and v2 are vars.Deafult are v1=4 and v2=10)
Dual wield normally deals lower damage than 1 weapon wield but it is alot faster and its blocks cannot be crushed.
You can dual-wield with normal weapons(no need to make unique offhand weapons)
Every dual wield skill level increases attack speed by 1% plus some unique features:
Dual Wield skill levels:
0-No dual wield
1-Allows Dual Wielding
2-Increases speed by 2% instead of 1%(for this level only)
3-Dual Wielding formula v1 var becomes 3
4-Dual Wielding formula v2 var becomes 12
5-Dual wielding formula v2 var becomes 14
6-Increases speed by 3% instead of 1%(for this level only)
7-Dual Wielding formula v2 var becomes 16
8-Dual Wielding formula v1 var becomes 2
9-Dual Wielding formula v2 var becomes 18
10-Dual Wielding formula v1 var becomes 20
11-Dual Wielding strike speed is increased by 5% instead of 1%(for this level only)
Not Done
Working On
Finished

Dual Wielding Skill
Weapon Meshes collide correctly into left hand
Uses normal weapons for d-wield
Dual wield damage formula and skill bonuses
Dual wield blocks cannot be crushed
Unique anims for dual wield

I would appreciate any possible help into this mod,as I cannot do it alone.
 
I don't know the details since dual wield doesn't really interest me but with a search you will find a few topics that already discussed it and I might be wrong I think it isn't possible. It is possible though to hold a weapon instead of a shield and to block with it. Well, a search will tell you more.
 
Even if its possible its soo difficult because those "basic" things are hardcoded in the game
 
Actually duel wielding was in earlier versions of M&B. If I'm not mistaken it was removed around 2006, so I'm pretty sure it's possible. Just have to dig up some of that old code TW undoubtedly left behind.
 
SeRgYu said:
Even if its possible its soo difficult because those "basic" things are hardcoded in the game
That didn't stop autofire from being implemented.

If I think of a good way to implement dual-wield I will send it your way.
 
You will need to implement two versions of the same item. Making a proper collision depends on using the length of the weapon as the shield height. This code switches between a weapon and its shield equivalent - but keep in mind agent_equip_item requires a free weapons slot.
Code:
    ("switch_weapon",
     [
      (store_script_param, ":agent",  1),
      (store_script_param, ":weapon", 2),
      (store_script_param, ":shield", 3),

      (try_begin),
        (this_or_next|agent_has_item_equipped, ":agent", ":weapon"),
        (agent_has_item_equipped, ":agent", ":shield"),
        # (agent_get_wielded_item, ":wielded_weapon", ":agent", 0),
        # (agent_get_wielded_item, ":wielded_shield", ":agent", 1),
        (agent_get_wielded_item, ":wielded", ":agent", 0),
        (agent_get_wielded_item, ":wielded_shield", ":agent", 1),
        # (gt, ":wielded", -1),

        (try_begin),
          (eq, ":wielded", ":weapon"),
          (agent_get_attack_action, ":action", ":agent"),
          (assign, ":wielded_shield", ":shield"),
        (else_try),
          (eq, ":wielded_shield", ":shield"),
          (assign, ":wielded", ":wielded_shield"),
          (assign, ":wielded_shield", ":weapon"), 
          (agent_get_defend_action, ":action", ":agent"),
        (try_end),
        (eq, ":action", 0),#free
        (gt, ":wielded", -1),
        (gt, ":wielded_shield", -1),#has alt version
        # (this_or_next|eq, ":wielded", ":weapon"),
        # (eq, ":wielded", ":shield"),
        (omit_key_once, gk_toggle_weapon_mode), #might not work for gamekey?
        (agent_unequip_item, ":agent", ":wielded"),
        (agent_equip_item, ":agent", ":wielded_shield"),
        (agent_set_wielded_item, ":agent", ":wielded_shield"),
        (str_store_item_name, s1, ":wielded_shield"),
        (str_store_item_name, s2, ":wielded"),
        (display_message, "@Switching to {s1} from {s2}."),
      (try_end),
     ]
    ),
While you can make skills give extra damage with the introduction of the ti_on_agent_hit trigger, you cannot affect the blocking mechanism in any way nor can you create unique animations.
 
@Bgfan-do you remember exactly wich version was it?
@Somebody-how to define wich weapon the shield equivalent of the first weapon(eg scimitar,since is the basic d-wielded weapon).
 
I think you can set the item as a shield and then add a mission template, something like:

xenoargh said:
I know it's been done before, but I figured that it'd be best to just write one from scratch, since it was fairly easy and I wanted a very specific effect. 

The results are really cool and feel pretty good, in SP.  Players get the ability to semi-heroically shield-bash enemies to their front, using the left-hand CTRL key, which results in a small move backwards and a brief stun state, but without damage.  It's like a kick you can sweep.  It's quite OP vs. single enemies, as written, but it could be balanced in various ways for SP, such as a STR test, etc. or just minor tweaking on durations.

I don't know if it's totally MP-friendly or not.  Testing and code tweaks are welcome.  And it is not currently AI-friendly, as I am not sure that there is a reasonably-efficient way to trigger it for AIs yet (ideas on that would be welcome).

I honestly think that a weaker version of this (smaller radius, shorter stun duration or longer duration of attack) would go a very long way to making sword-and-board much more interesting and realistic in MP, as it would give sword-and-board people another of the big advantages they had IRL.

Anyhow, enough buildup.  Here's the code:

module_scripts:

Code:
#Shield Bash Script  
("shield_bash",[  
(this_or_next|multiplayer_is_server),
(neg|game_in_multiplayer_mode),	
(get_player_agent_no,":player_agent"),
(try_begin),
(gt, ":player_agent", 0),
(agent_get_animation, ":anim", ":player_agent",0),
(agent_get_horse, ":my_horse", ":player_agent"),
(agent_get_wielded_item, ":shield_item", ":player_agent", 1),
(try_begin),
	(neq, ":anim", "anim_shield_bash"),
	(eq, ":my_horse", -1),
	(is_between, ":shield_item", "itm_wooden_shield", "itm_steel_shield_herald03"),
	(agent_set_animation, ":player_agent","anim_shield_bash"),
	(agent_get_position, pos63,":player_agent"),
	(position_move_y,pos63,75),#75 cm directly ahead, so it's not a cuboid space around player center
	(agent_get_troop_id, ":id", ":player_agent"),
	(troop_get_type, ":type", ":id"),
	(try_begin),
		(eq, ":type", tf_male),
		(agent_play_sound, ":player_agent", "snd_man_yell"),
	(else_try),
		(agent_play_sound, ":player_agent", "snd_woman_yell"),		
	(try_end),
	(try_for_agents,":agent"),
		(gt, ":agent", 0),
		(neg|agent_is_ally,":agent"),#don't bash allies
		(agent_is_human, ":agent"),#stop if not human			
		(agent_is_active,":agent"),
		(agent_is_alive,":agent"),
		(try_begin),
			(agent_get_position,pos62,":agent"),
			(get_distance_between_positions,":dist",pos63,pos62),		
			(lt,":dist",100),#Set this to whatever you like- 1 meter radius clears a big section of crowd
			(agent_get_horse, ":horse", ":agent"),
			(eq, ":horse", -1),	
			(neq,":agent",":player_agent"),	
			(agent_play_sound, ":player_agent", "snd_wooden_hit_low_armor_high_damage"),				
			(position_move_y,pos62,-25),			
			(agent_set_position, ":agent", pos62),
			(agent_set_animation, ":agent","anim_shield_strike"),			
		(try_end),
	(try_end),
(try_end),
(try_end),
]),  
#End Shield Bash Script

module_mission_templates (you obviously need to put it into specific mt's like other common_ scripts):

Code:
common_shield_bash = (0,0,0,[
(key_clicked, key_left_control),
(neg|main_hero_fallen),
],
[
(call_script, "script_shield_bash"),
])

module_animations (needs to replace a free unused_human_anim ofc):

Code:
["shield_bash", 0, amf_play|amf_priority_defend|amf_use_defend_speed|amf_client_owner_prediction, 
[0.75, "defend_shield_parry_all", 1, 50, blend_in_defense], #Adjust duration for balance.  Currently at 0.75 seconds, fixed.
[0.75, "defend_shield_right", 1, 50, blend_in_defense],
[0.75, "defend_shield_left", 1, 50, blend_in_defense],
[0.75, "defend_shield_right", 1, 50, blend_in_defense],   
],
 ["shield_strike", acf_enforce_all|acf_align_with_ground, amf_priority_striked|amf_play|amf_accurate_body|amf_restart,
	[1.0, "anim_human", blow+5000, blow+5010, arf_blend_in_3|arf_make_custom_sound],  
	[1.7, "anim_human", blow+5400, blow+5453, arf_blend_in_2|arf_make_custom_sound], 
	[1.44, "anim_human", blow+5400, blow+5445, arf_blend_in_2|arf_make_custom_sound],   
   ],

MP version of the script, modifying sinisterius's code(see below) by Arch3r.  I haven't tested this.
Arch3r said:
An update for module_scripts (sinisterius MP codes):

Search in game_receive_network_message:
Code:
      (else_try),
        (eq, ":event_type", multiplayer_event_admin_set_disallow_ranged_weapons),
        (try_begin),
          (store_script_param, ":value", 3),
          #validity check
          (player_is_admin, ":player_no"),
          (is_between, ":value", 0, 2),
          #condition checks are done
          (assign, "$g_multiplayer_disallow_ranged_weapons", ":value"),
        (try_end),

And paste directly under that, this:
Code:
      (else_try),
        (eq, ":event_type", mp_shield_bash_server),


    #Get sender data & max players.
#    (player_is_active, ":player_no"),
    (player_get_agent_id, ":agent_no", ":player_no"),
#        (agent_is_active, ":agent_no"),
    (agent_is_alive, ":agent_no"),
#    (agent_is_human, ":agent_no"),
    

    #Check if the sender is in the correct condition.
    (agent_get_wielded_item, ":shield", ":agent_no", 1), #Offhand item.
    (is_between, ":shield", "itm_wooden_shield", "itm_darts"),

    (agent_get_horse, ":horse", ":agent_no"),
    (eq, ":horse", -1), #No horse.
    
    #If everything is correct, then set the sender agent up for bash.
        (get_max_players, ":max_players"),
        (try_for_range, ":player", 0, ":max_players"),
        (player_is_active, ":player"),
(agent_set_animation, ":agent_no", "anim_shield_bash"),
(multiplayer_send_2_int_to_player, ":player", mp_agent_shield_bash, ":agent_no", "anim_shield_bash"),
    (try_end),
    
    #Bash. Get the closest agent within 175cm~1.75m.
    (agent_get_position, pos1, ":agent_no"),
    (assign, ":minimum_distance", 100), #1 meter
    (assign, ":victim", -1),
    (try_for_agents, ":suspect"),
        (agent_is_active, ":suspect"),
        (agent_is_alive, ":suspect"),
        (neq, ":suspect", ":agent_no"), #Suspect can't be our local agent.
        (agent_is_human, ":suspect"),
        
        #Compare distances.
        (agent_get_position, pos2, ":suspect"),
        (neg|position_is_behind_position, pos2, pos1),
        (get_distance_between_positions, ":distance", pos1, pos2),
        (le, ":distance", ":minimum_distance"),
        
        #If distance is sufficient..
        (assign, ":minimum_distance", ":distance"),
        (assign, ":victim", ":suspect"),
    (try_end),
    
    #If we have the victim, aka the closest agent, then deal with him. Else, do nothing.
    (ge, ":victim", 0),

    (agent_get_horse, ":horse", ":victim"),
    (eq, ":horse", -1), #No horse.

        (try_for_range, ":player", 0, ":max_players"),
        (player_is_active, ":player"),
        (multiplayer_send_2_int_to_player, ":player", mp_agent_play_sound_client, ":victim", "snd_wooden_hit_low_armor_high_damage"),
    (try_end),
    (agent_get_position, pos2, ":victim"),
    (position_move_y, pos2, -25),
    (position_get_distance_to_ground_level, ":distance", pos2),
    (try_begin),
        (le, ":distance", 25),
        (agent_set_position, ":victim", pos2),
        (agent_set_animation, ":victim", "anim_shield_strike"),
                (try_for_range, ":player", 0, ":max_players"),
                  (player_is_active, ":player"),
                  (multiplayer_send_2_int_to_player, ":player", mp_agent_shield_bash, ":victim", "anim_shield_strike"),
            (try_end),
    (else_try),
        (gt, ":distance", 25),
        (agent_set_animation, ":victim", "anim_shield_strike"),
            (try_for_range, ":player", 0, ":max_players"),
            (player_is_active, ":player"),
                (multiplayer_send_2_int_to_player, ":player", mp_agent_shield_bash, ":victim", "anim_shield_strike"),
                (try_end),
    (try_end),


    (player_get_troop_id, ":troop_no", ":player_no"),
    (troop_get_type, ":type_no", ":troop_no"),
    (try_begin),
        (eq, ":type_no", tf_male),
        (try_for_range, ":player", 0, ":max_players"),
            (player_is_active, ":player"),
            (multiplayer_send_2_int_to_player, ":player", mp_agent_play_sound_client, ":agent_no", "snd_man_yell"),
        (try_end),
    (else_try),
        (eq, ":type_no", tf_female),
        (try_for_range, ":player", 0, ":max_players"),
            (player_is_active, ":player"),
            (multiplayer_send_2_int_to_player, ":player", mp_agent_play_sound_client, ":agent_no", "snd_woman_yell"),
        (try_end),
    (try_end),

And search for:
Code:
      (else_try),
        ###############
        #CLIENT EVENTS#
        ###############
        (neq, multiplayer_is_server),
        (try_begin),      
          (eq, ":event_type", multiplayer_event_return_renaming_server_allowed),
          (store_script_param, ":value", 3),
          (assign, "$g_multiplayer_renaming_server_allowed", ":value"),

And paste under that:
Code:
         (else_try),
      (eq, ":event_type", mp_agent_play_sound_client),
      (store_script_param, ":value", 3),
          (store_script_param, ":value_2", 4),
      (agent_play_sound, ":value", ":value_2"),
        (else_try),
      (eq, ":event_type", mp_agent_shield_bash),
      (store_script_param, ":value", 3),
          (store_script_param, ":value_2", 4),
      (agent_set_animation, ":value", ":value_2"),

Add to header_common.py:
Under:
Code:
multiplayer_event_admin_set_disallow_ranged_weapons           = 47
This:
Code:
mp_agent_play_sound_client                                     = 48
mp_agent_shield_bash                                           = 49

And

Under:
Code:
multiplayer_event_return_disallow_ranged_weapons              = 112
This:
Code:
mp_shield_bash_server                                      = 113


Extra:

Code:
mp_shield_bash = (
    0, 0, 0,
    [
        (game_key_is_down, gk_defend),
        (game_key_clicked, gk_attack),
#        (game_in_multiplayer_mode),
    ],
    [        
              (multiplayer_get_my_player, ":my_player"),
              (player_get_agent_id, ":agent_no", ":my_player"),
              
    (agent_get_wielded_item, ":shield", ":agent_no", 1), #Offhand item.
    (is_between, ":shield", "itm_wooden_shield", "itm_darts"),
 #              (display_message, "@shield bash initiated."),
#              (agent_get_animation, ":agent_anim", ":agent_no", 1),
        (multiplayer_send_message_to_server, mp_shield_bash_server),
    ])
as the (game_is_in_multiplayer_mode), is supposed to be (game_in_multiplayer_mode),


MP version of the script, by Sinisterius.  I haven't tested this.

EDIT.
Updated to latest version.
Code:
mp_shield_bash = (
    0, 0, 0,
	[
	    (game_key_is_down, gk_defend),
		(game_key_clicked, gk_attack),
		(game_is_in_multiplayer_mode),
	],
	[		
		(multiplayer_send_message_to_server, mp_shield_bash_server),
	])

Code:
#Server/client events.
#Copy-paste this stuff right after the store_script_params in game_receive_network_message.
(try_begin),
    (eq, ":event_type", mp_shield_bash_server),
	
	#Get sender data & max players.
	(player_is_active, ":player_no"),
	(player_get_agent_id, ":agent_no", ":player_no"),
	(agent_is_active, ":agent_no"),
	(get_max_players, ":max_players"),
	
	#Check if the sender is in the correct condition.
	(agent_get_wielded_item, ":shield", ":agent_no", 1), #Offhand item.
	(is_between, ":shield", "itm_wooden_shield", "itm_steel_shield_herald03"),
	(agent_get_defend_action, ":action", ":agent_no"),
	(eq, ":action", 2), #Blocking.
	(agent_get_animation, ":anim", ":agent_no", 0),
	(neq, ":anim", "anim_shield_bash"),
	(agent_get_horse, ":horse", ":agent_no"),
	(eq, ":horse", -1), #No horse.
	
	#If everything is correct, then set the sender agent up for bash.
	(agent_set_animation, ":agent_no", "anim_shield_bash"),
	(player_get_troop_id, ":troop_no", ":player_no"),
	(troop_get_type, ":type_no", ":troop_no"),
	(try_begin),
	    (eq, ":type", tf_male),
		(try_for_range, ":player", 0, ":max_players"),
		    (player_is_active, ":player"),
			(multiplayer_send_2_int_to_player, ":player", mp_agent_play_sound_client, ":agent_no", "snd_man_yell"),
		(try_end),
	(else_try),
	    (eq, ":type", tf_female),
		(try_for_range, ":player", 0, ":max_players"),
		    (player_is_active, ":player"),
			(multiplayer_send_2_int_to_player, ":player", mp_agent_play_sound_client, ":agent_no", "snd_woman_yell"),
		(try_end),
	(try_end),
	
	#Bash. Get the closest agent within 175cm~1.75m.
	(agent_get_position, pos1, ":agent"),
	(assign, ":minimum_distance", 400),
	(assign, ":victim", -1),
	(try_for_agents, ":suspect"),
	    (neq, ":suspect", ":agent"), #Suspect can't be our local agent.
	    (agent_is_active, ":suspect"),
	    (agent_is_alive, ":suspect"),
		(agent_is_human, ":suspect"),
		
		#Compare distances.
		(agent_get_position, pos2, ":suspect"),
		(neg|position_is_behind_position, pos2, pos1),
		(get_distance_between_positions, ":distance", pos1, pos2),
		(le, ":distance", ":minimum_distance"),
		
		#If distance is sufficient..
		(assign, ":minimum_distance", ":distance"),
		(assign, ":victim", ":suspect"),
	(try_end),
	
	#If we have the victim, aka the closest agent, then deal with him. Else, do nothing.
	(ge, ":victim", 0),
	(agent_get_horse, ":horse", ":victim"),
	(eq, ":horse", -1), #No horse.
	(try_for_range, ":player", 0, ":max_players"),
	    (player_is_active, ":player"),
		(multiplayer_send_2_int_to_player, ":player", mp_agent_play_sound_client, ":victim", "snd_wooden_hit_low_armor_high_damage"),
	(try_end),
	(agent_get_position, pos2, ":victim"),
	(position_move_y, pos2, -25),
	(position_get_distance_to_ground_level, ":distance", pos2),
	(try_begin),
	    (le, ":distance", 25),
		(agent_set_position, ":victim", pos2),
		(agent_set_animation, ":victim", "anim_shield_strike"),
	(else_try),
	    (gt, ":distance", 25),
		(agent_set_animation, ":victim", "anim_shield_strike"),
	(try_end),
(else_try),
    (neq, multiplayer_is_server),
	(try_begin),
	    (eq, ":event_type", mp_agent_play_sound_client),
		(store_script_param, ":agent", 3),
		(store_script_param, ":sound", 4),
		(agent_play_sound, ":agent", ":sound"),
	(try_end),
(try_end),

Code:
#These animations go into module_animations.py
#They MUST replace existing unused animations.

##################
##Copyright: xenoargh. ##
##################
["shield_bash", 0, amf_play|amf_priority_defend|amf_use_defend_speed|amf_client_owner_prediction,
[0.75, "defend_shield_parry_all", 1, 50, blend_in_defense], #Adjust duration for balance.  Currently at 0.75 seconds, fixed.
[0.75, "defend_shield_right", 1, 50, blend_in_defense],
[0.75, "defend_shield_left", 1, 50, blend_in_defense],
[0.75, "defend_shield_right", 1, 50, blend_in_defense],   
],
 ["shield_strike", acf_enforce_all|acf_align_with_ground, amf_priority_striked|amf_play|amf_accurate_body|amf_restart,
   [1.0, "anim_human", blow+5000, blow+5010, arf_blend_in_3|arf_make_custom_sound], 
   [1.7, "anim_human", blow+5400, blow+5453, arf_blend_in_2|arf_make_custom_sound],
   [1.44, "anim_human", blow+5400, blow+5445, arf_blend_in_2|arf_make_custom_sound],   
   ],


######################################################################
#############################    Dual Wielding:  #############################
######################################################################

Here's my try:

module_scripts:

Code:
#Ik-Dual Wield Begin
("ready_dual_wield",[  
(this_or_next|multiplayer_is_server),
(neg|game_in_multiplayer_mode),	
(get_player_agent_no,":player_agent"),
(try_begin),
	(gt, ":player_agent", 0),
	(agent_get_animation, ":anim", ":player_agent",0),
	(agent_get_horse, ":my_horse", ":player_agent"),
	(agent_get_wielded_item, ":left_hand_item", ":player_agent", 1),
	(agent_get_wielded_item, ":right_hand_item", ":player_agent", 2),
	(try_begin),
        	(is_between, :anim","ready_swingright_fist","parried_overswing_onehanded"),
		(neq, ":anim", "dual_wield_strike"),
		(neq, ":anim", ""), #put here the anims you dont want to use Dual Wield. Example: release_swingright_fist and release_swingright_fist_continue
		(neq, ":anim", ""),#put here the anims you dont want to use Dual Wield. Example: release_swingright_fist and release_swingright_fist_continue
		(neq, ":anim", ""),#put here the anims you dont want to use Dual Wield. Example: release_swingright_fist and release_swingright_fist_continue
		(neq, ":anim", ""),#put here the anims you dont want to use Dual Wield. Example: release_swingright_fist and release_swingright_fist_continue
	        ...
		(eq, ":my_horse", -1),
		(is_between, ":left_hand_item", dual_wield_begin, dual_wield_end),
	        (assign, ":continue", 1)
	        (try_begin),
       		       (eq, ":right_hand_item", "itm_bastard_sword")
       		       (eq, ":left_hand_item", "itm_dh_bastard_sword")
        	       (assign, ":continue", 0)
       		(else_try)
			(eq, ":right_hand_item", "itm_")      #put here the items you don't want to use in the right hand while the item bellow is equiped
			(neq, ":left_hand_item", "itm_dh_") #put here the items you don't want to use in the left hand while the item above is equiped
			(assign, ":continue", 0)
		(else_try)
			(eq, ":right_hand_item", "itm_")      #put here the items you don't want to use in the right hand while the item bellow is equiped
			(eq, ":left_hand_item", "itm_dh_") #put here the items you don't want to use in the left hand while the item above is equiped
			(assign, ":continue", 0)
		(else_try)
			(eq, ":right_hand_item", "itm_")      #put here the items you don't want to use in the right hand while the item bellow is equiped
			(eq, ":left_hand_item", "itm_dh_") #put here the items you don't want to use in the left hand while the item above is equiped
			(assign, ":continue", 0)
		...
		(try_end)
		(eq, ":continue", 1)
		(agent_set_animation, ":player_agent","anim_dual_wield_ready"),
	(try_end),
(try_end),
]),  

("dual_wield_strike)",[  
(agent_get_animation, ":anim", ":player_agent",0),
(eq, ":anim", "anim_dual_wield_ready"),
(agent_get_horse, ":my_horse", ":player_agent"),
(agent_get_wielded_item, ":left_hand_item", ":player_agent", 1),
(agent_get_wielded_item, ":right_hand_item", ":player_agent", 2),
(agent_get_position, pos63,":player_agent"),
(position_move_y,pos63,75), #75 cm directly ahead, so it's not a cuboid space around player center
(agent_get_troop_id, ":id", ":player_agent"),
(troop_get_type, ":type", ":id"),
(try_begin),
	(eq, ":type", tf_male),
	(agent_play_sound, ":player_agent", "snd_man_yell"),
(else_try),
	(agent_play_sound, ":player_agent", "snd_woman_yell"),		
(try_end),
(try_for_agents,":agent"),
	(gt, ":agent", 0),
	(neg|agent_is_ally,":agent"),#don't atack allies
	(agent_is_human, ":agent"),#stop if not human			
	(agent_is_active,":agent"),
	(agent_is_alive,":agent"),
	(try_begin),
		(agent_get_position,pos62,":agent"),
		(get_distance_between_positions,":dist",pos63,pos62),		
		(lt,":dist",100),#Set this to whatever you like- 1 meter radius clears a big section of crowd
		(agent_get_horse, ":horse", ":agent"),
		(eq, ":horse", -1),	
		(neq,":agent",":player_agent"),	
		(agent_play_sound, ":player_agent", "snd_metal_hit_low_armor_low_damage"),				
		(position_move_y,pos62,-25),			
		(agent_set_position, ":agent", pos62),
		(agent_set_animation, ":agent","anim_dual_wield_strike"),			
	(try_end),
(try_end)
]),  
#Ik-Dual Wield End

module_mission_templates (you obviously need to put it into specific mt's like other common_ scripts):

Code:
common_dual_wield = (0,0,0,[
game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
(neg|main_hero_fallen),
],
[
(call_script, "script_ready_dual_wield"),
])

game_key_is_down, gk_attack),(game_key_clicked, gk_defend),
(neg|main_hero_fallen),
],
[
(call_script, "script_dual_wield_strike"),
])

module_animations (needs to do some and replace a free unused_human_anim ofc):

Code:
## dual_wield_ready
## dual_wield_strike

module_items

Code:
add anywhere you want:
#Ik Dual Wielded Start
["dh_bastard_sword", "Bastard Sword", [("bastard_sword_a",0),("bastard_sword_a_scabbard", ixmesh_carry)], itp_type_shield|itp_merchandise, itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,  264 , weight(2.0)|hit_points(7500)|body_armor(0)|spd_rtng(98)|weapon_length(1),imodbits_none ],
["dh_dagger", "Dagger", [("practice_dagger",0)], itp_type_shield|itp_merchandise, itcf_carry_dagger_front_left,  34 , weight(0.5)|hit_points(7500)|body_armor(0)|spd_rtng(110)|weapon_length(1),imodbits_none ],
["dh_", "", [("bastard_sword_a",0),("bastard_sword_a_scabbard", ixmesh_carry)], itp_type_shield|itp_merchandise, itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,  264 , weight(2.0)|hit_points(7500)|body_armor(0)|spd_rtng(98)|weapon_length(1),imodbits_none ],
["dh_", "", [("bastard_sword_a",0),("bastard_sword_a_scabbard", ixmesh_carry)], itp_type_shield|itp_merchandise, itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,  264 , weight(2.0)|hit_points(7500)|body_armor(0)|spd_rtng(98)|weapon_length(1),imodbits_none ],
["dh_", "", [("bastard_sword_a",0),("bastard_sword_a_scabbard", ixmesh_carry)], itp_type_shield|itp_merchandise, itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,  264 , weight(2.0)|hit_points(7500)|body_armor(0)|spd_rtng(98)|weapon_length(1),imodbits_none ],
...
#Ik Dual Wielded End

module_constants

Code:
add anywhere you want:
#Ik Dual Wielded Start
dual_wield_begin = "itm_dh_bastard_sword"
dual_wield_end = all_items_end
#Ik Dual Wielded End

I haven't tested and it don't do any damage, it just throw the enemy back a little
 
Ikaguia said:
...

######################################################################
#############################    Dual Wielding:  #############################
######################################################################

Here's my try:

module_scripts:

#Ik-Dual Wield Begin
("ready_dual_wield",[ 
(this_or_next|multiplayer_is_server),
(neg|game_in_multiplayer_mode),
(get_player_agent_no,":player_agent"),
(try_begin),
(gt, ":player_agent", 0),
(agent_get_animation, ":anim", ":player_agent",0),
(agent_get_horse, ":my_horse", ":player_agent"),
(agent_get_wielded_item, ":left_hand_item", ":player_agent", 1),
(agent_get_wielded_item, ":right_hand_item", ":player_agent", 2),
(try_begin),
        (is_between, :anim","ready_swingright_fist","parried_overswing_onehanded"),
(neq, ":anim", "dual_wield_strike"),
(neq, ":anim", ""), #put here the anims you dont want to use Dual Wield. Example: release_swingright_fist and release_swingright_fist_continue
(neq, ":anim", ""),#put here the anims you dont want to use Dual Wield. Example: release_swingright_fist and release_swingright_fist_continue
(neq, ":anim", ""),#put here the anims you dont want to use Dual Wield. Example: release_swingright_fist and release_swingright_fist_continue
(neq, ":anim", ""),#put here the anims you dont want to use Dual Wield. Example: release_swingright_fist and release_swingright_fist_continue
        ...

(eq, ":my_horse", -1),
(is_between, ":left_hand_item", dual_wield_begin, dual_wield_end),
        (assign, ":continue", 1)
        (try_begin),
            (eq, ":right_hand_item", "itm_bastard_sword")
            (eq, ":left_hand_item", "itm_dh_bastard_sword")
              (assign, ":continue", 0)
      (else_try)
(eq, ":right_hand_item", "itm_")      #put here the items you don't want to use in the right hand while the item bellow is equiped
(neq, ":left_hand_item", "itm_dh_") #put here the items you don't want to use in the left hand while the item above is equiped
(assign, ":continue", 0)
(else_try)
(eq, ":right_hand_item", "itm_")      #put here the items you don't want to use in the right hand while the item bellow is equiped
(eq, ":left_hand_item", "itm_dh_") #put here the items you don't want to use in the left hand while the item above is equiped
(assign, ":continue", 0)
(else_try)
(eq, ":right_hand_item", "itm_")      #put here the items you don't want to use in the right hand while the item bellow is equiped
(eq, ":left_hand_item", "itm_dh_") #put here the items you don't want to use in the left hand while the item above is equiped
(assign, ":continue", 0)
...

(try_end)
(eq, ":continue", 1)
(agent_set_animation, ":player_agent","anim_dual_wield_ready"),
(try_end),
(try_end),
]), 

("dual_wield_strike)",[ 
(agent_get_animation, ":anim", ":player_agent",0),
(eq, ":anim", "anim_dual_wield_ready"),
(agent_get_horse, ":my_horse", ":player_agent"),
(agent_get_wielded_item, ":left_hand_item", ":player_agent", 1),
(agent_get_wielded_item, ":right_hand_item", ":player_agent", 2),
(agent_get_position, pos63,":player_agent"),
(position_move_y,pos63,75), #75 cm directly ahead, so it's not a cuboid space around player center
(agent_get_troop_id, ":id", ":player_agent"),
(troop_get_type, ":type", ":id"),
(try_begin),
(eq, ":type", tf_male),
(agent_play_sound, ":player_agent", "snd_man_yell"),
(else_try),
(agent_play_sound, ":player_agent", "snd_woman_yell"),
(try_end),
(try_for_agents,":agent"),
(gt, ":agent", 0),
(neg|agent_is_ally,":agent"),#don't atack allies
(agent_is_human, ":agent"),#stop if not human
(agent_is_active,":agent"),
(agent_is_alive,":agent"),
(try_begin),
(agent_get_position,pos62,":agent"),
(get_distance_between_positions,":dist",pos63,pos62),
(lt,":dist",100),#Set this to whatever you like- 1 meter radius clears a big section of crowd
(agent_get_horse, ":horse", ":agent"),
(eq, ":horse", -1),
(neq,":agent",":player_agent"),
(agent_play_sound, ":player_agent", "snd_metal_hit_low_armor_low_damage"),
(position_move_y,pos62,-25),
(agent_set_position, ":agent", pos62),
(agent_set_animation, ":agent","anim_dual_wield_strike"),
(try_end),
(try_end)
]), 
#Ik-Dual Wield End

module_mission_templates (you obviously need to put it into specific mt's like other common_ scripts):

common_dual_wield = (0,0,0,[
game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
(neg|main_hero_fallen),
],
[
(call_script, "script_ready_dual_wield"),
])

game_key_is_down, gk_attack),(game_key_clicked, gk_defend),
(neg|main_hero_fallen),
],
[
(call_script, "script_dual_wield_strike"),
])

module_animations (needs to do some and replace a free unused_human_anim ofc):

## dual_wield_ready
## dual_wield_strike

module_items

add at the bottom:
#Ik Dual Wielded Start
["dh_bastard_sword", "Bastard Sword", [("bastard_sword_a",0),("bastard_sword_a_scabbard", ixmesh_carry)], itp_type_shield|itp_merchandise, itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,  264 , weight(2.0)|hit_points(7500)|body_armor(0)|spd_rtng(9:cool:|weapon_length(1),imodbits_none ],
["dh_dagger", "Dagger", [("practice_dagger",0)], itp_type_shield|itp_merchandise, itcf_carry_dagger_front_left,  34 , weight(0.5)|hit_points(7500)|body_armor(0)|spd_rtng(110)|weapon_length(1),imodbits_none ],
["dh_", "", [("bastard_sword_a",0),("bastard_sword_a_scabbard", ixmesh_carry)], itp_type_shield|itp_merchandise, itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,  264 , weight(2.0)|hit_points(7500)|body_armor(0)|spd_rtng(9:cool:|weapon_length(1),imodbits_none ],
["dh_", "", [("bastard_sword_a",0),("bastard_sword_a_scabbard", ixmesh_carry)], itp_type_shield|itp_merchandise, itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,  264 , weight(2.0)|hit_points(7500)|body_armor(0)|spd_rtng(9:cool:|weapon_length(1),imodbits_none ],
["dh_", "", [("bastard_sword_a",0),("bastard_sword_a_scabbard", ixmesh_carry)], itp_type_shield|itp_merchandise, itcf_carry_sword_left_hip|itcf_show_holster_when_drawn,  264 , weight(2.0)|hit_points(7500)|body_armor(0)|spd_rtng(9:cool:|weapon_length(1),imodbits_none ],
...
#Ik Dual Wielded End

module_constants

add anywhere you want:
#Ik Dual Wielded Start
dual_wield_begin = "itm_dh_bastard_sword"
dual_wield_end = all_items_end
#Ik Dual Wielded End

I haven't tested and it don't do any damage, it just throw the enemy back a little

parts in RED you have to change

edit: and it's just a try, I've made it without the module system(at my mother's PC xD), it is buggy for SURE

edit2: and if anyone wanna make the new animations... http://forums.taleworlds.com/index.php/topic,125282.0.html
 
It worked for some but some errors but now:


Traceback (most recent call last):
  File "process_init.py", line 2, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Traceback (most recent call last):
  File "process_global_variables.py", line 12, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Exporting strings...
Exporting skills...
Exporting tracks...
Exporting animations...
Exporting meshes...
Exporting sounds...
Exporting skins...
Traceback (most recent call last):
  File "process_map_icons.py", line 6, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Exporting faction data...
Exporting item data...
Traceback (most recent call last):
  File "process_items.py", line 66, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Exporting scene data...
Traceback (most recent call last):
  File "process_scenes.py", line 15, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Exporting troops data
Exporting particle data...
Traceback (most recent call last):
  File "process_scene_props.py", line 7, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Traceback (most recent call last):
  File "process_tableau_materials.py", line 8, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Traceback (most recent call last):
  File "process_presentations.py", line 8, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Exporting party_template data...
Traceback (most recent call last):
  File "process_parties.py", line 6, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Exporting quest data...
Exporting info_page data...
Traceback (most recent call last):
  File "process_scripts.py", line 4, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Traceback (most recent call last):
  File "process_mission_tmps.py", line 5, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 2245
    common_dual_wield = (0,0,0,[
                      ^
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "process_game_menus.py", line 8, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Traceback (most recent call last):
  File "process_simple_triggers.py", line 5, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Traceback (most recent call last):
  File "process_dialogs.py", line 9, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Traceback (most recent call last):
  File "process_global_variables_unused.py", line 3, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 20, in <module>
    from module_scripts import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_scripts.py", line 46984, in <module>
    (try_begin),
TypeError: 'tuple' object is not callable
Exporting postfx_params...

______________________________

Script processing has ended.
Press any key to exit. . .

Any idea how to fix this.
 
Traceback (most recent call last):
  File "process_init.py", line 2, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "process_global_variables.py", line 12, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Exporting strings...
Exporting skills...
Exporting tracks...
Exporting animations...
Exporting meshes...
Exporting sounds...
Exporting skins...
Traceback (most recent call last):
  File "process_map_icons.py", line 6, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Exporting faction data...
Exporting item data...
Traceback (most recent call last):
  File "process_items.py", line 66, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Exporting scene data...
Traceback (most recent call last):
  File "process_scenes.py", line 15, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Exporting troops data
Exporting particle data...
Traceback (most recent call last):
  File "process_scene_props.py", line 7, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "process_tableau_materials.py", line 8, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "process_presentations.py", line 8, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Exporting party_template data...
Traceback (most recent call last):
  File "process_parties.py", line 6, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Exporting quest data...
Exporting info_page data...
Traceback (most recent call last):
  File "process_scripts.py", line 7, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "process_mission_tmps.py", line 5, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "process_game_menus.py", line 8, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "process_simple_triggers.py", line 5, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "process_dialogs.py", line 9, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "process_global_variables_unused.py", line 3, in <module>
    from process_operations import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
process_operations.py", line 21, in <module>
    from module_mission_templates import *
  File "C:\Program Files\Mount&Blade Warband\Modules\Native Expansion IV System\
module_mission_templates.py", line 41
    game_key_is_down, gk_attack),(game_key_is_down, gk_defend),
                              ^
SyntaxError: invalid syntax
Exporting postfx_params...

______________________________

Script processing has ended.
Press any key to exit. . .


New bug.Can't seem to fix.
 
Teutonic Archer Knight said:
I'm highly impressed that people are finally starting to attempt dual wield, and not just criticizing it  :mrgreen:
We don't criticize things in the Forge.  That's for the The King's Court  :razz: 
 
Wait a sec.I thought up for quite some time and I prepared that what I call "Script Scheme".It is basically the script untranslated in the scripting language.
Here's the scheme of dual wield.

troop wields item with flag "itp_offhand"
if mouse direction is "forward"
play attack anim "anim_overthrust_dual"
if mouse direction "is left"
play attack anim "anim_dual_strike_left"
if mouse direction "is right"
play attack anim "anim_dual_strike_right"
if mouse direction is "backward"
play attack anim "anim_dual_strike_pierce"
 
Back
Top Bottom