Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Conformance Matrix

This chapter classifies the contracts in this book. It distinguishes behavior shared by the promoted profiles, explicit profile variants, dimensions supplied by the selected game data, unresolved behavior, and behavior outside the current target.

The classifications are:

ClassificationMeaning
CommonThe stated contract applies to all promoted profiles.
Profile variantThe profile selects a stated alternative.
Game dataThe format and interpretation are fixed, but counts, names, sizes, or values come from the selected game.
PartialSome observable behavior is specified, but the listed gap prevents a complete claim for that domain.
Outside targetNo compatibility claim is made for this behavior.

An unlisted difference must not be inferred from a version-number similarity.

The common core applies to profiles 2.089, 2.230, 2.272, 2.411, 2.440, 2.917, 2.936, 3.002.086, 3.002.102, and 3.002.149. The two-column tables compare 2.936 and 3.002.149, while separate tables select the other promoted variants.

Common behavioral core

These contracts apply to every promoted profile unless a profile-variant row below says otherwise:

DomainContract
Logic payloadsCode-length framing, message table, message XOR decoding, control-flow markers, conditions 0x00..0x12, and shared action semantics.
Runtime valuesUnsigned byte variables, packed flags, 40-byte strings, parsed words, inventory locations, object selectors, and cycle-visible state transitions.
PicturesExpanded command stream, prepare/overlay/show lifecycle, visual and priority/control channels, line/fill/pattern raster rules, and terminator behavior.
ViewsExpanded view/loop/cel structure, row-run decoding, transparency, mirroring, baseline placement, and priority composition.
ObjectsLifecycle, placement, cadence, movement, collision, priority/control acceptance, cel cycling, draw partitions, and refresh ordering.
Input and textEvent records, parser normalization and matching, mapped keys, modal input, text geometry, font-input boundary, inventory selection, and menu construction.
Rooms and replayRoom-switch state changes, top-level re-entry, replay-pair language, checkpoints, and replay-without-rerecording.
SoundResource event structure, per-channel countdown scheduling, terminators, tone/divisor output, attenuation command output, completion flags, and stop behavior.

Profile variants

Resource and bytecode variants

Domain2.9363.002.149
Resource directoryFour split family directories. Any entry with first-byte high nibble 0xf is absent.One combined prefixed directory, with split-directory fallback. Only ff ff ff is absent.
Volume recordFive-byte header; payload stored directly.Seven-byte header; direct, dictionary-expanded, or picture-nibble-expanded payload.
Action range0x00..0xaf.0x00..0xb5.
Extra actionsNone.0xb1 sets menu gate; 0xb5 clears release gate; 0xb0, 0xb2, 0xb3, and 0xb4 consume operands without another effect.
Condition range0x00..0x12.0x00..0x12.

Runtime and presentation variants

Domain2.9363.002.149
Script key-map capacity39 entries.49 entries.
Release-event gate action 0xadIncrement modulo 256.Set to one.
Menu interaction gateNo separate gate.Action 0xb1 selects whether a pending request may enter modal interaction.
Input-width actions 0xa3/0xa4Enable and clear the fixed width override.No effect.
Immediate room aliasesNone.None in the base MH2 build; the Gold Rush build maps 0x7e, 0x7f, and 0x80 to 0x49.
Direction-selected loopsFour-or-more-loop table applies without f20.Exactly four loops always use the table; more than four require f20.

Persistence variants

Domain2.9363.002.149
Save envelope31-byte description plus five u16le length-prefixed blocks.Same envelope.
Block layoutAll five observed game blocks are mapped in the persistence chapter.All five observed Gold Rush blocks are mapped in the persistence chapter.
Block transformNo transform for block 3.Block 3 is XOR-transformed with the specified repeating Avis Durgan key.
Binary save interchange statusDefined for the mapped game/profile dimensions; reserved bytes use canonical initialization and byte preservation.Defined for the mapped Gold Rush/profile dimensions; reserved bytes use canonical initialization and byte preservation.

2.089 variant selection

