//checked includes changed to match cerberus output #include maps/mp/zombies/_zm_blockers; #include maps/mp/zombies/_zm_audio; #include character/c_zom_oleary; #include character/c_zom_handsome; #include character/c_zom_deluca; #include character/c_zom_arlington; #include maps/mp/zm_prison; #include maps/mp/_visionset_mgr; #include maps/mp/zm_alcatraz_grief_cellblock; #include maps/mp/zm_alcatraz_weap_quest; #include maps/mp/zombies/_zm_zonemgr; #include maps/mp/zombies/_zm_weap_tomahawk; #include maps/mp/zombies/_zm_weap_blundersplat; #include maps/mp/zombies/_zm_weap_riotshield_prison; #include maps/mp/zombies/_zm_weap_claymore; #include maps/mp/zombies/_zm_ai_basic; #include maps/mp/zombies/_zm_magicbox_prison; #include maps/mp/zm_alcatraz_travel; #include maps/mp/zm_alcatraz_traps; #include maps/mp/zm_alcatraz_distance_tracking; #include maps/mp/zombies/_zm_perk_divetonuke; #include maps/mp/zombies/_zm_perk_electric_cherry; #include maps/mp/gametypes_zm/_spawning; #include maps/mp/zm_prison_achievement; #include maps/mp/zombies/_load; #include maps/mp/zm_alcatraz_amb; #include maps/mp/animscripts/zm_death; #include maps/mp/zombies/_zm; #include maps/mp/zm_prison_ffotd; #include maps/mp/zm_prison_fx; #include maps/mp/zm_alcatraz_gamemodes; #include maps/mp/zm_alcatraz_utility; #include maps/mp/zombies/_zm_craftables; #include maps/mp/zombies/_zm_weapons; #include maps/mp/zombies/_zm_utility; #include maps/mp/_utility; #include common_scripts/utility; //#using_animtree( "fxanim_props" ); //leave commented out for now for compiling gamemode_callback_setup() //checked matches cerberus output { maps/mp/zm_alcatraz_gamemodes::init(); } init_characters() //checked matches cerberus output { level.has_weasel = 0; level.givecustomloadout = ::givecustomloadout; level.precachecustomcharacters = ::precache_personality_characters; level.givecustomcharacters = ::give_personality_characters; level.setupcustomcharacterexerts = ::setup_personality_character_exerts; flag_wait( "start_zombie_round_logic" ); } zclassic_preinit() //checked matches cerberus output { init_characters(); } createfx_callback() //checked changed to match cerberus output { ents = getentarray(); for ( i = 0; i < ents.size; i++ ) { if ( ents[ i ].classname != "info_player_start" ) { ents[ i ] delete(); } } } main() //checked changed to match cerberus output { maps/mp/zm_prison_fx::main(); level thread maps/mp/zm_prison_ffotd::main_start(); level thread title_update_main_start(); precacherumble( "brutus_footsteps" ); level.default_game_mode = "zclassic"; level.default_start_location = "prison"; setup_rex_starts(); maps/mp/zombies/_zm::init_fx(); maps/mp/animscripts/zm_death::precache_gib_fx(); level.zombiemode = 1; level._no_water_risers = 1; maps/mp/zm_alcatraz_amb::main(); maps/mp/zombies/_load::main(); level.level_specific_stats_init = maps/mp/zm_prison_achievement::init_player_achievement_stats; if ( getDvar( "createfx" ) == "1" ) { return; } maps/mp/gametypes_zm/_spawning::level_use_unified_spawning( 1 ); level.fixed_max_player_use_radius = 72; level.custom_player_fake_death = ::zm_player_fake_death; level.custom_player_fake_death_cleanup = ::zm_player_fake_death_cleanup; level.initial_round_wait_func = ::initial_round_wait_func; level.special_weapon_magicbox_check = ::check_for_special_weapon_limit_exist; level._door_open_rumble_func = ::door_rumble_on_buy; level._zombies_round_spawn_failsafe = ::alcatraz_round_spawn_failsafe; level.zombiemode_using_pack_a_punch = 1; level.zombiemode_reusing_pack_a_punch = 1; level.zombie_init_done = ::zombie_init_done; level.zombiemode_using_doubletap_perk = 1; level.zombiemode_using_juggernaut_perk = 1; level.zombiemode_using_sleightofhand_perk = 1; level.zombiemode_using_deadshot_perk = 1; if ( maps/mp/zombies/_zm_utility::is_gametype_active( "zclassic" ) ) { level.zombiemode_using_electric_cherry_perk = 1; maps/mp/zombies/_zm_perk_electric_cherry::enable_electric_cherry_perk_for_level(); } else if ( maps/mp/zombies/_zm_utility::is_gametype_active( "zgrief" ) ) { level.zombiemode_using_additionalprimaryweapon_perk = 1; level.zombiemode_using_divetonuke_perk = 1; maps/mp/zombies/_zm_perk_divetonuke::enable_divetonuke_perk_for_level(); } level._zmbvoxlevelspecific = ::init_level_specific_audio; level.random_pandora_box_start = 1; if ( is_classic() ) { level._default_door_custom_logic = ::alcatraz_afterlife_doors; } level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; level.zombiemode_offhand_weapon_give_override = ::offhand_weapon_give_override; level.max_equipment_attack_range = 72; level.min_equipment_attack_range = 25; level.vert_equipment_attack_range = 55; level._zombie_custom_add_weapons = ::custom_add_weapons; level._allow_melee_weapon_switching = 1; level._no_vending_machine_bump_trigs = 1; level.custom_ai_type = []; precachemodel( "p6_zm_al_wall_trap_control_red" ); precachemodel( "p6_zm_al_gondola_frame_light_red" ); precachemodel( "p6_zm_al_gondola_frame_light_green" ); precachemodel( "fxanim_zom_al_gondola_chains_mod" ); if ( maps/mp/zombies/_zm_utility::is_gametype_active( "zgrief" ) ) { precachemodel( "p6_zm_al_shock_box_on" ); } level.raygun2_included = 1; include_weapons(); include_powerups(); include_equipment_for_level(); register_level_specific_client_fields(); level thread maps/mp/zm_alcatraz_distance_tracking::zombie_tracking_init(); maps/mp/zm_alcatraz_traps::init_fan_trap_animtree(); maps/mp/zm_alcatraz_travel::init_gondola_chains_animtree(); maps/mp/zombies/_zm_magicbox_prison::init(); maps/mp/zombies/_zm::init(); maps/mp/zombies/_zm_ai_basic::init_inert_zombies(); maps/mp/zombies/_zm_weap_claymore::init(); maps/mp/zombies/_zm_weap_riotshield_prison::init(); maps/mp/zombies/_zm_weap_blundersplat::init(); maps/mp/zombies/_zm_weap_tomahawk::init(); level.calc_closest_player_using_paths = 1; level._melee_weapons = []; precacheitem( "death_throe_zm" ); if ( level.splitscreen && getDvarInt( "splitscreen_playerCount" ) > 2 ) { level.optimise_for_splitscreen = 1; level.culldist = 4000; } else { level.optimise_for_splitscreen = 0; level.culldist = 18000; } setculldist( level.culldist ); if ( isDefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) { if ( is_classic() ) { level.zombie_ai_limit = 20; } setdvar( "fx_marks_draw", 0 ); setdvar( "disable_rope", 1 ); setdvar( "cg_disableplayernames", 1 ); setdvar( "disableLookAtEntityLogic", 1 ); } else { level.zombie_ai_limit = 24; } setdvar( "zombiemode_path_minz_bias", 13 ); setdvar( "waypointMaxDrawDist", 12000 ); level.zombie_vars[ "zombie_use_failsafe" ] = 0; level.zones = []; level.zone_manager_init_func = ::working_zone_init; init_zones = []; if ( is_classic() ) { init_zones[ 0 ] = "zone_start"; init_zones[ 1 ] = "zone_library"; } else { init_zones[ 0 ] = "zone_cellblock_east"; init_zones[ 1 ] = "zone_cellblock_west_warden"; init_zones[ 2 ] = "zone_cellblock_west_barber"; init_zones[ 3 ] = "zone_cellblock_west"; } level thread maps/mp/zombies/_zm_zonemgr::manage_zones( init_zones ); level.speed_change_round = 15; level.speed_change_max = 5; level thread maps/mp/zm_alcatraz_weap_quest::init(); onplayerconnect_callback( maps/mp/zm_alcatraz_weap_quest::tomahawk_upgrade_quest ); onplayerconnect_callback( ::riotshield_tutorial_hint ); onplayerconnect_callback( ::disable_powerup_if_player_on_bridge ); level thread enable_powerup_if_no_player_on_bridge(); onplayerconnect_callback( ::player_lightning_manager ); onplayerconnect_callback( ::player_shockbox_glowfx ); onplayerconnect_callback( ::player_portal_clue_vo ); onplayerconnect_callback( maps/mp/zm_alcatraz_grief_cellblock::magicbox_face_spawn ); maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_audio_log", 9000, 200, 1, 1 ); maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_electric_cherry", 9000, 121, 1, 1 ); level thread drop_all_barriers(); level thread check_solo_status(); level thread maps/mp/zm_prison_ffotd::main_end(); level thread title_update_main_end(); //flag_wait( "start_zombie_round_logic" ); //players can't join if this is uncommented } title_update_main_start() //checked matches cerberus output { } title_update_main_end() //checked changed to match cerberus output { a_nodes = getanynodearray( ( 969, 6708, 239 ), 200 ); foreach ( node in a_nodes ) { node.no_teleport = 1; } level.equipment_tu_dead_zone_pos = []; level.equipment_tu_dead_zone_rad2 = []; level.equipment_tu_dead_zone_pos[ 0 ] = ( 447, 5963, 275 ); level.equipment_tu_dead_zone_rad2[ 0 ] = 2500; level.equipment_tu_dead_zone_pos[ 1 ] = ( 896, 8400, 1544 ); level.equipment_tu_dead_zone_rad2[ 1 ] = 14400; } register_level_specific_client_fields() { registerclientfield( "actor", "fan_trap_blood_fx", 9000, 1, "int" ); registerclientfield( "actor", "acid_trap_death_fx", 9000, 1, "int" ); registerclientfield( "toplayer", "toggle_lightning", 9000, 1, "int" ); registerclientfield( "toplayer", "rumble_electric_chair", 9000, 2, "int" ); registerclientfield( "toplayer", "effects_escape_flight", 9000, 3, "int" ); registerclientfield( "toplayer", "rumble_gondola", 9000, 1, "int" ); registerclientfield( "toplayer", "rumble_fan_trap", 9000, 1, "int" ); registerclientfield( "toplayer", "rumble_sq_bg", 9000, 1, "int" ); registerclientfield( "toplayer", "rumble_door_open", 9000, 1, "int" ); registerclientfield( "world", "toggle_futz", 9000, 1, "int" ); registerclientfield( "world", "dryer_stage", 9000, 2, "int" ); registerclientfield( "world", "fog_stage", 9000, 2, "int" ); registerclientfield( "world", "scripted_lightning_flash", 9000, 1, "int" ); registerclientfield( "world", "warden_fence_down", 9000, 1, "int" ); registerclientfield( "world", "master_key_is_lowered", 9000, 1, "int" ); registerclientfield( "world", "fxanim_pulley_down_start", 9000, 2, "int" ); registerclientfield( "world", "sq_bg_reward_portal", 9000, 1, "int" ); registerclientfield( "toplayer", "spoon_visual_state", 9000, 2, "int" ); registerclientfield( "scriptmover", "afterlife_shockbox_glow", 9000, 1, "int" ); registerclientfield( "scriptmover", "toggle_perk_machine_power", 9000, 2, "int" ); } givecustomloadout( takeallweapons, alreadyspawned ) { self giveweapon( "knife_zm_alcatraz" ); self set_player_melee_weapon( "knife_zm_alcatraz" ); self give_start_weapon( 1 ); } custom_vending_precaching() //checked changed to match cerberus output { if ( level._custom_perks.size > 0 ) { a_keys = getarraykeys( level._custom_perks ); for ( i = 0; i < a_keys.size; i++ ) { if ( isDefined( level._custom_perks[ a_keys[ i ] ].precache_func ) ) { level [[ level._custom_perks[ a_keys[ i ] ].precache_func ]](); } } } if ( isDefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) { precacheitem( "zombie_knuckle_crack" ); precachemodel( "p6_anim_zm_buildable_pap" ); precachemodel( "p6_anim_zm_buildable_pap_on" ); precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); level._effect[ "packapunch_fx" ] = loadfx( "maps/zombie/fx_zombie_packapunch" ); level.machine_assets[ "packapunch" ] = spawnstruct(); level.machine_assets[ "packapunch" ].weapon = "zombie_knuckle_crack"; level.machine_assets[ "packapunch" ].off_model = "p6_zm_al_vending_pap_on"; level.machine_assets[ "packapunch" ].on_model = "p6_zm_al_vending_pap_on"; level.machine_assets[ "packapunch" ].power_on_callback = ::custom_vending_power_on; level.machine_assets[ "packapunch" ].power_off_callback = ::custom_vending_power_off; } if ( isDefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) { precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); precacheshader( "specialty_additionalprimaryweapon_zombies" ); precachemodel( "p6_zm_al_vending_three_gun_on" ); precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); level._effect[ "additionalprimaryweapon_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); level.machine_assets[ "additionalprimaryweapon" ] = spawnstruct(); level.machine_assets[ "additionalprimaryweapon" ].weapon = "zombie_perk_bottle_additionalprimaryweapon"; level.machine_assets[ "additionalprimaryweapon" ].off_model = "p6_zm_al_vending_three_gun_on"; level.machine_assets[ "additionalprimaryweapon" ].on_model = "p6_zm_al_vending_three_gun_on"; level.machine_assets[ "additionalprimaryweapon" ].power_on_callback = ::custom_vending_power_on; level.machine_assets[ "additionalprimaryweapon" ].power_off_callback = ::custom_vending_power_off; } if ( isDefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) { precacheitem( "zombie_perk_bottle_deadshot" ); precacheshader( "specialty_ads_zombies" ); precachemodel( "p6_zm_al_vending_ads_on" ); precachestring( &"ZOMBIE_PERK_DEADSHOT" ); level._effect[ "deadshot_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); level.machine_assets[ "deadshot" ] = spawnstruct(); level.machine_assets[ "deadshot" ].weapon = "zombie_perk_bottle_deadshot"; level.machine_assets[ "deadshot" ].off_model = "p6_zm_al_vending_ads_on"; level.machine_assets[ "deadshot" ].on_model = "p6_zm_al_vending_ads_on"; level.machine_assets[ "deadshot" ].power_on_callback = ::custom_vending_power_on; level.machine_assets[ "deadshot" ].power_off_callback = ::custom_vending_power_off; } if ( isDefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) { precacheitem( "zombie_perk_bottle_nuke" ); precacheshader( "specialty_divetonuke_zombies" ); precachemodel( "p6_zm_al_vending_nuke_on" ); precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); level._effect[ "divetonuke_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); level.machine_assets[ "divetonuke" ] = spawnstruct(); level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke"; level.machine_assets[ "divetonuke" ].off_model = "p6_zm_al_vending_nuke_on"; level.machine_assets[ "divetonuke" ].on_model = "p6_zm_al_vending_nuke_on"; level.machine_assets[ "divetonuke" ].power_on_callback = ::custom_vending_power_on; level.machine_assets[ "divetonuke" ].power_off_callback = ::custom_vending_power_off; } if ( isDefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) { precacheitem( "zombie_perk_bottle_doubletap" ); precacheshader( "specialty_doubletap_zombies" ); precachemodel( "p6_zm_al_vending_doubletap2_on" ); precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); level._effect[ "doubletap_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); level.machine_assets[ "doubletap" ] = spawnstruct(); level.machine_assets[ "doubletap" ].weapon = "zombie_perk_bottle_doubletap"; level.machine_assets[ "doubletap" ].off_model = "p6_zm_al_vending_doubletap2_on"; level.machine_assets[ "doubletap" ].on_model = "p6_zm_al_vending_doubletap2_on"; level.machine_assets[ "doubletap" ].power_on_callback = ::custom_vending_power_on; level.machine_assets[ "doubletap" ].power_off_callback = ::custom_vending_power_off; } if ( isDefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) { precacheitem( "zombie_perk_bottle_jugg" ); precacheshader( "specialty_juggernaut_zombies" ); precachemodel( "p6_zm_al_vending_jugg_on" ); precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); level._effect[ "jugger_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); level.machine_assets[ "juggernog" ] = spawnstruct(); level.machine_assets[ "juggernog" ].weapon = "zombie_perk_bottle_jugg"; level.machine_assets[ "juggernog" ].off_model = "p6_zm_al_vending_jugg_on"; level.machine_assets[ "juggernog" ].on_model = "p6_zm_al_vending_jugg_on"; level.machine_assets[ "juggernog" ].power_on_callback = ::custom_vending_power_on; level.machine_assets[ "juggernog" ].power_off_callback = ::custom_vending_power_off; } if ( isDefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) { precacheitem( "zombie_perk_bottle_marathon" ); precacheshader( "specialty_marathon_zombies" ); precachemodel( "zombie_vending_marathon" ); precachemodel( "zombie_vending_marathon_on" ); precachestring( &"ZOMBIE_PERK_MARATHON" ); level._effect[ "marathon_light" ] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); level.machine_assets[ "marathon" ] = spawnstruct(); level.machine_assets[ "marathon" ].weapon = "zombie_perk_bottle_marathon"; level.machine_assets[ "marathon" ].off_model = "zombie_vending_marathon"; level.machine_assets[ "marathon" ].on_model = "zombie_vending_marathon_on"; } if ( isDefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) { precacheitem( "zombie_perk_bottle_revive" ); precacheshader( "specialty_quickrevive_zombies" ); precachemodel( "zombie_vending_revive" ); precachemodel( "zombie_vending_revive_on" ); precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); level._effect[ "revive_light" ] = loadfx( "misc/fx_zombie_cola_revive_on" ); level._effect[ "revive_light_flicker" ] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); level.machine_assets[ "revive" ] = spawnstruct(); level.machine_assets[ "revive" ].weapon = "zombie_perk_bottle_revive"; level.machine_assets[ "revive" ].off_model = "zombie_vending_revive"; level.machine_assets[ "revive" ].on_model = "zombie_vending_revive_on"; } if ( isDefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) { precacheitem( "zombie_perk_bottle_sleight" ); precacheshader( "specialty_fastreload_zombies" ); precachemodel( "p6_zm_al_vending_sleight_on" ); precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); level._effect[ "sleight_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); level.machine_assets[ "speedcola" ] = spawnstruct(); level.machine_assets[ "speedcola" ].weapon = "zombie_perk_bottle_sleight"; level.machine_assets[ "speedcola" ].off_model = "p6_zm_al_vending_sleight_on"; level.machine_assets[ "speedcola" ].on_model = "p6_zm_al_vending_sleight_on"; level.machine_assets[ "speedcola" ].power_on_callback = ::custom_vending_power_on; level.machine_assets[ "speedcola" ].power_off_callback = ::custom_vending_power_off; } if ( isDefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) { precacheitem( "zombie_perk_bottle_tombstone" ); precacheshader( "specialty_tombstone_zombies" ); precachemodel( "zombie_vending_tombstone" ); precachemodel( "zombie_vending_tombstone_on" ); precachemodel( "ch_tombstone1" ); precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); level.machine_assets[ "tombstone" ] = spawnstruct(); level.machine_assets[ "tombstone" ].weapon = "zombie_perk_bottle_tombstone"; level.machine_assets[ "tombstone" ].off_model = "zombie_vending_tombstone"; level.machine_assets[ "tombstone" ].on_model = "zombie_vending_tombstone_on"; } if ( isDefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) { precacheitem( "zombie_perk_bottle_whoswho" ); precacheshader( "specialty_quickrevive_zombies" ); precachemodel( "p6_zm_vending_chugabud" ); precachemodel( "p6_zm_vending_chugabud_on" ); precachemodel( "ch_tombstone1" ); precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); level.machine_assets[ "whoswho" ] = spawnstruct(); level.machine_assets[ "whoswho" ].weapon = "zombie_perk_bottle_whoswho"; level.machine_assets[ "whoswho" ].off_model = "p6_zm_vending_chugabud"; level.machine_assets[ "whoswho" ].on_model = "p6_zm_vending_chugabud_on"; } } custom_vending_power_on() //checked matches cerberus output { self setclientfield( "toggle_perk_machine_power", 2 ); } custom_vending_power_off() //checked matches cerberus output { self setclientfield( "toggle_perk_machine_power", 1 ); } precache_personality_characters() //checked matches cerberus output { character/c_zom_arlington::precache(); character/c_zom_deluca::precache(); character/c_zom_handsome::precache(); character/c_zom_oleary::precache(); precachemodel( "c_zom_arlington_coat_viewhands" ); precachemodel( "c_zom_deluca_longsleeve_viewhands" ); precachemodel( "c_zom_handsome_sleeveless_viewhands" ); precachemodel( "c_zom_oleary_shortsleeve_viewhands" ); } give_personality_characters() //checked matches cerberus output { if ( isDefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_arlington_coat_viewhands" ) ) { return; } self detachall(); if ( !isDefined( self.characterindex ) ) { self.characterindex = assign_lowest_unused_character_index(); } self.favorite_wall_weapons_list = []; /* /# if ( getDvar( #"40772CF1" ) != "" ) { self.characterindex = getDvarInt( #"40772CF1" ); #/ } */ switch( self.characterindex ) { case 0: self character/c_zom_oleary::main(); self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" ); level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "judge_zm"; self set_player_is_female( 0 ); self.character_name = "Finn"; break; case 1: self character/c_zom_deluca::main(); self setviewmodel( "c_zom_deluca_longsleeve_viewhands" ); level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "thompson_zm"; self set_player_is_female( 0 ); self.character_name = "Sal"; break; case 2: self character/c_zom_handsome::main(); self setviewmodel( "c_zom_handsome_sleeveless_viewhands" ); level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "blundergat_zm"; self set_player_is_female( 0 ); self.character_name = "Billy"; break; case 3: self character/c_zom_arlington::main(); self setviewmodel( "c_zom_arlington_coat_viewhands" ); level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "ray_gun_zm"; self set_player_is_female( 0 ); self.character_name = "Arlington"; break; } self setmovespeedscale( 1 ); self setsprintduration( 4 ); self setsprintcooldown( 0 ); self thread set_exert_id(); } set_exert_id() //checked matches cerberus output { self endon( "disconnect" ); wait_network_frame(); wait_network_frame(); self maps/mp/zombies/_zm_audio::setexertvoice( self.characterindex + 1 ); } assign_lowest_unused_character_index() //checked changed to match cerberus output { charindexarray = []; charindexarray[ 0 ] = 0; charindexarray[ 1 ] = 1; charindexarray[ 2 ] = 2; charindexarray[ 3 ] = 3; players = get_players(); if ( players.size == 1 ) { charindexarray = array_randomize( charindexarray ); if ( charindexarray[ 0 ] == 3 ) { level.has_weasel = 1; } return charindexarray[ 0 ]; } else { n_characters_defined = 0; foreach ( player in players ) { if ( isDefined( player.characterindex ) ) { arrayremovevalue( charindexarray, player.characterindex, 0 ); n_characters_defined++; } } if ( charindexarray.size > 0 ) { if ( n_characters_defined == ( players.size - 1 ) ) { if ( !is_true( level.has_weasel ) ) { level.has_weasel = 1; return 3; } } charindexarray = array_randomize( charindexarray ); if ( charindexarray[ 0 ] == 3 ) { level.has_weasel = 1; } return charindexarray[ 0 ]; } } return 0; } initcharacterstartindex() //checked matches cerberus output { level.characterstartindex = randomint( 4 ); } zombie_init_done() //checked matches cerberus output { self.allowpain = 0; self setphysparams( 15, 0, 48 ); } zm_player_fake_death_cleanup() //checked matches cerberus output { if ( isDefined( self._fall_down_anchor ) ) { self._fall_down_anchor delete(); self._fall_down_anchor = undefined; } } zm_player_fake_death( vdir ) //checked matches cerberus output { level notify( "fake_death" ); self notify( "fake_death" ); stance = self getstance(); self.ignoreme = 1; self enableinvulnerability(); self takeallweapons(); if ( isDefined( self.insta_killed ) && self.insta_killed ) { self maps/mp/zombies/_zm::player_fake_death(); self allowprone( 1 ); self allowcrouch( 0 ); self allowstand( 0 ); wait 0.25; self freezecontrols( 1 ); } else { self freezecontrols( 1 ); self thread fall_down( vdir, stance ); wait 1; } } fall_down( vdir, stance ) //checked matches cerberus output { self endon( "disconnect" ); level endon( "game_module_ended" ); self ghost(); origin = self.origin; xyspeed = ( 0, 0, 0 ); angles = self getplayerangles(); angles = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] + randomfloatrange( -5, 5 ) ); if ( isDefined( vdir ) && length( vdir ) > 0 ) { xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); xyspeed = xyspeedmag * vectornormalize( ( vdir[ 0 ], vdir[ 1 ], 0 ) ); } linker = spawn( "script_origin", ( 0, 0, 0 ) ); linker.origin = origin; linker.angles = angles; self._fall_down_anchor = linker; self playerlinkto( linker ); self playsoundtoplayer( "zmb_player_death_fall", self ); falling = stance != "prone"; if ( falling ) { origin = playerphysicstrace( origin, origin + xyspeed ); eye = self get_eye(); floor_height = ( 10 + origin[ 2 ] ) - eye[ 2 ]; origin += ( 0, 0, floor_height ); lerptime = 0.5; linker moveto( origin, lerptime, lerptime ); linker rotateto( angles, lerptime, lerptime ); } self freezecontrols( 1 ); if ( falling ) { linker waittill( "movedone" ); } self giveweapon( "death_throe_zm" ); self switchtoweapon( "death_throe_zm" ); if ( falling ) { bounce = randomint( 4 ) + 8; origin = ( origin + ( 0, 0, bounce ) ) - ( xyspeed * 0.1 ); lerptime = bounce / 50; linker moveto( origin, lerptime, 0, lerptime ); linker waittill( "movedone" ); origin = ( origin + ( 0, 0, bounce * -1 ) ) + ( xyspeed * 0.1 ); lerptime /= 2; linker moveto( origin, lerptime, lerptime ); linker waittill( "movedone" ); linker moveto( origin, 5, 0 ); } wait 15; linker delete(); } initial_round_wait_func() //checked matches cerberus output { flag_wait( "initial_blackscreen_passed" ); } offhand_weapon_overrride() //checked matches cerberus output { register_lethal_grenade_for_level( "frag_grenade_zm" ); level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; register_tactical_grenade_for_level( "emp_grenade_zm" ); register_placeable_mine_for_level( "claymore_zm" ); register_melee_weapon_for_level( "knife_zm" ); register_melee_weapon_for_level( "knife_zm_alcatraz" ); register_melee_weapon_for_level( "spoon_zm_alcatraz" ); register_melee_weapon_for_level( "spork_zm_alcatraz" ); register_melee_weapon_for_level( "bowie_knife_zm" ); level.zombie_melee_weapon_player_init = "knife_zm_alcatraz"; register_equipment_for_level( "alcatraz_shield_zm" ); level.zombie_equipment_player_init = undefined; level.equipment_safe_to_drop = ::equipment_safe_to_drop; } equipment_safe_to_drop( weapon ) //checked changed to match cerberus output { if ( !isDefined( self.origin ) ) { return 1; } for ( i = 0; i < level.equipment_tu_dead_zone_pos.size; i++ ) { if ( distancesquared( level.equipment_tu_dead_zone_pos[ i ], weapon.origin ) < level.equipment_tu_dead_zone_rad2[ i ] ) { return 0; } } s_check = getstruct( "plane_equipment_safe_check", "targetname" ); if ( distance2dsquared( self.origin, s_check.origin ) < 65536 && self.origin[ 2 ] > s_check.origin[ 2 ] ) { return 0; } return 1; } offhand_weapon_give_override( str_weapon ) //checked matches cerberus output { self endon( "death" ); if ( is_tactical_grenade( str_weapon ) && isDefined( self get_player_tactical_grenade() ) && !self is_player_tactical_grenade( str_weapon ) ) { self setweaponammoclip( self get_player_tactical_grenade(), 0 ); self takeweapon( self get_player_tactical_grenade() ); } return 0; } custom_add_weapons() //checked changed to match cerberus output { add_zombie_weapon_prison( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "wpck_crappy", "", undefined ); add_zombie_weapon_prison( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_pistol", "", undefined, 1 ); add_zombie_weapon_prison( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_pistol", "", undefined, 1 ); add_zombie_weapon_prison( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 900, "wpck_pistol", "", undefined ); add_zombie_weapon_prison( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_dual", "", undefined, 1 ); add_zombie_weapon_prison( "uzi_zm", "uzi_upgraded_zm", &"ZOMBIE_WEAPON_UZI", 1500, "wpck_smg", "", undefined ); add_zombie_weapon_prison( "thompson_zm", "thompson_upgraded_zm", &"ZMWEAPON_THOMPSON_WALLBUY", 1500, "wpck_smg", "", 800 ); add_zombie_weapon_prison( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "wpck_smg", "", 500 ); add_zombie_weapon_prison( "pdw57_zm", "pdw57_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1200, "wpck_crappy", "", undefined, 1 ); add_zombie_weapon_prison( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1200, "wpck_shot", "", undefined ); add_zombie_weapon_prison( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "wpck_shot", "", undefined ); add_zombie_weapon_prison( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_shot", "", undefined, 1 ); add_zombie_weapon_prison( "blundergat_zm", "blundergat_upgraded_zm", &"ZOMBIE_WEAPON_BLUNDERGAT", 500, "wpck_shot", "", undefined, 1 ); add_zombie_weapon_prison( "blundersplat_zm", "blundersplat_upgraded_zm", &"ZOMBIE_WEAPON_BLUNDERGAT", 500, "wpck_shot", "", undefined ); add_zombie_weapon_prison( "ak47_zm", "ak47_upgraded_zm", &"ZOMBIE_WEAPON_AK47", 500, "wpck_mg", "", undefined, 1 ); add_zombie_weapon_prison( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "wpck_mg", "", undefined ); add_zombie_weapon_prison( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_mg", "", undefined, 1 ); add_zombie_weapon_prison( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_mg", "", undefined, 1 ); add_zombie_weapon_prison( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_shot", "", undefined, 1 ); add_zombie_weapon_prison( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_snipe", "", undefined, 1 ); add_zombie_weapon_prison( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "wpck_snipe", "", undefined, 1 ); add_zombie_weapon_prison( "minigun_alcatraz_zm", "minigun_alcatraz_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_mg", "", undefined, 1 ); add_zombie_weapon_prison( "lsat_zm", "lsat_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_mg", "", undefined, 1 ); add_zombie_weapon_prison( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); add_zombie_weapon_prison( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1500, "grenade", "", undefined ); add_zombie_weapon_prison( "willy_pete_zm", undefined, &"ZOMBIE_WEAPON_SMOKE_GRENADE", 250, "grenade", "", 250 ); add_zombie_weapon_prison( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); add_zombie_weapon_prison( "bouncing_tomahawk_zm", "upgraded_tomahawk_zm", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "", "", undefined, 1 ); add_zombie_weapon_prison( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); if ( isdefined( level.raygun2_included ) && level.raygun2_included ) { add_zombie_weapon_prison( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "raygun_mark2", "", undefined ); } } include_weapons() //checked changed to match cerberus output { include_weapon( "knife_zm", 0 ); include_weapon( "knife_zm_alcatraz", 0 ); include_weapon( "spoon_zm_alcatraz", 0 ); include_weapon( "spork_zm_alcatraz", 0 ); include_weapon( "frag_grenade_zm", 0 ); include_weapon( "claymore_zm", 0 ); include_weapon( "willy_pete_zm", 0 ); include_weapon( "m1911_zm", 0 ); include_weapon( "m1911_upgraded_zm", 0 ); include_weapon( "judge_zm" ); include_weapon( "judge_upgraded_zm", 0 ); include_weapon( "beretta93r_zm", 0 ); include_weapon( "beretta93r_upgraded_zm", 0 ); include_weapon( "fivesevendw_zm" ); include_weapon( "fivesevendw_upgraded_zm", 0 ); include_weapon( "fivesevendw_zm" ); include_weapon( "fivesevendw_upgraded_zm", 0 ); include_weapon( "uzi_zm", 0 ); include_weapon( "uzi_upgraded_zm", 0 ); if ( is_classic() ) { include_weapon( "thompson_zm", 0 ); include_weapon( "870mcs_zm", 0 ); } else { include_weapon( "870mcs_zm" ); include_weapon( "thompson_zm" ); } include_weapon( "thompson_upgraded_zm", 0 ); include_weapon( "mp5k_zm", 0 ); include_weapon( "mp5k_upgraded_zm", 0 ); include_weapon( "pdw57_zm" ); include_weapon( "pdw57_upgraded_zm", 0 ); include_weapon( "870mcs_upgraded_zm", 0 ); include_weapon( "saiga12_zm" ); include_weapon( "saiga12_upgraded_zm", 0 ); include_weapon( "rottweil72_zm", 0 ); include_weapon( "rottweil72_upgraded_zm", 0 ); include_weapon( "m14_zm", 0 ); include_weapon( "m14_upgraded_zm", 0 ); include_weapon( "ak47_zm" ); include_weapon( "ak47_upgraded_zm", 0 ); include_weapon( "tar21_zm" ); include_weapon( "tar21_upgraded_zm", 0 ); include_weapon( "galil_zm" ); include_weapon( "galil_upgraded_zm", 0 ); include_weapon( "fnfal_zm" ); include_weapon( "fnfal_upgraded_zm", 0 ); include_weapon( "dsr50_zm" ); include_weapon( "dsr50_upgraded_zm", 0 ); include_weapon( "barretm82_zm" ); include_weapon( "barretm82_upgraded_zm", 0 ); include_weapon( "minigun_alcatraz_zm" ); include_weapon( "minigun_alcatraz_upgraded_zm", 0 ); include_weapon( "lsat_zm" ); include_weapon( "lsat_upgraded_zm", 0 ); include_weapon( "usrpg_zm" ); include_weapon( "usrpg_upgraded_zm", 0 ); include_weapon( "ray_gun_zm" ); include_weapon( "ray_gun_upgraded_zm", 0 ); include_weapon( "bouncing_tomahawk_zm", 0 ); include_weapon( "upgraded_tomahawk_zm", 0 ); include_weapon( "blundergat_zm" ); include_weapon( "blundergat_upgraded_zm", 0 ); include_weapon( "blundersplat_zm", 0 ); include_weapon( "blundersplat_upgraded_zm", 0 ); level._uses_retrievable_ballisitic_knives = 1; include_weapon( "alcatraz_shield_zm", 0 ); add_limited_weapon( "m1911_zm", 4 ); add_limited_weapon( "minigun_alcatraz_zm", 1 ); add_limited_weapon( "blundergat_zm", 1 ); add_limited_weapon( "ray_gun_zm", 4 ); add_limited_weapon( "ray_gun_upgraded_zm", 4 ); include_weapon( "tower_trap_zm", 0 ); include_weapon( "tower_trap_upgraded_zm", 0 ); if ( isdefined( level.raygun2_included ) && level.raygun2_included ) { include_weapon( "raygun_mark2_zm" ); include_weapon( "raygun_mark2_upgraded_zm", 0 ); add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); add_limited_weapon( "raygun_mark2_zm", 1); add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); } } add_zombie_weapon_prison( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost, create_vox ) //checked matches cerberus output { if ( isDefined( level.zombie_include_weapons ) && !isDefined( level.zombie_include_weapons[ weapon_name ] ) ) { return; } table = "mp/zombiemode.csv"; table_ammo_cost = tablelookup( table, 0, weapon_name, 2 ); if ( isDefined( table_ammo_cost ) && table_ammo_cost != "" ) { ammo_cost = round_up_to_ten( int( table_ammo_cost ) ); } precachestring( hint ); struct = spawnstruct(); if ( !isDefined( level.zombie_weapons ) ) { level.zombie_weapons = []; } if ( !isDefined( level.zombie_weapons_upgraded ) ) { level.zombie_weapons_upgraded = []; } if ( isDefined( upgrade_name ) ) { level.zombie_weapons_upgraded[ upgrade_name ] = weapon_name; } struct.weapon_name = weapon_name; struct.upgrade_name = upgrade_name; struct.weapon_classname = "weapon_" + weapon_name; struct.hint = hint; struct.cost = cost; struct.vox = weaponvo; struct.vox_response = weaponvoresp; /* /# println( "ZM >> Looking for weapon - " + weapon_name ); #/ */ struct.is_in_box = level.zombie_include_weapons[ weapon_name ]; if ( !isDefined( ammo_cost ) ) { ammo_cost = round_up_to_ten( int( cost * 0.5 ) ); } struct.ammo_cost = ammo_cost; level.zombie_weapons[ weapon_name ] = struct; if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && isDefined( upgrade_name ) ) { add_attachments( weapon_name, upgrade_name ); } if ( isDefined( create_vox ) ) { level.vox maps/mp/zombies/_zm_audio::zmbvoxadd( "player", "weapon_pickup", weapon_name, weaponvo, undefined ); } /* /# if ( isDefined( level.devgui_add_weapon ) ) { [[ level.devgui_add_weapon ]]( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ); #/ } */ } include_powerups() //checked matches cerberus output { include_powerup( "nuke" ); include_powerup( "insta_kill" ); include_powerup( "double_points" ); include_powerup( "full_ammo" ); include_powerup( "fire_sale" ); } include_equipment_for_level() //checked matches cerberus output { include_equipment( "alcatraz_shield_zm" ); } setup_rex_starts() //checked matches cerberus output { add_gametype( "zclassic", ::dummy, "zclassic", ::dummy ); add_gametype( "zgrief", ::dummy, "zgrief", ::dummy ); add_gameloc( "prison", ::dummy, "prison", ::dummy ); add_gameloc( "cellblock", ::dummy, "cellblock", ::dummy ); } dummy() //checked matches cerberus output { } working_zone_init() //checked changed to match cerberus output { flag_init( "always_on" ); flag_set( "always_on" ); if ( maps/mp/zombies/_zm_utility::is_gametype_active( "zgrief" ) ) { a_s_spawner = getstructarray( "zone_cellblock_west_roof_spawner", "targetname" ); foreach ( spawner in a_s_spawner ) { if ( isDefined( spawner.script_parameters ) && spawner.script_parameters == "zclassic_prison" ) { spawner structdelete(); } } } if ( is_classic() ) { add_adjacent_zone( "zone_library", "zone_start", "always_on" ); } else { add_adjacent_zone( "zone_library", "zone_cellblock_west", "activate_cellblock_west" ); add_adjacent_zone( "zone_library", "zone_start", "activate_cellblock_west" ); add_adjacent_zone( "zone_cellblock_east", "zone_start", "activate_cellblock_east" ); add_adjacent_zone( "zone_library", "zone_start", "activate_cellblock_east" ); } add_adjacent_zone( "zone_library", "zone_cellblock_west", "activate_cellblock_west" ); add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_barber", "activate_cellblock_barber" ); add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_barber" ); add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_gondola" ); add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_gondola", "activate_cellblock_gondola" ); add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_gondola", "activate_cellblock_gondola" ); add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_barber", "activate_cellblock_gondola" ); add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_east", "activate_cellblock_gondola" ); add_adjacent_zone( "zone_cellblock_west_gondola", "zone_infirmary", "activate_cellblock_infirmary" ); add_adjacent_zone( "zone_infirmary_roof", "zone_infirmary", "activate_cellblock_infirmary" ); add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_barber", "activate_cellblock_infirmary" ); add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west", "activate_cellblock_infirmary" ); add_adjacent_zone( "zone_start", "zone_cellblock_east", "activate_cellblock_east" ); add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "activate_cellblock_infirmary" ); add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_east", "activate_cellblock_east_west" ); add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "activate_cellblock_east_west" ); add_adjacent_zone( "zone_cellblock_west_warden", "zone_warden_office", "activate_warden_office" ); add_adjacent_zone( "zone_cellblock_west_warden", "zone_citadel_warden", "activate_cellblock_citadel" ); add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_citadel" ); add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_cellblock_citadel" ); add_adjacent_zone( "zone_citadel", "zone_citadel_shower", "activate_cellblock_citadel" ); add_adjacent_zone( "zone_cellblock_east", "zone_cafeteria", "activate_cafeteria" ); add_adjacent_zone( "zone_cafeteria", "zone_cafeteria_end", "activate_cafeteria" ); add_adjacent_zone( "zone_cellblock_east", "cellblock_shower", "activate_shower_room" ); add_adjacent_zone( "cellblock_shower", "zone_citadel_shower", "activate_shower_citadel" ); add_adjacent_zone( "zone_citadel_shower", "zone_citadel", "activate_shower_citadel" ); add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_shower_citadel" ); add_adjacent_zone( "zone_cafeteria", "zone_infirmary", "activate_infirmary" ); add_adjacent_zone( "zone_cafeteria", "zone_cafeteria_end", "activate_infirmary" ); add_adjacent_zone( "zone_infirmary_roof", "zone_infirmary", "activate_infirmary" ); add_adjacent_zone( "zone_roof", "zone_roof_infirmary", "activate_roof" ); add_adjacent_zone( "zone_roof_infirmary", "zone_infirmary_roof", "activate_roof" ); add_adjacent_zone( "zone_citadel", "zone_citadel_stairs", "activate_citadel_stair" ); add_adjacent_zone( "zone_citadel", "zone_citadel_shower", "activate_citadel_stair" ); add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_citadel_stair" ); add_adjacent_zone( "zone_citadel_stairs", "zone_citadel_basement", "activate_citadel_basement" ); add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_citadel_basement" ); add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_basement_building" ); add_adjacent_zone( "zone_citadel_basement_building", "zone_studio", "activate_basement_building" ); add_adjacent_zone( "zone_citadel_basement", "zone_studio", "activate_basement_building" ); add_adjacent_zone( "zone_citadel_basement_building", "zone_dock_gondola", "activate_basement_gondola" ); add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_basement_gondola" ); add_adjacent_zone( "zone_dock", "zone_dock_gondola", "activate_basement_gondola" ); add_adjacent_zone( "zone_studio", "zone_dock", "activate_dock_sally" ); add_adjacent_zone( "zone_dock_gondola", "zone_dock", "activate_dock_sally" ); add_adjacent_zone( "zone_dock", "zone_dock_gondola", "gondola_roof_to_dock" ); add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_gondola", "gondola_dock_to_roof" ); add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_gondola", "gondola_dock_to_roof" ); add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "gondola_dock_to_roof" ); add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_east", "gondola_dock_to_roof" ); if ( is_classic() ) { add_adjacent_zone( "zone_gondola_ride", "zone_gondola_ride", "gondola_ride_zone_enabled" ); } if ( is_classic() ) { add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "activate_cellblock_infirmary" ); add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "activate_cellblock_gondola" ); add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "gondola_dock_to_roof" ); } if ( maps/mp/zombies/_zm_utility::is_gametype_active( "zgrief" ) ) { playable_area = getentarray( "player_volume", "script_noteworthy" ); foreach ( area in playable_area ) { if ( isDefined( area.script_parameters ) && area.script_parameters == "classic_only" ) { area delete(); } } } add_adjacent_zone( "zone_golden_gate_bridge", "zone_golden_gate_bridge", "activate_player_zone_bridge" ); if ( is_classic() ) { add_adjacent_zone( "zone_dock_puzzle", "zone_dock_puzzle", "always_on" ); } } alcatraz_afterlife_doors() //checked changed to match cerberus output { wait 0.05; if ( !isDefined( level.shockbox_anim ) ) { level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim; level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim; } if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "afterlife_door" ) { self sethintstring( &"ZM_PRISON_AFTERLIFE_DOOR" ); /* /# self thread afterlife_door_open_sesame(); #/ */ s_struct = getstruct( self.target, "targetname" ); if ( !isDefined( s_struct ) ) { /* /# iprintln( "Afterlife Door was not targeting a valid struct" ); #/ */ return; } m_shockbox = getent( s_struct.target, "targetname" ); m_shockbox.health = 5000; m_shockbox setcandamage( 1 ); m_shockbox useanimtree( -1 ); t_bump = spawn( "trigger_radius", m_shockbox.origin, 0, 28, 64 ); t_bump.origin = ( ( m_shockbox.origin + ( anglesToForward( m_shockbox.angles ) * 0 ) ) + ( anglesToRight( m_shockbox.angles ) * 28 ) ) + ( anglesToUp( m_shockbox.angles ) * 0 ); if ( isDefined( t_bump ) ) { t_bump setcursorhint( "HINT_NOICON" ); t_bump sethintstring( &"ZM_PRISON_AFTERLIFE_INTERACT" ); } while ( 1 ) { m_shockbox waittill( "damage", amount, attacker ); if ( isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" ) { if ( isDefined( level.afterlife_interact_dist ) ) { if ( distance2d( attacker.origin, m_shockbox.origin ) < level.afterlife_interact_dist ) { t_bump delete(); m_shockbox playsound( "zmb_powerpanel_activate" ); playfxontag( level._effect[ "box_activated" ], m_shockbox, "tag_origin" ); m_shockbox setmodel( "p6_zm_al_shock_box_on" ); m_shockbox setanim( level.shockbox_anim[ "on" ] ); if ( ( m_shockbox.script_string == "wires_shower_door" || m_shockbox.script_string == "wires_admin_door" ) && isDefined( m_shockbox.script_string ) ) { array_delete( getentarray( m_shockbox.script_string, "script_noteworthy" ) ); } self maps/mp/zombies/_zm_blockers::door_opened( 0 ); //you have to buy doors after powering them if you don't do this attacker notify( "player_opened_afterlife_door" ); break; } } } } } while ( 1 ) { if ( !self maps/mp/zombies/_zm_blockers::door_buy() ) { wait 0.05; continue; } break; } } afterlife_door_open_sesame() //checked matches cerberus output { /* /# level waittill( "open_sesame" ); self maps/mp/zombies/_zm_blockers::door_opened( 0 ); #/ */ } delete_perk_machine_clip() //checked changed to match cerberus output { perk_machines = getentarray( "zombie_vending", "targetname" ); foreach ( perk_machine in perk_machines ) { if ( isDefined( perk_machine.clip ) ) { perk_machine.clip delete(); } } } alcatraz_round_spawn_failsafe() //checked changed to match cerberus output { self endon( "death" ); prevorigin = self.origin; while ( 1 ) { if ( isDefined( self.ignore_round_spawn_failsafe ) && self.ignore_round_spawn_failsafe ) { return; } wait 15; if ( isDefined( self.is_inert ) && self.is_inert ) { continue; } if ( isDefined( self.lastchunk_destroy_time ) ) { if ( ( getTime() - self.lastchunk_destroy_time ) < 8000 ) { continue; } } if ( self.origin[ 2 ] < -15000 ) { if ( isDefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) && isDefined( self.isscreecher ) && !self.isscreecher ) { level.zombie_total++; level.zombie_total_subtract++; } self dodamage( self.health + 100, ( 0, 0, 0 ) ); break; } if ( distancesquared( self.origin, prevorigin ) < 576 ) { if ( isDefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) ) { if ( isDefined( self.nuked ) && !self.nuked && isDefined( self.marked_for_death ) && !self.marked_for_death && isDefined( self.isscreecher ) && !self.isscreecher && isDefined( self.has_legs ) && self.has_legs && isDefined( self.is_brutus ) && !self.is_brutus ) { level.zombie_total++; level.zombie_total_subtract++; } } level.zombies_timeout_playspace++; if ( isDefined( self.is_brutus ) && self.is_brutus ) { self.suppress_brutus_powerup_drop = 1; self.brutus_round_spawn_failsafe = 1; } self dodamage( self.health + 100, ( 0, 0, 0 ) ); return; } prevorigin = self.origin; } } player_shockbox_glowfx() { self endon( "disconnect" ); a_afterlife_interacts = getentarray( "afterlife_interact", "targetname" ); a_afterlife_door_interacts = getentarray( "afterlife_door_shock_box", "script_noteworthy" ); a_combine = arraycombine( a_afterlife_interacts, a_afterlife_door_interacts, 0, 0 ); foreach ( shockbox in a_combine ) { if ( issubstr( shockbox.model, "shock_box" ) ) { shockbox setclientfield( "afterlife_shockbox_glow", 1 ); } } } /* is_gametype_active( a_gametypes ) //not in cerberus output { is_gametype_active = 0; if ( !isarray( a_gametypes ) ) { a_gametypes = array( a_gametypes ); } i = 0; while ( i < a_gametypes.size ) { if ( getDvar( "g_gametype" ) == a_gametypes[ i ] ) { is_gametype_active = 1; } i++; } return is_gametype_active; } */