Skip to content

Fix file save, loading and tab bugs from a code review - #195

Merged
AsYlum- merged 53 commits into
masterfrom
fix/code-review-2026-11
Nov 12, 2026
Merged

AsYlum- merged 53 commits into
masterfrom
fix/code-review-2026-11

Conversation

@AsYlum-

@AsYlum- AsYlum- commented Nov 12, 2026

Copy link
Copy Markdown
Collaborator

File saving:

  • Gump 9834 is written with the 8 digit UOP name, so it no longer disappears after saving gumpartLegacyMUL.uop. Older files with the 7 digit name still load.
  • Multi Editor saves keep each tile's extra field (the 0x0100 flag bit), including tiles that were copied and pasted.
  • AnimData keeps its short last chunk, trailing bytes and records with a frame count of 0 when saving.
  • Speech entries longer than 128 bytes are read in full instead of breaking every entry after them.
  • Skills save even when the Skills tab was never opened.
  • Art save no longer shares one image between statics of different sizes that have the same pixel bytes.
  • RadarCol CSV import updates the loaded colors instead of replacing the table, and accepts every item color.
  • Land tiles must be 44x44 and textures 64x64 or 128x128 on every add, replace and insert path; other sizes were saved as garbage.

Loading and reading:

  • Animation frames with bad run headers are clipped to the frame instead of writing outside the bitmap.
  • Animation palettes import starting at slot 0; before, they were shifted by one and lost the last entry.
  • A .vd import clears the directions it leaves empty.
  • Item art reads are serialized, so the preloader no longer corrupts reads on the UI thread, and preload errors are shown.
  • Client files are closed on reload, an unreadable gump file loads as empty, and sound reads handle missing files and bad ids.
  • A missing map UOP chunk no longer shifts the blocks after it, and map diff blocks outside the map size are skipped.
  • Verdata patches on compressed UOP entries decode correctly.
  • The light cache works when caching is on, and the in-game light preview has the right size and brightness.

Tabs:

  • Gump and AnimData tabs no longer add their event handlers again on every reload.
  • Land tile and texture lists no longer show every entry twice after a cross-tab select.
  • Fixed off-by-one index checks in Items, Land Tiles, Textures, Gump insert and Hue replace.
  • Hue replace copies the values instead of sharing one hue between two slots.
  • Items: oversized images are skipped with a message instead of leaving a batch half applied.
  • AnimData: frames are limited to 64 and to offsets that fit a signed byte.
  • Cliloc refreshes after delete and insert, and its CSV import keeps text that contains ';'.
  • Image file extensions are matched case-insensitively, and converted .bmp sources are disposed.

App and plugins:

  • Enter in the profile list loads the profile, and profiles with missing attributes or a missing plugins folder load.
  • Manage Plugins shows the profile's plugin choice. Plugins subscribe to events in Initialize, so disabled plugins no longer add menu items.
  • The window position and size are saved from the normal bounds and restored on any screen.
  • Multi Editor: selection, hover and paste are cleared after undo, redo and open; Z is clamped on every add; the marquee follows zoom; shortcuts leave text boxes alone; Dynamic flag changes and undo jumps can be undone.
  • Mass Import resolves file paths against the XML file's folder, tolerates missing attributes and uses the right index limits.
  • The release workflow uploads from the correct UoFiddler folder, and the Multi Editor version is 1.7.0.

The reader also accepts the old 7 digit name.
Invalid values show an error instead of throwing.
A short last chunk and records with no frames are written back as loaded.
Close the old skills file on reload.
Rows that are not numbers are skipped instead of setting id 0.
Row offsets are written as ushort, without the unused padding after the table.
Entries too short for a palette load as empty instead of decoding stale bytes.
Replace from folder inserts into the tile list instead of overwriting the next id.
Marks hues as changed and refreshes other tabs.
CSV import keeps text that contains ';'.
Show the first entry's frames after load; cap frames at 64 and offsets at a signed byte.
Missing or invalid values keep their defaults instead of stopping startup.
Instances made only for the list are dropped on close and never unloaded.
A cross-tab Select before the tab was opened listed every tile twice.
Moves and removes ignore tiles no longer in the multi; Z is clamped to a signed byte on add.
Missing attributes no longer stop the load.
Later chunks keep their place instead of shifting.
Jumping back in the undo list keeps the skipped states for redo.
@AsYlum-
AsYlum- merged commit cdb0a34 into master Nov 12, 2026
1 check passed
@AsYlum-
AsYlum- deleted the fix/code-review-2026-11 branch November 12, 2026 14:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant