Antennas describe a series of springy vertices rendered with a bitmap texture. As an object widget, they attach to model markers. They are only used on the Warthog and Scorpion vehicles, but during Halo's development they were also present on the player biped.
Bitmaps
The bitmap referenced by an antenna is a sprite sheet that can contain multiple sequences. Different parts of the antenna can set the sequence index to change their texture. Only the first sprite in a sequence is used, so sequences need just a single sprite.
Sprites should be oriented horizontally and will be centered at the base of each antenna segment (vertex) with twice the defined length. This means the left half of each sprite should be filled with dummy space to avoid overlapping the previous segment.
Physics
Antennas are modeled as a series of up to 20 fixed-length segments with springy joints. Points at the end of each segment use point_
Disabling gravity results in the antenna coming to rest in a straight line rather than bending under gravity. Similarly, changing the global strength of gravity with physics_set_gravity
will also result in the antenna bending more or less.
Although it's not understood exactly how density is used, low air-like densities result in flowing tail-like antenna behaviour while high densities result in stiffer but more energetic ones.
Antennas with point_
Simulation culling
Antenna physics are only simulated when on-screen (based on the bounding sphere of the object they're a widget on). This is particularly noticeable when a low but non-zero spring strength coefficient is used, since the antenna will wiggle when reappearing on screen before coming to a rest state again.
Limits
The game state has limited space for simulated antennas (12 in legacy, 24 in H1A). Extra antennas in the map will not be rendered.
Antenna segments should not be 0-length or else an assertion will be hit:
EXCEPTION halt in c:\mcc\main\h1\code\h1a2\sources\render\render_sprite.c,#446: mode==_build_sprite_normal || (untransformed_direction && magnitude_squared3d(untransformed_direction))
Related HaloScript
Function/global | Type | |
---|---|---|
Renders green or red markers wherever point_ Red markers indicate point_ | Global |
Structure and fields
Field | Type | Comments | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
attachment marker name | TagString | The model marker name this antenna is attached to. If the model has multiple markers with this name, only one will have the antenna. If this field is blank or the marker does not exist then the antenna will be attached to the object's root node. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bitmaps | TagDependency : bitmap | A sprites bitmap containing segments of the antenna. The bitmap can contain multiple sequences which you can index with the vertex sequence index to give different parts of the antenna different appearances. The alpha channel controls transparency of the segment. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
physics | TagDependency : point_physics | Physics settings for each vertex of the antenna. See antenna physics. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spring strength coefficient | float | Strength of the spring. Larger values make the string stronger, with | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
falloff pixels | float | Assumed to be the on-screen size where antennas begin to fade out, but doesn't seem to work correctly. In H1A and CE, setting this value over 100 results in the antenna being partially faded out but not by distance/on screen size. This may have worked on Xbox but testing is needed to confirm that. You should set this value to | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cutoff pixels | float | Assumed to be the on-screen size where antennas fade out entirely or transition to low-LOD line primitives. Again, this doesn't seem to work correctly in H1A and MCC. You should set this to | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
length | float | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
vertices | Block | Vertices represent the start of each antenna segment and define the segment's springiness, angle, length, and appearance. The first element in the block is the part of the antenna attached to the marker and the final element is where it ends. This block must have at least 2 elements (or the antenna won't exist), and can contain up to 20. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Acknowledgements
Thanks to the following individuals for their research or contributions to this topic:
- Conscars (Tag field testing)
- Kavawuvi (Invader tag definitions)
- MosesOfEgypt (Tag structure research)