ZeldaClassic Versions Save

ZQuest Classic is a game engine for creating games similar to the original NES Zelda

2.55.3

4 days ago

Download from the website, or at the bottom of this page.

Full Changelog: https://github.com/ZQuestClassic/ZQuestClassic/compare/2.55.2...2.55.3

Bug Fixes

  • correct the version string for 2.55.x releases 387e6c05c
  • incorrect default right string margin ae1c890e7

Player

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 z3 e02113363  

    Region->OriginScreen is now of type screendata, and Region->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 for yuurand.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

3.0.0-prerelease.53+2024-05-08

1 week ago

To download this release, visit the ZQuest Classic website or see the bottom of this page.

The following are the changes since 3.0.0-prerelease.52+2024-04-22:

Features

  • ZScript arrays now are separately typed from non-arrays. cf2769fe9  

    Array types can be declared by adding [].

ZScript

  • option 'OLD_ARRAY_TYPECASTING' to use old array type handling d7555bf9e

Bug Fixes

  • correct the version string for 2.55.x releases 7d9ceee14
  • incorrect default right string margin 1428ca004

Player

  • visual text bug in sound panel 5f16c4d04
  • active shields interacting with light beams while inactive 96aeccbc5

Editor

  • arrow buttons above combo columns sometimes not working properly 1af434da4
  • "Used Tiles" completely failing to calculate 009d59164

ZScript

  • object fields not being available in dtor 7feb9afdd  

    This regressed because of the recent GC changes.

  • compiler crashing on for-each loops b00f59aad  

    This regressed because of the recent error locations refactor.

  • some bindings ZASM using wrong literal values 975cf9c60
  • 'loop()'s not having location metadata associated with their identifier 68a5f70c8
  • 'hero' and 'link' script types not compiling 4ce3a2186
  • code gen for range loop using wrong op 213361564
  • handle engine subscreen in ScriptTypeToString 19edaac07

Documentation

Editor

  • touch up attack/whimsical ring help text ('damage' -> 'power') c5da0a5c6

Refactors

Player

  • rename the "ZScript Debugger" to "ZC Console" d44b13ffa

ZScript

  • array literals better deduce their element types 3717da293
  • use faster register allocation in jit 50b8b0bf2  

    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 for yuurand.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.

  • remove ZASM debugger bb5404c8d  

    This was already made inaccessible from the GUI in 1da2d02, but now it is removed entirely. Work on a real debugger will begin soon.

  • type-safe opcode classes and use zasm table for stringification 75dc4d745
  • separate zasm code from script data 75f981f57

Tests

Misc.

ZScript Standard Library (std.zh)

  • update headers and bindings with array typing b23b23484

3.0.0-prerelease.52+2024-04-22

4 weeks ago

To download this release, visit the ZQuest Classic website or see the bottom of this page.

The following are the changes since 3.0.0-prerelease.51+2024-04-14:

Features

Visual Studio Code Extension

  • support @link tags in hover tooltips 1430272d2  

    Comments may contain inline links to other symbols with the @link tag:

    // Better than {@link counter2} ... {@link counter2|that counter is lame}
    int counter1;
    // This also works as shorthand for links: [counter1]
    int counter2;
    

    When hovering the mouse over any usage of counter1, the tooltip will render these as clickable links that navigate you to the specified symbol.

Bug Fixes

ZScript

  • handful of zasm commands using wrong name fd5901f67
  • Trace(string) using wrong register db2256d50
  • wrong names for zasm npc InitD and item WeaponHitWidth 00c1ec410
  • various symbols with broken compiler output 672597c11  
    • 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 f6d59d044

Visual Studio Code Extension

  • invalid uri on windows for links in hover tooltip 179d55946

Refactors

ZScript

  • move zasm table and serialization to shared lib c483f611c
  • remove separate zasm defines for compiler bcd079539
  • improve location of many error messages 52949459f
  • reduce the scripts included by default eed542419  

    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 and tango/1.2 (keeping just 1.3)
    • move sram.zh to deprecated/sram.zh
    • move theRandomHeader_v3.zh to deprecated/theRandomHeader.zh
    • move time.zh to deprecated/time.zh
    • move example scripts to headers/examples
    • remove std including EmilyMisc.zh - include yourself as needed
  • deprecate many getters/setters, replace with variables 46ca3bfa8  

    ~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;
    
  • move internal symbols to new binding .zh files 011539980  

    Internal symbols were defined in .cpp files, but now they are defined in .zs files with a new internal keyword and @zasm doc comments. These files live in bindings, and are automatically included for every compilation.

    This should simplify the process of adding new internal symbols. It also enables viewing documentation of any internal symbol in the VS Code extension (w/ a hover tooltip), and all the documentation we have for internal functions and variables has been inserted as comments in the binding files.

    This also deprecates functions that create an object of internal types, like Game->CreateBitmap(width, height) - and replaces with normal constructors - new bitmap(width, height).

  • remove library symbol cpp files 76a67b371
  • remove internal class type b76078275

Misc.

Visual Studio Code Extension

2.55.2

4 weeks ago

Download from the website, or at the bottom of this page.

Full Changelog: https://github.com/ZQuestClassic/ZQuestClassic/compare/2.55.1...2.55.2

Features

Editor

  • 'Notes' per-screen for editor use 4ed3e71bc
  • ffc editor now previews large ffcs 20ba0bc09

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.

3.0.0-prerelease.51+2024-04-14

1 month ago

To download this release, visit the ZQuest Classic website or see the bottom of this page.

