Skip to content

v0.3.0

Choose a tag to compare

@rawframe-release rawframe-release released this 25 Oct 05:51
4509b31

0.3.0 (2026-10-25)

Changed

  • Breaking: a character owns its body and capsule. Queries report a
    character's capsule like any shape, and m3Shape_GetBody gives its
    body, so a program could destroy, retype or reshape either one, or add
    a shape to the body, while the character lived on, which the character
    does not support. m3DestroyShape, m3DestroyBody, m3Body_SetType,
    m3Shape_SetSphere, m3Shape_SetCapsule and a shape create on the
    character's body now refuse them with m3_errorInvalid, count a
    misuse and change nothing; replay refuses the same ops in a tape.
    Destroy the character instead: that still takes its body and capsule
    with it, and m3Character_SetStance remains the way to resize it.
    Replay also refuses a body type the public call refuses (outside
    static, kinematic and dynamic); it used to set any byte.
    (#73)

Fixed

  • Restore refuses a snapshot whose structures this engine could not
    have written.
    It checked each snapshot block on its own
    (indices in range, flags, finite floats) but not the structures the
    blocks form together. It now also checks, before any byte lands: the
    id pools, the body to shape and joint lists, the broadphase tree, the
    contact pairs, shared content and its reference counts, and the
    records of characters, vehicles, soft bodies and joints. Such a
    snapshot is refused with m3_errorInvalid like every other restore
    refusal, and the world is left as it was. Nothing is rebuilt, so
    restored worlds still resimulate bit for bit, and every snapshot this
    engine writes still restores, also one taken between a call and the
    next step. The snapshot format is unchanged.
    (#70)
  • m3World_TestPoint reports a point far from a voxel chunk as
    outside it.
    The cell of a point's chunk-local coordinates is now
    bounded like every other grid-cell cast, and the library's other
    float-to-int conversions were checked the same way. No result changes
    for any value in range, and no golden or benchmark hash moved.
    (#71)