Is there logic behind regular troops skills distribution?

Users who are viewing this thread

amorph

Recruit
First of all: the mod is great. You've had a lot of kind words of appreciation so I will not repeat others. Keep up the good job :wink:

My question: Is there any logic behind skill distribution of regular troops? Maybe there are more examples, but here is one:
1) Pendor Foot Knight: Riding 0, Horse Archery: 6. Not a bug or something, but doesn't look very realistic :smile:
2) Why do regular troops need any leader skills like leadership, inventory management etc. - not a problem, it is logical and impersonating these troops, but maybe there is another reason?

Thank you.
 
amorph said:
First of all: the mod is great. You've had a lot of kind words of appreciation so I will not repeat others. Keep up the good job :wink:

My question: Is there any logic behind skill distribution of regular troops? Maybe there are more examples, but here is one:
1) Pendor Foot Knight: Riding 0, Horse Archery: 6. Not a bug or something, but doesn't look very realistic :smile:
2) Why do regular troops need any leader skills like leadership, inventory management etc. - not a problem, it is logical and impersonating these troops, but maybe there is another reason?

Thank you.

I can help you understand this.  The data work in creating a single troop type in the code (as opposed to tweaking in a text file) is mind boggling.  Let me give you a very simple single troop type as an example out of Native so you understand.  He has very limited items, very controlled, and just a few skills.

["rhodok_spearman","Rhodok Spearman","Rhodok Spearmen",tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_shield,0,0,fac_kingdom_5,
  [itm_spear,itm_tab_shield_pavise_a,itm_tab_shield_pavise_a,
    itm_leather_cap,itm_common_hood,itm_leather_vest,itm_leather_vest,itm_wrapping_boots,itm_nomad_boots],
  def_attrib|level(9),wp(80),knows_common|knows_ironflesh_2|knows_shield_1|knows_power_strike_2|knows_athletics_1,rhodok_face_young_1, rhodok_face_old_2],

Compare this to a Pop troop:


["pendor_221","Northern Rogue Knight","Northern Rogue Knights", tf_mounted|tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_horse|tf_guarantee_shield|tf_guarantee_helmet,0,0,fac_neutral,
  [itm_leather_gloves,itm_iron_greaves,itm_mail_boots,itm_gauntlets,
    itm_sword_medieval_a,itm_shortened_spear,itm_pl_224,itm_pl_230,itm_lance,itm_morningstar,itm_pl_216,itm_pl_221,itm_pl_215,itm_heavy_lance,
    itm_warhorse,itm_hunter,itm_pl_88,itm_pl_102,itm_charger,itm_pl_90,itm_pl_90,itm_pl_90,
    itm_pl_365,itm_pl_349,itm_pl_353,itm_pl_359,itm_pl_361,itm_pl_374,itm_norman_shield_4,itm_norman_shield_5,itm_norman_shield_2,
    itm_pl_290,itm_pl_323,itm_pl_404,itm_pl_499,itm_pl_141,itm_pl_416,itm_pl_415,itm_pl_454,itm_pl_426,
    itm_pl_408,itm_pl_411,itm_pl_413,itm_pl_421,itm_pl_24,itm_pl_19,
    itm_pl_397,itm_strong_bow,itm_arrows,itm_pl_464,itm_pl_469,itm_pl_586],
  sold_attrib_7,wp(300),knows_common|sold_skills_7|knows_riding_5,vaegir_face_middle_1 , vaegir_face_old_2],


That is very straightforward.. until you decide that the balance is off and you need to make modifications across the board for all troops.. how do you do that?  You have to scroll through every single troop type, and in Pop that list is very extensive and make changes. 

You also radically increases errors by all this manual input, missing skills, double inputs etc.  That takes a lot of time, to discover, find and correct these errors.

I cheated and implemented a way to make the input more streamlined and it eliminated these types of errors and still gives me the ability to vary the flavor of the troops as I want them to be.

You notice at the end of the troop I added two strange looking commands: sold_attrib_7 and sold_skills_7.  These are routines that cover the base skills, whether they are used or not, for that particular troop.  The only skills that are except from this is riding, as that can vary wildly.  The "f" designation is a separate branch I used for the Fierdsvain and some additional Northern troops to reflect their hardiness.

Here is what these look like:
sold_attrib_1f = str_8|agi_8|int_4|cha_4|level(1)
sold_attrib_2f = str_10|agi_10|int_5|cha_4|level(5)
sold_attrib_3f = str_14|agi_12|int_6|cha_5|level(10)
sold_attrib_4f = str_18|agi_14|int_6|cha_6|level(15)
sold_attrib_5f = str_22|agi_16|int_6|cha_6|level(20)
sold_attrib_6f = str_26|agi_18|int_9|cha_9|level(30)
sold_attrib_7f = str_30|agi_20|int_9|cha_12|level(40)
sold_attrib_8f = str_34|agi_22|int_12|cha_15|level(45)
sold_attrib_9f = str_38|agi_24|int_12|cha_15|level(50)
sold_attrib_10f = str_40|agi_30|int_12|cha_12|level(50)

sold_attrib_1 = str_5|agi_5|int_4|cha_4|level(1)
sold_attrib_2 = str_6|agi_6|int_5|cha_4|level(5)
sold_attrib_3 = str_9|agi_9|int_6|cha_5|level(10)
sold_attrib_4 = str_12|agi_9|int_6|cha_6|level(15)
sold_attrib_5 = str_15|agi_12|int_6|cha_6|level(20)
sold_attrib_6 = str_18|agi_12|int_9|cha_9|level(30)
sold_attrib_7 = str_21|agi_15|int_9|cha_12|level(40)
sold_attrib_8 = str_24|agi_15|int_12|cha_15|level(45)
sold_attrib_9 = str_27|agi_18|int_12|cha_15|level(50)
sold_attrib_10 = str_30|agi_21|int_27|cha_24|level(55) # Noldor
sold_attrib_11 = str_40|agi_24|int_24|cha_24|level(60)  # Specials
sold_attrib_12 = str_60|agi_24|int_12|cha_30|level(60) # Special

sold_attrib_20 = str_60|agi_3|int_6|cha_3|level(20) #Minor Undead
sold_attrib_21 = str_120|agi_12|int_12|cha_12|level(60)  #major Undead
sold_attrib_22 = str_120|agi_30|int_21|cha_30|level(60) # Demonic

sold_skills_1 = knows_weapon_master_1|knows_ironflesh_1|knows_shield_1|knows_inventory_management_2|knows_power_throw_1
sold_skills_2 = knows_weapon_master_2|knows_ironflesh_2|knows_athletics_1|knows_power_strike_1|knows_power_draw_1|knows_shield_1|knows_power_throw_1|knows_horse_archery_1|knows_inventory_management_3
sold_skills_3 = knows_weapon_master_2|knows_ironflesh_3|knows_athletics_2|knows_power_strike_2|knows_power_draw_2|knows_shield_1|knows_tactics_1|knows_horse_archery_1|knows_power_throw_2|knows_inventory_management_3
sold_skills_4 = knows_weapon_master_3|knows_ironflesh_4|knows_athletics_3|knows_power_strike_3|knows_power_draw_3|knows_shield_2|knows_tactics_1|knows_horse_archery_2|knows_power_throw_3|knows_inventory_management_4
sold_skills_5 = knows_weapon_master_4|knows_ironflesh_5|knows_athletics_4|knows_power_strike_4|knows_power_draw_4|knows_shield_3|knows_tactics_2|knows_leadership_1|knows_horse_archery_4|knows_power_throw_4|knows_weapon_master_8|knows_inventory_management_4
sold_skills_6 = knows_weapon_master_4|knows_ironflesh_6|knows_athletics_5|knows_power_strike_5|knows_power_draw_5|knows_shield_4|knows_tactics_3|knows_leadership_2|knows_horse_archery_5|knows_power_throw_5 |knows_weapon_master_9|knows_inventory_management_5
sold_skills_7 = knows_weapon_master_5|knows_ironflesh_7|knows_athletics_6|knows_power_strike_6|knows_power_draw_6|knows_shield_5|knows_tactics_4|knows_leadership_3|knows_horse_archery_6|knows_power_throw_6 |knows_weapon_master_10|knows_inventory_management_5
sold_skills_8 = knows_weapon_master_6|knows_ironflesh_8|knows_athletics_7|knows_power_strike_7|knows_power_draw_7|knows_shield_5|knows_tactics_5|knows_leadership_4|knows_horse_archery_7|knows_power_throw_7|knows_weapon_master_10|knows_inventory_management_6
sold_skills_9 = knows_weapon_master_6|knows_ironflesh_9|knows_athletics_7|knows_power_strike_8|knows_power_draw_8|knows_shield_6|knows_tactics_5|knows_leadership_5|knows_horse_archery_8|knows_power_throw_8 |knows_weapon_master_10|knows_inventory_management_6
sold_skills_0 = knows_weapon_master_6|knows_ironflesh_10|knows_athletics_7|knows_power_strike_9|knows_power_draw_9|knows_shield_6|knows_tactics_5|knows_leadership_5|knows_horse_archery_9|knows_power_throw_9 |knows_weapon_master_10|knows_inventory_management_7

So.. as you can see, there is much more to this than just considering whether the foot knight has a horse archer skill.  What is important is that  he is never on a horse so it is a moot point and that the skills he utilizes are precisely in line what what he is suppose to do and reflects exactly the behavior we want him to have.

Best regards,

