Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #script_determine_team_flags
- # INPUT: none
- # OUTPUT: none
- ("determine_team_flags",
- [
- (store_script_param, ":team_no", 1),
- (try_begin),
- (eq, "$g_multiplayer_game_type", multiplayer_game_type_capture_the_flag),
- (try_begin),
- (eq, ":team_no", 0),
- (team_get_faction, ":team_faction_no", 0),
- (try_begin),
- (eq, ":team_faction_no", "fac_kingdom_1"),
- (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_4"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_2"),
- (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_1"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_3"),
- (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_3"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_4"),
- (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_2"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_5"),
- (assign, "$team_1_flag_scene_prop", "spr_ctf_flag_kingdom_5"),
- (try_end),
- (else_try),
- (team_get_faction, ":team_faction_no", 1),
- (try_begin),
- (eq, ":team_faction_no", "fac_kingdom_1"),
- (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_4"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_2"),
- (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_1"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_3"),
- (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_3"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_4"),
- (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_2"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_5"),
- (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_5"),
- (try_end),
- (try_begin),
- (eq, "$team_1_flag_scene_prop", "$team_2_flag_scene_prop"),
- (assign, "$team_2_flag_scene_prop", "spr_ctf_flag_kingdom_7"),
- (try_end),
- (try_end),
- (else_try),
- (try_begin),
- (eq, ":team_no", 0),
- (team_get_faction, ":team_faction_no", 0),
- (try_begin),
- (eq, ":team_faction_no", "fac_kingdom_1"),
- (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_nord"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_2"),
- (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_swadian"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_3"),
- (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_khergit"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_4"),
- (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_vaegir"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_5"),
- (assign, "$team_1_flag_scene_prop", "spr_headquarters_flag_rhodok"),
- (try_end),
- (else_try),
- (team_get_faction, ":team_faction_no", 1),
- (try_begin),
- (eq, ":team_faction_no", "fac_kingdom_1"),
- (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_nord"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_2"),
- (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_swadian"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_3"),
- (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_khergit"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_4"),
- (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_vaegir"),
- (else_try),
- (eq, ":team_faction_no", "fac_kingdom_5"),
- (assign, "$team_2_flag_scene_prop", "spr_headquarters_flag_rhodok"),
- (try_end),
- (try_end),
- ]),
- #script_calculate_flag_move_time
- # INPUT: arg1 = number_of_total_agents_around_flag, arg2 = dist_between_flag_and_its_pole
- # OUTPUT: reg0 = flag move time
- ("calculate_flag_move_time",
- [
- (store_script_param, ":number_of_total_agents_around_flag", 1),
- (store_script_param, ":dist_between_flag_and_its_target", 2),
- (try_begin), #(if no one is around flag it again moves to its current owner situation but 5 times slower than normal)
- (eq, ":number_of_total_agents_around_flag", 0),
- (store_mul, reg0, ":dist_between_flag_and_its_target", 2500),#5.00 * 1.00 * (500 stable) = 2000
- (else_try),
- (eq, ":number_of_total_agents_around_flag", 1),
- (store_mul, reg0, ":dist_between_flag_and_its_target", 500), #1.00 * (500 stable) = 500
- (else_try),
- (eq, ":number_of_total_agents_around_flag", 2),
- (store_mul, reg0, ":dist_between_flag_and_its_target", 300), #0.60(0.60) * (500 stable) = 300
- (else_try),
- (eq, ":number_of_total_agents_around_flag", 3),
- (store_mul, reg0, ":dist_between_flag_and_its_target", 195), #0.39(0.60 * 0.65) * (500 stable) = 195
- (else_try),
- (eq, ":number_of_total_agents_around_flag", 4),
- (store_mul, reg0, ":dist_between_flag_and_its_target", 137), #0.273(0.60 * 0.65 * 0.70) * (500 stable) = 136.5 >rounding> 137
- (else_try),
- (eq, ":number_of_total_agents_around_flag", 5),
- (store_mul, reg0, ":dist_between_flag_and_its_target", 102), #0.20475(0.60 * 0.65 * 0.70 * 0.75) * (500 stable) = 102.375 >rounding> 102
- (else_try),
- (eq, ":number_of_total_agents_around_flag", 6),
- (store_mul, reg0, ":dist_between_flag_and_its_target", 82), #0.1638(0.60 * 0.65 * 0.70 * 0.75 * 0.80) * (500 stable) = 81.9 >rounding> 82
- (else_try),
- (eq, ":number_of_total_agents_around_flag", 7),
- (store_mul, reg0, ":dist_between_flag_and_its_target", 66), #0.13104(0.60 * 0.65 * 0.70 * 0.75 * 0.80 * 0.85) * (500 stable) = 65.52 >rounding> 66
- (else_try),
- (eq, ":number_of_total_agents_around_flag", 8),
- (store_mul, reg0, ":dist_between_flag_and_its_target", 59), #0.117936(0.60 * 0.65 * 0.70 * 0.75 * 0.80 * 0.85 * 0.90) * (500 stable) = 58.968 >rounding> 59
- (else_try),
- (store_mul, reg0, ":dist_between_flag_and_its_target", 56), #0.1120392(0.60 * 0.65 * 0.70 * 0.75 * 0.80 * 0.85 * 0.90 * 0.95) * (500 stable) = 56.0196 >rounding> 56
- (try_end),
- (assign, ":number_of_players", 0),
- (get_max_players, ":num_players"),
- (try_for_range, ":cur_player", 0, ":num_players"),
- (player_is_active, ":cur_player"),
- (val_add, ":number_of_players", 1),
- (try_end),
- (try_begin),
- (lt, ":number_of_players", 10),
- (val_mul, reg0, 50),
- (else_try),
- (lt, ":number_of_players", 35),
- (store_sub, ":number_of_players_multipication", 35, ":number_of_players"),
- (val_mul, ":number_of_players_multipication", 2),
- (store_sub, ":number_of_players_multipication", 100, ":number_of_players_multipication"),
- (val_mul, reg0, ":number_of_players_multipication"),
- (else_try),
- (val_mul, reg0, 100),
- (try_end),
- (try_begin),
- (this_or_next|eq, "$g_multiplayer_game_type", multiplayer_game_type_siege),
- (eq, "$g_multiplayer_game_type", multiplayer_game_type_captain_siege),
- (val_mul, reg0, 2),
- (try_end),
- (val_div, reg0, 10000), #100x for number of players around flag, 100x for number of players in game
- ]),
- #script_move_death_mode_flags_down
- # INPUT: none
- # OUTPUT: none
- ("move_death_mode_flags_down",
- [
- (try_begin),
- (scene_prop_get_instance, ":pole_1_id", "spr_headquarters_pole_code_only", 0),
- (prop_instance_get_position, pos0, ":pole_1_id"),
- (position_move_z, pos0, -2000),
- (prop_instance_set_position, ":pole_1_id", pos0),
- (try_end),
- (try_begin),
- (scene_prop_get_instance, ":pole_2_id", "spr_headquarters_pole_code_only", 1),
- (prop_instance_get_position, pos1, ":pole_2_id"),
- (position_move_z, pos1, -2000),
- (prop_instance_set_position, ":pole_2_id", pos1),
- (try_end),
- (try_begin),
- (scene_prop_get_instance, ":pole_1_id", "spr_headquarters_pole_code_only", 0),
- (prop_instance_get_position, pos0, ":pole_1_id"),
- (scene_prop_get_instance, ":flag_1_id", "$team_1_flag_scene_prop", 0),
- (prop_instance_stop_animating, ":flag_1_id"),
- (position_move_z, pos0, multi_headquarters_flag_initial_height),
- (prop_instance_set_position, ":flag_1_id", pos0),
- (try_end),
- (try_begin),
- (scene_prop_get_instance, ":pole_2_id", "spr_headquarters_pole_code_only", 1),
- (prop_instance_get_position, pos1, ":pole_2_id"),
- (scene_prop_get_instance, ":flag_2_id", "$team_2_flag_scene_prop", 0),
- (prop_instance_stop_animating, ":flag_2_id"),
- (position_move_z, pos1, multi_headquarters_flag_initial_height),
- (prop_instance_set_position, ":flag_2_id", pos1),
- (try_end),
- ]),
- #script_move_flag
- # INPUT: arg1 = shown_flag_id, arg2 = move time in seconds, pos0 = target position
- # OUTPUT: none
- ("move_flag",
- [
- (store_script_param, ":shown_flag_id", 1),
- (store_script_param, ":shown_flag_move_time", 2),
- (try_begin),
- (multiplayer_is_server), #added after auto-animating
- (try_begin),
- (eq, ":shown_flag_move_time", 0), #stop
- (prop_instance_stop_animating, ":shown_flag_id"),
- (else_try),
- (prop_instance_animate_to_position, ":shown_flag_id", pos0, ":shown_flag_move_time"),
- (try_end),
- (try_end),
- ]),
- #script_move_headquarters_flags
- # INPUT: arg1 = current_owner, arg2 = number_of_agents_around_flag_team_1, arg3 = number_of_agents_around_flag_team_2
- # OUTPUT: none
- ("move_headquarters_flags",
- [
- (store_script_param, ":flag_no", 1),
- (store_script_param, ":number_of_agents_around_flag_team_1", 2),
- (store_script_param, ":number_of_agents_around_flag_team_2", 3),
- (store_add, ":cur_flag_slot", multi_data_flag_owner_begin, ":flag_no"),
- (troop_get_slot, ":current_owner", "trp_multiplayer_data", ":cur_flag_slot"),
- (scene_prop_get_num_instances, ":num_instances", "spr_headquarters_flag_gray_code_only"),
- (try_begin),
- (assign, ":visibility", 0),
- (lt, ":flag_no", ":num_instances"),
- (scene_prop_get_instance, ":flag_id", "spr_headquarters_flag_gray_code_only", ":flag_no"),
- (scene_prop_get_visibility, ":visibility", ":flag_id"),
- (try_end),
- (try_begin),
- (eq, ":visibility", 1),
- (assign, ":shown_flag", 0),
- (assign, ":shown_flag_id", ":flag_id"),
- (else_try),
- (scene_prop_get_num_instances, ":num_instances", "$team_1_flag_scene_prop"),
- (try_begin),
- (assign, ":visibility", 0),
- (lt, ":flag_no", ":num_instances"),
- (scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
- (scene_prop_get_visibility, ":visibility", ":flag_id"),
- (try_end),
- #(scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
- #(scene_prop_get_visibility, ":visibility", ":flag_id"),
- (try_begin),
- (eq, ":visibility", 1),
- (assign, ":shown_flag", 1),
- (assign, ":shown_flag_id", ":flag_id"),
- (else_try),
- (scene_prop_get_num_instances, ":num_instances", "$team_2_flag_scene_prop"),
- (try_begin),
- (assign, ":visibility", 0),
- (lt, ":flag_no", ":num_instances"),
- (scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
- (scene_prop_get_visibility, ":visibility", ":flag_id"),
- (try_end),
- #(scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
- #(scene_prop_get_visibility, ":visibility", ":flag_id"),
- (try_begin),
- (eq, ":visibility", 1),
- (assign, ":shown_flag", 2),
- (assign, ":shown_flag_id", ":flag_id"),
- (try_end),
- (try_end),
- (try_end),
- (try_begin),
- (scene_prop_get_instance, ":pole_id", "spr_headquarters_pole_code_only", ":flag_no"),
- (try_end),
- (try_begin),
- (eq, ":shown_flag", ":current_owner"), #situation 1 : (current owner is equal shown flag)
- (try_begin),
- (ge, ":number_of_agents_around_flag_team_1", 1),
- (ge, ":number_of_agents_around_flag_team_2", 1),
- (assign, ":flag_movement", 0), #0:stop
- (else_try),
- (eq, ":number_of_agents_around_flag_team_1", 0),
- (eq, ":number_of_agents_around_flag_team_2", 0),
- (assign, ":flag_movement", 1), #1:rise (slow)
- (else_try),
- (try_begin),
- (ge, ":number_of_agents_around_flag_team_1", 1),
- (eq, ":number_of_agents_around_flag_team_2", 0),
- (eq, ":current_owner", 1),
- (assign, ":flag_movement", 1), #1:rise (fast)
- (else_try),
- (eq, ":number_of_agents_around_flag_team_1", 0),
- (ge, ":number_of_agents_around_flag_team_2", 1),
- (eq, ":current_owner", 2),
- (assign, ":flag_movement", 1), #1:rise (fast)
- (else_try),
- (assign, ":flag_movement", -1), #-1:drop (fast)
- (try_end),
- (try_end),
- (else_try), #situation 2 : (current owner is different than shown flag)
- (try_begin),
- (ge, ":number_of_agents_around_flag_team_1", 1),
- (ge, ":number_of_agents_around_flag_team_2", 1),
- (assign, ":flag_movement", 0), #0:stop
- (else_try),
- (eq, ":number_of_agents_around_flag_team_1", 0),
- (eq, ":number_of_agents_around_flag_team_2", 0),
- (assign, ":flag_movement", -1), #-1:drop (slow)
- (else_try),
- (try_begin),
- (ge, ":number_of_agents_around_flag_team_1", 1),
- (eq, ":number_of_agents_around_flag_team_2", 0),
- (try_begin),
- (eq, ":shown_flag", 1),
- (assign, ":flag_movement", 1), #1:rise (fast)
- (else_try),
- (neq, ":current_owner", 1),
- (assign, ":flag_movement", -1), #-1:drop (fast)
- (try_end),
- (else_try),
- (eq, ":number_of_agents_around_flag_team_1", 0),
- (ge, ":number_of_agents_around_flag_team_2", 1),
- (try_begin),
- (eq, ":shown_flag", 2),
- (assign, ":flag_movement", 1), #1:rise (fast)
- (else_try),
- (neq, ":current_owner", 2),
- (assign, ":flag_movement", -1), #-1:drop (fast)
- (try_end),
- (try_end),
- (try_end),
- (try_end),
- (store_add, ":number_of_total_agents_around_flag", ":number_of_agents_around_flag_team_1", ":number_of_agents_around_flag_team_2"),
- (try_begin),
- (eq, ":flag_movement", 0),
- (assign, reg0, 0),
- (else_try),
- (eq, ":flag_movement", 1),
- (prop_instance_get_position, pos1, ":shown_flag_id"),
- (prop_instance_get_position, pos0, ":pole_id"),
- (position_move_z, pos0, multi_headquarters_pole_height),
- (get_distance_between_positions, ":dist_between_flag_and_its_target", pos0, pos1),
- (call_script, "script_calculate_flag_move_time", ":number_of_total_agents_around_flag", ":dist_between_flag_and_its_target"),
- (else_try),
- (eq, ":flag_movement", -1),
- (prop_instance_get_position, pos1, ":shown_flag_id"),
- (prop_instance_get_position, pos0, ":pole_id"),
- (get_distance_between_positions, ":dist_between_flag_and_its_target", pos0, pos1),
- (call_script, "script_calculate_flag_move_time", ":number_of_total_agents_around_flag", ":dist_between_flag_and_its_target"),
- (try_end),
- (call_script, "script_move_flag", ":shown_flag_id", reg0), #pos0 : target position
- ]),
- #script_set_num_agents_around_flag
- # INPUT: arg1 = flag_no, arg2 = owner_code
- # OUTPUT: none
- ("set_num_agents_around_flag",
- [
- (store_script_param, ":flag_no", 1),
- (store_script_param, ":current_owner_code", 2),
- (store_div, ":number_of_agents_around_flag_team_1", ":current_owner_code", 100),
- (store_mod, ":number_of_agents_around_flag_team_2", ":current_owner_code", 100),
- (store_add, ":cur_flag_owner_counts_slot", multi_data_flag_players_around_begin, ":flag_no"),
- (troop_set_slot, "trp_multiplayer_data", ":cur_flag_owner_counts_slot", ":current_owner_code"),
- (call_script, "script_move_headquarters_flags", ":flag_no", ":number_of_agents_around_flag_team_1", ":number_of_agents_around_flag_team_2"),
- ]),
- #script_change_flag_owner
- # INPUT: arg1 = flag_no, arg2 = owner_code
- # OUTPUT: none
- ("change_flag_owner",
- [
- (store_script_param, ":flag_no", 1),
- (store_script_param, ":owner_code", 2),
- (try_begin),
- (lt, ":owner_code", 0),
- (val_add, ":owner_code", 1),
- (val_mul, ":owner_code", -1),
- (try_end),
- (store_div, ":owner_team_no", ":owner_code", 100),
- (store_mod, ":shown_flag_no", ":owner_code", 100),
- (store_add, ":cur_flag_slot", multi_data_flag_owner_begin, ":flag_no"),
- (troop_get_slot, ":older_owner_team_no", "trp_multiplayer_data", ":cur_flag_slot"),
- (store_add, ":cur_flag_slot", multi_data_flag_owner_begin, ":flag_no"),
- (troop_set_slot, "trp_multiplayer_data", ":cur_flag_slot", ":owner_team_no"),
- #senchronizing flag positions
- (try_begin),
- #(this_or_next|eq, ":initial_flags", 0), #moved after auto-animating
- (multiplayer_is_server),
- (scene_prop_get_instance, ":pole_id", "spr_headquarters_pole_code_only", ":flag_no"),
- (try_begin),
- (eq, ":owner_team_no", 0), #if new owner team is 0 then flags are at bottom
- (neq, ":older_owner_team_no", -1), #clients
- (assign, ":continue", 1),
- (try_begin),
- (multiplayer_is_server),
- (eq, "$g_placing_initial_flags", 1),
- (assign, ":continue", 0),
- (try_end),
- (eq, ":continue", 1),
- (prop_instance_get_position, pos0, ":pole_id"),
- (position_move_z, pos0, multi_headquarters_distance_to_change_flag),
- (else_try),
- (prop_instance_get_position, pos0, ":pole_id"), #if new owner team is not 0 then flags are at top
- (position_move_z, pos0, multi_headquarters_pole_height),
- (try_end),
- (scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
- (prop_instance_stop_animating, ":flag_id"),
- (prop_instance_set_position, ":flag_id", pos0),
- (scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
- (prop_instance_stop_animating, ":flag_id"),
- (prop_instance_set_position, ":flag_id", pos0),
- (scene_prop_get_instance, ":flag_id", "spr_headquarters_flag_gray_code_only", ":flag_no"),
- (prop_instance_stop_animating, ":flag_id"),
- (prop_instance_set_position, ":flag_id", pos0),
- (try_end),
- #setting visibilities of flags
- (try_begin),
- (eq, ":shown_flag_no", 0),
- (scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
- (scene_prop_set_visibility, ":flag_id", 0),
- (scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
- (scene_prop_set_visibility, ":flag_id", 0),
- (scene_prop_get_instance, ":flag_id", "spr_headquarters_flag_gray_code_only", ":flag_no"),
- (scene_prop_set_visibility, ":flag_id", 1),
- (else_try),
- (eq, ":shown_flag_no", 1),
- (scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
- (scene_prop_set_visibility, ":flag_id", 1),
- (scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
- (scene_prop_set_visibility, ":flag_id", 0),
- (scene_prop_get_instance, ":flag_id", "spr_headquarters_flag_gray_code_only", ":flag_no"),
- (scene_prop_set_visibility, ":flag_id", 0),
- (else_try),
- (eq, ":shown_flag_no", 2),
- (scene_prop_get_instance, ":flag_id", "$team_1_flag_scene_prop", ":flag_no"),
- (scene_prop_set_visibility, ":flag_id", 0),
- (scene_prop_get_instance, ":flag_id", "$team_2_flag_scene_prop", ":flag_no"),
- (scene_prop_set_visibility, ":flag_id", 1),
- (scene_prop_get_instance, ":flag_id", "spr_headquarters_flag_gray_code_only", ":flag_no"),
- (scene_prop_set_visibility, ":flag_id", 0),
- (try_end),
- #other
- (store_add, ":cur_flag_players_around_slot", multi_data_flag_players_around_begin, ":flag_no"),
- (troop_get_slot, ":players_around_code", "trp_multiplayer_data", ":cur_flag_players_around_slot"),
- (store_div, ":number_of_agents_around_flag_team_1", ":players_around_code", 100),
- (store_mod, ":number_of_agents_around_flag_team_2", ":players_around_code", 100),
- (call_script, "script_move_headquarters_flags", ":flag_no", ":number_of_agents_around_flag_team_1", ":number_of_agents_around_flag_team_2"),
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement