This page is incomplete! You can contribute information using GitHub issues or pull requests.

Scenarios are the main "root" tag representing a playable level. It is essential for defining all gameplay elements such as AI encounters, item spawns, multiplayer flags, scenery locations, and other objects. It may reference one or multiple scenario_structure_bsp. Level scripts, cinematics, and trigger volumes are also defined in this tag.

A scenarios can be compiled with its dependencies into a map. Though Tool will also will include globals, tag collections, and some UI tags automatically, the majority of a map's tags are direct or indirect dependencies of the scenario.

Child scenarios

Bungie did not originally author singleplayer scenarios as a single tag, but used child scenarios to break them up into multiple tags. Child scenarios are other scenario tags referenced by a parent scenario. During map compilation, Tool merges child scenarios together.

It is impossible to recreate child scenarios though tag extraction tools like Refinery and invader-extract, which can only extract the single merged scenario. This can result in issues:

  • For c10's scenario, Sapien's limits are exceeded and a garbage collection message is spammed in the console
  • Camera points, cutscene flags, and recorded animations may be duplicated if the extraction tool did not deduplicate them. This will prevent scripts from compiling. When extracting with Refinery, use the "Rename duplicate camera points, ..." option to avoid this problem.

Encounters

...

Structure and fields

FieldTypeComments
don't useTagDependency: scenario_structure_bsp
  • Unused

Deprecated field, hidden in H1A Guerilla.

won't useTagDependency: scenario_structure_bsp
  • Unused

Deprecated field, hidden in H1A Guerilla.

can't useTagDependency: sky
  • Unused

Deprecated field, hidden in H1A Guerilla.

skiesBlock
  • HEK max count: 8

A list of skies available to clusters in this scenario's BSP(s). Level artists can select which sky is used using the special material names +sky0, +sky1, etc. See also: multiple skies. The first sky in this block also serves as the indoor sky.

FieldTypeComments
skyTagDependency: sky

A reference to a sky tag.

typeenum

Determines the type of map this scenario represents. This also causes map compilers like Tool and invader to apply certain hardcoded tag patches, but see below in H1A.

OptionValueComments
singleplayer0x0

The map is meant to be used for singleplayer and loaded with the map_name command. Cannot be played in multiplayer.

multiplayer0x1

The map is meant for multiplayer and can be loaded with sv_map.

user interface0x2

The map is meant to serve as ui.map for the game's main menu.

flagsbitfield
FlagMaskComments
cortana hack0x1
use demo ui0x2
color correction ntsc to srgb0x4
  • H1A only

Unused at this time.

do not apply bungie campaign tag patches0x8
  • H1A only

Opts out of hard-coded tag patches made to the pistol and plasma rifle for singleplayer scenarios. invader-build respects this when building maps targeting Custom Edition.

child scenariosBlock
  • HEK max count: 16
FieldTypeComments
child scenarioTagDependency: scenario

This scenario tag will be merged into the main scenario tag (and dereferenced) on map build.

local northfloat
predicted resourcesBlock
  • HEK max count: 1024
  • Cache only
FieldTypeComments
typeenum
OptionValueComments
bitmap0x0
sound0x1
resource indexuint16
taguint32
functionsBlock
  • Unused
  • HEK max count: 32

Marked deprecated in H1A and no longer appears in H1A tools.

editor scenario dataTagDataOffset
FieldTypeComments
sizeuint32
externaluint32
file offsetuint32
pointerptr64
commentsBlock
  • HEK max count: 1024
FieldTypeComments
positionPoint3D
FieldTypeComments
xfloat
yfloat
zfloat
commentTagDataOffset?
object namesBlock
  • HEK max count: 512
  • H1A-EK max count: 640
  • Read-only

Contains the names of all named objects in the scenario. These names are referenced by index for each type of placed object if that object is named. The console command debug_objects_names can display these. The maximum number of names was increased to 640 (from Halo 2) in H1A.

FieldTypeComments
nameTagString
object typeenum
  • Cache only
OptionValueComments
biped0x0
vehicle0x1
weapon0x2
equipment0x3
garbage0x4
projectile0x5
scenery0x6
device machine0x7
device control0x8
device light fixture0x9
placeholder0xA
sound scenery0xB
object indexuint16
  • Cache only
sceneryBlock
  • HEK max count: 2000
  • Max: 65535
FieldTypeComments
typeuint16
nameuint16
not placedbitfield
FlagMaskComments
automatically0x1

This object does not exist on map start and must be created by a script.

on easy0x2
  • Unused

Has no effect on spawning. Use scripts to control difficulty-specific spawning of objects.

on normal0x4
  • Unused
on hard0x8
  • Unused
desired permutationuint16
positionPoint3D?
rotationEuler3D
FieldTypeComments
yawfloat
pitchfloat
rollfloat
bsp indicesuint16
  • Cache only

unused in Halo PC; bitmask

scenery paletteBlock
  • HEK max count: 100
  • H1A-EK max count: 256
FieldTypeComments
nameTagDependency: scenery
  • Non-null
bipedsBlock
  • HEK max count: 128

Special-purpose bipeds placed in the map, typically used for scripted characters and cutscenes. AI should instead be spawned using encounters, since the actors will be properly difficulty-scaled. Although there is technically a very high limit to this block, unmodified Sapien only supports up to 128 bipeds being placed.

FieldTypeComments
typeuint16
nameuint16
not placedbitfield?
desired permutationuint16
positionPoint3D?
rotationEuler3D?
body vitality modifierfloat
  • Min: 0
flagsbitfield
FlagMaskComments
dead0x1
biped paletteBlock
  • HEK max count: 100
  • H1A-EK max count: 256
FieldTypeComments
nameTagDependency: biped
  • Non-null
vehiclesBlock
  • HEK max count: 80
  • H1A-EK max count: 256

Vehicle spawn points, which can be used for both singleplayer and multiplayer modes. Netgame flags are used in race mode. The limit was raised to 256 in H1A.

FieldTypeComments
typeuint16
nameuint16
not placedbitfield?
desired permutationuint16
positionPoint3D?
rotationEuler3D?
body vitalityfloat
  • Min: 0
  • Max: 1
flagsbitfield?
multiplayer team indexint8

Determines which team the vehicle belongs to for gametype settings. Index 0 is for red team, and index 1 is blue.

multiplayer spawn flagsbitfield
FlagMaskComments
slayer default0x1

The vehicle will spawn in Slayer when the gametype specifies default vehicle settings.

ctf default0x2

The vehicle will spawn in CTF when the gametype specifies default vehicle settings.

king default0x4

The vehicle will spawn in King of the Hill when the gametype specifies default vehicle settings.

oddball default0x8

The vehicle will spawn in Oddball when the gametype specifies default vehicle settings.

unused0x10
unused10x20
unused20x40
unused30x80
slayer allowed0x100

The vehicle spawn is permitted in Slayer when the gametype is using custom vehicle settings.

ctf allowed0x200

The vehicle spawn is permitted in CTF when the gametype is using custom vehicle settings.

king allowed0x400

The vehicle spawn is permitted in King of the Hill when the gametype is using custom vehicle settings.

oddball allowed0x800

The vehicle spawn is permitted in Oddball when the gametype is using custom vehicle settings.

unused40x1000
unused50x2000
unused60x4000
unused70x8000
vehicle paletteBlock
  • HEK max count: 100
  • H1A-EK max count: 256
FieldTypeComments
nameTagDependency: vehicle
  • Non-null
equipmentBlock
  • HEK max count: 256
  • Max: 65535
FieldTypeComments
typeuint16
nameuint16
not placedbitfield?
desired permutationuint16
positionPoint3D?
rotationEuler3D?
flagsbitfield
FlagMaskComments
initially at rest0x1
obsolete0x2
does accelerate0x4

Can be moved by impulses like explosions. Grenades with this flag can be detonated.

equipment paletteBlock
  • HEK max count: 100
  • H1A-EK max count: 256
FieldTypeComments
nameTagDependency: equipment
  • Non-null
weaponsBlock
  • HEK max count: 128
  • Max: 65535

Weapon placements for singeplayer. Multiplayer weapon spawns should be placed using netgame equipment instead.

FieldTypeComments
typeuint16
nameuint16
not placedbitfield?
desired permutationuint16
positionPoint3D?
rotationEuler3D?
rounds reserveduint16

does not include loaded rounds; cannot go above maximum rounds

rounds loadeduint16
flagsbitfield?
weapon paletteBlock
  • HEK max count: 100
  • H1A-EK max count: 256

The types of weapons that can be placed throughout a singeplayer scenario.

FieldTypeComments
nameTagDependency: weapon
  • Non-null
device groupsBlock
  • HEK max count: 128
  • Max: 65534
FieldTypeComments
nameTagString
  • Non-null
initial valuefloat
  • Min: 0
  • Max: 1
flagsbitfield
FlagMaskComments
can change only once0x1
machinesBlock
  • HEK max count: 400
  • Max: 65535
FieldTypeComments
typeuint16
nameuint16
not placedbitfield?
desired permutationuint16
positionPoint3D?
rotationEuler3D?
power groupuint16
position groupuint16
device flagsbitfield
FlagMaskComments
initially open0x1
initially off0x2
can change only once0x4
position reversed0x8
not usable from any side0x10
machine flagsbitfield
FlagMaskComments
does not operate automatically0x1

Disables the automatic door feature.

one sided0x2

Prevents allies from automatically opening a door when on its "forward" side. May have other effects.

never appears locked0x4
opened by melee attack0x8
machine paletteBlock
  • HEK max count: 100
  • H1A-EK max count: 256
FieldTypeComments
nameTagDependency: device_machine
  • Non-null
controlsBlock
  • HEK max count: 100
  • Max: 65535
FieldTypeComments
typeuint16
nameuint16
not placedbitfield?
desired permutationuint16
positionPoint3D?
rotationEuler3D?
power groupuint16
position groupuint16
device flagsbitfield?
control flagsbitfield
FlagMaskComments
usable from both sides0x1
no nameint16
control paletteBlock
  • HEK max count: 100
  • H1A-EK max count: 256
FieldTypeComments
nameTagDependency: device_control
  • Non-null
light fixturesBlock
  • HEK max count: 500
  • Max: 65535
FieldTypeComments
typeuint16
nameuint16
not placedbitfield?
desired permutationuint16
positionPoint3D?
rotationEuler3D?
bsp indicesuint16
  • Cache only

unused in Halo PC; bitmask

power groupuint16
position groupuint16
device flagsbitfield?
colorColorRGB
intensityfloat
falloff anglefloat
cutoff anglefloat
light fixture paletteBlock
  • HEK max count: 100
  • H1A-EK max count: 256
FieldTypeComments
nameTagDependency: device_light_fixture
  • Non-null
sound sceneryBlock
  • HEK max count: 256
  • Max: 65535
FieldTypeComments
typeuint16
nameuint16
not placedbitfield?
desired permutationuint16
positionPoint3D?
rotationEuler3D?
sound scenery paletteBlock
  • HEK max count: 100
  • H1A-EK max count: 256
FieldTypeComments
nameTagDependency: sound_scenery
  • Non-null
player starting profileBlock
  • HEK max count: 256
FieldTypeComments
nameTagString
starting health modifierfloat
  • Min: 0
  • Max: 1
starting shield modifierfloat
  • Min: 0
  • Max: 3

Values above 1 give Overshield layers.

primary weaponTagDependency: weapon
primary rounds loadeduint16
primary rounds reserveduint16

does not include loaded ammo; can go above maximum rounds

secondary weaponTagDependency: weapon
secondary rounds loadeduint16
secondary rounds reserveduint16

does not include loaded ammo; can go above maximum rounds

starting fragmentation grenade countint8
starting plasma grenade countint8
starting unknown grenade count 1int8
starting unknown grenade count 2int8
player starting locationsBlock
  • HEK max count: 256
FieldTypeComments
positionPoint3D?
facingfloat
team indexuint16
bsp indexuint16
  • Unused

The game does not read from this field. It is hidden in H1A Guerilla.

