The following are the changes since nightly-2024-02-04:
Bug Fixes
Player
- reset global variables on continue game for replays
f3b34561f
- actually stop mp3/ogg
994d743dc
Due to a bug ogg and mp3 formats were really just "paused" when told to stop, so setting the volume afterwards would result in resuming music that was meant to be over.
- ambient/background sfx volume not being set
52594bfc7
The recent removal of "digi_volume" made all background sfx play at full volume. Fixed that.
Additionally, fixed a bug in the sound dialog that skipped the first sfx when adjusting currently playing sounds to the new volume. That first sfx is often a background sfx.
Editor
- combo animations not resetting after using combo selector in dialogs
99ab2ae95
Tests
The following are the changes since 2.55-alpha-120:
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.
Cap max default size to 2x
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.
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.
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.
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%.
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.
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.
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.
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.
Turns out this never worked properly!
This fixes a crash caused when a sprite deletes itself in middle of its animate logic.
When scrolling, this function could be told to grab a line of the bitmap memory outside its bounds, which resulted in a crash.
Due to a bug ogg and mp3 formats were really just "paused" when told to stop, so setting the volume afterwards would result in resuming music that was meant to be over.
The recent removal of "digi_volume" made all background sfx play at full volume. Fixed that.
Additionally, fixed a bug in the sound dialog that skipped the first sfx when adjusting currently playing sounds to the new volume. That first sfx is often a background sfx.
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.
This didn't seem to break anything, but it showed up as a difference when comparing registers from JIT w/ non-JIT.
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.
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.
This fixes a crash in Panolpy when reading a specific sign.
The Resolves MSVC release mode bug: asmjit/asmjit#427
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.
You may still activate this with We may introduce a proper debugger in the future for ZScript to serve the purpose the ZASM debugger tried to.
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 BTW - ~6 months ago OGG was changed to use Allegro 5 instead of 4, which means at that point 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.
These replays should be trivial to update as needed, and using no replay compat code makes them far more useful for verifying specific features.
Apparently vcpkg has issues with retaining build assets long term. Being forced to update to latest as something we need expired.
To enable scripts to work in 2.55 and in a future release with z3 scrolling, we are adding a non-functional
For example, if a script uses Expand changelog
Features
90085dd84
de1cb2b66
5f829d628
27c41e1f2
Player
9ce509792
05449497b
Editor
05188bddf
cbb1ee991
2f0f07d43
bcf109db2
f207fda3f
0a53ec393
a One-Hit Kill via the whistle. Uses CSet 7
356066ed5
ZLauncher
0269d0102
47b273d89
[ZLAUNCH] window_width, window_height
in zcl.cfg
Bug Fixes
b379a0ed9
c92f096a0
84d7f07e8
ab92b22e7
ced3bfb71
e846caa2f
172c7a5ef
45dfdd547
d06f44a33
80845040c
a29918a05
883c2305c
f1e3c5bcd
96c306004
33bb31162
76091a598
2264bb083
1b44e3b2c
915670436
dc548320e
8c74b7296
c702f24fc
981c6c1f9
e9d91d8fa
Player
0aef5384b
8a798d0dd
b24044c87
d90410dcd
437c27b25
9274a675b
f8222be89
2bbf51a02
8da01272a
498f70f46
b11265992
fed7aab0b
019c880c6
9346ac6a8
3a4e16d4b
5dd96666e
049532ccd
7601d2fb7
0de39b360
f30fd983f
6e204d4fc
825844706
603e96444
db4cf98c2
79564453f
e8edc34e9
adca2b376
c32a29d1d
7ca93107b
2b3c4119d
870510c96
3e6fe6e05
a3bc81309
511934cea
99675afa2
8f4b63428
b618eb983
381583118
646ef8f08
0dd159abb
c1d9c1dca
1a9273955
111569113
d2472cceb
f90cb0253
ed4afb985
07dddb5e9
fad67d962
76f952fc9
45bf325cb
8a4f7cf2e
2d8a18875
1f38de5b0
8b10722d8
601cba74f
548c3e15d
07dfbbe3f
f3b34561f
994d743dc
52594bfc7
Editor
69948f334
983a17add
fed7b7732
0b9bad2a6
409abe1ff
17852c009
d41040b13
1f05880ab
41a07b400
87cd522a9
f9852b3f6
92c190255
975602f22
5db531ab7
5497092dc
f2440669d
fadfe7d74
d3e276c4d
7009db89b
bcae99ea1
378766362
cc2cb75cd
2ed538d97
2a3eb96fd
e9ab158ae
b593e46bf
723c58ebc
53f324ae6
7f8d8236c
7ff03e46b
432dfe42c
80f94a9ea
06cee90fa
590e9f59c
99ab2ae95
ZScript Standard Library (std.zh)
7fc001530
ZScript
9d7c222dc
6058be2ba
74a81247e
7d0dc5299
0fc3edd39
180b66fc9
88f2ab405
504f87a71
e21ba53d0
e1b10e2a0
a08d4a149
2cfe2e472
77346b0c8
5659c8ebd
79079c766
c6e7c0205
f3e3f7ecb
c07f28f80
6251b0f23
f53af5295
ddf96eddd
83a3bc867
2a305c182
6d260c7f3
Web
af524e98f
8b5eaf56d
e006c07a7
9e4c8a90f
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
f55a272d0
8bfb995e0
9dc086113
bd084e245
569adf358
Build
a6c345e5a
a5254efa0
65ae72c6d
Refactors
74bbc05b7
d0864dc8d
f827b35bb
663e4dacf
cb8f87135
df3b5ab5b
cf9942aca
Player
244b8cad0
f3d40e0b7
c4f5c11ae
534d82e91
377981e09
[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.
d57d0318b
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.
emusic_volume
sometime in the near future.
digi_music
no longer had any effect on OGG volume.
9a6ae020b
Editor
34b7addff
ZScript
9ee5c4ba8
267bd5af2
28fe49bc6
ce8062e19
Tests
62165c822
487351025
218609b0b
ae45b645f
0e35a067e
ce9e615a7
2bdc2354a
a56646b40
08c75565d
9ca544889
804520e40
3c162e5b2
0a0826577
ee98991df
3b0da67b4
d69ad2aaa
297b5433e
35da8a5eb
42b94c785
b1309cc47
9807de3e7
8970b2cbd
CI
00f89c2c7
9413f492c
69740f37c
2eb360aa3
Misc.
6fb7e9304
5a4663794
7022b0ee4
5ae6e3d64
ac0017e2a
e8b85365d
599d6f70c
32bf8f42f
22a5c9c73
Player
0f4e8a00c
069e15113
5870d858b
Editor
af954f385
1b058a4b7
a4503c640
7ac1da426
ZScript
1b0d63bfa
83f9d2d03
403c19750
Region
:
Region->Width
: width in pixels (today, always 256)
Region->Height
: height in pixels (176)
Region->ScreenWidth
: width in screens (1)
Region->ScreenHeight
: height in screens (1)
Region->NumCombos
: number of combo positions (176)
Region->ID
: region id (0 - meaning just a normal 1x1 area)
Region->OriginScreen
: top-left screen in the region
Region->GetScreenForComboPos(int pos)
: given a combo position, returns the screen index associated with it
Region->TriggerSecrets(int screen_index)
: trigger secrets for given screen. The screen must be in the region
Region->NumCombos
instead of 176
to iterate all the combos in the current area, it will work in both regions and non-regions. Additionally you should use ComboAt(x, y)
rather than anything else to translate between pixel coordinates and a combo position.
81cd99579