The following are the changes since nightly-2024-01-14:
Features
Editor
- support multiple palettes in map preview/image export 
f207fda3f
 
Bug Fixes
Player
- still allow for game area to be stretched, ignoring aspect ratio 
381583118
 - ignore gamepad input when window is not active 
646ef8f08
 - weird newer movement edge-case 
0dd159abb
 - opening spacebar map triggering some secret effects on the current screen 
c1d9c1dca
 - lens unintentionally making enemies sometimes invisible 
1a9273955
 
Editor
- handle quest path/title with spaces in package export 
432dfe42c
 
ZScript
- sanity check for bitmap->isValid() and bitmap->isAllocated() 
c07f28f80
 
The following are the changes since 2.55-alpha-120:
Expand changelog
Features
- Allow disabling resizability of windows (setting in launcher only) 
90085dd84
 - add 'Script1'-'Script10' shield blockflags, to block specific scripted weapons. 
de1cb2b66
 - add burn-based light radii for items, to change the glow radius when lit on fire. 
5f829d628
 - LW_REFARROW, LW_REFFIRE, LW_REFFIRE2 (reflected arrows, fire, fire2) 
27c41e1f2
 
Player
- Custom mirrors can 'block' instead of reflect per-direction 
9ce509792
 
Editor
- Add warnings to combo editor (can detect problems and warn you about them) 
05188bddf
 - Merge 'Favorite Command' and 'Hotkey' systems 
cbb1ee991
 
Any 'Hotkey' can now be set to a favorite command, and all old favorite commands now have 'Hotkey's. Favorite command buttons will clear upon this update, as the configs have changed.
 - Hotkey cheatsheet, open with Shift+? 
2f0f07d43
 - Item Wizard (Shields) 
bcf109db2
 - support multiple palettes in map preview/image export 
f207fda3f
 
ZLauncher
- set save folder 
0269d0102
 - add options for window size, and cap max default window size 
47b273d89
 
[ZLAUNCH] window_width, window_height in zcl.cfg
Cap max default size to 2x
 
Bug Fixes
- prevent clock shifts from hanging the program 
b379a0ed9
 
Allegro 5 doesn't use a monotonic clock that ignores suspended time, so day light saving shifts or even hibernating your computer can result in Allegro trying to do so much work to "catch up" that it hangs the program. See liballeg/allegro5#1511 for more.
 - shift key input no longer accidentally ignored 
c92f096a0
 - passive (non-button) items not respecting "Usable as a Bunny" flag 
84d7f07e8
 - ZScript metadata fields cutting off at semicolons in strings 
ab92b22e7
 - 'box_out' popups sometimes appearing squished in the upper-left 
ced3bfb71
 - default bs patra has broken animation 
e846caa2f
 - newer hero movement ladder polish 
172c7a5ef
 - fairy npc not despawning when picked up 
45dfdd547
 - being able to carry objects while swimming, when lift glove isn't swim-capable 
d06f44a33
 - 'Push (Generic)' combos not properly locking into place on block triggers 
80845040c
 - deleting subscreens resulting in invalid/crashy data 
a29918a05
 - arrow key navigation in menus not resepecting hidden items 
883c2305c
 - prevent 1.90 qst load compat from setting first dmap cont/compass to bad value 
f1e3c5bcd
 - ZScript access to subscreen elements was missing a 'transparent' color option 
96c306004
 - zasm metadata not clearing properly when assigning slots 
33bb31162
 - implement set volume for GME music (spc,gbs,vgm,gym,nsf) 
76091a598
 - Enemy Flames not reflecting off of shields, even with reflect flag set 
2264bb083
 - issues with numbers between 0 and -1 
1b44e3b2c
 - swords not updating properly, sometimes 
915670436
 - old quest subscreen minimap titles overlapping 
dc548320e
 - placing flags on layers not marking the layer screen as "valid" 
8c74b7296
 - ensure file is closed when qst fails to load 
c702f24fc
 
Player
- Music not properly changing when using some warp types (ex. SCC warp) 
0aef5384b
 - extra pushing allowed per screen 
