("projectile_physics_field",
[
(set_fixed_point_multiplier, 100),
(try_for_range, ":ammo", "spr_cannonball", "spr_cannonball_start_position"),
(scene_prop_get_num_instances, ":num_cannonballs", ":ammo"),
(get_player_agent_no, ":player_agent"),
(agent_get_team, ":player_team", ":player_agent"),
(try_begin),
(assign, ":other_cannons_team", 0),
(this_or_next|eq, ":ammo", "spr_cannonball"),
(eq, ":ammo", "spr_rock_ammo"),
(assign, ":other_cannons_team", ":player_team"),
(else_try),
(assign, ":other_cannons_team", 10),
(try_end),
(try_for_range, ":instance_no", 0, ":num_cannonballs"),
(scene_prop_get_instance, ":instance", ":ammo", ":instance_no"),
(item_get_slot, ":moving", ":instance", 216),
(eq, ":moving", 1),
(item_get_slot, ":time", ":instance", 215),
(prop_instance_get_position, pos1, ":instance"),
(try_for_agents, ":agent_no"),
(agent_get_team, ":agent", ":agent_no"),
(try_begin),
(this_or_next|eq, ":agent", ":player_team"),
(agent_is_ally, ":agent_no"),
(agent_get_troop_id, ":troop_id", ":agent_no"),
(is_between, ":troop_id", "trp_mercenary_engineer", "trp_new_array_a"),
(agent_get_team, ":enemy_agent", ":agent_no"),
(else_try),
(agent_get_troop_id, ":agent_troop_id", ":agent_no"),
(is_between, ":agent_troop_id", "trp_mercenary_engineer", "trp_new_array_a"),
(agent_get_team, ":cur_team", ":agent_no"),
(try_end),
(try_end),
(val_mul, ":time", 360),
(val_div, ":time", -40),
(position_rotate_x, pos1, ":time"),
(position_rotate_y, pos1, ":time"),
(get_player_agent_no, ":player_agent"),
(agent_get_horse, ":agent_horse_id", ":player_agent"),
(try_for_agents, ":agents"),
(agent_get_troop_id, ":cur_troop", ":agents"),
(troop_get_type, ":troop_type", ":cur_troop"),
(neq, ":agents", ":player_agent"),
(neq, ":agents", ":agent_horse_id"),
(neq, ":troop_type", 16),
(agent_is_alive, ":agents"),
(agent_get_position, pos2, ":agents"),
(position_move_z, pos2, 100),
(position_transform_position_to_local, pos3, pos1, pos2),
(position_get_x, ":x_value", pos3),
(position_get_y, ":y_value", pos3),
(position_get_z, ":z_value", pos3),
(try_begin),
(le, ":x_value", 50),
(ge, ":x_value", -50),
(try_begin),
(le, ":z_value", 100),
(ge, ":z_value", -100),
(try_begin),
(le, ":y_value", 200),
(ge, ":y_value", -200),
(agent_get_team, ":team_no", ":agents"),
(try_begin),
(try_begin),
(eq, ":other_cannons_team", ":player_team"),
(assign, ":enemy_team", ":enemy_agent"),
(else_try),
(assign, ":enemy_team", ":cur_team"),
(try_end),
(teams_are_enemies, ":team_no", ":enemy_team"),
(agent_get_troop_id, ":cur_troop", ":agents"),
(troop_get_type, ":troop_type", ":cur_troop"),
(try_begin),
(eq, ":troop_type", 1),
(agent_play_sound, ":agents", "snd_woman_die"),
(else_try),
(agent_play_sound, ":agents", "snd_man_die"),
(try_end),
(agent_set_hit_points, ":agents", 0),
(try_for_agents, ":agents_team"),
(agent_get_team, ":agentsteam", ":agents_team"),
(agent_get_troop_id, ":cur_troop", ":agents_team"),
(is_between, ":cur_troop", "trp_mercenary_engineer", "trp_new_array_a"),
(eq, ":agentsteam", ":enemy_team"),
(assign, ":agents_deliverer", ":agents_team"),
(try_end),
(agent_deliver_damage_to_agent, ":agents_deliverer", ":agents"),
(try_end),
(call_script, "script_get_cannon_instance", ":instance"),
(assign, ":stop", 0),
(try_for_agents, ":agents_deliverer"),
(neq, ":agents_deliverer", ":player_agent"),
(neq, ":agents_deliverer", ":agent_horse_id"),
(agent_get_troop_id, ":cur_troop", ":agents_deliverer"),
(troop_get_type, ":troop_type", ":cur_troop"),
(neq, ":troop_type", 16),
(assign, ":agent_deliverer", ":agents_deliverer"),
(eq, ":stop", 0),
(agent_slot_eq, ":agent_deliverer", 13, reg0),
(try_begin),
(agent_get_team, ":team_no", ":agents"),
(try_begin),
(try_begin),
(eq, ":other_cannons_team", ":player_team"),
(assign, ":enemy_team", ":enemy_agent"),
(else_try),
(assign, ":enemy_team", ":cur_team"),
(try_end),
(teams_are_enemies, ":team_no", ":enemy_team"),
(agent_get_troop_id, ":cur_troop", ":agents"),
(troop_get_type, ":troop_type", ":cur_troop"),
(try_begin),
(eq, ":troop_type", 1),
(agent_play_sound, ":agents", "snd_woman_die"),
(else_try),
(agent_play_sound, ":agents", "snd_man_die"),
(try_end),
(try_for_agents, ":agents_team"),
(agent_get_team, ":agentsteam", ":agents_team"),
(agent_get_troop_id, ":cur_troop", ":agents_team"),
(is_between, ":cur_troop", "trp_mercenary_engineer", "trp_new_array_a"),
(eq, ":agentsteam", ":enemy_team"),
(assign, ":agents_deliverer", ":agents_team"),
(try_end),
(agent_deliver_damage_to_agent, ":agents_deliverer", ":agents"),
(try_end),
(try_end),
(assign, ":stop", 1),
(try_end),
(eq, ":stop", 0),
(try_begin),
(agent_get_team, ":team_no", ":agents"),
(try_begin),
(try_begin),
(eq, ":other_cannons_team", ":player_team"),
(assign, ":enemy_team", ":enemy_agent"),
(else_try),
(assign, ":enemy_team", ":cur_team"),
(try_end),
(teams_are_enemies, ":team_no", ":enemy_team"),
(agent_get_troop_id, ":cur_troop", ":agents"),
(troop_get_type, ":troop_type", ":cur_troop"),
(try_begin),
(eq, ":troop_type", 1),
(agent_play_sound, ":agents", "snd_woman_die"),
(else_try),
(agent_play_sound, ":agents", "snd_man_die"),
(try_end),
(try_for_agents, ":agents_team"),
(agent_get_team, ":agentsteam", ":agents_team"),
(agent_get_troop_id, ":cur_troop", ":agents_team"),
(is_between, ":cur_troop", "trp_mercenary_engineer", "trp_new_array_a"),
(eq, ":agentsteam", ":enemy_team"),
(assign, ":agents_deliverer", ":agents_team"),
(try_end),
(agent_deliver_damage_to_agent, ":agents_deliverer", ":agents"),
(try_end),
(try_end),
(try_end),
(try_end),
(try_end),
(try_end),
(position_get_z, ":pos1z", pos1),
(copy_position, 2, 1),
(position_set_z, pos2, 10000),
(position_set_z_to_ground_level, pos2),
(position_get_z, ":pos2z", pos2),
(val_sub, ":pos1z", ":pos2z"),
(try_begin),
(try_begin),
(le, ":pos1z", 100),
(particle_system_burst, "psys_cannon_ground_hit", pos1, 3),
(particle_system_burst, "psys_cannon_ground_hit_b", pos1, 3),
(try_end),
(le, ":pos1z", 40),
(item_get_slot, ":z_direction", ":instance", 214),
(item_get_slot, ":time", ":instance", 215),
(store_mul, ":gravity", ":time", "$gravity_used"),
(val_div, ":gravity", 5),
(val_sub, ":z_direction", ":gravity"),
(le, ":z_direction", 0),
(val_div, ":z_direction", -3),
(store_random_in_range, reg1, 0, 3),
(val_add, reg1, "snd_groundhit1"),
(play_sound_at_position, reg1, pos1),
(try_begin),
(this_or_next|eq, ":ammo", "spr_cannonball"),
(eq, ":ammo", "spr_cannonball"),
(try_begin),
(le, ":z_direction", 80),
(item_set_slot, ":instance", 216, 0),
(position_set_z, pos1, 10000),
(position_set_z_to_ground_level, pos1, 10000),
(position_move_z, pos1, 5),
(prop_instance_animate_to_position, ":instance", pos1, 1),
(try_begin),
(try_begin),
(eq, ":other_cannons_team", ":player_team"),
(assign, ":enemy_team", ":enemy_agent"),
(else_try),
(assign, ":enemy_team", ":cur_team"),
(try_end),
(call_script, "script_cannon_strike_effects", 1, ":enemy_team"),
(try_end),
(else_try),
(scene_prop_get_instance, ":start_instance", "spr_cannonball_start_position", ":instance_no"),
(prop_instance_animate_to_position, ":start_instance", pos1, 1),
(item_get_slot, ":x_direction", ":instance", 212),
(item_get_slot, ":y_direction", ":instance", 213),
(val_div, ":x_direction", 3),
(val_div, ":y_direction", 3),
(val_mul, ":x_direction", 2),
(val_mul, ":y_direction", 2),
(item_set_slot, ":instance", 212, ":x_direction"),
(item_set_slot, ":instance", 213, ":y_direction"),
(item_set_slot, ":instance", 214, ":z_direction"),
(item_set_slot, ":instance", 215, 0),
(call_script, "script_force_movement", ":instance"),
(try_end),
(else_try),
(this_or_next|eq, ":ammo", "spr_rock_ammo"),
(eq, ":ammo", "spr_rock_ammo"),
(item_set_slot, ":instance", 216, 0),
(position_set_z, pos1, 10000),
(position_set_z_to_ground_level, pos1),
(position_move_z, pos1, 5),
(prop_instance_animate_to_position, ":instance", pos1, 1),
(try_begin),
(eq, ":other_cannons_team", ":player_team"),
(assign, ":enemy_team", ":enemy_agent"),
(else_try),
(assign, ":enemy_team", ":cur_team"),
(try_end),
(call_script, "script_cannon_explosion_effects", 1, ":enemy_team"),
(try_begin),
(try_begin),
(eq, ":other_cannons_team", ":player_team"),
(assign, ":enemy_team", ":enemy_agent"),
(else_try),
(assign, ":enemy_team", ":cur_team"),
(try_end),
(call_script, "script_cannon_fire_effects", 1, ":enemy_team"),
(try_end),
(store_random_in_range, reg1, 0, 4),
(val_add, reg1, "snd_cannon_shot1"),
(play_sound_at_position, reg1, pos1),
(try_begin),
(this_or_next|eq, ":ammo", "spr_rock_ammo"),
(eq, ":ammo", "spr_rock_ammo"),
(assign, ":max_damage", 1600000),
(else_try),
(assign, ":max_damage", 3200000),
(try_end),
(try_for_agents, ":agents"),
(agent_get_troop_id, ":cur_troop", ":agents"),
(troop_get_type, ":troop_type", ":cur_troop"),
(agent_get_horse, ":agent_horse_id", ":player_agent"),
(neq, ":agents", ":player_agent"),
(neq, ":troop_type", 16),
(neq, ":agents", ":agent_horse_id"),
(agent_is_alive, ":agents"),
(agent_get_position, pos2, ":agents"),
(get_distance_between_positions, ":distance", pos1, pos2),
(is_between, ":distance", 1, 800),
(store_div, ":damage", ":max_damage", ":distance"),
(val_div, ":damage", ":distance"),
(call_script, "script_get_cannon_instance", ":instance"),
(assign, ":stop", 0),
(try_for_agents, ":agents_deliverer"),
(agent_get_troop_id, ":cur_troop", ":agents_deliverer"),
(troop_get_type, ":troop_type", ":cur_troop"),
(neq, ":agents_deliverer", ":player_agent"),
(agent_get_horse, ":agent_horse_id", ":player_agent"),
(neq, ":agents_deliverer", ":agent_horse_id"),
(neq, ":troop_type", 16),
(assign, ":agent_deliverer", ":agents_deliverer"),
(eq, ":stop", 0),
(agent_slot_eq, ":agent_deliverer", 13, reg0),
(try_begin),
(agent_get_team, ":team_no", ":agents"),
(try_begin),
(try_begin),
(eq, ":other_cannons_team", ":player_team"),
(assign, ":enemy_team", ":enemy_agent"),
(else_try),
(assign, ":enemy_team", ":cur_team"),
(try_end),
(teams_are_enemies, ":team_no", ":enemy_team"),
(call_script, "script_agent_deliver_damage_to_agent", ":agents", ":damage", ":enemy_team"),
(try_end),
(try_end),
(assign, ":stop", 1),
(try_end),
(eq, ":stop", 0),
(try_begin),
(agent_get_team, ":team_no", ":agents"),
(try_begin),
(try_begin),
(eq, ":other_cannons_team", ":player_team"),
(assign, ":enemy_team", ":enemy_agent"),
(else_try),
(assign, ":enemy_team", ":cur_team"),
(try_end),
(teams_are_enemies, ":team_no", ":enemy_team"),
(call_script, "script_agent_deliver_damage_to_agent", ":agents", ":damage", ":enemy_team"),
(try_end),
(try_end),
(try_end),
(try_end),
(else_try),
(item_get_slot, ":time", ":instance", 215),
(val_mul, ":time", 10),
(call_script, "script_get_position_delta_by_time", ":time", ":instance"),
(val_div, ":time", 10),
(copy_position, 3, 1),
(scene_prop_get_instance, ":start_instance", "spr_cannonball_start_position", ":instance_no"),
(prop_instance_get_position, pos5, ":start_instance"),
(position_get_x, ":instance_x", pos5),
(position_get_y, ":instance_y", pos5),
(position_get_z, ":instance_z", pos5),
(position_get_x, ":pos0_x", pos9),
(position_get_y, ":pos0_y", pos9),
(position_get_z, ":pos0_z", pos9),
(val_add, ":instance_x", ":pos0_x"),
(val_add, ":instance_y", ":pos0_y"),
(val_add, ":instance_z", ":pos0_z"),
(position_set_x, pos3, ":instance_x"),
(position_set_y, pos3, ":instance_y"),
(position_set_z, pos3, ":instance_z"),
(val_mul, ":time", 360),
(val_div, ":time", 40),
(position_rotate_x, pos3, ":time"),
(position_rotate_y, pos3, ":time"),
(prop_instance_animate_to_position, ":instance", pos3, 15),
(try_end),
(try_end),
(try_end),
]),
#####################################################################