type 0enum
OptionValueComments
none0x0
ctf0x1
slayer0x2
oddball0x3
king of the hill0x4
race0x5
terminator0x6
stub0x7
ignored10x8
ignored20x9
ignored30xA
ignored40xB
all games0xC
all except ctf0xD
all except race ctf0xE
type 1enum?
type 2enum?
type 3enum?
trigger volumesBlock
  • HEK max count: 256
  • Max: 65534

Cuboid volumes which can be used in scripts to test for the presence an object: (volume_test_object "volume_name" <object>). An example use case is kill volumes.

FieldTypeComments
unknownuint16
nameTagString

The name of the volume which can be used in scripts.

float 1float
float 2float
float 3float
float 4float
float 5float
float 6float
float 7float
float 8float
float 9float
starting cornerPoint3D?

The 3D world-unit coordinates of one corner of the volume.

ending corner offsetPoint3D?

The offset distances from the starting corner to the opposite corner.

recorded animationsBlock
  • HEK max count: 1024
FieldTypeComments
nameTagString
versionint8
raw animation dataint8
unit control data versionint8
length of animationuint16
recorded animation event streamTagDataOffset?
netgame flagsBlock
  • HEK max count: 200

Multiplayer game mode markers like flag locations, oddball spawns, and teleporters.

FieldTypeComments
positionPoint3D?

The location in 3D space of this netgame flag.

facingfloat

The direction that the netgame flag faces (yaw). How this is used depends on the type of the flag.

typeenum

Determines which purpose this netgame flag serves.

OptionValueComments
ctf flag0x0

Two netgame flags should be placed for the CTF flags, with red team's flag using team index 0, and blue team 1. The facing value is not used to orient the flag pole (the skull faces in the world's +X direction). Be careful not to place the CTF flags on the wrong side of the map or it may prevent players from spawning.

ctf vehicle0x1

Unused.

oddball ball spawn0x2

Halo's oddball gamemode settings allow up to 16 simultaneous oddballs, so maps should include 16 unique oddball spawns. The oddball will spawn facing the world +X direction regardless of the facing field. Use team index 0 for the first oddball spawn, which should be in a team-neutral location of the map. Increment the team index for each subsequent oddball spawn (up to index 15). Halo will spawn balls at each flag in order of their index, so ensure flags are alternated across the map to prevent an unfair advantage to a team already occupying an area.

race track0x3

Determines the checkpoints for race game modes. The game supports up to 32 race track points. The team index should be numbered sequentially without gaps, starting at 0 in a team-neutral location. In Rally mode, checkpoints will be selected in random order.

race vehicle0x4

Used by Halo to spawn vehicles near players at the start of Race games, so you should place up to 16 of them near player spawn points used for Race. Team index is not used. The green marker handle should be pointed in the direction the vehicle will face forward.

vegas bank0x5

Unused.

teleport from0x6

Teleporter entry node. Team index determines the "channel" and links entry and exit nodes together.

teleport to0x7

Teleporter exit node. Team index determines the "channel" and links entry and exit nodes together. The difference in facing direction (yaw) between the entry and exit nodes is added to the player's yaw to determine their facing direction on exit. For example, if the entry node's facing is -90 degrees and the exit's is 0 degrees (a difference of +90 degrees), then a player entering the teleporter facing North would exit facing East.

hill flag0x8

Defines the boundaries of a King mode hill. Each hill should be placed as a series of 3-8 hill flags with the same team index, with index 0 being the default for non-moving hill mode. At least two hills should be placed to support moving hill mode. The facing field is not used.

usage iduint16

Also called team_index in legacy HEK. The meaning of this field depends on the netgame flag type, and is not necessarily about teams. See the above type descriptions for more details on usage.

weapon groupTagDependency: item_collection
  • Unused

Unused by the game. Hidden in H1A tools.

netgame equipmentBlock
  • HEK max count: 200
  • Processed during compile
FieldTypeComments
flagsbitfield
FlagMaskComments
levitate0x1
type 0enum?
type 1enum?
type 2enum?
type 3enum?
team indexuint16
spawn timeuint16
  • Unit: seconds

