#include common_scripts\utility; #include maps\mp\_utility; #include maps\mp\zombies\_zm_utility; #include maps\mp\zombies\_zm_sidequests; #include maps\mp\zm_highrise_sq_atd; #include maps\mp\zm_highrise_sq_slb; #include maps\mp\zm_highrise_sq_ssp; #include maps\mp\zm_highrise_sq_pts; #include maps\mp\gametypes_zm\_globallogic_score; #include maps\mp\zombies\_zm_stats; #include maps\mp\zombies\_zm_buildables; #include maps\mp\zombies\_zm_unitrigger; #include maps\mp\zombies\_zm_perks; #include maps\mp\zm_highrise_sq; init() { if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) { sq_easy_cleanup(); return; } flag_init( "sq_disabled" ); flag_init( "sq_branch_complete" ); flag_init( "sq_tower_active" ); flag_init( "sq_player_has_sniper" ); flag_init( "sq_player_has_ballistic" ); flag_init( "sq_ric_tower_complete" ); flag_init( "sq_max_tower_complete" ); flag_init( "sq_players_out_of_sync" ); flag_init( "sq_ball_picked_up" ); register_map_navcard( "navcard_held_zm_highrise", "navcard_held_zm_transit" ); ss_buttons = getentarray( "sq_ss_button", "targetname" ); for ( i = 0; i < ss_buttons.size; i++ ) { ss_buttons[i] usetriggerrequirelookat(); ss_buttons[i] sethintstring( "" ); ss_buttons[i] setcursorhint( "HINT_NOICON" ); } level thread mahjong_tiles_setup(); flag_init( "sq_nav_built" ); declare_sidequest( "sq", ::init_sidequest, ::sidequest_logic, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); maps\mp\zm_highrise_sq_atd::init(); maps\mp\zm_highrise_sq_slb::init(); declare_sidequest( "sq_1", ::init_sidequest_1, ::sidequest_logic_1, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); maps\mp\zm_highrise_sq_ssp::init_1(); maps\mp\zm_highrise_sq_pts::init_1(); declare_sidequest( "sq_2", ::init_sidequest_2, ::sidequest_logic_2, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); maps\mp\zm_highrise_sq_ssp::init_2(); maps\mp\zm_highrise_sq_pts::init_2(); level thread init_navcard(); level thread init_navcomputer(); precache_sidequest_assets(); } sidequest_logic() { level thread watch_nav_computer_built(); level thread navcomputer_waitfor_navcard(); flag_wait( "power_on" ); level thread vo_richtofen_power_on(); flag_wait( "sq_nav_built" ); if ( !is_true( level.navcomputer_spawned ) ) update_sidequest_stats( "sq_highrise_started" ); stage_start( "sq", "atd" ); level waittill( "sq_atd_over" ); stage_start( "sq", "slb" ); level waittill( "sq_slb_over" ); if ( !is_true( level.richcompleted ) ) level thread sidequest_start( "sq_1" ); if ( !is_true( level.maxcompleted ) ) level thread sidequest_start( "sq_2" ); flag_wait( "sq_branch_complete" ); tower_punch_watcher(); if ( flag( "sq_ric_tower_complete" ) ) update_sidequest_stats( "sq_highrise_rich_complete" ); else if ( flag( "sq_max_tower_complete" ) ) update_sidequest_stats( "sq_highrise_maxis_complete" ); } tower_punch_watcher() { level thread playtoweraudio(); a_leg_trigs = []; foreach ( str_wind in level.a_wind_order ) a_leg_trigs[a_leg_trigs.size] = "sq_tower_" + str_wind; level.n_cur_leg = 0; level.sq_leg_punches = 0; foreach ( str_leg in a_leg_trigs ) { t_leg = getent( str_leg, "script_noteworthy" ); t_leg thread tower_punch_watch_leg( a_leg_trigs ); } flag_wait( "sq_tower_active" ); if ( flag( "sq_ric_tower_complete" ) ) { exploder_stop( 1002 ); exploder_stop( 903 ); exploder( 1003 ); } else { exploder_stop( 902 ); exploder_stop( 1003 ); exploder( 903 ); } wait 1; level thread tower_in_sync_lightning(); wait 1; level thread sq_give_all_perks(); } tower_punch_watch_leg( a_leg_trigs ) { level.legs_hit = []; while ( !flag( "sq_tower_active" ) ) { self waittill( "trigger", who ); if ( !isinarray( level.legs_hit, self.script_noteworthy ) && isplayer( who ) && ( who.current_melee_weapon == "tazer_knuckles_zm" || who.current_melee_weapon == "tazer_knuckles_upgraded_zm" ) ) { level.legs_hit[level.legs_hit.size] = self.script_noteworthy; self playsound( "zmb_sq_leg_powerup_" + level.legs_hit.size ); if ( level.legs_hit.size == 4 ) flag_set( "sq_tower_active" ); return; } } } sq_give_all_perks() { vending_triggers = getentarray( "zombie_vending", "targetname" ); perks = []; for ( i = 0; i < vending_triggers.size; i++ ) { perk = vending_triggers[i].script_noteworthy; if ( perk == "specialty_weapupgrade" ) continue; perks[perks.size] = perk; } if ( flag( "sq_ric_tower_complete" ) ) { v_fireball_start_loc = ( 1946, 608, 3338 ); n_fireball_exploder = 1001; } else { v_fireball_start_loc = ( 1068, -1362, 3340.5 ); n_fireball_exploder = 901; } players = getplayers(); foreach ( player in players ) { player thread sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder ); level waittill( "sq_fireball_hit_player" ); } } sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder ) { self endon("disconnect"); exploder( n_fireball_exploder ); m_fireball = spawn( "script_model", v_fireball_start_loc ); m_fireball setmodel( "tag_origin" ); playfxontag( level._effect["sidequest_dragon_fireball_max"], m_fireball, "tag_origin" ); do { wait_network_frame(); v_to_player = vectornormalize( self gettagorigin( "J_SpineLower" ) - m_fireball.origin ); v_move_spot = m_fireball.origin + v_to_player * 48; m_fireball.origin = v_move_spot; } while ( distancesquared( m_fireball.origin, self gettagorigin( "J_SpineLower" ) ) > 2304 ); m_fireball.origin = self gettagorigin( "J_SpineLower" ); m_fireball linkto( self, "J_SpineLower" ); wait 1.5; playfx( level._effect["sidequest_flash"], m_fireball.origin ); m_fireball delete(); level notify( "sq_fireball_hit_player" ); if ( is_player_valid( self ) ) { self thread scripts\zm\replaced\_zm_sq::sq_give_player_all_perks(); } }