# Doors

### Door

```
entity {
	entityDef interact_doors_cultist_wide_01_1 {
	inherit = "interact/doors/cultist_wide_01";
	class = "idInteractable_Obstacle";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		soundOffset = {
			z = 1.5;
		}
		whenToSave = "SGT_CHECKPOINT";
		flags = {
			skipRenderModelReplication = true;
		}
		dormancy = {
			distance = 100;
			playerDistance = 120;
			playerRearwardDistance = 80;
		}
		fxDecl = "gameplay/invasion/demon_door";
		interaction = {
			initalState = "interactables/door/normal/locked";
			interactionGraph = "interactables/door";
			stateData = {
				num = 1;
				item[0] = {
					stateName = "interactables/door/normal/locked";
				}
			}
			transitionData = {
				num = 12;
				item[0] = {
					transitionName = "needs_key_To_unlocked_open";
					additionalWaitMs = 1000;
					playSoundOnTransition = "play_doomhunter_widedoor_open_unlocked";
				}
				item[1] = {
					transitionName = "unlocked_To_unlocked_open";
					playSoundOnTransition = "play_doomhunter_widedoor_open";
				}
				item[2] = {
					transitionName = "unlocked_open_To_unlocked";
					playSoundOnTransition = "play_doomhunter_widedoor_close";
				}
				item[3] = {
					transitionName = "locked_To_locked_open";
					playSoundOnTransition = "play_doomhunter_widedoor_open";
				}
				item[4] = {
					transitionName = "locked_open_To_locked";
					playSoundOnTransition = "play_doomhunter_widedoor_close";
				}
				item[5] = {
					transitionName = "unlocked_open_To_locked";
					playSoundOnTransition = "play_doomhunter_widedoor_close";
				}
				item[6] = {
					transitionName = "locked_To_locked_fail";
				}
				item[7] = {
					transitionName = "needs_key_To_needs_key_failed";
				}
				item[8] = {
					transitionName = "locked_To_unlocked";
				}
				item[9] = {
					transitionName = "unlocked_To_locked";
				}
				item[10] = {
					transitionName = "start_locked_To_locked";
				}
				item[11] = {
					transitionName = "locked_To_stay_open";
				}
			}
			animWebDecl = "animweb/interact/doors/cultist_wide_01";
		}
		touchData = {
			retouchDelaySec = 0.5;
			triggerDef = "trigger/interact/cultist_wide_01_square";
		}
		stateColors = {
			num = 8;
			item[0] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_red";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_red";
					}
				}
				state = "start_locked";
			}
			item[1] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_red";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_red";
					}
				}
				state = "activate_to_unlock";
			}
			item[2] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_red";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_red";
					}
				}
				state = "locked";
			}
			item[3] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_red";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_red";
					}
				}
				state = "needs_key";
			}
			item[4] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_green";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_blue";
					}
				}
				state = "unlocked";
			}
			item[5] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_green";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_blue";
					}
				}
				state = "locked_open";
			}
			item[6] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_green";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_blue";
					}
				}
				state = "unlocked_open";
			}
			item[7] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_green";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_blue";
					}
				}
				state = "stay_open";
			}
		}
		collisionPieces = {
			num = 4;
			item[0] = {
				meshName = "collision";
				jointName = "collision_joint";
			}
			item[1] = {
				meshName = "collision1";
				jointName = "collision1_joint";
			}
			item[2] = {
				meshName = "collision2";
				jointName = "collision2_joint";
			}
			item[3] = {
				meshName = "collision3";
				jointName = "collision3_joint";
			}
		}
		blockerBoundsExpandDists = {
			x = 0.100000001;
			y = 1;
			z = 0.100000001;
		}
		stateObstacleData = {
			num = 16;
			item[0] = {
				statePath = "interactables/door/normal/activate_to_unlock";
				obstacleReachability = true;
			}
			item[1] = {
				statePath = "interactables/door/normal/locked";
				obstacleReachability = true;
			}
			item[2] = {
				statePath = "interactables/door/normal/locked_fail";
				obstacleReachability = true;
			}
			item[3] = {
				statePath = "interactables/door/normal/locked_open";
			}
			item[4] = {
				statePath = "interactables/door/normal/needs_key";
				obstacleReachability = true;
			}
			item[5] = {
				statePath = "interactables/door/normal/needs_key_failed";
				obstacleReachability = true;
			}
			item[6] = {
				statePath = "interactables/door/normal/start_locked";
				obstacleReachability = true;
			}
			item[7] = {
				statePath = "interactables/door/normal/stay_open";
			}
			item[8] = {
				statePath = "interactables/door/normal/unlocked";
			}
			item[9] = {
				statePath = "interactables/door/normal/unlocked_open";
			}
			item[10] = {
				statePath = "interactables/door/oneWay/oneWay_closed";
				obstacleReachability = true;
			}
			item[11] = {
				statePath = "interactables/door/oneWay/oneWay_lock_fail";
				obstacleReachability = true;
			}
			item[12] = {
				statePath = "interactables/door/oneWay/oneWay_locked";
				obstacleReachability = true;
			}
			item[13] = {
				statePath = "interactables/door/oneWay/oneWay_open";
			}
			item[14] = {
				statePath = "interactables/door/oneWay/oneWay_open_fail";
				obstacleReachability = true;
			}
			item[15] = {
				statePath = "interactables/door/oneWay/oneWay_opened";
			}
		}
		dissolveDistance = 20;
		renderModelInfo = {
			model = "md6def/objects/doors/cultist_wide_door_01/cultist_wide_door_01.md6";
		}
		guiData = {
			swfFile = "swf/worldgui/guientity/1_interact_lock_default.swf";
			scale = 0.0850000009;
			initialCommands = {
				num = 1;
				item[0] = {
					commandType = "SPRITE_HIDE";
				}
			}
			positionOffset = {
				x = 8;
				z = 25;
			}
		}
		umbraVisBlocking = "CAN_BLOCK";
		umbraSoundBlocking = "CAN_BLOCK";
		demonPlayerRenderModel = "art/objects/door/demon/cultist_wideDoor_01_demon.lwo";
		spawnPosition = {
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		demonPlayersPassThrough = false;
	}
}
}

```

