// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool cornered_start_rappel( var_0, var_1, var_2 ) { var_3 = spawnstruct(); level.rpl = var_3; cnd_plyr_rpl_move_setup( var_3, var_0, var_1, var_2 ); cnd_plyr_rpl_setup_globals( var_3, var_2, var_0 ); cnd_plyr_rpl_legs_setup( var_3, var_2 ); cnd_plyr_rpl_setup_dvars( var_3, var_2 ); cnd_plyr_rpl_setup_player( var_3, var_2 ); thread cnd_plyr_rpl_move( var_3, var_0, var_1, var_2 ); } cornered_stop_rappel() { if ( isdefined( level.rpl ) ) common_scripts\utility::flag_set( "stop_manage_player_rappel_movement" ); } cnd_plyr_rpl_move( var_0, var_1, var_2, var_3 ) { level.player endon( "death" ); thread cnd_plyr_rpl_handle_jump( var_3, var_0 ); thread cnd_plyr_rpl_handle_view_lerp( var_3, var_0 ); while ( !common_scripts\utility::flag( "stop_manage_player_rappel_movement" ) ) { cnd_rpl_calc_move( var_0, var_3 ); cnd_rpl_do_vertical_move( var_0, var_3 ); cnd_rpl_do_lateral_move( var_0, var_3 ); cnd_rpl_do_stop_sway( var_0, var_3 ); cnd_rpl_do_wind( var_0, var_3 ); cnd_rpl_do_rope( var_0, var_3 ); cnd_rpl_do_weapon_bob( var_0, var_3 ); cnd_rpl_do_move_bob( var_0, var_3 ); cnd_rpl_do_legs( var_0, var_3 ); wait( var_0.time_slice ); } cnd_rpl_cleanup( var_3 ); } cornered_start_random_wind() { if ( isdefined( level.rpl ) ) level.rpl.wind_random = 1; } cornered_stop_random_wind() { if ( isdefined( level.rpl ) ) level.rpl.wind_random = 0; } cnd_rpl_stealth_ckpt( var_0 ) { if ( var_0.rappel_type != "stealth" ) return; if ( !isdefined( level.start_point ) || level.start_point != "rappel_stealth" ) return; var_1[0] = level.cornered_player_arms; level.zipline_anim_struct thread maps\_anim::anim_single( var_1, "cornered_zipline_player" ); wait 0.1; level.zipline_anim_struct maps\_anim::anim_set_time( var_1, "cornered_zipline_player", 1.0 ); wait 0.1; level.player playerlinktoabsolute( level.cornered_player_arms, "tag_player" ); wait 0.1; } #using_animtree("animated_props"); cnd_plyr_rpl_move_setup( var_0, var_1, var_2, var_3 ) { cnd_rpl_stealth_ckpt( var_3 ); var_4 = level.player common_scripts\utility::spawn_tag_origin(); var_4.angles = level.player getplayerangles(); var_5 = common_scripts\utility::getstruct( var_1, "targetname" ); var_0.rope_origin = var_5 common_scripts\utility::spawn_tag_origin(); if ( var_3.rappel_type == "stealth" ) var_0.rope_origin.origin = var_0.rope_origin.origin + ( -16, 0, 0 ); level.rpl_rope_anim_origin = spawn( "script_model", var_0.rope_origin.origin ); level.rpl_rope_anim_origin.angles = var_0.rope_origin.angles + ( 0, -90, 0 ); level.rpl_rope_anim_origin setmodel( "generic_prop_raven" ); level.rpl_rope_anim_origin useanimtree( #animtree ); level.rpl_rope_anim_origin linkto( var_0.rope_origin, "tag_origin" ); level.rpl_physical_rope_origin = var_5 common_scripts\utility::spawn_tag_origin(); level.rpl_physical_rope_anim_origin = spawn( "script_model", var_0.rope_origin.origin ); level.rpl_physical_rope_anim_origin.angles = var_0.rope_origin.angles + ( 0, -90, 0 ); level.rpl_physical_rope_anim_origin setmodel( "generic_prop_raven" ); level.rpl_physical_rope_anim_origin useanimtree( #animtree ); level.rpl_physical_rope_anim_origin linkto( level.rpl_physical_rope_origin, "tag_origin" ); var_6 = ( 0, 90, 0 ); if ( var_3.lateral_plane == 2 ) var_6 = ( 0, 325, 0 ); level.rpl_jump_anim_origin = var_4 common_scripts\utility::spawn_tag_origin(); level.rpl_jump_anim_origin.angles = var_6; level.rpl_jump_anim_origin setmodel( "generic_prop_raven" ); level.rpl_jump_anim_origin useanimtree( #animtree ); level.rpl_jump_anim_origin linkto( level.rpl_rope_anim_origin, "J_prop_1" ); level.rpl_plyr_anim_origin = var_4 common_scripts\utility::spawn_tag_origin(); level.rpl_plyr_anim_origin.angles = var_6; level.rpl_plyr_anim_origin setmodel( "generic_prop_raven" ); level.rpl_plyr_anim_origin useanimtree( #animtree ); level.rpl_plyr_anim_origin linkto( level.rpl_jump_anim_origin, "J_prop_1" ); level.plyr_rpl_groundref = getent( var_2, "targetname" ); level.plyr_rpl_groundref.origin = var_4.origin; if ( var_3.rappel_type == "inverted" ) level.plyr_rpl_groundref.angles = ( 90, 270, 0 ); level.plyr_rpl_groundref setmodel( "tag_origin" ); level.player playersetgroundreferenceent( level.plyr_rpl_groundref ); level.plyr_rpl_groundref linkto( level.rpl_plyr_anim_origin, "J_prop_1" ); level.player.dof_ref_ent = level.plyr_rpl_groundref; var_7 = level.plyr_rpl_groundref; if ( rappel_use_plyr_legs( var_3 ) ) { var_8 = anglestoforward( var_6 ); var_9 = var_8[0] * 30; var_10 = var_8[1] * 30; var_11 = 8; if ( var_3.rappel_type == "combat" ) { var_9 = var_8[0] * 10; var_10 = var_8[1] * 10; var_11 = 12; } level.player_torso_offset_origin = level.plyr_rpl_groundref common_scripts\utility::spawn_tag_origin(); level.player_torso_offset_origin.origin = level.player_torso_offset_origin.origin + ( var_9, var_10, var_11 ); level.player_torso_offset_origin linkto( level.plyr_rpl_groundref ); var_7 = level.player_torso_offset_origin; } wait 0.1; if ( var_3.rappel_type == "inverted" ) level.player playerlinkto( var_7, "tag_origin", 1, var_3.right_arc, var_3.left_arc, var_3.top_arc, var_3.bottom_arc, 0 ); else level.player playerlinktodelta( var_7, "tag_origin", 1, var_3.right_arc, var_3.left_arc, var_3.top_arc, var_3.bottom_arc, 1 ); level.player playerlinkeduselinkedvelocity( 1 ); cnd_rpl_rope_setup( var_0, var_3 ); if ( rappel_use_plyr_legs( var_3 ) ) { level.rappel_player_legs = maps\_utility::spawn_anim_model( "player_rappel_legs" ); level.rappel_player_legs.origin = level.rpl_plyr_anim_origin.origin; level.rappel_player_legs.angles = level.rpl_plyr_anim_origin.angles; level.rpl_plyr_legs_link_ent = level.rpl_plyr_anim_origin; if ( var_3.rappel_type == "stealth" ) { var_8 = anglestoforward( var_6 ); var_9 = var_8[0] * 20; var_10 = var_8[1] * 20; var_11 = -5; level.rpl_plyr_legs_link_ent = level.rpl_plyr_anim_origin common_scripts\utility::spawn_tag_origin(); level.rpl_plyr_legs_link_ent.origin = level.rpl_plyr_legs_link_ent.origin + ( var_9, var_10, var_11 ); level.rpl_plyr_legs_link_ent linkto( level.rpl_plyr_anim_origin ); } level.rappel_player_legs dontcastshadows(); level.rappel_player_legs linkto( level.rpl_plyr_legs_link_ent ); } var_4 delete(); maps\cornered_code::delete_if_defined( level.player_force_origin_ent ); } cnd_rpl_rope_setup( var_0, var_1 ) { if ( var_1.rappel_type == "inverted" ) return; if ( var_1.rappel_type == "stealth" ) { var_0.player_rope_unwind_anim = %cnd_rappel_stealth_top_rope_unwind; var_0.player_rope_unwind_length = 990.8; } else if ( var_1.rappel_type == "combat" ) { var_0.player_rope_unwind_anim = %cnd_rappel_combat_top_rope_unwind; var_0.player_rope_unwind_length = 1600.33; } level.cnd_rappel_tele_rope = maps\_utility::spawn_anim_model( "cnd_rappel_tele_rope" ); level.cnd_rappel_tele_rope.origin = level.rpl_physical_rope_anim_origin.origin; level.cnd_rappel_tele_rope.angles = ( 0, 0, 0 ); level.cnd_rappel_tele_rope linkto( level.rpl_physical_rope_anim_origin, "J_prop_1" ); if ( !isdefined( level.cnd_rappel_player_rope ) ) { level.cnd_rappel_player_rope = maps\_utility::spawn_anim_model( "cnd_rappel_player_rope" ); level.cnd_rappel_player_rope.origin = level.cnd_rappel_tele_rope gettagorigin( "J_Tele_50" ); level.cnd_rappel_player_rope.angles = level.cnd_rappel_tele_rope gettagangles( "J_Tele_50" ); } var_2 = ( 0, 0, 0 ); if ( var_1.rappel_type == "stealth" ) level.cnd_rappel_player_rope linkto( level.cnd_rappel_tele_rope, "J_Tele_50", ( 0, 0, 0 ), var_2 ); else thread cnd_delay_rope_link(); level.cnd_rappel_tele_rope setanim( var_0.player_rope_unwind_anim, 1, 0, 0 ); cnd_plyr_rope_set_idle(); var_3 = 1.0 / var_0.player_rope_unwind_length; var_4 = 33 * var_3; level.cnd_rappel_tele_rope setanimtime( var_0.player_rope_unwind_anim, var_4 ); level.cnd_rappel_player_rope dontcastshadows(); level.cnd_rappel_tele_rope dontcastshadows(); if ( var_1.rappel_type == "combat" ) level.rpl_physical_rope_origin.angles = level.rpl_physical_rope_origin.angles + ( -1.2, 0, 0 ); else { } } cnd_delay_rope_link() { common_scripts\utility::waitframe(); level.cnd_rappel_player_rope linkto( level.cnd_rappel_tele_rope, "J_Tele_50" ); } cnd_plyr_rope_set_idle() { level.cnd_rappel_player_rope setanim( %cnd_rappel_idle_rope_player, 1, 0, 1 ); } cnd_plyr_rpl_legs_setup( var_0, var_1 ) { if ( !rappel_use_plyr_legs( var_1 ) ) return; var_0.legs_idle_anim = rpl_get_legs_idle_anim(); var_0.legs_move_parent_node = rpl_legs_get_parent_node_move(); var_0.move = []; var_0.move["down"] = spawnstruct(); var_0.move["up"] = spawnstruct(); var_0.move["right"] = spawnstruct(); var_0.move["left"] = spawnstruct(); var_0.move["right_down"] = spawnstruct(); var_0.move["right_up"] = spawnstruct(); var_0.move["left_down"] = spawnstruct(); var_0.move["left_up"] = spawnstruct(); var_0.move["down"].vector = ( 0, 1, 0 ); var_0.move["up"].vector = ( 0, -1, 0 ); var_0.move["right"].vector = ( 1, 0, 0 ); var_0.move["left"].vector = ( -1, 0, 0 ); var_0.move["right_down"].vector = vectornormalize( ( 1, 1, 0 ) ); var_0.move["right_up"].vector = vectornormalize( ( 1, -1, 0 ) ); var_0.move["left_down"].vector = vectornormalize( ( -1, 1, 0 ) ); var_0.move["left_up"].vector = vectornormalize( ( -1, -1, 0 ) ); var_0.move["down"].playing = 0; var_0.move["up"].playing = 0; var_0.move["right"].playing = 0; var_0.move["left"].playing = 0; var_0.move["right_down"].playing = 0; var_0.move["right_up"].playing = 0; var_0.move["left_down"].playing = 0; var_0.move["left_up"].playing = 0; var_0.cosine90 = cos( 90 ); var_0.cosine45 = cos( 45 ); var_0.cosine22_5 = cos( 22.5 ); var_0.cosine15 = cos( 15 ); var_0.cosine11_25 = cos( 11.25 ); var_0.move_state_idle = 0; var_0.move_state_start = 1; var_0.move_state_loop = 2; var_0.move_state_loop_run = 3; var_0.move_state_stop = 4; var_0.move_state_idle_shift = 5; var_0.move_state_shift_back = 6; var_0.move_state_jump = 7; var_0.animtype_parent = 0; var_0.animtype_idle = 1; var_0.animtype_start = 2; var_0.animtype_loop = 3; var_0.animtype_loop_run = 4; var_0.animtype_stop = 5; var_0.animtype_run_stop = 6; var_0.animtype_idle_shift = 7; var_0.animtype_shift_back = 8; var_0.move_state = var_0.move_state_idle; var_0.last_move_state = var_0.move_state_idle; var_0.state_anim_percent_complete = 0.9; var_0.leg_anim_blend_time = 0.2; var_0.leg_anim_blend_time_fast = 0.05; var_0.leg_clear_anim_blend_time = 0.2; var_0.leg_clear_anim_blend_time_fast = 0.05; var_0.leg_idle_anim_blend_time = 0.4; var_0.leg_idle_trans_anim_blend_time = 0.2; var_0.leg_jump_anim_blend_time = 0.5; setdvarifuninitialized( "rappel_legs_scale_horizontal", 1.5 ); setdvarifuninitialized( "rappel_legs_scale_run", 1.0 ); setdvarifuninitialized( "rappel_legs_scale_up", 1.2 ); setdvarifuninitialized( "rappel_legs_scale_down", 1.2 ); var_0.legs_flag_name = "rappel_legs"; var_2 = "left_down"; var_3 = "right_down"; thread cnd_rpl_legs_notetracks( var_0, var_2, var_3 ); } cnd_plyr_rpl_setup_globals( var_0, var_1, var_2 ) { var_0.move_vel = 0; var_0.time_slice = 0.05; var_0.rope_start_rot = var_0.rope_origin.angles[2]; var_0.vertical_change_this_update = 0; var_0.farthest_distance_down = distance( level.rpl_plyr_anim_origin.origin, var_0.rope_origin.origin ); var_0.clearing_bob_anim = 0; var_0.current_foot = "left"; var_0.jumpcomplete = 1; var_0.glass_broken_under_player = 0; var_0.current_dist_to_top = 0; var_0.at_edge = 0; var_0.maxropejumpangle = 5.8362; var_0.tangentjump = tan( var_0.maxropejumpangle ); var_0.walk_up_amount = 35; var_0.wind_random = 0; var_0.wind_random_delay_min = 4000; var_0.wind_random_delay_max = 10000; var_0.wind_random_next_time = 0; var_0.wind_strength = 0; var_0.wind_state = "calm"; var_0.wind_last_state = "calm"; var_0.wind_pushing_player = 0; var_0.player_anim_origin = cnd_get_plyr_anim_origin(); var_0.player_anim_origin setanim( %rappel_player_look_center, 1.0, 0, 1 ); var_0.player_anim_origin thread watch_footstep_notetrack(); if ( var_2 == "rope_ref_stealth" ) var_3 = getent( "player_rappel_ground_ref_stealth", "targetname" ); else if ( var_2 == "rope_ref_combat" ) var_3 = getent( "player_rappel_ground_ref_combat", "targetname" ); else var_3 = getent( "player_rappel_ground_ref_stealth", "targetname" ); var_0.forward_direction_worldspace = vectornormalize( anglestoforward( var_3.angles * ( 0, 1, 0 ) ) ); var_0.right_direction_worldspace = vectornormalize( anglestoright( var_3.angles * ( 0, 1, 0 ) ) ); var_0.up_direction_worldspace = vectornormalize( anglestoup( var_3.angles * ( 0, 1, 0 ) ) ); } cnd_plyr_rpl_setup_dvars( var_0, var_1 ) { setdvarifuninitialized( "rappel_use_stop_momentum", "0" ); setdvarifuninitialized( "rappel_stop_momentum_initial", "0.6" ); setdvarifuninitialized( "rappel_stop_momentum_time", "0.7" ); setdvarifuninitialized( "rappel_use_relative_controls", "1" ); setsaveddvar( "player_moveThreshhold", 1.0 ); setsaveddvar( "bg_weaponBobAmplitudeStanding", "0.072 0.033" ); setsaveddvar( "player_lateralPlane", var_1.lateral_plane ); setsaveddvar( "bullet_penetrationHitsClients", 1 ); setsaveddvar( "bullet_penetrationActorHitsActors", 1 ); var_0.bg_weaponbobamplitudebase = getdvarfloat( "bg_weaponBobAmplitudeBase" ); var_0.g_speed = getdvarfloat( "g_speed" ); var_0.bg_viewbobmax = getdvarfloat( "bg_viewBobMax" ); } cnd_plyr_rpl_death( var_0, var_1 ) { level endon( "stop_manage_player_rappel_movement" ); level.player waittill( "death" ); if ( rappel_use_plyr_legs( var_1 ) ) level.rappel_player_legs hide(); } cnd_plyr_rpl_setup_player( var_0, var_1 ) { level.player allowcrouch( 0 ); level.player allowprone( 0 ); if ( isdefined( var_1.allow_sprint ) && var_1.allow_sprint ) level.player allowsprint( 1 ); else level.player allowsprint( 0 ); level.player allowmelee( 0 ); level.player enablemousesteer( 1 ); thread cnd_plyr_rpl_death( var_0, var_1 ); } cnd_rpl_calc_move( var_0, var_1 ) { var_2 = 0.78; var_3 = 0.65; var_0.jumping = common_scripts\utility::flag( "player_jumping" ); var_4 = level.player getnormalizedmovement(); var_0.player_stick_magnitude = max( abs( var_4[0] ), abs( var_4[1] ) ); var_5 = level.player getplayerangles(); var_0.player_angles_worldspace = combineangles( level.plyr_rpl_groundref.angles, var_5 ); var_6 = getdvarint( "rappel_use_relative_controls", 0 ); if ( !var_6 ) { if ( isdefined( var_0.last_player_angles_worldspace ) && var_0.player_stick_magnitude > 0 ) var_0.player_angles_worldspace = var_0.last_player_angles_worldspace; } var_7 = anglestoforward( var_0.player_angles_worldspace ); var_8 = anglestoright( var_0.player_angles_worldspace ); var_9 = anglestoup( var_0.player_angles_worldspace ); level.player.linked_world_space_forward = var_7; var_0.dist_player_to_top = rpl_calc_dist_player_to_top( var_0, 1 ); var_0.player_at_lower_limit = isdefined( level.rappel_lower_limit ) && var_0.dist_player_to_top > level.rappel_lower_limit; var_0.player_at_upper_limit = isdefined( level.rappel_upper_limit ) && var_0.dist_player_to_top < level.rappel_upper_limit; var_10 = distance( level.rpl_plyr_anim_origin.origin, var_0.rope_origin.origin ); var_11 = var_0.farthest_distance_down - var_0.walk_up_amount; var_0.vert_dist_to_vert_cap = var_10 - var_11; var_0.player_at_vertical_upper_cap = abs( var_0.vert_dist_to_vert_cap ) < 2; var_12 = var_0.player_at_lower_limit || var_0.player_at_upper_limit || var_0.player_at_vertical_upper_cap; var_13 = var_7 * var_4[0]; var_14 = var_8 * var_4[1]; var_15 = vectornormalize( var_13 + var_14 ); var_16 = vectordot( var_15, var_0.right_direction_worldspace ); var_17 = common_scripts\utility::sign( var_16 ); var_0.right_move_strength = var_0.player_stick_magnitude * var_17 * sqrt( abs( var_16 ) ); var_18 = abs( vectordot( var_7, var_0.forward_direction_worldspace ) ); var_19 = var_9 * var_4[0] * var_18; var_20 = var_7 * var_4[0] * ( 1 - var_18 ); var_21 = vectornormalize( var_19 + var_20 + var_14 ); var_22 = vectordot( var_21, -1 * var_0.up_direction_worldspace ); var_22 = var_22 * ( 2 - var_18 ); var_22 = clamp( var_22, -1.0, 1.0 ); var_0.down_move_strength = clamp( var_22, -1.0, 1.0 ) * var_0.player_stick_magnitude; var_23 = abs( var_4[0] ) > 0.9 && abs( var_16 ) > 0.7; if ( !var_12 && abs( var_0.down_move_strength ) > 0 && !var_23 ) { var_24 = var_3 + var_18 * ( var_2 - var_3 ); var_25 = abs( var_22 ) > var_24; if ( var_1.rappel_type == "inverted" ) var_25 = var_25 & abs( var_0.right_move_strength ) < 0.4; if ( var_25 ) var_0.right_move_strength = 0; else if ( abs( var_22 ) > var_24 - 0.1 ) var_0.right_move_strength = var_0.right_move_strength * 0.5; else if ( abs( var_22 ) > var_24 - 0.2 ) var_0.right_move_strength = var_0.right_move_strength * 0.75; } cnd_rpl_plyr_too_close_to_allies( var_0 ); } cnd_rpl_plyr_too_close_to_allies( var_0 ) { var_1 = 0; var_2 = 3600; var_3 = 16900; var_4 = 25600; var_5 = 6400; var_6 = 10000; var_7 = var_2; var_8 = var_0.lateral_change_this_update; if ( !isdefined( var_8 ) ) var_8 = 0; foreach ( var_10 in level.allies ) { if ( var_10.animname == "rorke" ) var_10.player_moving_toward_me = var_0.right_move_strength != 0 && common_scripts\utility::sign( var_0.right_move_strength ) > 0 || var_8 != 0 && common_scripts\utility::sign( var_8 ) > 0; else var_10.player_moving_toward_me = var_0.right_move_strength != 0 && common_scripts\utility::sign( var_0.right_move_strength ) < 0 || var_8 != 0 && common_scripts\utility::sign( var_8 ) < 0; if ( !isdefined( var_10.move_type ) ) continue; var_11 = var_10 maps\cornered_code_rappel_allies::ally_rappel_distance2dsquared_to_player(); if ( isdefined( var_0.jumping ) && var_0.jumping ) var_7 = var_6; else if ( var_10.move_type == "idle" || issubstr( var_10.move_type, "move_away" ) ) var_7 = var_2; else if ( issubstr( var_10.move_type, "move_back" ) ) var_7 = var_3; else if ( var_10.move_type == "turn_away" ) var_7 = var_4; else var_7 = var_5; if ( var_10.player_moving_toward_me && var_11 <= var_7 ) { var_1 = 1; break; } } if ( var_1 ) { var_0.right_move_strength = 0; var_0.down_move_strength = 0; var_0.player_stick_magnitude = 0; var_0.too_close_to_ally = 1; } else var_0.too_close_to_ally = 0; } cnd_rpl_do_vertical_move( var_0, var_1 ) { if ( !common_scripts\utility::flag( "player_allow_rappel_down" ) ) common_scripts\utility::flag_clear( "player_moving_down" ); else { var_2 = var_0.vertical_change_this_update; var_0.vertical_change_this_update = 0; var_0.glass_broken_under_player = 0; var_3 = anglestoup( level.rpl_rope_anim_origin gettagangles( "J_prop_1" ) ); if ( var_0.jumping && isdefined( level.rappel_jump_land_struct ) && isdefined( level.player.forcing_rappel_jump_to_struct ) ) { var_4 = cnd_get_rope_anim_origin(); var_5 = 0.7; var_6 = getanimlength( level.rappel_jump_anim ) * var_5; var_7 = var_4 getanimtime( level.rappel_jump_anim ); var_8 = ( 1 - var_7 ) * var_6; var_9 = int( var_8 / var_0.time_slice ); var_10 = level.rappel_jump_land_struct.origin[2] - level.player.origin[2]; if ( var_9 ) var_0.vertical_change_this_update = var_10 / var_9; } else if ( var_0.down_move_strength > 0 || var_0.down_move_strength < 0 && !var_0.jumping ) { if ( var_0.down_move_strength > 0 ) { var_0.vertical_change_this_update = -1 * var_0.down_move_strength * rpl_get_max_downward_speed(); if ( var_0.jumping ) var_0.vertical_change_this_update = var_0.vertical_change_this_update * 1.5; if ( var_0.glass_broken_under_player ) var_0.vertical_change_this_update = var_0.vertical_change_this_update * 4.2; } else if ( isdefined( var_1.allow_walk_up ) && var_1.allow_walk_up ) { var_0.vertical_change_this_update = -1 * var_0.down_move_strength * rpl_get_max_upward_speed(); if ( var_0.player_at_vertical_upper_cap ) { var_11 = 1.0; var_0.vertical_change_this_update = 0.0; } else { var_0.vertical_change_this_update = min( var_0.vertical_change_this_update, var_0.vert_dist_to_vert_cap ); var_11 = 1 - min( var_0.vert_dist_to_vert_cap / var_0.walk_up_amount, 1.0 ); var_0.vertical_change_this_update = var_0.vertical_change_this_update * ( 1 - var_11 * var_11 ); } } } if ( var_0.jumping && !isdefined( level.player.forcing_rappel_jump_to_struct ) && var_2 < 0 ) var_0.vertical_change_this_update = min( var_0.vertical_change_this_update, var_2 * 0.9 ); if ( isdefined( level.rappel_lower_limit ) && var_0.vertical_change_this_update < 0 ) { if ( var_0.player_at_lower_limit ) var_0.vertical_change_this_update = 0; else var_0.vertical_change_this_update = max( var_0.vertical_change_this_update, var_0.dist_player_to_top - level.rappel_lower_limit ); } else if ( isdefined( level.rappel_upper_limit ) && var_0.vertical_change_this_update > 0 ) { if ( var_0.player_at_upper_limit ) var_0.vertical_change_this_update = 0; else var_0.vertical_change_this_update = min( var_0.vertical_change_this_update, var_0.dist_player_to_top - level.rappel_upper_limit ); } if ( abs( var_0.vertical_change_this_update ) < 0.05 ) var_0.vertical_change_this_update = 0; if ( abs( var_0.vertical_change_this_update ) > 0 ) { level.rpl_plyr_anim_origin unlink(); level.rpl_plyr_anim_origin.origin = level.rpl_plyr_anim_origin.origin + var_3 * var_0.vertical_change_this_update; level.rpl_plyr_anim_origin linkto( level.rpl_jump_anim_origin, "J_prop_1" ); } if ( var_0.vertical_change_this_update < 0 || var_0.jumping ) { common_scripts\utility::flag_set( "player_moving_down" ); return; } common_scripts\utility::flag_clear( "player_moving_down" ); } } cnd_rpl_do_lateral_move( var_0, var_1 ) { var_2 = 0.7; var_3 = 0.85; var_4 = 5; if ( var_1.rappel_type == "combat" ) var_4 = 2; var_5 = var_0.rope_origin.angles[2] - var_0.rope_start_rot; if ( var_0.jumping && isdefined( level.rappel_jump_land_struct ) && isdefined( level.player.forcing_rappel_jump_to_struct ) ) { var_6 = cnd_get_rope_anim_origin(); var_7 = 0.7; var_8 = getanimlength( level.rappel_jump_anim ) * var_7; var_9 = var_6 getanimtime( level.rappel_jump_anim ); var_10 = ( 1 - var_9 ) * var_8; level.anim_length_frames_left = int( var_10 / var_0.time_slice ); var_11 = var_0.rope_origin.angles[2]; var_12 = maps\cornered_code::rappel_get_plane_normal_left( var_1.rappel_type ); var_13 = maps\cornered_code::rappel_get_plane_d( var_12, var_0.rope_origin.origin ); var_14 = distance( level.rappel_jump_land_struct.origin, var_0.rope_origin.origin ); var_15 = vectordot( var_12, level.rappel_jump_land_struct.origin ) + var_13; level.new_rope_roll = -1 * asin( var_15 / var_14 ); level.roll_diff = level.new_rope_roll - var_11; if ( level.anim_length_frames_left > 0 ) var_0.lateral_change_this_update = level.roll_diff / level.anim_length_frames_left; } else { if ( var_0.jumping ) { var_16 = 0; var_17 = 1.0; } else { var_16 = clamp( var_0.right_move_strength, -1.0, 1.0 ); var_17 = maps\_utility::linear_interpolate( sqrt( abs( var_16 ) ), var_2, var_3 ); } var_18 = 1.95; var_19 = 1.95; var_20 = rpl_calc_max_yaw_right( var_0 ); var_21 = rpl_calc_max_yaw_left( var_0 ); var_0.max_rotation_speed = rpl_calc_max_rot_speed( var_0, var_1 ); if ( var_1.rappel_type == "combat" ) { var_18 = 4; var_19 = 4; } var_0.on_right_side = var_5 >= 0; if ( level.player issprinting() ) var_18 = var_18 * 1.5; var_22 = abs( var_5 ) - var_4; if ( var_22 >= 0 ) { var_23 = -1 * common_scripts\utility::sign( var_5 ); if ( var_0.on_right_side ) var_0.player_percent_toward_max_yaw = var_22 / ( var_20 - var_4 ); else var_0.player_percent_toward_max_yaw = var_22 / ( abs( var_21 ) - var_4 ); var_24 = var_23 * var_0.player_percent_toward_max_yaw; if ( !var_0.jumping ) var_24 = var_24 * abs( var_16 ); } else var_24 = 0; var_25 = var_24 * var_19; var_26 = var_16 * var_18; var_0.move_vel = ( var_0.move_vel + var_26 + var_25 ) * var_17; var_0.move_vel = clamp( var_0.move_vel, -1 * var_0.max_rotation_speed, var_0.max_rotation_speed ); var_27 = var_5 > var_0.rope_start_rot + var_20; var_28 = var_5 < var_0.rope_start_rot + var_21; var_29 = var_28 && var_0.player_stick_magnitude > 0 && var_0.right_move_strength <= 0; var_30 = var_27 && var_0.player_stick_magnitude > 0 && var_0.right_move_strength >= 0; if ( var_29 ) var_31 = var_0.rope_start_rot + var_21; else if ( var_30 ) var_31 = var_0.rope_start_rot + var_20; else { var_31 = var_5 + var_0.move_vel * var_0.time_slice; var_31 = min( var_31, var_0.rope_start_rot + var_20 ); var_31 = max( var_31, var_0.rope_start_rot + var_21 ); } var_0.lateral_change_this_update = var_31 - var_5; var_0.lateral_dist_change = sin( abs( var_0.lateral_change_this_update ) ) * var_0.dist_player_to_top; if ( !var_29 && !var_30 ) { var_32 = abs( var_0.rope_start_rot + var_20 - var_5 ); var_33 = abs( var_0.rope_start_rot + var_21 - var_5 ); if ( var_0.right_move_strength == 0 && var_32 <= var_33 ) var_34 = var_32; else if ( var_0.right_move_strength == 0 ) var_34 = var_33; else if ( common_scripts\utility::sign( var_0.right_move_strength ) == 1 ) var_34 = var_32; else var_34 = var_33; var_0.approx_dist_from_edge = sin( abs( var_34 ) ) * var_0.dist_player_to_top; var_35 = abs( var_0.lateral_dist_change - var_0.approx_dist_from_edge ); if ( var_0.at_edge ) var_0.at_edge = common_scripts\utility::sign( var_0.lateral_change_this_update ) == var_0.at_edge_sign; var_36 = var_0.at_edge || var_35 < 5; if ( var_36 ) { if ( common_scripts\utility::sign( var_0.lateral_change_this_update ) == common_scripts\utility::sign( var_0.right_move_strength ) || var_0.right_move_strength == 0 ) { var_0.lateral_change_this_update = 0; var_0.move_vel = 0; var_0.at_edge = 1; if ( var_0.lateral_change_this_update == 0 ) var_0.at_edge_sign = 0; else var_0.at_edge_sign = common_scripts\utility::sign( var_0.lateral_change_this_update ); } } var_37 = 0.2; if ( var_1.rappel_type == "inverted" ) var_37 = 0.5; if ( var_0.lateral_dist_change < var_37 ) { var_0.lateral_change_this_update = 0; var_0.move_vel = 0; } } else { var_38 = 2; if ( var_0.dist_player_to_top == 0 ) var_39 = var_38; else var_39 = asin( var_38 / var_0.dist_player_to_top ); var_0.lateral_change_this_update = clamp( var_0.lateral_change_this_update, -1 * var_39, var_39 ); } if ( isdefined( var_0.stop_momentum ) && abs( var_0.stop_momentum ) > 0.01 ) { var_0.lateral_change_this_update = var_0.stop_momentum; var_0.stop_momentum = var_0.stop_momentum - var_0.stop_momentum_change; } var_40 = getdvarint( "rappel_use_relative_controls", 0 ); var_41 = abs( var_0.lateral_change_this_update ) > 0.01 || abs( var_0.vertical_change_this_update ) > 0; if ( !var_40 && var_41 ) var_0.last_player_angles_worldspace = var_0.player_angles_worldspace; else var_0.last_player_angles_worldspace = undefined; } cnd_rpl_handle_jumping_toward_allies( var_0 ); if ( abs( var_0.lateral_change_this_update ) > 0 ) var_0.rope_origin rotateroll( var_0.lateral_change_this_update, var_0.time_slice, 0, 0 ); } cnd_rpl_handle_jumping_toward_allies( var_0 ) { if ( !var_0.jumping ) return; foreach ( var_2 in level.allies ) { if ( var_2.animname == "rorke" ) { var_2.player_moving_toward_me = var_0.lateral_change_this_update != 0 && common_scripts\utility::sign( var_0.lateral_change_this_update ) > 0; continue; } var_2.player_moving_toward_me = var_0.lateral_change_this_update != 0 && common_scripts\utility::sign( var_0.lateral_change_this_update ) < 0; } } cnd_rpl_do_stop_sway( var_0, var_1 ) { var_2 = var_0.player_anim_origin getanimweight( %rappel_player_stop_l ) > 0; var_3 = var_0.player_anim_origin getanimweight( %rappel_player_stop_r ) > 0; var_4 = var_2 || var_3; var_5 = abs( var_0.down_move_strength ) > 0.2 || abs( var_0.right_move_strength ) > 0.2; if ( var_4 && var_5 && !isdefined( var_0.clearing_sways ) ) { var_6 = %rappel_player_stop_l; if ( var_3 ) var_6 = %rappel_player_stop_r; var_0.player_anim_origin clearanim( var_6, 0.4 ); var_0.clearing_sways = 1; } if ( isdefined( var_0.clearing_sways ) && var_0.clearing_sways && !var_4 ) var_0.clearing_sways = undefined; if ( !isdefined( var_0.begin_sway ) ) return; if ( _rpl_legs_is_horizontal( var_0.stop_anim_direction ) ) { var_6 = %rappel_player_stop_l; if ( var_0.stop_anim_direction == "right" ) var_6 = %rappel_player_stop_r; var_7 = 0.2; var_0.player_anim_origin setanimrestart( var_6, 1.0, var_7, 1.0 ); if ( var_0.player_anim_origin getanimweight( %rappel_player_wind_push ) > 0 ) var_0.player_anim_origin clearanim( %rappel_player_wind_push, var_7 ); var_0.clearing_sways = undefined; } var_0.begin_sway = undefined; } cnd_rpl_do_wind( var_0, var_1 ) { if ( var_1.rappel_type == "combat" ) return; if ( !var_0.wind_random ) { var_0.wind_state = "stop"; return; } var_0.wind_last_state = var_0.wind_state; if ( var_0.wind_random_next_time > gettime() ) return; var_2 = 2; var_3 = 2; var_4 = 1 / ( var_2 / 0.05 ); var_5 = 1 / ( var_3 / 0.05 ); var_6 = 1.8; var_7 = %rappel_player_wind_push; if ( var_1.rappel_type == "inverted" ) var_7 = %rappel_player_inv_wind_push; if ( var_0.wind_state == "strong" ) var_0.wind_state = "down"; else if ( var_0.wind_state == "stop" || var_0.wind_state == "calm" ) { var_0.wind_state = "up"; common_scripts\utility::exploder( "6111" ); } if ( var_0.wind_state == "up" ) var_0.wind_strength = var_0.wind_strength + var_4; else if ( var_0.wind_state == "down" ) var_0.wind_strength = var_0.wind_strength - var_5; if ( var_0.wind_strength >= 1 && var_0.wind_state == "up" ) { var_0.wind_random_next_time = gettime() + 200.0; var_0.wind_state = "steady"; var_0.wind_strength = 1; } else if ( !var_0.wind_pushing_player && var_0.wind_strength >= 0.7 ) { var_8 = 0.2; var_0.wind_pushing_player = 1; var_0.player_anim_origin setanimrestart( var_7, 1.0, var_8, 1.0 ); var_0.player_anim_origin playrumbleonentity( "light_in_out_2s" ); if ( var_0.player_anim_origin getanimweight( %rappel_player_stop_l ) > 0 ) var_0.player_anim_origin clearanim( %rappel_player_stop_l, var_8 ); if ( var_0.player_anim_origin getanimweight( %rappel_player_stop_r ) > 0 ) var_0.player_anim_origin clearanim( %rappel_player_stop_r, var_8 ); } else if ( var_0.wind_pushing_player && var_0.wind_strength >= 1 && var_0.wind_state == "steady" ) { var_0.wind_random_next_time = gettime() + var_6 * 1000; var_0.wind_strength = 1; var_0.wind_state = "strong"; } else if ( var_0.wind_strength <= 0 && var_0.wind_state == "down" ) { var_0.wind_random_next_time = gettime() + randomfloatrange( var_0.wind_random_delay_min, var_0.wind_random_delay_max ); var_0.wind_strength = 0; var_0.wind_state = "calm"; var_0.wind_pushing_player = 0; } thread maps\cornered_audio::aud_do_wind( var_0.wind_state ); } cnd_rpl_do_rope( var_0, var_1 ) { if ( var_1.rappel_type == "inverted" ) return; if ( !isdefined( level.rpl_physical_rope_origin ) ) return; if ( abs( var_0.vertical_change_this_update ) > 0 ) { var_2 = 1.0 / var_0.player_rope_unwind_length; var_3 = level.cnd_rappel_tele_rope getanimtime( var_0.player_rope_unwind_anim ); var_4 = var_3 + -1 * var_0.vertical_change_this_update * var_2; var_4 = clamp( var_4, 0, 0.9999 ); level.cnd_rappel_tele_rope setanimtime( var_0.player_rope_unwind_anim, var_4 ); } if ( abs( var_0.lateral_change_this_update ) > 0 ) level.rpl_physical_rope_origin rotateroll( var_0.lateral_change_this_update, var_0.time_slice, 0, 0 ); if ( var_0.jumping ) return; var_5 = var_0.move_state == var_0.move_state_loop_run && var_0.last_move_state != var_0.move_state_loop_run; var_6 = var_0.move_state != var_0.move_state_loop_run && var_0.last_move_state == var_0.move_state_loop_run; var_7 = var_0.wind_state == "up" || var_0.wind_state == "down" || var_0.wind_state == "steady" || var_0.wind_state == "strong"; var_8 = var_0.wind_state == "up" && var_0.wind_last_state != "up"; var_9 = var_0.wind_state == "calm"; var_10 = var_0.wind_state == "stop" && level.cnd_rappel_player_rope getanimweight( %cnd_rappel_wind_shake_rope_player ) > 0; var_11 = 0.06; var_12 = level.cnd_rappel_player_rope getanimtime( %cnd_rappel_lag_r_rope_player ); var_13 = level.cnd_rappel_player_rope getanimtime( %cnd_rappel_lag_l_rope_player ); var_14 = level.cnd_rappel_player_rope getanimtime( %cnd_rappel_shake_rope_player ); var_15 = level.cnd_rappel_player_rope getanimtime( %cnd_rappel_jump_shake_rope_player ); var_16 = var_12 > 0 && var_12 < 1; var_17 = var_13 > 0 && var_13 < 1; var_18 = var_14 > 0 && var_14 < 1; var_19 = var_15 > 0 && var_15 < 1; var_20 = var_16 || var_17 || var_18 || var_19; if ( var_5 ) { if ( var_0.stop_anim_direction == "left" ) level.cnd_rappel_player_rope setanimknobrestart( %cnd_rappel_lag_l_rope_player, 1, 0.2, 1 ); else level.cnd_rappel_player_rope setanimknobrestart( %cnd_rappel_lag_r_rope_player, 1, 0.2, 1 ); } else if ( var_6 ) level.cnd_rappel_player_rope setanimknobrestart( %cnd_rappel_shake_rope_player, 1, 0.2, 1 ); else { if ( var_20 ) return; if ( var_8 ) level.cnd_rappel_player_rope setanimknob( %cnd_rappel_wind_shake_rope_player, 1.0, 0.2, var_0.wind_strength ); else if ( var_7 ) level.cnd_rappel_player_rope setanimknob( %cnd_rappel_wind_shake_rope_player, 1.0, 0.2, var_0.wind_strength ); else if ( var_10 ) level.cnd_rappel_player_rope setanimknob( %cnd_rappel_idle_rope_player_add, 1.0, 0.2, 1.0 ); else if ( var_9 ) level.cnd_rappel_player_rope setanimknob( %cnd_rappel_wind_shake_rope_player, 1.0, 0.2, var_11 ); else { } } } cnd_rpl_do_weapon_bob( var_0, var_1 ) { var_0.down_leg_move_percent = abs( var_0.vertical_change_this_update ) / rpl_get_max_downward_speed(); var_0.up_leg_move_percent = abs( var_0.vertical_change_this_update ) / rpl_get_max_upward_speed(); if ( var_0.max_rotation_speed > 0 ) var_0.horz_leg_move_percent = abs( var_0.lateral_change_this_update ) / ( var_0.max_rotation_speed * var_0.time_slice ); else var_0.horz_leg_move_percent = 0; var_2 = 22.4; if ( var_0.jumping ) { if ( var_0.bg_weaponbobamplitudebase != 0 ) { setsaveddvar( "bg_weaponBobAmplitudeBase", 0 ); setsaveddvar( "g_speed", 0 ); var_0.bg_weaponbobamplitudebase = 0; } } else if ( abs( var_0.vertical_change_this_update ) > 0 || abs( var_0.lateral_change_this_update ) > 0 ) { var_3 = 0.05; var_4 = 5; if ( common_scripts\utility::sign( var_0.vertical_change_this_update ) == -1 ) { var_5 = var_2 / rappel_vertical_speed_to_world_units( rpl_get_max_downward_speed() ); var_6 = rappel_vertical_speed_to_world_units( rpl_get_max_downward_speed() ) + 40; } else { var_5 = var_2 / rappel_vertical_speed_to_world_units( rpl_get_max_upward_speed() ); var_6 = rappel_vertical_speed_to_world_units( rpl_get_max_upward_speed() ) + 40; } var_7 = var_2 / rappel_lateral_speed_to_world_units( rpl_get_max_lateral_speed() ); var_8 = rappel_lateral_speed_to_world_units( rpl_get_max_lateral_speed() ); var_9 = 1; var_10 = 0; if ( var_1.rappel_type == "inverted" ) var_10 = var_0.down_leg_move_percent; else var_9 = var_0.horz_leg_move_percent; if ( abs( var_0.vertical_change_this_update ) == 0 ) var_9 = 1.0; else if ( abs( var_0.lateral_change_this_update ) == 0 ) var_9 = 0.0; if ( var_1.rappel_type == "inverted" ) var_9 = 1 - var_10; else var_10 = 1 - var_9; var_11 = var_5 * var_10 + var_7 * var_9; var_12 = var_6 * var_10 + var_8 * var_9; var_13 = var_0.bg_weaponbobamplitudebase; var_14 = var_0.g_speed; var_15 = var_11 - var_13; if ( abs( var_15 ) > var_3 ) var_11 = var_13 + common_scripts\utility::sign( var_15 ) * var_3; var_16 = var_12 - var_14; if ( abs( var_16 ) > var_4 ) var_12 = var_14 + common_scripts\utility::sign( var_16 ) * var_4; if ( var_0.g_speed != var_12 ) { setsaveddvar( "g_speed", var_12 ); var_0.g_speed = var_12; } if ( var_0.bg_weaponbobamplitudebase != var_11 ) { setsaveddvar( "bg_weaponBobAmplitudeBase", var_11 ); var_0.bg_weaponbobamplitudebase = var_11; } } } cnd_rpl_do_move_bob( var_0, var_1 ) { var_2 = %rappel_movement_player_bob; var_3 = %rappel_movement_player_bob_descend; var_4 = 4.0; var_5 = abs( var_0.lateral_change_this_update ) > 0.1 || abs( var_0.vertical_change_this_update ) > 0.1; var_6 = abs( var_0.lateral_change_this_update ) > 0.1 && abs( var_0.vertical_change_this_update ) < 0.1; var_7 = abs( var_0.lateral_change_this_update ) < 0.1 && abs( var_0.vertical_change_this_update ) > 0.1; if ( var_0.jumpcomplete && var_0.bg_viewbobmax == 0 ) { setsaveddvar( "bg_viewBobMax", 8 ); var_0.bg_viewbobmax = 8; } else if ( !var_0.jumpcomplete && var_0.bg_viewbobmax == 8 ) { setsaveddvar( "bg_viewBobMax", 0 ); var_0.bg_viewbobmax = 0; } if ( var_5 && var_0.jumpcomplete && !var_0.glass_broken_under_player ) { var_0.clearing_bob_anim = 0; var_8 = var_2; var_9 = var_3; if ( var_7 ) { var_8 = var_3; var_9 = var_2; } var_10 = 0.7; if ( level.player getstance() == "crouch" ) var_10 = 0.5; if ( var_0.max_rotation_speed > 0 ) var_11 = abs( var_0.lateral_change_this_update ) / ( var_0.max_rotation_speed * var_0.time_slice ); else var_11 = 0; var_12 = abs( var_0.vertical_change_this_update ) / rpl_get_max_downward_speed() * 0.45; var_13 = max( var_11, var_12 ); var_14 = max( 0.01, var_10 * var_13 ); if ( rpl_get_max_downward_speed() > 10 ) var_14 = 1.0; var_15 = var_4 * var_13; if ( var_15 > 0 ) var_0.player_anim_origin setflaggedanim( "bobanim", var_8, var_14, 0.15, var_15 ); else var_0.player_anim_origin clearanim( var_8, 0.2 ); var_0.player_anim_origin clearanim( var_9, 0.2 ); if ( var_0.player_anim_origin getanimtime( var_8 ) == 1 ) { var_0.player_anim_origin setanimtime( var_8, 0 ); return; } } else if ( !var_0.clearing_bob_anim ) { var_0.clearing_bob_anim = 1; var_0.player_anim_origin clearanim( var_2, 1 ); var_0.player_anim_origin clearanim( var_3, 1 ); } } cnd_rpl_legs_notetracks( var_0, var_1, var_2 ) { for (;;) { level.rappel_player_legs waittill( var_0.legs_flag_name, var_3 ); if ( !isdefined( var_3 ) ) continue; if ( var_3 == var_1 ) var_0.current_foot = "left"; else if ( var_3 == var_2 ) var_0.current_foot = "right"; if ( var_3 == "ps_step_run_plr_rappel" ) thread maps\cornered_audio::aud_rappel( "foot" ); } } cnd_rpl_do_legs( var_0, var_1 ) { if ( !rappel_use_plyr_legs( var_1 ) || !isdefined( level.rappel_player_legs ) ) return; rpl_legs_set_anim_move_strength( var_0 ); var_0.cur_move_vect_norm = vectornormalize( ( var_0.anim_right_move_strength, var_0.anim_down_move_strength, 0 ) ); var_3 = abs( var_0.anim_down_move_strength ) > 0 || abs( var_0.anim_right_move_strength ) > 0; var_0.last_move_vect_norm = var_0.cur_move_vect_norm; var_0.last_move_state = var_0.move_state; if ( var_0.jumping && var_0.move_state != var_0.move_state_jump ) var_0.move_state = var_0.move_state_jump; if ( var_0.move_state == var_0.move_state_idle ) { if ( var_3 && rpl_legs_is_idle_ready( var_0 ) ) var_0.move_state = var_0.move_state_start; } else if ( var_0.move_state == var_0.move_state_jump ) { if ( !var_0.jumping ) var_0.move_state = var_0.move_state_idle; } else if ( var_0.move_state == var_0.move_state_start ) { var_4 = rpl_legs_is_start_state_complete( var_0, var_3 ); if ( var_4 && var_3 ) var_0.move_state = var_0.move_state_loop; else if ( !var_3 ) var_0.move_state = var_0.move_state_idle; } else if ( var_0.move_state == var_0.move_state_stop ) { var_4 = rpl_legs_is_stop_state_complete( var_0 ); if ( var_4 && !var_3 ) var_0.move_state = var_0.move_state_idle; else if ( var_3 ) var_0.move_state = var_0.move_state_loop; } else if ( var_0.move_state == var_0.move_state_loop_run ) { var_5 = rpl_legs_is_loop_state_changing_direction( var_0, var_3 ); var_6 = rpl_legs_should_use_run_loop( var_0 ); var_7 = rpl_legs_traveling_horizontal( var_0, var_3 ); if ( !var_3 ) var_0.move_state = var_0.move_state_stop; else if ( var_5 ) var_0.move_state = var_0.move_state_idle; else if ( !var_6 || !var_7 ) var_0.move_state = var_0.move_state_loop; } else { var_5 = rpl_legs_is_loop_state_changing_direction( var_0, var_3 ); var_6 = rpl_legs_should_use_run_loop( var_0 ); var_7 = rpl_legs_traveling_horizontal( var_0, var_3 ); if ( !var_3 ) var_0.move_state = var_0.move_state_stop; else if ( var_5 ) var_0.move_state = var_0.move_state_idle; else if ( var_6 && var_7 ) var_0.move_state = var_0.move_state_loop_run; } plyr_rappel_legs_set_origin( var_0 ); if ( isdefined( var_1.allow_sprint ) && var_1.allow_sprint ) level.player allowsprint( !var_0.jumping && rpl_legs_traveling_horizontal( var_0, var_3 ) ); rpl_legs_process_state( var_0 ); } rpl_legs_is_idle_ready( var_0 ) { var_1 = rpl_legs_get_idle_anim( var_0 ); var_2 = level.rappel_player_legs getanimweight( var_1 ); if ( var_2 >= 0.4 ) return 1; return 0; } rpl_legs_set_anim_move_strength( var_0 ) { var_0.anim_right_move_strength = var_0.right_move_strength; if ( abs( var_0.lateral_change_this_update ) < 0.01 ) var_0.anim_right_move_strength = 0; var_0.anim_down_move_strength = var_0.down_move_strength; if ( abs( var_0.vertical_change_this_update ) < 0.01 ) var_0.anim_down_move_strength = 0; } rpl_legs_process_state( var_0 ) { var_1 = var_0.last_move_state != var_0.move_state; if ( var_0.move_state == var_0.move_state_idle ) { rpl_legs_set_idle( var_0 ); if ( var_1 ) { rpl_legs_clear_all_move_anims( var_0 ); var_0.was_running = undefined; } } else if ( var_0.move_state == var_0.move_state_jump ) { if ( var_1 ) { rpl_legs_clear_all_idle_anims( var_0 ); rpl_legs_clear_all_move_anims( var_0 ); } } else if ( var_0.move_state == var_0.move_state_start || var_0.move_state == var_0.move_state_stop ) { var_2 = 0; if ( var_1 ) { var_2 = 1; if ( var_0.move_state == var_0.move_state_stop && getdvarint( "rappel_use_stop_momentum" ) == 1 ) { var_0.stop_momentum = getdvarfloat( "rappel_stop_momentum_initial" ) * common_scripts\utility::sign( var_0.lateral_change_this_update ); var_3 = getdvarfloat( "rappel_stop_momentum_time" ); var_0.stop_momentum_change = var_0.stop_momentum / ( var_3 * 20.0 ); } if ( var_0.move_state == var_0.move_state_stop ) { var_0.was_running = var_0.last_move_state == var_0.move_state_loop_run; var_0.begin_sway = 1; } else var_0.was_running = undefined; } if ( var_0.move_state == var_0.move_state_stop ) var_4 = var_0.stop_anim_direction; else { var_4 = rpl_legs_get_start_move_direction( var_0 ); var_0.last_start_anim_direction = var_4; var_0.stop_anim_direction = var_4; } var_5 = []; var_5[var_4] = 1.0; var_6 = rpl_legs_get_anim_type( var_0 ); var_7 = rpl_get_state_anim( var_0, var_6, var_4 ); var_8 = 1.0; var_9 = rpl_legs_get_blend_time( var_0, var_6, var_4 ); var_10 = rpl_legs_get_animation_rate( var_0, var_4, var_6 ); var_0.move[var_4].playing = 1; rpl_legs_set_anim( var_7, var_8, var_9, var_10, var_2, var_0.legs_flag_name ); if ( var_1 ) { rpl_legs_clear_anim( var_0.legs_move_parent_node, rpl_legs_get_clear_blend_time( var_0, var_0.animtype_parent, undefined ) ); rpl_legs_clear_unused_anims( var_0, var_5 ); return; } } else { var_11 = var_0.move_state == var_0.move_state_loop_run; var_5 = rpl_legs_get_move_directions( var_0, var_11 ); var_12 = rpl_legs_get_direction_weights( var_5 ); var_0.stop_anim_direction = rpl_legs_get_stop_move_direction( var_0 ); var_13 = rpl_legs_changed_directions( var_0, var_5 ); var_14 = getarraykeys( var_0.move ); foreach ( var_4 in var_14 ) { if ( isdefined( var_5[var_4] ) ) { var_6 = rpl_legs_get_anim_type( var_0 ); var_7 = rpl_get_state_anim( var_0, var_6, var_4 ); var_8 = var_12[var_4]; var_9 = rpl_legs_get_blend_time( var_0, var_6, var_4 ); var_10 = rpl_legs_get_animation_rate( var_0, var_4, var_6 ); var_0.move[var_4].playing = 1; rpl_legs_set_anim( var_7, var_8, var_9, var_10, 0, var_0.legs_flag_name ); } } if ( var_1 || var_13 ) rpl_legs_clear_unused_anims( var_0, var_5 ); if ( var_1 ) var_0.current_foot = "left"; } } rpl_legs_changed_directions( var_0, var_1 ) { var_2 = getarraykeys( var_1 ); foreach ( var_4 in var_2 ) { if ( !var_0.move[var_4].playing ) return 1; } return 0; } rpl_legs_should_use_run_loop( var_0 ) { var_1 = 0.8; if ( var_0.horz_leg_move_percent < var_1 ) return 0; return 1; } rpl_legs_traveling_horizontal( var_0, var_1 ) { if ( !var_1 ) return 0; var_2 = rpl_legs_get_move_directions( var_0, 1 ); var_3 = getarraykeys( var_2 ); if ( _rpl_legs_is_horizontal( var_3[0] ) ) return 1; return 0; } rpl_legs_is_loop_state_changing_direction( var_0, var_1 ) { var_2 = vectordot( var_0.last_move_vect_norm, var_0.cur_move_vect_norm ); if ( var_2 <= var_0.cosine90 ) return 1; return 0; } rpl_legs_is_start_state_complete( var_0, var_1 ) { if ( var_1 ) { var_2 = rpl_legs_get_start_move_direction( var_0 ); var_3 = rpl_legs_get_previous_move_directions( var_0 ); var_4 = var_3[0]; if ( isdefined( var_4 ) && var_2 != var_4 ) return 1; } var_5 = getarraykeys( var_0.move ); foreach ( var_7 in var_5 ) { var_8 = rpl_legs_get_anim_type( var_0 ); var_9 = rpl_get_state_anim( var_0, var_8, var_7 ); var_10 = level.rappel_player_legs getanimtime( var_9 ); if ( var_10 > 0 && var_10 < var_0.state_anim_percent_complete ) return 0; } return 1; } rpl_legs_is_stop_state_complete( var_0 ) { var_1 = rpl_legs_get_anim_type( var_0 ); var_2 = rpl_get_state_anim( var_0, var_1, var_0.stop_anim_direction ); var_3 = level.rappel_player_legs getanimtime( var_2 ); return var_3 == 1; } rpl_legs_get_previous_move_directions( var_0 ) { var_1 = []; var_2 = getarraykeys( var_0.move ); foreach ( var_4 in var_2 ) { if ( var_0.move[var_4].playing ) var_1[var_1.size] = var_4; } return var_1; } rpl_legs_get_animation_rate( var_0, var_1, var_2 ) { if ( var_2 == var_0.animtype_stop || var_2 == var_0.animtype_run_stop ) return 1.0; var_3 = getdvarfloat( "rappel_legs_scale_horizontal" ); var_4 = getdvarfloat( "rappel_legs_scale_up" ); var_5 = getdvarfloat( "rappel_legs_scale_down" ); if ( var_2 == var_0.animtype_loop_run ) var_3 = getdvarfloat( "rappel_legs_scale_run" ); if ( var_1 == "down" ) return var_0.down_leg_move_percent * var_5; else if ( var_1 == "up" ) return var_0.up_leg_move_percent * var_4; else if ( var_1 == "left" || var_1 == "right" ) return var_0.horz_leg_move_percent * var_3; else if ( var_1 == "left_down" || var_1 == "right_down" ) { var_6 = length( ( var_0.horz_leg_move_percent, var_0.down_leg_move_percent, 0 ) ); var_7 = var_5; return var_6 * var_7; } else { var_6 = length( ( var_0.horz_leg_move_percent, var_0.up_leg_move_percent, 0 ) ); var_7 = var_4; return var_6 * var_7; } } rpl_legs_get_direction_weights( var_0 ) { var_1 = getarraykeys( var_0 ); var_2 = 0; foreach ( var_4 in var_1 ) var_2 = var_2 + var_0[var_4]; var_6 = []; foreach ( var_4 in var_1 ) var_6[var_4] = var_0[var_4] / var_2; return var_6; } _rpl_legs_is_diagonal( var_0 ) { return var_0 == "left_up" || var_0 == "left_down" || var_0 == "right_up" || var_0 == "right_down"; } _rpl_legs_is_horizontal( var_0 ) { return var_0 == "left" || var_0 == "right"; } rpl_legs_get_start_move_direction( var_0 ) { var_1 = []; var_2 = undefined; var_3 = getarraykeys( var_0.move ); foreach ( var_5 in var_3 ) { var_6 = vectordot( var_0.cur_move_vect_norm, var_0.move[var_5].vector ); if ( var_6 <= var_0.cosine22_5 ) continue; if ( _rpl_legs_is_diagonal( var_5 ) ) var_2 = var_5; var_1[var_1.size] = var_5; } if ( var_1.size == 2 ) var_1 = common_scripts\utility::array_remove( var_1, var_2 ); return var_1[0]; } rpl_legs_get_stop_move_direction( var_0 ) { var_1 = rpl_legs_get_move_directions( var_0, 1 ); var_2 = getarraykeys( var_1 ); return var_2[0]; } rpl_legs_get_move_directions( var_0, var_1 ) { var_2 = []; var_3 = getarraykeys( var_0.move ); foreach ( var_5 in var_3 ) { var_6 = vectordot( var_0.cur_move_vect_norm, var_0.move[var_5].vector ); if ( var_6 <= var_0.cosine45 ) continue; var_2[var_5] = var_6; } if ( var_2.size == 2 ) { var_8 = []; var_3 = getarraykeys( var_2 ); foreach ( var_5 in var_3 ) { var_6 = var_2[var_5]; if ( var_6 <= var_0.cosine15 ) continue; var_8[var_5] = var_6; } if ( var_8.size == 1 ) return var_8; } if ( var_2.size == 2 ) { var_3 = getarraykeys( var_2 ); if ( common_scripts\utility::array_contains( var_3, "left" ) && common_scripts\utility::array_contains( var_3, "left_down" ) ) var_2["left_down"] = undefined; else if ( common_scripts\utility::array_contains( var_3, "right" ) && common_scripts\utility::array_contains( var_3, "right_down" ) ) var_2["right_down"] = undefined; } if ( var_2.size == 2 && var_1 ) { var_2["left_down"] = undefined; var_2["right_down"] = undefined; var_2["left_up"] = undefined; var_2["right_up"] = undefined; } return var_2; } rpl_legs_get_blend_time( var_0, var_1, var_2 ) { if ( var_1 == var_0.animtype_loop || var_1 == var_0.animtype_loop_run ) { if ( rpl_legs_is_state_direction_anim_complete( var_0, var_0.animtype_start, var_2 ) ) return var_0.leg_anim_blend_time_fast; } return var_0.leg_anim_blend_time; } rpl_legs_get_clear_blend_time( var_0, var_1, var_2 ) { if ( var_0.move_state == var_0.move_state_jump ) return var_0.leg_jump_anim_blend_time; else if ( var_1 == var_0.animtype_start ) { if ( var_0.move_state == var_0.move_state_start ) return var_0.leg_clear_anim_blend_time_fast; } else if ( var_1 == var_0.animtype_loop || var_1 == var_0.animtype_loop_run || var_1 == var_0.animtype_parent ) { if ( var_0.move_state == var_0.move_state_idle ) return var_0.leg_idle_anim_blend_time; if ( var_0.move_state == var_0.move_state_start && rpl_legs_is_start_anim_ready_to_blend_out_loops( var_0, var_0.last_start_anim_direction ) ) return 0; } return var_0.leg_clear_anim_blend_time; } rpl_legs_is_start_anim_ready_to_blend_out_loops( var_0, var_1 ) { var_2 = 0.5; var_3 = rpl_get_state_anim( var_0, var_0.animtype_start, var_1 ); var_4 = level.rappel_player_legs getanimtime( var_3 ); if ( var_4 >= var_2 ) return 1; return 0; } rpl_legs_is_state_direction_anim_complete( var_0, var_1, var_2 ) { var_3 = rpl_get_state_anim( var_0, var_1, var_2 ); var_4 = level.rappel_player_legs getanimtime( var_3 ); var_5 = level.rappel_player_legs getanimweight( var_3 ); if ( var_4 >= var_0.state_anim_percent_complete && var_5 > 0 ) return 1; return 0; } rpl_legs_clear_all_idle_anims( var_0 ) { var_1 = rpl_legs_get_clear_blend_time( var_0, var_0.animtype_idle, undefined ); var_2 = var_0.legs_idle_anim; rpl_legs_clear_anim( var_2, var_1 ); } rpl_legs_clear_all_move_anims( var_0, var_1 ) { rpl_legs_clear_anim( var_0.legs_move_parent_node, rpl_legs_get_clear_blend_time( var_0, var_0.animtype_parent, undefined ) ); var_2 = getarraykeys( var_0.move ); foreach ( var_4 in var_2 ) { var_0.move[var_4].playing = 0; if ( isdefined( var_1 ) ) { rpl_legs_clear_anim( rpl_get_walk_start_anim( var_4 ), var_1 ); rpl_legs_clear_anim( rpl_get_walk_loop_anim( var_4 ), var_1 ); rpl_legs_clear_anim( rpl_get_walk_stop_anim( var_4 ), var_1 ); if ( _rpl_legs_is_horizontal( var_4 ) ) { rpl_legs_clear_anim( rpl_get_run_loop_anim( var_4 ), var_1 ); rpl_legs_clear_anim( rpl_get_run_stop_anim( var_4, "left" ), var_1 ); rpl_legs_clear_anim( rpl_get_run_stop_anim( var_4, "right" ), var_1 ); } continue; } rpl_legs_clear_anim( rpl_get_walk_start_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_start, var_4 ) ); rpl_legs_clear_anim( rpl_get_walk_loop_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_loop, var_4 ) ); rpl_legs_clear_anim( rpl_get_walk_stop_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_stop, var_4 ) ); if ( _rpl_legs_is_horizontal( var_4 ) ) { rpl_legs_clear_anim( rpl_get_run_loop_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_loop_run, var_4 ) ); rpl_legs_clear_anim( rpl_get_run_stop_anim( var_4, "left" ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_run_stop, var_4 ) ); rpl_legs_clear_anim( rpl_get_run_stop_anim( var_4, "right" ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_run_stop, var_4 ) ); } } } rpl_legs_clear_unused_anims( var_0, var_1 ) { rpl_legs_clear_all_idle_anims( var_0 ); var_2 = getarraykeys( var_0.move ); foreach ( var_4 in var_2 ) { if ( !isdefined( var_1[var_4] ) ) { var_0.move[var_4].playing = 0; rpl_legs_clear_anim( rpl_get_walk_start_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_start, var_4 ) ); rpl_legs_clear_anim( rpl_get_walk_loop_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_loop, var_4 ) ); rpl_legs_clear_anim( rpl_get_walk_stop_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_stop, var_4 ) ); if ( _rpl_legs_is_horizontal( var_4 ) ) { rpl_legs_clear_anim( rpl_get_run_loop_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_loop_run, var_4 ) ); rpl_legs_clear_anim( rpl_get_run_stop_anim( var_4, "left" ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_run_stop, var_4 ) ); rpl_legs_clear_anim( rpl_get_run_stop_anim( var_4, "right" ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_run_stop, var_4 ) ); } continue; } if ( var_0.move_state != var_0.move_state_start ) rpl_legs_clear_anim( rpl_get_walk_start_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_start, var_4 ) ); if ( var_0.move_state != var_0.move_state_loop ) rpl_legs_clear_anim( rpl_get_walk_loop_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_loop, var_4 ) ); if ( var_0.move_state != var_0.move_state_loop_run && _rpl_legs_is_horizontal( var_4 ) ) rpl_legs_clear_anim( rpl_get_run_loop_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_loop_run, var_4 ) ); if ( var_0.move_state != var_0.move_state_stop ) { rpl_legs_clear_anim( rpl_get_walk_stop_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_stop, var_4 ) ); if ( _rpl_legs_is_horizontal( var_4 ) ) { rpl_legs_clear_anim( rpl_get_run_stop_anim( var_4, "left" ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_run_stop, var_4 ) ); rpl_legs_clear_anim( rpl_get_run_stop_anim( var_4, "right" ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_run_stop, var_4 ) ); } continue; } var_5 = isdefined( var_0.was_running ) && var_0.was_running; var_6 = isdefined( var_0.current_foot ) && var_0.current_foot == "right"; var_7 = isdefined( var_0.current_foot ) && var_0.current_foot == "left"; if ( var_5 ) rpl_legs_clear_anim( rpl_get_walk_stop_anim( var_4 ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_stop, var_4 ) ); if ( !var_5 && !var_6 && _rpl_legs_is_horizontal( var_4 ) ) rpl_legs_clear_anim( rpl_get_run_stop_anim( var_4, "right" ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_run_stop, var_4 ) ); if ( !var_5 && !var_7 && _rpl_legs_is_horizontal( var_4 ) ) rpl_legs_clear_anim( rpl_get_run_stop_anim( var_4, "left" ), rpl_legs_get_clear_blend_time( var_0, var_0.animtype_run_stop, var_4 ) ); } } rpl_legs_get_idle_anim( var_0 ) { var_1 = var_0.legs_idle_anim; return var_1; } rpl_legs_set_idle( var_0 ) { var_1 = rpl_legs_get_idle_anim( var_0 ); level.rappel_player_legs setanim( var_1, 1.0, var_0.leg_idle_anim_blend_time, 1.0 ); } rpl_legs_set_anim( var_0, var_1, var_2, var_3, var_4, var_5 ) { var_6 = isdefined( var_4 ) && var_4; var_7 = isdefined( var_5 ); if ( var_6 && var_7 ) level.rappel_player_legs setflaggedanimrestart( var_5, var_0, var_1, var_2, var_3 ); else if ( var_6 ) level.rappel_player_legs setanimrestart( var_0, var_1, var_2, var_3 ); else if ( var_7 ) level.rappel_player_legs setflaggedanim( var_5, var_0, var_1, var_2, var_3 ); else level.rappel_player_legs setanim( var_0, var_1, var_2, var_3 ); } rpl_legs_clear_anim( var_0, var_1 ) { level.rappel_player_legs clearanim( var_0, var_1 ); } rpl_legs_get_anim_type( var_0 ) { if ( var_0.move_state == var_0.move_state_start ) return var_0.animtype_start; else if ( var_0.move_state == var_0.move_state_idle ) return var_0.animtype_idle; else if ( var_0.move_state == var_0.move_state_stop && isdefined( var_0.was_running ) && var_0.was_running ) return var_0.animtype_run_stop; else if ( var_0.move_state == var_0.move_state_stop ) return var_0.animtype_stop; else if ( var_0.move_state == var_0.move_state_loop ) return var_0.animtype_loop; else if ( var_0.move_state == var_0.move_state_loop_run ) return var_0.animtype_loop_run; else if ( var_0.move_state == var_0.move_state_idle_shift ) return var_0.animtype_idle_shift; else if ( var_0.move_state == var_0.move_state_shift_back ) return var_0.animtype_shift_back; else { } } rpl_get_state_anim( var_0, var_1, var_2 ) { if ( var_1 == var_0.animtype_start ) return rpl_get_walk_start_anim( var_2 ); else if ( var_1 == var_0.animtype_loop ) return rpl_get_walk_loop_anim( var_2 ); else if ( var_1 == var_0.animtype_loop_run ) return rpl_get_run_loop_anim( var_2 ); else if ( var_1 == var_0.animtype_stop ) return rpl_get_walk_stop_anim( var_2 ); else if ( var_1 == var_0.animtype_run_stop ) return rpl_get_run_stop_anim( var_2, var_0.current_foot ); else if ( var_1 == var_0.animtype_idle ) return rpl_get_idle_anim( var_2 ); else { } } #using_animtree("player"); rpl_get_idle_anim( var_0 ) { switch ( var_0 ) { case "down": case "up": return %cnd_rappel_idle_playerlegs; default: break; } } rpl_legs_get_parent_node_move() { return %cnd_rappel_playerlegs_movement; } rpl_get_run_loop_anim( var_0 ) { switch ( var_0 ) { case "right_up": case "right_down": case "right": return %cnd_rappel_move_run_right_loop_playerlegs; case "left_up": case "left_down": case "left": return %cnd_rappel_move_run_left_loop_playerlegs; default: break; } } rpl_get_walk_loop_anim( var_0 ) { switch ( var_0 ) { case "down": return %cnd_rappel_move_down_loop_playerlegs; case "up": return %cnd_rappel_move_up_loop_playerlegs; case "right": return %cnd_rappel_move_right_loop_playerlegs; case "left": return %cnd_rappel_move_left_loop_playerlegs; case "right_down": return %cnd_rappel_move_down_right_loop_playerlegs; case "right_up": return %cnd_rappel_move_up_right_loop_playerlegs; case "left_down": return %cnd_rappel_move_down_left_loop_playerlegs; case "left_up": return %cnd_rappel_move_up_left_loop_playerlegs; default: break; } } rpl_get_walk_start_anim( var_0 ) { switch ( var_0 ) { case "down": return %cnd_rappel_move_down_start_playerlegs; case "up": return %cnd_rappel_move_up_start_playerlegs; case "right": return %cnd_rappel_move_right_start_playerlegs; case "left": return %cnd_rappel_move_left_start_playerlegs; case "right_down": return %cnd_rappel_move_down_right_start_playerlegs; case "right_up": return %cnd_rappel_move_up_right_start_playerlegs; case "left_down": return %cnd_rappel_move_down_left_start_playerlegs; case "left_up": return %cnd_rappel_move_up_left_start_playerlegs; default: break; } } rpl_get_walk_stop_anim( var_0 ) { return %cnd_rappel_move_stop; } rpl_get_run_stop_anim( var_0, var_1 ) { return %cnd_rappel_move_stop; } rpl_get_legs_idle_anim() { return %cnd_rappel_idle_playerlegs; } rpl_get_legs_jump_anim() { if ( isdefined( level.rappel_legs_jump_anim ) ) return level.rappel_legs_jump_anim; else return %cnd_rappel_jump_playerlegs; } rpl_get_garden_entry_legs_static_anim() { return %cornered_combat_rappel_garden_entry_static_playerlegs; } rpl_get_garden_entry_arms_static_anim() { return %cornered_combat_rappel_garden_entry_static_playerarms; } watch_footstep_notetrack() { common_scripts\utility::flag_wait( "player_has_exited_the_building" ); while ( !common_scripts\utility::flag( "inverted_rappel_finished" ) ) { self waittill( "bobanim", var_0 ); if ( var_0 == "ps_step_run_plr_rappel" ) { maps\cornered_audio::aud_rappel( "foot" ); wait 0.2; } } } cnd_rpl_cleanup( var_0 ) { level.rappel_jump_land_struct = undefined; level.player.forcing_rappel_jump_to_struct = undefined; level.player.linked_world_space_forward = undefined; level.rappel_jump_anim = undefined; if ( var_0.rappel_type != "combat" ) { level.player allowcrouch( 1 ); level.player allowsprint( 1 ); level.player allowprone( 1 ); level.player allowmelee( 1 ); } level.player enablemousesteer( 0 ); level.level_specific_dof = 0; level.player.dof_ref_ent = undefined; setsaveddvar( "player_moveThreshhold", 10.0 ); setsaveddvar( "bg_weaponBobAmplitudeStanding", "0.055 0.025" ); setsaveddvar( "player_lateralPlane", 0 ); setsaveddvar( "bg_weaponBobAmplitudeBase", 0.16 ); setsaveddvar( "g_speed", 190.0 ); setsaveddvar( "bg_viewBobMax", 8 ); setsaveddvar( "bullet_penetrationHitsClients", 0 ); setsaveddvar( "bullet_penetrationActorHitsActors", 0 ); maps\cornered_code::delete_if_defined( level.rpl.rope_origin ); maps\cornered_code::delete_if_defined( level.rpl_physical_rope_origin ); maps\cornered_code::delete_if_defined( level.rpl_jump_anim_origin ); maps\cornered_code::delete_if_defined( level.rpl_jump_anim_origin ); maps\cornered_code::delete_if_defined( level.player_torso_offset_origin ); maps\cornered_code::delete_if_defined( level.rpl_plyr_legs_link_ent ); level.rpl = undefined; common_scripts\utility::flag_clear( "stop_manage_player_rappel_movement" ); } rappel_limit_vertical_move( var_0, var_1 ) { var_2 = rpl_calc_dist_player_to_top( level.rpl, 1 ); level.rappel_lower_limit = var_2 - var_0; level.rappel_upper_limit = var_2 - var_1; } rappel_clear_vertical_limits() { level.rappel_lower_limit = undefined; level.rappel_upper_limit = undefined; } rpl_calc_max_yaw_right( var_0 ) { var_1 = rpl_calc_dist_player_to_top( var_0 ); if ( level.rappel_max_lateral_dist_right / var_1 > 1 ) return 60; var_2 = asin( level.rappel_max_lateral_dist_right / var_1 ); return var_2; } rpl_calc_max_yaw_left( var_0 ) { var_1 = rpl_calc_dist_player_to_top( var_0 ); if ( level.rappel_max_lateral_dist_left / var_1 > 1 ) return -60; var_2 = asin( -1 * level.rappel_max_lateral_dist_left / var_1 ); return var_2; } rpl_calc_max_rot_speed( var_0, var_1 ) { var_2 = rpl_get_max_lateral_speed(); if ( rappel_use_plyr_legs( var_1 ) ) { var_0.anim_right_move_strength = var_0.right_move_strength; var_0.anim_down_move_strength = var_0.down_move_strength; if ( abs( var_0.vertical_change_this_update ) == 0 ) var_0.anim_down_move_strength = 0; var_0.cur_move_vect_norm = vectornormalize( ( var_0.anim_right_move_strength, var_0.anim_down_move_strength, 0 ) ); var_3 = abs( var_0.anim_down_move_strength ) > 0 || abs( var_0.anim_right_move_strength ) > 0; var_4 = rpl_legs_traveling_horizontal( var_0, var_3 ); if ( !var_4 && var_3 && common_scripts\utility::sign( var_0.vertical_change_this_update ) == -1 ) var_2 = rpl_get_max_downward_speed(); } var_5 = rpl_calc_dist_player_to_top( var_0 ); var_6 = var_2 * 1000 / var_5; if ( !var_0.jumping && level.player maps\_utility::isads() ) var_6 = var_6 * 0.25; if ( level.player issprinting() ) var_6 = var_6 * 1.5; if ( var_0.too_close_to_ally ) var_6 = 0; return var_6; } rpl_calc_dist_player_to_top( var_0, var_1 ) { var_2 = distance( level.player.origin, level.rpl_rope_anim_origin.origin ); if ( isdefined( var_1 ) && var_1 ) return var_2; if ( abs( var_0.current_dist_to_top - var_2 ) > 10 ) var_0.current_dist_to_top = var_2; return var_0.current_dist_to_top; } player_rappel_force_jump_away( var_0 ) { if ( isdefined( var_0 ) ) { level.player.forcing_rappel_jump_to_struct = 1; level.rappel_jump_land_struct = var_0; } level.player notify( "playerforcejump" ); } #using_animtree("animated_props"); cnd_plyr_rpl_handle_jump( var_0, var_1 ) { level endon( "stop_manage_player_rappel_movement" ); var_2 = %rappel_movement_player_jump_still; common_scripts\utility::flag_clear( "player_jumping" ); notifyoncommand( "playerjump", "+gostand" ); notifyoncommand( "playerjump", "+moveup" ); var_3 = cnd_get_rope_anim_origin(); var_4 = var_3.angles[0]; var_1.initial_dist_z_from_top = abs( level.player.origin[2] - var_1.rope_origin.origin[2] ); for (;;) { level.player common_scripts\utility::waittill_either( "playerjump", "playerforcejump" ); if ( !common_scripts\utility::flag( "force_jump" ) && !common_scripts\utility::flag( "disable_rappel_jump" ) ) { level.player allowjump( 0 ); var_5 = isdefined( level.player.forcing_rappel_jump_to_struct ) && level.player.forcing_rappel_jump_to_struct; common_scripts\utility::flag_set( "player_jumping" ); var_1.jumpcomplete = 0; var_6 = rpl_get_rotate_jump_anim( var_0 ); level.rappel_jump_anim = var_6; var_7 = getanimlength( var_6 ); thread rappel_rope_additive_jump_animations( var_0, var_7 ); thread maps\cornered_audio::aud_rappel( "jump" ); rappel_rope_animate_rotate( var_1, var_3, var_6, var_2 ); if ( rappel_use_plyr_legs( var_0 ) ) { var_8 = rpl_get_legs_jump_anim(); level.rappel_player_legs setanimrestart( var_8, 1.0, var_1.leg_jump_anim_blend_time, 1.0 ); } var_9 = var_7 * rpl_get_jump_percent_considered_complete( var_0 ); var_10 = var_7 - var_9; if ( !var_5 ) wait( var_9 ); else wait( var_7 ); common_scripts\utility::flag_clear( "player_jumping" ); level.player allowjump( 1 ); if ( var_5 ) { level notify( "player_force_jump_landed" ); thread end_legs_jump_anim( var_1 ); } else if ( rappel_use_plyr_legs( var_0 ) ) thread end_legs_jump_anim( var_1, var_10 ); } } } cnd_plyr_rpl_handle_view_lerp( var_0, var_1 ) { level.player endon( "death" ); if ( !rappel_use_plyr_legs( var_0 ) ) return; level endon( "stop_manage_player_rappel_movement" ); thread cnd_plyr_catch_fire_reload( var_0, var_1 ); var_2 = 0.2; var_3 = 15; var_4 = var_0.right_arc; var_5 = var_0.left_arc; var_6 = var_0.top_arc; var_7 = var_0.bottom_arc; var_8 = max( 1, var_7 - var_3 ); level.player notifyonplayercommand( "rappel_lerp", "+usereload" ); level.player notifyonplayercommand( "rappel_lerp", "+reload" ); level.player notifyonplayercommand( "rappel_lerp_weap", "weapnext" ); for (;;) { var_9 = level.player common_scripts\utility::waittill_any_return( "rappel_lerp", "rappel_lerp_fire", "rappel_lerp_weap" ); if ( var_9 == "rappel_lerp" ) { var_10 = level.player getcurrentprimaryweapon(); var_11 = level.player getweaponammoclip( var_10 ); var_12 = weaponclipsize( var_10 ); if ( var_11 == var_12 ) continue; } level.player lerpviewangleclamp( var_2, 0, 0, var_4, var_5, var_6, var_8 ); wait( var_2 ); if ( var_9 == "rappel_lerp_fire" ) wait 1; while ( level.player isreloading() || level.player isswitchingweapon() ) common_scripts\utility::waitframe(); level.player lerpviewangleclamp( var_2, 0, 0, var_4, var_5, var_6, var_7 ); } } cnd_plyr_catch_fire_reload( var_0, var_1 ) { level.player endon( "death" ); level endon( "stop_manage_player_rappel_movement" ); level.player notifyonplayercommand( "player_fired", "+attack" ); level.player notifyonplayercommand( "player_fired", "+attack_akimbo_accessible" ); for (;;) { level.player waittill( "player_fired" ); var_2 = level.player getcurrentprimaryweapon(); var_3 = 1; while ( level.player isfiring() || level.player attackbuttonpressed() || var_3 ) { var_4 = level.player getweaponammoclip( var_2 ); if ( var_4 == 0 ) { level.player notify( "rappel_lerp_fire" ); common_scripts\utility::waitframe(); continue; } else { if ( var_3 ) { var_5 = level.player common_scripts\utility::waittill_notify_or_timeout_return( "player_fired", 0.2 ); if ( !isdefined( var_5 ) || var_5 != "timeout" ) continue; } else common_scripts\utility::waitframe(); var_3 = 0; } } } } rpl_get_jump_percent_considered_complete( var_0 ) { var_1 = var_0.jump_type; if ( isdefined( level.rappel_rotate_jump_anim ) || var_1 == "jump_small" ) return 1.0; else return 0.65; } rpl_get_rotate_jump_anim( var_0 ) { var_1 = var_0.jump_type; if ( isdefined( level.rappel_rotate_jump_anim ) ) return level.rappel_rotate_jump_anim; else if ( var_1 == "jump_small" ) return %rappel_movement_player_jump_rotate_sm; else return %rappel_movement_player_jump_rotate; } rappel_rope_additive_jump_animations( var_0, var_1 ) { if ( var_0.rappel_type == "inverted" ) return; level.cnd_rappel_player_rope setanimknobrestart( %cnd_rappel_idle_rope_player_add, 1.0, 0.5, 1.0 ); wait( var_1 - 0.3 ); level.cnd_rappel_player_rope setanimknobrestart( %cnd_rappel_jump_shake_rope_player, 1, 0, 1 ); } rappel_rope_animate_rotate( var_0, var_1, var_2, var_3 ) { var_4 = abs( level.player.origin[2] - var_0.rope_origin.origin[2] ); var_5 = var_0.initial_dist_z_from_top / var_4; var_6 = atan( var_5 * var_0.tangentjump ); var_7 = var_6 / var_0.maxropejumpangle; var_7 = clamp( var_7, 0, 1.0 ); var_8 = 1.0 - var_7; var_1 setanim( var_2, var_7, 0, 1 ); var_1 setanimtime( var_2, 0 ); level.rpl_physical_rope_anim_origin setanim( var_2, var_7, 0, 1 ); level.rpl_physical_rope_anim_origin setanimtime( var_2, 0 ); var_1 setanim( var_3, var_8, 0, 1 ); var_1 setanimtime( var_3, 0 ); level.rpl_physical_rope_anim_origin setanim( var_3, var_8, 0, 1 ); level.rpl_physical_rope_anim_origin setanimtime( var_3, 0 ); } end_legs_jump_anim( var_0, var_1 ) { level endon( "stop_manage_player_rappel_movement" ); if ( isdefined( var_1 ) ) wait( var_1 ); var_2 = rpl_get_legs_jump_anim(); if ( level.rappel_player_legs getanimtime( var_2 ) > 0.9 ) { level.rappel_player_legs clearanim( var_2, 0.2 ); var_0.jumpcomplete = 1; } } plyr_is_moving_up( var_0 ) { if ( var_0.move_state != var_0.move_state_start && var_0.move_state != var_0.move_state_loop ) return 0; if ( var_0.move_state == var_0.move_state_start ) { var_1 = rpl_legs_get_start_move_direction( var_0 ); if ( var_1 == "up" || var_1 == "left_up" || var_1 == "right_up" ) return 1; } else { var_2 = rpl_legs_get_move_directions( var_0, 0 ); var_3 = getarraykeys( var_2 ); if ( common_scripts\utility::array_contains( var_3, "up" ) || common_scripts\utility::array_contains( var_3, "left_up" ) || common_scripts\utility::array_contains( var_3, "right_up" ) ) return 1; } return 0; } plyr_rappel_legs_set_origin( var_0 ) { var_1 = getdvarint( "move_up_offset", 20 ); var_2 = getdvarfloat( "move_up_lerp", 5.0 ); level.rappel_player_legs unlink(); var_3 = level.rpl_plyr_legs_link_ent.origin; var_4 = 0; if ( !isdefined( var_0.last_legs_offset ) ) var_0.last_legs_offset = 0; if ( plyr_is_moving_up( var_0 ) ) var_4 = var_4 + var_1; var_5 = var_4 - var_0.last_legs_offset; if ( abs( var_5 ) > 0 && abs( var_5 ) > var_2 ) var_4 = var_0.last_legs_offset + common_scripts\utility::sign( var_5 ) * var_2; var_0.last_legs_offset = var_4; if ( abs( var_4 ) > 0 ) { var_6 = -1 * anglestoup( level.rpl_rope_anim_origin gettagangles( "J_prop_1" ) ); var_7 = vectornormalize( var_6 ) * var_4; var_3 = var_3 + var_7; } level.rappel_player_legs.origin = var_3; level.rappel_player_legs linkto( level.rpl_plyr_legs_link_ent ); } plyr_rappel_jump_down( var_0, var_1 ) { common_scripts\utility::flag_set( "force_jump" ); common_scripts\utility::flag_clear( "player_jumping" ); if ( isdefined( var_1 ) ) var_2 = %rappel_movement_player_jump_rotate; else var_2 = %rappel_movement_player_jump_rotate2; var_3 = %rappel_movement_player_jump_still; var_4 = cnd_get_rope_anim_origin(); var_5 = var_4.angles[0]; level.player setstance( "stand" ); level.player allowjump( 0 ); common_scripts\utility::flag_set( "player_jumping" ); level.rpl.jumpcomplete = 0; thread maps\cornered_audio::aud_rappel_jump_down( 0.5, 1.6 ); var_6 = getanimlength( var_2 ); thread rappel_rope_additive_jump_animations( var_0, var_6 ); rappel_rope_animate_rotate( level.rpl, var_4, var_2, var_3 ); var_7 = rpl_get_legs_jump_anim(); if ( rappel_use_plyr_legs( var_0 ) ) { level.rappel_player_legs setanim( var_7, 1.0, 0.2, 1.0 ); level.rappel_player_legs setanimtime( var_7, 0.0 ); } wait( var_6 ); if ( rappel_use_plyr_legs( var_0 ) ) level.rappel_player_legs clearanim( var_7, 0.2 ); level.player allowjump( 1 ); common_scripts\utility::flag_clear( "player_jumping" ); common_scripts\utility::flag_clear( "force_jump" ); level.rpl.jumpcomplete = 1; level.player_jump_down_finished = 1; } rappel_use_plyr_legs( var_0 ) { if ( !var_0.show_legs ) return 0; return 1; } cnd_get_rope_anim_origin() { return level.rpl_rope_anim_origin; } cnd_get_plyr_anim_origin() { return level.rpl_plyr_anim_origin; } rappel_lateral_speed_to_world_units( var_0 ) { return var_0 * 140 / 8.0; } rappel_vertical_speed_to_world_units( var_0 ) { return var_0 * 20; } rpl_get_max_lateral_speed() { return level.rappel_max_lateral_speed; } rpl_get_max_upward_speed() { return level.rappel_max_upward_speed; } rpl_get_max_downward_speed() { return level.rappel_max_downward_speed; }