8a798d0dd
 - cheats menu being greyed out when it shouldn't be 
b24044c87
 - new respawn points not accounting for dmap offset 
d90410dcd
 - initialize fadevolume to avoid undefined behavior 
437c27b25
 
This fixes a bug where music would randomly be silent or extremely loud.
Also, cap the volume used to play music to 255, to avoid ever playing it so loud again.
 - set volume correctly when music changes with only fading in or out 
9274a675b
 
For example, if the new music has a fade in frame duration of 0, and the old music has a fade out frame duration of >0, then the new music would incorrectly have its volume stuck at 0%.
 - menu bar unaligned with dropdown due to menu using int scaling 
f8222be89
 - Swim speeds not being saved to save file 
2bbf51a02
 - spotlights with color setting '0,0,0' or tile setting '0,0' now function 
8da01272a
 - Allow throwing lifted object without validating cost 
498f70f46
 - thrown weapons now should hit enemies that they land on 
b11265992
 - all 'break on landing' weapons should hit enemies/the player that they land on 
fed7aab0b
 - correctly make qstpath relative to quests dir in "custom_game" dialog 
019c880c6
 - use correct sav path for -standalone mode 
9346ac6a8
 - prevent bad module path being set after exiting 
3a4e16d4b
 - improve main menu responsiveness 
5dd96666e
 - system menu not closing on reset/quit/etc 
049532ccd
 - fix 'warp' SCC sometimes not closing the string 
7601d2fb7
 - use more performant throttleFPS instead of rest in system menu 
0de39b360
 - remove accidental double compilation for global scripts 
f30fd983f
 - draw to correct bitmap when showing button clear prompt 
6e204d4fc
 - minor replay determinism bug for subscr_item_clk (selector animation) 
825844706
 - only assign save path just before actually writing to disk 
603e96444
 - call saves_do_first_time_stuff when changing slot qstpath 
db4cf98c2
 - handle edge case when changing unplayed save file qst 
79564453f
 - prevent calling dmap script twice in scrolling dmap warp 
e8edc34e9
 - set previously unset save_t write_to_disk in all places 
adca2b376
 - not showing error dialogs in title screen, and unbreak -only switch 
c32a29d1d
 - clear spin state during screen scroll 
7ca93107b
 
This avoid a ghost sword visible during scrolling, and also prevents a nasty bug where the player's action state would be frozen until hit.
 - prevent crash in save creation by resetting global vars 
2b3c4119d
 
When a game is loaded, many global variables are initialized to a known state. These variables were not reset when the game ends and returns to the title screen. However, save creation happens to call code that checks the active subscreen pointer, which was invalidated. Accessing this could randomly crash or corrupt the program.
Now, these global variables are reset also just before loading the title screen.
 - prevent failing to save after continue 
870510c96
 - lift glove 'disable item use' not stopping sword SFX from playing 
3e6fe6e05
 - remember last save slot position when returning to save select screen 
a3bc81309
 - [win32] invisible hero because of MSVC bug 
511934cea
 - remember cheat on continue game 
99675afa2
 - 'Custom Weapon' itemclasses rounding down step speed 
8f4b63428
 - restore option to scale display to full window size 
b618eb983
 
This broke when the display was fixed to only show at the correct aspect ratio. Default is still as before, but now the "Force Integer Values for Scale" option works again.
 - still allow for game area to be stretched, ignoring aspect ratio 
381583118
 - ignore gamepad input when window is not active 
646ef8f08
 - weird newer movement edge-case 
0dd159abb
 - opening spacebar map triggering some secret effects on the current screen 
c1d9c1dca
 - lens unintentionally making enemies sometimes invisible 
1a9273955
 
Editor
- prevent flickering for minimap tooltip 
69948f334
 - Tile editor checkboxes not clicking 
983a17add
 - disable unpack cache to fix tile rotate/flip 
fed7b7732
 - tile page rclick "insert", "delete" was swapped 
0b9bad2a6
 - disabling tooltips works again 
