I wrote a very comprehensive BannerPage game_get_party_speed_multiplier replacement script. Just drop the compiled script into your script.txt.
Compiled:
game_get_party_speed_multiplier -1
206 21 1 1224979098644774912 2133 2 1224979098644774913 100 4 0 2147483679 2 1224979098644774912 648518346341351424 2133 2 1224979098644774914 0 2133 2 1224979098644774915 0 2133 2 1224979098644774916 0 2133 2 1224979098644774917 0 2133 2 1224979098644774918 0 2133 2 1224979098644774919 0 1651 2 1224979098644774920 1224979098644774912 6 3 1224979098644774921 0 1224979098644774920 1657 3 1224979098644774922 1224979098644774912 1224979098644774921 2105 2 1224979098644774919 1224979098644774922 2105 2 1224979098644774918 1224979098644774922 3 0 1650 2 1224979098644774923 1224979098644774912 6 3 1224979098644774924 0 1224979098644774923 1652 3 1224979098644774925 1224979098644774912 1224979098644774924 1653 3 1224979098644774922 1224979098644774912 1224979098644774924 1654 3 1224979098644774926 1224979098644774912 1224979098644774924 2105 2 1224979098644774919 1224979098644774922 4 0 152 1 1224979098644774925 2105 2 1224979098644774914 1224979098644774922 2106 2 1224979098644774914 1224979098644774926 2105 2 1224979098644774915 1224979098644774926 5 0 2105 2 1224979098644774916 1224979098644774922 2106 2 1224979098644774916 1224979098644774926 2105 2 1224979098644774917 1224979098644774926 3 0 3 0 2107 2 1224979098644774913 118 2108 2 1224979098644774913 100 4 0 32 2 1224979098644774919 0 2133 2 1224979098644774927 100 2107 2 1224979098644774927 1224979098644774914 2108 2 1224979098644774927 1224979098644774919 2107 2 1224979098644774927 12 2108 2 1224979098644774927 10 2133 2 1224979098644774928 100 2107 2 1224979098644774928 1224979098644774916 2108 2 1224979098644774928 1224979098644774919 2107 2 1224979098644774928 8 2108 2 1224979098644774928 10 2133 2 1224979098644774929 100 2107 2 1224979098644774929 1224979098644774915 2108 2 1224979098644774929 1224979098644774919 2107 2 1224979098644774929 8 2108 2 1224979098644774929 10 2133 2 1224979098644774930 100 2107 2 1224979098644774930 1224979098644774917 2108 2 1224979098644774930 1224979098644774919 2108 2 1224979098644774930 2 2133 2 1224979098644774931 100 2107 2 1224979098644774931 1224979098644774918 2108 2 1224979098644774931 1224979098644774919 2108 2 1224979098644774931 2 2133 2 1224979098644774932 1224979098644774927 2105 2 1224979098644774932 1224979098644774928 2105 2 1224979098644774932 1224979098644774929 2105 2 1224979098644774932 1224979098644774930 2105 2 1224979098644774932 1224979098644774931 2107 2 1224979098644774913 1224979098644774932 2108 2 1224979098644774913 100 3 0 5 0 1540 2 1224979098644774933 360287970189639680 2133 2 1224979098644774934 0 2133 2 1224979098644774935 0 6 3 1224979098644774936 0 1224979098644774933 1541 3 1224979098644774937 360287970189639680 1224979098644774936 4 0 30 2 1224979098644774937 0 1570 2 1224979098644774938 1224979098644774937 31 2 1224979098644774938 1 2105 2 1224979098644774934 1 2105 2 1224979098644774935 2 3 0 2147483678 2 1224979098644774934 21 3 0 2133 2 1224979098644774939 0 1650 2 1224979098644774940 648518346341351424 6 3 1224979098644774941 0 1224979098644774940 1652 3 1224979098644774942 648518346341351424 1224979098644774941 33 3 1224979098644774942 360287970189639975 360287970189639991 1540 2 1224979098644774943 1224979098644774942 6 3 1224979098644774944 10 1224979098644774943 1541 3 1224979098644774945 1224979098644774942 1224979098644774944 30 2 1224979098644774945 0 527 3 1224979098644774946 1224979098644774945 66 2105 2 1224979098644774939 1224979098644774946 3 0 3 0 2108 2 1224979098644774939 100 2133 2 1224979098644774947 1224979098644774939 2106 2 1224979098644774947 1224979098644774935 2111 2 1224979098644774947 0 2106 2 1224979098644774913 1224979098644774947 2106 2 1224979098644774935 1224979098644774939 2111 2 1224979098644774935 0 2133 2 1224979098644774914 0 2133 2 1224979098644774915 0 2133 2 1224979098644774916 0 2133 2 1224979098644774917 0 2133 2 1224979098644774918 0 2133 2 1224979098644774919 0 1651 2 1224979098644774920 1224979098644774912 6 3 1224979098644774921 0 1224979098644774920 1657 3 1224979098644774922 1224979098644774912 1224979098644774921 2105 2 1224979098644774919 1224979098644774922 2105 2 1224979098644774918 1224979098644774922 3 0 1650 2 1224979098644774923 1224979098644774912 6 3 1224979098644774924 0 1224979098644774923 1652 3 1224979098644774925 1224979098644774912 1224979098644774924 1653 3 1224979098644774922 1224979098644774912 1224979098644774924 1654 3 1224979098644774926 1224979098644774912 1224979098644774924 2105 2 1224979098644774919 1224979098644774922 4 0 152 1 1224979098644774925 2105 2 1224979098644774914 1224979098644774922 2106 2 1224979098644774914 1224979098644774926 2105 2 1224979098644774915 1224979098644774926 5 0 2105 2 1224979098644774916 1224979098644774922 2106 2 1224979098644774916 1224979098644774926 2105 2 1224979098644774917 1224979098644774926 3 0 3 0 2133 2 1224979098644774927 100 2107 2 1224979098644774927 1224979098644774914 2108 2 1224979098644774927 1224979098644774919 2107 2 1224979098644774927 12 2108 2 1224979098644774927 10 2133 2 1224979098644774928 100 2107 2 1224979098644774928 1224979098644774916 2108 2 1224979098644774928 1224979098644774919 2107 2 1224979098644774928 8 2108 2 1224979098644774928 10 2133 2 1224979098644774929 100 2107 2 1224979098644774929 1224979098644774915 2108 2 1224979098644774929 1224979098644774919 2107 2 1224979098644774929 8 2108 2 1224979098644774929 10 2133 2 1224979098644774930 100 2107 2 1224979098644774930 1224979098644774917 2108 2 1224979098644774930 1224979098644774919 2108 2 1224979098644774930 2 2133 2 1224979098644774931 100 2107 2 1224979098644774931 1224979098644774918 2108 2 1224979098644774931 1224979098644774919 2108 2 1224979098644774931 2 2133 2 1224979098644774932 1224979098644774927 2105 2 1224979098644774932 1224979098644774928 2105 2 1224979098644774932 1224979098644774929 2105 2 1224979098644774932 1224979098644774930 2105 2 1224979098644774932 1224979098644774931 2133 2 1224979098644774948 0 4 0 32 2 1224979098644774918 0 2133 2 1224979098644774948 1 2147483678 2 1224979098644774932 60 2105 2 1224979098644774932 1224979098644774935 2111 2 1224979098644774932 60 3 0 4 0 31 2 1224979098644774948 0 2147483678 2 1224979098644774932 100 2105 2 1224979098644774932 1224979098644774935 2111 2 1224979098644774932 80 3 0 2107 2 1224979098644774913 1224979098644774932 2108 2 1224979098644774913 100 1685 3 1224979098644774949 1224979098644774912 14 2107 2 1224979098644774949 3 2105 2 1224979098644774949 100 2107 2 1224979098644774913 1224979098644774949 2108 2 1224979098644774913 100 1671 2 1224979098644774950 648518346341351424 2106 2 1224979098644774950 100 2108 2 1224979098644774950 2 2133 2 1224979098644774951 120 2105 2 1224979098644774951 1224979098644774950 2107 2 1224979098644774913 1224979098644774951 2108 2 1224979098644774913 100 4 0 31 2 144115188075857232 1 1685 3 1224979098644774952 648518346341351424 1 1671 2 1224979098644774953 648518346341351424 2108 2 1224979098644774953 10 2133 2 1224979098644774954 1224979098644774952 2105 2 1224979098644774954 1224979098644774953 4 0 32 2 144115188075857564 1224979098644774954 2133 2 1224979098644774955 100 2106 2 1224979098644774955 144115188075857564 2107 2 1224979098644774913 1224979098644774955 2108 2 1224979098644774913 100 3 0 3 0 3 0 2111 2 1224979098644774913 10 2075 1 1224979098644774913
Source:
("game_get_party_speed_multiplier", [
(store_script_param_1, ":party_no"),
(assign, ":var1", 100),
(try_begin),
(neq, ":party_no", "p_main_party"),
(assign, ":mounted", 0),
(assign, ":mounted_wounded", 0),
(assign, ":on_foot", 0),
(assign, ":on_foot_wounded", 0),
(assign, ":prisoners", 0),
(assign, ":party_size", 0),
(party_get_num_prisoner_stacks, ":num_prisoner_stacks",":party_no"),
(try_for_range, ":stack_no", 0, ":num_prisoner_stacks"),
(party_prisoner_stack_get_size, ":stack_size",":party_no",":stack_no"),
(val_add, ":party_size", ":stack_size"),
(val_add, ":prisoners", ":stack_size"),
(try_end),
(party_get_num_companion_stacks, ":num_stacks",":party_no"),
(try_for_range, ":i_stack", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop", ":party_no", ":i_stack"),
(party_stack_get_size, ":stack_size",":party_no",":i_stack"),
(party_stack_get_num_wounded, ":stack_num_wounded",":party_no",":i_stack"),
(val_add, ":party_size", ":stack_size"),
(try_begin),
(troop_is_mounted, ":stack_troop"),
(val_add, ":mounted", ":stack_size"),
(val_sub, ":mounted", ":stack_num_wounded"),
(val_add, ":mounted_wounded", ":stack_num_wounded"),
(else_try),
(val_add, ":on_foot", ":stack_size"),
(val_sub, ":on_foot", ":stack_num_wounded"),
(val_add, ":on_foot_wounded", ":stack_num_wounded"),
(try_end),
(try_end),
# pathfinding, assume the natives know their way around pretty well
(val_mul, ":var1", 118),
(val_div, ":var1", 100),
(try_begin),
(gt, ":party_size", 0),
(assign, ":mounted_mod", 100),
(val_mul, ":mounted_mod", ":mounted"),
(val_div, ":mounted_mod", ":party_size"),
(val_mul, ":mounted_mod", 12),# bigger multiplicator is quicker ;-)
(val_div, ":mounted_mod", 10),
(assign, ":on_foot_mod", 100),
(val_mul, ":on_foot_mod", ":on_foot"),
(val_div, ":on_foot_mod", ":party_size"),
(val_mul, ":on_foot_mod", 8),
(val_div, ":on_foot_mod", 10),
(assign, ":mounted_wounded_mod", 100),
(val_mul, ":mounted_wounded_mod", ":mounted_wounded"),
(val_div, ":mounted_wounded_mod", ":party_size"),
(val_mul, ":mounted_wounded_mod", 8),
(val_div, ":mounted_wounded_mod", 10),
(assign, ":on_foot_wounded_mod", 100),
(val_mul, ":on_foot_wounded_mod", ":on_foot_wounded"),
(val_div, ":on_foot_wounded_mod", ":party_size"),
(val_div, ":on_foot_wounded_mod", 2),
(assign, ":prisoners_mod", 100),
(val_mul, ":prisoners_mod", ":prisoners"),
(val_div, ":prisoners_mod", ":party_size"),
(val_div, ":prisoners_mod", 2),
(assign, ":mounted_state_mod", ":mounted_mod"),
(val_add, ":mounted_state_mod", ":on_foot_mod"),
(val_add, ":mounted_state_mod", ":mounted_wounded_mod"),
(val_add, ":mounted_state_mod", ":on_foot_wounded_mod"),
(val_add, ":mounted_state_mod", ":prisoners_mod"),
(val_mul, ":var1", ":mounted_state_mod"),
(val_div, ":var1", 100),
(try_end),
(else_try),
# inventory weight and horses (horses can carry all the weight, if enough of them are present)
(troop_get_inventory_capacity, ":inv_cap", "trp_player"),
(assign, ":nr_horses", 0),
(assign, ":horse_bonus", 0),
(try_for_range, ":i_slot", 0, ":inv_cap"),
(troop_get_inventory_slot, ":item_id", "trp_player", ":i_slot"),
(try_begin),
(ge, ":item_id", 0),
(item_get_type,":item_type",":item_id"),
(eq, ":item_type", itp_type_horse),
(val_add, ":nr_horses", 1),
(val_add, ":horse_bonus", 2),
(try_end),
(lt, ":nr_horses", 21),
(try_end),
#(call_script, "script_get_inventory_weight_of_whole_party"),
(assign, ":inv_weight", 0),
(party_get_num_companion_stacks, ":num_companion_stacks", "p_main_party"),
(try_for_range, ":i", 0, ":num_companion_stacks"),
(party_stack_get_troop_id, ":troop_id", "p_main_party", ":i"),
(is_between, ":troop_id", "trp_npc1", "trp_kingdom_1_lord"),
(troop_get_inventory_capacity, ":inventory_capacity", ":troop_id"),
(try_for_range, ":j", 10, ":inventory_capacity"),
(troop_get_inventory_slot, ":inventory_slot", ":troop_id", ":j"),
(ge, ":inventory_slot", 0),
(item_get_slot, ":item", ":inventory_slot", 66),
(val_add, ":inv_weight", ":item"),
(try_end),
(try_end),
(val_div, ":inv_weight", 100),
(assign, ":inv_weight_calc", ":inv_weight"),
(val_sub, ":inv_weight_calc", ":horse_bonus"),
(val_max, ":inv_weight_calc", 0),
(val_sub, ":var1", ":inv_weight_calc"),
# calc the remaining horse_bonus to carry non mounted units
(val_sub, ":horse_bonus", ":inv_weight"),
(val_max, ":horse_bonus", 0),
# speed modifier from mounted (+20% speed) and non mounted (-20% speed) troops
# mounted wounded are -20% (like footment)
# wounded on foot are especially slow (-50%)
# prisoners are also especially slow, but can not be quickened by horses
# non mounted and wounded can be mitigated by remaining horse_bonus
(assign, ":mounted", 0),
(assign, ":mounted_wounded", 0),
(assign, ":on_foot", 0),
(assign, ":on_foot_wounded", 0),
(assign, ":prisoners", 0),
(assign, ":party_size", 0),
(party_get_num_prisoner_stacks, ":num_prisoner_stacks",":party_no"),
(try_for_range, ":stack_no", 0, ":num_prisoner_stacks"),
(party_prisoner_stack_get_size, ":stack_size",":party_no",":stack_no"),
(val_add, ":party_size", ":stack_size"),
(val_add, ":prisoners", ":stack_size"),
(try_end),
(party_get_num_companion_stacks, ":num_stacks",":party_no"),
(try_for_range, ":i_stack", 0, ":num_stacks"),
(party_stack_get_troop_id, ":stack_troop", ":party_no", ":i_stack"),
(party_stack_get_size, ":stack_size",":party_no",":i_stack"),
(party_stack_get_num_wounded, ":stack_num_wounded",":party_no",":i_stack"),
(val_add, ":party_size", ":stack_size"),
(try_begin),
(troop_is_mounted, ":stack_troop"),
(val_add, ":mounted", ":stack_size"),
(val_sub, ":mounted", ":stack_num_wounded"),
(val_add, ":mounted_wounded", ":stack_num_wounded"),
(else_try),
(val_add, ":on_foot", ":stack_size"),
(val_sub, ":on_foot", ":stack_num_wounded"),
(val_add, ":on_foot_wounded", ":stack_num_wounded"),
(try_end),
(try_end),
(assign, ":mounted_mod", 100),
(val_mul, ":mounted_mod", ":mounted"),
(val_div, ":mounted_mod", ":party_size"),
(val_mul, ":mounted_mod", 12),# bigger multiplicator is quicker ;-)
(val_div, ":mounted_mod", 10),
(assign, ":on_foot_mod", 100),
(val_mul, ":on_foot_mod", ":on_foot"),
(val_div, ":on_foot_mod", ":party_size"),
(val_mul, ":on_foot_mod", 8),
(val_div, ":on_foot_mod", 10),
(assign, ":mounted_wounded_mod", 100),
(val_mul, ":mounted_wounded_mod", ":mounted_wounded"),
(val_div, ":mounted_wounded_mod", ":party_size"),
(val_mul, ":mounted_wounded_mod", 8),
(val_div, ":mounted_wounded_mod", 10),
(assign, ":on_foot_wounded_mod", 100),
(val_mul, ":on_foot_wounded_mod", ":on_foot_wounded"),
(val_div, ":on_foot_wounded_mod", ":party_size"),
(val_div, ":on_foot_wounded_mod", 2),
(assign, ":prisoners_mod", 100),
(val_mul, ":prisoners_mod", ":prisoners"),
(val_div, ":prisoners_mod", ":party_size"),
(val_div, ":prisoners_mod", 2),
(assign, ":mounted_state_mod", ":mounted_mod"),
(val_add, ":mounted_state_mod", ":on_foot_mod"),
(val_add, ":mounted_state_mod", ":mounted_wounded_mod"),
(val_add, ":mounted_state_mod", ":on_foot_wounded_mod"),
(val_add, ":mounted_state_mod", ":prisoners_mod"),
# take remaining horse_bonus into account, if non mounted troops, except prisoners, slow the party down (meaning: if prisoners are present, the whole party needs to limp along)
(assign, ":horses_accounted_for", 0),
(try_begin),
(gt, ":prisoners", 0),
(assign, ":horses_accounted_for", 1),
(lt, ":mounted_state_mod", 60),
(val_add, ":mounted_state_mod", ":horse_bonus"),
(val_max, ":mounted_state_mod", 60),
(try_end),
(try_begin),
(eq, ":horses_accounted_for", 0),
# the check against 80 is important, because otherwise a 120 could be lowered to 80 three lines down
(lt, ":mounted_state_mod", 100),
(val_add, ":mounted_state_mod", ":horse_bonus"),
# the max of 80 is important, because wounded mounted = 80 (wounded troops may never quicken the parties pace) and a mounted footman is not a cavalryman (= doesn't quicken the pace)
(val_max, ":mounted_state_mod", 80),
(try_end),
(val_mul, ":var1", ":mounted_state_mod"),
(val_div, ":var1", 100),
# pathfinding
(party_get_skill_level, ":speed_multiplier", ":party_no", skl_pathfinding),
(val_mul,":speed_multiplier", 3),
(val_add,":speed_multiplier", 100),
(val_mul, ":var1", ":speed_multiplier"),
(val_div, ":var1", 100),
# morale: 100 morale gives +20% speed; 0 morale'd give -30%
(party_get_morale, ":party_morale_mod", "p_main_party"),
(val_sub, ":party_morale_mod", 100),
(val_div, ":party_morale_mod", 2),
(assign, ":morale_multiplier", 120),
# party_morale_mod is a negative number or zero
(val_add, ":morale_multiplier", ":party_morale_mod"),
(val_mul, ":var1", ":morale_multiplier"),
(val_div, ":var1", 100),
# exhaustion and fatigue
(try_begin),
(eq, "$exhaustion", 1),
(party_get_skill_level, ":leadership", "p_main_party", skl_leadership),
(party_get_morale, ":morale", "p_main_party"),
(val_div, ":morale", 10),
(assign, ":stamina", ":leadership"),
(val_add, ":stamina", ":morale"),
(try_begin),
(gt, "$fatique_stamina", ":stamina"),
(assign, ":fatigue_multiplier", 100),
(val_sub, ":fatigue_multiplier", "$fatique_stamina"),
(val_mul, ":var1", ":fatigue_multiplier"),
(val_div, ":var1", 100),
(try_end),
(try_end),
(try_end),
(val_max, ":var1", 10),
(set_trigger_result, ":var1"),
]),