### Open

```
entity {
	entityDef interact_doors_cultist_wide_01_1_open {
	inherit = "target/interact_action_door";
	class = "idTarget_InteractionAction";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		renderModelInfo = {
			materialRemap = {
				num = 1;
				item[0] = {
					to = "art/tile/common/nodraw";
				}
			}
		}
		actionFilter = "interactionAction/door";
		spawnPosition = {
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		targets = {
			num = 1;
			item[0] = "interact_doors_cultist_wide_01_1";
		}
		action = "IA_DOOR_OPEN";
	}
}
}

```

### Replication

```
entity {
	entityDef interact_doors_cultist_wide_01_1_timeline {
	inherit = "target/timeline";
	class = "idTarget_Timeline";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		componentTimeLine = {
			entityEvents = {
				num = 2;
				item[0] = {
					entity = "interact_doors_cultist_wide_01_1_relay";
					events = {
						num = 1;
						item[0] = {
							eventTime = 250;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
				item[1] = {
					entity = "interact_doors_cultist_wide_01_1_remove";
					events = {
						num = 1;
						item[0] = {
							eventTime = 2500;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
			}
		}
		allowClientsToStart = true;
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}

```

```
entity {
	entityDef interact_doors_cultist_wide_01_1_relay {
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "interact_doors_cultist_wide_01_1_open";
		}
		repeat = true;
	}
}
}

```

```
entity {
	entityDef interact_doors_cultist_wide_01_1_remove {
	inherit = "target/remove";
	class = "idTarget_Remove";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "interact_doors_cultist_wide_01_1";
		}
		repeat = true;
	}
}
}

```