0 = use default spawn time in item_collection

unknown ffffffffuint32
  • Cache only: true

always 0xFFFFFFFF?

positionPoint3D?
facingfloat
item collectionTagDependency: item_collection
starting equipmentBlock
  • HEK max count: 200
FieldTypeComments
flagsbitfield
FlagMaskComments
no grenades0x1
plasma grenades0x2
type 0enum?
type 1enum?
type 2enum?
type 3enum?
item collection 1TagDependency: item_collection
item collection 2TagDependency: item_collection
item collection 3TagDependency: item_collection
item collection 4TagDependency: item_collection
item collection 5TagDependency: item_collection
item collection 6TagDependency: item_collection
bsp switch trigger volumesBlock
  • HEK max count: 256
  • Cache only
  • Expert mode only
FieldTypeComments
trigger volumeuint16
sourceuint16

The source BSP, stored as an index into the scenario BSPs block.

destinationuint16

The destination BSP, stored as an index into the scenario BSPs block.

unknownuint16
decalsBlock
  • HEK max count: 65536
FieldTypeComments
decal typeuint16
yawint8
pitchint8
positionPoint3D?
decal paletteBlock
  • HEK max count: 128
FieldTypeComments
referenceTagDependency: decal
detail object collection paletteBlock
  • HEK max count: 32
FieldTypeComments
referenceTagDependency: detail_object_collection
actor paletteBlock
  • HEK max count: 64
FieldTypeComments
referenceTagDependency: actor_variant
encountersBlock
  • HEK max count: 128
FieldTypeComments
nameTagString
flagsbitfield
FlagMaskComments
not initially created0x1
respawn enabled0x2
initially blind0x4
initially deaf0x8
initially braindead0x10
3d firing positions0x20
manual bsp index specified0x40
team indexenum
OptionValueComments
default by unit0x0

Uses the default team defined in the unit's biped tag.

player0x1
human0x2
covenant0x3
flood0x4
sentinel0x5
unused60x6
unused70x7
unused80x8
unused90x9
oneint16
  • Cache only
search behaviorenum
OptionValueComments
normal0x0
never0x1
tenacious0x2
manual bsp indexuint16
respawn delayBounds
  • Unit: seconds
FieldTypeComments
minfloat
maxfloat
precomputed bsp indexuint16
  • Cache only
squadsBlock
  • HEK max count: 64
FieldTypeComments
nameTagString
actor typeuint16
platoonuint16
initial stateenum

The squad's or unit's behaviour when initially placed.

OptionValueComments
none0x0

Retain behaviour previously defined. Used for starting locations, or empty squads meant for migration.

sleeping0x1

Actors will only be alerted by sounds or physical contact, and will use sleeping animations if they have any.

alert0x2

Actors will stand still and look forward.

moving repeat same position0x3

These and the following behaviours use move positions defined in squad data to determine where to move. Use casual walking animations if applicable.

moving loop0x4
moving loop back and forth0x5
moving loop randomly0x6
moving randomly0x7
guarding0x8

Choose one guard firing position and move there, remaining alert afterward.

guarding at guard position0x9

Randomly move between guard firing positions, using running animations.

searching0xA

Randomly move between search firing positions, using searching walking animations.

fleeing0xB

Randomly move between firing positions, using fleeing animations.

return stateenum?

The squad's or unit's behaviour when it has been alerted but has since completely lost track of any living enemies.

flagsbitfield
FlagMaskComments
unused0x1
never search0x2
start timer immediately0x4
no timer delay forever0x8
magic sight after timer0x10
automatic migration0x20
unique leader typeenum
OptionValueComments
normal0x0
none0x1
random0x2
sgt johnson0x3
sgt lehto0x4
maneuver to squaduint16

What squad to switch to when maneuvering is triggered, whether by platoon conditions or by a script.

squad delay timefloat
attackingbitfield

Which firing positions to use when shooting at enemies. Actors will further discriminate between firing positions based on cover provided, proximity of allies or foes, etc.

