View a summary of what's new in 2.55.
Features
Player
- optimize ORR/ORV/ORR32/ORV32 in x64 jit
a9299cf6d
Editor
- add 'Script Bugfix' option (default on) to new file dialog
689a1d79a
ZScript
- support
Trace(string)d0bc26ecbWhen a string is given to
Trace(), it now smartly prints that string, same asTraceSwould. - log error when GetPixel input is out-of-bounds
550a8e955
Bug Fixes
- refuse large string allocation when loading qst
5d691eb99Corrupt or newer qst files should never crash (just show an error), but in some cases the loading code can try to allocate huge strings from bad data. Now, refuse to allocate large strings to avoid a potential crash.
- properly apply 'custom' counter max increases given by starting items
038f51900
Player
- prevent crash from div-by-0 with enemy misc
069780a0bMany configurable enemy misc values are used as the dividend in a modulus operation. If these values are set to 0, a crash can happen. The result now is to return 0 (same result as when configured with 1).
- ignore corrupted enemies in 1.90 or older quests
9d7b69ed7Somehow, quests saved in old versions could sometimes set invalid screen enemies. Modern ZC has more enemies, so those bad quests were now loading scary new enemies like Ice Wizzrobes where before they might do nothing interesting.
Now, when loading 1.90 or older quests, any enemy ids that were not possible at the time are now ignored.
- stop drawing dive items in lens view after pickup
646b41a17This bug only happened if the
Old Special Room Screenstate DetectionQR was on. - pitfalls + Block Hole flag on same layer as block using wrong next combo
d4107e31a - handle when save no longer exists with "Reload Last Quest" on
e549627f6Instead of closing the program when the last quest save file cannot be loaded, load the title screen instead.
Also, store the save path instead of the slot index, since the latter can change when manually adding or deleting save files.
- do not unselect A button when loading save
8bd1cdc08A bug in initializing the game resulted in the A button always being unequipped (unless it was forcibly set with a script).
- cane of byrna sparkles lingering after death if extra dying frame qr is on
7e8cbefc1 - prevent possible crash in ZCSubscreen::get_item_pos
527bd5610 - avoid "invalid save slot index" when creating new save
e03204a7dCreating a new save slot could sometimes invalidate all existing save slots (until the program was restarted).
- tile width/height not working for custom/ice weapons
6ae1a699c - wrong combo ID used for some water behavior
931b000b3When the "New Water Collision" QR is off, the combo type instead of the combo ID was being used to control some behavior (such as the damage amount).
- pit/water corner cutting (newer movement only)
142811513 - minimap title requiring map item didn't actually check for item
3c8c6ba16When "Invisible w/o Map item" was set, the map item wasn't always being checked.
- falling/drowning issues
43db6651bEnemies/items/weapons were not using correct hitbox for falling/drowning Enemies/items were immune to drowning in sideview
- move custom eweapon to lweapon sprite list when reflected
3f1d2a126 - walk-through-walls not being respected for pit/water scroll check
4c6962b05 - prevent memory leak from replay steps
9710ef344 - 'Move' missing from combo page rclick menu
ea6d9b559 - held-up items treated 'Only Held' pickup string flag as 'Always'
127a1b893 - cutscene trigger combos that allow F6 softlocking on F6
bf6bd6286 - walking over pits in some cases (made pits more sensitive)
ab1d9e238 - prevent trigger change effect resulting in invalid combo
4ecebc11fWhen the combo change for a trigger effect produces a combo with a bad ID (negative or larger than the max), the engine would crash. Now, the resulting combo is clamped to the valid range.
- allow background to be transparent in active subscreens
a4646ab31When the compat QR "Old Engine Subscreen Quirks" is off, a bug caused the background for active subscreens to never display the playing field even when the subscreen did not have a solid background.
Editor
- allow item editor to enter larger numbers for the Power field
1e3536e64 - subscreen editor color selectors not showing cset 12/13 properly
39ed9f4fc - improve test mode screen matching
d317fb5abTake into account the dmap xoff value when selecting the default dmap to use for test mode.
- prevent test mode from using screens >= 0x80
42aef59c8 - use correct width for tile anim preview frames
18944f470 - properly set enemy move flags when saving old quests
f84d33e20Quests older than 2.11 were accidentally clearing enemy move flags if saved in the editor, resulting in enemies not be able to traverse over water or pits.
- handle all filesystem errors when creating quest package
d6ed51fd3
ZScript
- clear eweapon script when it ends
62257c7c4When a script ends, the scripting engine is supposed to clear the object's script so that it cannot run again. But a bug prevented that from happening for eweapons.
Normally that wouldn't matter, but if the weapon was reflected it would then try to run the eweapon script on the newly created lweapon.
And normally, that would maybe mostly work, but another bug actually caused a crash to happen instead.
So now eweapons have their script cleared when it ends, and the crash is avoided.
- prevent crash when drawing to system bitmap render targets
a9b8fc7bdScript draws to the
RT_BITMAP0,RT_BITMAP1, etc. bitmaps could result in a crash.This regressed in 2.55.9.
- correctly handle COMPAREV2 in x64 jit
5e35070fa - use correct sprite for step in weapon MakeAngular
8ea1dfde5The wrong variable was being referenced to access the weapon's step value. Instead of using the weapon, it used whatever was last set to a global
spritevariable in the scripting engine (which could possibly result in a crash). - load initial screen before onSaveLoad global script
eae75f591When the "Use Old Global Init and SaveLoad Timing" compat QR is off, the onSaveLoad global script ran before the initial screen even loaded. That made accessing anything on
Screendo the wrong thing.Now, this global script can access the initially loaded screen.
Refactors
- check each file section version for validity
72a6141f0 - remove date check when loading qst
bc7bce33eThe date check had some correctness issues and was kind of complicated, and the explict version checks are sufficient, so it's been removed.
Player
- use monospace font for text overlay (fps, etc.)
228d45dbf
Editor
- save test mode replays to "replays/test" folder
1df88bf33Just to separate from replays for normal saves.
Tests
- add stellar_seas_intro.zplay
a63337a4d
CI
- [win] update vcpkg to 2025.08.27
486dfe7f4