
Johnny Reklaw
Member-
Posts
288 -
Joined
-
Last visited
Content Type
Profiles
News & Announcements
Zombies Library
Easter Egg Guides
Intel
Forums
Everything posted by Johnny Reklaw
-
Part 2 of above... remote_revive_watch() { self endon( "death" ); self endon( "player_revived" ); self waittill( "remote_revive", reviver ); self maps\_laststand::remote_revive( reviver ); } player_laststand( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration ) { // Grab the perks, we'll give them back to the player if he's revived //self.laststand_perks = maps\_zombiekmode_deathcard::deathcard_save_perks( self ); //AYERS: Working on Laststand Audio /* players = get_players(); if( players.size >= 2 ) { self clientnotify( "lststnd" ); } */ //if ( IsDefined( level.deathcard_laststand_func ) ) //{ // self [[ level.deathcard_laststand_func ]](); //} self clear_is_drinking(); self thread remote_revive_watch(); self maps\_zombiemode_score::player_downed_penalty(); self thread last_stand_grenade_save_and_return(); if( sMeansOfDeath != "MOD_SUICIDE" && sMeansOfDeath != "MOD_FALLING" ) { self maps\_zombiemode_audio::create_and_play_dialog( "general", "revive_down" ); } bbPrint( "zombie_playerdeaths: round %d playername %s deathtype downed x %f y %f z %f", level.round_number, self.playername, self.origin ); if( IsDefined( level._zombie_minigun_powerup_last_stand_func ) ) { self [ [ level._zombie_minigun_powerup_last_stand_func ] ](); } if( IsDefined( self.intermission ) && self.intermission ) { //maps\_zombiemode_challenges::doMissionCallback( "playerDied", self ); bbPrint( "zombie_playerdeaths: round %d playername %s deathtype died x %f y %f z %f", level.round_number, self.playername, self.origin ); level waittill( "forever" ); } } spawnSpectator() { self endon( "disconnect" ); self endon( "spawned_spectator" ); self notify( "spawned" ); self notify( "end_respawn" ); if( level.intermission ) { return; } if( IsDefined( level.no_spectator ) && level.no_spectator ) { wait( 3 ); ExitLevel(); } // The check_for_level_end looks for this self.is_zombie = true; // Remove all reviving abilities self notify ( "zombified" ); if( IsDefined( self.revivetrigger ) ) { self.revivetrigger delete(); self.revivetrigger = undefined; } self.zombification_time = GetTime(); //set time when player died resetTimeout(); // Stop shellshock and rumble self StopShellshock(); self StopRumble( "damage_heavy" ); self.sessionstate = "spectator"; self.spectatorclient = -1; self remove_from_spectate_list(); self.maxhealth = self.health; self.shellshocked = false; self.inWater = false; self.friendlydamage = undefined; self.hasSpawned = true; self.spawnTime = GetTime(); self.afk = false; println( "*************************Zombie Spectator***" ); self detachAll(); self setSpectatePermissions( true ); self thread spectator_thread(); self Spawn( self.origin, self.angles ); self notify( "spawned_spectator" ); } setSpectatePermissions( isOn ) { self AllowSpectateTeam( "allies", isOn ); self AllowSpectateTeam( "axis", false ); self AllowSpectateTeam( "freelook", false ); self AllowSpectateTeam( "none", false ); } spectator_thread() { self endon( "disconnect" ); self endon( "spawned_player" ); /* we are not currently supporting the shared screen tech if( IsSplitScreen() ) { last_alive = undefined; players = get_players(); for( i = 0; i { if( !players[i].is_zombie ) { last_alive = players[i]; } } share_screen( last_alive, true ); return; } */ // self thread spectator_toggle_3rd_person(); } spectator_toggle_3rd_person() { self endon( "disconnect" ); self endon( "spawned_player" ); third_person = true; self set_third_person( true ); // self NotifyOnCommand( "toggle_3rd_person", "weapnext" ); // while( 1 ) // { // self waittill( "toggle_3rd_person" ); // // if( third_person ) // { // third_person = false; // self set_third_person( false ); // wait( 0.5 ); // } // else // { // third_person = true; // self set_third_person( true ); // wait( 0.5 ); // } // } } set_third_person( value ) { if( value ) { self SetClientDvars( "cg_thirdPerson", "1", "cg_fov", "40", "cg_thirdPersonAngle", "354" ); self setDepthOfField( 0, 128, 512, 4000, 6, 1.8 ); } else { self SetClientDvars( "cg_thirdPerson", "0", "cg_fov", "65", "cg_thirdPersonAngle", "0" ); self setDepthOfField( 0, 0, 512, 4000, 4, 0 ); } } last_stand_revive() { level endon( "between_round_over" ); players = getplayers(); for ( i = 0; i { if ( players[i] maps\_laststand::player_is_in_laststand() && players[i].revivetrigger.beingRevived == 0 ) { players[i] maps\_laststand::auto_revive(); } } } // ww: arrange the last stand pistols so when it come time to choose which one they are inited last_stand_pistol_rank_init() { level.pistol_values = []; flag_wait( "_start_zm_pistol_rank" ); if( flag( "solo_game" ) ) { // ww: in a solo game the ranking of the pistols is a bit different based on the upgraded 1911 swap // any pistol ranked 8 or lower will be ignored and the player will be given the upgraded 1911 level.pistol_values[ level.pistol_values.size ] = "m1911_zm"; level.pistol_values[ level.pistol_values.size ] = "knife_ballistic_zm"; level.pistol_values[ level.pistol_values.size ] = "knife_ballistic_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "knife_ballistic_bowie_zm"; level.pistol_values[ level.pistol_values.size ] = "knife_ballistic_bowie_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "cz75_zm"; level.pistol_values[ level.pistol_values.size ] = "cz75dw_zm"; level.pistol_values[ level.pistol_values.size ] = "python_zm"; level.pistol_values[ level.pistol_values.size ] = "python_upgraded_zm"; // ww: this is spot 8, anything scoring lower than this should be replaced level.pistol_values[ level.pistol_values.size ] = "cz75_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "cz75dw_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "m1911_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "ray_gun_zm"; level.pistol_values[ level.pistol_values.size ] = "freezegun_zm"; level.pistol_values[ level.pistol_values.size ] = "ray_gun_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "freezegun_upgraded_zm"; } else { level.pistol_values[ level.pistol_values.size ] = "m1911_zm"; level.pistol_values[ level.pistol_values.size ] = "knife_ballistic_zm"; level.pistol_values[ level.pistol_values.size ] = "knife_ballistic_bowie_zm"; level.pistol_values[ level.pistol_values.size ] = "cz75_zm"; level.pistol_values[ level.pistol_values.size ] = "cz75dw_zm"; level.pistol_values[ level.pistol_values.size ] = "python_zm"; level.pistol_values[ level.pistol_values.size ] = "python_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "cz75_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "cz75dw_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "m1911_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "knife_ballistic_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "knife_ballistic_bowie_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "ray_gun_zm"; level.pistol_values[ level.pistol_values.size ] = "freezegun_zm"; level.pistol_values[ level.pistol_values.size ] = "ray_gun_upgraded_zm"; level.pistol_values[ level.pistol_values.size ] = "freezegun_upgraded_zm"; } } // ww: changing the _laststand scripts to this one so we interfere with SP less last_stand_pistol_swap() { self GiveWeapon( self.laststandpistol ); ammoclip = WeaponClipSize( self.laststandpistol ); if( IsDefined( self._special_solo_pistol_swap ) && self._special_solo_pistol_swap == 1 ) { self._special_solo_pistol_swap = 0; self.hadpistol = false; } if ( self.laststandpistol == "ray_gun_zm" || self.laststandpistol == "ray_gun_upgraded_zm" ) { self SetWeaponAmmoClip( self.laststandpistol, ammoclip ); self SetWeaponAmmoStock( self.laststandpistol, 0 ); } else { self SetWeaponAmmoStock( self.laststandpistol, ammoclip * 2 ); } // self GiveWeapon( "knife_zm" ); self SwitchToWeapon( self.laststandpistol ); } // ww: make sure the player has the best pistol when they go in to last stand last_stand_best_pistol() { pistol_array = []; current_weapons = self GetWeaponsListPrimaries(); for( i = 0; i { // make sure the weapon is a pistol if( WeaponClass( current_weapons[i] ) == "pistol" ) { pistol_array_index = pistol_array.size; // set up the spot in the array pistol_array[ pistol_array_index ] = SpawnStruct(); // struct to store info on pistol_array[ pistol_array_index ].gun = current_weapons[i]; pistol_array[ pistol_array_index ].value = 0; // add a value in case a new weapon is introduced that hasn't been set up in level.pistol_values // compare the current weapon to the level.pistol_values to see what the value is for( j = 0; j { if( level.pistol_values[j] == current_weapons[i] ) { pistol_array[ pistol_array_index ].value = j; break; } } } } self.laststandpistol = last_stand_compare_pistols( pistol_array ); } // ww: compares the array passed in for the highest valued pistol last_stand_compare_pistols( struct_array ) { if( !IsArray( struct_array ) || struct_array.size { return level.laststandpistol; // nothing in the array then give the level last stand pistol } highest_score_pistol = struct_array[0]; // first time through give the first one to the highest score for( i = 1; i { if( struct_array[i].value > highest_score_pistol.value ) { highest_score_pistol = struct_array[i]; } } if( flag( "solo_game" ) ) { self._special_solo_pistol_swap = 0; // ww: this way the weapon knows to pack texture when given if( highest_score_pistol.value { self._special_solo_pistol_swap = 1; return level.laststandpistol; // ww: if it scores too low the player gets the 1911 upgraded } else { return highest_score_pistol.gun; // ww: gun is high in ranking and won't be replaced } } else // ww: happens when not in solo { return highest_score_pistol.gun; } } // ww: override function for saving player pistol ammo count last_stand_save_pistol_ammo() { weapon_inventory = self GetWeaponsList(); self.stored_weapon_info = []; for( i = 0; i { weapon = weapon_inventory[i]; if ( WeaponClass( weapon ) == "pistol" ) { self.stored_weapon_info[ weapon ] = SpawnStruct(); self.stored_weapon_info[ weapon ].clip_amt = self GetWeaponAmmoClip( weapon ); self.stored_weapon_info[ weapon ].stock_amt = self GetWeaponAmmoStock( weapon ); } } self last_stand_best_pistol(); } // ww: override to restore the player's pistol ammo after being picked up last_stand_restore_pistol_ammo() { if( !IsDefined( self.stored_weapon_info ) ) { return; } weapon_inventory = self GetWeaponsList(); weapon_to_restore = GetArrayKeys( self.stored_weapon_info ); for( i = 0; i { weapon = weapon_inventory[i]; for( j = 0; j { check_weapon = weapon_to_restore[j]; if( weapon == check_weapon ) { self SetWeaponAmmoClip( weapon_to_restore[j], self.stored_weapon_info[ weapon_to_restore[j] ].clip_amt ); self SetWeaponAmmoStock( weapon_to_restore[j], self.stored_weapon_info[ weapon_to_restore[j] ].stock_amt ); break; } } } } // ww: changes the last stand pistol to the upgraded 1911s if it is solo zombiemode_solo_last_stand_pistol() { level.laststandpistol = "m1911_upgraded_zm"; } // ww: zeros out the player's grenades until they revive last_stand_grenade_save_and_return() { self endon( "death" ); frag_nade_amt = 0; has_frag = false; monkey_nade_amt = 0; has_monkey = false; // figure out which nades this player has weapons_on_player = self GetWeaponsList(); for( i = 0; i { if( weapons_on_player[i] == "frag_grenade_zm" ) { has_frag = true; frag_nade_amt = self GetWeaponAmmoClip( "frag_grenade_zm" ); self SetWeaponAmmoClip( "frag_grenade_zm", 0 ); } else if( weapons_on_player[i] == "zombie_cymbal_monkey" ) { has_monkey = true; monkey_nade_amt = self GetWeaponAmmoClip( "zombie_cymbal_monkey" ); self SetWeaponAmmoClip( "zombie_cymbal_monkey", 0 ); } } self waittill( "player_revived" ); if( has_frag ) { if( frag_nade_amt > self GetWeaponAmmoClip( "frag_grenade_zm" ) ) { self SetWeaponAmmoClip( "frag_grenade_zm", frag_nade_amt ); } } if( has_monkey ) { if( monkey_nade_amt > self GetWeaponAmmoClip( "zombie_cymbal_monkey" ) ) { self SetWeaponAmmoClip( "zombie_cymbal_monkey", monkey_nade_amt ); } } } spectators_respawn() { level endon( "between_round_over" ); if( !IsDefined( level.zombie_vars["spectators_respawn"] ) || !level.zombie_vars["spectators_respawn"] ) { return; } if( !IsDefined( level.custom_spawnPlayer ) ) { // Custom spawn call for when they respawn from spectator level.custom_spawnPlayer = ::spectator_respawn; } while( 1 ) { players = get_players(); for( i = 0; i { if( players[i].sessionstate == "spectator" ) { players[i] [[level.spawnPlayer]](); if (isDefined(level.script) && level.round_number > 6 && players[i].score { players[i].old_score = players[i].score; players[i].score = 1500; players[i] maps\_zombiemode_score::set_player_score_hud(); } } } wait( 1 ); } } spectator_respawn() { println( "*************************Respawn Spectator***" ); assert( IsDefined( self.spectator_respawn ) ); origin = self.spectator_respawn.origin; angles = self.spectator_respawn.angles; self setSpectatePermissions( false ); new_origin = undefined; new_origin = check_for_valid_spawn_near_team( self ); if( IsDefined( new_origin ) ) { self Spawn( new_origin, angles ); } else { self Spawn( origin, angles ); } /* we are not currently supporting the shared screen tech if( IsSplitScreen() ) { last_alive = undefined; players = get_players(); for( i = 0; i { if( !players[i].is_zombie ) { last_alive = players[i]; } } share_screen( last_alive, false ); } */ //DCS: if player has claymores, take away. if(IsDefined(self.has_claymores)) { self.has_claymores = undefined; self TakeWeapon("claymore_zm"); } self.has_betties = undefined; self.is_burning = undefined; self.abilities = []; // The check_for_level_end looks for this self.is_zombie = false; self.ignoreme = false; setClientSysState("lsm", "0", self); // Notify client last stand ended. self RevivePlayer(); self notify( "spawned_player" ); // Penalize the player when we respawn, since he 'died' self maps\_zombiemode_score::player_reduce_points( "died" ); //DCS: make bowie & claymore trigger available again. bowie_triggers = GetEntArray( "bowie_upgrade", "targetname" ); // ww: player needs to reset trigger knowledge without claiming full ownership self._bowie_zm_equipped = undefined; players = get_players(); for( i = 0; i { bowie_triggers[i] SetVisibleToAll(); // check the player to see if he has the bowie, if they do trigger goes invisible for( j = 0; j { if( IsDefined( players[j]._bowie_zm_equipped ) && players[j]._bowie_zm_equipped == 1 ) { bowie_triggers[i] SetInvisibleToPlayer( players[j] ); } } } // ww: inside _zombiemode_claymore the claymore triggers are fixed for players who haven't bought them // to see them after someone respawns from bleedout // it isn't the best way to do it but it is late in the project and probably better if i don't modify it // unless a bug comes through on it claymore_triggers = getentarray("claymore_purchase","targetname"); for(i = 0; i { claymore_triggers[i] SetVisibleToPlayer(self); claymore_triggers[i].claymores_triggered = false; } self thread player_zombie_breadcrumb(); return true; } check_for_valid_spawn_near_team( revivee ) { players = get_players(); spawn_points = getstructarray("player_respawn_point", "targetname"); closest_group = undefined; closest_distance = 100000000; backup_group = undefined; backup_distance = 100000000; if( spawn_points.size == 0 ) return undefined; // Look for the closest group that is within the specified ideal distances // If we can't find one within a valid area, use the closest unlocked group. for( i = 0; i { if( is_player_valid( players[i] ) ) { for( j = 0 ; j { if( isdefined(spawn_points[i].script_int) ) ideal_distance = spawn_points[i].script_int; else ideal_distance = 1000; if ( spawn_points[j].locked == false ) { distance = DistanceSquared( players[i].origin, spawn_points[j].origin ); if( distance { if ( distance { closest_distance = distance; closest_group = j; } } else { if ( distance { backup_group = j; backup_distance = distance; } } } } } // If we don't have a closest_group, let's use the backup if ( !IsDefined( closest_group ) ) { closest_group = backup_group; } if ( IsDefined( closest_group ) ) { spawn_array = getstructarray( spawn_points[closest_group].target, "targetname" ); for( k = 0; k { if( spawn_array[k].script_int == (revivee.entity_num + 1) ) { return spawn_array[k].origin; } } return spawn_array[0].origin; } } return undefined; } get_players_on_team(exclude) { teammates = []; players = get_players(); for(i=0;i { //check to see if other players on your team are alive and not waiting to be revived if(players[i].spawn_side == self.spawn_side && !isDefined(players[i].revivetrigger) && players[i] != exclude ) { teammates[teammates.size] = players[i]; } } return teammates; } get_safe_breadcrumb_pos( player ) { players = get_players(); valid_players = []; min_dist = 150 * 150; for( i = 0; i { if( !is_player_valid( players[i] ) ) { continue; } valid_players[valid_players.size] = players[i]; } for( i = 0; i { count = 0; for( q = 1; q { if( DistanceSquared( player.zombie_breadcrumbs[q], valid_players[i].origin ) { continue; } count++; if( count == valid_players.size ) { return player.zombie_breadcrumbs[q]; } } } return undefined; } default_max_zombie_func( max_num ) { max = max_num; if ( level.first_round ) { max = int( max_num * 0.25 ); } else if (level.round_number { max = int( max_num * 0.3 ); } else if (level.round_number { max = int( max_num * 0.5 ); } else if (level.round_number { max = int( max_num * 0.7 ); } else if (level.round_number { max = int( max_num * 0.9 ); } return max; } round_spawning() { level endon( "intermission" ); level endon( "end_of_round" ); level endon( "restart_round" ); /# level endon( "kill_round" ); #/ if( level.intermission ) { return; } if( level.enemy_spawns.size { ASSERTMSG( "No active spawners in the map. Check to see if the zone is active and if it's pointing to spawners." ); return; } /# if ( GetDvarInt( #"zombie_cheat" ) == 2 || GetDvarInt( #"zombie_cheat" ) >= 4 ) { return; } #/ ai_calculate_health( level.round_number ); count = 0; //CODER MOD: TOMMY K players = get_players(); for( i = 0; i { players[i].zombification_time = 0; } max = level.zombie_vars["zombie_max_ai"]; multiplier = level.round_number / 5; if( multiplier { multiplier = 1; } // After round 10, exponentially have more AI attack the player if( level.round_number >= 10 ) { multiplier *= level.round_number * 0.15; } player_num = get_players().size; if( player_num == 1 ) { max += int( ( 0.5 * level.zombie_vars["zombie_ai_per_player"] ) * multiplier ); } else { max += int( ( ( player_num - 1 ) * level.zombie_vars["zombie_ai_per_player"] ) * multiplier ); } if( !isDefined( level.max_zombie_func ) ) { level.max_zombie_func = ::default_max_zombie_func; } // Now set the total for the new round, except when it's already been set by the // kill counter. if ( !(IsDefined( level.kill_counter_hud ) && level.zombie_total > 0) ) { level.zombie_total = [[ level.max_zombie_func ]]( max ); } if ( level.round_number { level thread zombie_speed_up(); } mixed_spawns = 0; // Number of mixed spawns this round. Currently means number of dogs in a mixed round // DEBUG HACK: //max = 1; old_spawn = undefined; // while( level.zombie_total > 0 ) while( 1 ) { while( get_enemy_count() > 31 || level.zombie_total { wait( 0.1 ); } // added ability to pause zombie spawning if ( !flag("spawn_zombies" ) ) { flag_wait( "spawn_zombies" ); } spawn_point = level.enemy_spawns[RandomInt( level.enemy_spawns.size )]; if( !IsDefined( old_spawn ) ) { old_spawn = spawn_point; } else if( Spawn_point == old_spawn ) { spawn_point = level.enemy_spawns[RandomInt( level.enemy_spawns.size )]; } old_spawn = spawn_point; // iPrintLn(spawn_point.targetname + " " + level.zombie_vars["zombie_spawn_delay"]); // MM Mix in dog spawns... if ( IsDefined( level.mixed_rounds_enabled ) && level.mixed_rounds_enabled == 1 ) { spawn_dog = false; if ( level.round_number > 30 ) { if ( RandomInt(100) { spawn_dog = true; } } else if ( level.round_number > 25 && mixed_spawns { if ( RandomInt(100) { spawn_dog = true; } } else if ( level.round_number > 20 && mixed_spawns { if ( RandomInt(100) { spawn_dog = true; } } else if ( level.round_number > 15 && mixed_spawns { if ( RandomInt(100) { spawn_dog = true; } } if ( spawn_dog ) { keys = GetArrayKeys( level.zones ); for ( i=0; i { if ( level.zones[ keys[i] ].is_occupied ) { akeys = GetArrayKeys( level.zones[ keys[i] ].adjacent_zones ); for ( k=0; k { if ( level.zones[ akeys[k] ].is_active && !level.zones[ akeys[k] ].is_occupied && level.zones[ akeys[k] ].dog_locations.size > 0 ) { maps\_zombiemode_ai_dogs::special_dog_spawn( undefined, 1 ); level.zombie_total--; wait_network_frame(); } } } } } } ai = spawn_zombie( spawn_point ); if( IsDefined( ai ) ) { level.zombie_total--; ai thread round_spawn_failsafe(); count++; } wait( level.zombie_vars["zombie_spawn_delay"] ); wait_network_frame(); } } // // Make the last few zombies run // zombie_speed_up() { if( level.round_number { return; } level endon( "intermission" ); level endon( "end_of_round" ); level endon( "restart_round" ); /# level endon( "kill_round" ); #/ // Wait until we've finished spawning while ( level.zombie_total > 4 ) { wait( 2.0 ); } // Now wait for these guys to get whittled down num_zombies = get_enemy_count(); while( num_zombies > 3 ) { wait( 2.0 ); num_zombies = get_enemy_count(); } zombies = GetAiSpeciesArray( "axis", "all" ); while( zombies.size > 0 ) { if( zombies.size == 1 && zombies[0].has_legs == true ) { var = randomintrange(1, 4); zombies[0] set_run_anim( "sprint" + var ); zombies[0].run_combatanim = level.scr_anim[zombies[0].animname]["sprint" + var]; } wait(0.5); zombies = GetAiSpeciesArray( "axis", "all" ); } } // TESTING: spawn one zombie at a time round_spawning_test() { while (true) { spawn_point = level.enemy_spawns[RandomInt( level.enemy_spawns.size )]; // grab a random spawner ai = spawn_zombie( spawn_point ); ai waittill("death"); wait 5; } } ///////////////////////////////////////////////////////// // round_text( text ) // { // if( level.first_round ) // { // intro = true; // } // else // { // intro = false; // } // // hud = create_simple_hud(); // hud.horzAlign = "center"; // hud.vertAlign = "middle"; // hud.alignX = "center"; // hud.alignY = "middle"; // hud.y = -100; // hud.foreground = 1; // hud.fontscale = 16.0; // hud.alpha = 0; // hud.color = ( 1, 1, 1 ); // // hud SetText( text ); // hud FadeOverTime( 1.5 ); // hud.alpha = 1; // wait( 1.5 ); // // if( intro ) // { // wait( 1 ); // level notify( "intro_change_color" ); // } // // hud FadeOverTime( 3 ); // //hud.color = ( 0.8, 0, 0 ); // hud.color = ( 0.21, 0, 0 ); // wait( 3 ); // // if( intro ) // { // level waittill( "intro_hud_done" ); // } // // hud FadeOverTime( 1.5 ); // hud.alpha = 0; // wait( 1.5 ); // hud destroy(); // } // Allows the round to be paused. Displays a countdown timer. // round_pause( delay ) { if ( !IsDefined( delay ) ) { delay = 30; } level.countdown_hud = create_counter_hud(); level.countdown_hud SetValue( delay ); level.countdown_hud.color = ( 1, 1, 1 ); level.countdown_hud.alpha = 1; level.countdown_hud FadeOverTime( 2.0 ); wait( 2.0 ); level.countdown_hud.color = ( 0.21, 0, 0 ); level.countdown_hud FadeOverTime( 3.0 ); wait(3); while (delay >= 1) { wait (1); delay--; level.countdown_hud SetValue( delay ); } // Zero! Play end sound players = GetPlayers(); for (i=0; i { players[i] playlocalsound( "zmb_perks_packa_ready" ); } level.countdown_hud FadeOverTime( 1.0 ); level.countdown_hud.color = (1,1,1); level.countdown_hud.alpha = 0; wait( 1.0 ); level.countdown_hud destroy_hud(); } // Zombie spawning // round_start() { if ( IsDefined(level.round_prestart_func) ) { [[ level.round_prestart_func ]](); } else { wait( 2 ); } level.zombie_health = level.zombie_vars["zombie_health_start"]; // so players get init'ed with grenades players = get_players(); for (i = 0; i { players[i] giveweapon( "frag_grenade_zm" ); players[i] setweaponammoclip( "frag_grenade_zm", 0); players[i] SetClientDvars( "ammoCounterHide", "0", "miniscoreboardhide", "0" ); //players[i] thread maps\_zombiemode_ability::give_round1_abilities(); } if( getDvarInt( #"scr_writeconfigstrings" ) == 1 ) { wait(5); ExitLevel(); return; } if( isDefined(level.chests) && isDefined(level.chest_index) ) { Objective_Add( 0, "active", "Mystery Box", level.chests[level.chest_index].chest_lid.origin, "minimap_icon_mystery_box" ); } if ( level.zombie_vars["game_start_delay"] > 0 ) { round_pause( level.zombie_vars["game_start_delay"] ); } flag_set( "begin_spawning" ); //maps\_zombiemode_solo::init(); level.chalk_hud1 = create_chalk_hud(); // if( level.round_number >= 1 && level.round_number // { // level.chalk_hud1 SetShader( "hud_chalk_" + level.round_number, 64, 64 ); // } // else if ( level.round_number >= 5 && level.round_number // { // level.chalk_hud1 SetShader( "hud_chalk_5", 64, 64 ); // } level.chalk_hud2 = create_chalk_hud( 64 ); // level waittill( "introscreen_done" ); if( !isDefined(level.round_spawn_func) ) { level.round_spawn_func = ::round_spawning; } /# if (GetDvarInt( #"zombie_rise_test")) { level.round_spawn_func = ::round_spawning_test; // FOR TESTING, one zombie at a time, no round advancement } #/ if ( !isDefined(level.round_wait_func) ) { level.round_wait_func = ::round_wait; } if ( !IsDefined(level.round_think_func) ) { level.round_think_func = ::round_think; } if( level.mutators["mutator_fogMatch"] ) { players = get_players(); for( i = 0; i { players[i] thread set_fog( 729.34, 971.99, 338.336, 398.623, 0.58, 0.60, 0.56, 3 ); } } level thread [[ level.round_think_func ]](); } // // create_chalk_hud( x ) { if( !IsDefined( x ) ) { x = 0; } hud = create_simple_hud(); hud.alignX = "left"; hud.alignY = "bottom"; hud.horzAlign = "user_left"; hud.vertAlign = "user_bottom"; hud.color = ( 0.21, 0, 0 ); hud.x = x; hud.y = -4; hud.alpha = 0; hud.fontscale = 32.0; hud SetShader( "hud_chalk_1", 64, 64 ); return hud; } // // destroy_chalk_hud() { if( isDefined( level.chalk_hud1 ) ) { level.chalk_hud1 Destroy(); level.chalk_hud1 = undefined; } if( isDefined( level.chalk_hud2 ) ) { level.chalk_hud2 Destroy(); level.chalk_hud2 = undefined; } } // // Let's the players know that you need power to open these play_door_dialog() { level endon( "power_on" ); self endon ("warning_dialog"); timer = 0; while(1) { wait(0.05); players = get_players(); for(i = 0; i { dist = distancesquared(players[i].origin, self.origin ); if(dist > 70*70) { timer =0; continue; } while(dist { wait(0.5); timer++; } if(dist > 70*70 && timer >= 3) { self playsound("door_deny"); players[i] maps\_zombiemode_audio::create_and_play_dialog( "general", "door_deny" ); wait(3); self notify ("warning_dialog"); //iprintlnbold("warning_given"); } } } } wait_until_first_player() { players = get_players(); if( !IsDefined( players[0] ) ) { level waittill( "first_player_ready" ); } } // // Set the current round number hud display chalk_one_up() { huds = []; huds[0] = level.chalk_hud1; huds[1] = level.chalk_hud2; // Hud1 shader if( level.round_number >= 1 && level.round_number { huds[0] SetShader( "hud_chalk_" + level.round_number, 64, 64 ); } else if ( level.round_number >= 5 && level.round_number { huds[0] SetShader( "hud_chalk_5", 64, 64 ); } // Hud2 shader if( level.round_number > 5 && level.round_number { huds[1] SetShader( "hud_chalk_" + ( level.round_number - 5 ), 64, 64 ); } // Display value if ( IsDefined( level.chalk_override ) ) { huds[0] SetText( level.chalk_override ); huds[1] SetText( " " ); } else if( level.round_number { huds[1] SetText( " " ); } else if( level.round_number > 10 ) { huds[0].fontscale = 32; huds[0] SetValue( level.round_number ); huds[1] SetText( " " ); } if(!IsDefined(level.doground_nomusic)) { level.doground_nomusic = 0; } if( level.first_round ) { intro = true; level thread play_level_start_vox_delayed(); } else { intro = false; } round = undefined; if( intro ) { // Create "ROUND" hud text round = create_simple_hud(); round.alignX = "center"; round.alignY = "bottom"; round.horzAlign = "user_center"; round.vertAlign = "user_bottom"; round.fontscale = 16; round.color = ( 1, 1, 1 ); round.x = 0; round.y = -265; round.alpha = 0; round SetText( &"ZOMBIE_ROUND" ); // huds[0] FadeOverTime( 0.05 ); huds[0].color = ( 1, 1, 1 ); huds[0].alpha = 0; huds[0].horzAlign = "user_center"; huds[0].x = -5; huds[0].y = -200; huds[1] SetText( " " ); // Fade in white round FadeOverTime( 1 ); round.alpha = 1; huds[0] FadeOverTime( 1 ); huds[0].alpha = 1; wait( 1 ); // Fade to red round FadeOverTime( 2 ); round.color = ( 0.21, 0, 0 ); huds[0] FadeOverTime( 2 ); huds[0].color = ( 0.21, 0, 0 ); wait(2); } else { for ( i=0; i { huds[i] FadeOverTime( 0.5 ); huds[i].alpha = 0; } wait( 0.5 ); } // if( (level.round_number = 11) && IsDefined( level.chalk_hud2 ) ) // { // huds[1] = undefined; // } // for ( i=0; i { huds[i] FadeOverTime( 2 ); huds[i].alpha = 1; } if( intro ) { wait( 3 ); if( IsDefined( round ) ) { round FadeOverTime( 1 ); round.alpha = 0; } wait( 0.25 ); level notify( "intro_hud_done" ); huds[0] MoveOverTime( 1.75 ); huds[0].horzAlign = "user_left"; // huds[0].x = 0; huds[0].y = -4; wait( 2 ); round destroy_hud(); } else { for ( i=0; i { huds[i].color = ( 1, 1, 1 ); } } // Okay now wait just a bit to let the number set in if ( !intro ) { wait( 2 ); for ( i=0; i { huds[i] FadeOverTime( 1 ); huds[i].color = ( 0.21, 0, 0 ); } } ReportMTU(level.round_number); // In network debug instrumented builds, causes network spike report to generate. // Remove any override set since we're done with it if ( IsDefined( level.chalk_override ) ) { level.chalk_override = undefined; } } // Flash the round display at the end of the round // chalk_round_over() { huds = []; huds[huds.size] = level.chalk_hud1; huds[huds.size] = level.chalk_hud2; if( level.round_number 10 ) { level.chalk_hud2 SetText( " " ); } time = level.zombie_vars["zombie_between_round_time"]; if ( time > 3 ) { time = time - 2; // add this deduction back in at the bottom } for( i = 0; i { if( IsDefined( huds[i] ) ) { huds[i] FadeOverTime( time * 0.25 ); huds[i].color = ( 1, 1, 1 ); } } // Pulse fade_time = 0.5; steps = ( time * 0.5 ) / fade_time; for( q = 0; q { for( i = 0; i { if( !IsDefined( huds[i] ) ) { continue; } huds[i] FadeOverTime( fade_time ); huds[i].alpha = 0; } wait( fade_time ); for( i = 0; i { if( !IsDefined( huds[i] ) ) { continue; } huds[i] FadeOverTime( fade_time ); huds[i].alpha = 1; } wait( fade_time ); } for( i = 0; i { if( !IsDefined( huds[i] ) ) { continue; } huds[i] FadeOverTime( time * 0.25 ); // huds[i].color = ( 0.8, 0, 0 ); huds[i].color = ( 0.21, 0, 0 ); huds[i].alpha = 0; } wait ( 2.0 ); } round_think() { for( ;; ) { ////////////////////////////////////////// //designed by prod DT#36173 maxreward = 50 * level.round_number; if ( maxreward > 500 ) maxreward = 500; level.zombie_vars["rebuild_barrier_cap_per_round"] = maxreward; ////////////////////////////////////////// level.pro_tips_start_time = GetTime(); level.zombie_last_run_time = GetTime(); // Resets the last time a zombie ran level thread maps\_zombiemode_audio::change_zombie_music( "round_start" ); chalk_one_up(); // round_text( &"ZOMBIE_ROUND_BEGIN" ); maps\_zombiemode_powerups::powerup_round_start(); players = get_players(); array_thread( players, maps\_zombiemode_blockers::rebuild_barrier_reward_reset ); //array_thread( players, maps\_zombiemode_ability::giveHardpointItems ); level thread award_grenades_for_survivors(); bbPrint( "zombie_rounds: round %d player_count %d", level.round_number, players.size ); level.round_start_time = GetTime(); level thread [[level.round_spawn_func]](); level notify( "start_of_round" ); [[level.round_wait_func]](); level.first_round = false; level notify( "end_of_round" ); level thread maps\_zombiemode_audio::change_zombie_music( "round_end" ); UploadStats(); if ( 1 != players.size ) { level thread spectators_respawn(); //level thread last_stand_revive(); } // round_text( &"ZOMBIE_ROUND_END" ); level chalk_round_over(); // here's the difficulty increase over time area timer = level.zombie_vars["zombie_spawn_delay"]; if ( timer > 0.08 ) { level.zombie_vars["zombie_spawn_delay"] = timer * 0.95; } else if ( timer { level.zombie_vars["zombie_spawn_delay"] = 0.08; } // // Increase the zombie move speed level.zombie_move_speed = level.round_number * level.zombie_vars["zombie_move_speed_multiplier"]; // iPrintlnBold( "End of Round " + level.round_number ); // for ( i=0; i // { // iPrintlnBold( "Team Pool "+(i+1)+" score: ", level.team_pool[i].score_total ); // } // // players = get_players(); // for ( p=0; p // { // iPrintlnBold( "Total Player "+(p+1)+" score : "+ players[p].score_total ); // } level.round_number++; level notify( "between_round_over" ); } } award_grenades_for_survivors() { players = get_players(); for (i = 0; i { if (!players[i].is_zombie) { if( !players[i] HasWeapon( "frag_grenade_zm" ) ) { players[i] GiveWeapon( "frag_grenade_zm" ); players[i] SetWeaponAmmoClip( "frag_grenade_zm", 0 ); } if ( players[i] GetFractionMaxAmmo( "frag_grenade_zm") { players[i] SetWeaponAmmoClip( "frag_grenade_zm", 2 ); } else if (players[i] GetFractionMaxAmmo( "frag_grenade_zm") { players[i] SetWeaponAmmoClip( "frag_grenade_zm", 3 ); } else { players[i] SetWeaponAmmoClip( "frag_grenade_zm", 4 ); } } } } ai_calculate_health( round_number ) { level.zombie_health = level.zombie_vars["zombie_health_start"]; for ( i=2; i { // After round 10, get exponentially harder if( i >= 10 ) { level.zombie_health += Int( level.zombie_health * level.zombie_vars["zombie_health_increase_multiplier"] ); } else { level.zombie_health = Int( level.zombie_health + level.zombie_vars["zombie_health_increase"] ); } } } //put the conditions in here which should //cause the failsafe to reset round_spawn_failsafe() { self endon("death");//guy just died ////////////////////////////////////////////////////////////// //FAILSAFE "hack shit" DT#33203 ////////////////////////////////////////////////////////////// prevorigin = self.origin; while(1) { if( !level.zombie_vars["zombie_use_failsafe"] ) { return; } wait( 30 ); //if i've torn a board down in the last 5 seconds, just //wait 30 again. if ( isDefined(self.lastchunk_destroy_time) ) { if ( (GetTime() - self.lastchunk_destroy_time) continue; } //fell out of world if ( self.origin[2] { self dodamage( self.health + 100, (0,0,0) ); break; } //hasnt moved 24 inches in 30 seconds? if ( DistanceSquared( self.origin, prevorigin ) { // DEBUG HACK self dodamage( self.health + 100, (0,0,0) ); break; } prevorigin = self.origin; } ////////////////////////////////////////////////////////////// //END OF FAILSAFE "hack shit" ////////////////////////////////////////////////////////////// } // Waits for the time and the ai to die round_wait() { /# if (GetDvarInt( #"zombie_rise_test")) { level waittill("forever"); // TESTING: don't advance rounds } #/ /# if ( GetDvarInt( #"zombie_cheat" ) == 2 || GetDvarInt( #"zombie_cheat" ) >= 4 ) { level waittill("forever"); } #/ wait( 1 ); if( flag("dog_round" ) ) { wait(7); while( level.dog_intermission ) { wait(0.5); } } else { while( get_enemy_count() > 0 || level.zombie_total > 0 || level.intermission ) { if( flag( "end_round_wait" ) ) { return; } wait( 1.0 ); } } } is_friendly_fire_on() { return level.mutators[ "mutator_friendlyFire" ]; } can_revive( reviver ) { if( self HasWeapon( "minigun_zm" ) ) { return false; } return true; }
-
_Zombiemode (Please note, this one is too large to post in one post...it is continued in the next two replies to this) #include maps\_anim; #include maps\_utility; #include common_scripts\utility; #include maps\_music; #include maps\_zombiemode_utility; #include maps\_busing; #using_animtree( "generic_human" ); main() { level.zombiemode = true; level.reviveFeature = false; level.contextualMeleeFeature = false; level.swimmingFeature = false; level.zombie_visionset = "zombie_neutral"; precache_shaders(); precache_models(); PrecacheItem( "frag_grenade_zm" ); PrecacheItem( "claymore_zm" ); //override difficulty level.skill_override = 1; maps\_gameskill::setSkill(undefined,level.skill_override); level._ZOMBIE_GIB_PIECE_INDEX_ALL = 0; level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_ARM = 1; level._ZOMBIE_GIB_PIECE_INDEX_LEFT_ARM = 2; level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_LEG = 3; level._ZOMBIE_GIB_PIECE_INDEX_LEFT_LEG = 4; level._ZOMBIE_GIB_PIECE_INDEX_HEAD = 5; level._ZOMBIE_GIB_PIECE_INDEX_GUTS = 6; init_dvars(); init_mutators(); init_strings(); init_levelvars(); init_animscripts(); init_sounds(); init_shellshocks(); init_flags(); init_client_flags(); //Limit zombie to 24 max, must have for network purposes SetAILimit( 24 ); init_fx(); //maps\_zombiemode_ability::init(); // load map defaults maps\_zombiemode_load::main(); // Initialize the zone manager above any scripts that make use of zone info maps\_zombiemode_zone_manager::init(); // Call the other zombiemode scripts maps\_zombiemode_audio::audio_init(); //maps\_zombiemode_challenges::init(); maps\_zombiemode_claymore::init(); maps\_zombiemode_weapons::init(); maps\_zombiemode_blockers::init(); maps\_zombiemode_spawner::init(); maps\_zombiemode_powerups::init(); maps\_zombiemode_perks::init(); maps\_zombiemode_user::init(); maps\_zombiemode_weap_cymbal_monkey::init(); maps\_zombiemode_weap_freezegun::init(); maps\_zombiemode_weap_tesla::init(); maps\_zombiemode_weap_thundergun::init(); maps\_zombiemode_weap_crossbow::init(); //Z2 TEMP DISABLE DURING INTEGRATION maps\_zombiemode_bowie::bowie_init(); // maps\_zombiemode_betty::init(); // maps\_zombiemode_timer::init(); // maps\_zombiemode_auto_turret::init(); //maps\_zombiemode_protips::pro_tips_initialize(); maps\_zombiemode_traps::init(); maps\_zombiemode_weapon_box::init(); /# maps\_zombiemode_devgui::init(); #/ init_function_overrides(); // ww: init the pistols in the game so last stand has the importance order level thread last_stand_pistol_rank_init(); //thread maps\_zombiemode_rank::init(); // These MUST be threaded because they contain waits //level thread maps\_zombiemode_deathcard::init(); //level thread maps\_zombiemode_money::init(); level thread [[level.Player_Spawn_func]](); level thread onPlayerConnect(); level thread post_all_players_connected(); init_utility(); maps\_utility::registerClientSys("zombify"); // register a client system... init_anims(); // zombie ai and anim inits if( isDefined( level.custom_ai_type ) ) { for( i = 0; i { [[ level.custom_ai_type[i] ]](); } } if( level.mutators[ "mutator_friendlyFire" ] ) { SetDvar( "friendlyfire_enabled", "1" ); } initZombieLeaderboardData(); // Fog in splitscreen if( IsSplitScreen() ) { set_splitscreen_fog( 350, 2986.33, 10000, -480, 0.805, 0.715, 0.61, 0.0, 10000 ); } } post_all_players_connected() { flag_wait( "all_players_connected" ); /# execdevgui( "devgui_zombie" ); #/ println( "sessions: mapname=", level.script, " gametype zom isserver 1 player_count=", get_players().size ); maps\_zombiemode_score::init(); level difficulty_init(); //thread zombie_difficulty_ramp_up(); // DCS 091610: clear up blood patches when set to mature. level thread clear_mature_blood(); // Start the Zombie MODE! level thread end_game(); level thread round_start(); level thread players_playing(); if ( IsDefined( level.crawlers_enabled ) && level.crawlers_enabled == 1 ) { level thread crawler_round_tracker(); } //chrisp - adding spawning vo //level thread spawn_vo(); //add ammo tracker for VO level thread track_players_ammo_count(); //level thread prevent_near_origin(); DisableGrenadeSuicide(); level.startInvulnerableTime = GetDvarInt( #"player_deathInvulnerableTime" ); // level.global_damage_func = maps\_zombiemode_spawner::zombie_damage; // level.global_damage_func_ads = maps\_zombiemode_spawner::zombie_damage_ads; // TESTING // wait( 3 ); // level thread intermission(); // thread testing_spawner_bug(); if(!IsDefined(level.music_override) ) { level.music_override = false; } } zombiemode_melee_miss() { if( isDefined( self.enemy.curr_pay_turret ) ) { self.enemy doDamage( GetDvarInt( #"ai_meleeDamage" ), self.origin, self, undefined, "melee", "none" ); } } /*------------------------------------ chrisp - adding vo to track players ammo ------------------------------------*/ track_players_ammo_count() { self endon("disconnect"); self endon("death"); wait(5); while(1) { players = get_players(); for(i=0;i { if(!IsDefined (players[i].player_ammo_low)) { players[i].player_ammo_low = 0; } if(!IsDefined(players[i].player_ammo_out)) { players[i].player_ammo_out = 0; } weap = players[i] getcurrentweapon(); //iprintln("current weapon: " + weap); //iprintlnbold(weap); //Excludes all Perk based 'weapons' so that you don't get low ammo spam. if(!isDefined(weap) || weap == "none" || weap == "zombie_perk_bottle_doubletap" || weap == "zombie_perk_bottle_jugg" || weap == "zombie_perk_bottle_revive" || weap == "zombie_perk_bottle_sleight" || weap == "mine_bouncing_betty" || weap == "claymore_zm" || weap == "syrette_sp" || weap == "zombie_knuckle_crack" || weap == "zombie_bowie_flourish" || issubstr( weap, "knife_ballistic_" ) || ( GetSubStr( weap, 0, 3) == "gl_" ) ) { continue; } //iprintln("checking ammo for " + weap); if ( players[i] GetAmmoCount( weap ) > 5) { continue; } if ( players[i] maps\_laststand::player_is_in_laststand() ) { continue; } else if (players[i] GetAmmoCount( weap ) 0) { if (players[i].player_ammo_low != 1 ) { players[i].player_ammo_low = 1; players[i] maps\_zombiemode_audio::create_and_play_dialog( "general", "ammo_low" ); players[i] thread ammo_dialog_timer(); } } else if (players[i] GetAmmoCount( weap ) == 0) { if(!isDefined(weap) || weap == "none") { continue; } wait(2); if( players[i].player_ammo_out != 1 ) { players[i].player_ammo_out = 1; players[i] maps\_zombiemode_audio::create_and_play_dialog( "general", "ammo_out" ); players[i] thread ammoout_dialog_timer(); } } else { continue; } } wait(.5); } } ammo_dialog_timer() { wait(20); self.player_ammo_low = 0; } ammoout_dialog_timer() { wait(20); self.player_ammo_out = 0; } /*------------------------------------ audio plays when more than 1 player connects ------------------------------------*/ spawn_vo() { //not sure if we need this wait(1); players = getplayers(); //just pick a random player for now and play some vo if(players.size > 1) { player = random(players); index = maps\_zombiemode_weapons::get_player_index(player); player thread spawn_vo_player(index,players.size); } } spawn_vo_player(index,num) { sound = "plr_" + index + "_vox_" + num +"play"; self playsound(sound, "sound_done"); self waittill("sound_done"); } testing_spawner_bug() { wait( 0.1 ); level.round_number = 7; spawners = []; spawners[0] = GetEnt( "testy", "targetname" ); while( 1 ) { wait( 1 ); level.enemy_spawns = spawners; } } precache_shaders() { PrecacheShader( "hud_chalk_1" ); PrecacheShader( "hud_chalk_2" ); PrecacheShader( "hud_chalk_3" ); PrecacheShader( "hud_chalk_4" ); PrecacheShader( "hud_chalk_5" ); PrecacheShader( "zom_icon_community_pot" ); PrecacheShader( "zom_icon_community_pot_strip" ); precacheshader("zom_icon_player_life"); } precache_models() { precachemodel( "char_ger_zombieeye" ); precachemodel( "p_zom_win_bars_01_vert04_bend_180" ); precachemodel( "p_zom_win_bars_01_vert01_bend_180" ); precachemodel( "p_zom_win_bars_01_vert04_bend" ); precachemodel( "p_zom_win_bars_01_vert01_bend" ); PreCacheModel( "p_zom_win_cell_bars_01_vert04_bent" ); precachemodel( "p_zom_win_cell_bars_01_vert01_bent" ); PrecacheModel( "tag_origin" ); // Counter models PrecacheModel( "p_zom_counter_0" ); PrecacheModel( "p_zom_counter_1" ); PrecacheModel( "p_zom_counter_2" ); PrecacheModel( "p_zom_counter_3" ); PrecacheModel( "p_zom_counter_4" ); PrecacheModel( "p_zom_counter_5" ); PrecacheModel( "p_zom_counter_6" ); PrecacheModel( "p_zom_counter_7" ); PrecacheModel( "p_zom_counter_8" ); PrecacheModel( "p_zom_counter_9" ); // Player Tombstone precachemodel("zombie_revive"); PrecacheModel( "zombie_z_money_icon" ); } init_shellshocks() { level.player_killed_shellshock = "zombie_death"; PrecacheShellshock( level.player_killed_shellshock ); } init_strings() { PrecacheString( &"ZOMBIE_WEAPONCOSTAMMO" ); PrecacheString( &"ZOMBIE_ROUND" ); PrecacheString( &"SCRIPT_PLUS" ); PrecacheString( &"ZOMBIE_GAME_OVER" ); PrecacheString( &"ZOMBIE_SURVIVED_ROUND" ); PrecacheString( &"ZOMBIE_SURVIVED_ROUNDS" ); PrecacheString( &"ZOMBIE_EXTRA_LIFE" ); add_zombie_hint( "undefined", &"ZOMBIE_UNDEFINED" ); // Random Treasure Chest add_zombie_hint( "default_treasure_chest_950", &"ZOMBIE_RANDOM_WEAPON_950" ); // Barrier Pieces add_zombie_hint( "default_buy_barrier_piece_10", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_10" ); add_zombie_hint( "default_buy_barrier_piece_20", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_20" ); add_zombie_hint( "default_buy_barrier_piece_50", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_50" ); add_zombie_hint( "default_buy_barrier_piece_100", &"ZOMBIE_BUTTON_BUY_BACK_BARRIER_100" ); // REWARD Barrier Pieces add_zombie_hint( "default_reward_barrier_piece", &"ZOMBIE_BUTTON_REWARD_BARRIER" ); add_zombie_hint( "default_reward_barrier_piece_10", &"ZOMBIE_BUTTON_REWARD_BARRIER_10" ); add_zombie_hint( "default_reward_barrier_piece_20", &"ZOMBIE_BUTTON_REWARD_BARRIER_20" ); add_zombie_hint( "default_reward_barrier_piece_30", &"ZOMBIE_BUTTON_REWARD_BARRIER_30" ); add_zombie_hint( "default_reward_barrier_piece_40", &"ZOMBIE_BUTTON_REWARD_BARRIER_40" ); add_zombie_hint( "default_reward_barrier_piece_50", &"ZOMBIE_BUTTON_REWARD_BARRIER_50" ); // Debris add_zombie_hint( "default_buy_debris_100", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_100" ); add_zombie_hint( "default_buy_debris_200", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_200" ); add_zombie_hint( "default_buy_debris_250", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_250" ); add_zombie_hint( "default_buy_debris_500", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_500" ); add_zombie_hint( "default_buy_debris_750", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_750" ); add_zombie_hint( "default_buy_debris_1000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1000" ); add_zombie_hint( "default_buy_debris_1250", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1250" ); add_zombie_hint( "default_buy_debris_1500", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1500" ); add_zombie_hint( "default_buy_debris_1750", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_1750" ); add_zombie_hint( "default_buy_debris_2000", &"ZOMBIE_BUTTON_BUY_CLEAR_DEBRIS_2000" ); // Doors add_zombie_hint( "default_buy_door_100", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_100" ); add_zombie_hint( "default_buy_door_200", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_200" ); add_zombie_hint( "default_buy_door_250", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_250" ); add_zombie_hint( "default_buy_door_500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_500" ); add_zombie_hint( "default_buy_door_750", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_750" ); add_zombie_hint( "default_buy_door_1000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1000" ); add_zombie_hint( "default_buy_door_1250", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1250" ); add_zombie_hint( "default_buy_door_1500", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1500" ); add_zombie_hint( "default_buy_door_1750", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_1750" ); add_zombie_hint( "default_buy_door_2000", &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2000" ); // Areas add_zombie_hint( "default_buy_area_100", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_100" ); add_zombie_hint( "default_buy_area_200", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_200" ); add_zombie_hint( "default_buy_area_250", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_250" ); add_zombie_hint( "default_buy_area_500", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_500" ); add_zombie_hint( "default_buy_area_750", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_750" ); add_zombie_hint( "default_buy_area_1000", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1000" ); add_zombie_hint( "default_buy_area_1250", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1250" ); add_zombie_hint( "default_buy_area_1500", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1500" ); add_zombie_hint( "default_buy_area_1750", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_1750" ); add_zombie_hint( "default_buy_area_2000", &"ZOMBIE_BUTTON_BUY_OPEN_AREA_2000" ); // POWER UPS add_zombie_hint( "powerup_fire_sale_cost", &"ZOMBIE_FIRE_SALE_COST" ); } init_sounds() { add_sound( "end_of_round", "mus_zmb_round_over" ); add_sound( "end_of_game", "mus_zmb_game_over" ); //Had to remove this and add a music state switch so that we can add other musical elements. add_sound( "chalk_one_up", "mus_zmb_chalk" ); add_sound( "purchase", "zmb_cha_ching" ); add_sound( "no_purchase", "zmb_no_cha_ching" ); // Zombification // TODO need to vary these up add_sound( "playerzombie_usebutton_sound", "zmb_zombie_vocals_attack" ); add_sound( "playerzombie_attackbutton_sound", "zmb_zombie_vocals_attack" ); add_sound( "playerzombie_adsbutton_sound", "zmb_zombie_vocals_attack" ); // Head gib add_sound( "zombie_head_gib", "zmb_zombie_head_gib" ); // Blockers add_sound( "rebuild_barrier_piece", "zmb_repair_boards" ); add_sound( "rebuild_barrier_metal_piece", "zmb_metal_repair" ); add_sound( "rebuild_barrier_hover", "zmb_boards_float" ); add_sound( "debris_hover_loop", "zmb_couch_loop" ); add_sound( "break_barrier_piece", "zmb_break_boards" ); add_sound( "grab_metal_bar", "zmb_bar_pull" ); add_sound( "break_metal_bar", "zmb_bar_break" ); add_sound( "drop_metal_bar", "zmb_bar_drop" ); add_sound("blocker_end_move", "zmb_board_slam"); add_sound( "barrier_rebuild_slam", "zmb_board_slam" ); add_sound( "bar_rebuild_slam", "zmb_bar_repair" ); // Doors add_sound( "door_slide_open", "zmb_door_slide_open" ); add_sound( "door_rotate_open", "zmb_door_slide_open" ); // Debris add_sound( "debris_move", "zmb_weap_wall" ); // Random Weapon Chest add_sound( "open_chest", "zmb_lid_open" ); add_sound( "music_chest", "zmb_music_box" ); add_sound( "close_chest", "zmb_lid_close" ); // Weapons on walls add_sound( "weapon_show", "zmb_weap_wall" ); } init_levelvars() { // Variables // used to a check in last stand for players to become zombies level.is_zombie_level = true; level.laststandpistol = "m1911_zm"; // so we dont get the uber colt when we're knocked out level.first_round = true; level.round_number = 1; level.round_start_time = 0; level.pro_tips_start_time = 0; level.intermission = false; level.dog_intermission = false; level.zombie_total = 0; level.total_zombies_killed = 0; level.no_laststandmissionfail = true; level.hudelem_count = 0; level.zombie_move_speed = 1; level.enemy_spawns = []; // List of normal zombie spawners level.zombie_rise_spawners = []; // List of zombie riser locations // level.crawlers_enabled = 1; // Used for kill counters level.counter_model[0] = "p_zom_counter_0"; level.counter_model[1] = "p_zom_counter_1"; level.counter_model[2] = "p_zom_counter_2"; level.counter_model[3] = "p_zom_counter_3"; level.counter_model[4] = "p_zom_counter_4"; level.counter_model[5] = "p_zom_counter_5"; level.counter_model[6] = "p_zom_counter_6"; level.counter_model[7] = "p_zom_counter_7"; level.counter_model[8] = "p_zom_counter_8"; level.counter_model[9] = "p_zom_counter_9"; level.zombie_vars = []; difficulty = 1; column = int(difficulty) + 1; //####################################################################### // NOTE: These values are in mp/zombiemode.csv and will override // whatever you put in as a value below. However, if they don't exist // in the file, then the values below will be used. //####################################################################### // set_zombie_var( identifier, value, float, column ); // AI set_zombie_var( "zombie_health_increase", 100, false, column ); // cumulatively add this to the zombies' starting health each round (up to round 10) set_zombie_var( "zombie_health_increase_multiplier",0.1, true, column ); // after round 10 multiply the zombies' starting health by this amount set_zombie_var( "zombie_health_start", 150, false, column ); // starting health of a zombie at round 1 set_zombie_var( "zombie_spawn_delay", 2.0, true, column ); // Base time to wait between spawning zombies. This is modified based on the round number. set_zombie_var( "zombie_new_runner_interval", 10, false, column ); // Interval between changing walkers who are too far away into runners set_zombie_var( "zombie_move_speed_multiplier", 8, false, column ); // Multiply by the round number to give the base speed value. 0-40 = walk, 41-70 = run, 71+ = sprint set_zombie_var( "zombie_max_ai", 24, false, column ); // Base number of zombies per player (modified by round #) set_zombie_var( "zombie_ai_per_player", 6, false, column ); // additional zombie modifier for each player in the game set_zombie_var( "below_world_check", -1000 ); // Check height to see if a zombie has fallen through the world. // Round set_zombie_var( "spectators_respawn", true ); // Respawn in the spectators in between rounds set_zombie_var( "zombie_use_failsafe", true ); // Will slowly kill zombies who are stuck set_zombie_var( "zombie_between_round_time", 10 ); // How long to pause after the round ends set_zombie_var( "zombie_intermission_time", 15 ); // Length of time to show the end of game stats set_zombie_var( "game_start_delay", 0, false, column ); // How much time to give people a break before starting spawning // Life and death set_zombie_var( "penalty_no_revive", 0.10, true, column ); // Percentage of money you lose if you let a teammate die set_zombie_var( "penalty_died", 0.0, true, column ); // Percentage of money lost if you die set_zombie_var( "penalty_downed", 0.05, true, column ); // Percentage of money lost if you go down // ww: told to remove downed point loss set_zombie_var( "starting_lives", 1, false, column ); // How many lives a solo player starts out with players = get_players(); points = set_zombie_var( ("zombie_score_start_"+players.size+"p"), 3000, false, column ); points = set_zombie_var( ("zombie_score_start_"+players.size+"p"), 3000, false, column ); set_zombie_var( "zombie_score_kill_4player", 50 ); // Individual Points for a zombie kill in a 4 player game set_zombie_var( "zombie_score_kill_3player", 50 ); // Individual Points for a zombie kill in a 3 player game set_zombie_var( "zombie_score_kill_2player", 50 ); // Individual Points for a zombie kill in a 2 player game set_zombie_var( "zombie_score_kill_1player", 50 ); // Individual Points for a zombie kill in a 1 player game set_zombie_var( "zombie_score_kill_4p_team", 30 ); // Team Points for a zombie kill in a 4 player game set_zombie_var( "zombie_score_kill_3p_team", 35 ); // Team Points for a zombie kill in a 3 player game set_zombie_var( "zombie_score_kill_2p_team", 45 ); // Team Points for a zombie kill in a 2 player game set_zombie_var( "zombie_score_kill_1p_team", 0 ); // Team Points for a zombie kill in a 1 player game set_zombie_var( "zombie_score_damage_normal", 10 ); // points gained for a hit with a non-automatic weapon set_zombie_var( "zombie_score_damage_light", 10 ); // points gained for a hit with an automatic weapon set_zombie_var( "zombie_score_bonus_melee", 80 ); // Bonus points for a melee kill set_zombie_var( "zombie_score_bonus_head", 50 ); // Bonus points for a head shot kill set_zombie_var( "zombie_score_bonus_neck", 20 ); // Bonus points for a neck shot kill set_zombie_var( "zombie_score_bonus_torso", 10 ); // Bonus points for a torso shot kill set_zombie_var( "zombie_score_bonus_burn", 10 ); // Bonus points for a burn kill set_zombie_var( "zombie_flame_dmg_point_delay", 500 ); set_zombie_var( "zombify_player", false ); // Default to not zombify the player till further support if ( IsSplitScreen() ) { set_zombie_var( "zombie_timer_offset", 280 ); // hud offsets } } init_dvars() { setSavedDvar( "fire_world_damage", "0" ); setSavedDvar( "fire_world_damage_rate", "0" ); setSavedDvar( "fire_world_damage_duration", "0" ); if( GetDvar( #"zombie_debug" ) == "" ) { SetDvar( "zombie_debug", "0" ); } if( GetDvar( #"zombie_cheat" ) == "" ) { SetDvar( "zombie_cheat", "0" ); } if(GetDvar( #"magic_chest_movable") == "") { SetDvar( "magic_chest_movable", "1" ); } if(GetDvar( #"magic_box_explore_only") == "") { SetDvar( "magic_box_explore_only", "1" ); } SetDvar( "revive_trigger_radius", "75" ); SetDvar( "player_lastStandBleedoutTime", "45" ); SetDvar( "scr_deleteexplosivesonspawn", "0" ); // HACK: To avoid IK crash in zombiemode: MikeA 9/18/2009 //setDvar( "ik_enable", "0" ); } init_mutators() { level.mutators = []; init_mutator( "mutator_noPerks" ); init_mutator( "mutator_noTraps" ); init_mutator( "mutator_noMagicBox" ); init_mutator( "mutator_noRevive" ); init_mutator( "mutator_noPowerups" ); init_mutator( "mutator_noReloads" ); init_mutator( "mutator_noBoards" ); init_mutator( "mutator_fogMatch" ); init_mutator( "mutator_quickStart" ); init_mutator( "mutator_headshotsOnly" ); init_mutator( "mutator_friendlyFire" ); init_mutator( "mutator_doubleMoney" ); init_mutator( "mutator_susceptible" ); init_mutator( "mutator_powerShot" ); } init_mutator( mutator_s ) { level.mutators[ mutator_s ] = ( "1" == GetDvar( mutator_s ) ); } init_function_overrides() { // Function pointers level.custom_introscreen = ::zombie_intro_screen; level.custom_intermission = ::player_intermission; level.reset_clientdvars = ::onPlayerConnect_clientDvars; // Sets up function pointers for animscripts to refer to level.playerlaststand_func = ::player_laststand; // level.global_kill_func = maps\_zombiemode_spawner::zombie_death; level.global_damage_func = maps\_zombiemode_spawner::zombie_damage; level.global_damage_func_ads = maps\_zombiemode_spawner::zombie_damage_ads; level.overridePlayerKilled = ::player_killed_override; level.overridePlayerDamage = ::player_damage_override; level.overrideActorKilled = ::actor_killed_override; level.overrideActorDamage = ::actor_damage_override; level.melee_miss_func = ::zombiemode_melee_miss; level.player_becomes_zombie = ::zombify_player; level.is_friendly_fire_on = ::is_friendly_fire_on; level.can_revive = ::can_revive; level.zombie_last_stand = ::last_stand_pistol_swap; level.zombie_last_stand_pistol_memory = ::last_stand_save_pistol_ammo; level.zombie_last_stand_ammo_return = ::last_stand_restore_pistol_ammo; if( !IsDefined( level.Player_Spawn_func ) ) { level.Player_Spawn_func = ::coop_player_spawn_placement; } } // for zombietron, see maps\_zombietron_main::initZombieLeaderboardData() // initZombieLeaderboardData() { // Initializing Leaderboard Stat Variables -- string values match stats.ddl level.zombieLeaderboardStatVariable["zombie_theater"]["highestwave"] = "zombie_theater_highestwave"; level.zombieLeaderboardStatVariable["zombie_theater"]["timeinwave"] = "zombie_theater_timeinwave"; level.zombieLeaderboardStatVariable["zombie_theater"]["totalpoints"] = "zombie_theater_totalpoints"; level.zombieLeaderboardStatVariable["zombie_pentagon"]["highestwave"] = "zombie_pentagon_highestwave"; level.zombieLeaderboardStatVariable["zombie_pentagon"]["timeinwave"] = "zombie_pentagon_timeinwave"; level.zombieLeaderboardStatVariable["zombie_pentagon"]["totalpoints"] = "zombie_pentagon_totalpoints"; // Initializing Leaderboard Number. Matches values in live_leaderboard.h. level.zombieLeaderboardNumber["zombie_theater"]["waves"] = 0; level.zombieLeaderboardNumber["zombie_theater"]["points"] = 1; // level.zombieLeaderboardNumber["zombietron"]["waves"] = 3; // defined in _zombietron_main.gsc // level.zombieLeaderboardNumber["zombietron"]["points"] = 4; // defined in _zombietron_main.gsc level.zombieLeaderboardNumber["zombie_pentagon"]["waves"] = 6; level.zombieLeaderboardNumber["zombie_pentagon"]["points"] = 7; } init_flags() { flag_init( "spawn_point_override" ); flag_init( "power_on" ); flag_init( "crawler_round" ); flag_init( "spawn_zombies", true ); flag_init( "dog_round" ); flag_init( "begin_spawning" ); flag_init( "end_round_wait" ); flag_init( "wait_and_revive" ); } // Client flags registered here should be for global zombie systems, and should // prefer to use high flag numbers and work downwards. // Level specific flags should be registered in the level, and should prefer // low numbers, and work upwards. // Ensure that this function and the function in _zombiemode.csc match. init_client_flags() { // Client flags for script movers level._ZOMBIE_SCRIPTMOVER_FLAG_BOX_RANDOM = 15; // Client flags for the player level._ZOMBIE_PLAYER_FLAG_CLOAK_WEAPON = 14; // Client flags for actors } init_fx() { level._effect["wood_chunk_destory"] = LoadFX( "impacts/fx_large_woodhit" ); level._effect["fx_zombie_bar_break"] = LoadFX( "maps/zombie/fx_zombie_bar_break" ); level._effect["fx_zombie_bar_break_lite"] = LoadFX( "maps/zombie/fx_zombie_bar_break_lite" ); level._effect["edge_fog"] = LoadFX( "maps/zombie/fx_fog_zombie_amb" ); level._effect["chest_light"] = LoadFX( "env/light/fx_ray_sun_sm_short" ); level._effect["eye_glow"] = LoadFX( "misc/fx_zombie_eye_single" ); level._effect["headshot"] = LoadFX( "impacts/fx_flesh_hit" ); level._effect["headshot_nochunks"] = LoadFX( "misc/fx_zombie_bloodsplat" ); level._effect["bloodspurt"] = LoadFX( "misc/fx_zombie_bloodspurt" ); level._effect["tesla_head_light"] = LoadFX( "maps/zombie/fx_zombie_tesla_neck_spurt"); level._effect["rise_burst_water"] = LoadFX("maps/zombie/fx_zombie_body_wtr_burst"); level._effect["rise_billow_water"] = LoadFX("maps/zombie/fx_zombie_body_wtr_billowing"); level._effect["rise_dust_water"] = LoadFX("maps/zombie/fx_zombie_body_wtr_falling"); level._effect["rise_burst"] = LoadFX("maps/zombie/fx_mp_zombie_hand_dirt_burst"); level._effect["rise_billow"] = LoadFX("maps/zombie/fx_mp_zombie_body_dirt_billowing"); level._effect["rise_dust"] = LoadFX("maps/zombie/fx_mp_zombie_body_dust_falling"); // Flamethrower level._effect["character_fire_pain_sm"] = LoadFX( "env/fire/fx_fire_player_sm_1sec" ); level._effect["character_fire_death_sm"] = LoadFX( "env/fire/fx_fire_player_md" ); level._effect["character_fire_death_torso"] = LoadFX( "env/fire/fx_fire_player_torso" ); level._effect["def_explosion"] = LoadFX("explosions/fx_default_explosion"); level._effect["betty_explode"] = LoadFX("weapon/bouncing_betty/fx_explosion_betty_generic"); } // zombie specific anims init_standard_zombie_anims() { // deaths level.scr_anim["zombie"]["death1"] = %ai_zombie_death_v1; level.scr_anim["zombie"]["death2"] = %ai_zombie_death_v2; level.scr_anim["zombie"]["death3"] = %ai_zombie_crawl_death_v1; level.scr_anim["zombie"]["death4"] = %ai_zombie_crawl_death_v2; // run cycles level.scr_anim["zombie"]["walk1"] = %ai_zombie_walk_v1; level.scr_anim["zombie"]["walk2"] = %ai_zombie_walk_v2; level.scr_anim["zombie"]["walk3"] = %ai_zombie_walk_v3; level.scr_anim["zombie"]["walk4"] = %ai_zombie_walk_v4; level.scr_anim["zombie"]["walk5"] = %ai_zombie_walk_v6; level.scr_anim["zombie"]["walk6"] = %ai_zombie_walk_v7; level.scr_anim["zombie"]["walk7"] = %ai_zombie_walk_v9; //was goose step walk - overridden in theatre only (v8) level.scr_anim["zombie"]["walk8"] = %ai_zombie_walk_v9; level.scr_anim["zombie"]["run1"] = %ai_zombie_walk_fast_v1; level.scr_anim["zombie"]["run2"] = %ai_zombie_walk_fast_v2; level.scr_anim["zombie"]["run3"] = %ai_zombie_walk_fast_v3; level.scr_anim["zombie"]["run4"] = %ai_zombie_run_v2; level.scr_anim["zombie"]["run5"] = %ai_zombie_run_v4; level.scr_anim["zombie"]["run6"] = %ai_zombie_run_v3; //level.scr_anim["zombie"]["run4"] = %ai_zombie_run_v1; //level.scr_anim["zombie"]["run6"] = %ai_zombie_run_v4; level.scr_anim["zombie"]["sprint1"] = %ai_zombie_sprint_v1; level.scr_anim["zombie"]["sprint2"] = %ai_zombie_sprint_v2; level.scr_anim["zombie"]["sprint3"] = %ai_zombie_sprint_v1; level.scr_anim["zombie"]["sprint4"] = %ai_zombie_sprint_v2; //level.scr_anim["zombie"]["sprint3"] = %ai_zombie_sprint_v3; //level.scr_anim["zombie"]["sprint3"] = %ai_zombie_sprint_v4; //level.scr_anim["zombie"]["sprint4"] = %ai_zombie_sprint_v5; // run cycles in prone level.scr_anim["zombie"]["crawl1"] = %ai_zombie_crawl; level.scr_anim["zombie"]["crawl2"] = %ai_zombie_crawl_v1; level.scr_anim["zombie"]["crawl3"] = %ai_zombie_crawl_v2; level.scr_anim["zombie"]["crawl4"] = %ai_zombie_crawl_v3; level.scr_anim["zombie"]["crawl5"] = %ai_zombie_crawl_v4; level.scr_anim["zombie"]["crawl6"] = %ai_zombie_crawl_v5; level.scr_anim["zombie"]["crawl_hand_1"] = %ai_zombie_walk_on_hands_a; level.scr_anim["zombie"]["crawl_hand_2"] = %ai_zombie_walk_on_hands_b; level.scr_anim["zombie"]["crawl_sprint1"] = %ai_zombie_crawl_sprint; level.scr_anim["zombie"]["crawl_sprint2"] = %ai_zombie_crawl_sprint_1; level.scr_anim["zombie"]["crawl_sprint3"] = %ai_zombie_crawl_sprint_2; if( !isDefined( level._zombie_melee ) ) { level._zombie_melee = []; } if( !isDefined( level._zombie_walk_melee ) ) { level._zombie_walk_melee = []; } if( !isDefined( level._zombie_run_melee ) ) { level._zombie_run_melee = []; } level._zombie_melee["zombie"] = []; level._zombie_walk_melee["zombie"] = []; level._zombie_run_melee["zombie"] = []; level._zombie_melee["zombie"][0] = %ai_zombie_attack_v2; // slow swipes level._zombie_melee["zombie"][1] = %ai_zombie_attack_v4; // single left swipe level._zombie_melee["zombie"][2] = %ai_zombie_attack_v6; // wierd single level._zombie_melee["zombie"][3] = %ai_zombie_attack_v1; // DOUBLE SWIPE level._zombie_melee["zombie"][4] = %ai_zombie_attack_forward_v1; // DOUBLE SWIPE level._zombie_melee["zombie"][5] = %ai_zombie_attack_forward_v2; // slow DOUBLE SWIPE level._zombie_run_melee["zombie"][0] = %ai_zombie_run_attack_v1; // fast single right level._zombie_run_melee["zombie"][1] = %ai_zombie_run_attack_v2; // fast double swipe level._zombie_run_melee["zombie"][2] = %ai_zombie_run_attack_v3; // fast swipe if( isDefined( level.zombie_anim_override ) ) { [[ level.zombie_anim_override ]](); } // melee in walk level._zombie_walk_melee["zombie"][0] = %ai_zombie_walk_attack_v1; // fast single right swipe level._zombie_walk_melee["zombie"][1] = %ai_zombie_walk_attack_v2; // slow right/left single hit level._zombie_walk_melee["zombie"][2] = %ai_zombie_walk_attack_v3; // fast single left swipe level._zombie_walk_melee["zombie"][3] = %ai_zombie_walk_attack_v4; // slow single right swipe // melee in crawl if( !isDefined( level._zombie_melee_crawl ) ) { level._zombie_melee_crawl = []; } level._zombie_melee_crawl["zombie"] = []; level._zombie_melee_crawl["zombie"][0] = %ai_zombie_attack_crawl; level._zombie_melee_crawl["zombie"][1] = %ai_zombie_attack_crawl_lunge; if( !isDefined( level._zombie_stumpy_melee ) ) { level._zombie_stumpy_melee = []; } level._zombie_stumpy_melee["zombie"] = []; level._zombie_stumpy_melee["zombie"][0] = %ai_zombie_walk_on_hands_shot_a; level._zombie_stumpy_melee["zombie"][1] = %ai_zombie_walk_on_hands_shot_b; //level._zombie_melee_crawl["zombie"][2] = %ai_zombie_crawl_attack_A; // tesla deaths if( !isDefined( level._zombie_tesla_death ) ) { level._zombie_tesla_death = []; } level._zombie_tesla_death["zombie"] = []; level._zombie_tesla_death["zombie"][0] = %ai_zombie_tesla_death_a; level._zombie_tesla_death["zombie"][1] = %ai_zombie_tesla_death_b; level._zombie_tesla_death["zombie"][2] = %ai_zombie_tesla_death_c; level._zombie_tesla_death["zombie"][3] = %ai_zombie_tesla_death_d; level._zombie_tesla_death["zombie"][4] = %ai_zombie_tesla_death_e; if( !isDefined( level._zombie_tesla_crawl_death ) ) { level._zombie_tesla_crawl_death = []; } level._zombie_tesla_crawl_death["zombie"] = []; level._zombie_tesla_crawl_death["zombie"][0] = %ai_zombie_tesla_crawl_death_a; level._zombie_tesla_crawl_death["zombie"][1] = %ai_zombie_tesla_crawl_death_b; // thundergun knockdowns and getups if( !isDefined( level._zombie_knockdowns ) ) { level._zombie_knockdowns = []; } level._zombie_knockdowns["zombie"] = []; level._zombie_knockdowns["zombie"]["front"] = []; level._zombie_knockdowns["zombie"]["front"]["no_legs"] = []; level._zombie_knockdowns["zombie"]["front"]["no_legs"][0] = %ai_zombie_thundergun_hit_armslegsforward; level._zombie_knockdowns["zombie"]["front"]["no_legs"][1] = %ai_zombie_thundergun_hit_doublebounce; level._zombie_knockdowns["zombie"]["front"]["no_legs"][2] = %ai_zombie_thundergun_hit_forwardtoface; level._zombie_knockdowns["zombie"]["front"]["has_legs"] = []; level._zombie_knockdowns["zombie"]["front"]["has_legs"][0] = %ai_zombie_thundergun_hit_armslegsforward; level._zombie_knockdowns["zombie"]["front"]["has_legs"][1] = %ai_zombie_thundergun_hit_doublebounce; level._zombie_knockdowns["zombie"]["front"]["has_legs"][2] = %ai_zombie_thundergun_hit_upontoback; level._zombie_knockdowns["zombie"]["front"]["has_legs"][3] = %ai_zombie_thundergun_hit_forwardtoface; level._zombie_knockdowns["zombie"]["front"]["has_legs"][4] = %ai_zombie_thundergun_hit_armslegsforward; level._zombie_knockdowns["zombie"]["front"]["has_legs"][5] = %ai_zombie_thundergun_hit_forwardtoface; level._zombie_knockdowns["zombie"]["front"]["has_legs"][6] = %ai_zombie_thundergun_hit_stumblefall; level._zombie_knockdowns["zombie"]["front"]["has_legs"][7] = %ai_zombie_thundergun_hit_armslegsforward; level._zombie_knockdowns["zombie"]["front"]["has_legs"][8] = %ai_zombie_thundergun_hit_doublebounce; level._zombie_knockdowns["zombie"]["front"]["has_legs"][9] = %ai_zombie_thundergun_hit_upontoback; level._zombie_knockdowns["zombie"]["front"]["has_legs"][10] = %ai_zombie_thundergun_hit_forwardtoface; level._zombie_knockdowns["zombie"]["front"]["has_legs"][11] = %ai_zombie_thundergun_hit_armslegsforward; level._zombie_knockdowns["zombie"]["front"]["has_legs"][12] = %ai_zombie_thundergun_hit_forwardtoface; level._zombie_knockdowns["zombie"]["front"]["has_legs"][13] = %ai_zombie_thundergun_hit_deadfallknee; level._zombie_knockdowns["zombie"]["front"]["has_legs"][14] = %ai_zombie_thundergun_hit_armslegsforward; level._zombie_knockdowns["zombie"]["front"]["has_legs"][15] = %ai_zombie_thundergun_hit_doublebounce; level._zombie_knockdowns["zombie"]["front"]["has_legs"][16] = %ai_zombie_thundergun_hit_upontoback; level._zombie_knockdowns["zombie"]["front"]["has_legs"][17] = %ai_zombie_thundergun_hit_forwardtoface; level._zombie_knockdowns["zombie"]["front"]["has_legs"][18] = %ai_zombie_thundergun_hit_armslegsforward; level._zombie_knockdowns["zombie"]["front"]["has_legs"][19] = %ai_zombie_thundergun_hit_forwardtoface; level._zombie_knockdowns["zombie"]["front"]["has_legs"][20] = %ai_zombie_thundergun_hit_flatonback; level._zombie_knockdowns["zombie"]["left"] = []; level._zombie_knockdowns["zombie"]["left"][0] = %ai_zombie_thundergun_hit_legsout_right; level._zombie_knockdowns["zombie"]["right"] = []; level._zombie_knockdowns["zombie"]["right"][0] = %ai_zombie_thundergun_hit_legsout_left; level._zombie_knockdowns["zombie"]["back"] = []; level._zombie_knockdowns["zombie"]["back"][0] = %ai_zombie_thundergun_hit_faceplant; if( !isDefined( level._zombie_getups ) ) { level._zombie_getups = []; } level._zombie_getups["zombie"] = []; level._zombie_getups["zombie"]["back"] = []; level._zombie_getups["zombie"]["back"]["early"] = []; level._zombie_getups["zombie"]["back"]["early"][0] = %ai_zombie_thundergun_getup_b; level._zombie_getups["zombie"]["back"]["early"][1] = %ai_zombie_thundergun_getup_c; level._zombie_getups["zombie"]["back"]["late"] = []; level._zombie_getups["zombie"]["back"]["late"][0] = %ai_zombie_thundergun_getup_b; level._zombie_getups["zombie"]["back"]["late"][1] = %ai_zombie_thundergun_getup_c; level._zombie_getups["zombie"]["back"]["late"][2] = %ai_zombie_thundergun_getup_quick_b; level._zombie_getups["zombie"]["back"]["late"][3] = %ai_zombie_thundergun_getup_quick_c; level._zombie_getups["zombie"]["belly"] = []; level._zombie_getups["zombie"]["belly"]["early"] = []; level._zombie_getups["zombie"]["belly"]["early"][0] = %ai_zombie_thundergun_getup_a; level._zombie_getups["zombie"]["belly"]["late"] = []; level._zombie_getups["zombie"]["belly"]["late"][0] = %ai_zombie_thundergun_getup_a; level._zombie_getups["zombie"]["belly"]["late"][1] = %ai_zombie_thundergun_getup_quick_a; // freezegun deaths if( !isDefined( level._zombie_freezegun_death ) ) { level._zombie_freezegun_death = []; } level._zombie_freezegun_death["zombie"] = []; level._zombie_freezegun_death["zombie"][0] = %ai_zombie_freeze_death_a; level._zombie_freezegun_death["zombie"][1] = %ai_zombie_freeze_death_b; level._zombie_freezegun_death["zombie"][2] = %ai_zombie_freeze_death_c; level._zombie_freezegun_death["zombie"][3] = %ai_zombie_freeze_death_d; level._zombie_freezegun_death["zombie"][4] = %ai_zombie_freeze_death_e; if( !isDefined( level._zombie_freezegun_death_missing_legs ) ) { level._zombie_freezegun_death_missing_legs = []; } level._zombie_freezegun_death_missing_legs["zombie"] = []; level._zombie_freezegun_death_missing_legs["zombie"][0] = %ai_zombie_crawl_freeze_death_01; level._zombie_freezegun_death_missing_legs["zombie"][1] = %ai_zombie_crawl_freeze_death_02; // deaths if( !isDefined( level._zombie_deaths ) ) { level._zombie_deaths = []; } level._zombie_deaths["zombie"] = []; level._zombie_deaths["zombie"][0] = %ch_dazed_a_death; level._zombie_deaths["zombie"][1] = %ch_dazed_b_death; level._zombie_deaths["zombie"][2] = %ch_dazed_c_death; level._zombie_deaths["zombie"][3] = %ch_dazed_d_death; /* ground crawl */ if( !isDefined( level._zombie_rise_anims ) ) { level._zombie_rise_anims = []; } // set up the arrays level._zombie_rise_anims["zombie"] = []; //level._zombie_rise_anims["zombie"][1]["walk"][0] = %ai_zombie_traverse_ground_v1_crawl; level._zombie_rise_anims["zombie"][1]["walk"][0] = %ai_zombie_traverse_ground_v1_walk; //level._zombie_rise_anims["zombie"][1]["run"][0] = %ai_zombie_traverse_ground_v1_crawlfast; level._zombie_rise_anims["zombie"][1]["run"][0] = %ai_zombie_traverse_ground_v1_run; level._zombie_rise_anims["zombie"][1]["sprint"][0] = %ai_zombie_traverse_ground_climbout_fast; //level._zombie_rise_anims["zombie"][2]["walk"][0] = %ai_zombie_traverse_ground_v2_walk; //!broken level._zombie_rise_anims["zombie"][2]["walk"][0] = %ai_zombie_traverse_ground_v2_walk_altA; //level._zombie_rise_anims["zombie"][2]["walk"][2] = %ai_zombie_traverse_ground_v2_walk_altB;//!broken // ground crawl death if( !isDefined( level._zombie_rise_death_anims ) ) { level._zombie_rise_death_anims = []; } level._zombie_rise_death_anims["zombie"] = []; level._zombie_rise_death_anims["zombie"][1]["in"][0] = %ai_zombie_traverse_ground_v1_deathinside; level._zombie_rise_death_anims["zombie"][1]["in"][1] = %ai_zombie_traverse_ground_v1_deathinside_alt; level._zombie_rise_death_anims["zombie"][1]["out"][0] = %ai_zombie_traverse_ground_v1_deathoutside; level._zombie_rise_death_anims["zombie"][1]["out"][1] = %ai_zombie_traverse_ground_v1_deathoutside_alt; level._zombie_rise_death_anims["zombie"][2]["in"][0] = %ai_zombie_traverse_ground_v2_death_low; level._zombie_rise_death_anims["zombie"][2]["in"][1] = %ai_zombie_traverse_ground_v2_death_low_alt; level._zombie_rise_death_anims["zombie"][2]["out"][0] = %ai_zombie_traverse_ground_v2_death_high; level._zombie_rise_death_anims["zombie"][2]["out"][1] = %ai_zombie_traverse_ground_v2_death_high_alt; //taunts if( !isDefined( level._zombie_run_taunt ) ) { level._zombie_run_taunt = []; } if( !isDefined( level._zombie_board_taunt ) ) { level._zombie_board_taunt = []; } level._zombie_run_taunt["zombie"] = []; level._zombie_board_taunt["zombie"] = []; //level._zombie_taunt["zombie"][0] = %ai_zombie_taunts_1; //level._zombie_taunt["zombie"][1] = %ai_zombie_taunts_4; //level._zombie_taunt["zombie"][2] = %ai_zombie_taunts_5b; //level._zombie_taunt["zombie"][3] = %ai_zombie_taunts_5c; //level._zombie_taunt["zombie"][4] = %ai_zombie_taunts_5d; //level._zombie_taunt["zombie"][5] = %ai_zombie_taunts_5e; //level._zombie_taunt["zombie"][6] = %ai_zombie_taunts_5f; //level._zombie_taunt["zombie"][7] = %ai_zombie_taunts_7; //level._zombie_taunt["zombie"][8] = %ai_zombie_taunts_9; //level._zombie_taunt["zombie"][8] = %ai_zombie_taunts_11; //level._zombie_taunt["zombie"][8] = %ai_zombie_taunts_12; level._zombie_board_taunt["zombie"][0] = %ai_zombie_taunts_4; level._zombie_board_taunt["zombie"][1] = %ai_zombie_taunts_7; level._zombie_board_taunt["zombie"][2] = %ai_zombie_taunts_9; level._zombie_board_taunt["zombie"][3] = %ai_zombie_taunts_5b; level._zombie_board_taunt["zombie"][4] = %ai_zombie_taunts_5c; level._zombie_board_taunt["zombie"][5] = %ai_zombie_taunts_5d; level._zombie_board_taunt["zombie"][6] = %ai_zombie_taunts_5e; level._zombie_board_taunt["zombie"][7] = %ai_zombie_taunts_5f; } init_anims() { init_standard_zombie_anims(); } // Initialize any animscript related variables init_animscripts() { // Setup the animscripts, then override them (we call this just incase an AI has not yet spawned) animscripts\zombie_init::firstInit(); anim.idleAnimArray ["stand"] = []; anim.idleAnimWeights ["stand"] = []; anim.idleAnimArray ["stand"][0][0] = %ai_zombie_idle_v1_delta; anim.idleAnimWeights ["stand"][0][0] = 10; anim.idleAnimArray ["crouch"] = []; anim.idleAnimWeights ["crouch"] = []; anim.idleAnimArray ["crouch"][0][0] = %ai_zombie_idle_crawl_delta; anim.idleAnimWeights ["crouch"][0][0] = 10; } // Handles the intro screen zombie_intro_screen( string1, string2, string3, string4, string5 ) { flag_wait( "all_players_connected" ); } players_playing() { // initialize level.players_playing players = get_players(); level.players_playing = players.size; wait( 20 ); players = get_players(); level.players_playing = players.size; } // Init some additional settings based on difficulty and number of players // difficulty_init() { flag_wait( "all_players_connected" ); difficulty =1; table = "mp/zombiemode.csv"; column = int(difficulty)+1; players = get_players(); points = 500; // Get individual starting points points = set_zombie_var( ("zombie_score_start_"+players.size+"p"), 3000, false, column ); /# if( GetDvarInt( #"zombie_cheat" ) >= 1 ) { points = 100000; } #/ for ( p=0; p { players[p].score = points; players[p].score_total = players[p].score; players[p].old_score = players[p].score; } // Get team starting points points = set_zombie_var( ("zombie_team_score_start_"+players.size+"p"), 2000, false, column ); /# if( GetDvarInt( #"zombie_cheat" ) >= 1 ) { points = 100000; } #/ for ( tp = 0; tp { pool = level.team_pool[ tp ]; pool.score = points; pool.old_score = pool.score; pool.score_total = pool.score; } // Other difficulty-specific changes switch ( difficulty ) { case "0": case "1": break; case "2": level.first_round = false; level.round_number = 8; break; case "3": level.first_round = false; level.round_number = 18; break; default: break; } if( level.mutators["mutator_quickStart"] ) { level.first_round = false; level.round_number = 5; } } // // NETWORK SECTION ====================================================================== // // watchTakenDamage() { self endon( "disconnect" ); self endon( "death" ); self.has_taken_damage = false; while(1) { self waittill("damage", damage_amount ); if ( 0 { self.has_taken_damage = true; return; } } } onPlayerConnect() { for( ;; ) { level waittill( "connecting", player ); player.entity_num = player GetEntityNumber(); player thread onPlayerSpawned(); player thread onPlayerDisconnect(); player thread player_revive_monitor(); player thread watchTakenDamage(); player.score = 0; player.score_total = player.score; player.old_score = player.score; player.is_zombie = false; player.initialized = false; player.zombification_time = 0; player.enableText = true; player.team_num = 0; player setTeamForEntity( "allies" ); //player maps\_zombiemode_protips::player_init(); // DCS 090910: now that player can destroy some barricades before set. player thread maps\_zombiemode_blockers::rebuild_barrier_reward_reset(); } } onPlayerConnect_clientDvars() { self SetClientDvars( "cg_deadChatWithDead", "1", "cg_deadChatWithTeam", "1", "cg_deadHearTeamLiving", "1", "cg_deadHearAllLiving", "1", "cg_everyoneHearsEveryone", "1", "compass", "0", "hud_showStance", "0", "cg_thirdPerson", "0", "cg_fov", "65", "cg_thirdPersonAngle", "0", "ammoCounterHide", "1", "miniscoreboardhide", "1", "cg_drawSpectatorMessages", "0", "ui_hud_hardcore", "0" ); self SetDepthOfField( 0, 0, 512, 4000, 4, 0 ); // Enabling the FPS counter in ship for now //self setclientdvar( "cg_drawfps", "1" ); self setClientDvar( "aim_lockon_pitch_strength", 0.0 ); if(!level.wii) { // self SetClientDvar("r_enablePlayerShadow", 1); } } checkForAllDead() { players = get_players(); count = 0; for( i = 0; i { if( !(players[i] maps\_laststand::player_is_in_laststand()) && !(players[i].sessionstate == "spectator") ) { count++; } } if( count==0 ) { level notify( "end_game" ); } } onPlayerDisconnect() { self waittill( "disconnect" ); self remove_from_spectate_list(); self checkForAllDead(); } // // Runs when the player spawns into the map // self is the player.surprise! // onPlayerSpawned() { self endon( "disconnect" ); for( ;; ) { self waittill( "spawned_player" ); self enablehealthshield( false ); /# if ( GetDvarInt( #"zombie_cheat" ) >= 1 && GetDvarInt( #"zombie_cheat" ) { self EnableInvulnerability(); } #/ self SetClientDvars( "cg_thirdPerson", "0", "cg_fov", "65", "cg_thirdPersonAngle", "0" ); self SetDepthOfField( 0, 0, 512, 4000, 4, 0 ); self cameraactivate(false); self add_to_spectate_list(); if( isdefined( self.initialized ) ) { if( self.initialized == false ) { self.initialized = true; // ww: set the is_drinking variable self.is_drinking = 0; // set the initial score on the hud self maps\_zombiemode_score::set_player_score_hud( true ); self thread player_zombie_breadcrumb(); // This will keep checking to see if you're trying to use an ability. //self thread maps\_zombiemode_ability::hardpointItemWaiter(); //self thread maps\_zombiemode_ability::hardPointItemSelector(); //Init stat tracking variables self.stats["kills"] = 0; self.stats["score"] = 0; self.stats["downs"] = 0; self.stats["revives"] = 0; self.stats["perks"] = 0; self.stats["headshots"] = 0; self.stats["zombie_gibs"] = 0; } } } } // // Keep track of players going down and getting revived player_revive_monitor() { self endon( "disconnect" ); while (1) { self waittill( "player_revived", reviver ); //AYERS: Working on Laststand Audio //self clientnotify( "revived" ); bbPrint( "zombie_playerdeaths: round %d playername %s deathtype revived x %f y %f z %f", level.round_number, self.playername, self.origin ); //self laststand_giveback_player_perks(); if ( IsDefined(reviver) ) { self maps\_zombiemode_audio::create_and_play_dialog( "general", "revive_up" ); //reviver maps\_zombiemode_rank::giveRankXp( "revive" ); //maps\_zombiemode_challenges::doMissionCallback( "zm_revive", reviver ); // Check to see how much money you lost from being down. points = self.score_lost_when_downed; reviver maps\_zombiemode_score::player_add_points( "reviver", points ); self.score_lost_when_downed = 0; } } } // self = a player // If the player has just 1 perk, they wil always get it back // If the player has more than 1 perk, they will lose a single perk laststand_giveback_player_perks() { if ( IsDefined( self.laststand_perks ) ) { // Calculate a lost perk index lost_perk_index = int( -1 ); if( self.laststand_perks.size > 1 ) { lost_perk_index = RandomInt( self.laststand_perks.size-1 ); } // Give the player back their perks for ( i=0; i { if ( self HasPerk( self.laststand_perks[i] ) ) { continue; } if( i == lost_perk_index ) { continue; } maps\_zombiemode_perks::give_perk( self.laststand_perks[i] ); } } }
-
Zombiemode_Audio #include maps\_utility; #include common_scripts\utility; #include maps\_zombiemode_utility; #include maps\_music; #include maps\_busing; audio_init() { level init_audio_aliases(); level init_music_states(); level thread init_audio_functions(); } //All Vox should be found in this section. //If there is an Alias that needs to be changed, check here first. init_audio_aliases() { //**Announcer Vox Categories**\\ //ARRAY and PREFIX: Setting up a prefix and array for all Devil lines level.devil_vox = []; level.devil_vox["prefix"] = "zmb_vox_ann_"; //POWERUPS: Play after a player picks up a powerup; plays for ALL players level.devil_vox["powerup"] = []; level.devil_vox["powerup"]["carpenter"] = "carpenter"; level.devil_vox["powerup"]["insta_kill"] = "instakill"; level.devil_vox["powerup"]["double_points"] = "doublepoints"; level.devil_vox["powerup"]["nuke"] = "nuke"; level.devil_vox["powerup"]["full_ammo"] = "maxammo"; level.devil_vox["powerup"]["fire_sale"] = "firesale"; level.devil_vox["powerup"]["fire_sale_short"] = "firesale_short"; level.devil_vox["powerup"]["minigun"] = "death_machine"; level.devil_vox["powerup"]["bonfire_sale"] = "bonfiresale"; level.devil_vox["powerup"]["all_revive"] = undefined; //**Player Zombie Vox Categories**\\ //ARRAY and PREFIX: Creating the main player vox array, setting up the default alias prefix that will be added onto all lines level.plr_vox = []; level.plr_vox["prefix"] = "vox_plr_"; //GENERAL: Any lines that do not fit into an overall larger category. level.plr_vox["general"] = []; level.plr_vox["general"]["crawl_spawn"] = "spawn_crawl"; //OCCURS WHEN THE PLAYER SHOOTS THE LEGS OFF A ZOMBIE, CREATING A CRAWLER level.plr_vox["general"]["crawl_spawn_response"] = "resp_spawn_crawl"; //RESPONSE TO ABOVE level.plr_vox["general"]["dog_spawn"] = "spawn_dog"; //OCCURS AT THE BEGINNING OF A DOG ROUND level.plr_vox["general"]["dog_spawn_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["quad_spawn"] = "spawn_quad"; //OCCURS WHEN QUADS FIRST SPAWN THROUGH THE ROOF level.plr_vox["general"]["quad_spawn_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["ammo_low"] = "ammo_low"; //OCCURS WHEN THE PLAYERS AMMO IN A WEAPON IS BELOW 5 level.plr_vox["general"]["ammo_low_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["ammo_out"] = "ammo_out"; //OCCURS WHEN THE PLAYER HAS NO MORE AMMO FOR A WEAPON level.plr_vox["general"]["ammo_out_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["door_deny"] = "nomoney"; //CURRENTLY UNUSED: INTENDED FOR LOCKED, POWER-DRIVEN DOORS level.plr_vox["general"]["door_deny_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["perk_deny"] = "nomoney"; //OCCURS WHEN THE PLAYER CANNOT AFFORD A PERK OR ALREADY HAS THE PERK level.plr_vox["general"]["perk_deny_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["intro"] = "level_start"; //CURRENTLY UNUSED: INTENDED AS THE FIRST LINE WHEN THE GAME BEGINS level.plr_vox["general"]["intro_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["shoot_arm"] = "shoot_limb"; //OCCURS WHEN THE PLAYER SHOOTS OFF AN ARM level.plr_vox["general"]["shoot_arm_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["box_move"] = "box_move"; //OCCURS WHEN THE PLAYER CAUSES THE MAGIC BOX TO CHANGE POSITION level.plr_vox["general"]["box_move_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["no_money"] = "nomoney"; //OCCURS WHEN THE PLAYER HAS NO MONEY AND TRIES TO BUY A WEAPON level.plr_vox["general"]["no_money_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["oh_shit"] = "ohshit"; //OCCURS WHEN 4 OR MORE ZOMBIES ARE WITHIN 250 UNITS OF THE PLAYER level.plr_vox["general"]["oh_shit_response"] = "resp_ohshit"; //RESPONSE TO ABOVE level.plr_vox["general"]["revive_down"] = "revive_down"; //OCCURS WHEN THE PLAYER GOES INTO LAST STAND level.plr_vox["general"]["revive_down_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["revive_up"] = "revive_up"; //OCCURS WHEN THE PLAYER REVIVES A TEAMMATE level.plr_vox["general"]["revive_up_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["general"]["crawl_hit"] = "crawler_hit"; //OCCURS WHEN THE PLAYER IS HIT BY A CRAWLER level.plr_vox["general"]["crawl_hit_response"] = undefined; //RESPONSE TO ABOVE //PERKS: Play whenever a player buys a perk. level.plr_vox["perk"] = []; level.plr_vox["perk"]["specialty_armorvest"] = "perk_jugga"; //JUGGERNOG PURCHASE level.plr_vox["perk"]["specialty_armorvest_response"] = undefined; //JUGGERNOG PURCHASE RESPONSE level.plr_vox["perk"]["specialty_quickrevive"] = "perk_revive"; //REVIVE SODA PURCHASE level.plr_vox["perk"]["specialty_quickrevive_response"] = undefined; //REVIVE SODA PURCHASE RESPONSE level.plr_vox["perk"]["specialty_fastreload"] = "perk_speed"; //SPEED COLA PURCHASE level.plr_vox["perk"]["specialty_fastreload_response"] = undefined; //SPEED COLA PURCHASE RESPONSE level.plr_vox["perk"]["specialty_rof"] = "perk_doubletap"; //DOUBLETAP ROOTBEER PURCHASE level.plr_vox["perk"]["specialty_rof_response"] = undefined; //DOUBLETAP ROOTBEER PURCHASE RESPONSE //POWERUPS: Play whenever a player picks up a powerup level.plr_vox["powerup"] = []; level.plr_vox["powerup"]["nuke"] = "powerup_nuke"; //NUKE PICKUP level.plr_vox["powerup"]["nuke_response"] = undefined; //NUKE PICKUP RESPONSE level.plr_vox["powerup"]["insta_kill"] = "powerup_insta"; //INSTA-KILL PICKUP level.plr_vox["powerup"]["insta_kill_response"] = undefined; //INSTA-KILL PICKUP RESPONSE level.plr_vox["powerup"]["full_ammo"] = "powerup_ammo"; //MAX AMMO PICKUP level.plr_vox["powerup"]["full_ammo_response"] = undefined; //MAX AMMO PICKUP RESPONSE level.plr_vox["powerup"]["double_points"] = "powerup_double"; //DOUBLE POINTS PICKUP level.plr_vox["powerup"]["double_points_response"] = undefined; //DOUBLE POINTS PICKUP RESPONSE level.plr_vox["powerup"]["carpenter"] = "powerup_carp"; //CARPENTER PICKUP level.plr_vox["powerup"]["carpenter_response"] = undefined; //CARPENTER RESPONSE level.plr_vox["powerup"]["firesale"] = "powerup_firesale"; //FIRESALE PICKUP level.plr_vox["powerup"]["firesale_response"] = undefined; //FIRESALE RESPONSE //WEAPON KILLS: Plays whenever certain Kill Criteria are met level.plr_vox["kill"] = []; level.plr_vox["kill"]["melee"] = "kill_melee"; //PLAYER KILLS A ZOMBIE USING MELEE level.plr_vox["kill"]["melee_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["melee_instakill"] = "kill_insta"; //PLAYER KILLS A ZOMBIE USING MELEE WHILE INSTAKILL IS ACTIVE level.plr_vox["kill"]["melee_instakill_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["weapon_instakill"] = "kill_insta"; //PLAYER KILLS A ZOMBIE USING ANY WEAPON WHILE INSTAKILL IS ACTIVE level.plr_vox["kill"]["weapon_instakill_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["closekill"] = "kill_close"; //PLAYER KILLS A ZOMBIE WHO IS WITHIN 64 UNITS OF THE PLAYER level.plr_vox["kill"]["closekill_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["damage"] = "kill_damaged"; //WHEN THE PLAYER KILLS A ZOMBIE AFTER RECEIVING DAMAGE FROM SAID ZOMBIE level.plr_vox["kill"]["damage_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["streak"] = "kill_streak"; //OCCURS WHEN THE PLAYER KILLS OVER 6 ZOMBIES WITHIN A SMALL TIME PERIOD level.plr_vox["kill"]["streak_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["headshot"] = "kill_headshot"; //PLAYER KILLS A ZOMBIE WITH A HEADSHOT OVER 400 UNITS AWAY level.plr_vox["kill"]["headshot_response"] = "resp_kill_headshot"; //RESPONSE TO ABOVE level.plr_vox["kill"]["explosive"] = "kill_explo"; //PLAYER KILLS A ZOMBIE USING EXPLOSIVES level.plr_vox["kill"]["explosive_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["flame"] = "kill_flame"; //PLAYER KILLS A ZOMBIE USING FLAME level.plr_vox["kill"]["flame_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["raygun"] = "kill_ray"; //PLAYER KILLS A ZOMBIE USING THE RAYGUN level.plr_vox["kill"]["raygun_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["bullet"] = "kill_streak"; //PLAYER KILLS A ZOMBIE USING ANY BULLET BASED WEAPON level.plr_vox["kill"]["bullet_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["tesla"] = "kill_tesla"; //PLAYER KILLS 4 OR MORE ZOMBIES WITH ONE SHOT OF THE TESLA GUN level.plr_vox["kill"]["tesla_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["monkey"] = "kill_monkey"; //WHEN THE PLAYER KILLS A ZOMBIE USING THE MONKEYBOMB level.plr_vox["kill"]["monkey_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["thundergun"] = "kill_thunder"; //PLAYER KILLS A ZOMBIE USING THE THUNDERGUN level.plr_vox["kill"]["thundergun_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["freeze"] = "kill_freeze"; //PLAYER KILLS A ZOMBIE USING THE FREEZEGUN level.plr_vox["kill"]["freeze_response"] = undefined; level.plr_vox["kill"]["crawler"] = "kill_crawler"; //PLAYER KILLS A CRAWLING ZOMBIE level.plr_vox["kill"]["crawler_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["hellhound"] = "kill_hellhound"; //PLAYER KILLS A HELLHOUND level.plr_vox["kill"]["hellhound_response"] = undefined; //RESPONSE TO ABOVE level.plr_vox["kill"]["quad"] = "kill_quad"; //PLAYER KILLS A QUAD ZOMBIE level.plr_vox["kill"]["quad_response"] = undefined; //RESPONSE TO ABOVE //WEAPON PICKUPS: Each will play after the Player buys or gets a weapon from the box. Broken into weapon categories. //Can be made weapon specific, if the need arises. level.plr_vox["weapon_pickup"] = []; level.plr_vox["weapon_pickup"]["pistol"] = "wpck_crappy"; level.plr_vox["weapon_pickup"]["pistol_response"] = undefined; level.plr_vox["weapon_pickup"]["smg"] = "wpck_smg"; level.plr_vox["weapon_pickup"]["smg_response"] = undefined; level.plr_vox["weapon_pickup"]["dualwield"] = "wpck_dual"; level.plr_vox["weapon_pickup"]["dualwield_response"] = undefined; level.plr_vox["weapon_pickup"]["shotgun"] = "wpck_shotgun"; level.plr_vox["weapon_pickup"]["shotgun_response"] = undefined; level.plr_vox["weapon_pickup"]["rifle"] = "wpck_sniper"; level.plr_vox["weapon_pickup"]["rifle_response"] = undefined; level.plr_vox["weapon_pickup"]["burstrifle"] = "wpck_mg"; level.plr_vox["weapon_pickup"]["burstrifle_response"] = undefined; level.plr_vox["weapon_pickup"]["assault"] = "wpck_mg"; level.plr_vox["weapon_pickup"]["assault_response"] = undefined; level.plr_vox["weapon_pickup"]["sniper"] = "wpck_sniper"; level.plr_vox["weapon_pickup"]["sniper_response"] = undefined; level.plr_vox["weapon_pickup"]["mg"] = "wpck_mg"; level.plr_vox["weapon_pickup"]["mg_response"] = undefined; level.plr_vox["weapon_pickup"]["launcher"] = "wpck_launcher"; level.plr_vox["weapon_pickup"]["launcher_response"] = undefined; level.plr_vox["weapon_pickup"]["grenade"] = "wpck_crappy"; level.plr_vox["weapon_pickup"]["grenade_response"] = undefined; level.plr_vox["weapon_pickup"]["bowie"] = "wpck_bowie"; level.plr_vox["weapon_pickup"]["bowie_response"] = undefined; level.plr_vox["weapon_pickup"]["raygun"] = "wpck_raygun"; level.plr_vox["weapon_pickup"]["raygun_response"] = undefined; level.plr_vox["weapon_pickup"]["monkey"] = "wpck_monkey"; level.plr_vox["weapon_pickup"]["monkey_response"] = "resp_wpck_monkey"; level.plr_vox["weapon_pickup"]["tesla"] = "wpck_tesla"; level.plr_vox["weapon_pickup"]["tesla_response"] = undefined; level.plr_vox["weapon_pickup"]["thunder"] = "wpck_thunder"; level.plr_vox["weapon_pickup"]["thunder_response"] = undefined; level.plr_vox["weapon_pickup"]["freezegun"] = "wpck_freeze"; level.plr_vox["weapon_pickup"]["freezegun_response"] = undefined; level.plr_vox["weapon_pickup"]["crossbow"] = "wpck_launcher"; level.plr_vox["weapon_pickup"]["crossbow_response"] = undefined; level.plr_vox["weapon_pickup"]["upgrade"] = "wpck_upgrade"; level.plr_vox["weapon_pickup"]["upgrade_response"] = undefined; level.plr_vox["weapon_pickup"]["upgrade_wait"] = "wpck_upgrade_wait"; level.plr_vox["weapon_pickup"]["upgrade_wait_response"] = undefined; level.plr_vox["weapon_pickup"]["favorite"] = "wpck_favorite"; level.plr_vox["weapon_pickup"]["favorite_response"] = undefined; level.plr_vox["weapon_pickup"]["favorite_upgrade"] = "wpck_favorite_upgrade"; level.plr_vox["weapon_pickup"]["favorite_upgrade_response"] = undefined; //EGGS and OTHER STUFF: Egg lines, achievements, etc level.plr_vox["eggs"] = []; level.plr_vox["eggs"]["achievement"] = "achievement"; level.plr_vox["eggs"]["music_activate"] = "secret"; level.plr_vox["eggs"]["meteors"] = "egg_pedastool"; level.plr_vox["eggs"]["room_screen"] = "egg_room_screen"; level.plr_vox["eggs"]["room_dress"] = "egg_room_dress"; level.plr_vox["eggs"]["room_lounge"] = "egg_room_lounge"; level.plr_vox["eggs"]["room_rest"] = "egg_room_rest"; level.plr_vox["eggs"]["room_alley"] = "egg_room_alley"; level.plr_vox["eggs"]["portrait_dempsey"] = "egg_port_dempsey"; level.plr_vox["eggs"]["portrait_nikolai"] = "egg_port_nikolai"; level.plr_vox["eggs"]["portrait_takeo"] = "egg_port_takeo"; level.plr_vox["eggs"]["portrait_richtofan"] = "egg_port_richtofan"; level.plr_vox["eggs"]["portrait_empty"] = "egg_port_empty"; //**ZOMBIE VOCALIZATIONS**\\ //ARRAY and PREFIX: Setting up a prefix and array for all Zombie vocalizations level.zmb_vox = []; level.zmb_vox["prefix"] = "zmb_vocals_"; //Standard Zombies level.zmb_vox["zombie"] = []; level.zmb_vox["zombie"]["ambient"] = "zombie_ambience"; level.zmb_vox["zombie"]["sprint"] = "zombie_sprint"; level.zmb_vox["zombie"]["attack"] = "zombie_attack"; level.zmb_vox["zombie"]["teardown"] = "zombie_teardown"; level.zmb_vox["zombie"]["taunt"] = "zombie_taunt"; level.zmb_vox["zombie"]["behind"] = "zombie_behind"; level.zmb_vox["zombie"]["death"] = "zombie_death"; level.zmb_vox["zombie"]["crawler"] = "zombie_crawler"; //Quad Zombies level.zmb_vox["quad_zombie"] = []; level.zmb_vox["quad_zombie"]["ambient"] = "quad_ambience"; level.zmb_vox["quad_zombie"]["sprint"] = "quad_sprint"; level.zmb_vox["quad_zombie"]["attack"] = "quad_attack"; level.zmb_vox["quad_zombie"]["behind"] = "quad_behind"; level.zmb_vox["quad_zombie"]["death"] = "quad_death"; //Thief Zombies level.zmb_vox["thief_zombie"] = []; level.zmb_vox["thief_zombie"]["ambient"] = "thief_ambience"; level.zmb_vox["thief_zombie"]["sprint"] = "thief_sprint"; level.zmb_vox["thief_zombie"]["steal"] = "thief_steal"; level.zmb_vox["thief_zombie"]["death"] = "thief_death"; level.zmb_vox["thief_zombie"]["anger"] = "thief_anger"; //Boss Zombies level.zmb_vox["boss_zombie"] = []; level.zmb_vox["boss_zombie"]["ambient"] = "boss_ambience"; level.zmb_vox["boss_zombie"]["sprint"] = "boss_sprint"; level.zmb_vox["boss_zombie"]["attack"] = "boss_attack"; level.zmb_vox["boss_zombie"]["behind"] = "boss_behind"; level.zmb_vox["boss_zombie"]["death"] = "boss_death"; } init_audio_functions() { flag_wait( "all_players_connected" ); players = get_players(); for( i = 0; i { players[i] thread zombie_behind_vox(); players[i] thread player_killstreak_timer(); players[i] thread oh_shit_vox(); } } //Plays a specific Zombie vocal when they are close behind the player //Self is the Player(s) zombie_behind_vox() { self endon("disconnect"); self endon("death"); while(1) { wait(1); zombs = GetAISpeciesArray("axis"); for(i=0;i { if(!isDefined(zombs[i])) { continue; } if(zombs[i].isdog) { continue; } dist = 200; z_dist = 50; alias = level.vox_behind_zombie; if(IsDefined(zombs[i].zombie_move_speed)) { switch(zombs[i].zombie_move_speed) { case "walk": dist = 200;break; case "run": dist = 250;break; case "sprint": dist = 275;break; } } if(DistanceSquared(zombs[i].origin,self.origin) { yaw = self animscripts\utility::GetYawToSpot(zombs[i].origin ); z_diff = self.origin[2] - zombs[i].origin[2]; if( (yaw 95) && abs( z_diff ) { zombs[i] thread maps\_zombiemode_audio::do_zombies_playvocals( "behind", zombs[i].animname ); } } } } } do_zombies_playvocals( alias_type, zombie_type ) { self endon( "death" ); if( !IsDefined( zombie_type ) ) { zombie_type = "zombie"; } if( !IsDefined( self.talking ) ) { self.talking = false; } //DEBUG SECTION if( !IsDefined( level.zmb_vox[zombie_type] ) ) { /# IPrintLnBold( "AUDIO - ZOMBIE TYPE: " + zombie_type + " has NO aliases set up for it." ); #/ return; } if( !IsDefined( level.zmb_vox[zombie_type][alias_type] ) ) { /# IPrintLnBold( "AUDIO - ZOMBIE TYPE: " + zombie_type + " has NO aliases set up for ALIAS_TYPE: " + alias_type ); #/ return; } alias = level.zmb_vox["prefix"] + level.zmb_vox[zombie_type][alias_type]; if( alias_type == "attack" || alias_type == "behind" || alias_type == "death" || alias_type == "anger" || alias_type == "steal" ) { self PlaySound( alias ); } else if( !self.talking ) { self.talking = true; self PlaySound( alias, "sounddone" ); self waittill( "sounddone" ); self.talking = false; } } oh_shit_vox() { self endon("disconnect"); self endon("death"); while(1) { wait(1); players = getplayers(); zombs = GetAISpeciesArray("axis"); if( players.size > 1 ) { close_zombs = 0; for( i=0; i { if( DistanceSquared( zombs[i].origin, self.origin ) { close_zombs ++; } } if( close_zombs > 4 ) { if( randomintrange( 0, 20 ) { self create_and_play_dialog( "general", "oh_shit" ); } } } } } //**Player Dialog - The following functions all serve to play Player dialog //**To use create_and_play_dialog, _zombiemode_audio must be included in the GSC you're using the function in, or you must //**call the function like so: player maps\_zombiemode_audio::create_and_play_dialog() create_and_play_dialog( category, type, response, force_variant ) { waittime = .25; /# if( GetDvarInt( #"debug_audio" ) > 0 ) level thread dialog_debugger( category, type ); #/ if( !IsDefined( level.plr_vox[category][type] ) ) { //IPrintLnBold( "No Category: " + category + " and Type: " + type ); return; } alias_suffix = level.plr_vox[category][type]; if( IsDefined( response ) ) alias_suffix = response + alias_suffix; index = maps\_zombiemode_weapons::get_player_index(self); prefix = level.plr_vox["prefix"] + index + "_"; if( !IsDefined ( self.sound_dialog ) ) { self.sound_dialog = []; self.sound_dialog_available = []; } if ( !IsDefined ( self.sound_dialog[ alias_suffix ] ) ) { num_variants = maps\_zombiemode_spawner::get_number_variants( prefix + alias_suffix ); //TOOK OUT THE ASSERT AND ADDED THIS CHECK FOR LOCS if( num_variants { return; } //assertex( num_variants > 0, "No dialog variants found for category: " + alias_suffix ); for( i = 0; i { self.sound_dialog[ alias_suffix ][ i ] = i; } self.sound_dialog_available[ alias_suffix ] = []; } if ( self.sound_dialog_available[ alias_suffix ].size { self.sound_dialog_available[ alias_suffix ] = self.sound_dialog[ alias_suffix ]; } variation = random( self.sound_dialog_available[ alias_suffix ] ); self.sound_dialog_available[ alias_suffix ] = array_remove( self.sound_dialog_available[ alias_suffix ], variation ); if( IsDefined( force_variant ) ) { variation = force_variant; } sound_to_play = alias_suffix + "_" + variation; self thread do_player_playvox( prefix, index, sound_to_play, waittime, category, type ); } do_player_playvox( prefix, index, sound_to_play, waittime, category, type ) { if( !IsDefined( level.player_is_speaking ) ) { level.player_is_speaking = 0; } if( level.player_is_speaking != 1 ) { level.player_is_speaking = 1; self playsound( prefix + sound_to_play, "sound_done" + sound_to_play ); self waittill( "sound_done" + sound_to_play ); wait( waittime ); level.player_is_speaking = 0; if( isdefined( level.plr_vox[category][type + "_response"] ) ) { level thread setup_response_line( self, index, category, type ); } } } setup_response_line( player, index, category, type ) { Dempsey = 0; Nikolai = 1; Takeo = 2; Richtofen = 3; switch( index ) { case 0: level setup_hero_rival( player, Takeo, Richtofen, category, type ); break; case 1: level setup_hero_rival( player, Richtofen, Takeo, category, type ); break; case 2: level setup_hero_rival( player, Dempsey, Nikolai, category, type ); break; case 3: level setup_hero_rival( player, Nikolai, Dempsey, category, type ); break; } return; } setup_hero_rival( player, hero, rival, category, type ) { players = getplayers(); playHero = isdefined(players[hero]); playRival = isdefined(players[rival]); if(playHero && playRival) { if(randomfloatrange(0,1) { playRival = false; } else { playHero = false; } } if( playHero ) { if( distancesquared (player.origin, players[hero].origin) { players[hero] create_and_play_dialog( category, type + "_response", "hr_" ); } else if( isdefined( players[rival] ) ) { playRival = true; } } if( playRival ) { if( distancesquared (player.origin, players[rival].origin) { players[rival] create_and_play_dialog( category, type + "_response", "riv_" ); } } } //For any 2d Announcer Line do_announcer_playvox( category ) { if( !IsDefined( category ) ) return; if( !IsDefined( level.devil_is_speaking ) ) { level.devil_is_speaking = 0; } alias = level.devil_vox["prefix"] + category; if( level.devil_is_speaking == 0 ) { level.devil_is_speaking = 1; level play_sound_2D( alias ); wait 2.0; level.devil_is_speaking =0; } } //** Player Killstreaks: The following functions start a timer on each player whenever they begin killing zombies. //** If they kill a certain amount of zombies within a certain time, they will get a Killstreak line player_killstreak_timer() { self endon("disconnect"); self endon("death"); if(getdvar ("zombie_kills") == "") { setdvar ("zombie_kills", "7"); } if(getdvar ("zombie_kill_timer") == "") { setdvar ("zombie_kill_timer", "5"); } kills = GetDvarInt( #"zombie_kills"); time = GetDvarInt( #"zombie_kill_timer"); if (!isdefined (self.timerIsrunning)) { self.timerIsrunning = 0; } while(1) { self waittill("zom_kill"); self.killcounter ++; if (self.timerIsrunning != 1) { self.timerIsrunning = 1; self thread timer_actual(kills, time); } } } player_zombie_kill_vox( hit_location, player, mod, zombie ) { weapon = player GetCurrentWeapon(); dist = DistanceSquared( player.origin, zombie.origin ); if( !isdefined(level.zombie_vars["zombie_insta_kill"] ) ) level.zombie_vars["zombie_insta_kill"] = 0; instakill = level.zombie_vars["zombie_insta_kill"]; death = get_mod_type( hit_location, mod, weapon, zombie, instakill, dist ); chance = get_mod_chance( death ); if( chance > RandomIntRange( 1, 100 ) ) { player create_and_play_dialog( "kill", death ); } } get_mod_chance( meansofdeath ) { chance = undefined; switch( meansofdeath ) { case "melee": chance = 75; break; case "melee_instakill": chance = 99; break; case "weapon_instakill": chance = 10; break; case "explosive": chance = 60; break; case "flame": chance = 60; break; case "raygun": chance = 75; break; case "headshot": chance = 99; break; case "crawler": chance = 30; break; case "quad": chance = 30; break; case "closekill": chance = 15; break; case "bullet": chance = 10; break; case "default": chance = 10; break; } return chance; } get_mod_type( impact, mod, weapon, zombie, instakill, dist ) { close_dist = 64 * 64; far_dist = 400 * 400; //MELEE & MELEE_INSTAKILL if( ( mod == "MOD_MELEE" || mod == "MOD_BAYONET" || mod == "MOD_UNKNOWN" ) && dist { if( !instakill ) return "melee"; else return "melee_instakill"; } //EXPLOSIVE & EXPLOSIVE_INSTAKILL if( ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" || mod == "MOD_PROJECTILE_SPLASH" || mod == "MOD_EXPLOSIVE" ) && weapon != "ray_gun_zm" ) { if( !instakill ) return "explosive"; else return "weapon_instakill"; } //FLAME & FLAME_INSTAKILL if( ( IsSubStr( weapon, "flame" ) || IsSubStr( weapon, "molotov_" ) || IsSubStr( weapon, "napalmblob_" ) ) && ( mod == "MOD_BURNED" || mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) ) { if( !instakill ) return "flame"; else return "weapon_instakill"; } //RAYGUN & RAYGUN_INSTAKILL if( weapon == "ray_gun_zm" && dist > far_dist ) { if( !instakill ) return "raygun"; else return "weapon_instakill"; } //HEADSHOT if( ( mod == "MOD_RIFLE_BULLET" || mod == "MOD_PISTOL_BULLET" ) && ( impact == "head" && dist > far_dist && !instakill ) ) { return "headshot"; } //QUAD if( mod != "MOD_MELEE" && impact != "head" && zombie.animname == "quad_zombie" && !instakill ) { return "quad"; } //CRAWLER if( mod != "MOD_MELEE" && impact != "head" && !zombie.has_legs && !instakill ) { return "crawler"; } //CLOSEKILL if( mod != "MOD_BURNED" && dist !instakill ) { return "closekill"; } //BULLET & BULLET_INSTAKILL if( mod == "MOD_RIFLE_BULLET" || mod == "MOD_PISTOL_BULLET" ) { if( !instakill ) return "bullet"; else return "weapon_instakill"; } return "default"; } timer_actual(kills, time) { self endon("disconnect"); self endon("death"); timer = gettime() + (time * 1000); while(getTime() { if (self.killcounter > kills) { self create_and_play_dialog( "kill", "streak" ); wait(1); //resets the killcounter and the timer self.killcounter = 0; timer = -1; } wait(0.1); } self.killcounter = 0; self.timerIsrunning = 0; } perks_a_cola_jingle_timer() { self thread play_random_broken_sounds(); while(1) { //wait(randomfloatrange(60, 120)); wait(randomfloatrange(31,45)); if(randomint(100) { self thread play_jingle_or_stinger(self.script_sound); } } } play_jingle_or_stinger( perksacola ) { playsoundatposition ("evt_electrical_surge", self.origin); if(!IsDefined (self.jingle_is_playing )) { self.jingle_is_playing = 0; } if (IsDefined ( perksacola )) { if(self.jingle_is_playing == 0 && level.music_override == false) { self.jingle_is_playing = 1; self playsound ( perksacola, "sound_done"); self waittill ("sound_done"); self.jingle_is_playing = 0; } } } play_random_broken_sounds() { level endon ("jingle_playing"); if (!isdefined (self.script_sound)) { self.script_sound = "null"; } if (self.script_sound == "mus_perks_revive_jingle") { while(1) { wait(randomfloatrange(7, 18)); playsoundatposition ("zmb_perks_broken_jingle", self.origin); //playfx (level._effect["electric_short_oneshot"], self.origin); playsoundatposition ("evt_electrical_surge", self.origin); } } else { while(1) { wait(randomfloatrange(7, 18)); // playfx (level._effect["electric_short_oneshot"], self.origin); playsoundatposition ("evt_electrical_surge", self.origin); } } } //SELF = Player Buying Perk perk_vox( perk ) { //Delay to prevent an early speech wait( 1.5 ); if( !IsDefined( level.plr_vox["perk"][perk] ) ) { /# IPrintLnBold( perk + " has no PLR VOX category set up." ); #/ return; } self create_and_play_dialog( "perk", perk ); } dialog_debugger( category, type ) { /# PrintLn( "DIALOG DEBUGGER: Category - " + category + " Type - " + type + " Response - " + type + "_response" ); if( !IsDefined( level.plr_vox[category][type] ) ) { IPrintLnBold( "Player tried to play a line, but no alias exists. Category: " + category + " Type: " + type ); PrintLn( "DIALOG DEBUGGER ERROR: Alias Not Defined For " + category + " " + type ); } if( !IsDefined( level.plr_vox[category][type + "_response" ] ) ) PrintLn( "DIALOG DEBUGGER ERROR: Response Alias Not Defined For " + category + " " + type + "_response" ); #/ } //MUSIC STATES init_music_states() { level.music_override = false; level.music_round_override = false; level.zmb_music_states = []; level.zmb_music_states["round_start"] = spawnStruct(); level.zmb_music_states["round_start"].music = "mus_zombie_round_start"; level.zmb_music_states["round_start"].is_alias = true; level.zmb_music_states["round_start"].override = true; level.zmb_music_states["round_start"].round_override = true; level.zmb_music_states["round_start"].musicstate = "WAVE"; level.zmb_music_states["round_end"] = spawnStruct(); level.zmb_music_states["round_end"].music = "mus_zombie_round_over"; level.zmb_music_states["round_end"].is_alias = true; level.zmb_music_states["round_end"].override = true; level.zmb_music_states["round_end"].round_override = true; level.zmb_music_states["round_end"].musicstate = "SILENCE"; level.zmb_music_states["wave_loop"] = spawnStruct(); level.zmb_music_states["wave_loop"].music = "WAVE"; level.zmb_music_states["wave_loop"].is_alias = false; level.zmb_music_states["wave_loop"].override = true; level.zmb_music_states["game_over"] = spawnStruct(); level.zmb_music_states["game_over"].music = "mus_zombie_game_over"; level.zmb_music_states["game_over"].is_alias = true; level.zmb_music_states["game_over"].override = false; level.zmb_music_states["game_over"].musicstate = "SILENCE"; level.zmb_music_states["dog_start"] = spawnStruct(); level.zmb_music_states["dog_start"].music = "mus_zombie_dog_start"; level.zmb_music_states["dog_start"].is_alias = true; level.zmb_music_states["dog_start"].override = true; level.zmb_music_states["dog_end"] = spawnStruct(); level.zmb_music_states["dog_end"].music = "mus_zombie_dog_end"; level.zmb_music_states["dog_end"].is_alias = true; level.zmb_music_states["dog_end"].override = true; level.zmb_music_states["egg"] = spawnStruct(); level.zmb_music_states["egg"].music = "EGG"; level.zmb_music_states["egg"].is_alias = false; level.zmb_music_states["egg"].override = false; level.zmb_music_states["egg_safe"] = spawnStruct(); level.zmb_music_states["egg_safe"].music = "EGG_SAFE"; level.zmb_music_states["egg_safe"].is_alias = false; level.zmb_music_states["egg_safe"].override = false; } change_zombie_music( state ) { wait(.05); m = level.zmb_music_states[state]; if( !IsDefined( m ) ) { /# IPrintLnBold( "Called change_zombie_music on undefined state: " + state ); #/ return; } if( !IsDefined( m.round_override ) ) m.round_override = false; if( m.override == true && level.music_override == true ) return; if( m.round_override == true && level.music_round_override == true ) return; if( m.is_alias ) { if( IsDefined( m.musicstate ) ) setmusicstate( m.musicstate ); play_sound_2d( m.music ); } else { setmusicstate( m.music ); } } (this one is huge...more coming)
-
Here's what I got... I'll even throw in some Bonus Stuff!!! Zombie_theater #include common_scripts\utility; #include maps\_utility; #include maps\_zombiemode_utility; #include maps\_zombiemode_zone_manager; //#include maps\_zombiemode_protips; #include maps\zombie_theater_magic_box; #include maps\zombie_theater_movie_screen; #include maps\zombie_theater_quad; #include maps\zombie_theater_teleporter; main() { maps\zombie_theater_fx::main(); maps\zombie_theater_amb::main(); PreCacheModel("zombie_zapper_cagelight_red"); precachemodel("zombie_zapper_cagelight_green"); precacheShader("ac130_overlay_grain"); precacheshellshock( "electrocution" ); // ww: model used for ee rooms PreCacheModel( "zombie_theater_reelcase_obj" ); PreCacheShader( "zom_icon_theater_reel" ); // ww: viewmodel arms for the level PreCacheModel( "viewmodel_usa_pow_arms" ); // Dempsey PreCacheModel( "viewmodel_rus_prisoner_arms" ); // Nikolai PreCacheModel( "viewmodel_vtn_nva_standard_arms" );// Takeo PreCacheModel( "viewmodel_usa_hazmat_arms" );// Richtofen // DSM: models for light changing PreCacheModel("zombie_zapper_cagelight_on"); precachemodel("zombie_zapper_cagelight"); PreCacheModel("lights_hang_single"); precachemodel("lights_hang_single_on_nonflkr"); precachemodel("zombie_theater_chandelier1arm_off"); precachemodel("zombie_theater_chandelier1arm_on"); precachemodel("zombie_theater_chandelier1_off"); precachemodel("zombie_theater_chandelier1_on"); if(GetDvarInt( #"artist") > 0) { return; } level.dogs_enabled = true; level.random_pandora_box_start = true; level.zombie_anim_override = maps\zombie_theater::anim_override_func; // Animations needed for door initialization curtain_anim_init(); level thread maps\_callbacksetup::SetupCallbacks(); level.quad_move_speed = 35; level.quad_traverse_death_fx = maps\zombie_theater_quad::quad_traverse_death_fx; level.quad_explode = true; level.dog_spawn_func = maps\_zombiemode_ai_dogs::dog_spawn_factory_logic; level.exit_level_func = ::theater_exit_level; // Special zombie types, engineer and quads. level.custom_ai_type = []; level.custom_ai_type = array_add( level.custom_ai_type, maps\_zombiemode_ai_quad::init ); level.custom_ai_type = array_add( level.custom_ai_type, maps\_zombiemode_ai_dogs::init ); level.door_dialog_function = maps\_zombiemode::play_door_dialog; level.first_round_spawn_func = true; //level.round_spawn_func = maps\zombie_theater_quad::Intro_Quad_Spawn;; include_weapons(); include_powerups(); level.use_zombie_heroes = true; level.disable_protips = 1; // DO ACTUAL ZOMBIEMODE INIT maps\_zombiemode::main(); // maps\_zombiemode_timer::init(); // Turn off generic battlechatter - Steve G battlechatter_off("allies"); battlechatter_off("axis"); maps\_zombiemode_ai_dogs::enable_dog_rounds(); init_zombie_theater(); // Setup the levels Zombie Zone Volumes maps\_compass::setupMiniMap("menu_map_zombie_theater"); level.ignore_spawner_func = ::theater_ignore_spawner; level.zone_manager_init_func = ::theater_zone_init; init_zones[0] = "foyer_zone"; init_zones[1] = "foyer2_zone"; level thread maps\_zombiemode_zone_manager::manage_zones( init_zones ); level thread maps\_zombiemode_auto_turret::init(); level thread set_rope_collision(); // DCS: extracam screen stuff. level.extracam_screen = GetEnt("theater_extracam_screen", "targetname"); level.extracam_screen Hide(); clientnotify("camera_stop"); init_sounds(); level thread add_powerups_after_round_1(); visionsetnaked( "zombie_theater", 0 ); // DSM: Setting chandelier Scale chandelier = getentarray("theater_chandelier","targetname"); array_thread( chandelier, ::theater_chandelier_model_scale ); maps\zombie_theater_teleporter::teleport_pad_hide_use(); } #using_animtree( "generic_human" ); anim_override_func() { level.scr_anim["zombie"]["walk7"] = %ai_zombie_walk_v8; //goose step walk } //***************************************************************************** #using_animtree( "zombie_theater" ); curtain_anim_init() { level.scr_anim["curtains_move"] = %o_zombie_theatre_curtain; } theater_playanim( animname ) { self UseAnimTree(#animtree); self animscripted(animname + "_done", self.origin, self.angles, level.scr_anim[animname],"normal", undefined, 2.0 ); } //***************************************************************************** // WEAPON FUNCTIONS // // Include the weapons that are only in your level so that the cost/hints are accurate // Also adds these weapons to the random treasure chest. // Copy all include_weapon lines over to the level.csc file too - removing the weighting funcs... //***************************************************************************** include_weapons() { include_weapon( "frag_grenade_zm", false, true ); include_weapon( "claymore_zm", false, true ); // Weapons - Pistols include_weapon( "m1911_zm", false ); // colt include_weapon( "m1911_upgraded_zm", false ); include_weapon( "python_zm" ); // 357 include_weapon( "python_upgraded_zm", false ); include_weapon( "cz75_zm" ); include_weapon( "cz75_upgraded_zm", false ); // Weapons - Semi-Auto Rifles include_weapon( "m14_zm", false, true ); // gewehr43 include_weapon( "m14_upgraded_zm", false ); // Weapons - Burst Rifles include_weapon( "m16_zm", false, true ); include_weapon( "m16_gl_upgraded_zm", false ); include_weapon( "g11_lps_zm" ); include_weapon( "g11_lps_upgraded_zm", false ); include_weapon( "famas_zm" ); include_weapon( "famas_upgraded_zm", false ); // Weapons - SMGs include_weapon( "ak74u_zm", false, true ); // thompson, mp40, bar include_weapon( "ak74u_upgraded_zm", false ); include_weapon( "mp5k_zm", false, true ); include_weapon( "mp5k_upgraded_zm", false ); include_weapon( "mp40_zm", false, true ); include_weapon( "mp40_upgraded_zm", false ); include_weapon( "mpl_zm", false, true ); include_weapon( "mpl_upgraded_zm", false ); include_weapon( "pm63_zm", false, true ); include_weapon( "pm63_upgraded_zm", false ); include_weapon( "spectre_zm" ); include_weapon( "spectre_upgraded_zm", false ); // Weapons - Dual Wield include_weapon( "cz75dw_zm" ); include_weapon( "cz75dw_upgraded_zm", false ); // Weapons - Shotguns include_weapon( "ithaca_zm", false, true ); // shotgun include_weapon( "ithaca_upgraded_zm", false ); include_weapon( "rottweil72_zm", false, true ); include_weapon( "rottweil72_upgraded_zm", false ); include_weapon( "spas_zm" ); // include_weapon( "spas_upgraded_zm", false ); include_weapon( "hs10_zm" ); include_weapon( "hs10_upgraded_zm", false ); // Weapons - Assault Rifles include_weapon( "aug_acog_zm" ); include_weapon( "aug_acog_mk_upgraded_zm", false ); include_weapon( "galil_zm" ); include_weapon( "galil_upgraded_zm", false ); include_weapon( "commando_zm" ); include_weapon( "commando_upgraded_zm", false ); include_weapon( "fnfal_zm" ); include_weapon( "fnfal_upgraded_zm", false ); // Weapons - Sniper Rifles include_weapon( "dragunov_zm" ); // ptrs41 include_weapon( "dragunov_upgraded_zm", false ); include_weapon( "l96a1_zm" ); include_weapon( "l96a1_upgraded_zm", false ); // Weapons - Machineguns include_weapon( "rpk_zm" ); // mg42, 30 cal, ppsh include_weapon( "rpk_upgraded_zm", false ); include_weapon( "hk21_zm" ); include_weapon( "hk21_upgraded_zm", false ); // Weapons - Misc include_weapon( "m72_law_zm" ); include_weapon( "m72_law_upgraded_zm", false ); include_weapon( "china_lake_zm" ); include_weapon( "china_lake_upgraded_zm", false ); // Weapons - Special include_weapon( "zombie_cymbal_monkey" ); include_weapon( "ray_gun_zm" ); include_weapon( "ray_gun_upgraded_zm", false ); include_weapon( "thundergun_zm", true ); include_weapon( "thundergun_upgraded_zm", false ); include_weapon( "crossbow_explosive_zm" ); include_weapon( "crossbow_explosive_upgraded_zm", false ); include_weapon( "knife_ballistic_zm", true ); include_weapon( "knife_ballistic_upgraded_zm", false ); include_weapon( "knife_ballistic_bowie_zm", false ); include_weapon( "knife_ballistic_bowie_upgraded_zm", false ); level._uses_retrievable_ballisitic_knives = true; // limited weapons maps\_zombiemode_weapons::add_limited_weapon( "m1911_zm", 0 ); maps\_zombiemode_weapons::add_limited_weapon( "thundergun_zm", 1 ); maps\_zombiemode_weapons::add_limited_weapon( "crossbow_explosive_zm", 1 ); maps\_zombiemode_weapons::add_limited_weapon( "knife_ballistic_zm", 1 ); precacheItem( "explosive_bolt_zm" ); precacheItem( "explosive_bolt_upgraded_zm" ); // get the bowie into the collector achievement list level.collector_achievement_weapons = array_add( level.collector_achievement_weapons, "bowie_knife_zm" ); } //***************************************************************************** // POWERUP FUNCTIONS //***************************************************************************** include_powerups() { include_powerup( "nuke" ); include_powerup( "insta_kill" ); include_powerup( "double_points" ); include_powerup( "full_ammo" ); include_powerup( "carpenter" ); include_powerup( "fire_sale" ); } add_powerups_after_round_1() { //want to precache all the stuff for these powerups, but we don't want them to be available in the first round level.zombie_powerup_array = array_remove (level.zombie_powerup_array, "nuke"); level.zombie_powerup_array = array_remove (level.zombie_powerup_array, "fire_sale"); while (1) { if (level.round_number > 1) { level.zombie_powerup_array = array_add(level.zombie_powerup_array, "nuke"); level.zombie_powerup_array = array_add(level.zombie_powerup_array, "fire_sale"); break; } wait (1); } } //***************************************************************************** init_zombie_theater() { flag_init( "curtains_done" ); flag_init( "lobby_occupied" ); flag_init( "dining_occupied" ); flag_init( "special_quad_round" ); level thread electric_switch(); // Setup the magic box map thread maps\zombie_theater_magic_box::magic_box_init(); //setup the movie screen level thread maps\zombie_theater_movie_screen::initMovieScreen(); // setup breakaway roofs thread maps\zombie_theater_quad::init_roofs(); level thread teleporter_intro(); } //***************************************************************************** teleporter_intro() { flag_wait( "all_players_spawned" ); wait( 0.25 ); players = get_players(); for ( i = 0; i { players[i] SetTransported( 2 ); } playsoundatposition( "evt_beam_fx_2d", (0,0,0) ); playsoundatposition( "evt_pad_cooldown_2d", (0,0,0) ); } //***************************************************************************** // ELECTRIC SWITCH // once this is used, it activates other objects in the map // and makes them available to use //***************************************************************************** electric_switch() { trig = getent("use_elec_switch","targetname"); trig sethintstring(&"ZOMBIE_ELECTRIC_SWITCH"); trig setcursorhint( "HINT_NOICON" ); level thread wait_for_power(); trig waittill("trigger",user); trig delete(); flag_set( "power_on" ); Objective_State(8,"done"); } // // Wait for the power_on flag to be set. This is needed to work in conjunction with // the devgui cheat. // wait_for_power() { master_switch = getent("elec_switch","targetname"); master_switch notsolid(); flag_wait( "power_on" ); master_switch rotateroll(-90,.3); master_switch playsound("zmb_switch_flip"); clientnotify( "ZPO" ); // Zombie power on. master_switch waittill("rotatedone"); playfx(level._effect["switch_sparks"] ,getstruct("elec_switch_fx","targetname").origin); //Sound - Shawn J - adding temp sound to looping sparks & turning on power sources master_switch playsound("zmb_turn_on"); //get the teleporter ready maps\zombie_theater_teleporter::teleporter_init(); wait_network_frame(); // Set Perk Machine Notifys level notify("revive_on"); wait_network_frame(); level notify("juggernog_on"); wait_network_frame(); level notify("sleight_on"); wait_network_frame(); level notify("doubletap_on"); wait_network_frame(); level notify("Pack_A_Punch_on" ); wait_network_frame(); // start quad round // Set number of quads per round players = get_players(); level.quads_per_round = 4 * players.size; // initial setting level notify("quad_round_can_end"); level.delay_spawners = undefined; //maps\zombie_theater_quad::begin_quad_introduction("theater_round"); //level.round_spawn_func = maps\zombie_theater_quad::Intro_Quad_Spawn;; //maps\zombie_theater_quad::Theater_Quad_Round(); // DCS: start check for potential quad waves after power turns on. level thread quad_wave_init(); } //AUDIO init_sounds() { maps\_zombiemode_utility::add_sound( "wooden_door", "zmb_door_wood_open" ); maps\_zombiemode_utility::add_sound( "fence_door", "zmb_door_fence_open" ); } // ***************************************************************************** // Zone management // ***************************************************************************** theater_zone_init() { flag_init( "always_on" ); flag_set( "always_on" ); // foyer_zone add_adjacent_zone( "foyer_zone", "foyer2_zone", "always_on" ); add_adjacent_zone( "foyer_zone", "vip_zone", "magic_box_foyer1" ); add_adjacent_zone( "foyer2_zone", "crematorium_zone", "magic_box_crematorium1" ); add_adjacent_zone( "foyer_zone", "crematorium_zone", "magic_box_crematorium1" ); // vip_zone add_adjacent_zone( "vip_zone", "dining_zone", "vip_to_dining" ); // crematorium_zone add_adjacent_zone( "crematorium_zone", "alleyway_zone", "magic_box_alleyway1" ); // dining_zone add_adjacent_zone( "dining_zone", "dressing_zone", "dining_to_dressing" ); // dressing_zone add_adjacent_zone( "dressing_zone", "stage_zone", "magic_box_dressing1" ); // stage_zone add_adjacent_zone( "stage_zone", "west_balcony_zone", "magic_box_west_balcony2" ); // theater_zone add_adjacent_zone( "theater_zone", "foyer2_zone", "power_on" ); add_adjacent_zone( "theater_zone", "stage_zone", "power_on" ); // west_balcony_zone add_adjacent_zone( "west_balcony_zone", "alleyway_zone", "magic_box_west_balcony1" ); } theater_ignore_spawner( spawner ) { // no curtains, no quads if ( !flag( "curtains_done" ) ) { if ( spawner.script_noteworthy == "quad_zombie_spawner" ) { return true; } } // DCS: when special round happens, first half quads. if ( flag( "special_quad_round" ) ) { if ( spawner.script_noteworthy != "quad_zombie_spawner" ) { return true; } } if ( !flag( "lobby_occupied" ) ) { if ( spawner.script_noteworthy == "quad_zombie_spawner" && spawner.targetname == "foyer_zone_spawners" ) { return true; } } if ( !flag( "dining_occupied" ) ) { if ( spawner.script_noteworthy == "quad_zombie_spawner" && spawner.targetname == "zombie_spawner_dining" ) { return true; } } return false; } // ***************************************************************************** // DCS: random round change quad emphasis // This should only happen in zones where quads spawn into // and crawl down the wall. // potential zones: foyer_zone, theater_zone, stage_zone, dining_zone // ***************************************************************************** quad_wave_init() { level thread time_for_quad_wave("foyer_zone"); level thread time_for_quad_wave("theater_zone"); level thread time_for_quad_wave("stage_zone"); level thread time_for_quad_wave("dining_zone"); level waittill( "end_of_round" ); flag_clear( "special_quad_round" ); } time_for_quad_wave(zone_name) { if(!IsDefined(zone_name)) { return; } zone = level.zones[ zone_name ]; // wait for round change. level waittill( "between_round_over" ); //avoid dog rounds. if ( IsDefined( level.next_dog_round ) && level.next_dog_round == level.round_number ) { level thread time_for_quad_wave(zone_name); return; } // ripped from spawn script for accuracy. ------------------------------------- max = level.zombie_vars["zombie_max_ai"]; multiplier = level.round_number / 5; if( multiplier { multiplier = 1; } if( level.round_number >= 10 ) { multiplier *= level.round_number * 0.15; } player_num = get_players().size; if( player_num == 1 ) { max += int( ( 0.5 * level.zombie_vars["zombie_ai_per_player"] ) * multiplier ); } else { max += int( ( ( player_num - 1 ) * level.zombie_vars["zombie_ai_per_player"] ) * multiplier ); } // ripped from spawn script for accuracy. ------------------------------------- //percent chance. chance = 100; max_zombies = [[ level.max_zombie_func ]]( max ); current_round = level.round_number; // every third round a chance of a quad wave. if((level.round_number % 3 == 0) && chance >= RandomInt(100)) { if(zone.is_occupied) { flag_set( "special_quad_round" ); maps\_zombiemode_zone_manager::reinit_zone_spawners(); while( level.zombie_total { wait(0.1); } //level waittill( "end_of_round" ); flag_clear( "special_quad_round" ); maps\_zombiemode_zone_manager::reinit_zone_spawners(); } } level thread time_for_quad_wave(zone_name); } // DSM: Setting Chandelier Model Scale theater_chandelier_model_scale() { flag_wait( "power_on" ); if( self.model == "zombie_theater_chandelier1arm_off") { self SetModel("zombie_theater_chandelier1arm_on"); } else if( self.model == "zombie_theater_chandelier1_off") { self SetModel("zombie_theater_chandelier1_on"); } } set_rope_collision() { techrope = getentarray("techrope01", "targetname"); if(isdefined(techrope)) { for( i = 0; i { ropesetflag( techrope[i], "collide", 1 ); ropesetflag( techrope[i], "no_lod", 1 ); } } } theater_exit_level() { zombies = GetAiArray( "axis" ); for ( i = 0; i { zombies[i] thread theater_find_exit_point(); } } theater_find_exit_point() { self endon( "death" ); player = getplayers()[0]; dist_zombie = 0; dist_player = 0; dest = 0; away = VectorNormalize( self.origin - player.origin ); endPos = self.origin + vector_scale( away, 600 ); locs = array_randomize( level.enemy_dog_locations ); for ( i = 0; i { dist_zombie = DistanceSquared( locs[i].origin, endPos ); dist_player = DistanceSquared( locs[i].origin, player.origin ); if ( dist_zombie { dest = i; break; } } self notify( "stop_find_flesh" ); self notify( "zombie_acquire_enemy" ); self setgoalpos( locs[dest].origin ); while ( 1 ) { if ( !flag( "wait_and_revive" ) ) { break; } wait_network_frame(); } self thread maps\_zombiemode_spawner::find_flesh(); } Zombie_Theater_AMB // // file: zombie_pentagon_amb.gsc // description: level ambience script for zombie_pentagon // scripter: // #include common_scripts\utility; #include maps\_utility; #include maps\_ambientpackage; #include maps\_music; #include maps\_zombiemode_utility; #include maps\_busing; main() { level thread setup_power_on_sfx(); level thread play_projecter_loop(); level thread play_projecter_soundtrack(); level thread setup_meteor_audio(); level thread setup_radio_egg_audio(); array_thread( GetEntArray( "portrait_egg", "targetname" ), ::portrait_egg_vox ); array_thread( GetEntArray( "location_egg", "targetname" ), ::location_egg_vox ); } setup_power_on_sfx() { wait(5); sound_emitters = getstructarray ("amb_power", "targetname"); flag_wait("power_on"); level thread play_evil_generator_audio(); for(i=0;i { sound_emitters[i] thread play_emitter(); } } play_emitter() { wait (randomfloatrange (0.1, 1)); playsoundatposition ("amb_circuit", self.origin); wait (randomfloatrange (0.05, 0.5)); soundloop = spawn ("script_origin", self.origin); soundloop playloopsound (self.script_sound); } play_evil_generator_audio() { playsoundatposition ("evt_flip_sparks_left", (-544, 1320, 32)); playsoundatposition ("evt_flip_sparks_right", (-400, 1320, 32)); wait(2); playsoundatposition ("evt_crazy_power_left", (-304, 1120, 344)); playsoundatposition ("evt_crazy_power_right", (408, 1136, 344)); wait(13); playsoundatposition ("evt_crazy_power_left_end", (-304, 1120, 344)); playsoundatposition ("evt_crazy_power_right_end", (408, 1136, 344)); playsoundatposition ("evt_flip_switch_laugh_left", (-536, 1336, 704)); playsoundatposition ("evt_flip_switch_laugh_right", (576, 1336, 704)); level notify ("generator_done"); } play_projecter_soundtrack() { level waittill( "generator_done"); wait(20); //TEMP speaker = spawn ("script_origin", (32, 1216, 592)); speaker playloopsound ("amb_projecter_soundtrack"); } play_projecter_loop() { level waittill( "generator_done"); projecter = spawn ("script_origin", (-72, -144, 384)); projecter playloopsound ("amb_projecter"); } setup_meteor_audio() { wait(1); level.meteor_counter = 0; level.music_override = false; array_thread( GetEntArray( "meteor_egg_trigger", "targetname" ), ::meteor_egg ); } play_music_easter_egg( player ) { level.music_override = true; level thread maps\_zombiemode_audio::change_zombie_music( "egg" ); wait(4); if( IsDefined( player ) ) { player maps\_zombiemode_audio::create_and_play_dialog( "eggs", "music_activate" ); } wait(236); level.music_override = false; level thread maps\_zombiemode_audio::change_zombie_music( "wave_loop" ); } meteor_egg() { if( !isdefined( self ) ) { return; } self UseTriggerRequireLookAt(); self SetCursorHint( "HINT_NOICON" ); self PlayLoopSound( "zmb_meteor_loop" ); self waittill( "trigger", player ); self StopLoopSound( 1 ); player PlaySound( "zmb_meteor_activate" ); player maps\_zombiemode_audio::create_and_play_dialog( "eggs", "meteors", undefined, level.meteor_counter ); level.meteor_counter = level.meteor_counter + 1; if( level.meteor_counter == 3 ) { level thread play_music_easter_egg( player ); } } portrait_egg_vox() { if( !isdefined( self ) ) { return; } self UseTriggerRequireLookAt(); self SetCursorHint( "HINT_NOICON" ); self waittill( "trigger", player ); type = "portrait_" + self.script_noteworthy; player maps\_zombiemode_audio::create_and_play_dialog( "eggs", type ); } location_egg_vox() { self waittill( "trigger", player ); if( RandomIntRange(0,101) >= 90 ) { type = "room_" + self.script_noteworthy; player maps\_zombiemode_audio::create_and_play_dialog( "eggs", type ); } } play_radio_egg( delay ) { if( IsDefined( delay ) ) { wait( delay ); } if( !IsDefined( self ) ) return; self PlaySound( "vox_zmb_egg_0" + level.radio_egg_counter ); level.radio_egg_counter++; } setup_radio_egg_audio() { wait(1); level.radio_egg_counter = 0; array_thread( GetEntArray( "audio_egg_radio", "targetname" ), ::radio_egg_trigger ); } radio_egg_trigger() { if( !IsDefined( self ) ) return; self waittill( "trigger", who ); who thread play_radio_egg(); } Zombie_Theater_fx #include maps\_utility; #include common_scripts\utility; main() { scriptedFX(); footsteps(); maps\createart\zombie_theater_art::main(); maps\createfx\zombie_theater_fx::main(); precacheFX(); } footsteps() { } scriptedFX() { level._effect["animscript_gib_fx"] = LoadFx( "weapon/bullet/fx_flesh_gib_fatal_01" ); level._effect["animscript_gibtrail_fx"] = LoadFx( "trail/fx_trail_blood_streak" ); level._effect["large_ceiling_dust"] = loadfx( "maps/zombie/fx_dust_ceiling_impact_lg_mdbrown" ); level._effect["poltergeist"] = loadfx( "misc/fx_zombie_couch_effect" ); // electric switch fx level._effect["switch_sparks"] = loadfx("env/electrical/fx_elec_wire_spark_burst"); // dogs level._effect["dog_breath"] = loadfx("maps/zombie/fx_zombie_dog_breath"); // rise fx level._effect["rise_burst"] = loadfx("maps/mp_maps/fx_mp_zombie_hand_dirt_burst"); level._effect["rise_billow"] = loadfx("maps/mp_maps/fx_mp_zombie_body_dirt_billowing"); level._effect["rise_dust"] = loadfx("maps/mp_maps/fx_mp_zombie_body_dust_falling"); // quad fx level._effect["quad_grnd_dust_spwnr"] = loadfx("maps/zombie/fx_zombie_crawler_grnd_dust_spwnr"); level._effect["quad_grnd_dust"] = loadfx("maps/zombie/fx_zombie_crawler_grnd_dust"); level._effect["lght_marker"] = Loadfx("maps/zombie/fx_zombie_coast_marker"); level._effect["lght_marker_flare"] = Loadfx("maps/zombie/fx_zombie_coast_marker_fl"); //electrical trap level._effect["electric_current"] = loadfx("misc/fx_zombie_elec_trail"); level._effect["zapper_fx"] = loadfx("misc/fx_zombie_zapper_powerbox_on"); level._effect["zapper"] = loadfx("misc/fx_zombie_electric_trap"); level._effect["zapper_wall"] = loadfx("misc/fx_zombie_zapper_wall_control_on"); level._effect["zapper_light_ready"] = loadfx("misc/fx_zombie_zapper_light_green"); level._effect["zapper_light_notready"] = loadfx("misc/fx_zombie_zapper_light_red"); level._effect["elec_md"] = loadfx("maps/zombie/fx_elec_player_md"); level._effect["elec_sm"] = loadfx("maps/zombie/fx_elec_player_sm"); level._effect["elec_torso"] = loadfx("maps/zombie/fx_elec_player_torso"); // fire trap level._effect["fire_trap_med"] = loadfx("maps/zombie/fx_zombie_fire_trap_med"); // auto turret level._effect["auto_turret_light"] = loadfx("maps/zombie/fx_zombie_auto_turret_light"); } precachefx() { level._effect["fx_mp_smoke_thick_indoor"] = loadfx("maps/zombie/fx_mp_smoke_thick_indoor"); level._effect["fx_mp_smoke_amb_indoor_misty"] = loadfx("maps/zombie/fx_zombie_theater_smoke_amb_indoor"); level._effect["fx_smoke_smolder_md_gry"] = loadfx("maps/zombie/fx_smoke_smolder_md_gry"); level._effect["fx_smk_smolder_sm"] = loadfx("env/smoke/fx_smk_smolder_sm"); level._effect["fx_mp_smoke_crater"] = loadfx("maps/zombie/fx_mp_smoke_crater"); level._effect["fx_mp_smoke_sm_slow"] = loadfx("maps/zombie/fx_mp_smoke_sm_slow"); level._effect["fx_mp_fog_low"] = loadfx("maps/zombie/fx_mp_fog_low"); level._effect["fx_zombie_theater_fog_lg"] = loadfx("maps/zombie/fx_zombie_theater_fog_lg"); level._effect["fx_zombie_theater_fog_xlg"] = loadfx("maps/zombie/fx_zombie_theater_fog_xlg"); level._effect["fx_mp_fog_ground_md"] = loadfx("maps/mp_maps/fx_mp_fog_ground_md"); level._effect["fx_water_drip_light_long"] = loadfx("env/water/fx_water_drip_light_long"); level._effect["fx_water_drip_light_short"] = loadfx("env/water/fx_water_drip_light_short"); level._effect["fx_mp_ray_light_sm"] = loadfx("env/light/fx_light_godray_overcast_sm"); level._effect["fx_mp_ray_light_md"] = loadfx("maps/zombie/fx_mp_ray_overcast_md"); level._effect["fx_mp_ray_light_lg"] = loadfx("maps/zombie/fx_light_godray_overcast_lg"); level._effect["fx_mp_dust_motes"] = loadfx("maps/zombie/fx_mp_ray_motes_lg"); level._effect["fx_mp_dust_mote_pcloud_sm"] = loadfx("maps/zombie/fx_mp_dust_mote_pcloud_sm"); level._effect["fx_mp_dust_mote_pcloud_md"] = loadfx("maps/zombie/fx_mp_dust_mote_pcloud_md"); level._effect["fx_mp_pipe_steam"] = loadfx("env/smoke/fx_pipe_steam_md"); level._effect["fx_mp_pipe_steam_random"] = loadfx("maps/zombie/fx_mp_pipe_steam_random"); level._effect["fx_mp_fumes_vent_sm_int"] = loadfx("maps/mp_maps/fx_mp_fumes_vent_sm_int"); level._effect["fx_mp_fumes_vent_xsm_int"] = loadfx("maps/mp_maps/fx_mp_fumes_vent_xsm_int"); level._effect["fx_mp_elec_spark_burst_xsm_thin_runner"] = loadfx("maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner"); level._effect["fx_mp_elec_spark_burst_sm_runner"] = loadfx("maps/mp_maps/fx_mp_elec_spark_burst_sm_runner"); level._effect["fx_mp_light_lamp"] = loadfx("maps/zombie/fx_mp_light_lamp"); level._effect["fx_mp_light_corona_cool"] = loadfx("maps/zombie/fx_mp_light_corona_cool"); level._effect["fx_mp_light_corona_bulb_ceiling"] = loadfx("maps/zombie/fx_mp_light_corona_bulb_ceiling"); level._effect["fx_pent_tinhat_light"] = LoadFX("maps/pentagon/fx_pent_tinhat_light"); level._effect["fx_light_floodlight_bright"] = loadfx("maps/zombie/fx_zombie_light_floodlight_bright"); level._effect["fx_light_overhead_sm_amber"] = loadfx("maps/zombie/fx_zombie_overhead_sm_amber"); level._effect["fx_light_overhead_sm_amber_flkr"] = loadfx("maps/zombie/fx_zombie_overhead_sm_amber_flkr"); level._effect["fx_light_overhead_sm_blue"] = loadfx("maps/zombie/fx_zombie_overhead_sm_blu"); level._effect["fx_light_overhead_sm_blue_flkr"] = loadfx("maps/zombie/fx_zombie_overhead_sm_blu_flkr"); level._effect["fx_mp_birds_circling"] = loadfx("maps/zombie/fx_mp_birds_circling"); level._effect["fx_mp_insects_lantern"] = loadfx("maps/zombie/fx_mp_insects_lantern"); level._effect["fx_insects_swarm_md_light"] = loadfx("bio/insects/fx_insects_swarm_md_light"); level._effect["fx_insects_maggots"] = loadfx("bio/insects/fx_insects_maggots_sm"); level._effect["fx_insects_moths_light_source"] = loadfx("bio/insects/fx_insects_moths_light_source"); level._effect["fx_insects_moths_light_source_md"] = loadfx("bio/insects/fx_insects_moths_light_source_md"); level._effect["fx_pent_movie_projector"] = LoadFX("maps/pentagon/fx_pent_movie_projector"); level._effect["fx_zombie_light_theater_blue"] = LoadFX("maps/zombie/fx_zombie_light_theater_blue"); level._effect["fx_zombie_light_theater_green"] = LoadFX("maps/zombie/fx_zombie_light_theater_green"); // Projector Beam level._effect["fx_zombie_theater_projector_beam"] = loadfx("maps/zombie/fx_zombie_theater_projector_beam"); level._effect["fx_zombie_theater_projector_screen"] = loadfx("maps/zombie/fx_zombie_theater_projection_screen"); // new fx for the projector screen level._effect[ "projector_screen_0" ] = LoadFX( "maps/zombie/fx_zombie_theater_screen_0" ); level._effect[ "projector_screen_1" ] = LoadFX( "maps/zombie/fx_zombie_theater_screen_1" ); level._effect[ "projector_screen_2" ] = LoadFX( "maps/zombie/fx_zombie_theater_screen_2" ); level._effect[ "projector_screen_3" ] = LoadFX( "maps/zombie/fx_zombie_theater_screen_3" ); // Teleporter FX level._effect["fx_transporter_beam"] = loadfx("maps/zombie/fx_transporter_beam"); level._effect["fx_transporter_pad_start"] = loadfx("maps/zombie/fx_transporter_pad_start"); level._effect["fx_transporter_start"] = loadfx("maps/zombie/fx_transporter_start"); level._effect["fx_transporter_ambient"] = loadfx("maps/zombie/fx_transporter_ambient"); level._effect["fx_zombie_mainframe_beam"] = loadfx("maps/zombie/fx_zombie_mainframe_beam"); level._effect["fx_zombie_mainframe_flat"] = loadfx("maps/zombie/fx_zombie_mainframe_flat"); level._effect["fx_zombie_mainframe_flat_start"] = loadfx("maps/zombie/fx_zombie_mainframe_flat_start"); level._effect["fx_zombie_mainframe_beam_start"] = loadfx("maps/zombie/fx_zombie_mainframe_beam_start"); level._effect["fx_zombie_flashback_theater"] = loadfx("maps/zombie/fx_zombie_flashback_theater"); level._effect["fx_zombie_difference"] = loadfx("maps/zombie/fx_zombie_difference"); level._effect["fx_zombie_heat_sink"] = loadfx("maps/zombie/fx_zombie_heat_sink"); level._effect["fx_teleporter_pad_glow"] = loadfx("maps/zombie/fx_zombie_teleporter_pad_glow"); level._effect["fx_portal"] = loadfx("maps/zombie/fx_zombie_portal_nix_num_pp"); // Pack A Punch level._effect["zombie_packapunch"] = loadfx("maps/zombie/fx_zombie_packapunch"); // added for magic box lights level._effect["boxlight_light_ready"] = loadfx("maps/zombie/fx_zombie_theater_lightboard_green"); level._effect["boxlight_light_notready"] = loadfx("maps/zombie/fx_zombie_theater_lightboard_red"); // Quad fx level._effect["fx_quad_roof_break"] = loadfx("maps/zombie/fx_zombie_crawler_roof_break"); level._effect["fx_quad_roof_break_theater"] = loadfx("maps/zombie/fx_zombie_crawler_roof_theater"); level._effect["fx_quad_dust_roof"] = loadfx("maps/zombie/fx_zombie_crawler_dust_roof"); } Zombie_Theater_Magic_Box #include common_scripts\utility; #include maps\_utility; #include maps\_zombiemode_utility; //************************************************************************************ // // Changes lights of Map for location // //************************************************************************************ magic_box_init() { // Array must match array in zombie_theater.csc // Start at 'start_chest' then order clockwise - finishing in the middle. level._BOX_INDICATOR_NO_LIGHTS = -1; level._BOX_INDICATOR_FLASH_LIGHTS_MOVING = 99; level._BOX_INDICATOR_FLASH_LIGHTS_FIRE_SALE = 98; level._box_locations = array( "start_chest", "foyer_chest", "crematorium_chest", "alleyway_chest", "control_chest", "stage_chest", "dressing_chest", "dining_chest", "theater_chest"); level thread magic_box_update(); level thread watch_fire_sale(); } get_location_from_chest_index(chest_index) { chest_loc = level.chests[ chest_index ].script_noteworthy; for(i = 0; i { if(level._box_locations[i] == chest_loc) { return i; } } AssertMsg("Unknown chest location - " + chest_loc); } magic_box_update() { // Let the level startup wait(2); flag_wait( "power_on" ); // Setup box_mode = "Box Available"; // Tell client setclientsysstate( "box_indicator", get_location_from_chest_index(level.chest_index) ); while( 1 ) { switch( box_mode ) { // Waiting for the Box to Move case "Box Available": if( flag("moving_chest_now") ) { // Tell client setclientsysstate( "box_indicator", level._BOX_INDICATOR_FLASH_LIGHTS_MOVING); // flash everything. // Next Mode box_mode = "Box is Moving"; } break; case "Box is Moving": // Waiting for the box to finish its move while( flag("moving_chest_now") ) { wait(0.1); } // Tell client setclientsysstate( "box_indicator", get_location_from_chest_index(level.chest_index)); box_mode = "Box Available"; break; } wait( 0.5 ); } } watch_fire_sale() { while ( 1 ) { level waittill( "powerup fire sale" ); setclientsysstate( "box_indicator", level._BOX_INDICATOR_FLASH_LIGHTS_FIRE_SALE ); // flash everything. while ( level.zombie_vars["zombie_powerup_fire_sale_time"] > 0) { wait( 0.1 ); } setclientsysstate( "box_indicator", get_location_from_chest_index(level.chest_index)); } } //ESM - added for green light/red light functionality for magic box turnLightGreen(name, playfx) { zapper_lights = getentarray( name, "script_noteworthy" ); for(i=0;i { if(isDefined(zapper_lights[i].fx)) { zapper_lights[i].fx delete(); } if ( isDefined( playfx ) && playfx ) { zapper_lights[i] setmodel("zombie_zapper_cagelight_green"); zapper_lights[i].fx = maps\_zombiemode_net::network_safe_spawn( "trap_light_green", 2, "script_model", ( zapper_lights[i].origin[0], zapper_lights[i].origin[1], zapper_lights[i].origin[2] - 10 ) ); zapper_lights[i].fx setmodel("tag_origin"); zapper_lights[i].fx.angles = zapper_lights[i].angles; playfxontag(level._effect["boxlight_light_ready"],zapper_lights[i].fx,"tag_origin"); } else zapper_lights[i] setmodel("zombie_zapper_cagelight"); } } turnLightRed(name, playfx) { zapper_lights = getentarray( name, "script_noteworthy" ); for(i=0;i { if(isDefined(zapper_lights[i].fx)) { zapper_lights[i].fx delete(); } if ( isDefined( playfx ) && playfx ) { zapper_lights[i] setmodel("zombie_zapper_cagelight_red"); zapper_lights[i].fx = maps\_zombiemode_net::network_safe_spawn( "trap_light_red", 2, "script_model", ( zapper_lights[i].origin[0], zapper_lights[i].origin[1], zapper_lights[i].origin[2] - 10 ) ); zapper_lights[i].fx setmodel("tag_origin"); zapper_lights[i].fx.angles = zapper_lights[i].angles; playfxontag(level._effect["boxlight_light_notready"],zapper_lights[i].fx,"tag_origin"); } else zapper_lights[i] setmodel("zombie_zapper_cagelight"); } } more coming...
-
Well, I thought I'd be able to show a few fancy coding things as a post in the Ascension thread had some of the coding for the game...including stuff for Kino. Unfortunately, I cannot find anything in the programming of the map relating to the audio files for MOVING FROM ROOM TO ROOM. There is a sound effect for turning the power on, but nothing about the audio from room to room...wierd...Guess we don't have all of Kino programming either.
-
Ascension English translations of Russian signs
Johnny Reklaw replied to Shooter's topic in Ascension
What about this: ПРИ ПОЖАРЕ РА ЭЅЕЙТЕ СТЕКАО Its on a Fire Alarm button directly next to a zombie door. So far, I have ONLY found this one location for this. -
*This is what you said* *This is where my head is* you went from meteors...to dates....to the Bible?!?
-
I'm going with Bigfoot. Quick! Someone tell me the mispelled word in this post!!!
-
if the first number wasn't 2...I'd try it. Getting a Gersch by 2?!?!!?!??!???!???!?!??! probably not. (your looking at 3950 points by end of round 2...thats assuming first item out of the box is a Gersch...)
-
Nikolai said, "I keep forgetting to update my facebook." Maybe the answer is on Treyarch's facebook page...or maybe they've forgotten to tell us something on facebook and will get to it when they're not drunk?!?
-
Final Easter Egg Step:A New Idea that really makes sense.
Johnny Reklaw replied to lazergeneral's topic in Ascension
I'd just like to take a hammer and remove that nail, because you can indeed jump through the black hole that a Gersch device creates with a Death Machine and teleport to another part of the map. All you need to do is walk and jump into it; I don't know where you got the idea that only a dive-to-prone would teleport you. I will take that nail from you, and put it in the correct place: You CAN teleport through the Gersch device with a DM...just jump. I have tested this both at the end of the final weapon explosion in freeing him...and throwing one just before we get the DM and jumping through it. You simply teleport to one of the random locations...that is all. [brains] to SteelSpiritPenitent for the witty unnailing of another... -
that is not the whole code....that is only part of it. The actual code would be several files and probably not C&P-able on a forum...it'd need to be downloaded.
-
Little thing...if you are afraid of taking credit and pushing it off on someone else...and you think its fake? Then it probably is. Check NGT's site, it is fake.
-
we have that...we don't have the other codes pertaining to the rest of the map.
-
It still isn't in Japan...but saying its in China is not necessarily correct either. Its like saying Prague in modern Czechoslovakia...technically yes, but no.
-
I would look at this...but I always get headshots and none of my zombies have heads left...ever... If you believe that, I am also president of the world...
-
Just so you all know: Hong Kong is in China NOW...but at the time of ANY part of the black ops game, whether Campaign or Zombies, it was under control of England and control was handed back to China in 2000... So it is now in China, though at the time of the game; it was English...
-
Its a lunar lander in a monkey round...pause it correctly and you'll see it flying down....
-
Thats enough for each player with Death Machines to shoot at...jus' sayin... There are 6 that I can account for....probably more as I stopped looking @ 6....
-
I didn't even think about this at first but I think you may be right. It does mention that the first one was broken and I know Rictofen says something about fixing the new one if he can scavenge enough parts. Actually richtofen claims he could build a generator, not a casimir device. Also, this supposed second device has been debunked as, while a solid, it is in an inassessible area of the map. I know this because Gersch devices are captured when thrown there.
-
One of the characters looks in the crashed truck in ascension and finds what he thinks is Samantha. He calls the others over and they open the door. In it is a like replica of Sam and the voice (the one you hear with power-ups says April Fools....then the fake Sam explodes as more zombies come running...
-
I am wondering how our current spambot has 128 posts... I know you all are getting it asap...but 128?!?!?
-
Unnecessary as this has been debunked as anything ov consequence
-
I think everything here is overthought... Masons are concrete workers...and the barriers are usually on concrete on this map. Also, the main instrument of masons are hammers...i don't think this is anything more...
-
found this video... Kinda looks fake to me but Idk
Johnny Reklaw replied to Jrrhack's topic in Ascension
If if it looks fake...it is
ABOUT US
Call of Duty Zombies (CODZ) is a fan-managed gaming community centered around the popular Call of Duty franchise with central focus on the Zombies mode. Created in 2009, CoDZ is the ultimate platform for discussing Zombies theories, strategies, and connecting players.
Activision, Call of Duty, Call of Duty: Black Ops titles, Call of Duty: Infinite Warfare titles, Call of Duty: WWII are trademarks of Activision Publishing, Inc.
We are not affiliated with Activision nor its developers Treyarch, Sledgehammer, or Infinity Ward.
PARTNERS & AFFILIATES
Interested in becoming an affiliate/partner or looking for business opportunities? Shoot us an email at [email protected] to join the CODZ family. While you're here, show our partners some love!
SITE LINKS
Our most popular pages made convenient for easier navigating. More pages can be found in the navigation menu at the top of the site.