2.55.7
View a summary of what's new in 2.55.
Features
Player
- show save path in game details view
213a7da40
Editor
- add "Auto-Save" and "Auto-Restart" options to test dialog
947bf60c3
The test dialog no longer prompts you about unsaved changes. Instead, a new option in the dialog "Auto-Save" will save for you just before launching test mode. This defaults to on, but can be disabled.
Additionally, the existing "Auto-Restart" option was moved from the launcher to the test dialog, where it belongs.
- show error reason when failing to load quest
d722f60f3
- dense forest autocombo mode
bf032786e
- extension autocombo mode, for resizing things along one axis
0cd0fdd0b
Bug Fixes
- mapscr::numFFC() no longer returns 1 when there are 0 ffcs
8219f9537
- issue where double clicking could stop working in lists
7ceba6735
- load NES tiles for old quests without tile data
197b5d43b
Some 1.90 and older quests save no tile data if they just used the default NES graphics. That broke sometime around 2.50, resulting in crashes or random behavior when loading these rare old quests.
- [mac] Change all CTRL shortcuts to CMD, and allow CTRL in hotkeys
c01ae362a
The hotkey system already used CMD instead of CTRL, but many old allegro shortcuts were still checking CTRL on Mac (like copy/pasting text). Now they use CMD.
Also, can now use CTRL when configuring hotkeys on Mac.
Player
- for old quests, darknut shields no longer incorrectly break when hit with hammer
19a3a2ea5
- supress Z_eventlog when game is not active
fbadf441c
- improve error handling for saves in titlescreen
471691cd8
- When loading a save file failed, the program would exit. Now an error message is displayed
- Previous places that showed a generic save-related error message are now more specific
- Fixed a few things that were causing errors related to saves when canceling during save slot creation
- Canceling the dialog that pops up after creating a new save slot now deletes the save, rather than it defaulting to classic_1st.qst
- New mirrors hanging the game when using their 'Block' feature
f7d89849f
- avoid crash on magic relections when sprite list is full
fe45f6764
- handle screen transitions on slopes in sideview mode
4e4531354
Slopes bugged out big time when moving between screens in sideview mode, shooting players across the screen. That is now fixed, but one should avoid starting upwards-stairs on the edge of a screen, as the player still does not traverse up it when entering from the other side.
Editor
- reenable floating selection for dense forest
287e74d84
- lifted duplicate combo and combo 0 restrictions from autocombo types that did not need them.
2f2dc2015
- reset animation in item dialog on selection change
a89fe8cae
- set track to 0 when updating dmap music
279fcd2fa
This prevents a bug where an invalid track could be selected when changing the tracker music file in the dmap editor.
- fix Preview mode not working when opened from top menu
c5190ea0b
- prevent crash when saving test init data
2469c962e
ZScript
- remove a bunch of unnecessary logging
5b9d5a992
- constants at script or namespace scope counting against the global variable limit
5f58b5423
- properly handle optional params not being compile time values
748697ca7
If an optional parameter was not a defaulted to a compile time value, the compiler inserted a random value instead. Now it will emit an error.
- fix off-by-one error in shopdata
27f4c5e8b
- show useful error message when single-quote char string is too long
ec93dabfe
- fix
combodata
Flag, NextData and NextCSet1aec2f4c6
These were never correctly implemented.
- remove bogus error log when using
ArrayCopy
f5afaae9b
Documentation
ZScript
- fix order of arguments in DrawString on webdocs
11c589a84
Refactors
Player
- improve how title screen assets are loaded
7b0e780a7
- Use
title_gfx.dat
instead ofdefault.qst
. This file is smaller and so is quicker to load (200ms -> 100ms on my machine) - Don't reload the assets if they are already currently loaded. Previously this file was unnecessarily loaded multiple times while simply navigating the save select screens
- Use
ZScript
- remove unused ->ScriptEntry, ->ScriptOccupancy, ->ExitScript
a7f06c78a
- always show script context when logging errors
48f515d04
Previously the "Print Script Metadata on Traces" QR had to be enabled to show what script caused an error. However, this context is always useful for debugging and so should always be displayed.
2.55.6
View a summary of what's new in 2.55.
Features
- configurable charge step for enemy rope walk style (#953)
f01c2d522
If "Walk Attr." (aka misc attribute 10) is >0, enemies with the "Rope" walk style will use that custom value for the charging step.
- use allegro 5 for DUMB tracker audio (mod, it, s3m, xm)
c8c5d3569
The listed tracker formats now support setting loop points in the DMap Music tab, including setting the speed / position in ZScript. Note, the only enhanced music formats that do not support these features now are: spc, gbs, vgm, gym, and nsf.
This also happens to fix an issue where tracks that have builtin loops were incorrectly playing silence before looping.
- support delete keyboard shortcuts for most text controls
e6a3ff822
- Ctrl+Backspace (Mac: Opt+Backspace) - deletes from cursor to next word boundrary
- Alt+Backspace (Mac: Cmd+Backspace) - deletes from cursor to beginning of the line
Bug Fixes
- improve key input latency by simplifying d_vsync_proc
cbf5f0eb6
- call allegro_exit before exit to avoid rare hang seen on linux
d9b0b8d67
- generate correct version string for 1.92 quests
24de952ee
- ctrl+a,c,v work again in text fields
4280a7ef5
- use correct conversion from 6-bit to 8-bit colors
db551f976
Multiple places converted 6-bit colors to 8-bit by just multiplying by 4, which is wrong (ex: 63 * 4 = 252, but 255 is expected). Now we use a lookup table. This fixes:
- The hex color shown in palette and tile editors
- various components drawn in the editor (like the minimap)
- exporting jpg images
- prevent crash when deleting all text in some input fields
b492be6b3
Player
- Damage combos with Custom Damage not working on FFCs
cdf6736b5
- correctly restore sword/potion/triforce items with fairies in pre-2.55 quests
0a5af9c70
- restore palette after wavy effect
4c9bb4688
The wavy effect was leaving the palette slightly off what it should have been, which was making the colors slightly saturated until the next time the palette changed.
- do not ignore replay forever if save has not been played yet
5315b9e8f
- draw decorations correctly during scrolling
98ca34d88
Some decorations (like combo sprites) are drawn without the correct offset during screen scrolling, and worse were not disappearing after the end of the scroll (not until its animation naturally finished). Now these decoration sprites are drawn correctly during scrolling, and get removed.
- lockblocks on layer 0 no longer ignored in cave dmaps if locked door present
bacf7e3d9
Context: https://discord.com/channels/876899628556091432/1278165595321405554
- pause music when opening player data with cheat shortcut
bf75a402a
- avoid crash in Go To cheat by checking destination is valid
03db97be2
This cheat dialog expects you to input the screen number before any DMap xoff is applied, which can result in directing the game to load an invalid screen and crash. Now the screen is validated, and the xoff is displayed next to each DMap in the dropdown.
- fire trail weapons glow in dark rooms, just like flames
8b4b84d2c
Editor
- prevent dmap editor crash when map is no longer valid
3fdf19026
- prevent various quest report crashes
0be115688
- set the default values for patra's (2 and 3) inner eyes
5cba3160c
- reduce latency on combo page paste
35c4e18bb
ZScript
- scripts no longer use wrong context after many sprites created
1fe2717be
After 65536 sprites have been created without closing the player, the ID of subsequent sprites was too high for how the internal script engine stored the state for each script. This resulted in randomly using some other script's state, causing general mayhem.
- LoadDirectory always failing due to bad path validation
6cad0f194
Build
- upgrade to latest GME
9cbfda0c3
https://github.com/libgme/game-music-emu/compare/6b676192d98302e698ac78fe3c00833eae6a74e5...05a2aa29e8eae29316804fdd28ceaa96c74a1531
Refactors
- reduce amount of copying in readmaps
f64f9497e
This makes loading yuurand.qst 21% faster (2445ms -> 1927ms)
2.55.5
View a summary of what's new in 2.55.
Features
Player
- add opt-in automation for uploading replays
2cee0ae2a
When enabled, once a week replays are uploaded to a server when the program exits. Only replays of known quests from the database are uploaded. There is also an option to manually trigger this process rather than enabling it automatically.
Please consider enabling this, as it greatly helps out with development by allowing us to prevent bugs. This is important for any new features we add, but extremely so for the upcoming Z3 scrolling overhaul.
See
docs/replays.md
for more information about the replay system.
Bug Fixes
- avoid crash when loading midi using native file dialog
509bbf169
- capture allegro 5 systems logging in allegro.log
a91036ff2
- crash in native file picker from bad string
2f194bff2
- sprite drawing not deleting all bitmaps it created
98d5483a2
- crash when file prompt initial path has no slash
b8b24753f
Player
- kill all sound effects for passageways, item cellars, and when stepping out of a warp (#942)
4f6c66419
- [windows] save path being cut off in log
bea620a61
- resolve replay qst against quests dir, handle missing file better
507ab28a1
- prevent replay save from happening on title screen
728fb9c4a
- also save replay when selecting Quit Without Saving
5ee702ed0
- shadows for rocks and boulders not drawing
23ead9542
- side shield flags on npcs being flipped when facing left/right
957326fb7
Editor
- [windows] Load Tileset with native file dialog no longer busted
55d043f0f
- wording consistency issue (
trigger
should refer to theTriggers
tab)08f705958
- some number entries (using SWAP_ZSINT_NO_DEC) being broken.
dd7ba17db
Notably fixes many spots in the "Insert SCC" dialog, and some in combo wizards.
- death/spawn sprites not properly updating on tile move
b2ad04786
- mark ffc count dirty when using Paste Special > FFC
fb8c31b60
This was preventing FFCs from being retained on a screen when using the special FFC paste mode.
- restore proper animation speed for combos in screen view
32edeb2f5
ZLauncher
- remove defunct "Allow Multiple Instances" option
e84d5e849
Build
- upgrade allegro
e00aabb87
https://github.com/liballeg/allegro5/compare/549f189df3408bba27524763289545f20771c3b0...c6b10fff225a0c94e2785e2e2d6d99a2f068ccf4
- enable type-limits diagnostic as error, fix many issues found
b94cfebea
Refactors
Player
- remove epilipsey dialog on fresh install, add toggle in launcher
9b68154d0
- remove prompt about recording when starting a new save file
f0d809b6f
Editor
- add sub-menu for changing tile color depth
d94402f04
ZScript
- remove unused greyscale and monochrome filters
253b4246a
Removes these methods:
Graphics->Greyscale()
Graphics->Monochrome()
Game->GreyscaleOff()
Game->GreyscaleOn()
None of these are used in published quests,
Graphics->Tint()
andGraphics->MonochromeHue()
can be used instead, and removing these simplifies some rendering logic. - remove option to configure run function name
561bb71a6
Misc.
Player
- add qst_title, qst_hash as replay meta fields
dd5d65044
2.55.4
View a summary of what's new in 2.55.
Features
- add 'Note' item wizard, notes can play relative strings now
b55a47b39
- add enemy flag to control if affected by "Kill All Enemies"
b102f3fb0
- add option to use the native OS dialog to select/create files
5953252f5
A new button allows using the OS dialog to select/create a file. This can be used directly by setting the
Native File Dialog
option in the launcher.
Editor
ZScript
- allow function return and parameter types to use
[]
9a797f67c
This doesn't enforce array types, but allows 3.0 scripts to be backwards-compatabile with 2.55
Bug Fixes
Player
- npc scripts for many enemies ending after one frame
5c44cb6ba
Enemies larger than one tile use a different code path than other enemies, and that path was mistakenly only allowing scripts to run for a single frame.
Editor
- prevent invalid string access resulting in crash
a29a80185
ZLauncher
- hide update tab on linux
843167862
Build
- add cmake install commands for linux
139839098
- update GME, which should resolve the final gcc build issue
154ac73e7
- set default install folder on linux to ~/zquestclassic
b982a1f5a
- generate changelog when doing linux install
592236643
Refactors
- remove expensive busy loop in render throttler
218b38ec0
Replaces a busy loop with a much cheaper mutex condition variable to control FPS.
The
maxfps
option now works for values less than 60 fps.
Player
- add cache to generation of translucency tables
10d8b84c0
This took up a lot of CPU time during the titlescreen and during animations such as screen wipes / triforce pickup / etc.
ZScript Standard Library (std.zh)
- delete unused and unwanted stuff
5291c4cd2
These files have been deleted from the
std
library:- std_zh/assert.zh
- std_zh/astar.zh
- std_zh/infostring.zh
- std_zh/math.zh
- std_zh/std_legacy.zh
- std_zh/std_meta.zh
- std_zh/std_update.zh
- std_zh/std_user_defs.zh
- std_zh/std_vars.zh
- std_zh/weapon.zh
These files either do not belong in a standard library (too specific), are not finished, or otherwise provide little to no value so are just a maintenance burden.
ZScript
- reduce the scripts included by default
0891e663c
This removes some scripts that aren't useful, or aren't a good fit for default inclusion.
- delete
gameover_menus.zh
- delete
LISP.zh
- delete
Music.zh
- delete
sprites.zh
- delete
styles.zh
- delete
theRandomHeader_v2.zh
- delete
ZVersion.zh
- delete
tango/1.0
andtango/1.2
(keeping just 1.3) - move
sram.zh
todeprecated/sram.zh
- move
theRandomHeader_v3.zh
todeprecated/theRandomHeader.zh
- move
time.zh
todeprecated/time.zh
- move example scripts to
headers/examples
- remove
std
includingEmilyMisc.zh
- include yourself as needed
- delete
Tests
- add newbie_boss.zplay and recompile test
094702d13
Misc.
ZLauncher
- remove tounge-in-cheek tooltip from Fullscreen checkbox
d672593ca
2.55.3
View a summary of what's new in 2.55.
Bug Fixes
- correct the version string for 2.55.x releases
387e6c05c
- incorrect default right string margin
ae1c890e7
Player
- visual text bug in sound panel
32a169b2f
- active shields interacting with light beams while inactive
7e52830f0
- reset playing_field_offset at beginning of scroll
5e1f431eb
This prevents the draw offset from a quake from persisting during a scroll.
See https://discord.com/channels/876899628556091432/1238226802867048529
Editor
- "Used Tiles" completely failing to calculate
4066823d5
ZScript
- TraceS parameter not compiling correctly
2761eb50b
- handle engine subscreen in ScriptTypeToString
150aafa9f
- dealloc owned objects for all combos in loadscr
e9438011a
For some reason, only the combo at position 0 had its owned objects deallocated when loading a new screen. Now they all do.
Documentation
Editor
- touch up attack/whimsical ring help text ('damage' -> 'power')
9879b835f
Refactors
Player
- rename the "ZScript Debugger" to "ZC Console"
719738e74
ZScript
- remove ZASM debugger
b3b79f66e
This was already made inaccessible from the GUI in 1da2d02, but now it is removed entirely. Work on a real debugger will begin soon.
- tweak
Region->
and screen script internals in preparation for z3e02113363
Region->OriginScreen
is now of typescreendata
, andRegion->OriginScreenIndex
is added to return just the screen index.Similar change made to
Region->GetScreenForComoboPos(int pos)
. - use faster register allocation in jit
c6da3fe63
asmjit's register allocation was using a bin-packing algorithm. This turns out to be very slow for the assembly that our jit compiler emits, since the vast majority of variables exist for only a single basic block. Instead of bin-packing, the much faster and simpler linear scan register allocation algorithm is now used.
For a very large 200k-instruction script, compilation went from 19.5s to 2.8s (a 85% decrease).
With this improvement, the 20k-instruction limit for jit has been removed. One example of the impact of this is that
yuurand.zplay
, which the jit compiler was previously mostly disabled for since most of its scripts are huge, now has all its scripts compiled. This increased the average FPS foryuurand.zplay
from ~320 to ~2000, while still reducing the total time spent compiling.Theoretically this change in register allocation may produce slower runtime code, but there was no drop in FPS realized in the
maths.zs
stress test.
Tests
- add eiyuu.zplay
b119635bb
2.55.2
View a summary of what's new in 2.55.
Features
Editor
Bug Fixes
- Improve dropdown numerical search
e9e127f73
- update 'default.qst'
aa948b117
Several default subscreen fixes (some by P-Tux7, some by myself)
- reduce sfx buffer to decrease lag caused by e7c214e
ef8ce36a9
- removed flag that was breaking mod playback
b7ac0c6a8
Player
- hardcode 120 for zscript alpha register
80b70b43f
This fixes some quests that only look at the alpha version and, seeing it was now 0 presented an error message to the user.
- 'delete' within a destructor being buggy
3c86a76b8
- 'Spotlight' combos on changer/ethereal ffcs still shooting light
c04ea1ba6
- fix buggy color flickering on big player sprites
bb644e0c8
- some variables being improperly reset on 'Continue'
489e32212
Editor
- 'View Map' favorite command skipping menu
0a21ba8ff
- avoid overwriting screen bookmarks on quest load
d1386ba10
- 'Gen Flags' being missing from combo advanced paste
a50934b68
- Crash in ZInfo menu if descriptions are long
cef01b5c1
- crash on reducing map count
ba8f2dfd5
- warp dialog selector mishandling negative dmap offsets
19917e9f7
- upgrade tile+combo 'move' code, more things now update on moving tiles/combos
6aae56ece
Also fixes some issues with 'undo'ing moves, and adds Combo Protection for in-use combos.
ZScript Standard Library (std.zh)
- update to remove use of 'deprecated' functions/vars
61cccce71
- 'TRIGFLAG_' constants were off-by-one at a certain point in the list
f2fc4df01
ZScript
- some array-related functions breaking for arrays >65535 in size
9c5d9aed4
- class variables not shadowing global vars properly
8d7658367
- some wrong error messages related to mapdata FFC access
9909f5c1b
- disallow casting custom objects to unrelated types
8a48221a9
A bug in type conversion allowed this code to compile:
Object obj = new Object(); int number = obj; int numbers[] = {obj};
The above code now produces a compiler error.
- handful of zasm commands using wrong name
960da1145
- handful of zasm commands using wrong name
40537d3ab
- Trace(string) using wrong register
d845df6a8
- wrong names for zasm npc InitD and item WeaponHitWidth
324d86cac
- various symbols with broken compiler output
982ec4d75
- npc->Attack()
- npc->CanSlide()
- npc->ConstantWalk(int[])
- npc->ConstantWalk8(int[])
- npc->FloatingWalk(int[])
- npc->HaltingWalk(int[])
- npc->HaltingWalk8(int[])
- npc->isDead()
- npc->NewDir8(int[])
- npc->Remove()
- npc->Slide()
- npc->StopBGSFX()
- npc->VariableWalk(int[])
- npc->VariableWalk8(int[])
- Trace(char32[])
- remove some unimplemented symbols and correct some types
fd4e4b434
Documentation
ZScript
- add documentation regarding 'Hero->Warp()' and its return square
b90683ccb
Refactors
ZScript
- better 'read-only' compile warnings
a58cf4f05
- deprecate many getters/setters, replace with variables
7a20dab49
~40 built-in methods exist in this style:
int Max(); // Returns the max. void Max(int value); // Sets the max. int GetCurDMapScreen();
These have been deprecated and replaced with a variable, like so:
int Max; // The max number. int CurDMapScreen;
Tests
- add tests for read-only vars and deprecation
d8d56745e
Misc.
- update themes
702396d7f
2.55.1
Features
- include The Deep quest in release package
db28a4c7f
Bug Fixes
- generic script InitD[] not working at all
cf430d9ea
- increase sfx buffer to prevent "Out of buffers" log spam
96833f2d8
Player
- improve replay stop process for update mode
3a97716b4
- check if save slot is valid before loading
d6cefc9da
- fix crash in Options>Snapshot Format
b41a7134d
Editor
- minor typo in Export DMaps title
99f775c1f
- correctly handle variable length title in all dmap reading/writing
c9f4ab06b
6bd8a9a added support for variable length dmap titles, but only for the main dmap reading/writing code. This functionality is duplicated across dmap import/export and other places, but wasn't updated.
ZScript
- verify first index for screen_d
9edf63b54
This fixes a crash in Titan's Gate.
ZLauncher
- "Static for invalid data" option not working in zlauncher
0e11d6c12
Tests
- include palette in gfx frame hash
dd1c45ffd
- fix hash for compare replay image dedupe
e5b86f3c3
The previous hash did not take into account the image format's color palette, so hash collisions prevented some failing frames from showing.
- fix --split-threshold cli arg for split_replay.py
71f99233d
- add the_deep.zplay
d2d5c9138
- add enigma_of_basilischi_island_basilse.zplay
a48f508e3
CI
- upload releases to s3 bucket
86707c7d6
Misc.
- add min replay size threshold when splitting replays
3b76d7982
2.55.0
View a summary of what's new in 2.55.
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
- various updates to default.qst (File->New)
0a53ec393
- Add sideview swimming tiles
- Add charge-swimming sprites
- Add Bunny Link - this required expanding the pages per LTM from 1 to 2
- Add BS/Z3 swimming tiles
- Add the missing enemy tiles from Outlands
- Magic Pols Voice now uses CSet 10, to make room for ...
- Add Whistle Pols Voice: blocks arrows like a Magic Pols Voice, but is a One-Hit Kill via the whistle. Uses CSet 7
- Improve the lifting and holding sprites
- Improve Z3 Octorok tiles (Slow Fire and Bomb Octorok)
- Update credits on page 109
- Convert Bug Net to use 4-bit colour
- Fix enemy bombs using CSet 6
- Delete unused scripts in the tiles
- Delete unimplemented Sprite 088 (Firework)
- set test_mode_record option in test dialog directly
356066ed5
- export/import strings to .tsv text file
1e1af9db1
Allows for exporting strings to a spreadsheet, text editor, or other program for modification, then importing them back to ZC.
The first row of the
.tsv
(tab separated values) file are the column names, followed by an example row to designate where the first three lines begin and end for each string (but you can add more lines than that).For best results in a spreadsheet, "Freeze" the first two rows and use a monospace font for the "message" column.
Example: https://docs.google.com/spreadsheets/d/197-NSvNQJ174Ri9GVlxYDX4oFp8w1SZbmOXuDohKZZk/edit?usp=sharing
- fix some tiles in default.qst (File->New)
e342a0335
- Fix wrong assignment of lava drown tiles
- Delete redundant diving tiles in Z3 player tile pages
ZLauncher
- set save folder
0269d0102
- add options for window size, and cap max default window size
47b273d89
[ZLAUNCH] window_width, window_height
in zcl.cfgCap 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 https://github.com/liballeg/allegro5/pull/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
- for replay mode, whistle sfx pauses game for number of frames proportional to sfx length instead of 0 frames
1f38de5b0
- hero action "swimhit" incorrectly unset due to broken isSwimming() check
8b10722d8
- combo cycling reset too early for animations with frame skips
601cba74f
Turns out this never worked properly!
- defer deletion of sprites to end of animate logic
548c3e15d
This fixes a crash caused when a sprite deletes itself in middle of its animate logic.
- prevent OOB access for darkroom ditherrectfill
07dfbbe3f
When scrolling, this function could be told to grab a line of the bitmap memory outside its bounds, which resulted in a crash.
- 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.
- various slope improvements, like fixing ffc slopes
f80e024ca
- fix mirror shield not resetting the last used mirror combo position
2c375403a
- save select screen not showing new hp after save->reset
8d15352e5
- load default quest for sfx when loading replay
4bc56aef2
Quests before custom sfx rely on the default quest providing sfx, but that wasn't being loaded when playing back a replay. So it would either use whatever the last quest loaded, or have nothing, which was the case for the replay test script.
- use correct graphic when holding up purchase from bottle shop
03d123012
- apply BS swim sprites compat rule to Zelda 3000 qst
5f7ab3c23
This QR is applied to all 1.90 quests, but Zelda 3000 was saved in 1.92 and this visual bug was overlooked.
- consume button presses in subscreen menu
23f44b9f6
The subscreen refactor ~6 months ago resulted in button presses not being eaten. One side effect of this was the item selection sfx playing for every frame the button was down, instead of the intended one time.
- ZC menu options render/get disabled correctly
571460f7a
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
- error message on failure to load enhanced music in the dmap editor
06cee90fa
- skipy broken in combo preview animation
590e9f59c
- combo animations not resetting after using combo selector in dialogs
99ab2ae95
- weapon type names drop down being empty
53cdacc3d
This broke from recent addition of reflected arrows/fire (e3b23aa)
- hide unimplemented enemies
875589f19
- handle error instead of crashing if package export fails
53f7a7253
- stop clearing screen when editing palette
47aaddd62
Since the render refactor, we haven't needed to clear the screen when changing palettes, since this dialog is rendered to a different bitmap than whats in the background.
- 'Load Tileset' not applying compat fixes
0fdad2857
ZScript Standard Library (std.zh)
- DMFS_ constants being off-by-one
7fc001530
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
- handle out of bounds for Game->LItems[]
6d260c7f3
This fixes a crash in Panolpy when reading a specific sign.
- return enemy x,y when getting fairy item x,y
6e60fe889
Setting
item->X,Y
on fairy items additionally sets the position of the corresponding fairy enemy sprite. However, the getter returns the item coordinate. This resulted in unexpected behavior from something harmless likeitem->X = item->X
causing the engine fairy movement to halt. - fix sideview sprites becoming unable to jump when on the ground
673eb859d
- compat rule for old sprite jump behavior
2b7275305
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 insaves_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
- fix 'subscreendata->PosDirs[]' being misdocumented as '->Poses[]'
4bee8e505
Build
- fix missing libpng for web build
a6c345e5a
- fix missing libogg for web build
a5254efa0
- upgrade to latest asmjit
65ae72c6d
Resolves MSVC release mode bug: https://github.com/asmjit/asmjit/issues/427
- add default file for compiler "signature"
26e8cd4db
This is to make the build just work in a clean checkout until I get around to removing this pointless thing altogether.
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
inzc.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 applyemusic_volume
(enhanced music) to all non-MIDI music, sodigi_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
- clean up ScriptEngineData for all script types
ce8062e19
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
- add dinus.zplay
9807de3e7
- add grassland_attack.zplay
8970b2cbd
- make the editor File->New test do what it says it does
f0b6972ea
- add goriya_moblin_war.zplay
bbce9f9fb
- update test_compile_and_quick_assign to compile replays/scripting quests
1084e5c54
This is the first of more planned script replay tests, which along with the playground.qst replays will be re-compiled with the latest zscript in CI and their replays re-verified. Should result in better test coverage for newer compiler features.
- add 100_rooms_of_wisdom.zplay
a59b6141e
- add dragon_ball_z.zplay
27e215665
- add new_beginnings.zplay
27424bb8b
- add kriztles_3.zplay
eb92a96b4
- add final_fantasy.zplay
2b5572cce
- add zelda_3000.zplay
145976d57
- use original qst for combo rotator replay
3552ee8f5
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.
https://github.com/microsoft/vcpkg/pull/30546#issuecomment-1819985146
- 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
- remove tilesets/classic.qst
21bf6b417
The default quest (File->New) makes this not necessary.
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
- disable auto save for new, unsaved quest
cba0be860
ZScript
- internal label errors now prevent compile
1b0d63bfa
- add 'itemdata->LAttributes[]' to access attributes as a full 32-bit long value
83f9d2d03
- add Region in anticipation of z3 scrolling
403c19750
To enable scripts to work in 2.55 and in a future release with z3 scrolling, we are adding a non-functional
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 regionRegion->GetScreenForComboPos(int pos)
: given a combo position, returns the screen index associated with itRegion->TriggerSecrets(int screen_index)
: trigger secrets for given screen. The screen must be in the region
For example, if a script uses
Region->NumCombos
instead of176
to iterate all the combos in the current area, it will work in both regions and non-regions. Additionally you should useComboAt(x, y)
rather than anything else to translate between pixel coordinates and a combo position. - mark combo->CSet deprecated, in favor for the better named ->CSet2
81cd99579
2.55 Alpha 120
Features
- Add 'Screen->Data[]', 'Screen->DataSize' script data array for every screen.
b080de56c
This data array can be edited in the 'Screen Data' dialog, and all changes made by scripts are saved to the save file.
Init Data
dither pattern picker/previeweref1e3e5f6
- fade out the background behind dialog windows
ba6344865
- 3 new dithering styles
8b7aa8ed7
- customizable 'ShoveOffset', add zfix round-direction handling
809119087
- FFC 'Platform' flag for moving platforms (to pull the player along with)
3fb03f0b0
- Crumbling Combos (crumbling floors)
5ac8fd1ee
- Customizable sword tapping sounds (in Misc SFX and combo editor)
b4eb8aa23
- customizable flicker speed and color for enemies and player in init data
8a18af11e
- allow conveyors on all layers + ffcs (QR)
4d9976b23
- Add itemsprite->NoSound
65c4a5d61
Disables the pickup sound for an item if true.
- add itemsprite->NoHoldSound
1bc071fcf
- add configuration for snapshot image scale
d4a3aa3b8
- set default snapshot scale to 2x
a57ecc4dd
- Allow weapons to change sprite when lit on fire
b727121cb
- Add 'ExDoors', similar to 'ExStates', but directional. Carries over to adjacent screen.
Relevant changes:
Player
- added a setting to put a limit on 'uncapped' FPS so the game still runs at playable speeds
5f9a3d367
Editor
- Pressing 'esc' while zoomed in on the minimap now unzooms (instead of trying to quit zq)
918cdafca
- 'Insert SCC' button in the string editor now respects the caret position
c706b3af3
- made enemy editor InitD compatible with script metadata
8c0e4b37b
- add zooming when grabbing from image
26019c058
- added angular tile block rotation option to the tile editor
24e46ffb2
- added buttons to the dmap editor to preview enhanced music looping
1822e0e47
- view script slots dialog
4cd827e73
- Combo Pool Pages dialog
25ae10290
Dialog is modular, should make adding future pages dialogs much easier
- Auto Combo Pages dialog
259419630
- allow customizing invalid checkerboard color
26ea8b84c
- Combo Alias Pages dialog
6e0636de7
ZScript Standard Library (std.zh)
memcpy
version that only takes 2 args (auto-determines size)3bb11dda8
ZScript
- script access for extended dmap titles and new dmap intro string IDs
21c168a1b
- GetTilePixel(), SetTilePixel(), and Is8BitTile[]
b9b290a14
- 'Screen->GuyCount'/'mapdata->GuyCount' for read/write enemy respawns
340d55b9c
- script access for player and enemy flicker and flash effects
4a1bf1223
ZUpdater
- add release channel to builds to specify where zupdater looks for updates
bb9023ea8
This adds a "channel" configuration to releases that limits what releases the updater will consider when looking for new versions. This allows us to configure a "2.55" release channel, and prevents the from updating into 3.0 releases while still allowing it to grab new releases from 2.55.
This is necessary long term as it allows 2.55 users getting easy bug fix updates without moving them to 3.0, which should only be done explicitly.
Web
- include cambria tileset
34580b86f
Bug Fixes
- wavy/cancel compat not being set
2f0fe8052
- a couple small things related to script access of subscreens
d120f2c3a
- 'Newer Player Movement' corner-shove works better with off-grid solids
1695530d3
- Init Data dialog sometimes being too tall
ed36204f0
- use cross platform clock for text edit proc
e6bdfb99d
- issue more vsync in old gui proc as needed to catch up
5add82df0
- [mac] only check for
.app
to allow for app bundle to be renamedb393e5875
- set size when making dlg layer to avoid crash
6d47e8136
- minor dialog hiccups in some circumstances
02764be1b
- crash on viewing 'Fairy' flag help texts
62bfe66d4
- dialog windows in background popping out on tab-out
e7dbfacdd
- tooltips staying open over dialog windows
fadfa27d2
- use steady_clock instead of system_lock to measure replay duration
d3e8e7fcc
- [mac] handle CMD key press and allow CMD for all places CTRL is
e45016fb2
- a couple crashes/dialog oddities
c577892d9
- add proper versioning for init data deltas
fdd6da3c1
- Crumble type now uses 'Continuous' as a checkbox, fix wizard for Crumbling type
020466990
- various issues with the default display size for windowed mode
20f6fa908
Instead of using the monitor scale / DPI to multiply the size we set the window to, it now looks at the monitor resolution and uses the largest integer multiple of the base resolution (256x240 for zplayer, 456x342 for zeditor and zlauncher). This always takes into account the scaling of the OS (the monitor width/height changes when you modify that). If a window size is saved from a previous run, it will use that instead -- unless it won't fit, then it goes back to getting the largest resolution for the given monitor. More details:
- Completely change how the initial display is sized for windowed mode. Instead of using the monitor DPI to scale up a base resolution, default to as large a resolution as possible while maintaining an integer scale. This particular commit retains the previous behavior for Windows, but the next one will move Windows to the new behavior (separate commits just in case a revert is necessary)
- Set the desired window size for zeditor before creating the display, not after.
- Use the base resolution in zplayer for the allegro 5 screen bitmap, instead of 2x the base resolution. Should improve rendering time a bit
- More reliable behavior on mac. Previously would possibly cut off top part of screen and mess up mouse events if the initial display height was bigger than the available height
- Set default for fullscreen option on Mac back to off. On newer M2 Macs fullscreen display creation is bugged. Fine for Windowed -> then Maximize, and fine for older Macs, but for now just set the default to windowed mode to be safe
- simplify display size for windows too
a049b6ce6
- set window title as early as possible to reduce flash of text
d7312b9dc
- mark render item transform dirty when changing parent
f59d8b314
This bug resulted in the tooltip / highlighter being offset when the window size changes.
- bomb equippability not respecting cost counter customization
c7ffbf652
- many issues with the 'Doors' dialog
6e97f2aaf
Also adds new '(None)' door type. The player will not 'auto-walk' when entering from a '(None)' door, and no combos are placed when setting one in zq.
- use simpler temp file creation for all platforms
5018d9e54
This should resolve problems with making save files observed on some Linux setups.
- ack halt/resume draw events from allegro
438a18c1a
Without this, the
[osx] allow_live_resize = false
configuration option results in the window freezing on resize.
Player
- fixed passageway and item cellar fade-in when "New Dark Rooms" rule is on
4748d9a89
- playtime not drawing unless scrolling
ddd3f26a1
I'm so mad at how dumb this was. Specifically, it doesn't draw if you have "subscreen over sprites" disabled unless you're scrolling.
- 1-pixel gap in 'show walkability' cheat draw
ee0eda1e2
- 'Newer Player Movement' corner-shove being far too lenient
d0e2908b1
- fix manhandla step speed calculations
60e9d9f41
- show previous changes in player data menu when used multiple times without unpausing
325834d44
- restore quest progression and skip names
804484ddd
- fix corner shove solidity
7c5c7c992
- set size when making info layer to avoid crash
5163053b5
- titlescreen hp offset when hp_per_heart != 16
31f3840e4
- Lift 'Special Item' setting wrong state
7215fd92d
- properly reset directory cache
8cacad3d5
- subscreens with item-overridden level items not properly displaying
913003180
- snapshot entire player screen for gui snapshot, which was missing a5 layers
8f416879e
- set game played to false to fix quest progression sword/health bug
be675976b
- fix conveyor stun and forced direction persisting past stepping off the conveyor
87bba7462
- set dummy flag when drawing temporary item
a4ed17065
This fixes a known bug in older quests that plays sfx repeatedly when picking up a fairy.
Editor
- fixed crash when opening preview mode
23ad85cfb
- made autocombos respect moving, adding, and removing combos
f8d89f5ad
- prevent crash when changing font
640378df8
- prevent data loss when grabbing tile from old quests
f8fdd7bb7
- qrs having wrong category name in search menu
5391348e4
- import maps was unhelpfully clearing everything
50c6377e1
The map import tool was checking if the first screen's
valid
field was a special value denoting it was "cleared" by the user. It's unclear whyvalid
holds this information, but presently it's not useful and breaks map imports randomly. - use cross platform clock for timing to fix combo editor animation
163f9a91f
- use cross platform clock for zscript compile timing
cde9a4688
- format zc_args.txt correctly
be4390661
- preserve screen bitmap
3d674f868
- prevent crash when rendering minimap during loading
4c7dfe677
- fix crash with passive and overlay subscreen settings
1c9b81f57
- 'Paste FFC' being slightly misaligned from the grid
8664554e2
- clear tooltip before entering square-placement mode
972e6919a
- test mode init data marking quest as "needs saving" extraneously
243088418
- mark tooltip dirty if text changes
164f77d33
- Fix palette desyncs (permanently?)
b5a7ee226
Should no longer need to ever manually 'rebuild transparency table'. As such, the default keybind for 'Reset Transparency' is now '(None)' instead of 'B'
- do not freeze screen bitmap while in pal dialog
95fac7ac8
- Tall Grass combo wizard dropset not setting flags properly
4732eb4b0
- prevent bad overlay when no tile is copied
5f76b78fe
- more tile page problems from 4-bit: scaling, overlay
1f65a0cca
- snapshot entire editor screen to include a5 layers
8cd737c5a
- dmap editor remembering wrong tab
1a264a262
- use consistent values for mouse coords when making tooltips
c716f13c3
ZScript Standard Library (std.zh)
- update ffrules.zh to include all new quest rules
cc67be852
ZScript
- 'subdata->TransClock' was not returning -1 properly when not transitioning
95edf1e5e
- fix slowdown caused by draw commands during frozen message strings
48511cdd5
- persist compiled jit functions when reloading the same quest
2bd7e877d
Game->CurrentItemID()
being completely broken9fc212abb
- mark destructors of base classes as virtual
29c39e15a
- do allegro 5 init before a4 init in parser
58e391f63
- fix SPRINTFA calling the wrong function
c49ed2840
Web
- remove unnecessary bitmap backup
9c309afab
This pretty much doubles FPS across the board. huzzah
- support both landscape orientations
8206a3008
Documentation
- specify what OS versions we support
080b61e10
Build
- simplify packaging script
ee5e02a1c
- use zlib as a shared library
d388d1a6c
- upgrade sentry to 0.6.6
749746d6d
- move some src/*.cpp files to appropriate static lib
e3038f133
- remove unused font.cpp
3bda28548
- upgrade to latest asmjit
2ede55147
- upgrade allegro
d5de2ebbd
https://github.com/liballeg/allegro5/compare/652684327236dfd23dcf6bf433fa9975212106b5...11a6425cae646c592f3086cda5f8c339296135fb
- auto generate changelog for alpha release
36085a914
Web
- fix renamed script
d79ef7d06
- remove post-processing by python script
f8b2af856
- include function names in release build, separate dwarf for debug build
fb44b2a78
- integrate web build into cmake
7dbb75dee
- fix missing zscript compiler caused by 7dbb75d
bbdb9be63
Chores
- fix many many typos of
it's
->its
a7e3cf4ec
- remove outdated or unnecessary docs and ZScript headers
81b871ade
Refactors
- memcpy the buffer in PACKFILE fread
8f547f8f5
This saves ~500ms on my Mac when loading Yuurand.qst
- speed up copy_tile / tilesize
01e13ec0a
- use safe cstr reading functions
b1a7b8d43
- add
bounded_vec
container type9edaa62a2
- render a4->a5 bitmaps in first pass
8ef8665a7
- reorder field initializer list to fix compiler warnings
8d64f8374
- simplify render tree drawing
b52d7eaea
This adds
prepare
andrender
functions to the RenderTreeItem class. Also makes them virtual so that new classes can be made to represent a render item. The minimap drawing code was moved to this.Consolidates the logic for when a render item is dirty, and moves allegro 4 bitmap handling into a new derived class.
- use a single bitmap for dialog tint
8a8ef4667
- add bitmap_flags to rti
6af0dcc23
- Init Data / Gamedata
acb7c8481
Change how Init Data is stored and saved to the quest file (and rearrange the dialog slightly) - Allow setting mcguffin level state for all levels in init data/cheats instead of just levels 1-8 - Init data health can be in HP instead of just in Hearts - Can set init values for script counters 26-100 (was missing before) - Change how data is stored and saved to the save file
- cache zasm script size
be7c81d3c
- move zcsound source files to src/sound
09dfea4eb
- remove zcmusicd.cpp
15628e6f3
- move ffc set data / changer out of ffc.cpp and to src/zc
3a6d2d394
This is the first step to moving
ffc.cpp
to zcbase. - cleanup combo position handling, optimize spotlight code
44cb8bb72
- cache config read for use_linear_bitmaps
4c922be5e
- remember previous screen clip for scrolling pane
7a8021809
- avoid copying combo everywhere
0ecfa71f6
- limit default window size to 3x the base resolution, and add a buffer so to always be less than the monitor size
2f6cf5a72
- unpack 4-bit tiles when quest is loaded
ff01c741b
This reduces CPU usage by ~3%.
Previously, 4-bit tiles were only unpacked just before being drawn. Unpacking means converting into a format ready for drawing, which is somewhat slow to do in functions as hot as tile drawing. Now, when a qst is loaded all 4-bit tiles are unpacked in memory. When saving a qst the reverse happens. This change has no impact on the qst file format.
- avoid copy when drawing tile without any transformation
973303a3c
This reduces CPU usage by ~7%.
- make get_qr faster by unpacking the bits ahead of time
990eb380b
This reduces CPU usage by ~5.5%.
- Split graphical weapon init code, in prep for ignite sprites
9ca67c7b0
- make tooltips simpler to install, and map prev/next tooltip
ca09be0e2
- remove unused single_instance
618d9986f
- minor combo alias optimizations/cleanup
8d1d73e44
Player
- do far less work in platform_fallthrough
8861f51f1
- do less work in run_gswitch_timers
78af21af8
- avoid costly script object dealloc when destroying dummy item
c22e9d68f
- use more accurate but slower tile drawing when drawing on edge of bitmap
c1601e941
- respect bitmap clip in tile drawing functions, remove usage of temp_buf in screen draw
a42586c11
- totally remove temp_buf in screen draw, and masked_blit
93f25b690
This refactor reduces CPU usage by roughly 6%.
This results in some unavoidable minor graphical changes for quests with the QR "Subscreen Appears Above Sprites" disabled. Specifically, sprites (such as jumping enemies, weapons, etc) continue to draw over the subscreen background as before, but now also draw over the individual subscreen UI elements. In most cases this looks better, and better follows what the QR text says will happen.
https://hoten.cc/tmp/compare-report-screen-draw-refactor/
- cache result of item_tile_mod, which saves 17% of CPU time
b3c942902
- remove accidental copy in run_gswitch_timers
9646be4b1
- show dialog when saving fails
2a571d392
Editor
- only draw tooltip bitmap when in use
ef146dede
- remove rests and use smarter fps throttle
3ca0a1208
Use the same smart FPS throttle that the player uses in the editor too.
This doubled the FPS in the Web version.
- draw minimap to smaller bitmap
df2602f85
Also add a callback to RenderTreeItem, which allows the main drawing code to directly render the minimap as needed.
- only rerender minimap when dirty
66d882141
- draw tooltips to smaller bitmap
50f1344a3
- move minimap drawing to render_minimap.cpp
042728610
- remove dialogs for deprecated modules and quest templates
0ebbc8450
- move tooltip rendering to render_tooltip.cpp
911019c55
- bah humbug!
21ecb9203
- remove pointless time code
d0549a3ed
- simplify tile copy during grabbing
eb1a43609
ZScript
- replace script debug_id with composite id (type, index)
8e6c48a21
The previous hack of using a global variable incremented in the constructor had strange behavior, and would result in different ids given when reloading a quest.
- use .contains instead of .find in jit.cpp
02dbb040c
ZLauncher
- group current version info in updater tab
986b27145
- open new website for release note buttons
1c8149e0f
- remove changing zmod in launcher
85ea325db
ZUpdater
- just query website for release channel info
a724610af
Web
- prevent script trace unless debugger is enabled
cf3ce065b
- stop excluding some slow-to-build dialogs in debug builds
452efb90a
Tests
- re-enable classic_1st.qst resave test
9065169e6
- expand resave test to include ss_jenny.qst
a92664884
- run replay tests concurrently
762ac2db5
- add playground_ffc_changers.zplay
c5f02cfb1
- pass correct value for frame arg, which was breaking --update
2cf6ae4c6
- recover from failure when downloading a release
6545e847d
- add --concurrency flag to run_replay_tests.py, and set to 1 in headful mode
df4644a4e
- set retries flag when getting baseline replays locally
27f017136
- remove diff from replay test run result
8ef2c1575
- support baseline prompt when providing existing test results on disk
492bc6b8b
- keep webserver alive for web replay tests. check for fatal errors
1af5883f2
- make test replays lazy files instead of a single giant download
f9fa641ef
- clear test result folders in python tests
d0147e77e
- for replay tests baseline prompt, only consider releases predating current commit
d026d8834
Editor
- add test_package_export
53d06c6f2
CI
- trigger web.zquestclassic.com deploy on release
c17ef05ea
- use clang 17.0.2 for linux
1d3ebb548
- add failing test results to tar for faster upload
78cf78184
- reduce amount of data uploaded when replays fail
f589ada7e
- fix archive step when there is nothing to archive
3869a0869
- run fewer replay tests for web, for now
ec906a94b
- specify bash shell to fix windows failing test results upload
ced10c828
- only consider ancestors when searching for baseline commit
69c4cf890
Previously it would only look at the main branch, but that does not support long-living branches nor multiple release branches.
- fetch all git history for compare job
c5f2a5b1a
- explictly ask for python tests in ci.yml, which stopped running b/c of f589ada
36666a369
- use all cores for replay tests on windows
3e2554782
- fix archive test results on windows
33be44347
Misc.
- include oneliners in changelog script
3bba771c0
- reserve dmap data in qst format for z3 regions
69784d2fa
- add README.txt to release package
1b30ef164
- log time it took to load qst
3ebdba27f
- collect quest ratings
e3ef8f63a
- change log of website to new domain
9d8e9239a
- remove ag.cfg
f0f80f38d
- add/clarify some info text
716ec391f
- clean up box_out popup
06bea6850
- update 'default.qst'
4b54dd752
- update references to old program names
9a3e56796
- allow '<:' in commit (similar to '!:'), to squash with prior commit in changelog
6ea35b2c7
Player
- set cont. heart beep default to off
9919433e6
- change ending credits from Zelda Classic to ZQuest Classic
31c7829ca
- use more user friendly strings for creating save file / continue screen
f2084a1a0
Editor
- add
-uncompress-qst
CLI command696657428
- make checkerboard bg in the tile editor align with the tile grid
2b681111a
- remove minimum for tooltip timer
c6c3f3203
- remove annoying beta warning
622e6daa5
ZScript
- Add compile error when trying to store temporary literals
e6296db90
- never compile scripts larger than 20,000 ZASM instructions
5986e6021
- print jit_log stuff to allegro log instead of stdout
3e720b62d
- highly priortize only frame-1 global scripts for JIT compiler
e8f60b40e
ZLauncher
- add support zc button
11ec92044
Web
- make quest url a bit friendlier
8aa27f494
- use gzip instead of allegro PACKFILE compression
dee67d885
gzip compresses better than allegro PACKFILEs:
And it's a bit faster to load a qst in the Web version when it doesn't have to decompress it. For Yuurand.qst, loading time (including downloading) from 17.4s to 14.5s
- better indicate download progress for compressed assets
3fb07895d
- support default open URL for tilesets
b1e6584dd
2.55 Alpha 119
Features
- subscreen scripts, ZScript subscreen access
Add 'Subscreen Scripts', which run while the engine active subscreen is open. Add ZScript types 'subscreendata', 'subscreenpage', 'subscreenwidget'
Relevant changes:
- feat: subscreen scripts, ZScript subscreen access
cb2d6b521
- feat: 'subscreendata' datatype implementation
64026507c
- feat: 'subscreenpage' datatype implementation
0d049c655
- feat: 'subscreenwidget' datatype implementation for shared vars
5e8e6dcc8
- feat: start 'subscreenwidget' datatype implementation for type vars
57649a824
- feat: more 'subscreenwidget' datatype implementation for type vars
9a8334236
- feat: more 'subscreenwidget' datatype implementation for type vars
5c0c1a9ef
- feat: finish 'subscreenwidget' datatype implementation for type vars
252033a21
- fix(zc): fix a couple subscreen drawing issues
e82b08532
- refactor: start implementing subscreen scripts
e19d0fda1
- feat: subscreen scripts, ZScript subscreen access
- lightbeams now respect solid ffcs/pushblocks (compat QR'd)
8555d9430
- 'Mirror (Custom)' combo type for customizable reflection
5c06dfcf4
- Spotlight combos work on ffcs, fixed lightbeam-ffc hitboxes
fd039e808
- Subscreen widgets now have unique labels, and display coordinates
4553336cd
ZScript can get a subscreen by it's label. Display coordinates are the coordinates that make up the bounding box rectangle for a widget.
- change grid-snapping on FFCs, blue squares, item square, etc
c4f28895e
Now, these all snap to the half-grid by default, but do not snap to the grid while 'Shift' is held.
- new DMap editor behavior where titles are no longer limited to 20 chars and intro strings use a string table dropdown
6bd8a9acb
Player
- add command "-create-save
" cc459c65b
- remove encoding layer for save files
a0c81ae88
Just like the previous work to remove the encoding layer for qst files.
Previous save files can still be read, but when next saved will no longer be encoded.
Should be a tad faster to read and write, especially reading in bulk as the title screen no longer needs to read the entire file to decode, when it only needs the first part of the file.
Also changes save file writing to disk to instead write to a temporary and move to the destination when done. This may prevent a source of save file corruption.
Editor
- 'Highlight Current Layer' option, when enabled dithers out non-active layers.
69267fb51
- "Open Tile Page" now saves which page was last opened
f6f3090e1
- options to control the size and color of the dither when using "Highlight Current Layer"
08be9cd24
- added cset to the autocombo preview, made autocombo engravings in the combo list draw over the selector
466c7b5ba
- added a popup when using an invalid autocombo explaining why it's invalid
da634dba1
- added a "Connect to Edge" flag to certain autocombos, changing how they interact with the edge of the screen
7e0ddb89a
- quick map view hotkey, 2x and 4x map scale
98ad766b7
- double click in text procs selects all text
d7f12e957
- option for tooltip highlight color (instead of pink hardcoded)
0036f21c1
- reworked double click in text procs to select by word
a3bfa4a75
- checkerboard background option for invalid data
39549c142
- changed the default size of some subscreen widgets to make them easier to grab in the editor
fd74a7a18
- dragged items in the subscreen editor can be snapped to the grid with ctrl
03274b2d8
- 'File->Load Tileset' to start a new quest from a tileset
211e53bff
- subscreen wizards for generating item grids and counter blocks
365e95fd2
- "connect to solids" flag for basic and relational autocombos
a28a3efa7
ZScript Standard Library (std.zh)
- add 'SF_LAST', convert SF_ constants to enum
053b63911
ZScript
- 'auto' variable declarations
1b06c63ea
- 'sprintf' will resize the buffer if it is too small.
bc9fc80f8
Visual Studio Code Extension
- update keyword highlighting
2dad50771
Web
- migrate to new database manifest and use CDN
5c823a081
- Quests and associated music are now hosted at data.zquestclassic.com, via DigitalOcean's CDN. This should make downloading faster.
- Add preloads for the manifest and the wasm
New format for quest manifest:
- Supports multiple releases of a quest (creating a new release each time the contents have changed). Currently always shows the latest, but when a save slot is first created it locks to that version. Later, will add a way to upgrade/alert user that there is a new version for an existing save
- Add an approval bit, so we can be granular about what quests are published and playable in the web version
Drive-by bug fixes:
- bug preventing saving files (see 2803f8 and 98f366)
- bug preventing editor from persisting qst file due to missing filesystem sync
- bug preventing copy/download browser local files from showing when user opts out of mounting a directory
- (for all platforms) bug that changes
.sav
files to use a relative path (to the configured quest directory) for the associated qst file, instead of an absolute path. Save files were portable before because of some non-trivial magic when resolving a qst path, but this makes it more explicitly portable
- reduce amount of preloaded data
24e1eee5c
zc.data is 5 MB now, instead of 15+
Bug Fixes
- active global script double-running due to warp script check
28d9aaf3d
- wrong 'maxdigits' on old subscreen counters
8c4b2b9b7
- fixed memory leak when changing enhanced music tracks
c9bcdb22a
- favorite combos corruption when loading 1.92 or older quests
cca598afc
- some small errors related to subscreens/subscreen scripting
d2721853c
- [linux] use /var/tmp instead of /tmp for save-then-move
2803f8fcb
/tmp is for files that are not expected to persist. When running under flatpak, a tmpfs is mounted to /tmp, so we cannot move files from that to a real physical drive. This resulted in saving failing.
/var/tmp is the better choice, since files there are expected to persist and so will always be a physical drive.
- [linux] for flatpak, create tmp file in app directory
98f366eda
- moveflags not set correctly for pre-2.50 enemies
58d73e0cf
- replays depending on wrong moveflags
8c359cdb3
not sure of a better commit title
- handle empty init data delta, which is when no change is made
ecb6e1bd7
- fix dmap title corruption
189d34c1d
- use correct subscreen font for PROP type
2bd4f84be
Player
- pushblock solidity inconsistency
58ea254ad
- oddities with pushblocks and pits/water
54f0de9a7
- sidewarps at edge of map not working with walk-through-walls cheat active
b4cc7cbb6
- Screen 0x80+ 'safe return point' bugginess
b53ee67ef
- 'Magic Containers' cheat not updating max magic soon enough to refill
7f9ee156d
- bugginess with push flags on 'Push (Generic)' combos
f10def353
- Oddity with swords/spin attacks not properly hitting triggers
ae7bf3e44
- remove accidental code that resulted in less precise sin even outside replays
0545938cf
- incorrect value for cos(90) in replay mode
2d46cdd1e
- fixed unresponsive input in SCC menus
e394d09cd
- fixed line heights after drawing tiles to strings with SCCs
f05923d8c
- check if A wpn slot when doing bomb deselect
9bc8776cb
This is a potential fix for a bug that prevents the sword/A slot from working after using the last bomb. The bug is very difficult to reproduce, so not certain to be the fix.
- Optimize light beams to be a loooooot faster
258029d87
- prevent crash when gamepad disconnects while configuring
761ab2c57
- handle trailing slash in quest_dir cfg option
06cd618af
Editor
- 'esc' choosing 'yes' in 'Really want to quit?' popup
f683887dd
- sanitize quest title for package name
e64f888d2
- allow spaces in package name
87519c7ea
- fixed crash in combo wizard for signposts
dd826371d
- fixed bugged inner bottom corner in DoR autocombo
22817644a
- right clicking autocombo combo panes no longer resets cset to 0
6300f4d89
- clearing an autocombo in the editor also clears args and flags
b71f9a3dc
- combo aliases with layers now flag layer screens valid
e09d0e3f9
- fixed out of bounds array access with the drawing mode menu
f8f4ea09b
- hopefully fixed inconsistent DoR autocombo behavior
ae6d73cd2
- improved DoR autocombos connecting with the edge of the screen
dea3b0e1a
- filter invalid characters from test init data cfg header
25f477fd8
- made selecting a favorite combo update the drawing mode dropdown
d5c1183c4
- reduced information on the autocombo preview in compact mode
8eef7f843
- normalize path component for test init data cfg header
eaa537d99
- fix several issues with the 'default.qst' subscreens
8e9d475bc
- fix autocombo height change not being treated as a list command
de70ed253
- made autocombos preview correctly with the combo brush
88ef45f62
- fixed combo pools being able to fill the same combo multiple times
c0c0f6d2b
- layer visibility checkbox for layer 0
b51c89ce7
- fixed layer 6 highlighting and overhead combo drawing
b55a98696
- fixed "view map" solidity drawing
9de52adc0
- correctly load parts of old qst when grabbing tiles
f4ed68578
- sfx data corruption due to improper struct initialization
be96107dc
- fixed copy/paste hotkey in the string editor and crash when editing absurdly long strings
e0aa4ba60
- liquid combo wizard mod sfx off by 10000
1c0399ff2
- moved some resizing functionality from the move arrows to resize arrows in the subscreen editor
a72d22a04
- fixed subscreen wizard window titles not updating
03e600092
- fixed crashes when previewing layer solidity and incorrect layered solidity drawing
e78b6ecbe
- copy over assets folder in packager
feab68e41
ZScript
- typechecking error related to arrays of class objects
e981a6591
- fixed paldata mix() not flagging changed colors as used
7cb103ba6
- fixed incorrect argument ordering in DrawTiles() and erroneous error logging in serveral drawing functions
ff7752406
- fixed incorrect max count for user objects
d571f7688
- paldata objects not clearing properly on init
13a78f04e
- generic script local arrays and '->Own()'ed objects bugging out on 'Continue'
850fca401
ZUpdater
- use headless mode when run from launcher
1f91452cd
Web
- avoid double save when using the quick-load feature
2e2fb45da
Documentation
- move packaging_quests.md to packaged docs
b5467ee10
ZScript
- made note of rotation arguments for PutPixels()
f31a9e75f
- webdocs for paldata and correction for PutPixels()
0a94ab06c
Build
- move allegro legacy to third_party
7066aaec7
- move loadpng to third_party
faf8af981
- delete include/loadpng/loadpng.h
6a03d57cb
- move algif to third_party
d3c85c763
- move al5img to src
7b8ebe4d3
- move aldumb.patch to third_party
f9d885dbd
- include licenses in package
c7a2a13a3
- add include to fix missing atoi on VS2022
8ea837e46
- [mac] 'ZQuestClassic.app' -> 'ZQuest Classic.app'
0c137af69
Web
- upgrade to emscripten 3.1.45
b428714d2
- rename workbox-config.js to workbox-config.cjs
3602a7233
- update dependencies
97203e923
Chores
- update .mailmap
8c87d92ec
Refactors
- extract legacy encoded reader for qst to try_open_maybe_legacy_encoded_file
9b5c4579f
- removed leftover references to favorite combo aliases
8a122dd40
- use transform matrices for render tree
badeba084
The previous adhoc system supported translation and scaling in a very broken way, making it impossible to construct a non-trivial render item hierarchy.
Now it uses proper transforms matrices. Implemented with dirty flags - each render item has a world matrix (and inverse, for mouse lookups) that only update when the underlying transformations change (or one of its parents)
- add TabBuilder gui class
a9e768c99
- gamedata and user_object stuff, script '->Own()' handling
76a8c3d2f
Player
- only check already loaded saves for 4th qst red easter egg
8362c1e93
Otherwise, it takes noticeable time to load every save file when the file select screen loads.
- move some things from .zmod to be hardcoded
103242d4d
- remove module info/loading from menu
6d27582d0
- remove classic_zelda.dat
e1d9bd937
ZUpdater
- extract getting next release and installing to functions
6346d4838
- [win] use curl and json libs instead of python
765ab0322
- use zupdater binary instead of python in launcher
20528f43a
- [win] use native library for unzip
bcf1582dc
zupdater is now Python-free for Windows.
Tests
- update playground_cutscene_trigger.zplay
9ef7f02fb
- upgrade puppeteer to 21.1.1
b8476fd2e
- re-enable part of updater test
1e11349cb
Web
- run test_zeditor.py and test_zplayer.py
bb237a671
CI
- fetch full history when building to generate nightly changelog
0389cd277
- fetch full history when building web test
22aee7c8f
- use correct variable for release tag in sentry debug upload
cfdeef5b9
- use Release instead of RelWithDebInfo for windows test, for caching
000548dcf
- use sentry-cli 2.20.6 instead of latest, to fix debug info upload error
3b862dda7
- disable sound for linux replays
0c6b1c77e
install_sound
randomly starting failing in CI. - create web.zip and upload to GitHub release
ffb2f56cf
- set concurrency for release workflow
335bc90c1
- trigger website delpoy on release
d8cbf92e1
- add --ignore-missing to sentry set-commits command
fdf2059e9
- pull git lfs objects for packaged resources
4a5c80d12
- create cron job to update database daily
348cb03fb
Misc.
- add script for expanding ZASM opcodes/registers en masse
6f8ca315a
- update zasm expansion script to handle name lists from file
820a5978f
- package changelogs for recent alphas, and include nightly changes
c67dc4d1a
- update GitHub org
f5f1591cf
- fix transparency on some cave tiles in the default quest
2cbfecefa
- improve parser timeout handling
5ebd2423f
- update default.qst (add auto combos)
ec1a38337
- log error when file move fails
d52938c9d
- add AUTHORS file
008738d7a
- rename editor exectuable from zquest to zeditor
b34503993
- support lists via * for changelog markdown parser
e7e7a7aa9
Player
- create
quests
subdirectory for qst filese5c9c2b5a
- auto open file select dialog for new game
57afca898
Editor
- increase size of 'Wizard' combo editor button
51bc46e1b
Visual Studio Code Extension
- publish 1.0.7
e7f9e0ec5
ZLauncher
- use new program names
9f51c900a
Web
- rename from Zelda Classic to ZQuest Classic
a37ec4ce8
Sectioned Changes
Relational Combos Update
Relational Combos Update
The old "Relational" and "Dungeon Carving" modes have been replaced by a new drawing mode that can handle various relational drawing behaviors. Alongside this, favorite combos list has been expanded and improved to make designing screens faster than ever before.
Autocombos
The Autocombo, similar to the "Alias" and "Combo Pool" drawing modes before it, adds a list of user defined patterns which are used for relational drawing. Each autocombo has a set of combos used for the pattern, a combo for erasing from the pattern with right click, and a display combo which affects how it will appear in the editor for user convenience. They can also auto generate a pattern from a default arrangement of combos like how the older drawing modes worked, but do not need use combos placed in that order.
Unlike most other features, autocombos can read and modify combos on adjacent screens with the "Cross Screens" flag.
Autocombo behavior can be selected from the following 9 types:
- The "Basic Relational" type is a standard relational mode with 4-directional tile awareness.
- The "Relational" type works like the old relational drawing mode with 8-directional tile awareness. It also has a flag to use the old combo layout when generating.
- The "Flat Mountain" type is the simplest of the set, with only 6 tiles representing the corners, sides, and top.
- The "Pancake Mountain" type is for drawing flat topped mountains, formed by drawing the edges and then extruding the side faces downwards.
- The "Fence" type is similar to "Pancake Mountain" but without the combos for extruding sides.
- The "Dungeon Carving" type works like the old dungeon carving drawing mode, drawing 2 tile high dungeon walls. It also has a flag to use the old combo layout when generating.
- The "Complex Mountain" type has you fill in the top layer of a mountain and then fills out the bottoms, backs, and sides with a 3/4 perspective. Unlike the other sets, this one is imperfect and may require some manual correction, but it makes using the hardest mountain sets in common usage far easier.
- The "Positional Tiling" type lets you form a rectangular pattern that it then tiles based on X/Y position within the map. With shift + click you can set where the top-left corner of the pattern is located.
- The "Replace" type lets you set an arbitrary set of before and after combos to replace when drawing. Instead of erasing, right click will reverse the process.
Favorite Combos Expansion
The favorite combos list has also been greatly expanded. It now allows for 9 pages of combos. Right clicking the page selector buttons will create a drop-down allowing you to jump to any page.
It can also now hold entries from any of the four drawing modes. When selecting an entry from a different drawing mode, the current mode will automatically update to match. This should make switching from relationally drawing a screen's layout to placing down large objects as aliases to adding finer details a breeze. Each of the three special drawing modes will have icons drawn over their favorite combo entries, which can be disabled with the "Show Favorite Combo Modes" option in Ect->Options...
.
Lastly, adding favorite combos now respects the AutoBrush setting, making adding large blocks of single combos to the page far quicker.
2.55 Alpha 118
Bug Fixes
- typo with subscreen view setting
2c638f17e
- windows 7 crashes on compile zscript
0101beff4
- 'View Unowned Items' subscreen bugs
5e5ffa36e
- subscreen buttonitem on active subscreen not scrolling properly
5327d4c8e
- close about window on ESC/clicking X
dac2fe022
- [mac] title bar showing on initial fullscreen launch
507efb964
The
osx_tell_dock_outside_bundle = false
feature I added to allegro recently is somewhat useful in development, but apparently problematic for normal use.
Player
- handle error when sav file fails to load
b6ca752fb
- unload other save games when selecting one
5b2dba0e1
- save file corruption from overlooked fields
2bb017871
- Crash on zscript object destructor
8f243d2d3
- Crash on dmap lacking subscreen
a79f8dfc6
- read hp from save file for life meter on titlescreen
14189f18e
- remove accidental dev mode, which always allows cheats
7bc53d4b3
- retain previous position when returning to title screen
62d266e76
- unreliable behavior of ESC in title screen
b5e21a833
- sfx accidentally disabled in save select screen
5fef0688a
- empty item slots filling wrongly
59fc452e3
- weird subscreen item animation resetting
683974182
Editor
ZScript Standard Library (std.zh)
- CR_RUPEES definition was missing
e3edf4430
ZScript
- set save name being truncated because not using new string
5496e5ac4
- use safer vsnprintf to avoid crash via buffer overflow in logging
b92439ed8
- check_bunny accidentally always on for Game->CurrentItemID()
3583e94ee
Web
- set default saves folder to /local/saves
01e692282
- quick quest load was broken after save refactor
2b5a12861
Build
- fix windows compile due to msvc hang bug
461de4df9
Chores
- remove outdated source file preamble comments
3341301ad
Tests
- add -test-zc switch to test save file roundtrip
2eccdedc2
- mostly finish save roundtrip test
f416ffa14
- check for full game equality in save roundtrip
5c07f9c3d
- fix zc saves test
ef46dcc9c
CI
Misc.
- support sentry unique user counting
e9eb11357
2.55 Alpha 117
Features
- Add 75 new 'Custom Counters' (26-100)
c30c57aa6
- Music and sound stuff galore!
- Enhanced music using MP3 and OGG can now be given loop points and crossfade timings in the DMap editor. The music will then loop at those points and fade in and out with those timings.
- Scripts have new ways to interact with enhanced music: GetMusicPos(), SetMusicPos(), SetMusicSpeed(), GetMusicLength(), and SetMusicLoop()
- Scripts can also play music with crossfades using CrossfadeEnhancedMusic().
- Scripts can play sounds with different, volume, pan, frequency, and looping with PlaySoundEx().
// Turns a SFX into an instrument by playing it back at different frequencies ffc script Piano { void run() { // Frequency values and keys for different notes int hz[] = {16350L, 17320L, 18350L, 19450L, 20600L, 21830L, 23120L, 24500L, 25960L, 27500L, 29140L, 30870L, 32700L}; int keys[] = {KEY_Z, KEY_S, KEY_X, KEY_D, KEY_C, KEY_V, KEY_G, KEY_B, KEY_H, KEY_N, KEY_J, KEY_M, KEY_COMMA}; int sz = SizeOfArray(hz); int sfx = Rand(60); // Pick a random SFX while(true) { for(int i=0; i<sz; ++i) { if(Input->KeyPress[keys[i]]) { int j = (hz[i]/hz[0]) * 22050L; // Multiply by the sample rate of most default SFX Audio->PlaySoundEx(sfx, 100, 0, j); } } Waitframe(); } } }
- Scripts can also adjust sounds mid playback with AdjustSound() and track their completion with GetSoundCompletion().
ffc script AdjustSound { void run() { // Play the sound panned to the left at half volume Audio->PlaySoundEx(SFX_SECRET, 50, -128, -1, false); // Run until the sound has stopped playing while(Audio->GetSoundCompletion(SFX_SECRET)!=-1) { int pct = Audio->GetSoundCompletion(SFX_SECRET) / 100; // Pan the sound to the right while increasing in volume Audio->AdjustSound(SFX_SECRET, Lerp(50, 100, pct), Lerp(-128, 127, pct), -1, false); Waitframe(); } } }
- Scripts can set MusicRefresh to prevent music from resetting when changing screens
Audio->PlayEnhancedMusic("ExampleSong.ogg", 0); Audio->MusicRefresh = MR_DMAP; // Music will refresh on changing DMap Audio->MusicRefreshFlags[MRF_REVERT] = true; // Music refresh with revert to default behavior afterwards
- AdjustMusicVolume() and AdjustSFXVolume() have been reworked to be a multiplier capped at the user's volume settings, rather than overwriting those settings.
Relevant changes:
- feat: Music and sound stuff galore!
463a6d1dc
- feat: music looping and length functions for ogg and mpick p3
0d00efce4
- feat: add enhanced music loops for dmap music
8c6f66142
- feat: add enhanced music loops for dmap music
1bf93ebc3
- feat: PlaySound with different volume, pan, and loop
f7afa08a7
- feat: added frequency param to PlaySound()
51931b91f
- feat: added crossfading enhanced music
d03c55c0d
- feat: dmap editor crossfades
5e34b007c
- feat: zscript access for dmap crossfades
435449e33
- feat: MusicRefresh setting for ZScript
5df225ec7
- feat(zscript): dmapdata music loop point access
fc8fa9918
- feat(zscript): GetSoundCompletion()
a2df0883a
- feat(zscript): Split MusicRefresh into MusicRefresh and MusicRefreshFlags[]
679b79c50
- fix: changed how crossfades interact with F1/F4
9274b2990
- fix: fademiddleframes in CrossfadeEnhancedMusic()
2fb00213c
- fix(zq): missing mirrorDMap and loop points from dmap import and export
b694fba13
- fix(zscript): CrossfadeEnhancedMusic() now keeps playing old music on failure and returns a proper result
57c6aa58b
- fix(zscript): rename expanded Audio->PlaySound() function to PlaySoundEx()
e96efb263
- fix(zscript): GetSoundCompletion() crash when the sound is not allocated
edf58c67d
- docs(zscript): docs for Crossfades and MusicRefresh
589df961c
- docs(zscript): webdocs for new Audio features
93ec63eea
- chore: attempt to fix ubuntu compile
0f17db7cc
- chore: Merge branch 'main' into music-backup
8c3412b96
- chore: merge main into music branch
11d792fb4
- qr for mirror/prism combos working on all layers
5eb173a5d
- 'Dive->','Dive-> (Sensitive)' trigger flags
ceef20ab1
- Lens can show/hide multiple different layers per screen, can include layer 0
1e603b650
- Can now disable pushblock draw layer [QR
Pushable Block Sprite Layer
]dd365e844
- add software updater
ZUpdater looks for the newest versions, and allows you to download and replace your current installation with it.
You can run
zupdater.exe
directly, or you can use the new "Update" tab in ZLauncher. ZLauncher also has an option to auto-focus the tab on startup if a new version is detected.Note: this feature currently requires Python 3 to be installed.
Also: drive-by fixes for launching a process on unix, though the updater feature doesn't use this.
Relevant changes:
- Add 'Game->OverrideItems[]' to allow forcing an item id to be "highest level owned" of its' class.
bc232375d
- One-line minimap titles, 'Preview DMap' for subscreen editor
f02222644
- allow copying subscreen pages (including across subscreens, and quests)
501cb73da
- setting for subscreen widgets to hide during message strings
bc1773d55
- parser timeout is now configurable/disablable (instead of 30sec)
f3cc92471
- expand combo initd to [8]
ef17c9542
- walk-through nes doors now set door states when used
ab3ffc86f
- allow closing program with (most) dialogs open. (clean up gui functions too)
be04a5ee5
- add 'Button Counter' subscreen widget type
09a871e0c
- 'No Unequip' flag for subscreen itemslot widgets
95781cec3
- new subscreen selector options (per-widget and subscreen-wide)
cfb498ffe
Player
- split saves into individual files
b6b151149
Each save slot created is now stored in a separate file, kept in the
saves/
folder. This path is configurable with[zeldadx] save_folder
.An existing
zc.sav
file is split into individual files, and the original is moved tosaves/backup
.The order of the save slots is maintained by
saves/order.txt
. You may freely rearrange the lines of this text file, though you must do so when the program is not open for it to have any effect.Any save file that gets deleted will simply be moved to
saves/deleted
. If you ever want it truly gone, you can delete the folder yourself. If you want to restore it, just move it back tosaves/
.Individual save files are only loaded into memory as needed, and only partially if only needed to display info on the title screen (like the name, icon, hearts, etc).
The
-standalone
switch still works the same, but the save file is atsaves/standalone.sav
. - change save slot limit from 15 to ∞
1e0794e25
- copy save file to backup folder on every save
bfa22af7b
- support more than one qst file for -standalone mode
7ebfcf8d3
Previously, standalone mode only worked for a single quest file at a time. For example, run
-standalone game.qst
once andgame.qst
becomes the only quest that will work with the save file generated. Now, each quest will use a save file derived from the name of the quest file.You can also provide a specific path if you like. It will be resolved relative to the
save/
folder (you can also use an absolute path). Example usage:-standalone game.qst me.sav
- record music and sfx position for scripts in replays
7c1bd3b22
- configure primary and secondary gamepad stick in settings
b5b94f9ce
- select one of multiple gamepads in settings
2a1198ff1
- add option to auto-restart in test mode when qst is saved in zquest
32d7f0497
Editor
- Remember 'View Layer 2/3 as BG' setting
e04aeaf47
- add Shift+Minus/Plus for changing combo in combo editor
f77eb091b
- configure multiple init datas for test mode
44d7ecf90
Test Mode now allows you to customize test-only init data. You can make multiple init datas. They are saved to your
zquest.cfg
. A basic name is auto-assigned, but you can set your own name by modifying your config.When you create a new test init data, your current quest's init data is used as the starting point. Later modifying the quest init data has no impact on your test init datas.
You can also directly modify the init data values in the config, though the format is not documented anywhere.
- save test init data per-quest
c7a9d6a2c
- made side warps for new screens default to Scrolling warps
1c6a806b8
- side warp triggers cycle backwards with right click
c20f03d46
- "Set All" buttons for screen state carryovers
1d0abd731
- Smart Assign Slots in zscript compile
3192de1e7
- ctrl+clicking a tile selector goes to previously selected tile
f88ac07da
ZScript Standard Library (std.zh)
- add 'GetLevelSwitchState()'/'SetLevelSwitchState()' helper functions
f7228536a
- item_tile/item_cset animation helpers in EmilyMisc.zh
e04a6f984
ZScript
- special layer for non-overhead ffc draws
d8d123b1a
- Add special layer timings related to lens of truth
4799cb023
- Add 'Game->TrigGroups[]' read-only array
a6f5459d8
- Variadic Parameters (user functions)
f8a424029
- printfa/sprintfa to take an array of args like printf/sprintf
eb8dfd978
- Allow declaring size 0 arrays
ecf7793fe
- Game->CurrentItemID() to use the engine method of checking owned items.
42129a5f5
- Array Push/Pop functions
85e1777a3
- ArrayPushAt/ArrayPopAt for arbitrary index push/pop
f34605181
Visual Studio Code Extension
- add "Always Include" setting, default ["std.zh"]
84cd984dd
This takes an array of files to always '#include', so that you don't need to manually add the #include to every one of your files.
- better working 'alwaysInclude', clean error messages for other-file errors
053e6bbc6
- better CONST_ASSERT handling, setting to ignore CONST_ASSERT errors
db0bc504b
- use default options NO_ERROR_HALT, HEADER_GUARD for language server compiles
a5a6483a5
- add includepaths option
406f41d2b
ZLauncher
- add button to view current release notes
76ad2c2a0
Web
- support music crossfading, set position, set speed
61104f63f
This drops the web-specific implementation of zcmusic via SDL_mixer. It was only done that way because we weren't building any sound libraries from source, so using emscripten's port system + SDL_mixer was a workaround. But SDL_mixer only supports a single music channel, so it cannot do crossfading, so it's time to drop it.
Bug Fixes
- cutscene combos being incompatible with replays
b6e7680f8
- set exe path string to empty if fail to get exe path
728d3ce03
- changer ffc interactions, ffc timer interactions
9ad10b881
- use ut8 encoding for config and filenames
134c2fd7a
Config values can now carry non-ascii values. This required also configuring allegro to treat file paths as UTF8.
Fonts have varying support for characters outside ASCII characters. Probably we currently have no fonts that adequately cover non-latin characters. While you may see gibberish in the file picker, files should still load just fine.
- pushable blocks not respecting lens layer hiding/revealing
c4f332289
- support leading dot in file selector filter
9ffaa4cec
This recently broke loading zplay files because the constant for the extension changed from
zplay
to.zplay
, and the old file selector expect no leading dot, unlike every other file path API known to man. - dmap music with crossfades was not setting loop points
ad0adaf62
- Allow exiting zc when test mode gets stuck in error
f18c48097
- some bad dialog 'default's resulting in windows closing
2a4fd7097
- event crash due to bad weapon access
82b9954f3
- checkbox odd alignment issues
0a39e13ea
- test quest dlg wrong button focus
eae4f8082
- add some missing properties to init data delta
8b849890a
Not all properties were being covered here, which affected init data cheat and test init data feature.
- typo in transition editor title
f24f49eb6
- wrong spacing on one-line minimap title widget
8eebcfaa2
- avoid heap overflow crash for draw_textbox scanned string
06ab4d156
- draw bow and arrow as button item correctly
1d137103d
- extraneous popup about string ordering error when loading older quests
5fe750736
- set window icon on Windows
0f6990a10
- room dialog not refreshing on setting old-guy info
72ec7e913
- fixed crash when loading enhanced music in nosound mode
9f2a9f216
- write zeros instead of random memory for fixed sized string fields
77153f3a0
- virtual dtors for subscreen widget base classes to avoid memory leak
bf60c8545
- use safer vsnprintf for zsys messages
68d5b6432
- subscreen non-equippable item flag being broken
df64d36eb
- fixed missing zcmixer->newtrack pointer null
44d7307eb
- minor subscreen related fixes/tweaks
d1b4e3db8
- subscreen issues related to item overrides / bow&arrow
7ab011b0c
- item quickswap issues
b99b3d303
- subscreen related crashes
ef1484be8
- item override arrows not displaying properly
d0f3445b1
- item bug introduced by recent commit
e042ecfba
- 'Background Color' element drawing in wrong area
61aeb4026
Player
- fix bad rebase that messed up new save file header
ceac21221
- check save exists before attempting to use
a56f5a84e
- remove warning about standalone mode
adf05b8cf
- resize save vector before copying
4f0cc4ea1
- fix bad rebase that messed up new save file header (for real)
9be5aa75c
- update current volume when changing enhanced music volume
ee66e9201
- fairy flags acting different placed vs inherent
3f750666f
- allow canceling delete/copy save with ESC
5d8e9b5c3
- do not update saves order.txt in standalone mode
1ac8d0b5a
- set ascii mode for ending graphics
8e31cfecd
- Conveyor oddities related to
Force Dir
flagdb349d14f
- Triggers tab state issues
d1cbad2f8
- "->LevelState" not setting the state properly
- "->LevelState" and "->GlobalState" not working on ffcs
- reset the map view cursor state in init_game
9d07bd272
For replay determinism.
- 'Load Quest' menu option was busted from recent refactors
705aa3a4d
- enhanced music not cutting to midi (none) when there's no crossfade
ec0cc63eb
- zero gamepad axis state on init
1f6ad1717
- crop snapshot for screens with NOSUBSCR
6bef101a2
- handle failure to create save file error
bab197b23
- defer making .sav file until after quest is selected
b5e434db1
- X/Alt+F4 not working while in game view
13afd3bf6
Editor
- bad index for -quick-assign
10b87bb3b
- support headless switch with quick assign
a6e4fb664
- dmap midi dropdown
01a98d5be
- better error handling for test init data
55bca7f0e
- use gui list data getter for init data dmap
4ed590861
- use correct int size when reading qst template size
a9904e441
- door dialog now updates visually on dropdown modify
42cca51e1
- write to temp file when saving qst and rename when done
43c2754de
This avoids issues with zplayer being unable to load the file on Reset when in Test Mode, while zquest is writing to it.
- misaligned subcreen editor 'View' menu checkmarks
70483b21e
ZScript
- support absolute path includes on non-windows too
2b5690bcc
- null check results before attempting to write zasm
69d5f16e4
- missed deallocation when directly returning string literals
39278f501
- shop data not handling info correctly
71429e679
- some parser pointer issues
df423680b
- broken typedefs from recent commits
82b6e9db5
- handle variadic class functions
66cebd181
Visual Studio Code Extension
- some more CONST_ASSERT issues
d5d3c1dd0
- header_guard works properly for edited file, no longer causes dupe errors
888a050e3
- handle non-windows paths
d3bfe96d0
- add missing std_constants typedef type highlightings
f51f805c1
- operator highlighting typo
c00fca3f0
Web
- prevent crash when freeing music
2ff430699
- add rests in some ui busy loops
c4c44dda3
- use half-frequency for sound, just like previous sdl impl
c963a890f
- update deploy script for new asset names
b7234e534
Documentation
- correct typo in comment for
jit_threads
option1e11cd6f5
- specify that linux builds should use clang
e742d5a4d
- changelog overrides for subscreen rework
237156aa8
- add Arithmetic Operators to webdocs
e9976d8bf
- line-wrap singleline codes, strip single leading newline from code blocks
89a17bcc9
- minor typo fix in webdocs
9867c8406
Build
- add targets for common replay test invocations
2a97f57d6
- add stubs for sdl music to un-break web build
68f407138
- fix mac app bundle signing
add74135e
- fix compile by using portable optional varargs
2b75b232d
- enable c++ 20 preprocessor for msvc
8ef1fbd15
- support single config builds
b8d0299e1
- include missing import for stdint
e65d7b8b2
- disable format-overflow gcc error
af7ef5a90
- disable compiler extensions
1d7624410
- use new msvc preprocessor only for our targets
e3fd987ca
This would otherwise result in crashpad_handler failing to link
capture_context_win.asm.obj
, which is very strange. - upgrade to latest allegro
d80750a93
https://github.com/liballeg/allegro5/compare/c2bf1e11bed0b63539267115baf190741e0a437a...02382edf26ff0b0ca021dfd10c370c59d9006888
https://github.com/connorjclark/allegro5/compare/my-fork-3..my-fork-4
- upgrade allegro fork for gamepad improvements
396b99e65
https://github.com/connorjclark/allegro5/compare/my-fork-4..my-fork-5
- configure allegro audio to not build libdumb or libflac
96ce589ad
Chores
- bump version to alpha 117
ed0d04620
- clean up stdout garbage whitespace output
5ce129bcd
- modify changelog for recent music additions
0c2a8aeb9
- add more to recent music changelog
de1ed3ec2
- add sanity check to previous commit
de0aac542
- add some changelog overrides
8cae16f27
ZScript
- Make all 'yyerror' error messages start with 'ERROR:'
917169753
Refactors
- Screen Script dialog now new GUI, respects script metadata
e48455725
- New "Screen Data" dialog
d1449c0a0
- update dmap editor to new GUI
833660a15
- Fix hardcoded icons, no longer using custom codepoint strings.
2193c4671
- Merge New Subscreens (#879)
7441956cd
- remove build version
5b7030789
- remove old project name "AEternal"
3172d746a
- replace "string.h" with "cstring"
931e59774
- use calloc in reset_tile instead of manually zeroing
b6752f122
Player
- split save code from title.cpp, remove .icn
ab10ed1e5
.icn files contained just the color data for each ring variant needed by the title screen. The idea was to avoid loading each quest just to show a single tile graphic. But, this same data is already in the gamedata save structure, so we don't need to maintained a separate file doing the same. The greatly simplifies much of the code dealing with displaying these icons.
- remove skipicon and print_metadata_for_each_save_slot config options
7a45e5691
- move more save file handling behind saves.h interface
5415c4554
- move save file name into saves.cpp, remove -savefile
28c78ffc3
- store saves in a vector
becc8102f
- remove support of .dat# when loading save files
985583d1e
- update icon only once when making new save
3d1b13133
- remove unnecessary sleep/flash of black on updating save icon
855e0684d
- skip slow combo movement modification when nothing would change
4693d82e8
- do not poll music in timer
c323dbe61
We poll music often enough via
advanceframe
- remove title screen
Relevant changes:
- fix(zc): put title.mid back in zelda.dat, since it is available to quests
17e56f141
- refactor(zc): remove title screen
e4640ab77
- refactor(zc): remove title option from menu
d6878d6d2
- refactor(zq): remove defunct -notitle switch from quest packager
bcfd8bbf5
- refactor(launcher): remove title option
2571479f4
- misc(zc): remove unused title/logo assets from classic_zelda.dat
dcd117a1a
- fix(zc): put title.mid back in zelda.dat, since it is available to quests
- remove aglogo
47ad36443
- disable credit menu
d49a0cc00
ZScript
- better jit compilation for 32b div 10000
0a780d638
Tests
- add more visual indicators to playground_scrolling_script.zplay
f6d318fe5
- forgot to update zasm snapshot from f6d318
cfd6241df
- fix usage of -quick-assign in test_zquest.py
ff333ee4a
- add stdout to parser expectations to capture warnings/errors
f78c85e65
- check if gfx segments exist in workflow get_args
2da41aa14
- support starting replay from a sav file
0b8a1a41a
- add script for splitting replays
b771f0c16
also support folders in the replay test directory
- split large replay files
e79878288
- support headless flag for web replay tests
4cee3d64f
- disable sound for mac in CI
9a68ee085
For some reason this started hanging the --no-headless tests, and crashing other tests on exit.
- skip sound driver in headless mode for zquest
188452305
- check allegro log exists before printing on timeout
16ec4b55c
- track save files with git lfs
a53b46886
- add (crude) RNG debugging option
97acebb06
- run_replay_tests now forwards more args when collecting local baseline results
a3513f63d
- move zquest save classic_1st.qst test to python
Relevant changes:
- make copy of playground.qst for quick assign test
d200356d7
- move recording test to python
770a6fe39
- move File->New test to python
4440846b2
- disable save test
931b20261
- do not retry replay if zplayer exits before starting
7ae23cdbd
This was hiding crashes that only sometimes happen on startup, and never showing a backtrace.
CI
- do not show info dialogs in ci
8e46bff09
- quit earlier in zquest
e57e45e8e
- skip crashy test on linux
8d2731cbf
- also show changelog relative to last alpha for nightlies
1025e5c88
- handle "boolean" correctly
226889535
- upgrade to python 3.11.4
ed8113dfa
- run python unittest module instead of calling each test file individually
bee03b3bf
Misc.
- add 'std_zh' scope to changelog generation
d82a0d845
- make std_zh a scope, instead of a type
efee4a34e
- support squashing and rewriting commit body for changelogs
7c6430abe
- add -version, -channel, and -repo switches
ee809f874
- use new name in readme
6acc68050
- rename mac app bundle to ZQuestClassic
6a790894b
- rename player executable from zelda to zplayer
b6224d565
- add '-no_console' switch to prevent debug console opening
020fb0382
- Merge branch 'main' into newsubscr2
7aac40d6b
- support dropping commits in changelog
1078cec21
- allow for squash commit subjects to be changed too
23529bfc7
- support changelog 'section' overrides for large custom markdown sections
975c9a1b3
- wrap changelog-since-alpha in a details element
65d682663
- wrap custom changelog sections in details elements
948ea7238
- revert grabber.exe to 4.2.0 version, since current one stopped working
aad1ce6e9
- add sentry breadcrumb for zsys error messages
f6015eae0
- disable sentry session for all but zplayer and zquest
39edc388b
- add 'templates' folder of subscreen templates
eadd4a4b8
- update default quest, default new subscreens + new gauge layout
7dfe531d2
- allow dropping commit from changelog with '!' before ':'
55435340e
Visual Studio Code Extension
- publish 1.0.6
9c70b4882
Sectioned Changes
Full Subscreen Rewrite
Full Subscreen Rewrite
The entire code behind how the subscreen functions has been entirely reworked to be less janky and more manageable. This makes editing the subscreen further a LOT easier of a task for us, and makes everything just a lot nicer in general.
General mechanics tweaks
Several mechanics have been generally tweaked, including basic things like how the selector behaves and how items are equipped. These changes are mostly spread across a variety of quest rules, but for easy swapping, there are now "New Subscreen" and "Old Subscreen" Rule Templates available [see Quest->Options->Pick Rule Templates]. These change almost every new rule related to the subscreen - the only important one that they leave alone is Old Gauge Tile Layout
, which changes the tile layout used by Gauge Piece widgets.
These new QRs, as well as many existing QRs that relate to the subscreen, have been moved to the new "Subscreen" tab. These are searchable as usual via the QR Search feature.
TL;DR New QRs, check the new Rule Templates or the Subscreen tab.
Button Equipment Stuff
- QR 'No Button Verification'- if enabled, the engine will no longer auto-equip things to buttons for you.
- Also allows UNEQUIPPING items (try to equip it to the slot it's already equipped to)
- Problem: With this enabled, even if you start with items, now the engine won't equip any of them for you!
- Solution: Now you can set "Default Equipment" for each button slot! Just check the box in the ItemSlot widget, for the Active Subscreen that is set on the Starting DMap, and these items will begin pre-equipped to the buttons you set them to.
Brand New Features
Overlay Subscreens
These subscreens draw over the screen at all times, both during play and the active subscreen. As usual, widgets can have the 'Display' settings on widgets to change their visibility while the active subscreen is up, down, and scrolling. This can be used for various things, such as:
- Displaying your current keys over the corner of the game screen, either using a 'Counter' for a number of keys or a 'Gauge Piece: Counter' to actually physically display each key.
- Displaying button items or other similar widgets transparently over the game screen, similar to LTTP
Active Subscreen: Pages
You can now add multiple PAGES to Active Subscreens! You can either set buttons (like L and R) to cycle pages, or trigger page transitions by pressing a button on an appropriately configured widget. Changing between pages will use one of currently 3 animation styles:
- Instant (It just jumps right to the other page)
- Slide (Both pages slide in the same direction, the current page going offscreen as the new page comes onscreen)
- Direction and Speed (in px/frame, with 4 decimal places) are configurable for this transition type.
- Pixellate (Seemingly-but-not-actually random pixels from across the screen change bit by bit from the old page to the new page)
- Duration is configurable for this type, in frames, as well as the "Invert", "XOffset", and "YOffset" parameters. These parameters only change the pattern of pixellation by altering the formula used to create the pixellation pattern.
By default, the Selector is not drawn during transitions- but this can be toggled as a checkbox on each transition.
Select Any Widget
Instead of only being able to move the cursor to "Current Item" objects (now renamed to "Item Slot"), the cursor can now be set to move to ANY widget you want it to! This has some nice interactions with other new features....
New Selector Features
The selected widget can now be set to:
- Have overridden selection text, which will be displayed in the "Selected Text" widget (formerly "Selected Item Name")
- Start a page transition animation on button press
- Run a generic frozen script on button press
Yes, you heard right, there is now SOME level of scripting on the engine subscreen, even if not much.
Gauge Piece Rework
Life and Magic gauge pieces received a MASSIVE overhaul, and the "Gauge Piece: Counter" has been added to allow gauges for ANY counter! All of these behave identically to each other, except for these differences:
- Magic gauge still has the "Show Drain" property, which is used to make a gauge piece display conditionally based on your magic drain rate (ex. show the half magic symbol when you have half magic)
- Counter gauge lets you configure which counter to use, and how many per container to use for that gauge. Aside from these differences, they ALL can:
- Specify a Gauge Wid/Hei, making a single widget draw more than one gauge piece, instead drawing an entire GRID of gauge pieces for you!
- Specify an XOffset/YOffset to be applied to each row/column to create an offset-grid
- Specify an HSpace/VSpace to space out the grid
- Flags to specify which direction the grid "moves" in (Right to Left? Top to Bottom? Move in columns first, then rows? Snake back and forth?)
- Hide the gauge (Or only show the gauge) when you have the Infinite Item for this gauge (works the same way as counter infinite items)
- Specify a "Units per Frame" to reduce tile page usage. For instance, if "Units per Frame" is "2", then it uses half as many tiles for the gauge, as it uses the same tile for "1" as it would for "0", and the same for "2" as it would for "3", etc.
- Specify frames/speed/delay for an animated gauge
- Specify an animation CONDITION, wherein the gauge will only animate if it is above or below a certain value (either as a hard value, or as a percentage of being full). Additionally, you can specify it so that it skips the first frame of the animation when the condition is true.
- A good example of how you can use this, is to have your life gauge only animate when your health is critically low, and use the skip first frame feature. This way, normally, your life gauge uses a single still tile- but when you reach critical life, it starts using the second tile in the animation instead (as well as any more if you supply more of an animation). This would allow for, say, cracked heart containers, blood dripping from heart containers, etc, as low-health visual effects.
- Specify "Full Tile" mode, which causes the gauge to use full tiles instead of mini-tiles, becoming twice as wide and twice as tall in the process.
Counter Addition
Counters can now have a "Max Digits" specified, and if the counter has too large a value to fit in that many digits, it will instead display that many digits as all 9s.
GUI Work
The Subscreen Lister
The dialog where you select which subscreen to edit is now upgraded to the new dialog system. This dialog now shows you 3 separate lists for the 3 different types of subscreen!
The Subscreen Editor
- Now somewhat auto-resizes itself situationally. This means it will be smaller for passive subscreens, larger for overlay subscreens, and will adjust to font changes.
- Now has text displaying information about the currently copied widget
- When editing an Active Subscreen, a whole new set of buttons for adding/removing/changing Pages is present.
- R-Click menu has been entirely revamped, with many new options added.
- R-Click menu now also exists if r-clicking in a spot that has no widget, which previously would give no r-click menu at all.
- Slight tweaks to the existing menus
- New Menu: Options.
- Options->Mouse Settings allows you to change how the mouse behaves in the subscreen editor. You can choose between "Classic" (for the old behavior), or "Modern" (the new default, reworked behavior). Notably, in the Modern behavior, you are able to click-and-drag widgets around the subscreen editor.
- Subscreen Settings dialog, allows you to specify settings specific to the subscreen. Currently only has settings for Active Subscreens, where some settings related to swapping pages are housed.
- Several new "View" menu options, such as previewing what it would look like if every counter were full, or if every max counter was 65535, or if you had the "Infinite Item" for every counter, etc. Also includes an option to toggle "Show Unowned Items". If off, the editor display will show only the items as you have in Init Data.
The Widget Properties Dialog
Slight spacing tweaks, every widget now has an additional tab for selection-related settings. More widgets will use tabs for formatting now, giving the dialog a bit more breathing room overall.
Relevant changes:
- refactor: Rewrite the entire engine subscreen backend (WIP)
872925132
- feat: some subscreen GUI work, new buttons for page editing
7e155ec83
- feat: major subscreen editor gui additions
f8a673431
- feat: More subscreen work, generic scripts on buttonpress and custom selectiontext
ac5f25f18
- feat: ton more subscreen work
e935320e4
- feat: new life gauge settings
99462bf6b
- feat: new subscreen features relating to counters, gauge pieces, and the 'View' menu
7d54ca59b
- feat: subscreen settings dialog, buttons to change pages
9b60dc98b
- feat: allow selectable subscreen widgets to go to another page on btnpress
82aee4b29
- feat: subscreen page transition animations
d8b22db8a
- feat: Add 'Overlay Subscreens'
82a7b0000
- feat: Overlay Subscreen settable in dmap editor
e7b77dab0
- feat: Copy/Paste/Save/Load rclick menu for subscreens
c3a23dbdb
- fix: subscreen rng offset
dfbcaa3ff
- fix: null dereference
f9d950fe6
- fix: cursor selector offset
536748569
- fix: subscreen save/load errors
e806cae7f
- fix: some oddities with item slots
47e634138
- fix: more oddities with item slots
064395320
- fix: magic meter x offset
06e578791
- fix: itemcache/override related fixes
9ca4eb0ec
- fix: button item misalignment
bc9f8abf7
- fix: some more subscreen related replay errors
b25433e8f
- fix: subscreen related button item stuff
ad997e2b9
- fix: more subscreen related replay errors
f13ef43ca
- fix: compat qr item 0 being visible on buttons
47c7a6d3a
- fix: typo in previous commit
7a8ae5e27
- fix: more subscreen fixes
e646db354
- fix: itemcache bullshit errors
23d96075f
- fix: selector stuff
0ea092e6d
- fix: some item animation offsets
aee731bd8
- fix: selector offset errors
20f343644
- fix: minor counter fixes
2db1741ed
- chore: clean up some subscreen item animation code/replay errors
97be172fa
- refactor: convert subscreen widgets to new constant system
2a7bc9778
- refactor: more subscreen replay/type fixes
fd5a735b0
- refactor: work on subscreen cursor selection
1283ce09d
- refactor: split subscrwidget flags into two vars, trim gridflags
a3db000a2
- refactor: improve subscr_props dialog arrangements
2162adf82
- test: update 'nes-remastered.zplay', item flash animation offset
93c563aa2
- test: Update/Rerecord 3 playground replays to fix quick-assign tests
2c8906b5d
2.55 Alpha 116
Features
- Torch combos support shapes, dirs, new Square shape.
57f6cea0c
Also refactor how shape drawing works to remove the need for duplicate ZQ versions.
- Add general SFX/Sprites to combos (no zscript access yet)
4d55a2a74
- add solid damage combo QRs
ab146e65f
also fixed "No Solid Damage Combos" QR and fixed more issues with Newer Hero Movement
- Customize 'Guy' per-room (compat ruled)
00302d51e
- multiple new options related to subscreen item selection
6ff6a775f
- Cursor can be allowed to select empty slots (Freeform Subscreen Cursor)
- Can be set to require pressing B to equip (Always Press To Equip)
- Items have 'Non-equippable' flag, allowing them to be cursor-selected without allowing them on buttons.
- add quest package export for standalone app
669ed4833
In the ZQuest
File -> Export
menu, there is a new option to package your.qst
file as a standalone application. This gives you the option to distribute your quest in a way that allows people to play without grabbing any other files, or needing to select a file when starting a save slot.For a qst
game.qst
with a title "My Game", it looks like this:- My Game - My Game.exe - data/ - zelda.exe - zc_args.txt - game.qst - ... all support files ...
This is located in the
packages
folder of the root installation folder.Double clicking
My Game.exe
launches./data/zelda.exe
with the CLI switches listed inzc_args.txt
. By default, the export tool provides these switches:-only game.qst -notitle
. You can set whatever else you like. For example, if you want to skip the save file screen entirely, you can use-standalone
instead of-only
.Every time a package export is done in ZQuest, the folder is created from scratch.
To include additional files, make a folder
./packages/My Game_extra
and place whatever your quest needs (music, images,zc_args.txt
,zc.cfg
, etc). The export tool will copy this folder into the package folder at the end, which allows you to overwrite whatever you want.Custom icons are also supported. See
docs/packaging_quests.md
for details. - add -window-title switch
e9a7e4f6c
Editor
- 'Quick Compile ZScript' favorite command
8652f1c91
- Option to auto-recompile when saving quest
28db73dc7
- save autolayer info to reapply to blue void screens as a default
d955ace97
ZScript
- Add script access to draw lights (circle, cone, or square) arbitrarily.
bd032d78d
- '@InitScript(int weight)' annotation allows multiple global init scripts (all merged into ~Init).
dcaa46921
- jit compile MULTV
02cb588d3
- JIT compile scripts with background threads
e0a845b53
Control how many threads are used with
[ZSCRIPT] jit_threads
.# Number of background threads for compiling scripts. # -1 to set to number of available CPU threads # -x to set to (number of available CPU threads) / x # 0 to only compile on the main thread jit_threads = -2
Visual Studio Code Extension
- create VS Code extension
dabe7c091
This adds support to VS Code for displaying error/warning messages, syntax highlighting, and code formatting. You can install it by searching for "zscript" in the extensions Marketplace. See the extension homepage for more:
https://marketplace.visualstudio.com/items?itemName=cjamcl.zquest-lsp
- update vscode extension keywords
6ecf0775a
Bug Fixes
- memory leak when allegro does not find file
4ab4a512f
- for linux, use posix_spawnp when launching processes
d93e3c2eb
- set dirty flag for vedit text field components
e21e66f69
- bad ternary from solid damage commit
c46056a29
- ZQ doesn't lock up if parser crashes [windows only]
51eaa167d
- properly set sentry breadcrumb category
654dd9c24
- add win7 compat for GetOverlappedResults
8a0699eb5
Player
- reset button down state correctly
bb1e906cd
- 'npc->Remove()' no longer leaves behind enemy bg sfx
691b022d8
- clear darkroom bitmaps to dark color during player death animation
22e241747
- Lantern inconsistency during scrolling caused by previous commit
00a536cc2
- memory leak in read_one_subscreen
17f5ecc64
- more reproducible fairy hearts, for replay in Debug mode
901a3e05d
- various newer hero movement
9762141db
- new respawn points with ladder
5641cf8c1
- check for invalid screen index in subscreen map draw
f327193e1
- reduce some data races
8c2dda32e
- smart conveyors snapping you to the grid
337727343
- Crash related to reflected magic having invalid parent
c3f9d7d48
- specific NES door softlock
26541dbc3
softlock when moving through a bombable or walk-through door in mid-air with "No Scrolling Screen While In Air" enabled. (Now, with this rule on, you won't be able to go through the door until you land)
- input prompt not showing when configuring gamepad
a226a2ee9
- prevent invalid memory access in triggerfire
b3c209499
- prevent invalid memory access in joytn
1aa558687
Editor
- set list position for strings of older quests
9cd257e09
This resulted in the Strings GUI not correctly showing all the strings.
- use correct index when saving string editor "Next"
52d8e4081
- some pasting/blue void screen related issues
cf1dfbbc3
- blue void issues related to F4 (screen palette) dialog
33ee353c3
- grabbing tiles from qst files
3312ba667
Commit
142485
regressed this, by accidentally throwing out the next section id when skipping unwanted sections.
ZScript
- global object arrays being wrongly cleared on F6->Continue
f9383ff99
- fix for-each loops on non-const arrays.
9c6e31bca
- free jit script handles on engine shutdown
52db50c21
- Negative Array rule issues
0da042ba3
Fixed negative array rule not being respected on first load of game (either via test quest or when loading from file select); also fixed negative array rule not being turned on via compat.
- compile crash
3cadfecb3
- several class related bugs
9024587f5
- QUOTEDSTRINGs not merging for all use cases (ex. annotations)
c9caaafa5
- screen script run function arguments
52b34fb60
- shutdown jit thread pool before resetting scripts
bb213c146
This prevents a segfault when a thread is compiling some old script after a new quest has loaded.
- Broken labels and stack size in global init scripts
1a0707e41
- more string literal related issues
0b0fcee0f
also added macros to help fix more of these that might pop up
- prevent MODR divide-by-zero in jit
6afb11354
- make div-by-zero an error instead of a warning, when divisor is literal 0
9e7563267
- script engine hanging on empty script
9bf81e42c
Visual Studio Code Extension
- support missing edge case for parsing error
8b70ca3d0
Documentation
ZScript
- docs for light-related new drawing functions, LIGHT_SQUARE constant
173389422
Build
- remove alogg, use a5 audio streams for ogg
7beab3968
Also refactors zcmusic to use
ALSTREAMFILE
for any a5 audio stream. Currently, mp3 and ogg use this.Co-authored-by: Moosh64 44924261+Moosh64@users.noreply.github.com
- fix compiling zcbase for msvc debug
84ef4d15e
- upgrade to latest allegro
845acc646
https://github.com/liballeg/allegro5/compare/68946485f315c5a6df753250ec5979ab291c60a9...c2bf1e11bed0b63539267115baf190741e0a437a
https://github.com/connorjclark/allegro5/compare/my-fork-2..my-fork-3
- for linux, use libcurl with openssl instead of gnutls
1227b954a
- disable WANT_OPUS when building allegro
bff683d3c
- upgrade to latest fmtlib, for compile time checks
36a0f1932
Chores
- bump version to alpha 116
c360cac20
- add docs/constants for new square light shape
ba9d67ed2
- bump dmap section version to reserve for z3
05bb58363
- fix compile previous commit
f5202713a
- add include
7dbcfc0fd
- try fix linux compile
123e7a21c
- update instances of "Zelda Classic" to "ZQuest Classic"
ca2dd6d8f
- update comment instances of "Zelda Classic" to "ZQuest Classic"
f3ae9af4b
- add commit to .git-blame-ignore-revs
43ccd326e
- update changelog for A116
1869a68c7
Refactors
- un-inline zc_math functions
eba451962
This allows for us to always optimize these functions, even for Debug builds. Good for replay determinism.
- actually skip reading qst sections when requested
142485948
Only the tile importer for qst files uses the feature of skipping sections when loading a qst file. This would still read and process every section, it just wouldn't persist anything. So it wasn't really any quicker.
This paves the way for removing
keepdata
from all of our loading code. - add 'qrs.h','qrs.cpp' and move 'box_' related functions
b0a55a23e
- optimize some more headers/zdefs stuff
9b309630c
- move Hotkey struct to 'hotkey.h'/'hotkey.cpp'
629fd8d9f
- move dmap struct/flags to 'dmap.h', various constants to 'sizes.h'
ab539b694
- move packfile-related functions to 'packfile.h'
3387b9ea8
- move combo pool/alias data to 'cpool.h'/'cpool.cpp'
65cd926a2
- move font enum to 'fonts.h'
436d3f270
- move MsgStr stuff to 'msgstr.h'/'msgstr.cpp'
4007bb471
- move newcombo stuff to 'combo.h'/'combo.cpp'
2c3fe05c7
- move combo 'advanced paste' to 'combo.cpp', use enum flags, rename 'sizes.h' to 'general.h'
a4afbd4a3
- move triggerflags to combo.h
e37432d49
- move misc data stuff to 'misctypes.h'/'misctypes.cpp'
abac74960
- only use 'QMisc' as a single global 'miscQdata' for all programs
03522af1b
- remove keepdata boolean from packfile reading
ef3faef68
Player
- remove windows midi_patch; improve switch out/in
dc48c2763
This code was pausing/restarting MIDIs and resetting the volume in a convulted manner, likely to workaround some old bug with MIDIs seen on windows only. We've since upgraded to allegro 5, which gives a different backend for playing MIDIs, so this bug is likely ancient history now.
There was some issue with blurring window focus losing percussion, sometimes. Not sure if this change will have an impact, but let's see.
Replaced the midi_patch UI toggle with pause_in_background.
https://discord.com/channels/876899628556091432/1114306020848717904
- do not recreate script_data when resetting
4bbe968da
- delete unused enemy clone ctors
dd6239cdb
ZScript
- optimize function code, add PEEK to allow combining POP/PUSH back-to-backs
8402c406b
- optimize 'SETV reg,X - TRACER reg' to 'TRACEV X'
41ca67ec7
Tests
- better error message when zelda binary not present
0c8e2605f
- return failing exit code if replay mode desyncs
b9b09cd80
- remove timeout for Coverage and Asan builds
908a011bc
- use python server instead of node for local compare report
18f8a08fa
- disable sound for replay tests
a9d38c70d
- check exit code for replay tests
1f31223cd
- only check exit code for replay tests under Asan
acd61977e
- add download_artifacts.py
dca122f8e
- add asserts for group_arg logic
bdfbe948d
- condense --snapshot args generated for failing run
b8048b986
- refactor compare report to use ReplayTestResults
aa282f96e
- fix regression from refactor in aa282f
3da06ae9a
- fix silly lazy unit test
0591e6a99
- update test_replays with new unexpected gfx frames, changed in 7ed7b
5e13ce424
- fix argument passing to run_replay_tests.py
e6ea4e1a9
- update expected zasm, changed by 8402c4
39f685f44
- add -headless switch for disabling display and sound
4d17ccf7f
- update expected zasm, changed by 52b34
62de6e7d3
- print backtrace on crash
92d6b3237
Every Python test and invocation of our programs in CI is now called via
run_target.py
, which will attempt to print a backtrace if the program crashes. - fix sharding for replays with sub-second durations
e12e09605
- add playground_slopes.zplay
503a5c97f
- use debugger for replay tests by default only in ci
4c0859a33
- add playground_screen_script.zplay
2dda68a5f
- add replays for step triggers, trigger groups, and cutscene triggers
94c96655f
- add --show flag for replays script, alias for --no-headless and --throttle_fps
0cca40ff8
- update playground maths script to not divide by literal 0
69a9a16af
- update run_target default build folder selection to work on windows
82631d33c
- add playground_sideview_slopes.zplay
f0a3b9644
CI
- allow Asan config type for test workflow
13ebdc854
- pass build type to replay tests script
c59f68b10
- when updating artifacts, only upload the updated/ folder
bc1be95c6
- do better job of reducing size of compare report
7ed7b02d8
- enable jit_threads
86d162ea5
- limit yuurand.zplay for coverage because of rng desync
8f12f54c4
- fix previous commit 8f12f54
54c1b9c2b
- select previous alpha when generating automated changelog
e390bfdac
- remove github's version of generated changelogs
10f1b630d
Misc.
- fix bisect process spawn for non-windows
58f518995
- add .mailmap file
bf78bab6b
- add changelog overrides
3991c9e31
- set failing_frame in replays for rng desync, even in replay mode
6bbe3a0e9
- add new commit scope for the extension: vscode
57d2c1930
- improve changelog markdown
2392d3e70
- remove commit body after "end changelog"
a30bbd8aa
- add sentry tags for qst/screen
14e9d8791
- add script to get all quests on purezc
7755714fb
- add render_debug option for debugging render tree
0456127c6
- improve newlines in changelog markdown generator
0988d3efe
- show deprecation warning in 32bit windows build
5000dcd90
- add -crash switch for crash reporting test
743a300dd
ZScript
- add missing asm debug for first uncompiled command
c19830c04
Visual Studio Code Extension
- publish 1.0.5
6092d4483
2.55 Alpha 115
Features
Pushed->
triggerflag, triggers when the combo clicks into place after a pushblock push.218b1d071
- customizable ripple/tallgrass sprites per-combo
715893f35
- increase combo label limit from 11 to 255
edea0722a
Editor
- 'Test Quest' hotkey (default 'Ctrl+T')
79a292c4f
- Finish signpost combo wizard
ccccaf6a7
- AutoBrush now will revert to 1x1 after placing if ALT is held while selecting an area.
43825d2b6
- Compiler settings now searchable in QR search dialog
cedf82689
- Screen Palette menu now previews in the window behind it
c98758a57
- -quick-assign CLI switch to compile + assign
31efdf60c
Example usage:
./zquest.exe your_quest.qst -quick-assign
- tile editor 'Esc' deselects selections (if something selected)
c9df55421
- Add 'General Tab' to advanced-paste combo dialog (and clean up the dialog)
516526658
ZScript
- Weapon death effects + liftability settings
5b87f8712
- Hero->MoveAtAngle(), Hero->Move()
424840536
- generic event HERO_HIT can now understand FFC/combo position
03706f16a
- Hero->ShieldJinx, new generic events (drown, fall, HeroHit applies to shallow liquid)
59337477d
- -include switch to set include paths
20480cb28
- Graphics->ConvertRGBTo() and Graphics->ConvertRGBFrom()
a37a156f2
Bug Fixes
- add some sanity checks to font initialization
b659ab974
- do not show hidden files in file selector
cf932f82b
- memory corruption in quest load from bad palcycles
72f741728
- memory corruption in quest load from bad shop count
7b43ff57e
- memory corruption in quest load from bad door combo count
01f4a2cc8
- memory corruption in quest load from bad item count
dafd04b15
- memory corruption in quest load from bad weapon count
1fa149c51
- memory corruption in quest load from bad warp count
bf64cf4b5
- memory corruption in quest load from bad string length
8b9883ac4
- memory corruption in quest load from bad misc info count
de4595fbc
- prevent over-allocation in quest load from bad map count
a262c53f7
- memory corruption in quest load from bad string copies
bf5fa4c5d
- prevent over-allocation in quest load from bad script commands
51dd859de
- memory corruption in quest load from bad zinfo weapon count
70910a8e3
- memory corruption in quest load from bad zinfo counter count
40ace2986
- memory corruption in quest load from bad zinfo mapflags count
aee1105d1
- memory corruption in quest load from bad zinfo combotypes count
46521737e
- memory corruption in quest load from bad zinfo itemtypes count
b1c8944db
- memory corruption in quest load from old pwd hash check
941720a37
- memory corruption in quest load from repeat section ids
75057cf10
- prevent over-allocation in quest load from bad script bindings
3240f577b
- memory corruption in quest load from bad subscreen strcpy
f30cc94ff
- memory corruption in quest load from bad sfx length
fe8a0e887
- memory corruption in quest load from bad warp count (old)
da70b79fe
- memory corruption in quest load from bad genscript count
8bf716bdc
- memory corruption in quest load from bad dropset count
8d5d7f8f9
- use-after-free bug in widget label
84539eff0
- greatly reduce cpu usage when drawing dialogs
5d166d15f
- set dirty flag for more dialogs needing redraw, missed some
d5c5f0d41
- properly handle mp3 unloading to avoid crash
8a33b68b9
- set dirty flag for list search components
50fae6629
Player
- cleanup bush/flower/etc decoration sprite code
3c8baa1e4
- items/weapons/players not rounding y coordinate when landing
2ea7a5fe9
- 'Save Indicator' option now works to toggle the 'Saving...' text
1a700f533
- mouse cursor not appearing in some popups
19087bf7d
- prevent Hero->CanMove unwanted side effects
b60185559
- fix dropped input when script modifies input state
a773ac9ba
- Fix 4-way "Newer Player Movement"
81710c1ee
- signpost prompts take priority over triggers tab prompts
347bc58fb
- Newer Player Movement issues with fitting in half-tall gaps
1210ef14a
- waitdraw not working for ffcs over 32
ae823474a
- do not stop at first ffc for lens trigger
90eff0ba4
- npc scripts not running on screen load
c8e2c861e
Fixed npc scripts not running on the first frame that a screen loads, resulting in a single frame of spawn poof before you can hide or change the tile of the enemy.
- enemies not running scripts on first frame with scriptloadenemies
935757d42
forgot to handle this when fixing last commit
- Fix writing to shopdata->Price[]
7094e8d8c
- fixed new (non-classic) respawn points being unsafe in sideview
c41729262
- off-by-one error with ffc link delay
996dc964d
- Should fix all instances of things occurring on the wrong screen when scrolling
bae07692c
- system reset when recording in test mode
f35c89de7
- scrolling on to raft paths no longer forces you to raft (compat ruled)
1412cab3e
- mid-scroll is no longer a "safe respawn point"
9d691ad0c
- LW_THROWN weapons not running weapon scripts
45ada8199
- Throwing in sideview
384513a3b
- windows crash as writing .zplay.result.txt file when exe not approved
0fe78dde3
- Test Mode issues when quitting during opening wipe
95e3288ec
- ignore unintentional input on first frame of subscreen
0573804d3
- Torch combos now function on pushblocks
0a56608dd
- force system pal after matrix screensaver
b40f8d5ce
- non-torch pushblocks no longer cast light
c8d359531
- use-after-free bug when picking up triforce
424279031
Editor
- combo pool paintbrush was broken
50ac2928f
- 'k' in assign slots dialog confirming
0a63b6075
- minimap graphical oddities
b91e5977b
- map out of bounds crash report
56921d432
- string list dropdowns were offset
aaeaeccf0
- string list ordered wrongly in dropdowns
bee021913
- undo history for "Paste FFC as ..."
023f81c00
- undo history for "Paste FFC Data"
d77c8b93f
- gui label text wrapping on strings without spaces
a49fe973c
- background blank-out after adjusting tiles in string editor
4f855abaf
- bad pointer alias crashing QR search dialog
f63fbaa0a
- stop using corrupted file handle when saving .zcheat file
2deb39605
- properly load qst when grabbing tiles
acacb5a21
The loadquest function was erroring on the ffscript section, but only when "keep data" was disable for that section. The section loading code was improperly read the file, which resulted in the password hash not being set in the header, which resulted in an errant password check prompt.
- do not show guys in screen enemy selector
28c47172e
The first twenty enemy ids are reserved for guys, and can produce unexpected behavior when used as screen enemies. If a screen is using one of these enemy ids, the name was showing as "(None)" in the screen enemy list. It will now show "Guy - Do Not Use!".
The enemy selector list also will no longer show any of these enemy ids.
- more fixes to load quest usage of keep data
6cfcd45f8
ZScript
- dmap scripts not updating
217b877c3
- use sane qrs by default for parser CLI
5ed5d3b9d
- backwards byte order of the rgb type used by paldata
79fa156a5
- use correct engine data for player scripts
9ff13b90d
- setting input buttons to false correctly prevents button press
656bb7628
ZConsole
- [win] use async i/o, speeds up zscript debugger
2bbc6e58b
Documentation
- update weapon lifting docs
a9410e821
- add fuzzing.md
ba7921e82
- type help for Slope combo type
80b4c5acd
Editor
- Clean up tooltips for combos on the screen.
175152592
Build
- set zquest as default startup target in VS
19d7ea741
- add Asan build type
33ecea2aa
- support Asan build type for zelda target
dd924d048
Chores
- update versionsig
81d7f6d21
- fix compile
94ca60c61
- fix non-windows compile (remove unreachable code lines)
380118b8d
- remove debug print
605e0e1a6
- fix type conversion error
9b8b21708
- Replay version check for respawn point fix
e92a15324
- fix compile because I'm stupid
3f430cc81
- comment (and slightly optimize) 'user_object.cpp'
9e5e60b0a
- update changelog for A115
812da2517
Player
Editor
- init data gui cleanup
c6794c995
- update default quest file (fix dmap 0 flags)
837c65979
- fix missed in previous commit
10097db47
Refactors
- remove classic_qst.dat, use default.qst
e6e5c9906
~200KB smaller, and easier to change (no grabber.exe).
- rename solid_object hxsz, hysz to hit_width, hit_height
0fccb318c
Player
- remove indirection in calling scripts based on version
a7bdf12cd
This just makes the code harder to understand. And dereferencing a pointer for a function call is certainly slower than relying on cpu branch prediction to do its thing.
- add interface for combo cpos_infos
cc2c6aa8a
- tweak and document MAPCOMBO3
ead694178
- replay_version_check
f461b1071
Editor
- Level Palette shortcuts cleanup, add warning with dsa
2df440583
- new clean compiler settings dialog + help text
d9528ee4f
ZScript
- common interface for script engine data
afd10f7e4
- use ScriptEngineData for item scripts
3d13a4422
- use enum for script type
970aafd77
- add interface to encode combopos ref
91b4eac1d
- only allocate script data for combos that need it
7f4ac3b75
Tests
- update replays
a383d5c57
- add lifting.zplay, rocs_feather.zplay
4c10d5b17
- increase replay timeout for web
ced397fb1
- add zscript compiler expected zasm tests
2afd78063
- check if failing frame values exist in dict
ba99a2dfd
- use exists_ok when making updated dir
95f161860
- print failing frame during replay test
67d34be84
- use exist_ok when making updated dir (typo...)
d5580d54d
- refactor compare_replays.py to prepare for re-use
9a81e9cf4
- refactor run_test_workflow.py to prepare for re-use
b2e5fe5cc
- automatically start webserver for compare report
47bc28454
- add prompts for creating a report on failure
b79079271
When
run_replay_tests.py
fails, a prompt is now shown to generate a compare report either from already-created baseline snapshots, from GitHub Actions, or from running a release revision locally.Much of the functionality needed for this was already present, this just ties everything together and makes it much simpler to generate a report.
- auto update new script test
2af517bb1
- restore scripts compiled by playground.qst
1f78aefca
These were removed from the package in aa3d87, but we actually need some of them for playground.qst
- add playground_scrolling_script.zplay
c34b92a76
- add dark.zplay
aaf68685f
- support substring for run_replay_tests.py --filter
298d40c55
- add test_zquest.py. tests compile, slot assign of playground.qst
bd682985e
- move ghost replay into playground.qst
3294b1866
- rename lifting and rocs_feather replays
8c5058b1c
- remove replay comment when jit fails to compile
6289180bf
- fix web replay tests hanging
93fc09090
- add ganon.zplay
fbab82705
CI
- clone before downloading release artifacts
dd3bfcbb2
Apparently the checkout action deletes the current directory first. Lame.
- skip solid.zplay until it is re-recorded
38e4ec35e
- fix release tag for branches
5f647e9dd
- fix release tag for branches (really)
465dd9c71
- remove release cron
cfcd1291e
- specify version of PyGithub
aaf2edaaf
Misc.
- add git hooks to validate commit messages
a8f26b259
- add scripts/generate_changelog.py
3892158f1
- grab test builds from CI for bisect tool
f2e437a9f
- print changelog on every step in bisect tool
8bb31d154
- allow advancing in bisect tool without closing program
a6b9a8584
- cache if release has a valid package for windows in bisect tool
f93e19187
- fix git hook script when core.commentchar config not set
d35712951
- reverse commits in changelog for more natural ordering
423f04791
- use separate folder for downloaded release builds
f57703681
- fix wrong scope suggestion
9fb96dc55
- include commit body in changelog
a29611391
- ./zelda -load-and-quit
<qstpath>
9bf02571c
- automate fuzzing process
fd3e64168
- remove unneeded init code for fuzzing quest loading
d85c83770
- update used QRs in quest database
d4bb90020
- include deprecated_rules in qr analysis
999523839
Editor
- Change "Place + Edit FFC #" text to "Edit New FFC #" for clarity
d21b3dfad
- do less setup for -copy-qst command
4c4e37a6a
2.55 Alpha 114
Changes to packaged files
3f2ce2
Remove resources/docs/Zelda_Classic_and_ZQuest_2.53_API_Specification.pdf6b2343
Remove resources/docs/zscript_manual.rtfc29e6f
Remove resources/ZCL-changelog.txtaa3d87
Remove resources/scriptsb4c455
Add '255example.qst'
Features
General
21447f
addd8a
8ad107
58d3d0
Add ability for lifted combos to be bombsb08454
add 'Lift Flags' - allow disabling shield/items while lifting075935
Add QRs for lifting+scrolling/warping behavior optionsca30be
Preliminary: allow user created portals884169
Add Trigger Groups (i.e. light all torches -> trigger secrets)1c6aad
Add weapon ignitingf6245e
eb40f0
Item display namesf460b4
"Newer Player Movement" (#856)13a30d
Add "Locked String" to lockblocks/chests, display a string when failed to open7d0f10
Add SCC for run generic frozen scriptc249c9
update std_functions: add LoadMapDataDM(int dmap, int scr)7b16cf
Add more special draw layers82ba2f
Some work related to combos+weapons (Step->Effects,Shooters)ce3c0a
Add generic script frozen mode triggered by combo triggers012ec9
Stop using encryption password for qst allegro packfile5304bd
Remove encoding layer from qst files. This makes opening quests roughly 50% fastera79f3a
Support reading and saving as qsu (uncompressed file)f2e5f0
Update 'example fonts'64d42a
Some reworking of bombs
Player
921302
Init Data / Cheats uses item Display Name
Editor
0668a5
Allow quick slot assignd5e0eb
support undo/redo for ffcs24c2ad
support undo/redo for single flag placement473b50
83f286
625564
Add QR hint system to info boxesdcdee8
Remove import/export options for ZQT and QSU files3c95bf
Add configurable cursor color for tile/combo pages5c9416
Add symbols to font preview lipsum textafdc32
New item selection list dialog8f6aff
Add lift glove help textff66e1
Add tile editor visual options9caad3
Add bomb flowers to default quest4dbba1
Add radial bomb flowers to default quest
ZScript
2a792b
Add Hitby stuff to std_constantsf098ea
Add 'Hero->HammerState'debfac
Add script access typesportal
/savedportal
246f8b
Add 'npc->CanPlace()' for checking teleportation movement.2baa25
Add custom mouse script support05723f
Add 'Hero->MoveXY()'/'Hero->CanMoveXY()'530f7c
Lifting script access workb22264
jit: compile FLOOR and CEILING
ZLauncher
5b8a6b
allow configuring gfx driver for player on windows
Bug Fixes
General
50167b
Fix jwin_file_browse_ex not applying selected extension54bcde
Fix some gui color issues with certain "disabled" elements6dfbcf
Fix segfault in file select extension filter005870
Fix uncleared combo bitmap1ba148
Revert non-windows ignoring 'ignore monitor scale' checkboxe51281
Fix zfix dobound swapping values when it shouldn't.59c413
27b421
Fix tile preview in item lister5f053f
Fix vanishing text0b42b7
Frame infobutton stuff278243
Attempt Fix gui lag issuesdb9c3d
Fix allegro.log oddities / trace handlingd49bb1
color a5 bitmaps on init to avoid random tint
Player
4670ce
copying save file should also copy replaye77af5
some movement fixes and improvementsa13395
Fix scroll frame timing issuebe20d2
Never use linear scaling for game bitmap2ed468
Fix edge case bug with scroll warps and dmap script waitdrawc5b367
Fix lockblocks/chests double-playing locked strings2d5e12
Fix Opening file in append mode now creates missing directoriesdd0d45
Fix Hero->ReleaseLiftWeapon not working19979b
Fix SV Ladder 'force face up' during scrolling72834b
Fix facing direction affecting movement wrongly830a8a
Add conveyor force-walking5dd40b
Fix candle/arrow 'max per screen'b966e1
'Shutters->' fixes/tweaks40e795
Fix icy pushblock interactions with block holes.f79fd3
Fix ANCIENT ZQ subscreen selector bug.8f17aa
Fix bad coordinates with bush ffcs81398d
Fix oddities with loading save files of missing quests646eed
Fix crash when missing save filesf741b4
Fix some CanMove stuff765eac
Fix mirror portal in top left1a50e8
Fix gleeok heads not drawing correctly on first framecba517
Fix all remaining HitBy bugs (hopefully; TODO: add QR for ignoring nayru's love for HitBy)cb587f
Fix crash with invalid ids with npcdatae75cc3
Cheat invincibility now protects from drown/pit damage2a4df0
Enemy / solid object interaction fixes5ccdfd
Fix solid ffcs pushing on wraparound8c4f32
Fix 'Enemies->Item' with enemy waves interaction9975b0
Fix warpEx scrollwarp visual bug with mapeaf5fe
Add hardcode layer 'SPLAYER_PLAYER_DRAW' to draw to player sprite layer.c7aa72
Scripted enemy movement fixes03a8c9
Fix solid ffc hangb305f2
Fix bad HitBy melee interactionsf42982
Fix enhanced music cutting out when tabbing back into the windowce390d
Fix layered pound blocks being hit by midair hammer07f8fe
stop loading quest template to reset items3f8f62
never init from a quest template2a5734
Fix triforce + item bundles6b6744
Fix melee weapons not respecting all of HitBy's properties (UID, etc)5e26e8
Fix wrong item id check565c50
Fix dialog mouse offset at large resolutions?d8f658
Fix mouse not showing during some popups0de954
Fix zc mouse showing during gameplay, setup for fancy mouse stuff.f1f9c8
Fix onCredits messing up gui bitmap transparencyca7839
avoid wasted computation in overpit92287c
717878
f8fa5f
01fcce
improve eyeball combo during scrolling
Editor
84bf0e
Fix preview mode 'preview combo cycling'811622
Fix 'Show FFCs' not respecting preview mode35dd54
Fix decimals not being saved in zquest hopefully?ac4d20
Fix wrong QR description820b3f
Optimize slot assign; no more temp files7523dc
Reduce 'do_slots' duplicate code2de58e
Clean up ZQ errors, add fonts.dat size error messageecb6b3
Fix combowizard for shooter not saving directionddc8e4
Fix Screen palette can be changed on null screens71071d
Fix frame titles being visible in the wrong tabsa738e8
Fix locked chest/lockblock combo wizard60761a
Fix favorite combo offset on quest saveef294b
Item editor pickup tab revamp13bb56
Fix shallow water combo wizard77f342
Rework tile grab GUI: Fix 0xFF transparency issue, text cuttoff issueb31eac
Fix brush width/height when changing combo in some waysc6f52b
Fix minimap right offset386d15
Fix zq minimap offsete92322
Fix grave/bsgrave combo wizard60efdd
If DragAspect is on, force aspected xscale/yscalea92a19
Fix placing ffcs not snapping to the half-grid24b134
Fix favorite combo misalign / mappage bookmark overwrite when grabbing tiles42b98a
Fix max brush size being ignored by autobrush89d870
Fix combo editor CSet- and T shortcuts1d5a82
Fix combo brush when selection crossed combo page boundary3f862a
Fix tile grid state when undoing dungeon/relational drawingda42a8
Fix eweapon dropdown error9e528c
oxford commasc5f7f1
Allow prompts to show from triggers tab even when 'Button: 0'
ZScript
fac141
Fix scripts with >8 params hanging on compilea743bc
Fix 'Hero->ReleaseLiftWeapon()' not compiling4671e5
Fix MAPDATACOMBOTD setter referencing combo of the wrong screenbb5cef
Fix string/array literal allocation error64acf7
Fix 'Game->DisabledItems[]' not updating item cachefd8738
Fix bad 'dmapdata->' Get/Set functions1078cf
Fix enum assignment const checks87fb4c
Fix?: Script npc->MoveXY ignored solid FFCs7732f3
Fixthis->
not writable in user constructordf8266
Fix string/array literal allocation error for real2d30a7
update std.zh: Fix FireE/LWeapon functions0c246f
jit: fail compilation if function return cannot be resolvedfbce61
jit: support class construction function calls
2.55 Alpha 113
Full Changelog: https://github.com/ArmageddonGames/ZQuestClassic/compare/2.55-alpha-112...2.55-alpha-113
2.55 Alpha 112
View the release notes here: https://gist.github.com/connorjclark/b3147f4019bad30fe9df4aa1d55ed884
Full Changelog: https://github.com/ArmageddonGames/ZQuestClassic/compare/2.55-alpha-111...2.55-alpha-112
2.55 Alpha 111
Full Changelog: https://github.com/ArmageddonGames/ZQuestClassic/compare/2.55-alpha-110...2.55-alpha-111
- Fixed a serious bug released in Alpha 110 where item positions would get reset for cave warps. If you saved in that version, you'll need to re-set those item positions. Always remember to backup quests when upgrading versions!
- For the longest time, input would be unpredictably ignored or delayed a few frames for button press checks. No more! If you have super sensitive timing, you may notice the game has become more responsive to your button mashing.
- More, see the changelog!
Detailed Changelog
// Alpha 111
Fix shadows not drawing on enemies that do not 'Obey Gravity'.
( EmilyV, 23rd Oct, 2022 )
Add 'GetEquipmentX()'/'GetEquipmentY()' to std_functions.zh
Update 'UsingItem()' in 'std_functions.zh' to check x/y buttons
( EmilyV, 22nd Oct, 2022 )
Change the 'Global State' flag on switches/switch blocks
to 'Flags[10]' instead of 'Flags[9]', because
it was overlapping with another flag...
(this might break quests that were using this, sorry!)
( EmilyV, 19th Oct, 2022 )
Fix scroll warp color change timing bug
( EmilyV, 19th Oct, 2022 )
Fix duplicate cursor displaying
( connorjclark, 19th Oct, 2022 )
Fix some buttons not working properly
Fix lifting an item with a lift glove allowing you to swim
Fix: Now when drowning / falling in a pit with a combo lifted,
you will drop the combo.
( EmilyV, 18th Oct, 2022 )
Fix item position not saving properly on screen 0x80+
( EmilyV, 17th Oct, 2022 )
Allegro mouse fixes
( connorjclark, 16th Oct, 2022 )
Fix negative item pickup amounts
Fix the mouse clipping through some dialog text
( EmilyV, 15th Oct, 2022 )
replay fixes
( connorjclark, 14th-22nd Oct, 2022 )
Fix '^' characters in control settings dialog
( EmilyV, 14th Oct, 2022 )
Add 'Unsafe Ground' flag, for new pit/drowning respawn
to mark positions as 'not safe to respawn on'.
( EmilyV, 13th Oct, 2022 )
2.55 Alpha 110
Full Changelog: https://github.com/ArmageddonGames/ZQuestClassic/compare/2.55-alpha-109...2.55-alpha-110
Detailed Changelog
// Alpha 110
Actually fix string margin issues, for real this time, I swear.
( EmilyV, 12th Oct, 2022 )
Enhanced music fixes for dmap music
( Deedee, 10th Oct, 2022 )
Fix zc save file name config not working
( connorjclark, 10th Oct, 2022 )
Fix computer-specific cursed bug relating to screen flag script access
Fix version-info related issues
ZScript Debug Console now clears on loading quest, and prints
version info for the current build and the quest on clear.
Fix string compat issues
Fix combo editor missing labels
Fix cheats 'Player Data' window off-center
( EmilyV, 10th Oct, 2022 )
Fix sprite data editor not saving changes to sprite name
( EmilyV, 8th Oct, 2022 )
Reduce excess code generation (reduce .exe file size)
( connorjclark, 7th+8th Oct, 2022 )
Attempt fix 'Windows scaling issues' bug
( Deedee, 6th Oct, 2022 )
Fix ZScript 'Pow()' crashing
Fix weird issue with bush combos on FFCs and script-spawned weapons
( EmilyV, 6th Oct, 2022 )
Add script access to more lifting/trigger related
combodata variables.
( EmilyV, 4th Oct, 2022 )
New replay/recording system. See `docs/replays.md` for instructions.
( connorjclark, 3rd Oct, 2022 )
Fix string right margin
( connorjclark, 2nd Oct, 2022 )
All textfields now support system clipboard copy+paste
with Ctrl+C, Ctrl+V
All textfields now can be cleared with Ctrl+Del, Ctrl+Backspace
Insert SCC dialog copy/paste to clipboard buttons
( EmilyV, 2nd Oct, 2022 )
Blank tiles take up less space in quest file
Upgrade sprite data editor
( EmilyV, 1st Oct, 2022 )
Fix lift glove crash
Fix compiler settings not saving properly
Fix player sprite dialog issues
( EmilyV, 30th Sept, 2022 )
// 30th Sept nightly
Fix scripts not finding the correct folder to create files in
Fix ZScript Compile related crashes
Fix GUI/Scrollbar related crashes
( EmilyV, 30th Sept, 2022 )
// 29th Sept nightly
Fix default quest
Add 'Insert' and 'Remove' ('I' + 'Shift+I') to tile editor
Fix sfx on 'Direct Warp' combos sticking
( EmilyV, 29th Sept, 2022 )
// 28th Sept nightly
Add 'Lifting' and 'Lift+Walk' player sprites
Update default quest
Fix scrolling warp palette oddities
( EmilyV, 28th Sept, 2022 )
// 27th Sept nightly
Fix menu-related SCCs
Fix save point menu cursor moving when holding buttons
Save Point combos now support 'ComboType Effects' triggers,
and have flags/attributes to allow healing the player's
life and magic when activating the save point.
Fix script writing 'weapon->DeadState' not properly resetting
'dying frame' to keep weapon alive.
( EmilyV, 27th Sept, 2022 )
Quest MIDI Info now always allows listening
( EmilyV, 25th Sept, 2022 )
Fix L/R quickswap eating inputs even when disabled by QR
Fix jumping twice in one frame with feather button option
Add 'Alt+Click' on 'Favorite Combos' to 'Scroll to Combo'
( EmilyV, 24th Sept, 2022 )
Fix floodfill crash on layers
( connorjclark, 24th Sept, 2022 )
Fix combo pools/lifting being offset when inserting/moving combos
Fix favorite combos menu
( EmilyV, 21st Sept, 2022 )
Fix softlock when click+dragging on dropdowns
( EmilyV, 20th Sept, 2022 )
Add hex value box to palette editor
Fix crash when using both '->Secrets' and 'Triggers Secrets' on
the same combo
Add button-based option to feathers
( EmilyV, 19th Sept, 2022 )
Fix 'Flags' button on screen enemy dialog going to wrong
tab of screen data
Fix lockblock-related bug
Fix string margins
( EmilyV, 18th Sept, 2022 )
Add 'Thrown' weapon combo trigger
Add 'lift height'/'lift time' combo options
( EmilyV, 17th Sept, 2022 )
Add advanced 'jinx' related options to items
( EmilyV, 16th Sept, 2022 )
Add 'Lift Glove', combo lifting
Fix crash related to having a 0 bomb ratio
( EmilyV, 13th Sept, 2022 )
Compress screen data, greatly reducing quest file sizes
Fix 'flip' for large-sprite enemies
Add 'Combo Pools', similar to combo aliases, used to place
a random combo from a weighted pool of combos. Intended to be useful
for decorative purposes, ex. random varying grass/flowers
( EmilyV, 10th-11th Sept, 2022 )
Add multiple-undo/redo to screen editing
( connorjclark, 10th Sept, 2022 )
Fix 'ResizeArray()'
Compress combodata, reducing quest file sizes.
( EmilyV, 9th Sept, 2022 )
Optimize ZScript array initializers
( EmilyV, 8th Sept, 2022 )
Add new enemy movement flags
( EmilyV, 7th Sept, 2022 )
Allegro 5 / image loading fixes (bmp)
( connorjclark, 5th-7th Sept, 2022 )
Fix ZLauncher missing window frame
( connorjclark, 3rd Sept, 2022 )
Add 'Shooter' combo type- a custom turret combo
Add 'Cooldown' timer for combo triggers
( EmilyV, 2nd Sept, 2022 )
Fix dragging items
More combo triggers tab options
( EmilyV, 31st Aug, 2022 )
Fix 'bitmap->GetPixel()' not being *10000
Add 'bitmap->CountColor()'
( EmilyV, 29th Aug, 2022 )
Add global and timed states for Switch combos
Update 'Video Mode' dialog to allow custom resizing of the window
( EmilyV, 21st Aug, 2022 )
Fix auto-warps repeating infinitely
Fix cheat code editing dialog
( EmilyV, 20th Aug, 2022 )
Fix program not exiting correctly
( connorjclark, 19th Aug, 2022 )
Try to fix mouse cursor lingering at edge of screen
( EmilyV, 19th Aug, 2022 )
Fix 'Progressive Item' showing incorrect tile on hold up
( EmilyV, 18th Aug, 2022 )
Bug fixes!
Too many. See detailed changelog.
Better undo/redo
Better undo/redo history for screens editing. Before U
would only remember one change. Now, it remembers all the changes like a proper undo/redo system.
New shortcuts: CTRL+Z to undo, and CTRL+SHIFT+Z/CTRL+Y to redo. (CMD for Mac people)
Recording/replay system
To prepare for the upcoming z3 scrolling update, we need many recordings of games to add to a test database. If you want to help with that, please send us your .zplay files! Read on to see how:
NOTE: use the latest nightly to record a game, as there is a critical bug for recording in Alpha 110.
the following is from docs/replay.md
Replays are .zplay text files that ZC can create and play back to replay a game session. All button inputs and RNG seeds are recorded so that ZC can recreate the same playthrough frame-by-frame. Here is a demo.
This system was created primarily as a way to create automated tests. For more on that, see tests/run_replay_tests.py.
A new save file can be recorded by selecting the ZC > Replay > Enable recording new saves menu option. This will make any new save file also be recorded. You'll see an alert box telling you where the file will be saved. You can save and continue whenever without harming the recording process.
At any time, you can playback a replay in the ZC > Replay menu to watch it again, and can even take manual control whenever you want. This will not modify any exiting saved games. Note that you currently aren't be able to persist a save file when replaying a .zplay from this menu.
Later work on this system may introduce more user-facing features, such as savestates, rewinding, or creating a new game file from a replay.
In the meantime, a great way to contribute to ZC development is to enable the recording feature for your new games, and provide us your .zplay files. You don't have to finish the game, any amount of playthroughs could be helpful. The more we have, the better coverage our testing system will have, and the fewer regressions/compatibility bugs there will be!
2.55 Alpha 109
Full Changelog: https://github.com/ArmageddonGames/ZQuestClassic/compare/2.55-alpha-108...2.55-alpha-109
Detailed Changelog
Add 'OwnArray()'/'DestroyArray()' functions
( EmilyV, 17th Aug, 2022 )
Fix more conveyor bugs
( Deedee, 17th Aug, 2022 )
Fix light beam visual glitch
Add 'itemsprite->DroppedBy'
Fix droplist right click crash
( EmilyV, 16th Aug, 2022 )
Generic script 'WaitEvent' system
Fix ring/damage combo interaction
( EmilyV, 15th Aug, 2022 )
Fix slow midis
( connorjclark, 15th Aug, 2022 )
--Aug 15th Nightly
EWeapon combo triggers
( EmilyV, 15th Aug, 2022 )
Fix bugged cost counters
Fix item 'pickup amount' bounding
Add new combo trigger options (Lens, Light Beam, Push)
'Toggle Transparent' combo flag
Fix FFC 'Run at screen init' not working immediately after loading from save select screen
( EmilyV, 14th Aug, 2022 )
Fix undamaged ghoma not blocking properly
( Deedee, 14th Aug, 2022 )
--Aug 13th Nightly
Fix conveyor bugs
( Deedee, 13th Aug, 2022 )
Add draw 'Layer' to message strings / string editor
More combo triggers stuff; invert required item,
consume required item, and option to require/consume a counter as well.
( EmilyV, 13th Aug, 2022 )
Fix lockblocks on layers 1/2
( EmilyV, 9th Aug, 2022 )
Add 'Save ZInfo'/'Load ZInfo' buttons
( EmilyV, 2nd Aug, 2022 )
Upgrade subscreen properties dialog
Add config 'auto_filenew_bugfixes' (default on)
If enabled, compat rules are automatically bugfixed when creating a 'New' quest.
Update default quest.
( EmilyV, 1st Aug, 2022 )
Add 'Hero->Standing' and 'Screen->TriggerCombo()'
Fix mirror light beam shield interaction
Add 'Copy Text'/'Paste Text' buttons to string editor
( EmilyV, 30th July, 2022 )
ZScript exponentiation operator '^^^'
Add system clipboard copy/paste for zscript buffer
( EmilyV, 29th July, 2022 )
'About' dialog expanded (now includes a button to copy info for bug reports)
Quest rules can now be exported as a string to the clipboard
Add numeric 'ID' searching on numbered listers
Fix GUI issues
( EmilyV, 27th July, 2022 )
Update icons
Fix lockblock/locked chest flags
( EmilyV, 26th July, 2022 )
2.55 Alpha 108
Full Changelog: https://github.com/ArmageddonGames/ZQuestClassic/compare/2.55-alpha-107...2.55-alpha-108
Highlights
- Official Mac and 64-bit builds
- Allegro 5 update - potentially better driver and midi/music support
- Windows can now be resized
- Combo Trigger major upgrades
- Show a "apply all compat quest rules" in ZQuest if applicable. 99% of the time, you should turn all of these off!
- Various performance improvements
- Fix Manhandla crash when killing multiple heads at once
- Added 32 extra states per-screen, useable by chests and lock blocks
New ZScript features
Optional parameters
////////////////////////////////
// Function Optional Params //
////////////////////////////////
You may now have optional parameters in functions.
[example--
void foo(int x = 25)
{
Trace(x*2);
}
foo(); //Traces '50'
foo(10); //Traces '20'
--end example]
Optional parameters cannot have any non-optional parameters listed after them.
The default value for an optional parameter must be compile-time constant.
Detailed log:
Fix decorations -2 yoffset (compat qr)
Add 'ExtraStates' to screens, usable by chests/lockblocks to have >1 per screen
Add custom item contents for chests
Add 'Bugfix' popup when loading a quest with compat rules checked
( EmilyV, 24th July, 2022 )
Fix rounding issues
Fix scripted internal ghost-based movement functions
Fix manhandla crash
( EmilyV, 22th July, 2022 )
More combo trigger stuff
( EmilyV, 21st July, 2022 )
Stop 'Palette' dialog from popping up when 'Alt+F4' is used
Undercombo dialog now edits undercombo for the current layer
Fix pushblock layer behavior
Add 'itemsprite->ForceGrab' to allow scripts (and chest combos)
to force an item to be picked up by the player.
Combo trigger SFX
( EmilyV, 20th July, 2022 )
Fix 'Return To File Select On Death/F6' qr
More combo trigger stuff
( EmilyV, 19th July, 2022 )
More Combo Trigger stuff
( EmilyV, 18th July, 2022 )
Fix small mode dialog cutoff
( EmilyV, 17th July, 2022 )
Add 'stack' type to ZScript
Fix std_zh angle issues
Begin work on new combo TriggerFlags stuff
QR for fast counter drain
Fix item scripts behaving wrongly when the 'run for multiple frames' rule is off
( EmilyV, 16th July, 2022 )
Add 'No Damage Protection' boots flag
Fix subscreens using the wrong item IDs when multiple items of the same 'Level' are owned
( EmilyV, 13th July, 2022 )
Add automatic crash reporting
( connorjclark, 11th July, 2022 )
Fix warps not properly deallocating owned script objects for dmap scripts
( EmilyV, 11th July, 2022 )
Fix subscreen editor default value of magic gauge pieces 'Show:'
( EmilyV, 10th July, 2022 )
Keyboard sticking fixes
Exporting image palette fixes
Fix scrollpane crashes
FPS optimizations
( connorjclark, 9th July, 2022 )
Fix FFC editor changing combo placement cset
( EmilyV, 8th July, 2022 )
Image loading fixes
Window Resizing improvements
( connorjclark, 8th July, 2022 )
Add '-unlinked' mode for zscript parser
( EmilyV, 4th July, 2022 )
Rename 'OceanSFX' to 'Ambient SFX' (ZScript)
( EmilyV, 3rd July, 2022 )
Mac (OSX) fixes
( connorjclark, 2nd July, 2022 )
Update 'std_zh'; add 'ghostBasedMovement.zh'
( EmilyV, 30th June, 2022 )
More Allegro5 fixes
( connorjclark, 26th June, 2022 )
Add '*weapon->Flags[]', including [WFLAG_PICKUP_ITEMS], a flag which allows weapons
to automatically collect items they touch, similar to how engine melee weapons do so.
Hopefully fix 'lweapon->Weapon' not working properly at all.
( EmilyV, 26th June, 2022 )
Fix alt key shortcuts not working properly
( connorjclark, 25th June, 2022 )
--June 25th nightly
Fix zscript compiler console closing even when warnings were thrown.
( EmilyV, 25th June, 2022 )
Optimize ZScript internally (various small optimizations)
Fix editing the ZScript buffer causing a hardlock
Fix spawned sprite object (ex. bushes/generic combos) repeating the first
frame at the end for one frame
( EmilyV, 24th June, 2022 )
--June 23rd nightly
Upgrade to Allegro 5 (major backend change)
( connorjclark, 23rd June, 2022 )
Add 'messagedata->Length', to read the length of a message string
Update std_functions 'GetMessage()':
If the passed array is too small, it will be resized to be large enough
Now works with strings <140 chars
( EmilyV, 23rd June, 2022 )
Removed debug messages
( EmilyV, 20th June, 2022 )
Fixed Hover Boots
( Deedee, 19th June, 2022 )
Add 'optional parameters' to ZScript
see ZScript_Additions.txt for details
( EmilyV, 12th June, 2022 )
Fix subscreen bugs
Fix sideview swimming bugs
( Deedee, 11th June, 2022)