Skip to content

3.0 Prerelease 53 2024-05-08

Pre-release
Pre-release
Compare
Choose a tag to compare

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