github ZQuestClassic/ZQuestClassic nightly-2024-01-25
Nightly 2024-01-25

pre-release10 months ago

The following are the changes since nightly-2024-01-23:

Bug Fixes

Player

  • tall grass on layers not applying its sfx/sprite 76f952fc9
  • fix snapshot with NOSUBSCR not supplying a palette and not accounting for NOSUBSCROFFSET 45bf325cb
  • set default volume to 100% instead of 25% 8a4f7cf2e
  • prevent grid aligning while jumping, which broke jumping for some old quests 2d8a18875

Editor

  • transparent tiles not drawing correctly in map preview 80f94a9ea

ZScript

  • fix paldata->CopyCSet() referencing the wrong pointer 2a305c182

Build

Misc.

Editor

  • upgrade combo 'advanced paste' dialog, add 'Adv. Paste' to rclick menu 7ac1da426

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
  • option to show game time in the corner, for all those speedrunners out there 05449497b

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
  • retain monitor resolution for fullscreen mode 981c6c1f9
     

    Previously, the maximum monitor resolution would be used when using fullscreen mode. That was bad because it messes up the window layout of anything else on that monitor. Now we create fullscreen displays without changing the resolution.

    Also, no longer destroy and recreate the display to change fullscreen/windowed mode. Switching between is much smoother now, and the code got a bit simpler and safer.

  • changer ffcs counting for trigger groups and similar effects (they shouldn't) e9d91d8fa

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
  • lens unintentionally making enemies sometimes invisible 111569113
  • Divine Escape particles sometimes flying in wrong directions d2472cceb
  • crash when running replay without any real saves f90cb0253
  • remove unnecessary absolute path check for standalone mode saves ed4afb985
  • show final game frame when opening/closing subscreen 07dddb5e9
     

    For older quests utilizing none of the QRs related to "cool scrolling", the subscreen open/close crawl would show a version of the game frame that was missing a few things, like enemy or player sprites.

    This should allow us to simplify the rendering (no need to render most things twice to a secondary bitmap), and just looks better.

  • do not stretch GUI fad67d962
  • tall grass on layers not applying its sfx/sprite 76f952fc9
  • fix snapshot with NOSUBSCR not supplying a palette and not accounting for NOSUBSCROFFSET 45bf325cb
  • set default volume to 100% instead of 25% 8a4f7cf2e
  • prevent grid aligning while jumping, which broke jumping for some old quests 2d8a18875

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
  • transparent tiles not drawing correctly in map preview 80f94a9ea

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
  • stale data in destructors 6251b0f23
     

    scripted objects weren't clearing data used by the destructor when being cleared, leading to future objects referencing the stale data if they didn't have a destructor of their own to overwrite it.

  • generic script item collect event fix f53af5295
     

    Item Collect event will no longer be fired for items such as timeout items when they are not actually able to be collected. Due to timing changes, the "Combine when collected twice" now also occurs BEFORE the event.

  • clear jit-compiled scripts as intended when loading new quest ddf96eddd
  • fix crash when creating too many paldatas 83a3bc867
  • fix paldata->CopyCSet() referencing the wrong pointer 2a305c182

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
  • remove scary and now pointless warnings when toggling fullscreen cf9942aca

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.

  • remove extra draws to scrollbuf in draw_screen d57d0318b
  • remove digi_music volume control e426c5d1c
     

    digi_music is a global volume control for all allegro 4 music streams, which is only used for GME (so all those chiptune formats). But we already apply emusic_volume (enhanced music) to all non-MIDI music, so digi_music was at best redundant, and at worse a confusing knob that only modified some music formats.

    It's been removed from the Sound dialog, and now defaults to 255 (100%). It can still be modified via scripts, though this should be changed to just set/read emusic_volume sometime in the near future.

    BTW - ~6 months ago OGG was changed to use Allegro 5 instead of 4, which means at that point digi_music no longer had any effect on OGG volume.

  • remove music buffer setting 9a6ae020b
     

    This only applied to it/xm/s3m/mod music. There's no need to expose this to users. Instead, always use 128KB as a buffer size.

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

  • update vcpkg 00f89c2c7
     

    Apparently vcpkg has issues with retaining build assets long term. Being forced to update to latest as something we need expired.

    microsoft/vcpkg#30546 (comment)

  • set correct test results folder for web replays for upload 9413f492c
  • use improved lfs cache 69740f37c
  • use RelWithDebInfo for win32 tests 2eb360aa3

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
  • add qst.author sentry tag, so we can know who to reach out to for crashes in unpublished quests 22a5c9c73

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

  • Add hotkey for rebinding hotkeys af954f385
  • fix some text, add divine escape help text for warp types 1b058a4b7
  • clean up 'Door Combo Set' dialog/hotkeys and document them a4503c640
  • upgrade combo 'advanced paste' dialog, add 'Adv. Paste' to rclick menu 7ac1da426

ZScript

  • internal label errors now prevent compile 1b0d63bfa
  • add 'itemdata->LAttributes[]' to access attributes as a full 32-bit long value 83f9d2d03

Don't miss a new ZQuestClassic release

NewReleases is sending notifications on new releases.