(0, 0, 0,
[
(get_player_agent_no, ":player_agent"),
(neq, "$g_tutorial_training_ground_melee_trainer_attack", -1),
(mission_disable_talk),
(try_for_agents, ":cur_agent"),
(agent_get_troop_id, ":cur_agent_troop", ":cur_agent"),
(eq, ":cur_agent_troop", "$g_tutorial_training_ground_melee_trainer_attack"),
(assign, ":trainer_agent", ":cur_agent"),
(try_end),
(try_begin),
(eq, "$g_tutorial_training_ground_melee_state", 0),
(try_begin),
(try_for_agents, ":cur_agent"),
(agent_get_troop_id, ":cur_agent_troop", ":cur_agent"),
(this_or_next|eq, ":cur_agent_troop", "trp_tutorial_fighter_1"),
(this_or_next|eq, ":cur_agent_troop", "trp_tutorial_fighter_2"),
(this_or_next|eq, ":cur_agent_troop", "trp_tutorial_fighter_3"),
(eq, ":cur_agent_troop", "trp_tutorial_fighter_4"),
(agent_set_team, ":cur_agent", 7),
(agent_get_slot, ":spawn_point", ":cur_agent", slot_agent_spawn_entry_point),
(entry_point_get_position, pos1, ":spawn_point"),
(agent_set_scripted_destination, ":cur_agent", pos1),
(agent_force_rethink, ":cur_agent"),
(try_end),
(agent_set_wielded_item, ":trainer_agent", "itm_practice_sword"), #TODO: change this
(store_random_in_range, "$g_tutorial_training_ground_melee_state", 1, 5), #random attack dir
(assign, "$g_tutorial_update_mouse_presentation", 1),
(assign, "$g_tutorial_training_ground_next_score_time", 0),
(try_end),
(else_try),
(gt, "$g_tutorial_training_ground_melee_state", 0),
(try_begin),
(agent_set_team, ":player_agent", 1),
(agent_set_team, ":trainer_agent", 2),
(agent_get_position, pos1, ":player_agent"),
(agent_set_scripted_destination_no_attack, ":trainer_agent", pos1),
(agent_get_attack_action, ":attack_action", ":player_agent"),
(try_begin),
(eq, ":attack_action", 2), #release
(agent_get_action_dir, ":action_dir_attacker", ":player_agent"),
(try_begin),
(eq, ":action_dir_attacker", 0), #down
(agent_set_defend_action, ":trainer_agent", 0, 1),
(else_try),
(eq, ":action_dir_attacker", 3), #up
(agent_set_defend_action, ":trainer_agent", 3, 1),
(else_try),
(eq, ":action_dir_attacker", 1), #right
(agent_set_defend_action, ":trainer_agent", 2, 1),
(else_try),
(eq, ":action_dir_attacker", 2), #left
(agent_set_defend_action, ":trainer_agent", 1, 1),
(try_end),
(try_end),
(try_begin),
(ge, "$g_tutorial_training_ground_current_score", 5),
(tutorial_message, -1),
(assign, "$g_tutorial_training_ground_melee_state", 0),
(agent_set_team, ":player_agent", 0),
(agent_set_team, ":trainer_agent", 7),
(agent_set_hit_points, ":player_agent", 100, 0),
(agent_set_hit_points, ":trainer_agent", 100, 0),
## (assign, "$g_tutorial_training_ground_melee_trainer_attack_completed", 1), #not used
(assign, "$g_tutorial_training_ground_conversation_state", 9), #attack complete
(start_mission_conversation, "$g_tutorial_training_ground_melee_trainer_attack"),
(assign, "$g_tutorial_training_ground_melee_trainer_attack", -1),
(try_end),
(try_end),
(try_end),
(try_begin),
(agent_get_attack_action, ":attack_action", ":player_agent"),
(eq, ":attack_action", 2), #release
(agent_get_action_dir, ":action_dir_attacker", ":player_agent"),
(store_add, ":attack_state", ":action_dir_attacker", 1),
(agent_get_wielded_item, ":weapon_item", ":player_agent", 0),
(call_script, "script_cf_is_melee_weapon_for_tutorial", ":weapon_item"),
(store_mission_timer_a, ":cur_time"),
(gt, ":cur_time", "$g_tutorial_training_ground_next_score_time"),
(try_begin),
(eq, ":attack_state", "$g_tutorial_training_ground_melee_state"),
(val_add, "$g_tutorial_training_ground_current_score", 1),
(try_begin),
(ge, "$g_tutorial_training_ground_current_score", 5),
(assign, "$g_tutorial_training_ground_melee_state", 5),
(play_sound, "snd_tutorial_2"),
(else_try),
(play_sound, "snd_tutorial_1"),
(assign, ":end_cond", 100),
(try_for_range, ":unused", 0, ":end_cond"),
(store_random_in_range, ":random_no", 1, 5), #random attack dir
(neq, ":random_no", "$g_tutorial_training_ground_melee_state"),
(assign, "$g_tutorial_training_ground_melee_state", ":random_no"),
(assign, ":end_cond", 0), #break
(try_end),
(try_end),
(assign, "$g_tutorial_update_mouse_presentation", 1),
(else_try),
(val_add, "$g_tutorial_training_ground_current_score_2", 1),
(play_sound, "snd_tutorial_fail"),
(try_end),
(store_add, "$g_tutorial_training_ground_next_score_time", ":cur_time", 1),
(try_end),
(assign, reg0, "$g_tutorial_training_ground_current_score"),
(assign, reg1, "$g_tutorial_training_ground_current_score_2"),
(str_clear, s0),
(assign, "$g_tutorial_mouse_dir", -1),
(assign, "$g_tutorial_mouse_click", -1),
(try_begin),
(neq, "$g_tutorial_training_ground_melee_state", 5), #finished
(store_mission_timer_a, ":cur_time"),
(this_or_next|eq, "$g_tutorial_update_mouse_presentation", 0),
(gt, ":cur_time", "$g_tutorial_training_ground_next_score_time"),
(try_begin),
(eq, "$g_tutorial_training_ground_melee_state", 1), #down
(str_store_string, s0, "str_tutorial_training_ground_attack_training_down"),
(else_try),
(eq, "$g_tutorial_training_ground_melee_state", 4), #up
(str_store_string, s0, "str_tutorial_training_ground_attack_training_up"),
(else_try),
(eq, "$g_tutorial_training_ground_melee_state", 2), #right
(str_store_string, s0, "str_tutorial_training_ground_attack_training_right"),
(else_try),
(eq, "$g_tutorial_training_ground_melee_state", 3), #left
(str_store_string, s0, "str_tutorial_training_ground_attack_training_left"),
(try_end),
(store_sub, "$g_tutorial_mouse_dir", "$g_tutorial_training_ground_melee_state", 1),
(assign, "$g_tutorial_mouse_click", 0),
(try_begin),
(eq, "$g_tutorial_update_mouse_presentation", 1),
(assign, "$g_tutorial_update_mouse_presentation", 0),
(start_presentation, "prsnt_tutorial_show_mouse_movement"),
(try_end),
(try_end),
(try_begin),
(agent_get_wielded_item, ":weapon_item", ":player_agent", 0),
(call_script, "script_cf_is_melee_weapon_for_tutorial", ":weapon_item"),
(tutorial_message, "str_tutorial_training_ground_attack_training"),
(else_try),
(tutorial_message, "str_tutorial_training_ground_warning_melee"),
(try_end),
], []),