Domain2.089 behavior
Resource containerSplit direct resources; inventory metadata is stored expanded.
Action and condition rangesActions 0x00..0x9a; conditions 0x00..0x12.
Exit and menu actions0x86 is an unconditional zero-operand exit; 0x9b and later are unavailable.
Position and compositionPosition actions remove old drawn state before updating the saved position. The earlier partition uses object-number order; the later partition uses drawing-key order.
Picture commandsDispatch 0xf0..0xf8; no pattern-command slots.
Show picturePresent and mark shown without clearing f15 or closing an active text window.
Direction-selected loopsEvaluate every eligible post-logic pass, without a cadence gate; exactly four loops use the four-loop table.
String and parser profileSix string slots; exact-count word matching without the 0x270f tail terminator.
Object distance and target motionStore wrapped low-byte distance; defer the first target direction/completion calculation.
Movement-clear actions0x4d clears direction but not autonomous mode; 0x4e leaves both unchanged and only applies object-0 coupling/navigation effects.
Inventory displayAlways acknowledgement-only; never writes a selected item to v25.
Sound outputSelector zero uses one channel; all others use four. Emit both tone bytes; device 2 adds 3 to low attenuation values below 8, then emit the control byte.
Save envelopeFour blocks; no logic-resume block. Block 1 has a complete semantic partition.
Binary save interchange statusExisting saves can be parsed and restored state can be preserved; pristine synthesis requires canonical initial reserved bytes that are not currently specified.

2.230 variant selection

Domain2.230 behavior
Resource containerSplit direct resources; inventory metadata is stored expanded.
Action and condition rangesActions 0x00..0x9a; conditions 0x00..0x12.
Exit and menu actions0x86 is an unconditional zero-operand exit; 0x9b and later are unavailable.
Position and compositionPosition actions update current/saved coordinates together. Both draw partitions use drawing-key order.
View loop encodingThe loop-header low nibble is the cel count; upper bits hold mutable loop-wide orientation and mirroring state. Action 0x31 masks to the low nibble.
Picture commandsDispatch 0xf0..0xf8; no pattern-command slots.
Show pictureSame retained-f15 and retained-window behavior as 2.089.
Direction-selected loopsSame cadence-independent, exact-four behavior as 2.089.
String and parser profileSix string slots; 0x270f has tail-terminator meaning.
Object distance and target motionSame wrapped distance and deferred first target update as 2.089.
Movement-clear actionsSame as 2.089: 0x4d clears direction but not autonomous mode; 0x4e leaves both unchanged and only applies object-0 coupling/navigation effects.
Inventory displayAlways acknowledgement-only; never writes a selected item to v25.
Sound outputSame as 2.089: selector zero uses one channel; all others use four; emit both tone bytes and apply only the device-2 low-attenuation adjustment.
Save envelopeFive blocks with a semantically partitioned 0x03db block 1.
Binary save interchange statusExisting state bytes can be parsed and preserved; pristine synthesis requires canonical initial reserved bytes that are not currently specified.

2.272 variant selection

Domain2.272 behavior
Resource containerSplit direct resources; inventory metadata is stored expanded.
Action and condition rangesActions 0x00..0xa0; conditions 0x00..0x12.
Exit and menu actions0x86 consumes its selector; 0x9b consumes two bytes; 0x9c..0xa0 consume their operands without constructing menu state.
Position and compositionPosition actions update current/saved coordinates together. Both draw partitions use drawing-key order.
Picture commandsDispatch 0xf0..0xf8; no pattern-command slots.
Show pictureSame retained-f15 and retained-window behavior as 2.089.
Direction-selected loopsSame cadence-independent, exact-four behavior as 2.089.
String and parser profileSix string slots; 0x270f has tail-terminator meaning.
Object distance and target motionSame wrapped distance and deferred first target update as 2.089.
Movement-clear actions0x4d clears direction and autonomous mode; 0x4e clears autonomous mode while retaining direction.
Inventory displayAlways acknowledgement-only; never writes a selected item to v25.
Sound outputEarly channel selection; emit both tone bytes; apply the device-2 adjustment, then adjust and signed-clamp the entire control byte.
Save envelopeFive blocks with a semantically partitioned 0x03db block 1.
Binary save interchange statusExisting saves can be parsed and restored state can be preserved; pristine synthesis requires canonical initial reserved bytes that are not currently specified.

2.411 variant selection

Domain2.411 behavior
Resource containerFour split family directories and five-byte direct volume records.
Action and condition rangesActions 0x00..0xa9; conditions 0x00..0x12.
Configured messages0x97 and 0x98 consume message, row, column, and width.
Restart confirmationAlways display the confirmation prompt; f16 does not bypass it.
Heap diagnosticOmit the rm.0, etc. line.
Pattern commands0xf9 consumes and ignores one byte; 0xfa writes one pixel per X,Y pair without seeds.
Direction-selected loopsExactly four loops use the four-loop table; larger counts do not receive automatic selection.
Sound channelsSelector 0 uses channel 0; every nonzero selector uses all four channels.
Sound command outputNo attenuation envelopes or device-2 adjustment; always emit both non-PC tone bytes.
Save envelopeFive blocks with a 0x05df block 1 and no block-3 transform.
Binary save interchange statusDefined for the mapped KQ2 dimensions.

2.440 variant selection

