This page is incomplete! You can contribute information using GitHub issues or pull requests.
Machines are used for objects like doors, elevators, light bridges, and the engine covers in The Maw. These objects have open and closed states and the unique capability of conveying bipeds which stand upon them while they move.
The states of machines are not synchronized over Halo's multiplayer netcode, so it is not adviseable to include them in multiplayer maps unless they are automatic doors (which are just based on biped proximinity) or use a synchronization workaround.
Automatic doors
Rather than scripting every door to open and close by trigger volumes, you can use the automatic door feature. If a placed device_
If the tag's automatic activation radius is non-zero, it controls the distance where the door opens. Otherwise the object bounding radius is used instead. Up to 16 collideable bipeds (not vehicles) will be retrieved from the activation radius then checked for the following conditions:
- Is alive,
- Doesn't have the cannot open doors automatically flag set,
- Is not an ally to the player standing on the forward side of a one-sided door in the fully closed position.
If one of these bipeds passes all the conditions, the device group desired position will be set to 1 which opens the door.
This opening process is not actually performed every tick, but once every 4 ticks as an optimization, with different doors being offset to different ticks so they're not all checked at the same time. When an automatic door is triggered to open, its time spent open counter is set to -3 ticks.
Once a door has remained in the fully open position for its door open time, its desired position is set to closed. This is checked every tick.
Structure and fields
Field | Type | Comments | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
machine type | enum | |||||||||||||
| ||||||||||||||
machine flags | bitfield | |||||||||||||
| ||||||||||||||
door open time | float | Determines how long a door will stay open for once it has reached a fully open position, even once eligible bipeds have left the activation radius. | ||||||||||||
collision response | enum | |||||||||||||
| ||||||||||||||
elevator node | uint16 | |||||||||||||
door open time ticks | uint32 | This value is derived from door open time and is compared at runtime to the number of ticks a door-typed machine has been fully open. If the door has been open for more ticks than this value, its desired device group position will be set to 0 causing the door to begin closing. |
Acknowledgements
Thanks to the following individuals for their research or contributions to this topic:
- Kavawuvi (Invader tag definitions)
- kornman00 (Automatic door behaviour)
- MosesOfEgypt (Tag structure research)