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.

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

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

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;
				}
			}
		}
	}
}



Custom AI

TheidAI2's can be edited in order to make custom AI. Values such as EntityDamage, LootDropComponent, and SpawnSettings can be swapped out between different idAI2's for a desired change, and others such as aiHealth and all the values in eachaiEditable levelcan arebe usuallyedited namedto differently,change howeverhow a demon functions entirely. 

In this zombie idai2 for example, you can easilyswap find them by searching forout the structure"LootDropComponent" usedparameter inwith theirthat inheritof parameter.

the

Ex.maykr "ai/ambient/spirit",drone. ai/fodder/zombie_tier_1",The "ai/heavy/arachnotron",result "ai/superheavy/marauder"will be Tier 1 Zombies which will drop Maykr Drone lootdrops when headshot.