("calculate_party_speed_water", [
(store_script_param, ":party_id", 1),
# se for player's boat
(try_begin),
(eq, ":party_id", "p_main_party"),
(assign, ":base_speed", 20),
# depends on ships
(try_for_range, ":slot_no_", 301, 30
,
(party_get_slot, ":ship", ":party_id", ":slot_no_"),
(gt, ":ship", 0),
(call_script, "script_get_ship_properties", ":ship"),
(assign, ":ship_base_speed", reg1), # ship base speed
(store_add, ":local_6", ":slot_no_", 20),
(party_get_slot, ":local_7", ":party_id", ":local_6"), # some factor here...
(val_mul, ":ship_base_speed", ":local_7"),
(val_div, ":ship_base_speed", 100),
(neg|ge, ":ship_base_speed", ":base_speed"),
(assign, ":base_speed", reg1),
(try_end),
# for others. Need to figure out 11 and 13 (slot #0 for a troop)
(else_try),
(party_slot_eq, ":party_id", slot_party_type, 13),
(assign, ":base_speed", 12),
(else_try),
(party_slot_eq, ":party_id", slot_party_type, 11),
(assign, ":base_speed", 7),
(else_try),
(assign, ":base_speed",
,
(try_end),
(store_mul, ":local_8", "$beaufort", 3),
(val_min, ":local_8", 1
,
(store_add, ":final_speed", ":base_speed", ":local_8"),
(val_max, ":final_speed", 5),
# find the skill for navigation
(try_begin),
(party_slot_eq, ":party_id", slot_party_type, 13),
(party_stack_get_troop_id, ":local_10", ":party_id", 0),
(troop_is_hero, ":local_10"),
(store_skill_level, ":skl_navig", "skl_navigation", ":local_10"),
(else_try),
(eq, ":party_id", "p_main_party"),
(store_skill_level, ":skl_navig", "skl_navigation", "trp_player"),
(else_try),
(assign, ":skl_navig", 0),
(try_end),
# skill speed factor
(store_mul, ":local_12", ":skl_navig", ":final_speed"),
(val_mul, ":local_12", 5),
(val_div, ":local_12", 100),
(val_add, ":final_speed", ":local_12"),
# sailors bonus (sailors * 80 / num_troops)
(try_begin),
(eq, ":party_id", "p_main_party"),
(store_party_size_wo_prisoners, ":party_wo_prisoners", "p_main_party"),
(gt, ":party_wo_prisoners", 0),
(party_count_members_of_type, ":sailors", "p_main_party", "trp_regular_sailors"),
(val_mul, ":sailors", 80),
(store_div, ":sailors_bonus", ":sailors", ":party_wo_prisoners"),
(val_add, ":sailors_bonus", 100),
(val_mul, ":final_speed", ":sailors_bonus"),
(val_div, ":final_speed", 100),
(try_end),
# some factor...
(assign, ":local_16", 170),
(try_begin),
(eq, ":party_id", "p_main_party"),
(assign, ":local_16", 150),
(try_end),
# final calculation -> random factor
(store_random_in_range, ":rnd_-2_3", -2, 3),
(val_mul, ":rnd_-2_3", 5),
(val_add, ":local_16", ":rnd_-2_3"),
(val_mul, ":final_speed", ":local_16"),
(val_div, ":final_speed", 100),
(assign, reg1, ":final_speed"),
]),
Factors include your skill, your ships type, random luck, sailors. Weather must be there somewhere (probably the $beaufort variable)
Beaufort seens to be:
Negative : calm
<=3 : light breeze
4: moderate
5 or 6: strong
7: high wind
8 or 9: gale