搜索结果: *

  1. B Other Combat Animation Enhancement - Fifth Release with Trailer 15/11/10

    Papa Lazarou, is it possible to receive a "module_items.py" file from your mod? I would like to implement your animations into my own custom mod... and they work just fine - but some weapon stats are off (e.g. bows in your mod have <50 speed, whereas in native they are in >80 speed). It would be helpful to know all such changes.

    Thanks
  2. Crossbow vs Longbow

    a horse will not fall if an arrow breaks its scrawny lower leg? What color are the clowds in your little world?
    An arrow won`t break a horse leg. Or human for that matter. Also good luck trying to hit the joints of a galloping horse.....
  3. Crossbow vs Longbow

    Ludial 说:
    eh? I shoot it once and it dies, at least when I pack a strong war bow, bodkin and power draw 6, and it's charging at me(which is why I love it when cavalry are charging me :mrgreen:)
    in RL it's even better - you scratch the leg of the animal with an arrow and it immediately goes down; with the knight; while charging :mrgreen:
    Err, no? Horses are pretty resistant to arrow and gunfire. They are flock animals, if charging along other men and horses, they will not stop unless seriously wounded (think broken legs). And arrows are too lightweigh too cause a major injury on a horse, no matter their number. Sure, the animal will eventually collapse due to a blood loss, but not before charge reaches it`s target. That is why horse archers were so effective - they could pepper the enemies from a distance and than retreat untill horses of their opponents fell on the ground.
  4. armor_soak & reduction_faction - what do they really mean?

    I copied this info from a long forgotten post:

    The math behind damage is:

    - The weapon rolls randomly between 50 and 100% of its listed damage as modified by the character's skill. Call this D
    - The target's armor does likewise, call this A
    - For cutting weapons the damage applied to hit points = (D - 0.65A)(1 - A/100)
    - For piercing the result = (D - 0.35A)(1 - 0.65A/100)
    - For blunt the result - (D - 0.3A)(1 - 0.65A/100)
    - then speed and headshot and anti-shield and couched bonuses are applied (I think.  I know they go somewhere, pretty sure it's here)

    So blunt is slightly better than pierce for the same listed damage, and both are much better than cut.  Which weapon is best depends on who you intend to use it against, as their armor will affect different types of weapons differently.  A great ax will be better than a hammer vs light and medium armors because of its higher base damage, but the hammer will be better vs plate because more damage will penetrate.

    I did a full study of these tradeoffs plus speed and reach with graphs and so on for 0.96 and am working on updating it for 1.011.  The old thread is still buried deep in this board somewhere.
  5. OSP Kit Combat Battlefield Tactics kit. Multiple formations per team+command revamp!

    There are only 2 types of changes. First, I commented out (i.e. put # in front of a verse) some parts of the Mirathei`s code, which were responsible for AI putting it`s cavalry into wedge. Next you should look for:
        (5.0, 0, 0,
          [(assign,":enemy",-1),
          (assign,":infantry",0),
          (assign,":cavalry",0),
          (try_for_agents,":agent"),
            (agent_is_human,":agent"),
            (agent_is_alive,":agent"),
            (neg|agent_is_ally,":agent"),
            (assign,":enemy",":agent"),
            (agent_get_class ,":class", ":agent"),
            (try_begin),
                (eq,":class",grc_cavalry),
                (val_add,":cavalry",1),
            (else_try),
                (val_add,":infantry",1),
            (end_try),
          (end_try),
          (gt,":enemy",-1),
          (agent_get_team  ,reg0, ":enemy"),
          (assign,":ratio",":infantry"),
          (val_div,":ratio",":cavalry"),
          (try_begin),
            (gt,":ratio",4),
            (lt,":cavalry",4),

            (team_give_order, reg0, grc_everyone, mordr_dismount),
          (else_try),
            (team_give_order, reg0, grc_everyone, mordr_mount),
          (end_try),], []),

    and:

        (5.0, 0, 0,
          [(neq, "$battle_won", 1),
          (assign,":infantry",0),
          (assign,":cavalry",0),
          (get_player_agent_no,":player"),
          (agent_get_team  ,reg0, ":player"),
          (val_add,reg0,2),
          (try_for_agents,":agent"),
            (agent_is_human,":agent"),
            (agent_is_alive,":agent"),
            (agent_get_team  ,":team", ":agent"),
            (eq,":team",reg0),
            (agent_get_class ,":class", ":agent"),
            (try_begin),
                (eq,":class",grc_cavalry),
                (val_add,":cavalry",1),
            (else_try),
                (val_add,":infantry",1),
            (end_try),
          (end_try),
          (assign,":ratio",":infantry"),
          (val_div,":ratio",":cavalry"),
          (try_begin),
            (gt,":ratio",4),
            (lt,":cavalry",4), 

            (team_give_order, reg0, grc_everyone, mordr_dismount),
          (else_try),
            (team_give_order, reg0, grc_everyone, mordr_mount),
          (end_try),], []),

    Changes are in blue. The first number is minimal ratio of infantry to cavalry (4:1) and second maximum amount of riders (4) in order for AI to dismount it`s cavalry
  6. OSP Kit Combat Battlefield Tactics kit. Multiple formations per team+command revamp!

    I`ve made a small update to the code, I posted on a previous page. In original Miarthei`s code cavalry of the AI opponent will dismount, if there is more than 2 times infantry than cavalry in AI army and if the number of cavalry is less than 10. The idea was not to send suicide cavalry charges if AI had a lot of infantry and few riders. However IMHO the conditions were too broad and a "standart composition" swadian armies tended to dismount their knights often, which was not good at all.

    Therefore I changed the conditions - now infantry has to be 4 times as numerous, as cavalry and there should be no more than 4 riders for AI player to dismount it`s cavalry. Just as in the previous edition, AI will not put it`s cavalry into formation - riders are much more effective, when their mobility is not hampered by scripted formation.

    The code:
    插入代码块:
      (
        "lead_charge",mtf_battle_mode,charge,
        "You lead your men to battle.",
        [
         (1,mtef_defenders|mtef_team_0,0,aif_start_alarmed,12,[]),
         (0,mtef_defenders|mtef_team_0,0,aif_start_alarmed,0,[]),
         (4,mtef_attackers|mtef_team_1,0,aif_start_alarmed,12,[]),
         (4,mtef_attackers|mtef_team_1,0,aif_start_alarmed,0,[]),
         ],
        [
    ######Tactical triggers below##########
    
    (ti_before_mission_start, 0, 0, [], 
       [ (assign,"$formation",0),
        (assign,"$infantryformationtype",0),
        (assign,"$archerformationtype",0),
        (assign,"$cavalryformationtype",0),
        ]),
    
    
         (0, 0, 0,
          [(key_clicked, key_2),       
           (assign,"$formation",grc_infantry),
            ], []),
         (0, 0, 0,
          [(key_clicked, key_3),        
           (assign,"$formation",grc_archers),
            ], []),
         (0, 0, 0,
          [(key_clicked, key_4),        
           (assign,"$formation",grc_cavalry),
            ], []),
    
    
         (0, 0, 0,
          [(key_clicked, key_j),        
           (get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,"$formation"),
           (call_script,"script_cf_formation"),
           (try_begin),
              (eq,"$formation",grc_infantry),
              (assign,"$infantryformationtype",1),
           (else_try),
              (eq,"$formation",grc_archers),
              (assign,"$archerformationtype",1),
           (else_try),
              (eq,"$formation",grc_cavalry),
              (assign,"$cavalryformationtype",1),
           (end_try),
           (display_message,"@Forming_ranks."),
            ], []),
    
         (0, 0, 0,
          [(key_clicked, key_p),        
           (get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,"$formation"),
           (call_script,"script_cf_formation_stagger"),
           (call_script,"script_cf_formation"),
           (try_begin),
              (eq,"$formation",grc_infantry),
              (assign,"$infantryformationtype",3),
           (else_try),
              (eq,"$formation",grc_archers),
              (assign,"$archerformationtype",3),
           (else_try),
              (eq,"$formation",grc_cavalry),
              (assign,"$cavalryformationtype",3),
           (end_try),
           (display_message,"@Forming_a_line."),
            ], []),
    
         (0, 0, 0,
          [(key_clicked, key_k),        
           (get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,"$formation"),
           (call_script,"script_cf_formation_wedge"),
           (call_script,"script_cf_formation"),
           (try_begin),
              (eq,"$formation",grc_infantry),
              (assign,"$infantryformationtype",2),
           (else_try),
              (eq,"$formation",grc_archers),
              (assign,"$archerformationtype",2),
           (else_try),
              (eq,"$formation",grc_cavalry),
              (assign,"$cavalryformationtype",2),
           (end_try),
           (display_message,"@Forming_a_wedge."),
            ], []),
    
         (0, 0, 0,
          [(key_clicked, key_u),        
           (get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,"$formation"),
           (call_script,"script_formation_end"),
           (call_script,"script_cf_formation"),
           (try_begin),
              (eq,"$formation",grc_infantry),
              (assign,"$infantryformationtype",0),
           (else_try),
              (eq,"$formation",grc_archers),
              (assign,"$archerformationtype",0),
           (else_try),
              (eq,"$formation",grc_cavalry),
              (assign,"$cavalryformationtype",0),
           (end_try),
           (display_message,"@Formation_disassembled."),
            ], []),
    
         (5.0, 0, 0,
          [(try_for_agents,":agent"),
             (agent_is_human,":agent"),
             (neg|agent_is_ally,":agent"),
             (assign,":enemy",":agent"),
           (end_try),
           (gt,":enemy",-1),
           (agent_get_team  ,reg0, ":enemy"),
           (assign,reg1,grc_cavalry),
           (call_script,"script_formation_end"),
           (assign,reg1,grc_infantry),
           (call_script,"script_formation_end"),
           (assign,reg1,grc_archers),
           (call_script,"script_formation_end"),], []),
    
         (5.0, 0, 0,
          [(assign,":enemy",-1),
           (assign,":infantry",0),
           (assign,":cavalry",0),
           (try_for_agents,":agent"),
             (agent_is_human,":agent"),
             (agent_is_alive,":agent"),
             (neg|agent_is_ally,":agent"),
             (assign,":enemy",":agent"),
             (agent_get_class ,":class", ":agent"),
             (try_begin),
                (eq,":class",grc_cavalry),
                (val_add,":cavalry",1),
             (else_try),
                (val_add,":infantry",1),
             (end_try),
           (end_try),
           (gt,":enemy",-1),
           (agent_get_team  ,reg0, ":enemy"),
           (assign,":ratio",":infantry"),
           (val_div,":ratio",":cavalry"),
           (try_begin),
             (gt,":ratio",4),
             (lt,":cavalry",4),
             (team_give_order, reg0, grc_everyone, mordr_dismount),
           (else_try),
             (team_give_order, reg0, grc_everyone, mordr_mount),
           (end_try),], []),
    
    
         (5.0, 0, 0,
          [(get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (val_add,reg0,2),
           (assign,reg1,grc_cavalry),
           (call_script,"script_formation_end"),
           (assign,reg1,grc_infantry),
           (call_script,"script_formation_end"),
           (assign,reg1,grc_archers),
           (call_script,"script_formation_end"),], []),
    
         (5.0, 0, 0,
          [(neq, "$battle_won", 1),
           (assign,":infantry",0),
           (assign,":cavalry",0),
           (get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (val_add,reg0,2),
           (try_for_agents,":agent"),
             (agent_is_human,":agent"),
             (agent_is_alive,":agent"),
             (agent_get_team  ,":team", ":agent"),
             (eq,":team",reg0),
             (agent_get_class ,":class", ":agent"),
             (try_begin),
                (eq,":class",grc_cavalry),
                (val_add,":cavalry",1),
             (else_try),
                (val_add,":infantry",1),
             (end_try),
           (end_try),
           (assign,":ratio",":infantry"),
           (val_div,":ratio",":cavalry"),
           (try_begin),
             (gt,":ratio",4),
             (lt,":cavalry",4),
             (team_give_order, reg0, grc_everyone, mordr_dismount),
           (else_try),
             (team_give_order, reg0, grc_everyone, mordr_mount),
           (end_try),], []),
    
         (0.2, 0, 0,
          [(get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,grc_infantry),
           (try_begin),
              (eq,"$infantryformationtype",1),
              (call_script,"script_cf_formation"),
           (else_try),
              (eq,"$infantryformationtype",2),
              (call_script,"script_cf_formation_wedge"),
           (else_try),
              (eq,"$infantryformationtype",3),
              (call_script,"script_cf_formation_stagger"),
           (else_try),
              (call_script,"script_formation_end"),
           (end_try),], []),
    
         (0.2, 0, 0,
          [(get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,grc_archers),
           (try_begin),
              (eq,"$archerformationtype",1),
              (call_script,"script_cf_formation"),
           (else_try),
              (eq,"$archerformationtype",2),
              (call_script,"script_cf_formation_wedge"),
           (else_try),
              (eq,"$archerformationtype",3),
              (call_script,"script_cf_formation_stagger"),
           (else_try),
              (call_script,"script_formation_end"),
           (end_try),], []),
    
    #     (0.2, 0, 0,
    #      [(get_player_agent_no,":player"),
    #       (agent_get_team  ,reg0, ":player"),
    #       (assign,reg1,grc_cavalry),
    #       (try_begin),
    #          (eq,"$cavalryformationtype",1),
    #          (call_script,"script_cf_formation"),
    #       (else_try),
    #          (eq,"$cavalryformationtype",2),
    #          (call_script,"script_cf_formation_wedge"),
    #       (else_try),
    #          (eq,"$cavalryformationtype",3),
    #          (call_script,"script_cf_formation_stagger"),
    #       (else_try),
    #          (call_script,"script_formation_end"),
    #       (end_try),], []),
    
         (0.2, 0, 0,
          [(try_for_agents,":agent"),
             (agent_is_human,":agent"),
             (neg|agent_is_ally,":agent"),
             (assign,":enemy",":agent"),
           (end_try),
           (gt,":enemy",-1),
           (agent_get_team  ,reg0, ":enemy"),
           (store_normalized_team_count,":num", reg0),  
           (gt,":num",5),
           (assign,reg1,grc_infantry),
           (call_script,"script_cf_formation"),
            ], []),
    
         (0.2, 0, 0,
          [(try_for_agents,":agent"),
             (agent_is_human,":agent"),
             (neg|agent_is_ally,":agent"),
             (assign,":enemy",":agent"),
           (end_try),
           (gt,":enemy",-1),
           (agent_get_team  ,reg0, ":enemy"),
           (store_normalized_team_count,":num", reg0),  
           (gt,":num",5),
           (assign,reg1,grc_archers),
           (call_script,"script_cf_formation_stagger"),
            ], []),
    
    #     (0.2, 0, 0,
    #      [(try_for_agents,":agent"),
    #         (agent_is_human,":agent"),
    #         (neg|agent_is_ally,":agent"),
    #         (assign,":enemy",":agent"),
    #       (end_try),
    #       (gt,":enemy",-1),
    #       (agent_get_team  ,reg0, ":enemy"),
    #       (store_normalized_team_count,":num", reg0),  
    #       (gt,":num",5),
    #       (assign,reg1,grc_cavalry),
    #       (call_script,"script_cf_formation_wedge"),
    #        ], []),
    
         (0.2, 0, 0,
          [(get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (val_add,reg0,2),
           (store_normalized_team_count,":num", reg0),  
           (gt,":num",5),
           (assign,reg1,grc_infantry),
           (call_script,"script_cf_formation"),
            ], []),
    
         (0.2, 0, 0,
          [(get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (val_add,reg0,2),
           (store_normalized_team_count,":num", reg0),  
           (gt,":num",5),
           (assign,reg1,grc_archers),
           (call_script,"script_cf_formation_stagger"),
            ], []),
    
    #     (0.2, 0, 0,
    #      [(get_player_agent_no,":player"),
    #       (agent_get_team  ,reg0, ":player"),
    #       (val_add,reg0,2),
    #       (store_normalized_team_count,":num", reg0),  
    #       (gt,":num",5),
    #       (assign,reg1,grc_cavalry),
    #       (call_script,"script_cf_formation_wedge"),
    #        ], []),
    
    
    ##########Tactical triggers above########
  7. OSP Kit Combat Battlefield Tactics kit. Multiple formations per team+command revamp!

    If I understand correctly, I only edited module_mission_templates.py and module_scripts.py, therefore, in order to keep all the other things that have changed from my 1257 AD mod, I should only copy the two resulting text files, mission_templates.txt and scripts.txt, right?

    I`m not sure, what you actually did (my english is quite poor). I fear, that you may have edited the native python files, compile them and then copied 2 .txt files into your 1257 mod directory. This is not a good way of editing MB. If these files have been edited by 1257 mod team (and most probably they were), than you will experience a lot of problems or outright crashes.

    To make formations work in a 1257 mod (or any other for that matter), you should:

    - Create a new folder for your own mod (e.g. "Improved 1257 mod") in  your M&B modules folder
    - Copy everything from the original 1257 folder to the new one.
    - Get the source code for 1257 mod (all the .py files for 1257 mod)
    - In said source code open module_mission_templates.py with a text editor and paste Mirathei code in the appropiate place.
    - Open module_scripts.py and paste Mirathei additions at the end of the file.
    - Open module_info.py and edit target directory, to where your new mod is located.
    - Compile it and look for errors.
    - Check how it works in the game.

    Hope that helps :smile:
  8. Coming Back To M&B

    Hmmm... From the simple_triggers:
    插入代码块:
      # Checking center upgrades
      (12,
       [(try_for_range, ":center_no", centers_begin, centers_end),
          (party_get_slot, ":cur_improvement", ":center_no", slot_center_current_improvement),
          (gt, ":cur_improvement", 0),
          (party_get_slot, ":cur_improvement_end_time", ":center_no", slot_center_improvement_end_hour),
          (store_current_hours, ":cur_hours"),
          (ge, ":cur_hours", ":cur_improvement_end_time"),
          (party_set_slot, ":center_no", ":cur_improvement", 1),
          (party_set_slot, ":center_no", slot_center_current_improvement, 0),
          (call_script, "script_get_improvement_details", ":cur_improvement"),
          (try_begin),
            (party_slot_eq, ":center_no", slot_town_lord, "trp_player"),
            (str_store_party_name, s4, ":center_no"),
            (display_log_message, "@Building of {s0} in {s4} has been completed."),
          (try_end),
          (try_begin),
            (is_between, ":center_no", villages_begin, villages_end),
            (eq, ":cur_improvement", slot_center_has_fish_pond),
            (call_script, "script_change_center_prosperity", ":center_no", 5),
          (try_end),
        (try_end),
        ]),
    According to this trigger, mill (fish_pond in game files) in a village should increase it`s prosperity by 5 every 12 hours. In what way is it bugged?

    Moreover in scripts you can see this:
    插入代码块:
      #script_get_center_ideal_prosperity
      # INPUT: arg1 = center_no
      # OUTPUT: reg0 = ideal_prosperity
      ("get_center_ideal_prosperity",
        [(store_script_param, ":center_no", 1),
         (assign, ":ideal", 40),
         (try_begin),
           (is_between, ":center_no", villages_begin, villages_end),
           (try_begin),
             (party_slot_eq, ":center_no", slot_center_has_fish_pond, 1),
             (val_add, ":ideal", 5), 
           (try_end),
           (party_get_slot, ":land_quality", ":center_no", slot_village_land_quality),
           (val_mul, ":land_quality", 3),
           (val_add, ":ideal", ":land_quality"),
           (party_get_slot, ":num_cattle", ":center_no", slot_village_number_of_cattle),
           (val_div, ":num_cattle", 20),
           (val_add, ":ideal", ":num_cattle"),
         (else_try),
           (try_for_range, ":village_no", villages_begin, villages_end),
             (party_slot_eq, ":village_no", slot_village_bound_center, ":center_no"),
             (party_get_slot, ":prosperity", ":village_no", slot_town_prosperity),
             (val_div, ":prosperity", 20),
             (val_add, ":ideal", ":prosperity"),
           (try_end),
         (try_end),
         (assign, reg0, ":ideal"),
         ]),
    It raises ideal prosperity of the settlement if the mill (fish_pond) is present (besides other things). And in triggers you see:
    插入代码块:
      #Converging center prosperity to ideal prosperity once in every 15 days
      (24*15,
       [(try_for_range, ":center_no", centers_begin, centers_end),
          (call_script, "script_get_center_ideal_prosperity", ":center_no"),
          (assign, ":ideal_prosperity", reg0),
          (party_get_slot, ":prosperity", ":center_no", slot_town_prosperity),
          (try_begin),
            (gt, ":prosperity", ":ideal_prosperity"),
            (call_script, "script_change_center_prosperity", ":center_no", -1),
          (else_try),
            (lt, ":prosperity", ":ideal_prosperity"),
            (call_script, "script_change_center_prosperity", ":center_no", 1),
          (try_end),
        (try_end),
        ]),
    So once every 15 days settlement prosperity shifts towards ideal prosperity by 1 point. This is not very much.... but again, why do you suppose it`s not working?
  9. Are Rhodoks effective? A poll.

    I`ve found, that taking away shields from rhodok spearmen line makes them much better at melee. With a pavise and a long spear they can`t do zilch to enemy soldiers, who are at the axe range. Spears need distance for thrusting. On top of that, spear with shield gets 35% damage and speed penalty. No wonder, that Spearmen and Trained Spearmen seem so pathetic. Vets and Sarges get 1-handed weapons and 2-handed polearms and thus fare better.

    However taking away pavises from low level troops makes them very vulnerable to archery.... Currently my solution is to remove "guarantee shield" entry - some spearmen get shields, some don`t. But I`m not sure - perhaps it would better to remove shields from them entirely. What do you think?
  10. Coming Back To M&B

    Dragon13 说:
    Charlot 说:
    The best thing to do is to build a mill, this increases your vilage prosperity by 54% or something every month.

    It only gives it once. TheMageLord has a tweak to make it once a week (or month, can't remember). It is also 4%, not 5%.
    I think, you are wrong. Mill (fish_pond in the module files) increases increases "ideal village prosperity" by 5%.  AFAIK village prosperity tends to shift towards this "ideal prosperity", all other things being equal. So increasing ideal prosperity by 5% makes it easier for the village to reach high prosperity level ALL THE TIME, not just once.
  11. Windmill and cattle fixes in Module system

    Thanks guys!
    I`ve already put together a small mod which changes troop and weapons stats and added 2 new units to vanilla. However working with scripts is still ahead of me :smile: I`ll try to understand, how school and cattle scripts work... Tips are appreciated :smile:
  12. Windmill and cattle fixes in Module system

    Hi! I would like to fix these 2 things via the python files, 1. Improving the growth of cattle in the villages 2. Fixing Windmill to give 5% prosperity growth each week. I know, that this fixes are available in the form of text files but, having modified this and that..... I need them in...
  13. OSP Kit Combat Battlefield Tactics kit. Multiple formations per team+command revamp!

    AI will not put it`s cavalry into formation. They will behave, as in vanilla native - with short enough distance, they will charge "every man for himself". You will not see cavalry engaging enemy at the trot speed and getting bogged down easily.

    Human player still has the option to form his/hers cavalry in line, ranks or wedge.
  14. OSP Kit Combat Battlefield Tactics kit. Multiple formations per team+command revamp!

    Ok. :smile: If you like formations mod but are disappointed by the performance of cavalry, open "module_mission_templates.py" and replace Mirathei code with this. Note, that I just "commented" some parts of Mirathei`s code - all credit goes to him. Module_scripts.py stays the same, as on the first page of this thread.
    插入代码块:
        
    ######Tactical triggers below##########
    
    (ti_before_mission_start, 0, 0, [], 
       [ (assign,"$formation",0),
        (assign,"$infantryformationtype",0),
        (assign,"$archerformationtype",0),
        (assign,"$cavalryformationtype",0),
        ]),
    
    
         (0, 0, 0,
          [(key_clicked, key_2),       
           (assign,"$formation",grc_infantry),
            ], []),
         (0, 0, 0,
          [(key_clicked, key_3),        
           (assign,"$formation",grc_archers),
            ], []),
         (0, 0, 0,
          [(key_clicked, key_4),        
           (assign,"$formation",grc_cavalry),
            ], []),
    
    
         (0, 0, 0,
          [(key_clicked, key_j),        
           (get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,"$formation"),
           (call_script,"script_cf_formation"),
           (try_begin),
              (eq,"$formation",grc_infantry),
              (assign,"$infantryformationtype",1),
           (else_try),
              (eq,"$formation",grc_archers),
              (assign,"$archerformationtype",1),
           (else_try),
              (eq,"$formation",grc_cavalry),
              (assign,"$cavalryformationtype",1),
           (end_try),
           (display_message,"@Forming_ranks."),
            ], []),
    
         (0, 0, 0,
          [(key_clicked, key_p),        
           (get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,"$formation"),
           (call_script,"script_cf_formation_stagger"),
           (call_script,"script_cf_formation"),
           (try_begin),
              (eq,"$formation",grc_infantry),
              (assign,"$infantryformationtype",3),
           (else_try),
              (eq,"$formation",grc_archers),
              (assign,"$archerformationtype",3),
           (else_try),
              (eq,"$formation",grc_cavalry),
              (assign,"$cavalryformationtype",3),
           (end_try),
           (display_message,"@Forming_a_line."),
            ], []),
    
         (0, 0, 0,
          [(key_clicked, key_k),        
           (get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,"$formation"),
           (call_script,"script_cf_formation_wedge"),
           (call_script,"script_cf_formation"),
           (try_begin),
              (eq,"$formation",grc_infantry),
              (assign,"$infantryformationtype",2),
           (else_try),
              (eq,"$formation",grc_archers),
              (assign,"$archerformationtype",2),
           (else_try),
              (eq,"$formation",grc_cavalry),
              (assign,"$cavalryformationtype",2),
           (end_try),
           (display_message,"@Forming_a_wedge."),
            ], []),
    
         (0, 0, 0,
          [(key_clicked, key_u),        
           (get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,"$formation"),
           (call_script,"script_formation_end"),
           (call_script,"script_cf_formation"),
           (try_begin),
              (eq,"$formation",grc_infantry),
              (assign,"$infantryformationtype",0),
           (else_try),
              (eq,"$formation",grc_archers),
              (assign,"$archerformationtype",0),
           (else_try),
              (eq,"$formation",grc_cavalry),
              (assign,"$cavalryformationtype",0),
           (end_try),
           (display_message,"@Formation_disassembled."),
            ], []),
    
         (5.0, 0, 0,
          [(try_for_agents,":agent"),
             (agent_is_human,":agent"),
             (neg|agent_is_ally,":agent"),
             (assign,":enemy",":agent"),
           (end_try),
           (gt,":enemy",-1),
           (agent_get_team  ,reg0, ":enemy"),
           (assign,reg1,grc_cavalry),
           (call_script,"script_formation_end"),
           (assign,reg1,grc_infantry),
           (call_script,"script_formation_end"),
           (assign,reg1,grc_archers),
           (call_script,"script_formation_end"),], []),
    
         (5.0, 0, 0,
          [(assign,":enemy",-1),
           (assign,":infantry",0),
           (assign,":cavalry",0),
           (try_for_agents,":agent"),
             (agent_is_human,":agent"),
             (agent_is_alive,":agent"),
             (neg|agent_is_ally,":agent"),
             (assign,":enemy",":agent"),
             (agent_get_class ,":class", ":agent"),
             (try_begin),
                (eq,":class",grc_cavalry),
                (val_add,":cavalry",1),
             (else_try),
                (val_add,":infantry",1),
             (end_try),
           (end_try),
           (gt,":enemy",-1),
           (agent_get_team  ,reg0, ":enemy"),
           (assign,":ratio",":infantry"),
           (val_div,":ratio",":cavalry"),
           (try_begin),
             (gt,":ratio",2),
             (lt,":cavalry",10),
             (team_give_order, reg0, grc_everyone, mordr_dismount),
           (else_try),
             (team_give_order, reg0, grc_everyone, mordr_mount),
           (end_try),], []),
    
    
         (5.0, 0, 0,
          [(get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (val_add,reg0,2),
           (assign,reg1,grc_cavalry),
           (call_script,"script_formation_end"),
           (assign,reg1,grc_infantry),
           (call_script,"script_formation_end"),
           (assign,reg1,grc_archers),
           (call_script,"script_formation_end"),], []),
    
         (5.0, 0, 0,
          [(neq, "$battle_won", 1),
           (assign,":infantry",0),
           (assign,":cavalry",0),
           (get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (val_add,reg0,2),
           (try_for_agents,":agent"),
             (agent_is_human,":agent"),
             (agent_is_alive,":agent"),
             (agent_get_team  ,":team", ":agent"),
             (eq,":team",reg0),
             (agent_get_class ,":class", ":agent"),
             (try_begin),
                (eq,":class",grc_cavalry),
                (val_add,":cavalry",1),
             (else_try),
                (val_add,":infantry",1),
             (end_try),
           (end_try),
           (assign,":ratio",":infantry"),
           (val_div,":ratio",":cavalry"),
           (try_begin),
             (gt,":ratio",2),
             (lt,":cavalry",10),
             (team_give_order, reg0, grc_everyone, mordr_dismount),
           (else_try),
             (team_give_order, reg0, grc_everyone, mordr_mount),
           (end_try),], []),
    
         (0.2, 0, 0,
          [(get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,grc_infantry),
           (try_begin),
              (eq,"$infantryformationtype",1),
              (call_script,"script_cf_formation"),
           (else_try),
              (eq,"$infantryformationtype",2),
              (call_script,"script_cf_formation_wedge"),
           (else_try),
              (eq,"$infantryformationtype",3),
              (call_script,"script_cf_formation_stagger"),
           (else_try),
              (call_script,"script_formation_end"),
           (end_try),], []),
    
         (0.2, 0, 0,
          [(get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (assign,reg1,grc_archers),
           (try_begin),
              (eq,"$archerformationtype",1),
              (call_script,"script_cf_formation"),
           (else_try),
              (eq,"$archerformationtype",2),
              (call_script,"script_cf_formation_wedge"),
           (else_try),
              (eq,"$archerformationtype",3),
              (call_script,"script_cf_formation_stagger"),
           (else_try),
              (call_script,"script_formation_end"),
           (end_try),], []),
    
    #     (0.2, 0, 0,
    #      [(get_player_agent_no,":player"),
    #       (agent_get_team  ,reg0, ":player"),
    #       (assign,reg1,grc_cavalry),
    #       (try_begin),
    #          (eq,"$cavalryformationtype",1),
    #          (call_script,"script_cf_formation"),
    #       (else_try),
    #          (eq,"$cavalryformationtype",2),
    #          (call_script,"script_cf_formation_wedge"),
    #       (else_try),
    #          (eq,"$cavalryformationtype",3),
    #          (call_script,"script_cf_formation_stagger"),
    #       (else_try),
    #          (call_script,"script_formation_end"),
    #       (end_try),], []),
    
         (0.2, 0, 0,
          [(try_for_agents,":agent"),
             (agent_is_human,":agent"),
             (neg|agent_is_ally,":agent"),
             (assign,":enemy",":agent"),
           (end_try),
           (gt,":enemy",-1),
           (agent_get_team  ,reg0, ":enemy"),
           (store_normalized_team_count,":num", reg0),  
           (gt,":num",5),
           (assign,reg1,grc_infantry),
           (call_script,"script_cf_formation"),
            ], []),
    
         (0.2, 0, 0,
          [(try_for_agents,":agent"),
             (agent_is_human,":agent"),
             (neg|agent_is_ally,":agent"),
             (assign,":enemy",":agent"),
           (end_try),
           (gt,":enemy",-1),
           (agent_get_team  ,reg0, ":enemy"),
           (store_normalized_team_count,":num", reg0),  
           (gt,":num",5),
           (assign,reg1,grc_archers),
           (call_script,"script_cf_formation_stagger"),
            ], []),
    
    #     (0.2, 0, 0,
    #      [(try_for_agents,":agent"),
    #         (agent_is_human,":agent"),
    #         (neg|agent_is_ally,":agent"),
    #         (assign,":enemy",":agent"),
    #       (end_try),
    #       (gt,":enemy",-1),
    #       (agent_get_team  ,reg0, ":enemy"),
    #       (store_normalized_team_count,":num", reg0),  
    #       (gt,":num",5),
    #       (assign,reg1,grc_cavalry),
    #       (call_script,"script_cf_formation_wedge"),
    #        ], []),
    
         (0.2, 0, 0,
          [(get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (val_add,reg0,2),
           (store_normalized_team_count,":num", reg0),  
           (gt,":num",5),
           (assign,reg1,grc_infantry),
           (call_script,"script_cf_formation"),
            ], []),
    
         (0.2, 0, 0,
          [(get_player_agent_no,":player"),
           (agent_get_team  ,reg0, ":player"),
           (val_add,reg0,2),
           (store_normalized_team_count,":num", reg0),  
           (gt,":num",5),
           (assign,reg1,grc_archers),
           (call_script,"script_cf_formation_stagger"),
            ], []),
    
    #     (0.2, 0, 0,
    #      [(get_player_agent_no,":player"),
    #       (agent_get_team  ,reg0, ":player"),
    #       (val_add,reg0,2),
    #       (store_normalized_team_count,":num", reg0),  
    #       (gt,":num",5),
    #       (assign,reg1,grc_cavalry),
    #       (call_script,"script_cf_formation_wedge"),
    #        ], []),
    
    
    ##########Tactical triggers above########
  15. OSP Kit Combat Battlefield Tactics kit. Multiple formations per team+command revamp!

    Yes! :wink:
    Ok, you were right - deleting all cavalry entries lead to compilation errors. But I managed to do it in the smart way (only deleted AI part). It compiles without errors and WORKS! AI puts archers and infantry in the formation, but cavalry roams freely. It`s not perfect, but seems to me to be the best solution. Additionally human player may put cavalry into formation, if he/she so desires.
  16. Tactics with Rodok infantry

    Tzsak 说:
    Make infantry stand close together and hold ground somewhere (if you're up against cavalry, on a hill). Position your crossbowmen so that they can fire at the enemy without your infantry being in the way (higher up on the hill or to the side somewhere if you don't think they'll be attacked there). To move around, I'd recommend moving them on the tactical map or using move forward 10 paces so that they don't get separated too much. Keeping them close together is probably the most important thing. Once your crossbowmen run out of ammo they can still be pretty decent infantry, and since they have big shields they can be good at closing in on enemy archers, as well as flanking enemy formations or just bolstering your infantry. On the subject of how your infantry to crossbowmen ratio, it doesn't matter too much but I tend to keep it around 50/50 unless I'm fighting lots of cavalry, in which case I'll have a few more infantry.

    My army got a bit more experienced already. With vet. spearmen and sergeants Rhodok infantry fares much better. I think in the beginning, when you mainly fight infantry-based parties, it`s best to concentrate on crossbowmen. Early crossbows seem to be better than spearmen in melee with infantry, not to mention thier ranged weapon...
    Spearmen, not surpirsingly, are quite effective vs. cavalry. Better ones, who also get more handy weapons (clubs, swords, etc.), can wrestle it with infantry too. However most common spear+pavise combo is utterly ineffective in a fight with competent footmen.

    Now my main problem is in good timing, as to when to recall the crossbowmen into formation. I tend to do it too late and they get butchered before my infantry manages to get into close, hedgehog formation.
  17. OSP Kit Combat Battlefield Tactics kit. Multiple formations per team+command revamp!

    Do you think, deleting "cavalry" entries in mission templates would do the trick?
  18. OSP Kit Combat Battlefield Tactics kit. Multiple formations per team+command revamp!

    Awesome stuff, thank you! :smile:

    Do you know, how to make cavalry NOT to use a formation? Unfortunately I find AI cavalry much less effective after applying formations mod. They can`t charge properly and easily get mobbed by infantry.

    Thanks
  19. Tactics with Rodok infantry

    Hi! I`m playing slightly modified native version of M&B. Mainly it has Mirathei formations and custom-made Rodok mounted crossbowmen added (basically a vet. crossbowman on a saddle horse). Unfortunately my struggles with Swadia and (particularly) Nords aren`t going as well, as I would like to...
  20. Best/Worst top-tier units in the game

    Truth be told, nord vet. archer is not top tier, seeing as his level is just 19... When compared to vaegir archer and regular crossbowman, he is not all that bad.

    Personally I despise swadian sharpshooter and sergeant for not having any skill in athletics and slowing whole army on a strat map to really sad levels.

    Also Vaegir Guards aren`t all that hot, when you can have Marksmen in their place...
后退
顶部 底部