Domain2.440 behavior
Resource, opcode, configured-message, loop, and save profileSame early boundaries as 2.411.
Restart confirmationf16 bypasses the prompt and accepts restart immediately.
Heap diagnosticOmit the rm.0, etc. line.
Pattern commandsUse the common shaped/stippled 0xf9/0xfa behavior.
Sound channels and attenuationEarly selector rule and no attenuation envelopes or device-2 adjustment.
Tone-byte outputSuppress the low byte when the high byte’s top three bits are all set.
Binary save interchange statusDefined for the mapped LSL1 dimensions.

2.917 variant selection

Domain2.917 behavior
Resource containerFour split family directories and five-byte direct volume records.
Action range0x00..0xad; 0xae and 0xaf are not valid actions.
Condition range0x00..0x12.
Script key-map capacity39 entries.
Release-event gate action 0xadIncrement modulo 256.
Input-width actions0xa3 and 0xa4 retain their common effects.
Immediate room aliasesNone.
Direction-selected loopsExactly four loops use the four-loop table; more than four do not receive automatic selection.
Pictures, views, and objectsThe full-EGA command, raster, composition, movement, collision, animation, update-list, and refresh contracts are common.
Save envelopeFive length-prefixed blocks with no block-3 transform.
Binary save interchange statusDefined for the mapped KQ1 dimensions; reserved bytes use canonical initialization and byte preservation.

3.002.086 variant selection

Domain3.002.086 behavior
Resource containerCombined v3 directory and seven-byte volume records with direct, dictionary-expanded, or picture-nibble-expanded payloads.
Action range and extra slots0x00..0xb1; 0xb0 consumes one ignored byte, and 0xb1 sets the menu gate.
Condition range0x00..0x12.
Script key-map capacity39 entries.
Release-event gate action 0xadIncrement modulo 256.
Input-width actions0xa3 and 0xa4 retain their v2 effects.
Immediate room aliasesNone.
Direction-selected loopsFour-or-more-loop table applies without f20.
Exact-zero left proposalClamp to zero and report left-boundary code 4.
Pictures, views, and objectsOther full-EGA command, raster, composition, movement, collision, animation, update-list, and refresh contracts are common.
Save envelope and transformFive length-prefixed blocks; block 3 uses the v3 repeating-key XOR transform.
Binary save interchange statusDefined for the mapped full KQ4 dimensions; block 1 uses the 2.936 partition and reserved-state rules.

3.002.102 variant selection

Domain3.002.102 behavior
Resource containerCombined v3 directory and seven-byte volume records with direct, dictionary-expanded, or picture-nibble-expanded payloads.
Action range and extra slots0x00..0xb5; extra slots have the 3.002.149 contracts and effects.
Script key-map capacity39 entries.
Release and menu gates0xad sets the release gate to one; 0xb5 clears it; 0xb1 sets the menu interaction gate.
Input-width actions0xa3 and 0xa4 retain their 2.936 effects; closing window state clears the override.
Immediate room aliasesNone.
Direction-selected loopsExactly four loops always use the table; more than four require f20.
Pictures, views, and objectsThe full-EGA command, raster, composition, movement, collision, animation, update-list, and refresh contracts are common.
Save envelope and transformFive length-prefixed blocks; block 3 uses the v3 repeating-key XOR transform.
Binary save interchange statusDefined for the mapped KQ4D demo dimensions; reserved bytes use canonical initialization and byte preservation.

Game-data dimensions

These values are not universal interpreter constants:

DimensionSource and effect
Resource presence and countDirectory entries determine which numbered logic, picture, view, and sound resources exist.
Resource bytesLogic behavior, pictures, cels, sounds, messages, and dictionary words come from the selected game.
Combined-container prefixThe selected game supplies the v3 directory and volume filename prefix.
Inventory item count and namesThe decoded inventory metadata header and item/name region define them.
Drawable-object countThe selected profile and game data define the runtime object-table capacity. In the fully mapped profiles this is maximum_drawable_object_index + 1 from inventory metadata; that derivation must not be assumed for an unmapped profile.
Save blocks 2 and 3 lengthsObject count and decoded inventory metadata length determine them.
Replay storage lengthThe configured replay-pair capacity determines block 4 length.
Logic-resume block lengthThe cache population at save time determines block 5 length.
Signature and save stemThe accepted game signature establishes candidate validation and filename stem.
Room and object initial stateLogic resources and inventory locations establish game-specific state within the common transition rules.

Conformance tests must state both the interpreter profile and selected game data. A result obtained with one game does not establish another game’s counts, resource availability, names, save dimensions, or scripted behavior.

Partial domains

DomainSpecified portionRemaining limitation
Additional interpreter versionsThey may be inventoried separately.They have no normative profile until each observable delta is promoted.