Saxondragon


 
Thanks for a very descriptive answer. I am a SW dev myself so I may imagine that sometimes easy looking things (from gamer's perspective) aren't as easy on the inside :wink:
 
saxondragon said:
amorph said:
First of all: the mod is great. You've had a lot of kind words of appreciation so I will not repeat others. Keep up the good job :wink:

My question: Is there any logic behind skill distribution of regular troops? Maybe there are more examples, but here is one:
1) Pendor Foot Knight: Riding 0, Horse Archery: 6. Not a bug or something, but doesn't look very realistic :smile:
2) Why do regular troops need any leader skills like leadership, inventory management etc. - not a problem, it is logical and impersonating these troops, but maybe there is another reason?

Thank you.

I can help you understand this.  The data work in creating a single troop type in the code (as opposed to tweaking in a text file) is mind boggling.  Let me give you a very simple single troop type as an example out of Native so you understand.  He has very limited items, very controlled, and just a few skills.

["rhodok_spearman","Rhodok Spearman","Rhodok Spearmen",tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_shield,0,0,fac_kingdom_5,
  [itm_spear,itm_tab_shield_pavise_a,itm_tab_shield_pavise_a,
    itm_leather_cap,itm_common_hood,itm_leather_vest,itm_leather_vest,itm_wrapping_boots,itm_nomad_boots],
  def_attrib|level(9),wp(80),knows_common|knows_ironflesh_2|knows_shield_1|knows_power_strike_2|knows_athletics_1,rhodok_face_young_1, rhodok_face_old_2],

Compare this to a Pop troop:


["pendor_221","Northern Rogue Knight","Northern Rogue Knights", tf_mounted|tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_horse|tf_guarantee_shield|tf_guarantee_helmet,0,0,fac_neutral,
  [itm_leather_gloves,itm_iron_greaves,itm_mail_boots,itm_gauntlets,
    itm_sword_medieval_a,itm_shortened_spear,itm_pl_224,itm_pl_230,itm_lance,itm_morningstar,itm_pl_216,itm_pl_221,itm_pl_215,itm_heavy_lance,
    itm_warhorse,itm_hunter,itm_pl_88,itm_pl_102,itm_charger,itm_pl_90,itm_pl_90,itm_pl_90,
    itm_pl_365,itm_pl_349,itm_pl_353,itm_pl_359,itm_pl_361,itm_pl_374,itm_norman_shield_4,itm_norman_shield_5,itm_norman_shield_2,
    itm_pl_290,itm_pl_323,itm_pl_404,itm_pl_499,itm_pl_141,itm_pl_416,itm_pl_415,itm_pl_454,itm_pl_426,
    itm_pl_408,itm_pl_411,itm_pl_413,itm_pl_421,itm_pl_24,itm_pl_19,
    itm_pl_397,itm_strong_bow,itm_arrows,itm_pl_464,itm_pl_469,itm_pl_586],
  sold_attrib_7,wp(300),knows_common|sold_skills_7|knows_riding_5,vaegir_face_middle_1 , vaegir_face_old_2],


That is very straightforward.. until you decide that the balance is off and you need to make modifications across the board for all troops.. how do you do that?  You have to scroll through every single troop type, and in Pop that list is very extensive and make changes. 

You also radically increases errors by all this manual input, missing skills, double inputs etc.  That takes a lot of time, to discover, find and correct these errors.

I cheated and implemented a way to make the input more streamlined and it eliminated these types of errors and still gives me the ability to vary the flavor of the troops as I want them to be.

You notice at the end of the troop I added two strange looking commands: sold_attrib_7 and sold_skills_7.  These are routines that cover the base skills, whether they are used or not, for that particular troop.  The only skills that are except from this is riding, as that can vary wildly.  The "f" designation is a separate branch I used for the Fierdsvain and some additional Northern troops to reflect their hardiness.

Here is what these look like:
sold_attrib_1f = str_8|agi_8|int_4|cha_4|level(1)
sold_attrib_2f = str_10|agi_10|int_5|cha_4|level(5)
sold_attrib_3f = str_14|agi_12|int_6|cha_5|level(10)
sold_attrib_4f = str_18|agi_14|int_6|cha_6|level(15)
sold_attrib_5f = str_22|agi_16|int_6|cha_6|level(20)
sold_attrib_6f = str_26|agi_18|int_9|cha_9|level(30)
sold_attrib_7f = str_30|agi_20|int_9|cha_12|level(40)
sold_attrib_8f = str_34|agi_22|int_12|cha_15|level(45)
sold_attrib_9f = str_38|agi_24|int_12|cha_15|level(50)
sold_attrib_10f = str_40|agi_30|int_12|cha_12|level(50)

