#include clientscripts\_music; #include clientscripts\_utility; main() { level.zombiemode = true; level.swimmingFeature = false; clientscripts\_load::main(); clientscripts\_footsteps::SetAIFootstepPrepend( "fly_step_zombie_"); thread clientscripts\_audio::audio_init(0); level._zombieCBFunc = clientscripts\_zombietron::on_zombie_spawn; level._playerCBFunc = clientscripts\_zombietron::on_player_spawn; init_client_flags(); init_client_flag_callbacks(); OnPlayerConnect_Callback( ::on_player_connect ); level._customVehicleCBFunc = ::vehicle_spawned_callback; level.bomb_model = "zombie_bomb"; level.head_model = "char_ger_ansel_head"; level._ZOMBIE_GIB_PIECE_INDEX_ALL = 0; level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_ARM = 1; level._ZOMBIE_GIB_PIECE_INDEX_LEFT_ARM = 2; level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_LEG = 3; level._ZOMBIE_GIB_PIECE_INDEX_LEFT_LEG = 4; level._ZOMBIE_GIB_PIECE_INDEX_HEAD = 5; level._ZOMBIE_GIB_PIECE_INDEX_GUTS = 6; level._gib_overload_func = ::gib_handler; level._gibEventCBFunc = ::on_gib_event; } vehicle_spawned_callback( localClientNum ) { if( self.vehicletype == "tank_t55_mini" ) { self thread collisionHandler( localClientNum ); self thread jump_landing_thread( localClientNum ); } } collisionHandler( localClientNum ) { self endon( "entityshutdown" ); while( 1 ) { self waittill( "veh_collision", hip, hitn, hit_intensity ); driver_local_client = self GetLocalClientDriver(); if( IsDefined( driver_local_client ) ) { player = getlocalplayer( driver_local_client ); if( IsDefined( player ) ) { if( hit_intensity > 15 ) { player PlayRumbleOnEntity( driver_local_client, "damage_heavy" ); } else { player PlayRumbleOnEntity( driver_local_client, "damage_light" ); } } } } } jump_landing_thread( localClientNum ) { self endon( "entityshutdown" ); while( 1 ) { self waittill( "veh_landed" ); driver_local_client = self GetLocalClientDriver(); if( IsDefined( driver_local_client ) ) { player = getlocalplayer( driver_local_client ); if( IsDefined( player ) ) { player PlayRumbleOnEntity( driver_local_client, "damage_heavy" ); } } } } lightning_flash( intensity_low, intensity_high, lightningdir ) { lightningintensity = RandomFloatRange( intensity_low, intensity_high ); lightningexposure = 2; SetSavedDvar( "r_lightTweakSunLight", lightningintensity ); SetSavedDvar( "r_lightTweakSunDirection", lightningdir ); SetDvar( "r_exposureValue", lightningexposure ); } lighting_flash_cycle( intensity_low, intensity_high, min_flash_time, max_flash_time, flash_wait_time_min, flash_wait_time_max ) { flash_time = RandomFloatRange(min_flash_time, max_flash_time); oldlight = GetDvarFloat( "r_lightTweakSunLight" ); oldsundir = GetDvarVector( "r_lightTweakSunDirection" ); oldexposure = GetDvarFloat( "r_exposureValue" ); lightningdir = ( RandomFloatRange(-60, -20), RandomFloatRange(0, 360) , 0 ); while( flash_time > 0.0 ) { lightning_flash(intensity_low, intensity_high, lightningdir); PlaySound( 0, "amb_thunder_clap", (0,0,0) ); flash_wait_time = RandomFloatRange(flash_wait_time_min, flash_wait_time_max); wait( flash_wait_time ); SetSavedDvar( "r_lightTweakSunLight", oldlight ); SetSavedDvar( "r_lightTweakSunDirection", oldsundir ); SetDvar( "r_exposureValue", oldexposure ); flash_time = flash_time - flash_wait_time; } } lightning(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } if( set ) { intensity_low = 10; intensity_high = 30; min_flash_time = 0.3; max_flash_time = 0.7; flash_wait_time_min = 0.05; flash_wait_time_max = 0.1; level thread lighting_flash_cycle( intensity_low, intensity_high, min_flash_time, max_flash_time, flash_wait_time_min, flash_wait_time_max ); } } show_scores(localClientNum, set, newEnt) { if( localClientNum != 0 ) { return; } if (isPC()) { return; } if( set ) { ShowScores(localClientNum); } else { HideScores(localClientNum); } } zombie_helicopter_kill(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } if(set) { temp = (0,0,270); if(IsDefined(level._heli_pilot_ent)) { temp = self.origin - level._heli_pilot_ent.origin; } temp = VectorNormalize( temp ); launch_dir = VectorCross( temp, (0,0,1) ); launch_dir = VectorNormalize( launch_dir ); launch_dir *= 100; self LaunchRagdoll( launch_dir ); PlaySound( 0, "zmb_ragdoll_launched", self.origin ); origin = self GetTagOrigin( "j_head" ); angles = self GetTagAngles( "j_head" ); forcex = RandomFloatRange( -200, 200 ); forcey = RandomFloatRange( -200, 200 ); forcez = RandomFloatRange( 1300, 3100 ); camera_angles = GetDvarVector( "player_TopDownCamAngles" ); launchDir = AnglesToForward( camera_angles ); launchDir = launchDir * forcez * -1; launchDir += ( forcex, forcey, 0 ); contactPoint = origin + ( RandomFloatRange( -1, 1 ), RandomFloatRange( -1, 1 ), RandomFloatRange( -1, 1 ) ) * 5; CreateDynEntAndLaunch( 0, level.head_model, origin, angles, contactPoint, launchDir, level._effect["animscript_gibtrail_fx"] ); } } heli_pilot(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } if(set) { level._heli_pilot_ent = self; } else { level._heli_pilot_ent = undefined; } } init_client_flag_callbacks() { register_clientflag_callback("actor", level._ZT_ACTOR_CF_GIB_DEATH_P1, ::gib_death_1); register_clientflag_callback("actor", level._ZT_ACTOR_CF_GIB_DEATH_P2, ::gib_death_2); register_clientflag_callback("actor", level._ZT_ACTOR_CF_GIB_DEATH_P3, ::gib_death_3); register_clientflag_callback("actor", level._ZT_ACTOR_CF_GIB_DEATH_P4, ::gib_death_4); register_clientflag_callback("actor", level._ZT_ACTOR_CF_BLOOD, ::zombie_blood); register_clientflag_callback("actor", level._ZT_ACTOR_CF_LAUNCH_AND_BURN, ::zombie_launch_and_burn); register_clientflag_callback("actor", level._ZT_ACTOR_CF_KILLED_BY_HELI, ::zombie_helicopter_kill); register_clientflag_callback("scriptmover", level._ZT_SCRIPTMOVER_CF_SACRED_COW, ::sacred_cow); register_clientflag_callback("scriptmover", level._ZT_SCRIPTMOVER_CF_POWERUP, ::powerup); register_clientflag_callback("scriptmover", level._ZT_SCRIPTMOVER_CF_ELEC_TRAP, ::electrap_handler); register_clientflag_callback("player", level._ZT_PLAYER_CF_UPDATEPROFILE, ::update_player_profile); register_clientflag_callback("player", level._ZT_PLAYER_CF_HELI_PILOT, ::heli_pilot); register_clientflag_callback("player", level._ZT_PLAYER_CF_START_SMART_BOMB, ::smartbomb_handler); register_clientflag_callback("player", level._ZT_PLAYER_CF_LIGHTNING, ::lightning); register_clientflag_callback("player", level._ZT_PLAYER_CF_SHOW_SCORES, ::show_scores); } update_player_profile(localClientNum, set, newEnt) { PrintLn("*** Update player profile. ***"); UpdateGamerProfile(localClientNum); } randomize_array( array ) { for( i = 0; i < array.size; i++ ) { j = RandomInt( array.size ); temp = array[i]; array[i] = array[j]; array[j] = temp; } return array; } flame_death_fx() { self endon( "entityshutdown" ); if (IsDefined(self.is_on_fire) && self.is_on_fire ) { return; } self.is_on_fire = true; if( IsDefined( level._effect ) && IsDefined( level._effect["character_fire_death_torso"] ) ) { PlayFxOnTag(0, level._effect["character_fire_death_torso"], self, "J_SpineLower" ); } if( IsDefined( level._effect ) && IsDefined( level._effect["character_fire_death_sm"] ) ) { wait 1; tagArray = []; tagArray[0] = "J_Elbow_LE"; tagArray[1] = "J_Elbow_RI"; tagArray[2] = "J_Knee_RI"; tagArray[3] = "J_Knee_LE"; tagArray = randomize_array( tagArray ); PlayFxOnTag( 0, level._effect["character_fire_death_sm"], self, tagArray[0] ); wait 1; tagArray[0] = "J_Wrist_RI"; tagArray[1] = "J_Wrist_LE"; tagArray[2] = "J_Ankle_RI"; tagArray[3] = "J_Ankle_LE"; tagArray = randomize_array( tagArray ); PlayFxOnTag( 0, level._effect["character_fire_death_sm"], self, tagArray[0] ); PlayFxOnTag( 0, level._effect["character_fire_death_sm"], self, tagArray[1] ); } } zombie_launch_and_burn(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } if(!set) { return; } if(!IsDefined(level._nukepoint)) { return; } dist_squared = DistanceSquared( self.origin, level._nukepoint ); if( dist_squared < 130 * 130 ) { self LaunchRagdoll( (0,0,270) ); } else if( dist_squared < 360 * 360 ) { dir = VectorNormalize( self.origin - level._nukepoint ); dir = dir * 100; dir = dir + (0,0,120); self LaunchRagdoll( dir ); } self thread flame_death_fx(); } smartbomb_handler(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } if(!set) { return; } if (IsDefined( self.tank )) { level._nukepoint = self.tank.origin; } else { level._nukepoint = self.origin; } origin = self.origin + (20,0,800); bomb = Spawn( 0, origin, "script_model" ); bomb SetModel( level.bomb_model ); bomb.angles = (90, 0, 0); bomb MoveTo( self.origin, 0.3, 0, 0 ); PlaySound( 0, "zmb_nuke_incoming", self.origin ); bomb waittill("movedone"); PlaySound( 0, "zmb_nuke_impact", self.origin ); PlayFX( 0, level._effect["bomb"], self.origin ); bomb Delete(); players = getlocalplayers(); for(i = 0; i < players.size; i ++) { players[i] EarthQuake( 1.0, 0.8, self.origin, 1000 ); } } trap_tear_down_monitor(parent) { self endon("done"); parent waittill("entityshutdown"); self notify("torn_down"); self Delete(); } fx_tear_down_monitor() { self waittill("entityshutdown"); if(IsDefined(self.fx)) { self.fx Delete(); self.fx = undefined; } if(IsDefined(self.fx2)) { self.fx2 Delete(); self.fx2 = undefined; } } electrap_loop_sound(parent) { self endon("torn_down"); self PlayLoopSound( "zmb_hazard_loop", .5 ); self waittill("deactivate"); self notify("done"); self stoploopsound(0.5); if(IsDefined(self.fx)) { self.fx Delete(); self.fx = undefined; } if(IsDefined(self.fx2)) { self.fx2 Delete(); self.fx2 = undefined; } self Delete(); } get_camera_launch_direction() { pos = GetDvarVector( "player_topDownCamCenterPos" ) + GetDvarVector( "player_topDownCamOffset" ); return VectorNormalize( pos - self.origin ); } gib_handler(type, locations) { if(type == "up") { up = get_camera_launch_direction(); self._gib_vel = up * RandomIntRange( 1400, 3500 ); } return false; } electrap_handler(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } self endon("entityshutdown"); if ( !isDefined(self.first_tickle) ) { self.first_tickle = 1; self thread fx_tear_down_monitor(); return; } if(set) { if ( isDefined(self.fx2) ) { self.fx2 Delete(); self.fx2 = SpawnFx( 0, level._effect["trap_red"], self.origin, 0,(1,0,0),(0,0,1) ); if ( isDefined(self.fx2) ) { triggerFx( self.fx2 ); } } wait 1; self.fx = SpawnFx( 0, level._effect["electric_trap"], self.origin + (0,0,100), 0 ); if ( isDefined(self.fx) ) { triggerFx( self.fx ); self.soundent = spawn(0, self.origin, "script_origin"); self.soundent thread electrap_loop_sound(self); } } else { if ( isDefined(self.fx) ) { self.fx Delete(); self.soundent notify("deactivate"); } if ( isDefined(self.fx2) ) { self.fx2 Delete(); } self.fx2 = SpawnFx( 0, level._effect["trap_green"], self.origin, 0,(1,0,0),(0,0,1) ); if ( isDefined(self.fx2) ) { triggerFx( self.fx2 ); } } } get_pickup_type_from_model(model) { ret = "NA"; switch(model) { case "zombietron_gold_brick": case "zombietron_gold_bricks": case "zombietron_gold_coin": case "zombietron_silver_brick": case "zombietron_silver_bricks": case "zombietron_silver_coin": case "zombie_z_money_icon": case "zombietron_ruby": case "zombietron_sapphire": case "zombietron_diamond": ret = "money"; break; case "c_usa_blackops_body1_fb": ret = "extra_life"; break; case "t5_veh_tank_t55_mini_static": ret = "tank"; break; case "t5_veh_helo_hind_mini": ret = "heli"; break; case "p_glo_barrel_metal_blue": ret = "spinning_blockers"; break; case "zombietron_electric_ball": ret = "tesla_blockers"; break; case "zombie_teddybear": ret = "stun_blockers"; break; case "anim_chicken": ret = "double_shot"; break; case "zombie_bomb": ret = "bomb"; break; case "zombietron_lightning_bolt": ret = "booster"; break; case "p_rus_boots": ret = "speed"; break; case "m2_flamethrower_zt": case "ray_gun_zt": case "weapon_usa_ray_gun": case "weapon_usa_flamethrower": case "m60_zt": case "minigun_zt": case "t5_weapon_carry_minigun_world": case "spas_zt": case "t5_weapon_spas_world": case "china_lake_zt": case "t5_weapon_ex41_world": case "rpg_zt": case "weapon_rpg7": ret = "weapon"; break; case "zombie_auto_turret": ret = "mini_turret"; break; case "weapon_zombie_monkey_bomb": case "weapon_zombie_monkey_bomb_zt": ret = "monkey"; break; } return(ret); } pickup_tear_down_monitor(parent) { self endon("done"); parent waittill("entityshutdown"); self notify("torn_down"); self stoploopsound(0.5); self Delete(); } pickup_loop_sound(parent, sound) { self endon("torn_down"); self thread pickup_tear_down_monitor(parent); self PlayLoopSound( sound, .5 ); self waittill("picked_up"); self notify("done"); self stoploopsound(0.5); self Delete(); } powerup(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } if(set) { play_sound = true; loop_sound = ""; switch(get_pickup_type_from_model(self.model)) { case "extra_life": case "extra_life_directed": loop_sound = "zmb_pickup_life_shimmer"; playfxontag (localClientNum, level._effect["powerup_on"], self, "tag_origin"); break; case "money": loop_sound = "zmb_pickup_money_shimmer"; model = self.model; if ( model == "zombietron_ruby" ) { PlayFxOnTag(localClientNum, level._effect["red_gem"], self, "tag_origin" ); } else if ( model == "zombietron_sapphire" ) { PlayFxOnTag(localClientNum, level._effect["blue_gem"], self, "tag_origin" ); } else if ( model == "zombietron_diamond" ) { PlayFxOnTag(localClientNum, level._effect["white_gem"], self, "tag_origin" ); } else if ( issubstr(self.model,"silver" ) ) { playfxontag (localClientNum, level._effect["powerup_on_silver"], self, "tag_origin"); } else { playfxontag (localClientNum, level._effect["powerup_on"], self, "tag_origin"); } break; case "speed": case "spinning_blockers": case "tesla_blockers": case "stun_blockers": case "bomb": case "booster": case "mini_turret": case "monkey": loop_sound = "zmb_pickup_powerup_shimmer"; break; case "double_shot": PlaySound(localClientNum, "zmb_dblshot_spawn", self.origin); loop_sound = "zmb_pickup_powerup_shimmer"; break; case "weapon": loop_sound = "zmb_pickup_weapon_shimmer"; break; case "tank": case "heli": loop_sound = "zmb_pickup_vehicle_shimmer"; break; default: PrintLn("Spawned " + self.model); play_sound = false; break; } if(play_sound) { PlaySound( localClientNum, "zmb_pickup_spawn", self.origin ); } if(loop_sound != "") { self.loopsound = spawn(0, self.origin, "script_origin"); self.loopsound thread pickup_loop_sound(self, loop_sound); } } else { if(IsDefined(self.loopsound)) { self.loopsound notify("picked_up"); } PlayFx( 0, level._effect["powerup_grabbed"], self.origin, AnglesToForward(self.angles) ); switch(get_pickup_type_from_model(self.model)) { case "extra_life": case "extra_life_directed": PlaySound( localClientNum, "zmb_pickup_life", self.origin ); break; case "money": PlaySound( localClientNum, "zmb_pickup_money", self.origin ); break; case "tank": case "heli": PlaySound( localClientNum, "zmb_pickup_vehicle", self.origin ); break; case "spinning_blockers": case "tesla_blockers": case "stun_blockers": case "double_shot": case "bomb": case "booster": case "speed": PlaySound( localClientNum, "zmb_pickup_powerup", self.origin ); break; case "weapon": case "mini_turret": case "monkey": PlaySound( localClientNum, "zmb_pickup_weapon", self.origin ); break; default: PrintLn("Grabbed " + self.model); break; } } } sacred_cow(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } self PlayLoopSound( "zmb_pickup_money_shimmer" ); playfxontag (localClientNum,level._effect["powerup_on"], self, "J_Ankle_LE"); playfxontag (localClientNum,level._effect["powerup_on"], self, "J_Ankle_RI"); playfxontag (localClientNum,level._effect["powerup_on"], self, "J_Wrist_LE"); playfxontag (localClientNum,level._effect["powerup_on"], self, "J_Wrist_RI"); playfxontag (localClientNum,level._effect["torch_light"], self, "J_Tail2"); } zombie_blood(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } if(set) { if(is_mature()) { PlayFX(localClientNum, level._effect["big_blood"], self.origin, AnglesToForward(self.angles) * -1); } } } gib_death(localClientNum, set, newEnt, player) { if(set) { if(is_mature()) { PlayFX( localClientNum, level._effect["gib_death"], self.origin, AnglesToForward(self.angles) ); } } } gib_death_1(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } gib_death(localClientNum, set, newEnt, 1); } gib_death_2(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } gib_death(localClientNum, set, newEnt, 2); } gib_death_3(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } gib_death(localClientNum, set, newEnt, 3); } gib_death_4(localClientNum, set, newEnt) { if(localClientNum != 0) { return; } gib_death(localClientNum, set, newEnt, 4); } init_client_flags() { level._ZT_ACTOR_CF_GIB_DEATH_P1 = 2; level._ZT_ACTOR_CF_GIB_DEATH_P2 = 3; level._ZT_ACTOR_CF_GIB_DEATH_P3 = 4; level._ZT_ACTOR_CF_GIB_DEATH_P4 = 5; level._ZT_ACTOR_CF_BLOOD = 6; level._ZT_ACTOR_CF_LAUNCH_AND_BURN = 7; level._ZT_ACTOR_CF_KILLED_BY_HELI = 8; level._ZT_SCRIPTMOVER_CF_SACRED_COW = 0; level._ZT_SCRIPTMOVER_CF_POWERUP = 1; level._ZT_SCRIPTMOVER_CF_ELEC_TRAP = 2; level._ZT_PLAYER_CF_UPDATEPROFILE = 10; level._ZT_PLAYER_CF_HELI_PILOT = 11; level._ZT_PLAYER_CF_LIGHTNING = 12; level._ZT_PLAYER_CF_SHOW_SCORES = 13; level._ZT_PLAYER_CF_START_SMART_BOMB = 14; } createZombieEyes(localClientNum) { if(isdefined(self._eyeArray)) { if(!isdefined(self._eyeArray[localClientNum])) { linkTag = "J_Eyeball_LE"; self._eyeArray[localClientNum] = PlayFxOnTag( localClientNum, level._effect["eye_glow"], self, linkTag ); } } } deleteZombieEyes(localClientNum) { if(isdefined(self._eyeArray)) { if(isdefined(self._eyeArray[localClientNum])) { DeleteFx( localClientNum, self._eyeArray[localClientNum] , true ); self._eyeArray[localClientNum] = undefined; } } } on_player_connect(localClientNum) { ForceGameModeMappings( localClientNum, "zombietron" ); } on_player_spawn(localClientNum) { ForceGameModeMappings( localClientNum, "zombietron" ); self mapshaderconstant( localClientNum, 0, "scriptVector0", 1.0, -1.0, 0.0, 0.0 ); } on_zombie_spawn(localClientNum) { if(!isdefined(self._eyeArray)) { self._eyeArray = []; } wait( 0.05 ); if( isDefined(self) && self haseyes()) { self createZombieEyes(localClientNum); } if ( isDefined(self) ) self mapshaderconstant( localClientNum, 0, "scriptVector0", -4.0, -1.0, 0.0, -1.0 ); } zombie_eye_callback(localClientNum, hasEyes) { players = GetLocalPlayers(); for ( i = 0; i < players.size; i++ ) { if ( hasEyes ) { self createZombieEyes( i ); } else { self deleteZombieEyes( i ); } } } mark_piece_gibbed( piece_index ) { if ( !isdefined( self.gibbed_pieces ) ) { self.gibbed_pieces = []; } self.gibbed_pieces[self.gibbed_pieces.size] = piece_index; } has_gibbed_piece( piece_index ) { if ( !isdefined( self.gibbed_pieces ) ) { return false; } for ( i = 0; i < self.gibbed_pieces.size; i++ ) { if ( self.gibbed_pieces[i] == piece_index ) { return true; } } return false; } do_gib_fx( tag ) { players = getlocalplayers(); for ( i = 0; i < players.size; i++ ) { PlayFxOnTag( i, level._effect["animscript_gib_fx"], self, tag ); } PlaySound( 0, "zmb_death_gibs", self gettagorigin( tag ) ); } do_gib( model, tag ) { start_pos = self gettagorigin( tag ); wait( 0.03 ); end_pos = self gettagorigin( tag ); if ( IsDefined( self._gib_vel ) ) { forward = self._gib_vel; self._gib_vel = undefined; } else { forward = VectorNormalize( end_pos - start_pos ); forward *= RandomIntRange( 600, 1000 ); forward += (0, 0, RandomIntRange( 400, 700 )); } CreateDynEntAndLaunch( 0, model, end_pos, self gettagangles(tag), start_pos, forward, level._effect["animscript_gibtrail_fx"], 1 ); self do_gib_fx( tag ); } on_gib_event( localClientNum, type, locations ) { if ( localClientNum != 0 ) { return; } if( !is_mature() ) { return; } if ( self._gib_def == -1 ) { return; } if ( IsDefined( level._gib_overload_func ) ) { PrintLn( "type " + type ); PrintLn( "loc size " + locations.size ); if ( self [[level._gib_overload_func]]( type, locations ) ) { return; } } for ( i = 0; i < locations.size; i++ ) { if ( IsDefined( self.gibbed ) && level._ZOMBIE_GIB_PIECE_INDEX_HEAD != locations[i] ) { continue; } switch( locations[i] ) { case 0: if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn1 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag1 ) ) { self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn1, level._gibbing_actor_models[self._gib_def].gibSpawnTag1 ); } if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn2 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag2 ) ) { self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn2, level._gibbing_actor_models[self._gib_def].gibSpawnTag2 ); } if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn3 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag3 ) ) { self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn3, level._gibbing_actor_models[self._gib_def].gibSpawnTag3 ); } if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn4 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag4 ) ) { self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn4, level._gibbing_actor_models[self._gib_def].gibSpawnTag4 ); } self thread do_gib_fx( "J_SpineLower" ); mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_ARM ); mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_LEFT_ARM ); mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_LEG ); mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_LEFT_LEG ); mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_HEAD ); break; case 1: if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn1 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag1 ) ) { self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn1, level._gibbing_actor_models[self._gib_def].gibSpawnTag1 ); } mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_ARM ); break; case 2: if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn2 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag2 ) ) { self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn2, level._gibbing_actor_models[self._gib_def].gibSpawnTag2 ); } mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_LEFT_ARM ); break; case 3: if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn3 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag3 ) ) { self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn3, level._gibbing_actor_models[self._gib_def].gibSpawnTag3 ); } mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_RIGHT_LEG ); break; case 4: if ( IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawn4 ) && IsDefined( level._gibbing_actor_models[self._gib_def].gibSpawnTag4 ) ) { self thread do_gib( level._gibbing_actor_models[self._gib_def].gibSpawn4, level._gibbing_actor_models[self._gib_def].gibSpawnTag4 ); } mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_LEFT_LEG ); break; case 5: mark_piece_gibbed( level._ZOMBIE_GIB_PIECE_INDEX_HEAD ); break; case 6: self thread do_gib_fx( "J_SpineLower" ); break; } } self.gibbed = true; }