Skip to main content

idAI2

idAI2's are the entities which are connected to spawn targets or spawn groups, and defines the specific enemy which will be spawned when called upon. Below is an example of the idAI2 for the Tier 1 Zombie enemy. 

}
entity {
	layers {
		"spawn_target_layer"
	}
	entityDef zombie_tier_1_1 {
	inherit = "ai/fodder/zombie_tier_1";
	class = "idAI2";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		highlightDecl = "glorykill_highlight";
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 0.400000006;
				y = 0.400000006;
				z = 1.5;
			}
		}
		dormancy = {
			delay = 30;
			distance = 19.5070019;
		}
		spawn_statIncreases = {
			num = 1;
			item[0] = {
				stat = "STAT_AI_SPAWNED";
				increase = 1;
			}
		}
		targetingDecl = "characters/zombie";
		actorConstants = {
			perception = {
				eyeOffset = {
					z = 1.63829994;
				}
				crouchedEyeOffset = {
					z = 0.609600008;
				}
			}
			actorSounds = {
				sndFootsteps = "footsteps/zombies/zombies_default";
				sndPainSmall = "player/pain/small";
				sndPainMedium = "player/pain/medium";
				sndPainLarge = "player/pain/large";
				sndRagdollStart = "play_zombie_death";
			}
			footstepEffectTable = "impacteffect/footsteps/ai_zombie";
			footstepEvents = "footstepevents/default";
			painInfo = {
				decayDelay = 1000;
				bucketMaxValue = 200;
				decayRate = 0;
			}
			bulletPenetrationData = {
				energyCostToPenetrate = 10;
				damageScaleToPenetrate = 1;
			}
			footstepEffectTable_Sprint = "impacteffect/footsteps/ai_zombie_sprint";
			footstepEffectTable_SlowWalk = "impacteffect/footsteps/ai_zombie";
			footstepEffectTable_CrouchWalk = "impacteffect/footsteps/ai_zombie";
			footstepEffectTable_Landing = "impacteffect/footsteps/ai_zombie_landing";
			footstepEffectTable_HeavyLanding = "impacteffect/footsteps/ai_zombie_landing";
			ledgeGrabEffectTable = "impacteffect/footsteps/ai_zombie";
			ledgeGrabEffectTable_Heavy = "impacteffect/footsteps/ai_zombie";
			ledgeGrabEffectTable_Friendly = "impacteffect/footsteps/ai_zombie";
			ledgeGrabEffectTable_FriendlyHeavy = "impacteffect/footsteps/ai_zombie";
		}
		actorEditable = {
			entityDamageComponent = {
				entityDamage = "entitydamage/ai/zombie/base";
			}
			injuredStates = {
				num = 1;
				item[0] = {
					name = "not_injured";
					damageGroupMaxGoreLevels = {
						num = 1;
						item[0] = {
							damageGroupName = "left_upper_leg";
							maxGoreLevel = "GORELEVEL_LIGHT_DAMAGE";
						}
					}
					allowIK = true;
					canUseAllTraversalsWhileInjured = true;
					canUseDownTraversalsWhileInjured = true;
				}
			}
			radiusDamageJoints = {
				num = 6;
				item[0] = "head_part01_md";
				item[1] = "spine_part01_md";
				item[2] = "arm_hand_lf";
				item[3] = "arm_hand_rt";
				item[4] = "leg_lower_lf";
				item[5] = "leg_lower_rt";
			}
		}
		factionName = "zombie_t1";
		mass = 18.1439991;
		lootable = false;
		lootDropComponent = {
			lootDropDataDecl = "ai/default_fodder";
		}
		pvpLootDropComponent = {
			lootDropDataDecl = "ai/default_fodder_pvp";
		}
		aiConstants = {
			components = {
				ptr = {
					ptr[12] = {
						componentDecl = "aicomponent/pathmanager/zombie";
					}
					ptr[14] = {
						componentDecl = "aicomponent/attack/base";
					}
				}
			}
			syncMelee = {
				msAfterAttackBeforeCanSync = 250;
				syncMeleeEntityDefs = {
					num = 2;
					item[0] = "syncmelee/zombie_tier1";
					item[1] = "syncmelee/zombie_tier1_3p";
				}
				syncGroups = {
					num = 1;
					item[0] = {
						syncGroupName = "";
						syncInteractions = {
							num = 21;
							item[0] = "syncdeath/playervsai/zombie_tier1/front_head";
							item[1] = "syncdeath/playervsai/zombie_tier1/back_lower";
							item[2] = "syncdeath/playervsai/zombie_tier1/above_back";
							item[3] = "syncdeath/playervsai/zombie_tier1/above_front";
							item[4] = "syncdeath/playervsai/zombie_tier1/back_head";
							item[5] = "syncdeath/playervsai/zombie_tier1/front_chest";
							item[6] = "syncdeath/playervsai/zombie_tier1/front_leftarm";
							item[7] = "syncdeath/playervsai/zombie_tier1/front_lower";
							item[8] = "syncdeath/playervsai/zombie_tier1/front_rightarm";
							item[9] = "syncdeath/playervsai/zombie_tier1/left_lower";
							item[10] = "syncdeath/playervsai/zombie_tier1/left_upper";
							item[11] = "syncdeath/playervsai/zombie_tier1/right_lower";
							item[12] = "syncdeath/playervsai/zombie_tier1/right_upper";
							item[13] = "syncdeath/playervsai/zombie_tier1/back_upper";
							item[14] = "syncdeath/playervsai/zombie_tier1/chainsaw/cut_front";
							item[15] = "syncdeath/playervsai/zombie_tier1/chainsaw/cut_back";
							item[16] = "syncdeath/playervsai/zombie_tier3/front_rightarm";
							item[17] = "syncdeath/playervsai/zombie_tier1/berserk/berserk_front_upper";
							item[18] = "syncdeath/playervsai/zombie_tier1/berserk/berserk_above_front";
							item[19] = "syncdeath/playervsai/zombie_tier1/crucbile/crucible_front";
							item[20] = "syncdeath/playervsai/zombie_tier1/crucbile/crucible_back";
						}
					}
				}
			}
			aiDeathStat = "STAT_ZOMBIE_KILLED";
			aiDeathCodex = "codex/hell/demon_zombie_earth";
		}
		aiEditable = {
			perception = {
				actorPerceptionRadius = 14;
				obstaclePerceptionRadius = 39;
				closePerceptionRadius = 5;
				eventPerceptionRadius = 14;
				senseUpdatesOnNonEnemies = false;
				fieldOfView = {
					value = 150;
				}
			}
			useTouchComponent = true;
			death = {
				ignoreDamageType = "DAMAGETYPE_EMP";
				fadeOutAfterDeathDelay_Seconds = {
					value = 3;
				}
				removeAfterFadeOutDelay_Seconds = {
					value = 3;
				}
				canBecomeInjured = true;
				explosionDecl = NULL;
				declTwitchPain = "twitchpain/zombie_t1";
			}
			movement = {
				wanderRadius = 19.5070019;
				useTraversalClassA = true;
				preferredCombatWalkState = "WALKSTATE_WALKING";
				allowWander = true;
			}
			cover = {
				coverRadius = 0;
			}
			behaviors = {
				decl = "behaviors/zombie/tier_1";
				declBehaviorEvents = "behaviorevents/default";
				attackGraph = "ai/zombie_tier_1";
			}
			vsAIDamageMask = "PAIN";
			spawnSettings = {
				entranceAnimPath = "animweb/characters/monsters/zombie_tier_1/spawn/teleport_entrance";
				spawnFXEntityDef = "fx/spawn_in_fodder";
				teleportDelayMS = 750;
			}
		}
		aiHealth = {
			components = {
				components[1] = {
					max = 0;
					regenInterval = {
						value = 0;
					}
				}
				components[0] = {
					max = 200;
					starting = 200;
				}
			}
		}
		goreComponent = {
			goreContainer = "ai/fodder/zombie_tier1";
		}
		afProperties = {
			impactEffectTable = "impacteffect/ragdoll/ragdoll_fodder";
			articulatedFigure = "characters/monsters/zombie_tier1";
		}
		renderModelInfo = {
			model = "md6def/characters/monsters/zombie_tier1/base/zombie_tier1_hell.md6";
			lightRigDecl = "zombie_tier1/zombie_tier1_default";
		}
		fxDecl = "character/zombie_tier1/zombie_tier1";
		walkIKDecl = "walkik/zombie";
		killerNames = {
			num = 1;
			item[0] = "#str_decl_damage_zombie_GHOST81206";
		}
		spawnPosition = {
			x = -1825.60095;
			y = 2194.30444;
			z = 44.5000305;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 5.36441803e-07;
					y = 0.99999994;
				}
				mat[1] = {
					x = -0.99999994;
					y = 5.36441803e-07;
				}
			}
		}
	}
}

The idAI2's in each level are usually named different, however you can easily find them by searching for the structure used in their inherit parameter.

Ex. "ai/ambient/spirit", ai/fodder/zombie_tier_1", "ai/heavy/arachnotron", "ai/superheavy/marauder"