sold_attrib_1 = str_5|agi_5|int_4|cha_4|level(1)
sold_attrib_2 = str_6|agi_6|int_5|cha_4|level(5)
sold_attrib_3 = str_9|agi_9|int_6|cha_5|level(10)
sold_attrib_4 = str_12|agi_9|int_6|cha_6|level(15)
sold_attrib_5 = str_15|agi_12|int_6|cha_6|level(20)
sold_attrib_6 = str_18|agi_12|int_9|cha_9|level(30)
sold_attrib_7 = str_21|agi_15|int_9|cha_12|level(40)
sold_attrib_8 = str_24|agi_15|int_12|cha_15|level(45)
sold_attrib_9 = str_27|agi_18|int_12|cha_15|level(50)
sold_attrib_10 = str_30|agi_21|int_27|cha_24|level(55) # Noldor
sold_attrib_11 = str_40|agi_24|int_24|cha_24|level(60)  # Specials
sold_attrib_12 = str_60|agi_24|int_12|cha_30|level(60) # Special

sold_attrib_20 = str_60|agi_3|int_6|cha_3|level(20) #Minor Undead
sold_attrib_21 = str_120|agi_12|int_12|cha_12|level(60)  #major Undead
sold_attrib_22 = str_120|agi_30|int_21|cha_30|level(60) # Demonic

sold_skills_1 = knows_weapon_master_1|knows_ironflesh_1|knows_shield_1|knows_inventory_management_2|knows_power_throw_1
sold_skills_2 = knows_weapon_master_2|knows_ironflesh_2|knows_athletics_1|knows_power_strike_1|knows_power_draw_1|knows_shield_1|knows_power_throw_1|knows_horse_archery_1|knows_inventory_management_3
sold_skills_3 = knows_weapon_master_2|knows_ironflesh_3|knows_athletics_2|knows_power_strike_2|knows_power_draw_2|knows_shield_1|knows_tactics_1|knows_horse_archery_1|knows_power_throw_2|knows_inventory_management_3
sold_skills_4 = knows_weapon_master_3|knows_ironflesh_4|knows_athletics_3|knows_power_strike_3|knows_power_draw_3|knows_shield_2|knows_tactics_1|knows_horse_archery_2|knows_power_throw_3|knows_inventory_management_4
sold_skills_5 = knows_weapon_master_4|knows_ironflesh_5|knows_athletics_4|knows_power_strike_4|knows_power_draw_4|knows_shield_3|knows_tactics_2|knows_leadership_1|knows_horse_archery_4|knows_power_throw_4|knows_weapon_master_8|knows_inventory_management_4
sold_skills_6 = knows_weapon_master_4|knows_ironflesh_6|knows_athletics_5|knows_power_strike_5|knows_power_draw_5|knows_shield_4|knows_tactics_3|knows_leadership_2|knows_horse_archery_5|knows_power_throw_5 |knows_weapon_master_9|knows_inventory_management_5
sold_skills_7 = knows_weapon_master_5|knows_ironflesh_7|knows_athletics_6|knows_power_strike_6|knows_power_draw_6|knows_shield_5|knows_tactics_4|knows_leadership_3|knows_horse_archery_6|knows_power_throw_6 |knows_weapon_master_10|knows_inventory_management_5
sold_skills_8 = knows_weapon_master_6|knows_ironflesh_8|knows_athletics_7|knows_power_strike_7|knows_power_draw_7|knows_shield_5|knows_tactics_5|knows_leadership_4|knows_horse_archery_7|knows_power_throw_7|knows_weapon_master_10|knows_inventory_management_6
sold_skills_9 = knows_weapon_master_6|knows_ironflesh_9|knows_athletics_7|knows_power_strike_8|knows_power_draw_8|knows_shield_6|knows_tactics_5|knows_leadership_5|knows_horse_archery_8|knows_power_throw_8 |knows_weapon_master_10|knows_inventory_management_6
sold_skills_0 = knows_weapon_master_6|knows_ironflesh_10|knows_athletics_7|knows_power_strike_9|knows_power_draw_9|knows_shield_6|knows_tactics_5|knows_leadership_5|knows_horse_archery_9|knows_power_throw_9 |knows_weapon_master_10|knows_inventory_management_7

So.. as you can see, there is much more to this than just considering whether the foot knight has a horse archer skill.  What is important is that  he is never on a horse so it is a moot point and that the skills he utilizes are precisely in line what what he is suppose to do and reflects exactly the behavior we want him to have.

Best regards,

Saxondragon
Wow, that does look complicated.
 
amorph said:
Thanks for a very descriptive answer. I am a SW dev myself so I may imagine that sometimes easy looking things (from gamer's perspective) aren't as easy on the inside :wink:

haha.. no kidding.  We start out with no manual, a hidden list of possible operations a few of which do not work as described, and no listing of global variables.  It has been an interesting exercise to be sure. :smile:

Best,

Saxondrago

 
Back
Top Bottom