Skip to content

MJOLNIR CLI cli-v0.3.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 16:29
· 127 commits to main since this release
Immutable release. Only release title and notes can be modified.
686ad7f

Classic maps, game types, and every object in play

Convert classic Halo CE maps and package them for the hub, write the multiplayer game types the simulation runs, and list every object in the running game with live objects.

This release carries the tooling behind the classic multiplayer maps: what
turns a Halo CE map into one the game loads, what packages it for the hub, and
the game types it is played under.

Added

  • mjolnir level collision <collision_N.json> --out <bsp> converts a
    classic CE collision BSP (halo2ue's export) into a structure BSP the
    simulation walks on, and writes the transform that places everything else on
    it. --own-bsp builds a BSP holding only the CE map, with its own Havok
    collision, so nothing of the host mission's geometry is used.
  • level bake --standalone gained the pieces a map of its own needs.
    --bsp INDEX=PAYLOAD gives the map its own structure BSP, --world ships its
    own Unreal world under the map's codename, --world-object points it at a
    shipped world instead, and --write-tag keeps the baked scenario for
    mjolnir tag-file.
  • mjolnir level register rebuilds the registration container and the
    multiplayer menu's map list from every installed map. The launcher runs it
    after a map is installed or removed.
  • mjolnir map pack <dir> --code XYZ --version V packages a converted map
    as a signed .mjolnir map pack for the hub, and mjolnir map runtime
    packages the CE runtime pack every map depends on. --sign signs with this
    machine's device key.
  • mjolnir megalo write --mode slayer|ctf --out x.mglo writes a
    multiplayer game type the simulation's own Megalo interpreter runs: Slayer,
    and Capture the Flag with Halo CE's rules, with CE health packs. It takes
    the score to win, the number of rounds, and the base options a host can
    change: --time-limit (the round ends when it runs out), lives, respawn and
    suicide times, what the map may place, and player and respawn traits
    (--trait shields=1). mjolnir megalo read prints what a variant holds.
  • mjolnir live objects [--group bipd] [--filter text] [--tsv out]: every
    object in play. Each row has its handle, its type (biped, weapon,
    equipment…), its definition tag, its position, its body and shield as a
    percentage of the maximum, and its parent if it is attached. The row for the
    unit a player controls is marked with that player. The simulation keeps its
    objects, players, AI and script state in named tables in its thread-local
    storage, and mjolnir now finds them there. Each table names itself, so
    nothing is read at an address one build hard-codes.
  • mjolnir live players: each player, the unit it controls, and where
    that unit is.
  • mjolnir live arrays: all 59 of the simulation's per-game tables, with
    how full each one is. It needs no build profile.
  • mjolnir live status also names the simulation thread and says how many
    objects are in play.
  • mjolnir compile writes each node's source offset, and decompiling turns
    a cond back into a cond.

Fixed

  • mjolnir compile resolves name literals (objects, trigger volumes, squads,
    flags and the rest) against the scenario it compiles for. Every one pointed
    at the first element of its block.
  • Compiled scripts keep the 0x1000-byte reserve at the end of the script
    string data that the engine expects.

Known limits

  • live is read only. Positions and vitality can be read but not yet written.
  • An attached object's position is relative to its parent.
  • The layout inside an object was measured on the current Steam build (CU4).
    A game update that moves it is caught by a consistency check, and the
    command stops instead of printing wrong values.

Full changelog · All releases


Install

Windows

scoop bucket add mjolnir https://github.com/devnull9090/mjolnir-core
scoop install mjolnir

macOS and Linux (Homebrew)

brew tap devnull9090/core https://github.com/devnull9090/mjolnir-core
brew install mjolnir

Debian, Ubuntu — sudo dpkg -i mjolnir_0.3.0_amd64.deb
Fedora, RHEL, CentOS, openSUSE — sudo rpm -i mjolnir-0.3.0-1.x86_64.rpm

Or take an archive below, unpack it anywhere, and put that folder on
your PATH. The Linux binary is statically linked, so it runs on any
distribution without installing anything alongside it.

Downloads

File SHA-256
mjolnir-0.3.0-windows-x64.zip fb770e7ffd603bac4990e713cf4a788a8dee3704c111512c28a490667cbb8928
mjolnir-0.3.0-linux-x64.tar.gz 58d68458a1a27fe77ea6698f4e562a372e41250f0b43b30c70d991a21254a1f3
mjolnir-0.3.0-macos-universal.tar.gz 434ecb5b045fd78ac76a38dc0df1fd80cb66800c0a661480d48b22e60d1d7997

The macOS build is a universal binary — the same file runs on Intel
and on Apple Silicon. .deb and .rpm checksums are in the
checksums file attached below.

Verify your download

(Get-FileHash .\mjolnir-*.zip -Algorithm SHA256).Hash
shasum -a 256 mjolnir-*.tar.gz

Compare the output with the checksum above. They must match exactly.