FlagMaskComments
a0x1
b0x2
c0x4
d0x8
e0x10
f0x20
g0x40
h0x80
i0x100
j0x200
k0x400
l0x800
m0x1000
n0x2000
o0x4000
p0x8000
q0x10000
r0x20000
s0x40000
t0x80000
u0x100000
v0x200000
w0x400000
x0x800000
y0x1000000
z0x2000000
attacking searchbitfield?

Which firing positions to use when looking for a target that's broken line of sight with the squad.

attacking guardbitfield?

Which firing positions to use for the inital/return states "guarding" or "guarding at guard position".

defendingbitfield?

As above, but used in the defending state.

defending searchbitfield?
defending guardbitfield?
pursuingbitfield?

While game code does reference these, it's not known how and when they're used.

normal diff countuint16

How many actors to spawn on Easy and Normal.

insane diff countuint16

How many actors to spawn on Legendary. Heroic uses the average of this and the previous value.

major upgradeenum

Along with difficulty level, influences how many actors in the squad will spawn as their major variants instead.

OptionValueComments
normal0x0
few0x1
many0x2
none0x3
all0x4
respawn min actorsuint16
respawn max actorsuint16
respawn totaluint16
respawn delayBounds?
  • Unit: seconds
move positionsBlock
  • HEK max count: 64

Used for actor initial and return states, eg as patrol routes.

FieldTypeComments
positionPoint3D?
facingfloat
weightfloat
timeBounds?
  • Unit: seconds
animationuint16
sequence idint8
cluster indexuint16
  • Cache only
surface indexuint32
  • Cache only
starting locationsBlock
  • HEK max count: 32

Squads need at least one valid starting position for units to spawn. If there are more units than valid locations, they will be reused.

FieldTypeComments
positionPoint3D?
facingfloat
cluster indexuint16
  • Cache only
sequence idint8
flagsbitfield
FlagMaskComments
required0x1
return stateenum?
initial stateenum?
actor typeuint16
command listuint16
platoonsBlock
  • HEK max count: 32
FieldTypeComments
nameTagString
flagsbitfield
FlagMaskComments
flee when maneuvering0x1
say advancing when maneuver0x2
start in defending state0x4
change attacking defending state whenenum

Strength is the fraction of total HP across all members of the platoon.

OptionValueComments
never0x0
75 strength0x1
50 strength0x2
25 strength0x3
anybody dead0x4
25 dead0x5
50 dead0x6
75 dead0x7
all but one dead0x8
all dead0x9
happens touint16
maneuver whenenum?
happens to 1uint16
firing positionsBlock
  • HEK max count: 512
  • Processed during compile
FieldTypeComments
positionPoint3D?
group indexenum
OptionValueComments
a0x0
b0x1
c0x2
d0x3
e0x4
f0x5
g0x6
h0x7
i0x8
j0x9
k0xA
l0xB
m0xC
n0xD
o0xE
p0xF
q0x10
r0x11
s0x12
t0x13
u0x14
v0x15
w0x16
x0x17
y0x18
z0x19
cluster indexuint16
  • Cache only
surface indexuint32
  • Cache only
player starting locationsBlock?
  • HEK max count: 256
command listsBlock
  • HEK max count: 256

Sets of predefined actions for actors to take upon being spawned.

FieldTypeComments
nameTagString
flagsbitfield
FlagMaskComments
allow initiative0x1
allow targeting0x2
disable looking0x4
disable communication0x8
disable falling damage0x10
manual bsp index0x20
manual bsp indexuint16
precomputed bsp indexuint16
  • Cache only
commandsBlock
  • HEK max count: 64
  • Max: 65534
FieldTypeComments
atom typeenum
OptionValueComments
pause0x0
go to0x1
go to and face0x2
move in direction0x3
look0x4
animation mode0x5
crouch0x6
shoot0x7
grenade0x8
vehicle0x9
running jump0xA
targeted jump0xB
script0xC
animate0xD
recording0xE
action0xF
vocalize0x10
targeting0x11
initiative0x12
wait0x13
loop0x14
die0x15
move immediate0x16
look random0x17
look player0x18
look object0x19
set radius0x1A
teleport0x1B
atom modifierint16
parameter1float
parameter2float
point 1uint16
point 2uint16
animationuint16
scriptuint16
recordinguint16
commanduint16
object nameuint16
pointsBlock
  • HEK max count: 64
  • Max: 65534