The following are the changes since 3.0.0-prerelease.50+2024-04-07:

Features

  • 'Toggle Darkness' trigger flag (toggles current room being a dark room) ff6c8151e
  • 'Req. Darkness' / 'Req. No Darkness' trigger flags; act as conditionals on a room being dark or not dae41c8c7
  • Trigger flags relating to LItems (map,compass,etc) 42b835781
  • Trigger options relating to tinting the palette 4917cea2d
  • Trigger options relating to changing palette and wavy/quake vfx 9220affe4
  • Trigger options relating to status effects and 'Push->' timing 3ee3da857

Player

  • 'Toggle Lights' cheat works on new dark rooms 1f74bdc0a

Bug Fixes

  • 'Screen->Lit' not compiling; now properly returns (and sets) screen's lit state 8f50a32f5
  • removed flag that was breaking mod playback 5dd03e998

Editor

  • warp dialog selector mishandling negative dmap offsets bc0c7ac8e
  • memory issue when moving/inserting tiles/combos 3c72e3712

ZScript Standard Library (std.zh)

  • 'TRIGFLAG_' constants were off-by-one at a certain point in the list 5e06d5629

Refactors

Player

  • reduce duplicated code for trigger conditionals

      Relevant changes:

    • refactor(zc): reduce duplicated code for trigger results f20ddc1b4

Editor

  • re-organize the combo editor 'Triggers' tab 53310a254

The following are the changes since 3.0.0-prerelease.51+2024-04-14:

Expand changelog

3.0.0-prerelease.50+2024-04-07

1 month ago

To download this release, visit the ZQuest Classic website or see the bottom of this page.

The following are the changes since 3.0.0-prerelease.49+2024-04-06:

Features

Visual Studio Code Extension

  • document symbol outline, hover tooltips and "Go to Definition" dbd473b97  

    This patch greatly enhances the capabilities of the language extension. New features are:

    • A symbol outline of the current script, showing all variables, functions, classes, namespaces, etc.
    • Tooltips on hover, shown if a variable/class/whatever was declared with a comment. This supports markdown
    • "Go to Definition" to jump to where something is defined. You can right-click to see this option, or CTRL/CMD+click on something

Bug Fixes

  • update 'default.qst' 4e1bd29e4  

    Several default subscreen fixes (some by P-Tux7, some by myself)

Editor

  • crash on reducing map count e061ad48b
  • crash on moving combos in quests with many maps/screens 80af019ef
  • Improve efficiency of combo moving + fix crash + fix 'undo' combo move 4efe6b07d
  • Improve efficiency of tile moving + fix 'undo' tile move 7b26369e0

ZScript

  • '@AlwaysRunEndpoint("off")' erroring despite being valid 26c78ebec
  • exit process when preprocessor recursion limit is reached 58aaefd3a

Visual Studio Code Extension

  • 'AlwaysRunEndpoint' annotation missing syntax highlighting b5b8ef720
  • 'loop' keyword missing highlighting, add range operators to operator list df11ee40f

Misc.

Visual Studio Code Extension

3.0.0-prerelease.49+2024-04-06

1 month ago

To download this release, visit the ZQuest Classic website or see the bottom of this page.

The following are the changes since 3.0.0-prerelease.48+2024-04-05:

Bug Fixes

ZScript

  • 'Hero->Warp()' using current screen's warp return square value 1f010f2d6
  • stack offset issue when 'return'ing inside a 'loop()' dc6c35037
  • not correctly removing stale pointers on reload 4bd0e5412

Misc.

3.0.0-prerelease.48+2024-04-05

1 month ago

To download this release, visit the ZQuest Classic website or see the bottom of this page.

The following are the changes since 3.0.0-prerelease.47+2024-04-04:

Bug Fixes

Player

  • bug in dead code optimizer when register is both read and written to 2ed2cd56d

Editor

  • upgrade tile 'move' code, more things now update on moving tiles (#916) 5c29d6f4e

ZScript

  • allow simple types to match a template array type, for now 08756b8cb

Build

Misc.

  • fix(zq): upgrade combo 'move' code, more things now update on moving combos, add Combo overwrite warnings (#917) e8d903186

3.0.0-prerelease.47+2024-04-04

1 month ago

To download this release, visit the ZQuest Classic website or see the bottom of this page.

The following are the changes since 3.0.0-prerelease.46+2024-04-04:

Bug Fixes

ZScript

  • handle non-global objects correctly when reloading game f93172d33

3.0.0-prerelease.46+2024-04-04

1 month ago

To download this release, visit the ZQuest Classic website or see the bottom of this page.

The following are the changes since 3.0.0-prerelease.45+2024-04-02:

Features

Editor

  • ffc editor now previews large ffcs a3cf09ddc

Bug Fixes

  • Improve dropdown numerical search c729bb682
  • reduce sfx buffer to decrease lag caused by e7c214e 803871558

Player

  • some variables being improperly reset on 'Continue' 7cfededaa

Editor

  • 'Notes' and 'Browse Notes' not having menu buttons 5c338087d
  • avoid overwriting screen bookmarks on quest load 771f801de
  • 'Gen Flags' being missing from combo advanced paste 7a84cbf40

ZScript

  • don't only show singular deprecation warnings 88898e22f

Refactors

ZScript Standard Library (std.zh)

  • remove instances of deprecated functions 331bbd4e3

ZScript

  • better 'read-only' compile warnings bffa9428d  

    also makes aliases of getters/setters work

Tests

  • add tests for read-only vars and deprecation 29094bbe5