# idTargetableProxyHandler & idTarget_SmartAIProxy

<p class="callout info">The **idTargetableProxyHandler** entity defines the render model and proxy list for Meathook Nodes.</p>

<p class="callout info">The **idTarget\_SmartAIProxy** entity defines the grapple position for Meathook Nodes.</p>

<p class="callout warning">Requires assets from either a TAG2 map, besides Dark Lord (**e5m1\_spear**, **e5m2\_earth**, **e5m3\_hell**), or one of the last two Horde Mode maps (**e6m2\_earth\_horde**, **e6m3\_mcity\_horde**)  
</p>

### idTargetableProxyHandler

```
entity {
	entityDef meathook_node_handler_1 {
	inherit = "target/proxy_handler";
	class = "idTargetableProxyHandler";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		cooldownDuration = 5000; // defines the cooldown; scrubs set this to 0
		connectSound = "play_meat_hook_lock_in";
		ambientLoopSound = "play_meathook_sphere_amb_loop";
		oneSidedActiveModel = "art/kit/gameplay/meathook_traversal_a.lwo";
		oneSidedInactiveModel = "art/kit/gameplay/meathook_traversal_b.lwo";
		allSidedActiveModel = "art/kit/gameplay/meathook_traversal_c.lwo";
		allSidedInactiveModel = "art/kit/gameplay/meathook_traversal_d.lwo";
		oneSidedActiveFXModel = "art/kit/gameplay/meathook_traversal_a_rings.lwo";
		oneSidedInactiveFXModel = "art/kit/gameplay/meathook_traversal_b_rings.lwo";
		allSidedActiveFXModel = "art/kit/gameplay/meathook_traversal_c_rings.lwo";
		allSidedInactiveFXModel = "art/kit/gameplay/meathook_traversal_d_rings.lwo";
		renderModelInfo = {
			model = "art/kit/gameplay/meatHook_traversal_placeholder.lwo";
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		clipModelInfo = {
			clipModelName = "maps/prefabs/gameplay/meathook_target/target_proxy_handler_2";
		}
		proxyList = {
			num = 1;
			item[0] = {
				proxyEntity = "meathook_node_1"; // the idTarget_SmartAIProxy entity
				proxyTagName = "meathook_node_handler_1"; // this entity
			}
		}
		isOmnidirectional = true; // setting this to true makes the node appear on both sides
		spawnPosition = { // be sure to change the spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 1;
					y = 0;
					z = 0;
				}
			}
		}
	}
}
}
```

### idTarget\_SmartAIProxy

```
entity {
	entityDef meathook_node_1 {
	inherit = "target/ai_proxy_meathook";
	class = "idTarget_SmartAIProxy";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		targetingDecl = "target_aiproxy_meathook";
		distanceOverride = 25; // how far the Meathook connection is
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		spawnPosition = { // make this identical to the idTargetableProxyHandler entity
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 1;
					y = 0;
					z = 0;
				}
			}
		}
	}
}
}
```