Skip to content

Hex Studio v0.3.1

Choose a tag to compare

@github-actions github-actions released this 28 Jul 05:52

Multi-dimensional calibration data. MAP, CUBOID, CUBE_4 and CUBE_5 now
decode, encode and round-trip through CDFX — every object in the ASAM ASAP2
demo description resolves, and the unsupported count is zero.

Maps, cuboids and cubes

  • The detail pane shows a shaded grid preview with the object's shape and one row per axis, and Edit values… opens a full-size grid: X breakpoints across the top, Y down the side, cells editable in place.
  • Anything past two dimensions gets a slice selector per extra dimension, reducing a cuboid or cube to a plane.
  • A family-of-curves plot draws each row of the visible slice. Hovering a row in the grid traces its curve and the reverse. All curves share one vertical scale, pinned to the whole object, so slices stay comparable as you step through them.
  • Breakpoints are editable only where the bytes actually are: a STD_AXIS here, a COM_AXIS/RES_AXIS/CURVE_AXIS on the object that owns it (linked from the grid), and a FIX_AXIS nowhere — it is computed from the A2L and occupies no image bytes.

Two things the demo file settled that reasoning alone would have got wrong, and
which are now covered by tests:

  • COLUMN_DIR swaps X with Y only — it is not a reversal of the dimension order. The demo's 2×3×4 ROW_DIR/COLUMN_DIR twins hold the same 1…24; swapping recovers that, reversing the full order yields 1,13,4,16,11,….
  • INDEX_DECR reverses along its own axis only. Reversing the whole flat array is right in one dimension and wrong in two, where it would also mirror X and mispair every value with the wrong breakpoint.

Everywhere else

  • 1D curves get a plot in the detail pane, which follows the draft as you type rather than waiting for the commit.
  • Verbal breakpoints and values are chosen from their enumeration rather than typed, and written by name — a verbal conversion has no numeric inverse.
  • Maps are summarised in the table by their shape (4 × 5) rather than a value span, which across a whole grid says very little.
  • The category list is ordered by dimension — Scalars, Axes, 1D curves, Maps & cubes — and Unsupported is hidden unless a file actually contains one.

Fixes

  • Axis editing was broken. Giving PointTarget::Axis a dimension changed its JSON from "axis" to {"axis": n}, so every axis edit from the data view silently failed to deserialise. Both spellings are now accepted, with a test covering the contract.
  • Maps never loaded their detail. The fetch still tested for the old curve category, so the axes summary, grid preview, editor and everything downstream rendered nothing. It now asks the backend, which sets a point count for exactly the shapes that have one.
  • Verbal axes were offered as editable and refused every value — they invert through text_to_raw, not to_raw.
  • A padded MATRIX_DIM was read as a grid. ASAP2 up to 1.6 writes a flat array of eight as MATRIX_DIM 8 1 1, or 1 8 1 column-oriented; both were presented as volumes.
  • Exported CDFX numbers are written at round-trip precision, so re-importing an export no longer rewrites the image.

Downloads

Platform File
macOS (Apple Silicon) Hex.Studio_0.3.1_aarch64.dmg
Windows Hex.Studio_0.3.1_x64-setup.exe or Hex.Studio_0.3.1_x64_en-US.msi

The macOS build is signed and notarised. The Windows installers are not code
signed, so SmartScreen may warn on first run — choose More info → Run
anyway
.

Full changelog: v0.3.0...v0.3.1