409abe1ff
 - item editor candle text goof 
17852c009
 - 'Go' in warp dialogs not rebuilding transparency table 
d41040b13
 - fixed warp ring dialog 
1f05880ab
 - wrong button focused in zscript compile dialog 
41a07b400
 - tile editor bugginess 
87cd522a9
 - Polish numpick dialog, fix new gui focusing 
f9852b3f6
 - Crash on changing map count 
92c190255
 - timeout of 0 for parser timeout now acts as "no timeout" 
975602f22
 - 'File->Exit' not exiting 
5db531ab7
 - 'Scroll to Combo' on screen rclick being offset 
5497092dc
 - greyed out pasting in string list 
f2440669d
 - create test init data relative to qst init, not base init 
fadfe7d74
 
This was originally done this way to avoid changing test init data when the quest's actual init data changed, but that maybe is not as useful as the other approach.
Also very simply fixes the problem of screen data (and other init values) not being properly set.
 - autocombo/combo pool/combo alias pages RClick menus being offset 
d3e276c4d
 - 'Open Tile Page' on combos not using the ORIGINAL tile of the combo 
7009db89b
 - disable tooltips when hotkey cheatsheet is open 
bcae99ea1
 - clean up several issues with the warp dialogs 
378766362
 - options->fonts being broken/inconsistent, not saving changes 
cc2cb75cd
 - undefined memory write when applying modern quest ruleset 
2ed538d97
 - lockblock/chest combo wizards not saving 'Use ExState' flag 
2a3eb96fd
 - some more issues with warp dialogs 
e9ab158ae
 - warp dialogs not properly previewing negative xoffset dmap map-marked squares 
b593e46bf
 - solidity preview inaccuracies 
723c58ebc
 - 'Tools->Combo Flags' bugging out when clicked 
53f324ae6
 - crash related to 'Scroll to page' for aliases/pools/autocombos 
7f8d8236c
 - midi edit dialog not showing in new rendering system 
7ff03e46b
 - handle quest path/title with spaces in package export 
432dfe42c
 
ZScript Standard Library (std.zh)
ZScript
- 'subscreenwidget->PerContainer' not working 
9d7c222dc
 - al_rest crashing when using debug feature 
6058be2ba
 - parser configs not working 
74a81247e
 - issues running destructors 
7d0dc5299
 - handle rare COMPAREV2 for x64 jit 
0fc3edd39
 - sprintf giving a wrong error message on %c 
180b66fc9
 - 'Screen->SetExDoor()'/'mapdata->SetExDoor()' not opening matching doors 
88f2ab405
 - grab correct value from stack for POPARGS JIT x64 
504f87a71
 
This didn't seem to break anything, but it showed up as a difference when comparing registers from JIT w/ non-JIT.
 - Hero->WarpEx not using dmap xoff when setting continue screen 
e21ba53d0
 - global var initializers not erroring when non-constant 
e1b10e2a0
 - escape character " not working properly in string literals 
a08d4a149
 - invalid character errors wrongly occurring for values 128-255 
2cfe2e472
 - subscreen widgets not allowing SUB_COLOR_TRANSPARENT to be used 
77346b0c8
 - class function params with same-name as class member not shadowing properly 
5659c8ebd
 - class/object destructors stack being offset wrongly 
79079c766
 - fix Audio->SetMusicLoop() truncating decimal values 
c6e7c0205
 - compiler crash related to invalid array indeces 
f3e3f7ecb
 - sanity check for bitmap->isValid() and bitmap->isAllocated() 
c07f28f80
 
Web
- use zc-data.nyc3.digitaloceanspaces.com for now 
af524e98f
 - "Copy URL" in player now uses correct test params 
8b5eaf56d
 - sync fs when writing save order txt file 
e006c07a7
 - quick save creation link working again 
9e4c8a90f
 
The quest gamedata field was inadvertently set to 0 because the save file was prematurely selected before being saved for the first time, which prevented anything in saves_do_first_time_stuff from sticking.
 
Documentation
- add a couple missing subscreen widget script docs 
f55a272d0
 - document DrawTile '-777' rotation behavior 
