("cf_agent_walk",
[
(store_script_param, ":agent_id", 1),
(this_or_next|multiplayer_is_server),
(neg|game_in_multiplayer_mode),
(agent_slot_eq, ":agent_id", slot_agent_sprint_mode, 0),
(try_begin),
(agent_slot_eq, ":agent_id", slot_agent_walk, 0),
(agent_set_slot, ":agent_id", slot_agent_walk, 1),
(agent_set_speed_modifier, ":agent_id", 50),
(agent_set_horse_speed_factor, ":agent_id", 30),
(else_try),
(agent_set_slot, ":agent_id", slot_agent_walk, 0),
(agent_set_speed_modifier, ":agent_id", 100),
(agent_set_horse_speed_factor, ":agent_id", 100),
(try_end),
]),
("cf_agent_sprint_limiter",
[
(store_script_param, ":agent_id", 1),
(this_or_next|multiplayer_is_server),
(neg|game_in_multiplayer_mode),
(agent_get_wielded_item, ":weapon_r", ":agent_id", 0),#right hand
(agent_get_wielded_item, ":weapon_l", ":agent_id", 1),#left hand
(le, ":weapon_r", 0),#no wielded weapon while sprinting
(le, ":weapon_l", 0),#no wielded shield while sprinting
(agent_slot_eq, ":agent_id", slot_agent_walk, 0),
(agent_slot_eq, ":agent_id", slot_agent_sprint_time, 0),
(agent_set_slot, ":agent_id", slot_agent_sprint_time, 1),
(agent_set_slot, ":agent_id", slot_agent_sprint_mode, 1),
(agent_get_troop_id, ":sprint_troop", ":agent_id"),
(gt, ":sprint_troop", -1),
(agent_get_horse, ":horse", ":agent_id"),
(try_begin),# unmounted agent
(le, ":horse", 0),
(assign, ":speed", 200),
(assign, ":limit", 24),#sprint time = 1/2
(store_skill_level, ":skl", "skl_athletics", ":sprint_troop"),
(try_begin),
(gt, ":skl", 0),
(store_mul, ":skl_speed", ":skl", 2),
(val_sub, ":speed", ":skl_speed"),
(val_add, ":limit", ":skl"),
(try_end),
(agent_set_speed_modifier, ":agent_id", ":speed"),
(else_try),# mounted agent
(assign, ":speed", 150),
(assign, ":limit", 32),#sprint time = 1/2
(store_skill_level, ":skl", "skl_riding", ":sprint_troop"),
(try_begin),
(gt, ":skl", 0),
(val_sub, ":speed", ":skl"),
(val_add, ":limit", ":skl"),
(try_end),
(agent_set_horse_speed_factor, ":agent_id", ":speed"),
(try_end),
(agent_set_slot, ":agent_id", slot_agent_sprint_limit, ":limit"),
]),
("cf_agent_sprint_time",
[
(store_script_param, ":agent_id", 1),
(this_or_next|multiplayer_is_server),
(neg|game_in_multiplayer_mode),
(agent_get_slot, ":time", ":agent_id", slot_agent_sprint_time),
(agent_get_slot, ":limit", ":agent_id", slot_agent_sprint_limit),
(try_begin),
(ge, ":time", 1),
(agent_get_wielded_item, ":weapon_r", ":agent_id", 0),#right hand
(agent_get_wielded_item, ":weapon_l", ":agent_id", 1),#left hand
(assign, ":lower_time", 0),
(try_begin),
(agent_slot_eq, ":agent_id", slot_agent_sprint_mode, 1),
(le, ":weapon_r", 0),#no wielded weapon while sprinting
(le, ":weapon_l", 0),#no wielded shield while sprinting
(val_add, ":time", 2),#1/2 sec
(else_try),
(assign, ":lower_time", 1),
(try_end),
(try_begin),
(gt, ":time", ":limit"),
(assign, ":lower_time", 1),
(try_end),
(try_begin),
(eq, ":lower_time", 1),
(agent_get_slot, ":time", ":agent_id", slot_agent_sprint_time),
(val_sub, ":time", 1),
(val_max, ":time", 0),
(agent_set_slot, ":agent_id", slot_agent_sprint_mode, 0),
(agent_slot_eq, ":agent_id", slot_agent_walk, 0),
(agent_get_horse, ":horse", ":agent_id"),
(try_begin),# unmounted agent
(le, ":horse", 0),
(agent_set_speed_modifier, ":agent_id", 100),
(else_try),# mounted agent
(agent_set_horse_speed_factor, ":agent_id", 100),
(try_end),
(try_end),
(agent_set_slot, ":agent_id", slot_agent_sprint_time, ":time"),
(try_end),
]),
("cf_agent_sprint_stop",
[
(store_script_param, ":agent_id", 1),
(this_or_next|multiplayer_is_server),
(neg|game_in_multiplayer_mode),
(agent_get_slot, ":time", ":agent_id", slot_agent_sprint_time),
(try_begin),
(gt, ":time", 0),
(val_sub, ":time", 1),
(agent_set_slot, ":agent_id", slot_agent_sprint_time, ":time"),
(agent_set_slot, ":agent_id", slot_agent_sprint_mode, 0),
(agent_slot_eq, ":agent_id", slot_agent_walk, 0),
(agent_get_horse, ":horse", ":agent_id"),
(try_begin),# unmounted agent
(le, ":horse", 0),
(agent_set_speed_modifier, ":agent_id", 100),
(else_try),# mounted agent
(agent_set_horse_speed_factor, ":agent_id", 100),
(try_end),
(try_end),
]),