FieldTypeComments
positionPoint3D?
surface indexuint32
  • Cache only
ai animation referencesBlock
  • HEK max count: 128
FieldTypeComments
animation nameTagString
animation graphTagDependency: model_animations
ai script referencesBlock
  • HEK max count: 128
FieldTypeComments
script nameTagString
ai recording referencesBlock
  • HEK max count: 128
FieldTypeComments
recording nameTagString
ai conversationsBlock
  • HEK max count: 128
FieldTypeComments
nameTagString
flagsbitfield
FlagMaskComments
stop if death0x1
stop if damaged0x2
stop if visible enemy0x4
stop if alerted to enemy0x8
player must be visible0x10
stop other actions0x20
keep trying to play0x40
player must be looking0x80
trigger distancefloat
  • Unit: seconds
run to player distfloat
  • Unit: seconds
participantsBlock
  • HEK max count: 8
FieldTypeComments
flagsbitfield
FlagMaskComments
optional0x1
has alternate0x2
is alternate0x4
selection typeenum
OptionValueComments
friendly actor0x0
disembodied0x1
in player s vehicle0x2
not in a vehicle0x3
prefer sergeant0x4
any actor0x5
radio unit0x6
radio sergeant0x7
actor typeenum
OptionValueComments
elite0x0

Uses the elite actor type definition.

jackal0x1

Uses the jackal actor type definition.

grunt0x2

Uses the grunt actor type definition.

hunter0x3

Uses the hunter actor type definition.

engineer0x4

Uses the engineer actor type definition.

assassin0x5

Uses the elite actor type definition (duplicate).

player0x6

Uses the marine actor type definition (duplicate).

marine0x7

Uses the marine actor type definition.

crew0x8

Uses the crew actor type definition.

combat form0x9

Uses the flood actor type definition.

infection form0xA

Uses the infection actor type definition.

carrier form0xB

Uses the flood carrier actor type definition.

monitor0xC

Uses the sentinel actor type definition (duplicate).

sentinel0xD

Uses the sentinel actor type definition.

none0xE

Uses the grunt actor type definition.

mounted weapon0xF

Uses the mounted_weapon actor type definition.

use this objectuint16
set new nameuint16
variant numbersuint16[6]
  • Cache only

Determines which kind of variant gets a given line. By default, this matches by tag path (bisenti = 2, fitzgerald/jenkins = 4, aussie = 5, mendoza = 6, sarge/johnson = 100, sarge2/lehto = 101, everything else = 0, null = 65535)

encounter nameTagString
encounter indexuint32
  • Cache only
linesBlock
  • HEK max count: 32
FieldTypeComments
flagsbitfield
FlagMaskComments
addressee look at speaker0x1
everyone look at speaker0x2
everyone look at addressee0x4
wait after until told to advance0x8
wait until speaker nearby0x10
wait until everyone nearby0x20
participantuint16
addresseeenum
OptionValueComments
none0x0
player0x1
participant0x2
addressee participantuint16
line delay timefloat
variant 1TagDependency: sound
variant 2TagDependency: sound
variant 3TagDependency: sound
variant 4TagDependency: sound
variant 5TagDependency: sound
variant 6TagDependency: sound
script syntax dataTagDataOffset?
  • HEK max count: 19001
  • H1A-EK max count: SHORT_MAX

Stores the compiled syntax node data for scripts.

script string dataTagDataOffset?
  • HEK max size: 256kb
  • H1A-EK max size: 800kb

Stores strings used by scripts.

scriptsBlock
  • HEK max count: 512
  • H1A-EK max count: 1024
  • Read-only
  • Expert mode only
  • Read-only