Outside the current target

The following behavior is excluded from a current full-EGA conformance claim:

  • malformed resources that escape their declared payload and consume unrelated memory or execute unintended code;
  • non-EGA display adapters and alternate display-mode rendering;
  • exact text-glyph bitmaps unless a claim explicitly supplies a font profile;
  • exact analog waveform synthesis beyond the specified sound-event, tone/divisor, and attenuation-command output boundary;
  • original process memory organization, addresses, overlays, allocation strategy, and instruction-level timing; and
  • unspecified failure presentation such as out-of-memory UI unless a chapter explicitly promotes that path.

Claim requirements

A 2.089 full-EGA gameplay claim requires the common core plus every 2.089 resource, opcode-range, exit, picture, parser, object, motion, inventory, composition, and sound variant. A 2.089 SQ1 binary save interchange claim additionally requires the selected SQ1 dimensions and a supplied rule for canonical initial reserved bytes or preservation of bytes from an existing save/state image.

A 2.230 full-EGA gameplay claim requires the common core plus every 2.230 resource, opcode-range, exit, packed-view-loop, picture, parser, object, motion, inventory, composition, and sound variant. A 2.230 XMAS.230 binary save interchange claim additionally requires the selected XMAS.230 dimensions and a supplied rule for canonical initial reserved bytes or preservation of bytes from an existing save/state image.

A 2.272 full-EGA gameplay claim requires the common core plus every 2.272 resource, opcode-range, exit/menu-stub, picture, parser, object, motion, inventory, composition, and sound variant.

A 2.272 XMAS binary save interchange claim additionally requires the selected XMAS dimensions and a supplied rule for canonical initial reserved bytes or preservation of bytes from an existing save/state image.

A 2.411 full-EGA gameplay claim requires the common core plus every 2.411 opcode-range, restart, diagnostic, point-pattern, object-loop, and sound-output variant. A 2.411 KQ2 binary save interchange claim additionally requires the mapped KQ2 dimensions, shortened block-1 partition, five-block mapping, first-match logic-resume lookup, replay reconstruction, and reserved-state rules.

A 2.440 full-EGA gameplay claim requires the common core plus every 2.440 opcode-range, restart, diagnostic, pattern, object-loop, and sound-output variant. A 2.440 LSL1 binary save interchange claim additionally requires the mapped LSL1 dimensions and the same early persistence rules.

A 2.936 full-EGA gameplay claim requires the common core, every 2.936 variant, selected-game dimensions, and all non-persistence state transitions. A 2.936 binary save interchange claim additionally requires the five-block mapping, first-match logic-resume lookup, replay reconstruction, and canonical initialization or byte-preservation of reserved state as applicable.

A 2.917 full-EGA gameplay claim requires the common core plus every 2.917 resource, opcode, input, room, and object-loop variant.

A 2.917 KQ1 binary save interchange claim additionally requires the mapped KQ1 dimensions, five-block mapping, first-match logic-resume lookup, replay reconstruction, and canonical initialization or byte-preservation of reserved state as applicable.

A 2.917 PQ1 binary save interchange claim uses the same profile rules with the mapped PQ1 object, inventory, replay, signature, and logic-resume dimensions.

A 2.936 KQ3 binary save interchange claim uses the 2.936 profile rules with the mapped KQ3 object, inventory, replay, signature, and logic-resume dimensions.

A 3.002.086 full-EGA gameplay claim requires the common core plus every 3.002.086 resource, opcode, input, menu, room, loop-selection, and exact-zero left-boundary variant.

A 3.002.086 full KQ4 binary save interchange claim additionally requires the mapped full-game dimensions, five-block mapping, block-3 transform, first-match logic-resume lookup, replay reconstruction, and canonical initialization or byte-preservation of reserved state as applicable.

A 3.002.149 full-EGA gameplay claim requires the common core plus every 3.002.149 resource, opcode, input, menu, room, and object-loop variant, and must state whether it selects the base room behavior or the Gold Rush alias variant.

A 3.002.149 Gold Rush binary save interchange claim additionally requires the five-block mapping, block-3 transform, first-match logic-resume lookup, replay reconstruction, and canonical initialization or byte-preservation of reserved state as applicable.

A 3.002.102 full-EGA gameplay claim requires the common core plus every 3.002.102 resource, opcode, input, menu, room, and object-loop variant.

A 3.002.102 KQ4D demo binary save interchange claim additionally requires the selected demo’s dimensions, five-block mapping, block-3 transform, first-match logic-resume lookup, replay reconstruction, and canonical initialization or byte-preservation of reserved state as applicable.

No claim for another interpreter version follows automatically from a promoted profile.