//checked includes changed to match cerberus output #include maps/mp/zombies/_zm_tombstone; #include maps/mp/zombies/_zm_sidequests; #include maps/mp/zombies/_zm_stats; #include maps/mp/zombies/_zm_audio_announcer; #include maps/mp/zm_transit_distance_tracking; #include maps/mp/zm_transit_sq; #include maps/mp/zombies/_zm_buildables; #include maps/mp/zm_transit_cling; #include maps/mp/zombies/_zm_devgui; #include maps/mp/zombies/_zm_power; #include maps/mp/zombies/_zm_blockers; #include maps/mp/zombies/_zm_equipment; #include maps/mp/zombies/_zm_powerups; #include maps/mp/zombies/_zm_audio; #include character/c_transit_player_reporter; #include character/c_transit_player_engineer; #include character/c_transit_player_oldman; #include character/c_transit_player_farmgirl; #include maps/mp/zm_transit_openings; #include maps/mp/animscripts/zm_utility; #include maps/mp/zombies/_zm_spawner; #include maps/mp/zombies/_zm_laststand; #include maps/mp/zombies/_zm_zonemgr; #include maps/mp/zm_transit_achievement; #include maps/mp/_visionset_mgr; #include maps/mp/zombies/_zm_weap_ballistic_knife; #include maps/mp/zombies/_zm_weap_claymore; #include maps/mp/zombies/_zm_weap_bowie; #include maps/mp/zombies/_zm_weap_tazer_knuckles; #include maps/mp/zombies/_zm_weap_cymbal_monkey; #include maps/mp/zombies/_zm_weap_emp_bomb; #include maps/mp/zombies/_zm_weap_jetgun; #include maps/mp/zombies/_zm_weap_riotshield; #include maps/mp/zombies/_zm_ai_basic; #include maps/mp/zm_transit_power; #include maps/mp/zm_transit_lava; #include maps/mp/gametypes_zm/_spawning; #include maps/mp/zm_transit_ai_screecher; #include maps/mp/zombies/_load; #include maps/mp/_sticky_grenade; #include maps/mp/teams/_teamset_cdc; #include maps/mp/animscripts/zm_death; #include maps/mp/zombies/_zm; #include maps/mp/zm_transit_fx; #include maps/mp/zombies/_zm_equip_turbine; #include maps/mp/zm_transit_automaton; #include maps/mp/zm_transit_bus; #include maps/mp/zm_transit_ffotd; #include maps/mp/zombies/_zm_banking; #include maps/mp/zm_transit_gamemodes; #include maps/mp/zombies/_zm_weapon_locker; #include maps/mp/zm_transit_utility; #include maps/mp/zombies/_zm_game_module; #include maps/mp/zombies/_zm_weapons; #include maps/mp/zombies/_zm_utility; #include maps/mp/zombies/_zm_unitrigger; #include maps/mp/gametypes_zm/_zm_gametype; #include maps/mp/_utility; #include common_scripts/utility; gamemode_callback_setup() //checked matches cerberus output { maps/mp/zm_transit_gamemodes::init(); } encounter_init() //checked matches cerberus output { precacheshader( "sun_moon_zombie" ); level.precachecustomcharacters = ::precache_team_characters; level.givecustomcharacters = ::give_team_characters; } zgrief_init() //checked matches cerberus output { encounter_init(); level thread maps/mp/zombies/_zm_banking::delete_bank_teller(); flag_wait( "start_zombie_round_logic" ); level.custom_intermission = ::transit_standard_intermission; if ( isDefined( level.scr_zm_map_start_location ) && level.scr_zm_map_start_location == "transit" ) { level thread lava_damage_depot(); } } survival_init() //checked matches cerberus output { level.force_team_characters = 1; level.should_use_cia = 0; if ( randomint( 100 ) > 50 ) { level.should_use_cia = 1; } level.precachecustomcharacters = ::precache_team_characters; level.givecustomcharacters = ::give_team_characters; level.dog_spawn_func = ::dog_spawn_transit_logic; level thread maps/mp/zombies/_zm_banking::delete_bank_teller(); flag_wait( "start_zombie_round_logic" ); level.custom_intermission = ::transit_standard_intermission; if ( isDefined( level.scr_zm_map_start_location ) && level.scr_zm_map_start_location == "transit" ) { level thread lava_damage_depot(); } } zclassic_init() //checked matches cerberus output { level.precachecustomcharacters = ::precache_personality_characters; level.givecustomcharacters = ::give_personality_characters; level.setupcustomcharacterexerts = ::setup_personality_character_exerts; level.level_specific_init_powerups = ::add_transit_powerups; level.powerup_intro_vox = ::powerup_intro_vox; level.powerup_vo_available = ::powerup_vo_available; level.buildable_build_custom_func = ::buildable_build_custom_func; level.custom_update_retrieve_trigger = ::transit_bus_update_retrieve_trigger; level.buildable_pickup_vo_override = ::transit_buildable_vo_override; precachemodel( "p6_zm_window_dest_glass_small_broken" ); precachemodel( "p6_zm_window_dest_glass_big_broken" ); precachemodel( "p6_zm_keycard" ); flag_wait( "start_zombie_round_logic" ); level.custom_intermission = ::transit_intermission; level.custom_trapped_zombies = ::kill_zombies_depot; level thread lava_damage_depot(); level thread bank_teller_init(); level thread transit_breakable_glass_init(); level thread sndsetupmusiceasteregg(); level thread bank_pap_hint(); level thread power_pap_hint(); level thread sndtoiletflush(); } zclassic_preinit() //checked matches cerberus output { zclassic_init(); } zcleansed_preinit() //checked matches cerberus output { level._zcleansed_weapon_progression = array( "rpd_zm", "srm1216_zm", "judge_zm", "qcw05_zm", "kard_zm" ); survival_init(); } zcontainment_preinit() //checked matches cerberus output { survival_init(); } zdeadpool_preinit() //checked matches cerberus output { encounter_init(); } zgrief_preinit() //checked matches cerberus output { registerclientfield( "toplayer", "meat_stink", 1, 1, "int" ); zgrief_init(); level thread delete_bus_pieces(); } zmeat_preinit() //checked matches cerberus output { encounter_init(); } znml_preinit() //checked matches cerberus output { survival_init(); } zpitted_preinit() //checked matches cerberus output { encounter_init(); } zrace_preinit() //checked matches cerberus output { encounter_init(); } zstandard_preinit() //checked matches cerberus output { survival_init(); level thread delete_bus_pieces(); } zturned_preinit() //checked matches cerberus output { encounter_init(); } 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 { level thread maps/mp/zm_transit_ffotd::main_start(); level.hotjoin_player_setup = ::hotjoin_setup_player; level.level_createfx_callback_thread = ::createfx_callback; level.ignore_spawner_func = ::transit_ignore_spawner; level.default_game_mode = "zclassic"; level.default_start_location = "transit"; level._get_random_encounter_func = maps/mp/zm_transit_utility::get_random_encounter_match; setup_rex_starts(); maps/mp/zm_transit_bus::init_animtree(); maps/mp/zm_transit_bus::init_props_animtree(); maps/mp/zm_transit_automaton::init_animtree(); maps/mp/zombies/_zm_equip_turbine::init_animtree(); maps/mp/zm_transit_fx::main(); maps/mp/zombies/_zm::init_fx(); maps/mp/animscripts/zm_death::precache_gib_fx(); level.zombiemode = 1; level._no_water_risers = 1; level.riser_fx_on_client = 1; if ( !isDefined( level.zombie_surfing_kills ) ) { level.zombie_surfing_kills = 1; level.zombie_surfing_kill_count = 6; } maps/mp/teams/_teamset_cdc::register(); maps/mp/_sticky_grenade::init(); level.level_specific_stats_init = ::init_transit_stats; maps/mp/zombies/_load::main(); init_clientflags(); level thread transit_pathnode_spawning(); registerclientfield( "allplayers", "playerinfog", 1, 1, "int" ); level.set_player_in_fog = ::set_player_in_fog; level.custom_breadcrumb_store_func = ::transit_breadcrumb_store_func; register_screecher_lights(); if ( getDvar( "createfx" ) == "1" ) { return; } maps/mp/teams/_teamset_cdc::level_init(); maps/mp/zm_transit_ai_screecher::init(); level.is_player_in_screecher_zone = ::is_player_in_screecher_zone; level.revive_trigger_spawn_override_link = ::revive_trigger_spawn_override_link; level.revive_trigger_should_ignore_sight_checks = ::revive_trigger_should_ignore_sight_checks; level.allow_move_in_laststand = ::allow_move_in_laststand; level.can_revive = ::can_revive; level.melee_miss_func = ::melee_miss_func; level.grenade_watcher = ::grenade_watcher; level.ignore_find_flesh = ::ignore_find_flesh; level.ignore_equipment = ::ignore_equipment; level.should_attack_equipment = ::should_attack_equipment; level.gib_on_damage = ::gib_on_damage; level.melee_anim_state = ::melee_anim_state; level.ignore_stop_func = ::ignore_stop_func; level.can_melee = ::can_melee; level.ignore_traverse = ::ignore_traverse; level.exit_level_func = ::exit_level_func; level.inert_substate_override = ::inert_substate_override; level.attack_item = ::attack_item; level.attack_item_stop = ::attack_item_stop; level.check_valid_poi = ::check_valid_poi; level.dog_melee_miss = ::dog_melee_miss; precacheshellshock( "lava" ); precacheshellshock( "lava_small" ); precache_survival_barricade_assets(); include_game_modules(); maps/mp/gametypes_zm/_spawning::level_use_unified_spawning( 1 ); level.givecustomloadout = ::givecustomloadout; level.giveextrazombies = ::giveextrazombies; initcharacterstartindex(); if ( level.xenon ) { level.giveextrazombies = ::giveextrazombies; precacheextrazombies(); } level.custom_player_fake_death = ::transit_player_fake_death; level.custom_player_fake_death_cleanup = ::transit_player_fake_death_cleanup; level.initial_round_wait_func = ::initial_round_wait_func; level.zombie_speed_up = ::zombie_speed_up; level.zombie_init_done = ::zombie_init_done; level.zombiemode_using_pack_a_punch = 1; level.zombiemode_reusing_pack_a_punch = 1; level.pap_interaction_height = 47; level.zombiemode_using_doubletap_perk = 1; level.zombiemode_using_juggernaut_perk = 1; level.zombiemode_using_marathon_perk = 1; level.zombiemode_using_revive_perk = 1; level.zombiemode_using_sleightofhand_perk = 1; level.zombiemode_using_tombstone_perk = 1; init_persistent_abilities(); level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; if ( is_classic() ) { level.player_intersection_tracker_override = ::zombie_transit_player_intersection_tracker_override; level.taser_trig_adjustment = ( 2, 7, 0 ); } level.player_too_many_weapons_monitor_callback = ::zombie_transit_player_too_many_weapons_monitor_callback; level._zmbvoxlevelspecific = ::zombie_transit_audio_alias_override; level._zombie_custom_add_weapons = ::custom_add_weapons; level._allow_melee_weapon_switching = 1; level.disable_melee_wallbuy_icons = 1; level.uses_gumps = 1; setdvar( "aim_target_fixed_actor_size", 1 ); level.banking_update_enabled = 1; level.raygun2_included = 1; include_weapons(); include_powerups(); include_equipment_for_level(); include_powered_items(); level.powerup_bus_range = 500; level.pay_turret_cost = 300; level.auto_turret_cost = 500; setup_dvars(); onplayerconnect_callback( ::setup_players ); level thread disable_triggers(); level thread maps/mp/zm_transit_lava::lava_damage_init(); level.zm_transit_burn_max_duration = 2; level thread maps/mp/zm_transit_power::precache_models(); setup_zombie_init(); maps/mp/zombies/_zm::init(); maps/mp/zombies/_zm_ai_basic::init_inert_zombies(); maps/mp/zombies/_zm_weap_riotshield::init(); maps/mp/zombies/_zm_weap_jetgun::init(); level.special_weapon_magicbox_check = ::transit_special_weapon_magicbox_check; maps/mp/zombies/_zm_weap_emp_bomb::init(); zm_transit_emp_init(); level.legacy_cymbal_monkey = 1; maps/mp/zombies/_zm_weap_cymbal_monkey::init(); maps/mp/zombies/_zm_weap_tazer_knuckles::init(); maps/mp/zombies/_zm_weap_bowie::init(); maps/mp/zombies/_zm_weap_claymore::init(); maps/mp/zombies/_zm_weap_ballistic_knife::init(); if ( !isDefined( level.vsmgr_prio_overlay_zm_transit_burn ) ) { level.vsmgr_prio_overlay_zm_transit_burn = 20; } maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 1, level.vsmgr_prio_overlay_zm_transit_burn, 15, 1, maps/mp/_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); level maps/mp/zm_transit_achievement::init(); precacheitem( "death_throe_zm" ); if ( level.splitscreen && getDvarInt( "splitscreen_playerCount" ) > 2 ) { level.optimise_for_splitscreen = 1; } else { level.optimise_for_splitscreen = 0; } if ( level.ps3 ) { if ( is_true( level.optimise_for_splitscreen ) ) { level.culldist = 1500; } else { level.culldist = 4500; } } else if ( is_true( level.optimise_for_splitscreen ) ) { level.culldist = 2500; } else { level.culldist = 5500; } setculldist( level.culldist ); level.zones = []; level.zone_manager_init_func = ::transit_zone_init; init_zones = []; init_zones[ 0 ] = "zone_pri"; init_zones[ 1 ] = "zone_station_ext"; init_zones[ 2 ] = "zone_tow"; if ( is_classic() ) { init_zones[ 3 ] = "zone_far"; init_zones[ 4 ] = "zone_pow"; init_zones[ 5 ] = "zone_trans_1"; init_zones[ 6 ] = "zone_trans_2"; init_zones[ 7 ] = "zone_trans_3"; init_zones[ 8 ] = "zone_trans_4"; init_zones[ 9 ] = "zone_trans_5"; init_zones[ 10 ] = "zone_trans_6"; init_zones[ 11 ] = "zone_trans_7"; init_zones[ 12 ] = "zone_trans_8"; init_zones[ 13 ] = "zone_trans_9"; init_zones[ 14 ] = "zone_trans_10"; init_zones[ 15 ] = "zone_trans_11"; init_zones[ 16 ] = "zone_amb_tunnel"; init_zones[ 17 ] = "zone_amb_forest"; init_zones[ 18 ] = "zone_amb_cornfield"; init_zones[ 19 ] = "zone_amb_power2town"; init_zones[ 20 ] = "zone_amb_bridge"; } else { init_zones[ 3 ] = "zone_far_ext"; init_zones[ 4 ] = "zone_brn"; } level thread maps/mp/zombies/_zm_zonemgr::manage_zones( init_zones ); if ( is_true( 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 ); level thread maps/mp/zm_transit_ffotd::main_end(); flag_wait( "start_zombie_round_logic" ); level notify( "players_done_connecting" ); /* /# execdevgui( "devgui_zombie_transit" ); level.custom_devgui = ::zombie_transit_devgui; #/ */ level thread set_transit_wind(); if ( is_classic() ) { level thread player_name_fade_control(); } level._audio_custom_response_line = ::transit_audio_custom_response_line; level.speed_change_round = 15; level.speed_change_max = 5; init_screecher_zones(); elec_door_triggers = getentarray("local_electric_door", "script_noteworthy"); foreach ( trigger in elec_door_triggers ) { if ( isDefined( trigger.door_hold_trigger ) && trigger.door_hold_trigger == "zombie_door_hold_farm" ) { if ( isDefined( trigger.doors ) ) { for ( i = 0; i < trigger.doors.size; i++ ) { if ( trigger.doors[ i ].origin == ( 8833, -5697, 135 ) ) { trigger.doors[ i ].ignore_use_blocker_clip_for_pathing_check = 1; } } } } } } init_persistent_abilities() //checked matches cerberus output { if ( is_classic() ) { level.pers_upgrade_boards = 1; level.pers_upgrade_revive = 1; level.pers_upgrade_multi_kill_headshots = 1; level.pers_upgrade_cash_back = 1; level.pers_upgrade_insta_kill = 1; level.pers_upgrade_jugg = 1; level.pers_upgrade_carpenter = 1; level.pers_upgrade_box_weapon = 1; level.pers_magic_box_firesale = 1; level.pers_treasure_chest_get_weapons_array_func = ::pers_treasure_chest_get_weapons_array_transit; level.pers_upgrade_sniper = 1; level.pers_upgrade_pistol_points = 1; level.pers_upgrade_perk_lose = 1; level.pers_upgrade_double_points = 1; level.pers_upgrade_nube = 1; } } pers_treasure_chest_get_weapons_array_transit() //checked matches cerberus output { if ( !isDefined( level.pers_box_weapons ) ) { level.pers_box_weapons = []; level.pers_box_weapons[ level.pers_box_weapons.size ] = "knife_ballistic_zm"; level.pers_box_weapons[ level.pers_box_weapons.size ] = "cymbal_monkey_zm"; level.pers_box_weapons[ level.pers_box_weapons.size ] = "judge_zm"; level.pers_box_weapons[ level.pers_box_weapons.size ] = "emp_grenade_zm"; level.pers_box_weapons[ level.pers_box_weapons.size ] = "galil_zm"; level.pers_box_weapons[ level.pers_box_weapons.size ] = "hamr_zm"; level.pers_box_weapons[ level.pers_box_weapons.size ] = "ray_gun_zm"; level.pers_box_weapons[ level.pers_box_weapons.size ] = "rpd_zm"; } } setup_rex_starts() //checked matches cerberus output { add_gametype( "zclassic", ::dummy, "zclassic", ::dummy ); add_gametype( "zstandard", ::dummy, "zstandard", ::dummy ); add_gametype( "zgrief", ::dummy, "zgrief", ::dummy ); add_gameloc( "transit", ::dummy, "transit", ::dummy ); add_gameloc( "town", ::dummy, "town", ::dummy ); add_gameloc( "farm", ::dummy, "farm", ::dummy ); } dummy() //checked matches cerberus output { } init_clientflags() //checked matches cerberus output { level._clientflag_vehicle_bus_flashing_lights = 0; level._clientflag_vehicle_bus_head_lights = 1; level._clientflag_vehicle_bus_brake_lights = 2; level._clientflag_vehicle_bus_turn_signal_left_lights = 3; level._clientflag_vehicle_bus_turn_signal_right_lights = 4; } set_player_in_fog( onoff ) //checked matches cerberus output { if ( onoff ) { self setclientfield( "playerinfog", 1 ); } else { self setclientfield( "playerinfog", 0 ); } } transit_breadcrumb_store_func( store_crumb ) //checked matches cerberus output used is_true instead { if ( is_true( self.isonbus ) ) { return 0; } return store_crumb; } transit_ignore_spawner( spawner ) //checked matches cerberus output { if ( spawner.classname == "actor_zm_zombie_transit_screecher" ) { return 1; } return 0; } allow_move_in_laststand( player_down ) //checked matches cerberus output used is_true instead { if ( is_true( player_down.isonbus ) ) { return 0; } return 1; } can_revive( player_down ) { if ( isDefined( self.screecher ) ) { return 0; } return 1; } melee_miss_func() //checked changed to match cerberus output { if ( isDefined( self.enemy ) ) { if ( !isDefined( self.enemy.screecher ) || self.enemy getstance() == "prone" || self.enemy maps/mp/zombies/_zm_laststand::is_reviving_any() ) { dist_sq = distancesquared( self.enemy.origin, self.origin ); melee_dist_sq = self.meleeattackdist * self.meleeattackdist; if ( dist_sq < melee_dist_sq ) { self.enemy dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); } } } } grenade_watcher( grenade, weapname ) //checked changed to match cerberus output { if ( weapname == "frag_grenade_zm" || weapname == "claymore_zm" || weapname == "sticky_grenade_zm" ) { self thread maps/mp/zombies/_zm_ai_basic::grenade_watcher( grenade ); } } ignore_find_flesh() //checked matches cerberus output used is_true instead { if ( is_true( self.isonbus ) ) { return 1; } return 0; } ignore_equipment( zombie ) //checked matches cerberus output used is_true instead { if ( !is_true( zombie.completed_emerging_into_playable_area ) ) { return 1; } if ( is_true( zombie.is_avogadro ) ) { return 1; } if ( is_true( zombie.is_inert ) ) { return 1; } if ( isDefined( zombie.inert_delay ) ) { return 1; } return 0; } should_attack_equipment( dist ) //checked changed to match cerberus output { if ( !isDefined( level.door_triggers ) ) { level.door_triggers = getentarray( "bus_door_trigger", "targetname" ); } for ( i = 0; i < level.door_triggers.size; i++ ) { if ( self istouching( level.door_triggers[ i ] ) ) { if ( dist < 4096 ) { return 1; } } } return 0; } gib_on_damage() //checked changed to match cerberus output used is_true instead { opening = self.opening; if ( isDefined( opening ) ) { if ( isDefined( self.a.gib_ref ) || self.a.gib_ref == "left_arm" || self.a.gib_ref == "right_arm" ) { level maps/mp/zombies/_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.a.gib_ref, self.attacker, self ); opening.zombie = undefined; launchvector = ( 0, 0, -1 ); self thread maps/mp/zombies/_zm_spawner::zombie_ragdoll_then_explode( launchvector, self.attacker ); self notify( "killanimscript" ); return; } } if ( is_true( self.is_inert ) ) { if ( !is_true( self.has_legs ) ) { self notify( "stop_zombie_inert_transition" ); self setanimstatefromasd( "zm_inert_crawl", maps/mp/zombies/_zm_ai_basic::get_inert_crawl_substate() ); } } } melee_anim_state() //checked matches cerberus output { if ( self.zombie_move_speed == "bus_walk" ) { return maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_walk_melee" ); } return undefined; } ignore_stop_func() //checked matches cerberus output used is_true instead { if ( is_true( self.is_inert ) ) { return 1; } if ( isDefined( self.opening ) ) { return 1; } if ( isDefined( self.entering_bus ) ) { return 1; } return 0; } can_melee() //checked matches cerberus output used is_true instead { if ( is_true( self.dont_die_on_me ) ) { return 0; } if ( is_true( self.isonbus ) || is_true( self.isonbusroof ) ) { if ( self.enemydistancesq > anim.meleerangesq ) { return 0; } } return 1; } ignore_traverse() //checked matches cerberus output used is_true instead { if ( is_true( self.is_inert ) ) { if ( !is_true( self.in_place ) ) { self setgoalpos( self.origin ); if ( randomint( 100 ) > 50 ) { self setanimstatefromasd( "zm_inert", "inert1" ); } else { self setanimstatefromasd( "zm_inert", "inert2" ); } self.in_place = 1; } return 1; } return 0; } exit_level_func() //checked partially changed to match cerberus output see info.md No. 2 { zombies = getaiarray( level.zombie_team ); foreach ( zombie in zombies ) { if ( is_true( zombie.ignore_solo_last_stand ) ) { } else if ( isDefined( zombie.find_exit_point ) ) { zombie thread [[ zombie.find_exit_point ]](); } else if ( is_true( zombie.isonbus ) ) { zombie thread find_exit_bus(); } else if ( zombie.ignoreme ) { zombie thread maps/mp/zombies/_zm::default_delayed_exit(); } else { zombie thread maps/mp/zombies/_zm::default_find_exit_point(); } } } inert_substate_override( substate ) //checked matches cerberus output used is_true instead { in_bar = 0; if ( flag( "OnTowDoorBar" ) ) { if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_bar" ) ) { in_bar = 1; } } if ( is_true( self.isonbus ) || in_bar ) { if ( randomint( 100 ) > 50 ) { substate = "inert1"; } else { substate = "inert2"; } } return substate; } attack_item() //checked matches cerberus output used is_true instead { if ( is_true( self.isonbus ) ) { self linkto( level.the_bus ); } } attack_item_stop() //checked matches cerberus output used is_true instead { if ( is_true( self.isonbus ) ) { self unlink(); } } check_valid_poi( valid ) //checked changed to match cerberus output { if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_bar" ) ) { if ( !flag( "OnTowDoorBar" ) ) { return 0; } } else if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_town_barber" ) ) { if ( !flag( "OnTowDoorBarber" ) ) { return 0; } } return valid; } dog_melee_miss() //checked matches cerberus output { if ( isDefined( self.enemy ) ) { stance = self.enemy getstance(); if ( stance == "prone" || stance == "crouch" ) { dist_sq = distancesquared( self.enemy.origin, self.origin ); if ( dist_sq < 10000 ) { meleedamage = getDvarInt( "dog_MeleeDamage" ); self.enemy dodamage( meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); } } } } find_exit_loc() //checked changed to match cerberus output { player = self.favoriteenemy; dist_zombie = 0; dist_player = 0; dest = 0; away = vectornormalize( self.origin - player.origin ); endpos = self.origin + vectorScale( away, 600 ); locs = array_randomize( level.enemy_dog_locations ); for ( i = 0; i < locs.size; i++ ) { dist_zombie = distancesquared( locs[ i ].origin, endpos ); dist_player = distancesquared( locs[ i ].origin, player.origin ); if ( dist_zombie < dist_player ) { dest = i; break; } } if ( isDefined( locs[ dest ] ) ) { self.solo_revive_exit_pos = locs[ dest ].origin; } } find_exit_bus() //checked matches cerberus output used is_true instead { self endon( "death" ); self.solo_revive_exit = 1; self notify( "endOnBus" ); self thread maps/mp/zm_transit_openings::zombieexitbus(); self find_exit_loc(); off_the_bus = 0; while ( flag( "wait_and_revive" ) ) { if ( !off_the_bus && self.ai_state == "find_flesh" ) { off_the_bus = 1; self thread maps/mp/zombies/_zm::default_find_exit_point(); } wait 0.1; } self.solo_revive_exit = 0; if ( !is_true( self.exiting_window ) ) { if ( is_true( self.isonbus ) ) { self notify( "stop_zombieExitBus" ); self.walk_to_exit = 0; self thread zombiemoveonbus(); } } } post_first_init() //checked matches cerberus output { while ( !isDefined( anim.notfirsttime ) ) { wait 0.5; } anim.meleerange = 36; anim.meleerangesq = anim.meleerange * anim.meleerange; } set_transit_wind() //checked matches cerberus output { setdvar( "enable_global_wind", 1 ); setdvar( "wind_global_vector", "-120 -115 -120" ); setdvar( "wind_global_low_altitude", 0 ); setdvar( "wind_global_hi_altitude", 2000 ); setdvar( "wind_global_low_strength_percent", 0,5 ); } revive_trigger_move_with_player() //checked matches cerberus output { self endon( "stop_revive_trigger" ); self endon( "death" ); while ( isDefined( self.revivetrigger ) ) { my_position = self gettagorigin( "J_SpineLower" ); self.revivetrigger unlink(); self.revivetrigger.origin = my_position; self.revivetrigger linkto( level.the_bus ); wait 0.1; } } revive_trigger_should_ignore_sight_checks( player_down ) //checked matches cerberus output used is_true instead { if ( is_true( player_down.isonbus ) && level.the_bus.ismoving ) { return 1; } return 0; } revive_trigger_spawn_override_link( player_down ) //checked changed to match cerberus output used is_true instead { radius = getDvarInt( "revive_trigger_radius" ); player_down.revivetrigger = spawn( "trigger_radius", ( 0, 0, 0 ), 0, radius, radius ); player_down.revivetrigger sethintstring( "" ); player_down.revivetrigger setcursorhint( "HINT_NOICON" ); player_down.revivetrigger setmovingplatformenabled( 1 ); player_down.revivetrigger enablelinkto(); if ( is_true( player_down.isonbus ) ) { player_down.revivetrigger linkto( level.the_bus ); player_down thread revive_trigger_move_with_player(); } else { player_down.revivetrigger.origin = player_down.origin; player_down.revivetrigger linkto( player_down ); } player_down.revivetrigger.beingrevived = 0; player_down.revivetrigger.createtime = getTime(); } init_screecher_zones() //checked partially changed to match cerberus output see info.md No. 2 { foreach ( key in level.zone_keys ) { if ( issubstr( key, "_trans_" ) || issubstr( key, "_amb_" ) ) { level.zones[ key ].screecher_zone = 1; } else { level.zones[ key ].screecher_zone = 0; } } } is_player_in_screecher_zone( player ) //checked changed to match cerberus output used is_true instead { if ( is_true( player.isonbus ) ) { return 0; } if ( player_entered_safety_zone( player ) ) { return 0; } if ( player_entered_safety_light( player ) ) { return 0; } curr_zone = player get_current_zone( 1 ); if ( isDefined( curr_zone ) && !is_true( curr_zone.screecher_zone ) ) { return 0; } return 1; } player_entered_safety_zone( player ) //checked changed to match cerberus output { if ( !isDefined( level.safety_volumes ) ) { level.safety_volumes = getentarray( "screecher_volume", "targetname" ); } if ( isDefined( player.last_safety_volume ) ) { if ( player istouching( player.last_safety_volume ) ) { return 1; } } if ( isDefined( level.safety_volumes ) ) { for ( i = 0; i < level.safety_volumes.size; i++ ) { if ( player istouching( level.safety_volumes[ i ] ) ) { player.last_safety_volume = level.safety_volumes[ i ]; return 1; } } } player.last_safety_volume = undefined; return 0; } player_entered_safety_light( player ) //checked partially changed to match cerberus output see info.md No. 2 { safety = getstructarray( "screecher_escape", "targetname" ); if ( !isDefined( safety ) ) { return 0; } player.green_light = undefined; for ( i = 0; i < safety.size; i++ ) { if ( !is_true( safety[ i ].power_on ) ) { } else { if ( !isDefined( safety[ i ].radius ) ) { safety[ i ].radius = 256; } plyr_dist = distancesquared( player.origin, safety[ i ].origin ); if ( plyr_dist < ( safety[ i ].radius * safety[ i ].radius ) ) { player.green_light = safety[ i ]; return 1; } } } return 0; } zombie_transit_player_intersection_tracker_override( other_player ) //checked changed at own discretion { if ( is_true( self.isonbus ) ) { return 1; } if ( is_true( other_player.isonbus ) ) { return 1; } return 0; } precache_team_characters() //checked matches cerberus output { precachemodel( "c_zom_player_cdc_fb" ); precachemodel( "c_zom_hazmat_viewhands" ); precachemodel( "c_zom_player_cia_fb" ); precachemodel( "c_zom_suit_viewhands" ); } precache_personality_characters() //checked matches cerberus output { character/c_transit_player_farmgirl::precache(); character/c_transit_player_oldman::precache(); character/c_transit_player_engineer::precache(); character/c_transit_player_reporter::precache(); precachemodel( "c_zom_farmgirl_viewhands" ); precachemodel( "c_zom_oldman_viewhands" ); precachemodel( "c_zom_engineer_viewhands" ); precachemodel( "c_zom_reporter_viewhands" ); } precache_survival_barricade_assets() //checked changed to match cerberus output { survival_barricades = getstructarray( "game_mode_object" ); for ( i = 0; i < survival_barricades.size; i++ ) { if ( isDefined( survival_barricades[ i ].script_string ) && survival_barricades[ i ].script_string == "survival" ) { if ( isDefined( survival_barricades[ i ].script_parameters ) ) { precachemodel( survival_barricades[ i ].script_parameters ); } } } } initcharacterstartindex() //checked matches cerberus output { level.characterstartindex = 0; /* /# forcecharacter = getDvarInt( "zombie_transit_character_force" ); if ( forcecharacter != 0 ) { level.characterstartindex = forcecharacter - 1; #/ } */ } precacheextrazombies() //checked matches cerberus output { } giveextrazombies() //checked matches cerberus output { } give_team_characters() //checked matches cerberus output { if ( isDefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_suit_viewhands" ) ) { return; } self detachall(); self set_player_is_female( 0 ); if ( isDefined( level.should_use_cia ) ) { if ( level.should_use_cia ) { self setmodel( "c_zom_player_cia_fb" ); self setviewmodel( "c_zom_suit_viewhands" ); self.characterindex = 0; } else { self setmodel( "c_zom_player_cdc_fb" ); self setviewmodel( "c_zom_hazmat_viewhands" ); self.characterindex = 1; } } else if ( !isDefined( self.characterindex ) ) { self.characterindex = 1; if ( self.team == "axis" ) { self.characterindex = 0; } } switch( self.characterindex ) { case 0: case 2: self setmodel( "c_zom_player_cia_fb" ); self.voice = "american"; self.skeleton = "base"; self setviewmodel( "c_zom_suit_viewhands" ); self.characterindex = 0; break; case 1: case 3: self setmodel( "c_zom_player_cdc_fb" ); self.voice = "american"; self.skeleton = "base"; self setviewmodel( "c_zom_hazmat_viewhands" ); self.characterindex = 1; break; } self setmovespeedscale( 1 ); self setsprintduration( 4 ); self setsprintcooldown( 0 ); self set_player_tombstone_index(); } give_personality_characters() //checked matches cerberus output { if ( isDefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_farmgirl_viewhands" ) ) { return; } self detachall(); if ( !isDefined( self.characterindex ) ) { self.characterindex = assign_lowest_unused_character_index(); } self.favorite_wall_weapons_list = []; self.talks_in_danger = 0; /* /# if ( getDvar( #"40772CF1" ) != "" ) { self.characterindex = getDvarInt( #"40772CF1" ); #/ } */ switch( self.characterindex ) { case 2: self character/c_transit_player_farmgirl::main(); self setviewmodel( "c_zom_farmgirl_viewhands" ); level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "rottweil72_zm"; self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "870mcs_zm"; self set_player_is_female( 1 ); break; case 0: self character/c_transit_player_oldman::main(); self setviewmodel( "c_zom_oldman_viewhands" ); level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "frag_grenade_zm"; self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "claymore_zm"; self set_player_is_female( 0 ); break; case 3: self character/c_transit_player_engineer::main(); self setviewmodel( "c_zom_engineer_viewhands" ); level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "m14_zm"; self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "m16_zm"; self set_player_is_female( 0 ); break; case 1: self character/c_transit_player_reporter::main(); self setviewmodel( "c_zom_reporter_viewhands" ); level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); self.talks_in_danger = 1; level.rich_sq_player = self; self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "beretta93r_zm"; self set_player_is_female( 0 ); break; } self setmovespeedscale( 1 ); self setsprintduration( 4 ); self setsprintcooldown( 0 ); self set_player_tombstone_index(); 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 ); } setup_personality_character_exerts() //checked matches cerberus output { level.exert_sounds[ 1 ][ "burp" ][ 0 ] = "vox_plr_0_exert_burp_0"; level.exert_sounds[ 1 ][ "burp" ][ 1 ] = "vox_plr_0_exert_burp_1"; level.exert_sounds[ 1 ][ "burp" ][ 2 ] = "vox_plr_0_exert_burp_2"; level.exert_sounds[ 1 ][ "burp" ][ 3 ] = "vox_plr_0_exert_burp_3"; level.exert_sounds[ 1 ][ "burp" ][ 4 ] = "vox_plr_0_exert_burp_4"; level.exert_sounds[ 1 ][ "burp" ][ 5 ] = "vox_plr_0_exert_burp_5"; level.exert_sounds[ 1 ][ "burp" ][ 6 ] = "vox_plr_0_exert_burp_6"; level.exert_sounds[ 2 ][ "burp" ][ 0 ] = "vox_plr_1_exert_burp_0"; level.exert_sounds[ 2 ][ "burp" ][ 1 ] = "vox_plr_1_exert_burp_1"; level.exert_sounds[ 2 ][ "burp" ][ 2 ] = "vox_plr_1_exert_burp_2"; level.exert_sounds[ 2 ][ "burp" ][ 3 ] = "vox_plr_1_exert_burp_3"; level.exert_sounds[ 3 ][ "burp" ][ 0 ] = "vox_plr_2_exert_burp_0"; level.exert_sounds[ 3 ][ "burp" ][ 1 ] = "vox_plr_2_exert_burp_1"; level.exert_sounds[ 3 ][ "burp" ][ 2 ] = "vox_plr_2_exert_burp_2"; level.exert_sounds[ 3 ][ "burp" ][ 3 ] = "vox_plr_2_exert_burp_3"; level.exert_sounds[ 3 ][ "burp" ][ 4 ] = "vox_plr_2_exert_burp_4"; level.exert_sounds[ 3 ][ "burp" ][ 5 ] = "vox_plr_2_exert_burp_5"; level.exert_sounds[ 3 ][ "burp" ][ 6 ] = "vox_plr_2_exert_burp_6"; level.exert_sounds[ 4 ][ "burp" ][ 0 ] = "vox_plr_3_exert_burp_0"; level.exert_sounds[ 4 ][ "burp" ][ 1 ] = "vox_plr_3_exert_burp_1"; level.exert_sounds[ 4 ][ "burp" ][ 2 ] = "vox_plr_3_exert_burp_2"; level.exert_sounds[ 4 ][ "burp" ][ 3 ] = "vox_plr_3_exert_burp_3"; level.exert_sounds[ 4 ][ "burp" ][ 4 ] = "vox_plr_3_exert_burp_4"; level.exert_sounds[ 4 ][ "burp" ][ 5 ] = "vox_plr_3_exert_burp_5"; level.exert_sounds[ 4 ][ "burp" ][ 6 ] = "vox_plr_3_exert_burp_6"; level.exert_sounds[ 1 ][ "hitmed" ][ 0 ] = "vox_plr_0_exert_pain_medium_0"; level.exert_sounds[ 1 ][ "hitmed" ][ 1 ] = "vox_plr_0_exert_pain_medium_1"; level.exert_sounds[ 1 ][ "hitmed" ][ 2 ] = "vox_plr_0_exert_pain_medium_2"; level.exert_sounds[ 1 ][ "hitmed" ][ 3 ] = "vox_plr_0_exert_pain_medium_3"; level.exert_sounds[ 2 ][ "hitmed" ][ 0 ] = "vox_plr_1_exert_pain_medium_0"; level.exert_sounds[ 2 ][ "hitmed" ][ 1 ] = "vox_plr_1_exert_pain_medium_1"; level.exert_sounds[ 2 ][ "hitmed" ][ 2 ] = "vox_plr_1_exert_pain_medium_2"; level.exert_sounds[ 2 ][ "hitmed" ][ 3 ] = "vox_plr_1_exert_pain_medium_3"; level.exert_sounds[ 3 ][ "hitmed" ][ 0 ] = "vox_plr_2_exert_pain_medium_0"; level.exert_sounds[ 3 ][ "hitmed" ][ 1 ] = "vox_plr_2_exert_pain_medium_1"; level.exert_sounds[ 3 ][ "hitmed" ][ 2 ] = "vox_plr_2_exert_pain_medium_2"; level.exert_sounds[ 3 ][ "hitmed" ][ 3 ] = "vox_plr_2_exert_pain_medium_3"; level.exert_sounds[ 4 ][ "hitmed" ][ 0 ] = "vox_plr_3_exert_pain_medium_0"; level.exert_sounds[ 4 ][ "hitmed" ][ 1 ] = "vox_plr_3_exert_pain_medium_1"; level.exert_sounds[ 4 ][ "hitmed" ][ 2 ] = "vox_plr_3_exert_pain_medium_2"; level.exert_sounds[ 4 ][ "hitmed" ][ 3 ] = "vox_plr_3_exert_pain_medium_3"; level.exert_sounds[ 1 ][ "hitlrg" ][ 0 ] = "vox_plr_0_exert_pain_high_0"; level.exert_sounds[ 1 ][ "hitlrg" ][ 1 ] = "vox_plr_0_exert_pain_high_1"; level.exert_sounds[ 1 ][ "hitlrg" ][ 2 ] = "vox_plr_0_exert_pain_high_2"; level.exert_sounds[ 1 ][ "hitlrg" ][ 3 ] = "vox_plr_0_exert_pain_high_3"; level.exert_sounds[ 2 ][ "hitlrg" ][ 0 ] = "vox_plr_1_exert_pain_high_0"; level.exert_sounds[ 2 ][ "hitlrg" ][ 1 ] = "vox_plr_1_exert_pain_high_1"; level.exert_sounds[ 2 ][ "hitlrg" ][ 2 ] = "vox_plr_1_exert_pain_high_2"; level.exert_sounds[ 2 ][ "hitlrg" ][ 3 ] = "vox_plr_1_exert_pain_high_3"; level.exert_sounds[ 3 ][ "hitlrg" ][ 0 ] = "vox_plr_2_exert_pain_high_0"; level.exert_sounds[ 3 ][ "hitlrg" ][ 1 ] = "vox_plr_2_exert_pain_high_1"; level.exert_sounds[ 3 ][ "hitlrg" ][ 2 ] = "vox_plr_2_exert_pain_high_2"; level.exert_sounds[ 3 ][ "hitlrg" ][ 3 ] = "vox_plr_2_exert_pain_high_3"; level.exert_sounds[ 4 ][ "hitlrg" ][ 0 ] = "vox_plr_3_exert_pain_high_0"; level.exert_sounds[ 4 ][ "hitlrg" ][ 1 ] = "vox_plr_3_exert_pain_high_1"; level.exert_sounds[ 4 ][ "hitlrg" ][ 2 ] = "vox_plr_3_exert_pain_high_2"; level.exert_sounds[ 4 ][ "hitlrg" ][ 3 ] = "vox_plr_3_exert_pain_high_3"; } givecustomloadout( takeallweapons, alreadyspawned ) //checked matches cerberus output { self giveweapon( "knife_zm" ); self give_start_weapon( 1 ); } transit_intermission() //checked changed to match cerberus output { self closemenu(); self closeingamemenu(); level endon( "stop_intermission" ); self endon( "disconnect" ); self endon( "death" ); self notify( "_zombie_game_over" ); self.score = self.score_total; self.sessionstate = "intermission"; self.spectatorclient = -1; self.killcamentity = -1; self.archivetime = 0; self.psoffsettime = 0; self.friendlydamage = undefined; maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); self stopshellshock(); self.game_over_bg = newclienthudelem( self ); self.game_over_bg.x = 0; self.game_over_bg.y = 0; self.game_over_bg.horzalign = "fullscreen"; self.game_over_bg.vertalign = "fullscreen"; self.game_over_bg.foreground = 1; self.game_over_bg.sort = 1; self.game_over_bg setshader( "black", 640, 480 ); self.game_over_bg.alpha = 1; if ( !isDefined( level.the_bus ) ) { self.game_over_bg fadeovertime( 1 ); self.game_over_bg.alpha = 0; wait 5; self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 ); } else { zonestocheck = []; zonestocheck[ zonestocheck.size ] = "zone_amb_bridge"; zonestocheck[ zonestocheck.size ] = "zone_trans_11"; zonestocheck[ zonestocheck.size ] = "zone_town_west"; zonestocheck[ zonestocheck.size ] = "zone_town_west2"; zonestocheck[ zonestocheck.size ] = "zone_tow"; near_bridge = 0; foreach ( zone in zonestocheck ) { if ( level.the_bus maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_amb_bridge" ) ) { near_bridge = 1; } } if ( near_bridge ) { trig = getent( "bridge_trig", "targetname" ); trig notify( "trigger" ); } org = spawn( "script_model", level.the_bus gettagorigin( "tag_camera" ) ); org setmodel( "tag_origin" ); org.angles = level.the_bus gettagangles( "tag_camera" ); org linkto( level.the_bus ); self setorigin( org.origin ); self.angles = org.angles; if ( !flag( "OnPriDoorYar" ) || !flag( "OnPriDoorYar2" ) ) { flag_set( "OnPriDoorYar" ); wait_network_frame(); } if ( !level.the_bus.ismoving ) { level.the_bus.gracetimeatdestination = 0.1; level.the_bus notify( "depart_early" ); } players = get_players(); j = 0; while ( j < players.size ) { player = players[ j ]; player camerasetposition( org ); player camerasetlookat(); player cameraactivate( 1 ); j++; } self.game_over_bg fadeovertime( 1 ); self.game_over_bg.alpha = 0; wait 12; self.game_over_bg fadeovertime( 1 ); self.game_over_bg.alpha = 1; wait 1; } } transit_standard_intermission() //checked changed to match cerberus output { self closemenu(); self closeingamemenu(); level endon( "stop_intermission" ); self endon( "disconnect" ); self endon( "death" ); self notify( "_zombie_game_over" ); self.score = self.score_total; self.sessionstate = "intermission"; self.spectatorclient = -1; self.killcamentity = -1; self.archivetime = 0; self.psoffsettime = 0; self.friendlydamage = undefined; maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); self stopshellshock(); points = getstructarray( "intermission", "targetname" ); point = undefined; if ( !isDefined( points ) || points.size == 0 ) { points = getentarray( "info_intermission", "classname" ); if ( points.size < 1 ) { /* /# println( "NO info_intermission POINTS IN MAP" ); #/ */ return; } } self.game_over_bg = newclienthudelem( self ); self.game_over_bg.x = 0; self.game_over_bg.y = 0; self.game_over_bg.horzalign = "fullscreen"; self.game_over_bg.vertalign = "fullscreen"; self.game_over_bg.foreground = 1; self.game_over_bg.sort = 1; self.game_over_bg setshader( "black", 640, 480 ); self.game_over_bg.alpha = 1; org = undefined; while ( 1 ) { foreach ( struct in points ) { if ( isDefined( struct.script_string ) && struct.script_string == level.scr_zm_map_start_location ) { point = struct; } } if ( !isDefined( point ) ) { point = points[ 0 ]; } if ( !isDefined( org ) ) { self spawn( point.origin, point.angles ); } if ( isDefined( point.target ) ) { if ( !isDefined( org ) ) { org = spawn( "script_model", self.origin + vectorScale( ( 0, -1, 0 ), 60 ) ); org setmodel( "tag_origin" ); } org.origin = point.origin; org.angles = point.angles; for ( j = 0; j < get_players().size; j++ ) { player = get_players()[ j ]; player camerasetposition( org ); player camerasetlookat(); player cameraactivate( 1 ); } speed = 20; if ( isDefined( point.speed ) ) { speed = point.speed; } target_point = getstruct( point.target, "targetname" ); dist = distance( point.origin, target_point.origin ); time = dist / speed; q_time = time * 0.25; if ( q_time > 1 ) { q_time = 1; } self.game_over_bg fadeovertime( q_time ); self.game_over_bg.alpha = 0; org moveto( target_point.origin, time, q_time, q_time ); org rotateto( target_point.angles, time, q_time, q_time ); wait ( time - q_time ); self.game_over_bg fadeovertime( q_time ); self.game_over_bg.alpha = 1; wait q_time; continue; } else { self.game_over_bg fadeovertime( 1 ); self.game_over_bg.alpha = 0; wait 5; self.game_over_bg thread fade_up_over_time( 1 ); } } } meetupwithothercharacters() //checked partially changed to match beta dump see info.md No. 2 { self endon( "disconnect" ); isalone = 1; flag_wait( "begin_spawning" ); while ( isalone ) { players = get_players(); if ( flag( "solo_game" ) ) { break; } foreach ( player in players ) { if ( player == self ) { } else { if ( distancesquared( self.origin, player.origin ) < 1048576 ) { /* /# println( "^2Transit Debug: " + self.name + " met up with " + player.name ); #/ */ isalone = 0; } } } wait 1; } self.characterrespawnpoint = undefined; } transit_respawn_override( player ) //checked matches cerberus output { if ( isDefined( player.characterrespawnpoint ) ) { /* /# println( "^2Transit Debug: Using character respawn point for " + player.name ); #/ */ return player.characterrespawnpoint.origin; } return undefined; } disable_triggers() //checked changed to match cerberus output { trig = getentarray( "trigger_Keys", "targetname" ); for ( i = 0; i < trig.size; i++ ) { trig[ i ] trigger_off(); } } transit_zone_init() //checked changed to match cerberus output { flag_init( "always_on" ); flag_init( "init_classic_adjacencies" ); flag_set( "always_on" ); if ( is_classic() ) { flag_set( "init_classic_adjacencies" ); add_adjacent_zone( "zone_trans_2", "zone_trans_2b", "init_classic_adjacencies" ); add_adjacent_zone( "zone_station_ext", "zone_trans_2b", "init_classic_adjacencies", 1 ); add_adjacent_zone( "zone_town_west2", "zone_town_west", "init_classic_adjacencies" ); add_adjacent_zone( "zone_town_south", "zone_town_church", "init_classic_adjacencies" ); add_adjacent_zone( "zone_trans_pow_ext1", "zone_trans_7", "init_classic_adjacencies" ); add_adjacent_zone( "zone_far", "zone_far_ext", "OnFarm_enter" ); } else { playable_area = getentarray( "player_volume", "script_noteworthy" ); foreach ( area in playable_area ) { add_adjacent_zone( "zone_station_ext", "zone_trans_2b", "always_on" ); if ( isDefined( area.script_parameters ) && area.script_parameters == "classic_only" ) { area delete(); } } } add_adjacent_zone( "zone_pri2", "zone_station_ext", "OnPriDoorYar", 1 ); add_adjacent_zone( "zone_pri2", "zone_pri", "OnPriDoorYar3", 1 ); if ( getDvar( "ui_zm_mapstartlocation" ) == "transit" ) { level thread disconnect_door_zones( "zone_pri2", "zone_station_ext", "OnPriDoorYar" ); level thread disconnect_door_zones( "zone_pri2", "zone_pri", "OnPriDoorYar3" ); } add_adjacent_zone( "zone_station_ext", "zone_pri", "OnPriDoorYar2" ); add_adjacent_zone( "zone_roadside_west", "zone_din", "OnGasDoorDin" ); add_adjacent_zone( "zone_roadside_west", "zone_gas", "always_on" ); add_adjacent_zone( "zone_roadside_east", "zone_gas", "always_on" ); add_adjacent_zone( "zone_roadside_east", "zone_gar", "OnGasDoorGar" ); add_adjacent_zone( "zone_trans_diner", "zone_roadside_west", "always_on", 1 ); add_adjacent_zone( "zone_trans_diner", "zone_gas", "always_on", 1 ); add_adjacent_zone( "zone_trans_diner2", "zone_roadside_east", "always_on", 1 ); add_adjacent_zone( "zone_gas", "zone_din", "OnGasDoorDin" ); add_adjacent_zone( "zone_gas", "zone_gar", "OnGasDoorGar" ); add_adjacent_zone( "zone_diner_roof", "zone_din", "OnGasDoorDin", 1 ); add_adjacent_zone( "zone_amb_cornfield", "zone_cornfield_prototype", "always_on" ); add_adjacent_zone( "zone_tow", "zone_bar", "always_on", 1 ); add_adjacent_zone( "zone_bar", "zone_tow", "OnTowDoorBar", 1 ); add_adjacent_zone( "zone_tow", "zone_ban", "OnTowDoorBan" ); add_adjacent_zone( "zone_ban", "zone_ban_vault", "OnTowBanVault" ); add_adjacent_zone( "zone_tow", "zone_town_north", "always_on" ); add_adjacent_zone( "zone_town_north", "zone_ban", "OnTowDoorBan" ); add_adjacent_zone( "zone_tow", "zone_town_west", "always_on" ); add_adjacent_zone( "zone_tow", "zone_town_south", "always_on" ); add_adjacent_zone( "zone_town_south", "zone_town_barber", "always_on", 1 ); add_adjacent_zone( "zone_tow", "zone_town_east", "always_on" ); add_adjacent_zone( "zone_town_east", "zone_bar", "OnTowDoorBar" ); add_adjacent_zone( "zone_tow", "zone_town_barber", "always_on", 1 ); add_adjacent_zone( "zone_town_barber", "zone_tow", "OnTowDoorBarber", 1 ); add_adjacent_zone( "zone_town_barber", "zone_town_west", "OnTowDoorBarber" ); add_adjacent_zone( "zone_far_ext", "zone_brn", "OnFarm_enter" ); add_adjacent_zone( "zone_far_ext", "zone_farm_house", "open_farmhouse" ); add_adjacent_zone( "zone_prr", "zone_pow", "OnPowDoorRR", 1 ); add_adjacent_zone( "zone_pcr", "zone_prr", "OnPowDoorRR" ); add_adjacent_zone( "zone_pcr", "zone_pow_warehouse", "OnPowDoorWH" ); add_adjacent_zone( "zone_pow", "zone_pow_warehouse", "OnPowDoorWH" ); add_adjacent_zone( "zone_tbu", "zone_tow", "vault_opened", 1 ); } include_powerups() //checked matches cerberus output { gametype = getDvar( "ui_gametype" ); include_powerup( "nuke" ); include_powerup( "insta_kill" ); include_powerup( "double_points" ); include_powerup( "full_ammo" ); include_powerup( "insta_kill_ug" ); if ( gametype != "zgrief" ) { include_powerup( "carpenter" ); } if ( is_encounter() && gametype != "zgrief" ) { include_powerup( "minigun" ); } include_powerup( "teller_withdrawl" ); } add_transit_powerups() //checked matches cerberus output { maps/mp/zombies/_zm_powerups::add_zombie_powerup( "teller_withdrawl", "zombie_z_money_icon", &"ZOMBIE_TELLER_PICKUP_DEPOSIT", maps/mp/zombies/_zm_powerups::func_should_never_drop, 1, 0, 0 ); } include_equipment_for_level() //checked matches cerberus output { level.equipment_turret_needs_power = 1; level.equipment_etrap_needs_power = 1; include_equipment( "jetgun_zm" ); include_equipment( "riotshield_zm" ); include_equipment( "equip_turbine_zm" ); include_equipment( "equip_turret_zm" ); include_equipment( "equip_electrictrap_zm" ); level.equipment_planted = ::equipment_planted; level.equipment_safe_to_drop = ::equipment_safe_to_drop; level.check_force_deploy_origin = ::use_safe_spawn_on_bus; limit_equipment( "jetgun_zm", 1 ); level.explode_overheated_jetgun = 1; level.exploding_jetgun_fx = level._effect[ "lava_burning" ]; } transit_bus_update_retrieve_trigger( player ) //checked matches cerberus output used is_true instead { self endon( "death" ); player endon( "zmb_lost_knife" ); if ( isDefined( level.the_bus ) && is_true( player.isonbus ) ) { wait 2; trigger = self.retrievabletrigger; trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); self linkto( level.the_bus ); trigger linkto( self ); } else { self waittill( "stationary" ); trigger = self.retrievabletrigger; trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); trigger linkto( self ); } } claymore_safe_to_plant() //checked matches cerberus output { if ( self maps/mp/zm_transit_lava::object_touching_lava() ) { return 0; } if ( self.owner maps/mp/zm_transit_lava::object_touching_lava() ) { return 0; } return 1; } claymore_planted( weapon ) //checked matches cerberus output { weapon waittill( "stationary" ); if ( !isDefined( weapon ) ) { return; } weaponbus = weapon maps/mp/zm_transit_bus::object_is_on_bus(); if ( weaponbus ) { if ( isDefined( weapon ) ) { weapon setmovingplatformenabled( 1 ); weapon.equipment_can_move = 1; weapon.isonbus = 1; weapon.move_parent = level.the_bus; if ( isDefined( weapon.damagearea ) ) { weapon.damagearea setmovingplatformenabled( 1 ); } } } } fakelinkto( linkee ) //checked matches cerberus output { self.backlinked = 1; while ( isDefined( self ) && isDefined( linkee ) ) { self.origin = linkee.origin; self.angles = linkee.angles; wait 0.05; } } knife_planted( knife, trigger, parent ) //checked matches cerberus output { if ( !isDefined( knife ) ) { return; } weaponbus = knife maps/mp/zm_transit_bus::object_is_on_bus(); if ( weaponbus ) { trigger linkto( knife ); trigger setmovingplatformenabled( 1 ); trigger.isonbus = 1; knife setmovingplatformenabled( 1 ); knife.isonbus = 1; } } grenade_planted( grenade, model ) //checked matches cerberus output { if ( !isDefined( grenade ) ) { return; } weaponbus = grenade maps/mp/zm_transit_bus::object_is_on_bus(); if ( weaponbus ) { if ( isDefined( grenade ) ) { grenade setmovingplatformenabled( 1 ); grenade.equipment_can_move = 1; grenade.isonbus = 1; grenade.move_parent = level.the_bus; if ( isDefined( model ) ) { model setmovingplatformenabled( 1 ); model linkto( level.the_bus ); model.isonbus = 1; grenade fakelinkto( model ); } } } } grenade_safe_to_throw( player, weapname ) //checked matches cerberus output { return 1; } grenade_safe_to_bounce( player, weapname ) //checked matches cerberus output { if ( !is_offhand_weapon( weapname ) && !is_grenade_launcher( weapname ) ) { return 1; } if ( self maps/mp/zm_transit_lava::object_touching_lava() ) { return 0; } return 1; } equipment_safe_to_drop( weapon ) //checked matches cerberus output used is_true instead { if ( !isDefined( weapon.canmove ) ) { weapon.canmove = weapon maps/mp/zm_transit_bus::object_is_on_bus(); } if ( is_true( weapon.canmove ) ) { return 1; } if ( weapon maps/mp/zm_transit_lava::object_touching_lava() ) { return 0; } return 1; } use_safe_spawn_on_bus( weapon, origin, angles ) //checked matches cerberus output used is_true instead { if ( is_true( self.isonbus ) && level.the_bus.ismoving ) { weapon.canmove = 1; return 1; } return 0; } equipment_planted( weapon, equipname, groundfrom ) //checked matches cerberus output used is_true instead { weaponbus = groundfrom maps/mp/zm_transit_bus::object_is_on_bus(); if ( !weaponbus && weapon maps/mp/zm_transit_lava::object_touching_lava() ) { self maps/mp/zombies/_zm_equipment::equipment_take( equipname ); wait 0.05; self notify( equipname + "_taken" ); return; } if ( isDefined( self ) && weaponbus ) { if ( isDefined( weapon ) ) { if ( !is_true( weapon.canmove ) ) { weapon.canmove = 1; reregister_unitrigger_as_dynamic( weapon.stub ); } weapon linkto( level.the_bus ); weapon setmovingplatformenabled( 1 ); if ( isDefined( weapon.stub ) ) { weapon.stub.link_parent = level.the_bus; weapon.stub.origin_parent = weapon; } weapon.equipment_can_move = 1; weapon.isonbus = 1; weapon.move_parent = level.the_bus; } } } 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_lethal_grenade_for_level( "sticky_grenade_zm" ); register_tactical_grenade_for_level( "cymbal_monkey_zm" ); register_tactical_grenade_for_level( "emp_grenade_zm" ); level.zombie_tactical_grenade_player_init = undefined; level.grenade_safe_to_throw = ::grenade_safe_to_throw; level.grenade_safe_to_bounce = ::grenade_safe_to_bounce; level.grenade_planted = ::grenade_planted; level.knife_planted = ::knife_planted; register_placeable_mine_for_level( "claymore_zm" ); level.zombie_placeable_mine_player_init = undefined; level.claymore_safe_to_plant = ::claymore_safe_to_plant; level.claymore_planted = ::claymore_planted; register_melee_weapon_for_level( "knife_zm" ); register_melee_weapon_for_level( "bowie_knife_zm" ); register_melee_weapon_for_level( "tazer_knuckles_zm" ); level.zombie_melee_weapon_player_init = "knife_zm"; register_equipment_for_level( "jetgun_zm" ); register_equipment_for_level( "riotshield_zm" ); register_equipment_for_level( "equip_turbine_zm" ); register_equipment_for_level( "equip_turret_zm" ); register_equipment_for_level( "equip_electrictrap_zm" ); level.zombie_equipment_player_init = undefined; } include_weapons() //checked matches cerberus output used is_true instead { gametype = getDvar( "ui_gametype" ); include_weapon( "knife_zm", 0 ); include_weapon( "frag_grenade_zm", 0 ); include_weapon( "claymore_zm", 0 ); include_weapon( "sticky_grenade_zm", 0 ); include_weapon( "m1911_zm", 0 ); include_weapon( "m1911_upgraded_zm", 0 ); include_weapon( "python_zm" ); include_weapon( "python_upgraded_zm", 0 ); include_weapon( "judge_zm" ); include_weapon( "judge_upgraded_zm", 0 ); include_weapon( "kard_zm" ); include_weapon( "kard_upgraded_zm", 0 ); include_weapon( "fiveseven_zm" ); include_weapon( "fiveseven_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( "ak74u_zm", 0 ); include_weapon( "ak74u_upgraded_zm", 0 ); include_weapon( "mp5k_zm", 0 ); include_weapon( "mp5k_upgraded_zm", 0 ); include_weapon( "qcw05_zm" ); include_weapon( "qcw05_upgraded_zm", 0 ); include_weapon( "870mcs_zm", 0 ); include_weapon( "870mcs_upgraded_zm", 0 ); include_weapon( "rottweil72_zm", 0 ); include_weapon( "rottweil72_upgraded_zm", 0 ); include_weapon( "saiga12_zm" ); include_weapon( "saiga12_upgraded_zm", 0 ); include_weapon( "srm1216_zm" ); include_weapon( "srm1216_upgraded_zm", 0 ); include_weapon( "m14_zm", 0 ); include_weapon( "m14_upgraded_zm", 0 ); include_weapon( "saritch_zm" ); include_weapon( "saritch_upgraded_zm", 0 ); include_weapon( "m16_zm", 0 ); include_weapon( "m16_gl_upgraded_zm", 0 ); include_weapon( "xm8_zm" ); include_weapon( "xm8_upgraded_zm", 0 ); include_weapon( "type95_zm" ); include_weapon( "type95_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( "rpd_zm" ); include_weapon( "rpd_upgraded_zm", 0 ); include_weapon( "hamr_zm" ); include_weapon( "hamr_upgraded_zm", 0 ); include_weapon( "usrpg_zm" ); include_weapon( "usrpg_upgraded_zm", 0 ); include_weapon( "m32_zm" ); include_weapon( "m32_upgraded_zm", 0 ); include_weapon( "cymbal_monkey_zm" ); include_weapon( "emp_grenade_zm", 1, undefined, ::less_than_normal ); if ( is_classic() ) { include_weapon( "screecher_arms_zm", 0 ); } if ( gametype != "zgrief" ) { include_weapon( "ray_gun_zm" ); include_weapon( "ray_gun_upgraded_zm", 0 ); include_weapon( "jetgun_zm", 0, undefined, ::less_than_normal ); include_weapon( "riotshield_zm", 0 ); include_weapon( "tazer_knuckles_zm", 0 ); include_weapon( "knife_ballistic_no_melee_zm", 0 ); include_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); include_weapon( "knife_ballistic_zm" ); include_weapon( "knife_ballistic_upgraded_zm", 0 ); include_weapon( "knife_ballistic_bowie_zm", 0 ); include_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); level._uses_retrievable_ballisitic_knives = 1; add_limited_weapon( "knife_ballistic_zm", 1 ); add_limited_weapon( "jetgun_zm", 1 ); add_limited_weapon( "ray_gun_zm", 4 ); add_limited_weapon( "ray_gun_upgraded_zm", 4 ); add_limited_weapon( "knife_ballistic_upgraded_zm", 0 ); add_limited_weapon( "knife_ballistic_no_melee_zm", 0 ); add_limited_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); add_limited_weapon( "knife_ballistic_bowie_zm", 0 ); add_limited_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); if ( is_true( 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_limited_weapon( "m1911_zm", 0 ); add_weapon_locker_mapping( "lsat_zm", "hamr_zm" ); add_weapon_locker_mapping( "lsat_upgraded_zm", "hamr_upgraded_zm" ); add_weapon_locker_mapping( "svu_zm", "fnfal_zm" ); add_weapon_locker_mapping( "svu_upgraded_zm", "fnfal_upgraded_zm" ); add_weapon_locker_mapping( "pdw57_zm", "qcw05_zm" ); add_weapon_locker_mapping( "pdw57_upgraded_zm", "qcw05_upgraded_zm" ); add_weapon_locker_mapping( "an94_zm", "galil_zm" ); add_weapon_locker_mapping( "an94_upgraded_zm", "galil_upgraded_zm" ); add_weapon_locker_mapping( "rnma_zm", "python_zm" ); add_weapon_locker_mapping( "rnma_upgraded_zm", "python_upgraded_zm" ); } less_than_normal() //checked matches cerberus output { return 0.5; } custom_add_weapons() //checked matches cerberus output used is_true instead { add_zombie_weapon( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "", "", undefined ); add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_python", "", undefined, 1 ); add_zombie_weapon( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_judge", "", undefined, 1 ); add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_kap", "", undefined, 1 ); add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_57", "", undefined, 1 ); add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "", "", undefined ); add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel57", "", undefined, 1 ); add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "smg", "", undefined ); add_zombie_weapon( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "smg", "", undefined ); add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_chicom", "", undefined, 1 ); add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1500, "shotgun", "", undefined ); add_zombie_weapon( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "shotgun", "", undefined ); add_zombie_weapon( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_saiga12", "", undefined, 1 ); add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_m1216", "", undefined, 1 ); add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "rifle", "", undefined ); add_zombie_weapon( "saritch_zm", "saritch_upgraded_zm", &"ZOMBIE_WEAPON_SARITCH", 50, "wpck_sidr", "", undefined, 1 ); add_zombie_weapon( "m16_zm", "m16_gl_upgraded_zm", &"ZOMBIE_WEAPON_M16", 1200, "burstrifle", "", undefined ); add_zombie_weapon( "xm8_zm", "xm8_upgraded_zm", &"ZOMBIE_WEAPON_XM8", 50, "wpck_m8a1", "", undefined, 1 ); add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_type25", "", undefined, 1 ); add_zombie_weapon( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_x95l", "", undefined, 1 ); add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_galil", "", undefined, 1 ); add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_fal", "", undefined, 1 ); add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_dsr50", "", undefined, 1 ); add_zombie_weapon( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "sniper", "", undefined ); add_zombie_weapon( "rpd_zm", "rpd_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_rpd", "", undefined, 1 ); add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_hamr", "", undefined, 1 ); add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); add_zombie_weapon( "sticky_grenade_zm", undefined, &"ZOMBIE_WEAPON_STICKY_GRENADE", 250, "grenade", "", 250 ); add_zombie_weapon( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1000, "grenade", "", undefined ); add_zombie_weapon( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_m32", "", undefined, 1 ); add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); add_zombie_weapon( "emp_grenade_zm", undefined, &"ZOMBIE_WEAPON_EMP_GRENADE", 2000, "wpck_emp", "", undefined, 1 ); add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); add_zombie_weapon( "knife_ballistic_zm", "knife_ballistic_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined ); add_zombie_weapon( "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "wpck_knife", "", undefined, 1 ); add_zombie_weapon( "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined ); add_zombie_weapon( "riotshield_zm", undefined, &"ZOMBIE_WEAPON_RIOTSHIELD", 2000, "riot", "", undefined ); add_zombie_weapon( "jetgun_zm", undefined, &"ZOMBIE_WEAPON_JETGUN", 2000, "jet", "", undefined ); add_zombie_weapon( "tazer_knuckles_zm", undefined, &"ZOMBIE_WEAPON_TAZER_KNUCKLES", 100, "tazerknuckles", "", undefined ); if ( is_true( level.raygun2_included ) ) { add_zombie_weapon( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "raygun_mark2", "", undefined ); } } include_game_modules() //checked matches cerberus output { } initial_round_wait_func() //checked matches cerberus output { flag_wait( "initial_blackscreen_passed" ); } zombie_speed_up() //checked matches cerberus output used is_true instead { if ( is_true( self.isonbus ) ) { return; } if ( self.zombie_move_speed != "sprint" ) { self set_zombie_run_cycle( "sprint" ); } } zombie_init_done() //checked matches cerberus output { self.allowpain = 0; self setphysparams( 15, 0, 48 ); } setup_dvars() //dev call didn't check { /* /# dvars = []; dvars[ dvars.size ] = "zombie_bus_debug_path"; dvars[ dvars.size ] = "zombie_bus_debug_speed"; dvars[ dvars.size ] = "zombie_bus_debug_near"; dvars[ dvars.size ] = "zombie_bus_debug_attach"; dvars[ dvars.size ] = "zombie_bus_skip_objectives"; dvars[ dvars.size ] = "zombie_bus_debug_spawners"; i = 0; while ( i < dvars.size ) { if ( getDvar( dvars[ i ] ) == "" ) { setdvar( dvars[ i ], "0" ); } i++; #/ } */ } setup_zombie_init() //checked matches cerberus output { zombies = getentarray( "zombie_spawner", "script_noteworthy" ); array_thread( zombies, ::add_spawn_function, ::custom_zombie_setup ); } setup_players() //checked matches cerberus output { self.isonbus = 0; self.isonbusroof = 0; self.isinhub = 1; self.insafearea = 1; } transit_player_fake_death( vdir ) //checked changed to match cerberus output used is_true instead { level notify( "fake_death" ); self notify( "fake_death" ); if ( is_true( self.isonbus ) ) { level thread transit_player_fake_death_zombies(); } stance = self getstance(); self.ignoreme = 1; self enableinvulnerability(); self takeallweapons(); if ( is_true( self.insta_killed ) || self istouching( getent( "depot_lava_pit", "targetname" ) ) || is_true( self.isonbus ) && level.the_bus.ismoving ) { 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; } } transit_player_fake_death_zombies() //checked partially changed to match cerberus output see info.md No. 2 used is_true instead { zombies = getaiarray( level.zombie_team ); foreach ( zombie in zombies ) { if ( !isalive( zombie ) ) { } else if ( is_true( zombie.ignore_game_over_death ) ) { } else if ( isDefined( zombie ) ) { zombie dodamage( zombie.health + 666, zombie.origin ); } else if ( ( index % 3 ) == 0 ) { wait_network_frame(); } } } fall_down( vdir, stance ) //checked changed to match cerberus output used is_true instead { 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" ); } if ( is_true( self.isonbus ) ) { linker linkto( level.the_bus ); } self giveweapon( "death_throe_zm" ); self switchtoweapon( "death_throe_zm" ); if ( falling && !is_true( self.isonbus ) ) { 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(); } transit_player_fake_death_cleanup() //checked matches cerberus output { if ( isDefined( self._fall_down_anchor ) ) { self._fall_down_anchor delete(); self._fall_down_anchor = undefined; } } custom_zombie_setup() //checked matches cerberus output { if ( is_survival() && !is_standard() ) { self.nearbus = 0; self.isonbus = 0; self.isonbusroof = 0; self.was_walking = 0; self.candropsafekey = 1; self.candropbuskey = 1; self.custom_points_on_turret_damage = 0; } } bunkerdoorrotate( open, time ) //checked matches cerberus output { if ( !isDefined( time ) ) { time = 0.2; } rotate = self.script_float; if ( !open ) { rotate *= -1; } if ( isDefined( self.script_angles ) ) { self notsolid(); self rotateto( self.script_angles, time, 0, 0 ); self thread maps/mp/zombies/_zm_blockers::door_solid_thread(); } } zm_transit_emp_init() //checked matches cerberus output { level.custom_emp_detonate = ::zm_transit_emp_detonate; set_zombie_var( "emp_bus_off_range", 1200 ); set_zombie_var( "emp_bus_off_time", 45 ); } zm_transit_emp_detonate( grenade_origin ) //checked matches cerberus output { test_ent = spawn( "script_origin", grenade_origin ); if ( test_ent maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr" ) ) { if ( flag( "power_on" ) ) { trig = getent( "powerswitch_buildable_trigger_power", "targetname" ); trig notify( "trigger" ); } } test_ent delete(); } emp_detonate_boss( grenade_origin ) //checked matches cerberus output { } register_screecher_lights() //checked changed to match cerberus output { level.safety_lights = getstructarray( "screecher_escape", "targetname" ); for ( i = 0; i < level.safety_lights.size; i++ ) { safety = level.safety_lights[ i ]; name = safety.script_noteworthy; if ( !isDefined( name ) ) { /* /# println( "ERROR Unnamed screecher light detected" ); #/ */ name = "light_" + i; } clientfieldname = "screecher_light_" + name; level.safety_lights[ i ].clientfieldname = clientfieldname; registerclientfield( "world", clientfieldname, 1, 1, "int" ); } } include_powered_items() //checked changed to match cerberus output { if ( is_classic() ) { include_powered_item( ::bus_power_on, ::bus_power_off, ::bus_range, maps/mp/zombies/_zm_power::cost_negligible, 1, 1, undefined ); if ( isDefined( level.safety_lights ) ) { for ( i = 0; i < level.safety_lights.size; i++ ) { include_powered_item( ::safety_light_power_on, ::safety_light_power_off, ::safety_light_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, 0, level.safety_lights[ i ] ); } } } } bus_range( delta, origin, radius ) //checked matches cerberus output { if ( isDefined( level.the_bus ) ) { if ( distance2dsquared( origin, level.the_bus.origin ) < ( radius * radius ) ) { return 1; } forward = anglesToForward( level.the_bus.angles ); forward = vectorScale( forward, 275 ); bus_front = level.the_bus.origin + forward; if ( distance2dsquared( origin, bus_front ) < ( radius * radius ) ) { return 1; } } return 0; } bus_power_on( origin, radius ) //checked matches cerberus output { /* /# println( "^1ZM POWER: bus on\n" ); #/ */ level.the_bus thread maps/mp/zm_transit_bus::bus_power_on(); } bus_power_off( origin, radius ) //checked matches cerberus output { /* /# println( "^1ZM POWER: bus off\n" ); #/ */ level.the_bus thread maps/mp/zm_transit_bus::bus_power_off(); } safety_light_range( delta, origin, radius ) //checked matches cerberus output { if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) ) { return 1; } return 0; } safety_light_power_on( origin, radius ) //checked changed to match cerberus output { /* /# println( "^1ZM POWER: bus on\n" ); #/ */ self.target.power_on = 1; self.target notify( "power_on" ); if ( isDefined( self.target.clientfieldname ) ) { level setclientfield( self.target.clientfieldname, 1 ); } level notify( "safety_light_power_on", self ); } safety_light_power_off( origin, radius ) //checked changed to match cerberus output { /* /# println( "^1ZM POWER: bus off\n" ); #/ */ self.target.power_on = 0; self.target notify( "power_off" ); if ( isDefined( self.target.clientfieldname ) ) { level setclientfield( self.target.clientfieldname, 0 ); } level notify( "safety_light_power_off", self ); } zombie_transit_devgui( cmd ) //dev call didn't check { /* /# cmd_strings = strtok( cmd, " " ); switch( cmd_strings[ 0 ] ) { case "pickup": if ( !level.the_bus.upgrades[ cmd_strings[ 1 ] ].pickedup ) { level.the_bus.upgrades[ cmd_strings[ 1 ] ].trigger notify( "trigger" ); } break; case "spawn": player = get_players()[ 0 ]; spawnername = undefined; if ( cmd_strings[ 1 ] == "regular" ) { spawnername = "zombie_spawner"; } else if ( cmd_strings[ 1 ] == "screecher" ) { } else { return; } direction = player getplayerangles(); direction_vec = anglesToForward( direction ); eye = player geteye(); scale = 8000; direction_vec = ( direction_vec[ 0 ] * scale, direction_vec[ 1 ] * scale, direction_vec[ 2 ] * scale ); trace = bullettrace( eye, eye + direction_vec, 0, undefined ); guy = undefined; if ( cmd_strings[ 1 ] == "screecher" ) { spawner = level.screecher_spawners[ 0 ]; guy = maps/mp/zombies/_zm_utility::spawn_zombie( spawner ); } else { if ( cmd_strings[ 1 ] == "regular" ) { spawners = getentarray( spawnername, "script_noteworthy" ); spawner = spawners[ 0 ]; guy = maps/mp/zombies/_zm_utility::spawn_zombie( spawner ); guy.favoriteenemy = player; guy.script_string = "zombie_chaser"; guy thread maps/mp/zombies/_zm_spawner::zombie_spawn_init(); guy custom_zombie_setup(); } } guy forceteleport( trace[ "position" ], player.angles + vectorScale( ( 0, -1, 0 ), 180 ) ); break; case "test_attach": attach_name = getDvar( "zombie_bus_debug_attach" ); opening = level.the_bus maps/mp/zm_transit_openings::busgetopeningfortag( attach_name ); jump = level.the_bus maps/mp/zm_transit_openings::_busgetjumptagfrombindtag( attach_name ); if ( isDefined( opening ) ) { if ( isDefined( opening.zombie ) ) { iprintln( "Zombie already attached to opening: " + attach_name ); } else { origin = level.the_bus gettagorigin( attach_name ); if ( isDefined( jump ) ) { jump_origin = level.the_bus gettagorigin( jump ); if ( isDefined( opening.enabled ) && opening.enabled ) { debugstar( jump_origin, 1000, ( 0, -1, 0 ) ); } else { debugstar( jump_origin, 1000, ( 0, -1, 0 ) ); } } zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); zombie = spawn_zombie( zombie_spawners[ 0 ] ); zombie.cannotattachtobus = 1; zombie thread maps/mp/zm_transit_openings::zombieattachtobus( level.the_bus, opening, 0 ); } } else { iprintln( "Couldn't find opening for tag: " + attach_name ); } break; case "attach_tag": setdvar( "zombie_bus_debug_attach", cmd_strings[ 1 ] ); break; case "hatch_available": if ( isDefined( level.the_bus ) ) { level.the_bus notify( "hatch_mantle_allowed" ); } break; case "ambush_round": if ( isDefined( level.ambushpercentageperstop ) ) { if ( cmd_strings[ 1 ] == "always" ) { level.ambushpercentageperstop = 100; } else { if ( cmd_strings[ 1 ] == "never" ) { level.ambushpercentageperstop = 0; } } } break; case "gas": if ( cmd_strings[ 1 ] == "add" ) { level.the_bus maps/mp/zm_transit_bus::busgasadd( getDvarInt( #"69C4D2C1" ) ); } else { if ( cmd_strings[ 1 ] == "remove" ) { level.the_bus maps/mp/zm_transit_bus::busgasremove( getDvarInt( #"69C4D2C1" ) ); } } break; case "force_bus_to_leave": level.the_bus notify( "depart_early" ); if ( isDefined( level.bus_leave_hud ) ) { level.bus_leave_hud.alpha = 0; } break; case "teleport_to_bus": get_players()[ 0 ] setorigin( level.the_bus localtoworldcoords( vectorScale( ( 0, -1, 0 ), 25 ) ) ); break; case "teleport_bus": node = getvehiclenode( cmd_strings[ 1 ], "script_noteworthy" ); if ( isDefined( node ) ) { level.the_bus thread buspathblockerdisable(); wait 0,1; level.the_bus attachpath( node ); level.the_bus maps/mp/zm_transit_bus::busstopmoving( 1 ); wait 0,1; level.the_bus thread buspathblockerenable(); } break; case "avogadro_round_skip": if ( isDefined( level.next_avogadro_round ) ) { maps/mp/zombies/_zm_devgui::zombie_devgui_goto_round( level.next_avogadro_round ); } break; case "debug_print_emp_points": while ( isDefined( level.debug_print_emp_points ) && !level.debug_print_emp_points ) { level.debug_print_emp_points = 1; vehnodes = getvehiclenodearray( "emp_stop_point", "script_noteworthy" ); _a3190 = vehnodes; _k3190 = getFirstArrayKey( _a3190 ); while ( isDefined( _k3190 ) ) { node = _a3190[ _k3190 ]; maps/mp/zombies/_zm_devgui::showonespawnpoint( node, ( 0, -1, 0 ), "kill_debug_print_emp_points", undefined, "EMP STOP" ); _k3190 = getNextArrayKey( _a3190, _k3190 ); } } case "debug_stop_print_emp_points": if ( isDefined( level.debug_print_emp_points ) && level.debug_print_emp_points ) { level notify( "kill_debug_print_emp_points" ); level.debug_print_emp_points = undefined; } break; default: } #/ } } */ } is_valid_powerup_location( powerup ) //checked changed to match cerberus output { valid = 0; if ( !isDefined( level.powerup_areas ) ) { level.powerup_areas = getentarray( "powerup_area", "script_noteworthy" ); } if ( !isDefined( level.playable_areas ) ) { level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); } for ( i = 0; i < level.powerup_areas.size && !valid; i++ ) { area = level.powerup_areas[ i ]; valid = powerup istouching( area ); } for ( i = 0; i < level.playable_areas.size && !valid; i++ ) { area = level.playable_areas[ i ]; valid = powerup istouching( area ); } return valid; } zombie_transit_player_too_many_weapons_monitor_callback( weapon ) //checked matches cerberus output { if ( self maps/mp/zm_transit_cling::playerisclingingtobus() ) { return 0; } return 1; } zombie_transit_audio_alias_override() //checked matches cerberus output { maps/mp/zm_transit_automaton::initaudioaliases(); init_transit_player_dialogue(); add_transit_response_chance(); } falling_death_init() //checked changed to match beta dump { trig = getent( "transit_falling_death", "targetname" ); if ( isDefined( trig ) ) { while ( 1 ) { trig waittill( "trigger", who ); if ( !is_true( who.insta_killed ) ) { who thread insta_kill_player(); } } } } insta_kill_player() //checked changed to match beta dump { self endon( "disconnect" ); if ( is_true( self.insta_killed ) ) { return; } self maps/mp/zombies/_zm_buildables::player_return_piece_to_original_spawn(); if ( is_player_killable( self ) ) { self.insta_killed = 1; in_last_stand = 0; if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) { in_last_stand = 1; } if ( getnumconnectedplayers() == 1 ) { if ( isDefined( self.lives ) && self.lives > 0 ) { self.waiting_to_revive = 1; points = getstruct( "zone_pcr", "script_noteworthy" ); spawn_points = getstructarray( points.target, "targetname" ); point = spawn_points[ 0 ]; self dodamage( self.health + 1000, ( 0, 0, 0 ) ); maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, 1, level.zm_transit_burn_max_duration ); wait 0.5; self freezecontrols( 1 ); wait 0.25; self setorigin( point.origin + vectorScale( ( 0, 0, 1 ), 20 ) ); self.angles = point.angles; if ( in_last_stand ) { flag_set( "instant_revive" ); wait_network_frame(); flag_clear( "instant_revive" ); } else { self thread maps/mp/zombies/_zm_laststand::auto_revive( self ); self.waiting_to_revive = 0; self.solo_respawn = 0; self.lives = 0; } self freezecontrols( 0 ); self.insta_killed = 0; } else { self dodamage( self.health + 1000, ( 0, 0, 0 ) ); maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, 2, level.zm_transit_burn_max_duration ); } } else { self dodamage( self.health + 1000, ( 0, 0, 0 ) ); maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, 1, level.zm_transit_burn_max_duration ); wait_network_frame(); self.bleedout_time = 0; } self notify( "burned" ); self.insta_killed = 0; } } is_player_killable( player, checkignoremeflag ) //checked matches cerberus output { if ( !isDefined( player ) ) { return 0; } if ( !isalive( player ) ) { return 0; } if ( !isplayer( player ) ) { return 0; } if ( player.sessionstate == "spectator" ) { return 0; } if ( player.sessionstate == "intermission" ) { return 0; } if ( isDefined( checkignoremeflag ) && player.ignoreme ) { return 0; } return 1; } delete_bus_pieces() //checked changed to match beta dump { wait 3; if ( is_true( level._bus_pieces_deleted ) ) { return; } level._bus_pieces_deleted = 1; hatch_mantle = getent( "hatch_mantle", "targetname" ); if ( isDefined( hatch_mantle ) ) { hatch_mantle delete(); } hatch_clip = getentarray( "hatch_clip", "targetname" ); array_thread( hatch_clip, ::self_delete ); plow_clip = getentarray( "plow_clip", "targetname" ); array_thread( plow_clip, ::self_delete ); light = getent( "busLight2", "targetname" ); if ( isDefined( light ) ) { light delete(); } light = getent( "busLight1", "targetname" ); if ( isDefined( light ) ) { light delete(); } blocker = getent( "bus_path_blocker", "targetname" ); if ( isDefined( blocker ) ) { blocker delete(); } lights = getentarray( "bus_break_lights", "targetname" ); array_thread( lights, ::self_delete ); orgs = getentarray( "bus_bounds_origin", "targetname" ); array_thread( orgs, ::self_delete ); door_blocker = getentarray( "bus_door_blocker", "targetname" ); array_thread( door_blocker, ::self_delete ); driver = getent( "bus_driver_head", "targetname" ); if ( isDefined( driver ) ) { driver delete(); } plow = getent( "trigger_plow", "targetname" ); if ( isDefined( plow ) ) { plow delete(); } plow_attach_point = getent( "plow_attach_point", "targetname" ); if ( isDefined( plow_attach_point ) ) { plow_attach_point delete(); } bus = getent( "the_bus", "targetname" ); if ( isDefined( bus ) ) { bus delete(); } barriers = getzbarrierarray(); foreach ( barrier in barriers ) { if ( isDefined( barrier.classname ) && issubstr( barrier.classname, "zb_bus" ) ) { for ( x = 0; x < barrier getnumzbarrierpieces(); x++ ) { barrier setzbarrierpiecestate( x, "opening" ); } barrier hide(); } } } init_transit_stats() //checked matches cerberus output { self maps/mp/zm_transit_sq::init_player_sidequest_stats(); self maps/mp/zm_transit_achievement::init_player_achievement_stats(); } kill_zombies_depot() //checked partially changed to match cerberus output see info.md No. 5 { if ( level.zones[ "zone_pri" ].is_occupied == 1 || flag( "OnPriDoorYar2" ) ) { return; } if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pri" ) ) { self.marked_for_recycle = 1; self dodamage( self.health + 666, self.origin, self ); return; } if ( self should_be_killed_depot() ) { self.marked_for_recycle = 1; self dodamage( self.health + 666, self.origin, self ); return; } } //custom addition ////////////////////////////////////////// should_be_killed_depot() //added to get around info. No. 5 for kill_zombies_depot() above { if ( ( self.ignoreall || !self in_playable_zone() ) && isDefined( self.zone_name ) && self.zone_name == "zone_pri" ) { return 1; } if ( ( self.ignoreall || !self in_playable_zone() ) && isDefined( self.zone_name ) && self.zone_name == "zone_pri2" ) { return 1; } return 0; } //////////////////////////////////////// in_playable_zone() //checked changed to match cerberus output { if ( !isDefined( level.playable_areas ) ) { level.playable_areas = getentarray( "player_volume", "script_noteworthy" ); } foreach ( zone in level.playable_areas ) { if ( self istouching( zone ) ) { return 1; } } return 0; } lava_damage_depot() //checked changed to match cerberus output { trigs = getentarray( "lava_damage", "targetname" ); volume = getent( "depot_lava_volume", "targetname" ); exploder( 2 ); foreach ( trigger in trigs ) { if ( isDefined( trigger.script_string ) && trigger.script_string == "depot_lava" ) { trig = trigger; } } if ( isDefined( trig ) ) { trig.script_float = 0.05; } while ( level.round_number < 3 ) { level waittill( "start_of_round" ); } while ( !volume depot_lava_seen() ) { wait 2; } if ( isDefined( trig ) ) { trig.script_float = 0.4; earthquake( 0.5, 1.5, trig.origin, 1000 ); level clientnotify( "earth_crack" ); crust = getent( "depot_black_lava", "targetname" ); crust delete(); } stop_exploder( 2 ); exploder( 3 ); } depot_lava_seen() //checked changed to match cerberus output { check_volume = getent( "depot_lava_check", "targetname" ); players = get_players(); foreach ( player in players ) { if ( player istouching( check_volume ) ) { seen = self maps/mp/zm_transit_distance_tracking::player_can_see_me( player ); if ( seen ) { return 1; } } } return 0; } assign_lowest_unused_character_index() //checked changed to match beta dump { charindexarray = []; charindexarray[ 0 ] = 0; charindexarray[ 1 ] = 1; charindexarray[ 2 ] = 2; charindexarray[ 3 ] = 3; players = get_players(); if ( players.size == 1 ) { charindexarray = array_randomize( charindexarray ); return charindexarray[ 0 ]; } else if ( players.size == 2 ) { foreach ( player in players ) { if ( isDefined( player.characterindex ) ) { if ( player.characterindex == 2 || player.characterindex == 0 ) { if ( randomint( 100 ) > 50 ) { return 1; } return 3; } else if ( player.characterindex == 3 || player.characterindex == 1 ) { if ( randomint( 100 ) > 50 ) { return 0; } return 2; } } } } else { foreach ( player in players ) { if ( isDefined( player.characterindex ) ) { arrayremovevalue( charindexarray, player.characterindex, 0 ); } } if ( charindexarray.size > 0 ) { return charindexarray[ 0 ]; } } return 0; } dog_spawn_transit_logic( dog_array, favorite_enemy ) //checked partially changed to match cerberus output see info.md No. 2 { dog_locs = array_randomize( level.enemy_dog_locations ); for ( i = 0; i < dog_locs.size; i++ ) { if ( isDefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_locs[ i ] ) { } else { canuse = 1; players = get_players(); foreach ( player in players ) { if ( !canuse ) { } else { dist_squared = distancesquared( dog_locs[ i ].origin, player.origin ); if ( dist_squared < 160000 || dist_squared > 1322500 ) { canuse = 0; } } } if ( canuse ) { level.old_dog_spawn = dog_locs[ i ]; return dog_locs[ i ]; } } } return dog_locs[ 0 ]; } bank_teller_init() //checked matches cerberus output { playfx( level._effect[ "fx_zmb_tranzit_key_glint" ], ( 760, 461, -30 ), vectorScale( ( 0, -1, 0 ), 90 ) ); playfx( level._effect[ "fx_zmb_tranzit_key_glint" ], ( 760, 452, -30 ), vectorScale( ( 0, -1, 0 ), 90 ) ); } player_name_fade_control() //checked partially changed to match cerberus output see info.md No. 2 used is_true instead { while ( 1 ) { players = get_players(); foreach ( player in players ) { if ( !isDefined( player.infog ) ) { player.infog = 0; player.old_infog = 0; player.infogtimer = 0; } player.old_infog = player.infog; infog = is_player_in_fog( player ); if ( infog ) { player.infogtimer++; } player.infog = infog; if ( player.infog != player.old_infog && !is_true( player.isonbus ) ) { if ( infog ) { if ( player.infogtimer < 5 ) { } else { line = "in_fog"; } } else { if ( player.infogtimer < 15 ) { } else { line = "out_of_fog"; player.infogtimer = 0; } if ( maps/mp/zombies/_zm_audio::get_response_chance( line ) > randomint( 100 ) && !isDefined( player.screecher ) ) { player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", line ); } } if ( isDefined( level.set_player_in_fog ) ) { player thread [[ level.set_player_in_fog ]]( infog ); } } } wait 1; } } is_player_in_fog( player ) //checked matches cerberus output used is_true instead { if ( player_entered_safety_zone( player ) ) { return 0; } if ( player_entered_safety_light( player ) ) { return 0; } curr_zone = player get_current_zone( 1 ); if ( isDefined( curr_zone ) && !is_true( curr_zone.screecher_zone ) ) { return 0; } return 1; } add_transit_response_chance() //checked matches cerberus output { add_vox_response_chance( "in_fog", 100 ); add_vox_response_chance( "out_of_fog", 65 ); add_vox_response_chance( "killed_screecher", 20 ); add_vox_response_chance( "screecher_attack", 5 ); add_vox_response_chance( "screecher_flee", 50 ); add_vox_response_chance( "screecher_cut", 15 ); add_vox_response_chance( "screecher_flee_green", 75 ); add_vox_response_chance( "crawl_spawn", 10 ); add_vox_response_chance( "screecher_jumpoff", 50 ); add_vox_response_chance( "reboard", 5 ); add_vox_response_chance( "jetgun_kill", 10 ); add_vox_response_chance( "achievement", 100 ); add_vox_response_chance( "power_on", 100 ); add_vox_response_chance( "power_off", 100 ); add_vox_response_chance( "power_core", 100 ); add_vox_response_chance( "upgrade", 100 ); add_vox_response_chance( "build_pck_bshield", 45 ); add_vox_response_chance( "build_pck_bturret", 45 ); add_vox_response_chance( "build_pck_btrap", 45 ); add_vox_response_chance( "build_pck_bturbine", 45 ); add_vox_response_chance( "build_pck_bjetgun", 45 ); add_vox_response_chance( "build_pck_wshield", 45 ); add_vox_response_chance( "build_pck_wturret", 45 ); add_vox_response_chance( "build_pck_wtrap", 45 ); add_vox_response_chance( "build_pck_wturbine", 45 ); add_vox_response_chance( "build_pck_wjetgun", 45 ); add_vox_response_chance( "build_plc_shield", 45 ); add_vox_response_chance( "build_plc_turret", 45 ); add_vox_response_chance( "build_plc_trap", 45 ); add_vox_response_chance( "build_plc_turbine", 45 ); add_vox_response_chance( "build_pickup", 45 ); add_vox_response_chance( "build_swap", 45 ); add_vox_response_chance( "build_add", 45 ); add_vox_response_chance( "build_final", 45 ); } init_transit_player_dialogue() //checked matches cerberus output { level.vox zmbvoxadd( "player", "general", "in_fog", "map_in_fog", undefined ); level.vox zmbvoxadd( "player", "general", "out_of_fog", "map_out_fog", undefined ); level.vox zmbvoxadd( "player", "perk", "specialty_scavenger", "perk_tombstone", undefined ); level.vox zmbvoxadd( "player", "general", "revive_down", "bus_down", undefined ); level.vox zmbvoxadd( "player", "general", "revive_up", "heal_revived", undefined ); level.vox zmbvoxadd( "player", "general", "screecher_attack", "screecher_attack", "resp_screecher_attack" ); level.vox zmbvoxadd( "player", "general", "hr_resp_screecher_attack", "hr_resp_screecher_attack", undefined ); level.vox zmbvoxadd( "player", "general", "riv_resp_screecher_attack", "riv_resp_screecher_attack", undefined ); level.vox zmbvoxadd( "player", "general", "screecher_flee", "screecher_flee", undefined ); level.vox zmbvoxadd( "player", "general", "screecher_jumpoff", "screecher_off", undefined ); level.vox zmbvoxadd( "player", "general", "screecher_flee_green", "screecher_teleport", undefined ); level.vox zmbvoxadd( "player", "kill", "screecher", "kill_screecher", undefined ); level.vox zmbvoxadd( "player", "general", "screecher_cut", "screecher_cut", undefined ); level.vox zmbvoxadd( "player", "general", "achievement", "earn_acheivement", undefined ); level.vox zmbvoxadd( "player", "general", "no_money_weapon", "nomoney_weapon", undefined ); level.vox zmbvoxadd( "player", "general", "no_money_box", "nomoney_box", undefined ); level.vox zmbvoxadd( "player", "general", "exert_sigh", "exert_sigh", undefined ); level.vox zmbvoxadd( "player", "general", "exert_laugh", "exert_laugh", undefined ); level.vox zmbvoxadd( "player", "general", "pain_high", "pain_high", undefined ); level.vox zmbvoxadd( "player", "general", "build_pck_bshield", "build_pck_bshield", undefined ); level.vox zmbvoxadd( "player", "general", "build_pck_bturret", "build_pck_bturret", undefined ); level.vox zmbvoxadd( "player", "general", "build_pck_btrap", "build_pck_btrap", undefined ); level.vox zmbvoxadd( "player", "general", "build_pck_bturbine", "build_pck_bturbine", undefined ); level.vox zmbvoxadd( "player", "general", "build_pck_bjetgun", "build_pck_bjetgun", undefined ); level.vox zmbvoxadd( "player", "general", "build_pck_wshield", "build_pck_wshield", undefined ); level.vox zmbvoxadd( "player", "general", "build_pck_wturret", "build_pck_wturret", undefined ); level.vox zmbvoxadd( "player", "general", "build_pck_wtrap", "build_pck_wtrap", undefined ); level.vox zmbvoxadd( "player", "general", "build_pck_wturbine", "build_pck_wturbine", undefined ); level.vox zmbvoxadd( "player", "general", "build_pck_wjetgun", "build_pck_wjetgun", undefined ); level.vox zmbvoxadd( "player", "general", "build_plc_shield", "build_plc_shield", undefined ); level.vox zmbvoxadd( "player", "general", "build_plc_turret", "build_plc_turret", undefined ); level.vox zmbvoxadd( "player", "general", "build_plc_trap", "build_plc_trap", undefined ); level.vox zmbvoxadd( "player", "general", "build_plc_turbine", "build_plc_turbine", undefined ); level.vox zmbvoxadd( "player", "general", "build_pickup", "build_pickup", undefined ); level.vox zmbvoxadd( "player", "general", "build_swap", "build_swap", undefined ); level.vox zmbvoxadd( "player", "general", "build_add", "build_add", undefined ); level.vox zmbvoxadd( "player", "general", "build_final", "build_final", undefined ); level.vox zmbvoxadd( "player", "general", "intro", "power_off", undefined ); level.vox zmbvoxadd( "player", "power", "power_on", "power_on", undefined ); level.vox zmbvoxadd( "player", "power", "power_core", "power_core", undefined ); level.vox zmbvoxadd( "player", "general", "reboard", "rebuild_boards", undefined ); level.vox zmbvoxadd( "player", "general", "upgrade", "find_secret", undefined ); level.vox zmbvoxadd( "player", "general", "map_out_bus", "map_out_bus", undefined ); level.vox zmbvoxadd( "player", "general", "map_out_tunnel", "map_out_tunnel", undefined ); level.vox zmbvoxadd( "player", "general", "map_out_diner", "map_out_diner", undefined ); level.vox zmbvoxadd( "player", "general", "map_out_1forest", "map_out_1forest", undefined ); level.vox zmbvoxadd( "player", "general", "map_out_farm", "map_out_farm", undefined ); level.vox zmbvoxadd( "player", "general", "map_out_corn", "map_out_corn", undefined ); level.vox zmbvoxadd( "player", "general", "map_out_power", "map_out_power", undefined ); level.vox zmbvoxadd( "player", "general", "map_out_2forest", "map_out_2forest", undefined ); level.vox zmbvoxadd( "player", "general", "map_out_town", "map_out_town", undefined ); level.vox zmbvoxadd( "player", "general", "map_out_bridge", "map_out_bridge", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_bus1", "map_in_bus1", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_tunnel1", "map_in_tunnel1", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_diner1", "map_in_diner1", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_1forest1", "map_in_1forest1", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_farm1", "map_in_farm1", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_corn1", "map_in_corn1", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_power1", "map_in_power1", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_2forest1", "map_in_2forest1", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_town1", "map_in_town1", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_bridge1", "map_in_bridge1", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_bus2", "map_in_bus2", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_tunnel2", "map_in_tunnel2", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_diner2", "map_in_diner2", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_1forest2", "map_in_1forest2", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_farm2", "map_in_farm2", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_corn2", "map_in_corn2", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_power2", "map_in_power2", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_2forest2", "map_in_2forest2", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_town2", "map_in_town2", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_bridge2", "map_in_bridge2", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_bus3", "map_in_bus3", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_tunnel3", "map_in_tunnel3", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_diner3", "map_in_diner3", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_1forest3", "map_in_1forest3", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_farm3", "map_in_farm3", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_corn3", "map_in_corn3", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_power3", "map_in_power3", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_2forest3", "map_in_2forest3", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_town3", "map_in_town3", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_bridge3", "map_in_bridge3", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_bus4", "map_in_bus4", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_tunnel4", "map_in_tunnel4", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_diner4", "map_in_diner4", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_1forest4", "map_in_1forest4", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_farm4", "map_in_farm4", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_corn4", "map_in_corn4", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_power4", "map_in_power4", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_2forest4", "map_in_2forest4", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_town4", "map_in_town4", undefined ); level.vox zmbvoxadd( "player", "general", "map_in_bridge4", "map_in_bridge4", undefined ); level.vox zmbvoxadd( "player", "general", "bus_zom_roof", "bus_zom_roof", undefined ); level.vox zmbvoxadd( "player", "general", "bus_zom_climb", "bus_zom_climb", undefined ); level.vox zmbvoxadd( "player", "general", "bus_zom_atk", "bus_zom_atk", undefined ); level.vox zmbvoxadd( "player", "general", "bus_zom_ent", "bus_zom_ent", undefined ); level.vox zmbvoxadd( "player", "general", "bus_zom_none", "bus_zom_none", undefined ); level.vox zmbvoxadd( "player", "general", "bus_zom_chase", "bus_zom_chase", undefined ); level.vox zmbvoxadd( "player", "general", "bus_stop", "bus_stop", undefined ); level.vox zmbvoxadd( "player", "general", "bus_ride", "bus_ride", undefined ); level.vox zmbvoxadd( "player", "general", "avogadro_reveal", "avogadro_reveal", undefined ); level.vox zmbvoxadd( "player", "general", "avogadro_above", "avogadro_above", undefined ); level.vox zmbvoxadd( "player", "general", "avogadro_storm", "avogadro_storm", undefined ); level.vox zmbvoxadd( "player", "general", "avogadro_arrive", "avogadro_arrive", undefined ); level.vox zmbvoxadd( "player", "general", "avogadro_attack", "avogadro_attack", "resp_avogadro_attack" ); level.vox zmbvoxadd( "player", "general", "hr_resp_avogadro_attack", "hr_resp_avogadro_attack", undefined ); level.vox zmbvoxadd( "player", "general", "riv_resp_avogadro_attack", "riv_resp_avogadro_attack", undefined ); level.vox zmbvoxadd( "player", "general", "avogadro_wound", "avogadro_wound", undefined ); level.vox zmbvoxadd( "player", "general", "avogadro_flee", "avogadro_flee", undefined ); level.vox zmbvoxadd( "player", "general", "avogadro_onbus", "avogadro_onbus", undefined ); level.vox zmbvoxadd( "player", "general", "avogadro_atkbus", "avogadro_atkbus", undefined ); level.vox zmbvoxadd( "player", "general", "avogadro_stopbus", "avogadro_stopbus", undefined ); level.vox zmbvoxadd( "player", "general", "exert_death", "exert_death_high", undefined ); level.vox zmbvoxadd( "player", "kill", "jetgun_kill", "kill_jet", undefined ); level.vox zmbvoxadd( "player", "general", "pap_wait", "pap_wait", undefined ); level.vox zmbvoxadd( "player", "general", "pap_wait2", "pap_wait2", undefined ); level.vox zmbvoxadd( "player", "general", "pap_arm", "pap_arm", undefined ); level.vox zmbvoxadd( "player", "general", "pap_arm2", "pap_arm2", undefined ); level.vox zmbvoxadd( "player", "general", "pap_hint", "pap_hint", undefined ); maps/mp/zombies/_zm_audio_announcer::createvox( "first_drop", "first_drop" ); level.station_pa_vox = []; for ( i = 0; i < 10; i++ ) { level.station_pa_vox[ i ] = "vox_stat_pa_generic_" + i; } level.survivor_vox = []; for ( i = 0; i < 5; i++ ) { level.survivor_vox[ i ] = "vox_radi_distress_message_" + i; } } transit_audio_custom_response_line( player, index, category, type ) //checked matches cerberus output { russman = 0; samuel = 1; misty = 2; marlton = 3; switch( player.characterindex ) { case 0: level maps/mp/zombies/_zm_audio::setup_hero_rival( player, samuel, marlton, category, type ); break; case 1: level maps/mp/zombies/_zm_audio::setup_hero_rival( player, russman, misty, category, type ); break; case 2: level maps/mp/zombies/_zm_audio::setup_hero_rival( player, marlton, samuel, category, type ); break; case 3: level maps/mp/zombies/_zm_audio::setup_hero_rival( player, misty, russman, category, type ); break; } return; } powerup_intro_vox( powerup ) //checked partially changed to match cerberus output see info.md No. 2 { say_intro = 0; players = get_players(); foreach ( player in players ) { if ( player maps/mp/zombies/_zm_stats::get_global_stat( "POWERUP_INTRO_PLAYED" ) == 1 ) { } else { player maps/mp/zombies/_zm_stats::set_global_stat( "powerup_intro_played", 1 ); say_intro = 1; } } level.powerup_intro_vox = undefined; powerup_name = powerup.powerup_name; powerup thread maps/mp/zombies/_zm_powerups::powerup_delete(); powerup notify( "powerup_grabbed" ); if ( !say_intro ) { level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( powerup_name ); level.powerup_vo_available = undefined; return; } flag_clear( "zombie_drop_powerups" ); level.powerup_intro = 1; org = spawn( "script_origin", get_players()[ 0 ].origin ); org playsoundwithnotify( "vox_zmba_first_drop_0", "first_powerup_intro_done" ); org waittill( "first_powerup_intro_done" ); level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( powerup_name ); org delete(); flag_set( "zombie_drop_powerups" ); level.powerup_intro = 0; level.powerup_vo_available = undefined; } powerup_vo_available() //checked matches cerberus output used is_true instead { wait 0.1; if ( is_true( level.powerup_intro ) ) { return 0; } return 1; } buildable_build_custom_func( stub ) //checked changed to match cerberus output { buildable = stub.buildablezone; counter = 0; for ( i = 0; i < buildable.pieces.size; i++ ) { if ( isDefined( buildable.pieces[ i ].built ) && buildable.pieces[ i ].built ) { counter++; } } if ( counter == ( buildable.pieces.size - 1 ) ) { self thread do_player_general_vox( "general", "build_final", 45 ); } } bank_pap_hint() //checked changed to match cerberus output { volume = getent( "zone_ban", "targetname" ); while ( 1 ) { players = get_players(); foreach ( player in players ) { if ( player istouching( volume ) && is_player_valid( player ) ) { player thread do_player_general_vox( "general", "pap_hint", undefined, 100 ); return; } } wait 10; } } power_pap_hint() //checked changed to match cerberus output { trigs = getentarray( "local_electric_door", "script_noteworthy" ); lab_trig = undefined; foreach ( trig in trigs ) { if ( isDefined( trig.target ) && trig.target == "lab_secret_hatch" ) { lab_trig = trig; } } if ( !isDefined( lab_trig ) ) { return; } while ( 1 ) { lab_trig waittill( "trigger", who ); if ( isplayer( who ) && is_player_valid( who ) ) { who thread do_player_general_vox( "general", "pap_hint", undefined, 100 ); return; } } } transit_buildable_vo_override( name, from_world ) //checked matches cerberus output used is_true instead { if ( is_true( level.power_cycled ) && name == "turbine" && !is_true( from_world ) && !flag( "power_on" ) ) { level.maxis_turbine_pickedup_vox = 1; level thread maps/mp/zm_transit_sq::maxissay( "vox_maxi_build_complete_0", ( -6848, 5056, 56 ) ); return 1; } return 0; } sndsetupmusiceasteregg() //checked changed to match cerberus output { origins = []; origins[ 0 ] = ( -7562, 4570, -19 ); origins[ 1 ] = ( 7914, -6557, 269 ); origins[ 2 ] = ( 1864, -7, -19 ); level.meteor_counter = 0; level.music_override = 0; for ( i = 0; i < origins.size; i++ ) { level thread sndmusicegg( origins[ i ] ); } } sndmusicegg( bear_origin ) //checked matches cerberus output { temp_ent = spawn( "script_origin", bear_origin ); temp_ent playloopsound( "zmb_meteor_loop" ); temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::waitfor_override ); temp_ent waittill( "main_music_egg_hit", player ); temp_ent stoploopsound( 1 ); player playsound( "zmb_meteor_activate" ); level.meteor_counter += 1; if ( level.meteor_counter == 3 ) { level thread sndplaymusicegg( player, temp_ent ); } else { wait 1.5; temp_ent delete(); } } waitfor_override() //checked matches cerberus output used is_true instead { if ( is_true( level.music_override ) ) { return 0; } return 1; } sndplaymusicegg( player, ent ) //checked matches cerberus output { wait 1; ent playsound( "mus_zmb_secret_song" ); level waittill( "end_game" ); ent stopsounds(); wait 0.05; ent delete(); } sndtoiletflush() //checked matches cerberus output { toilettrig = spawn( "trigger_radius", ( 11182, 7584, -596 ), 0, 150, 5 ); toilettrig sethintstring( "" ); toilettrig setcursorhint( "HINT_NOICON" ); while ( 1 ) { toilettrig waittill( "trigger", who ); if ( who is_player() ) { toilettrig playsound( "zmb_toilet_flush" ); wait 5; } wait 0.1; } } transit_special_weapon_magicbox_check( weapon ) //checked matches cerberus output used is_true instead { if ( is_true( level.raygun2_included ) ) { if ( weapon == "ray_gun_zm" ) { if ( self has_weapon_or_upgrade( "raygun_mark2_zm" ) || maps/mp/zombies/_zm_tombstone::is_weapon_available_in_tombstone( "raygun_mark2_zm", self ) ) { return 0; } } if ( weapon == "raygun_mark2_zm" ) { if ( self has_weapon_or_upgrade( "ray_gun_zm" ) || maps/mp/zombies/_zm_tombstone::is_weapon_available_in_tombstone( "ray_gun_zm", self ) ) { return 0; } if ( randomint( 100 ) >= 33 ) { return 0; } } } return 1; }