#include common_scripts\utility; #include maps\_utility; #include maps\_zombiemode_utility; #include maps\_zombiemode_zone_manager; #include maps\_music; #using_animtree("generic_human"); main() { maps\zombie_cod5_asylum_fx::main(); PreCacheModel( "viewmodel_usa_pow_arms" ); PreCacheModel( "viewmodel_rus_prisoner_arms" ); PreCacheModel( "viewmodel_vtn_nva_standard_arms" ); PreCacheModel( "viewmodel_usa_hazmat_arms" ); PreCacheModel( "zombie_asylum_chair_nogore" ); PreCacheModel( "zombie_power_lever_handle" ); level thread maps\_callbacksetup::SetupCallbacks(); level.dogs_enabled = false; level.zones = []; precacheshellshock("electrocution"); level.door_dialog_function = maps\_zombiemode::play_door_dialog; level.custom_zombie_vox = ::setup_custom_vox; precachemodel("tag_origin"); precachemodel("zombie_zapper_power_box"); precachemodel("zombie_zapper_power_box_on"); precachemodel("zombie_zapper_cagelight_red"); precachemodel("zombie_zapper_cagelight_green"); precachemodel("lights_tinhatlamp_off"); precachemodel("lights_tinhatlamp_on"); precachemodel("lights_indlight_on"); precachemodel("lights_indlight"); level.valve_hint_north = (&"WAW_ZOMBIE_BUTTON_NORTH_FLAMES"); level.valve_hint_south = (&"WAW_ZOMBIE_BUTTON_NORTH_FLAMES"); precachestring(level.valve_hint_north); precachestring(level.valve_hint_south); precachestring(&"WAW_ZOMBIE_BETTY_ALREADY_PURCHASED"); precachestring(&"WAW_ZOMBIE_BETTY_HOWTO"); precachestring(&"WAW_ZOMBIE_FLAMES_UNAVAILABLE"); precachestring(&"WAW_ZOMBIE_USE_AUTO_TURRET"); precachestring(&"WAW_ZOMBIE_ELECTRIC_SWITCH"); precachestring(&"WAW_ZOMBIE_INTRO_ASYLUM_LEVEL_BERLIN"); precachestring(&"WAW_ZOMBIE_INTRO_ASYLUM_LEVEL_HIMMLER"); precachestring(&"WAW_ZOMBIE_INTRO_ASYLUM_LEVEL_SEPTEMBER"); include_weapons(); include_powerups(); if(getdvar("light_mode") != "") { return; } level._effect["zombie_grain"] = LoadFx( "misc/fx_zombie_grain_cloud" ); maps\_waw_zombiemode_radio::init(); level.Player_Spawn_func = ::spawn_point_override; level.zombiemode_precache_player_model_override = ::precache_player_model_override; level.zombiemode_give_player_model_override = ::give_player_model_override; level.zombiemode_player_set_viewmodel_override = ::player_set_viewmodel_override; level.register_offhand_weapons_for_level_defaults_override = ::register_offhand_weapons_for_level_defaults_override; level.use_zombie_heroes = true; maps\_zombiemode::main(); level.zone_manager_init_func = ::asylum_zone_init; init_zones[0] = "west_downstairs_zone"; init_zones[1] = "west2_downstairs_zone"; level thread maps\_zombiemode_zone_manager::manage_zones( init_zones ); level.burning_zombies = []; level.electrocuted_zombies = []; init_sounds(); level thread master_electric_switch(); init_zombie_asylum(); level thread intro_screen(); level thread toilet_useage(); level thread chair_useage(); level thread magic_box_light(); level thread mature_settings_changes(); maps\_zombiemode_betty::init(); level.zombie_visionset = "zombie_asylum"; maps\createart\zombie_cod5_asylum_art::main(); level.has_pack_a_punch = false; } asylum_zone_init() { flag_init( "always_on" ); flag_set( "always_on" ); add_adjacent_zone( "west_downstairs_zone", "west2_downstairs_zone", "power_on" ); add_adjacent_zone( "west2_downstairs_zone", "north_downstairs_zone", "north_door1" ); add_adjacent_zone( "north_downstairs_zone", "north_upstairs_zone", "north_upstairs_blocker" ); add_adjacent_zone( "north_upstairs_zone", "north2_upstairs_zone", "upstairs_north_door1" ); add_adjacent_zone( "north2_upstairs_zone", "kitchen_upstairs_zone", "upstairs_north_door2" ); add_adjacent_zone( "kitchen_upstairs_zone", "power_upstairs_zone", "magic_box_north" ); add_adjacent_zone( "west_downstairs_zone", "south_upstairs_zone", "south_upstairs_blocker" ); add_adjacent_zone( "south_upstairs_zone", "south2_upstairs_zone", "south_access_1" ); add_adjacent_zone( "south2_upstairs_zone", "power_upstairs_zone", "magic_box_south" ); } precache_player_model_override() { mptype\player_t5_zm_theater::precache(); } give_player_model_override( entity_num ) { if( IsDefined( self.zm_random_char ) ) { entity_num = self.zm_random_char; } switch( entity_num ) { case 0: character\c_usa_dempsey_zt::main(); break; case 1: character\c_rus_nikolai_zt::main(); break; case 2: character\c_jap_takeo_zt::main(); break; case 3: character\c_ger_richtofen_zt::main(); break; } } player_set_viewmodel_override( entity_num ) { switch( self.entity_num ) { case 0: self SetViewModel( "viewmodel_usa_pow_arms" ); break; case 1: self SetViewModel( "viewmodel_rus_prisoner_arms" ); break; case 2: self SetViewModel( "viewmodel_vtn_nva_standard_arms" ); break; case 3: self SetViewModel( "viewmodel_usa_hazmat_arms" ); break; } } register_offhand_weapons_for_level_defaults_override() { register_lethal_grenade_for_level( "stielhandgranate" ); level.zombie_lethal_grenade_player_init = "stielhandgranate"; register_tactical_grenade_for_level( "zombie_cymbal_monkey" ); level.zombie_tactical_grenade_player_init = undefined; register_placeable_mine_for_level( "mine_bouncing_betty" ); level.zombie_placeable_mine_player_init = undefined; register_melee_weapon_for_level( "knife_zm" ); level.zombie_melee_weapon_player_init = "knife_zm"; } player_zombie_awareness() { self endon("disconnect"); self endon("death"); while(1) { wait(1); zombie = get_closest_ai(self.origin,"axis"); if(!isDefined(zombie) || !isDefined(zombie.zombie_move_speed) ) { continue; } dist = 200; switch(zombie.zombie_move_speed) { case "walk": dist = 200;break; case "run": dist = 250; break; case "sprint": dist = 275;break; } if(distance2d(zombie.origin,self.origin) < dist) { yaw = self animscripts\zombie_utility::GetYawToSpot(zombie.origin ); if(yaw < -95 || yaw > 95) { zombie playsound ("behind_vocals"); } } } } intro_screen() { flag_wait( "all_players_connected" ); wait(2); level.intro_hud = []; for(i = 0; i < 3; i++) { level.intro_hud[i] = newHudElem(); level.intro_hud[i].x = 0; level.intro_hud[i].y = 0; level.intro_hud[i].alignX = "left"; level.intro_hud[i].alignY = "bottom"; level.intro_hud[i].horzAlign = "left"; level.intro_hud[i].vertAlign = "bottom"; level.intro_hud[i].foreground = true; if ( level.splitscreen && !level.hidef ) { level.intro_hud[i].fontScale = 2.75; } else { level.intro_hud[i].fontScale = 1.75; } level.intro_hud[i].alpha = 0.0; level.intro_hud[i].color = (1, 1, 1); level.intro_hud[i].inuse = false; } level.intro_hud[0].y = -110; level.intro_hud[1].y = -90; level.intro_hud[2].y = -70; level.intro_hud[0] settext(&"WAW_ZOMBIE_INTRO_ASYLUM_LEVEL_BERLIN"); level.intro_hud[1] settext(&"WAW_ZOMBIE_INTRO_ASYLUM_LEVEL_HIMMLER"); level.intro_hud[2] settext(&"WAW_ZOMBIE_INTRO_ASYLUM_LEVEL_SEPTEMBER"); for(i = 0 ; i < 3; i++) { level.intro_hud[i] FadeOverTime( 1.5 ); level.intro_hud[i].alpha = 1; wait(1.5); } wait(1.5); for(i = 0 ; i < 3; i++) { level.intro_hud[i] FadeOverTime( 1.5 ); level.intro_hud[i].alpha = 0; wait(1.5); } for(i = 0 ; i < 3; i++) { level.intro_hud[i] destroy(); } level thread magic_box_limit_location_init(); } play_pa_system() { clientnotify("switch_flipped_generator"); speakerA = getstruct("loudspeaker", "targetname"); playsoundatposition("alarm", speakerA.origin); level thread play_comp_sounds(); generator_arc = getent("generator_arc", "targetname"); generator_arc playloopsound("gen_arc_loop"); wait(4.0); generator = getent("generator_origin", "targetname"); generator playloopsound("generator_loop"); wait(8.0); playsoundatposition ("amb_pa_system", speakerA.origin); } play_comp_sounds() { computer = getent("comp", "targetname"); computer playsound ("comp_start"); wait(6); computer playloopsound("comp_loop"); } init_zombie_asylum() { level.magic_box_uses = 1; flag_init("both_doors_opened"); flag_init("electric_switch_used"); flag_set("spawn_point_override"); level thread init_elec_trap_trigs(); level thread init_lights(); water_trigs = getentarray("waterfall","targetname"); array_thread(water_trigs,::watersheet_on_trigger); } init_lights() { tinhats = []; arms = []; ents = getentarray("elect_light_model","targetname"); for(i=0;i 70*70) { timer = 0; continue; } if(dist < 70*70 && timer < 3) { wait(0.5); timer ++; } if(dist < 70*70 && timer == 3) { wait(3); self notify ("warning_dialog"); } } } } hint_string( string ) { self SetHintString( string ); self SetCursorHint( "HINT_NOICON" ); } electric_trap_think() { self.is_available = undefined; self.zombie_cost = 1000; self.in_use = 0; self sethintstring( &"ZOMBIE_NEED_POWER" ); self SetCursorHint( "HINT_NOICON" ); flag_wait( "power_on" ); while(1) { self sethintstring( &"ZOMBIE_BUTTON_BUY_TRAP", self.zombie_cost ); self waittill("trigger",who); if( who in_revive_trigger() ) { continue; } if(!isDefined(self.is_available)) { continue; } if( is_player_valid( who ) ) { if( who.score >= self.zombie_cost ) { if(!self.in_use) { self.in_use = 1; play_sound_at_pos( "purchase", who.origin ); self thread electric_trap_move_switch(self); self waittill("switch_activated"); who maps\_zombiemode_score::minus_to_player_score( self.zombie_cost ); self sethintstring( &"ZOMBIE_TRAP_ACTIVE" ); self.zombie_dmg_trig = getent(self.target,"targetname"); self.zombie_dmg_trig trigger_on(); self thread activate_electric_trap(); self waittill("elec_done"); clientnotify(self.script_string +"off"); if(isDefined(self.fx_org)) { self.fx_org delete(); } if(isDefined(self.zapper_fx_org)) { self.zapper_fx_org delete(); } if(isDefined(self.zapper_fx_switch_org)) { self.zapper_fx_switch_org delete(); } self.zombie_dmg_trig trigger_off(); self sethintstring( &"ZOMBIE_TRAP_COOLDOWN" ); wait(25); speakerA = getstruct("loudspeaker", "targetname"); playsoundatposition("warning", speakera.origin); self notify("available"); self.in_use = 0; } } } } } electric_trap_move_switch(parent) { tswitch = getent(parent.script_linkto,"script_linkname"); if(tswitch.script_linkname == "4") { north_zapper_light_red(); tswitch rotatepitch(-180,.5); tswitch playsound("amb_sparks_l_b"); tswitch waittill("rotatedone"); self notify("switch_activated"); self waittill("available"); tswitch rotatepitch(180,.5); north_zapper_light_green(); } else { south_zapper_light_red(); tswitch rotatepitch(180,.5); tswitch playsound("amb_sparks_l_b"); tswitch waittill("rotatedone"); self notify("switch_activated"); self waittill("available"); tswitch rotatepitch(-180,.5); south_zapper_light_green(); } } activate_electric_trap() { if(isDefined(self.script_string) && self.script_string == "north") { machine = getent("zap_machine_north","targetname"); machine setmodel("zombie_zapper_power_box_on"); clientnotify("north"); } else { machine = getent("zap_machine_south","targetname"); machine setmodel("zombie_zapper_power_box_on"); clientnotify("south"); } clientnotify(self.target); fire_points = getstructarray(self.target,"targetname"); for(i=0;i 90 && level.burning_zombies.size < 6) { level.burning_zombies[level.burning_zombies.size] = self; self thread zombie_flame_watch(); self playsound("zmb_ignite"); self thread animscripts\zombie_death::flame_death_fx(); wait(randomfloat(1.25)); } else { refs[0] = "guts"; refs[1] = "right_arm"; refs[2] = "left_arm"; refs[3] = "right_leg"; refs[4] = "left_leg"; refs[5] = "no_legs"; refs[6] = "head"; self.a.gib_ref = refs[randomint(refs.size)]; playsoundatposition("zmb_zombie_arc", self.origin); if(randomint(100) > 40 ) { self thread electroctute_death_fx(); self thread play_elec_vocals(); } wait(randomfloat(1.25)); self playsound("zmb_zombie_arc"); } self dodamage(self.health + 666, self.origin); } zombie_flame_watch() { self waittill("death"); self stoploopsound(); level.burning_zombies = array_remove_nokeys(level.burning_zombies,self); } spawn_point_override() { flag_wait( "all_players_connected" ); players = get_players(); north_structs = getstructarray("north_spawn","script_noteworthy"); south_structs = getstructarray("south_spawn","script_noteworthy"); side1 = north_structs; side2 = south_structs; if(randomint(100)>50) { side1 = south_structs; side2 = north_structs; } for( i = 0; i < players.size; i++ ) { if(i<2) { players[i] setorigin( side1[i].origin ); players[i] setplayerangles( side1[i].angles ); players[i].respawn_point = side1[i]; players[i].spawn_side = side1[i].script_noteworthy; players[i].spectator_respawn = side1[i]; } else { players[i] setorigin( side2[i].origin); players[i] setplayerangles( side2[i].angles); players[i].respawn_point = side2[i]; players[i].spawn_side = side2[i].script_noteworthy; players[i].spectator_respawn = side2[i]; } } } disable_bump_trigger(triggername) { triggers = GetEntArray( "audio_bump_trigger", "targetname"); if(IsDefined (triggers)) { for(i=0;i