FieldTypeComments
nameTagString
script typeenum
OptionValueComments
startup0x0
dormant0x1
continuous0x2
static0x3
stub0x4
return typeenum
OptionValueComments
unparsed0x0
special form0x1
function name0x2
passthrough0x3
void0x4
boolean0x5
real0x6
short0x7
long0x8
string0x9
script0xA
trigger volume0xB
cutscene flag0xC
cutscene camera point0xD
cutscene title0xE
cutscene recording0xF
device group0x10
ai0x11
ai command list0x12
starting profile0x13
conversation0x14
navpoint0x15
hud message0x16
object list0x17
sound0x18
effect0x19
damage0x1A
looping sound0x1B
animation graph0x1C
actor variant0x1D
damage effect0x1E
object definition0x1F
game difficulty0x20
team0x21
ai default state0x22
actor type0x23
hud corner0x24
object0x25
unit0x26
vehicle0x27
weapon0x28
device0x29
scenery0x2A
object name0x2B
unit name0x2C
vehicle name0x2D
weapon name0x2E
device name0x2F
scenery name0x30
root expression indexint32
globalsBlock
  • HEK max count: 128
  • H1A-EK max count: 512
  • Read-only
  • Expert mode only
  • Read-only
FieldTypeComments
nameTagString
typeenum?
initialization expression indexint32
referencesBlock
  • HEK max count: 256
  • H1A-EK max count: 512
  • Read-only
  • Expert mode only

Stores tag references used by compiled level scripts. In source form, scripts use tag paths but for runtime those paths are compiled to references here.

  • Read-only
FieldTypeComments
referenceTagDependency: (any)
source filesBlock
  • HEK max count: 8
  • HEK max size: 256 KiB
  • H1A-EK max count: 16
  • H1A-EK max size: 1 MiB
  • Non-cached
  • Volatile
  • Read-only
  • Read-only
FieldTypeComments
nameTagString
sourceTagDataOffset?
cutscene flagsBlock
  • HEK max count: 512
FieldTypeComments
unknownuint32
  • Cache only
nameTagString
positionPoint3D?
facingEuler2D
FieldTypeComments
yawfloat

Rotation to the left or right around the Z (vertical) axis.

pitchfloat

Rotation up or down.

cutscene camera pointsBlock
  • HEK max count: 512
FieldTypeComments
unknownuint32
  • Cache only
nameTagString
positionPoint3D?
orientationEuler3D?
field of viewfloat
cutscene titlesBlock
  • HEK max count: 64
  • Processed during compile
FieldTypeComments
unknownuint32
  • Cache only
nameTagString
text boundsRectangle2D
FieldTypeComments
topint16
leftint16
bottomint16
rightint16
string indexuint16
text styleenum

Sets the title text style. This field is hidden in HEK Guerilla, but visible in H1A Guerilla.

OptionValueComments
plain0x0
bold0x1
italic0x2
condense0x3
underline0x4
justificationenum
OptionValueComments
left0x0
right0x1
center0x2
text flagsbitfield

Positioning flags for the title. This field is hidden in HEK Guerilla, but visible in H1A Guerilla.

FlagMaskComments
wrap horizontally0x1
wrap vertically0x2
center vertically0x4
bottom justify0x8
text colorColorARGBInt

RGB Color with alpha, with 8-bit color depth per channel (0-255)

FieldTypeComments
alphauint8
reduint8
greenuint8
blueuint8
shadow colorColorARGBInt?
fade in timefloat
up timefloat
fade out timefloat
custom object namesTagDependency: unicode_string_list
ingame help textTagDependency: unicode_string_list
hud messagesTagDependency: hud_message_text
structure bspsBlock
  • HEK max count: 32
  • Max: 16

The list of BSPs belonging to this scenario that can be switched between. Multiplayer scenarios typically have just one, while singleplayer scenarios often have multiple. This block also contains information used during map loading.

FieldTypeComments
bsp startuint32
  • Cache only
bsp sizeuint32
  • Cache only
bsp addressuint32
  • Cache only
structure bspTagDependency: scenario_structure_bsp

Acknowledgements

Thanks to the following individuals for their research or contributions to this topic:

  • Jakey (Sharing knowledge on child scenarios)
  • Kavawuvi (Invader tag definitions)
  • Masterz1337 (Encounters vs bipeds)
  • MosesOfEgypt (Tag structure research)