8bfb995e0
 - fix typo 
9dc086113
 - update zstrings.txt to mention the "Insert SCC" button 
bd084e245
 - fix some issues with the webdocs 
569adf358
 
Build
Refactors
- remove unused 'VSync' option (it didn't do anything) 
74bbc05b7
 - key files 
d0864dc8d
 
Now work from the folder the quest is in OR the exe is in, and saves to the folder the quest is in. Also cleaned up the code for handling reading key files.
 - remove unsupported color_depth option 
f827b35bb
 - load text files more efficiently 
663e4dacf
 - don't tint behind dropdown lists (allow skipping dlgs tint) 
cb8f87135
 - Menus (new sleeker look, much cleaner backend) 
df3b5ab5b
 
Player
- remove unused volume code in read_saves 
244b8cad0
 - move x64 backend jit code to separate file 
f3d40e0b7
 - move global inits from init_game to new init_game_vars 
c4f5c11ae
 - make lamp_paid not static for replay determinism 
534d82e91
 - remove ZASM debugger from menu 
377981e09
 
You may still activate this with [CONSOLE] print_ZASM = 1 in zc.cfg, but the option is no longer in the player menu. This will be removed entirely soon - it's so slow it can lock up a computer, and not useful enough to keep around.
We may introduce a proper debugger in the future for ZScript to serve the purpose the ZASM debugger tried to.
 
Editor
- Clean up Tile/Side/Ring warp dialogs 
34b7addff
 
ZScript
- optimize script lookup by name 
9ee5c4ba8
 - copy script entry to tempfile quicker 
267bd5af2
 - manually parse config file, drop al_init 
28fe49bc6
 
Tests
- save replay result file when starting replay 
62165c822
 - suppress timeout check on frame 0 
487351025
 - update 'triggers.zplay' 
218609b0b
 - add '--output' option for zscript tests 
ae45b645f
 - fix zscript subfolder tests not running (and update) 
0e35a067e
 - update errors_2_expected.txt 
ce9e615a7
 - filter out expired test builds in bisect_builds.py 
2bdc2354a
 - prevent infinite loop when zplayer exits before first frame 
a56646b40
 - add nargads_trail_crystal_crusades.zplay 
08c75565d
 - fail replay test if jit cannot compile a script 
9ca544889
 - fix local webserver when offline 
804520e40
 - include js script in web replay test stdout/stderr 
3c162e5b2
 - add umbral_cloud.zplay 
0a0826577
 - add pageerror listener in run_replay.js 
ee98991df
 - fail on abort in web replay tests 
3b0da67b4
 - stop on fatal errors in run_web_version.js 
d69ad2aaa
 - set write_to_disk in saves_test 
297b5433e
 - add "frames" and "length" meta fields to zplay 
35da8a5eb
 - use "latest" version for all playground.qst replays 
42b94c785
 
These replays should be trivial to update as needed, and using no replay compat code makes them far more useful for verifying specific features.
 - add link_to_the_heavens.zplay 
b1309cc47
 
CI
Misc.
- Allow scrolling info popups 
6fb7e9304
 - Remove '(Experimental)' label from FFC solidity 
5a4663794
 - add 'peekkey()' / 'upeekkey()' local allegro edits 
7022b0ee4
 - clean up menus, particularly the zc main menu 
5ae6e3d64
 - Remove whistle delay for new replays 
ac0017e2a
 - update default fonts to be same between base_config and 'Default:' button 
e8b85365d
 - help text to indicate use of A1/A2 values on ffc/item editors 
599d6f70c
 - remove noisy allocation logs 
32bf8f42f
 
Player
- show current frame count when recording and system menu is active 
0f4e8a00c
 - improve error message when qst title does not match save file 
069e15113
 - support "latest" for version field in zplay 
5870d858b
 
Editor
ZScript
- internal label errors now prevent compile 
1b0d63bfa
 - add 'itemdata->LAttributes[]' to access attributes as a full 32-bit long value 
83f9d2d03