Ethin Probst on 2026-07-10T00:05:06Z: Hopefully fix typos in atomics registration templates
Ethin Probst on 2026-06-22T22:59:47Z: Add remaining atomic primitives
Sam Tupy on 2026-07-08T12:00:48Z: remove recently introduced extra not opperator making json_object::get nonfunctional
Sam Tupy on 2026-07-07T22:39:33Z: oops missing recursive copy flag when handling android_lib on CI windows_package
Sam Tupy on 2026-07-07T22:13:13Z: CI windows_package step was not copying lib_android to primary release directory
Sam Tupy on 2026-07-07T21:51:51Z: fix another memory leak in json when default value is provided to get and query
Sam Tupy on 2026-07-07T21:26:41Z: disable default android_apk scons alias as it made plugins not build
Sam Tupy on 2026-07-07T18:34:44Z: update release workflow artifact action versions
Sam Tupy on 2026-07-07T18:28:25Z: fix reordering of Linux libraries
Sam Tupy on 2026-07-07T17:51:24Z: Update ZDSR API (resolves #399) and causes build_dependencies.py to print primary output in realtime rather than only after error
Aryan Choudhary on 2026-07-07T16:34:53Z: migrate android native build to scons (#364) Gradle's New Role: Gradle is no longer responsible for compiling C++ code. It is now exclusively used for the final APK packaging step (manifest merging, zipaligning, and signing), leveraging it for what it does best without adding native build overhead. This makes plugins work on Android and makes the build system much more fluid! Resolves #416, resolves #216 [skip ci] - another incoming commit soon
Sam Tupy on 2026-06-26T19:26:36Z: add randomization to bytecode encryption per CI run, now testing
Sam Tupy on 2026-06-23T16:27:51Z: rename load_url to stream_url in docs (resolves #408)
Sam Tupy on 2026-06-23T14:17:10Z: update SDL Java Android activity following latest dep update(resolves #407)
Sam Tupy on 2026-06-22T22:50:53Z: name Angelscript params for regexp and other classes in pocostuff.cpp, adds command line argument directory input to generate_engine_dump.nvgt as a result of #394
Sam Tupy on 2026-06-22T06:41:02Z: fix IOS selection bug in windows installer
Sam Tupy on 2026-06-22T06:18:54Z: clarify total_keys_down docs (resolves #269)
Sam Tupy on 2026-06-22T06:10:16Z: adds basic #define (resolves #103) Weekness for now is that a `#define` from include will not be visible from parent. Otherwise it works just as expected.
Sam Tupy on 2026-06-22T05:36:01Z: attempt macos CI fix in extra repo
Sam Tupy on 2026-06-22T05:19:31Z: no more static link to libasound (fixes #406):
Sam Tupy on 2026-06-22T05:17:52Z: update sqlite_pack in extra repo (resolves #288)
Sam Tupy on 2026-06-22T02:14:37Z: form.nvgt fix single character selection (resolves #63) and go to line index offsets (resolves #62)
Sam Tupy on 2026-06-22T00:50:01Z: round() function can no longer return -0 (fixes #192)
Sam Tupy on 2026-06-21T23:53:11Z: fix memory leaks and equality comparison bugs in events.cpp as well as reverb3d missing deref in sound_nodes.cpp - both described in #383
Sam Tupy on 2026-06-21T22:51:31Z: desperation factor is now clamped from 0 to 10 and fix further memory leak in pathfinder described in #383, fix incorrect bitmask check in scriptstuff exposed by same audit
Sam Tupy on 2026-06-21T22:23:29Z: fix send>send_peer call in network.h and a couple of memory leaks in sound.cpp described in #383
blindpro on 2026-06-21T21:26:33Z: Document a couple of user interface functions (#403) * run * mouse pressed * mouse_down
MarcroSoft on 2026-06-21T21:24:59Z: Extra BGT key constants (nvgt_compat) (#393)
Sam Tupy on 2026-06-21T21:24:58Z: fix random_interface atomic refcount, HOTP no digit cap and invalid datastream openmode initialization referenced by #383
Sam Tupy on 2026-06-21T20:56:16Z: fix potential bytecode read overflow referenced in #383
Sam Tupy on 2026-06-21T20:50:38Z: fix internet.cpp ignored parameter, incorrectly scoped mutex lock and wrong return type described in #383
Sam Tupy on 2026-06-21T20:27:13Z: Fix system_running_milliseconds across all platforms (CI testing needed) from #383
Sam Tupy on 2026-06-21T20:24:53Z: fix wrong numeric limit usage in map.cpp from #383
Sam Tupy on 2026-06-21T20:00:48Z: fix some use after free and incorrect cast issues uncovered by #383 in threading.cpp
Sam Tupy on 2026-06-21T14:50:53Z: update curl plugin SConscript in extra repo
Sam Tupy on 2026-06-21T09:46:04Z: apparently latest curl also wants BCryptGenRandom on windows
Sam Tupy on 2026-06-21T05:43:04Z: Link with Apple Security framework required by newer curl
Sam Tupy on 2026-06-21T05:07:45Z: update Angelscript, SDL, other deps (nc stub broke again - mirror of normal for now
Sam Tupy on 2026-06-21T04:55:21Z: Attempt to silence unneeded ALSA warnings when no audio devices available (resolves #335)
Sam Tupy on 2026-06-21T04:54:21Z: fix event callback registration from within namespace (Resolves #401)
Sam Tupy on 2026-06-20T21:34:48Z: explicitly set IOS audio session category options (references #391)
Sam Tupy on 2026-06-20T21:05:53Z: add {min...max} patern to learn_game_sounds_menu filename definitions
Sam Tupy on 2026-06-20T21:05:05Z: fix workdir case sensativity when copying stubs during MacOS bundling
Sam Tupy on 2026-06-20T21:04:17Z: fix next rendition of build.output_basename breakage (resolves #383)
Sam Tupy on 2026-06-20T21:03:43Z: fix is_console_available() causing hang when nvgt invoked from GH runner on MacOS
Sam Tupy on 2026-06-15T19:46:15Z: fix #pragma console (resolves #400)
Ethin Probst on 2026-06-03T20:12:58Z: Threading: remove duplicate test registration for atomic_flag
Ethin Probst on 2026-06-02T15:51:49Z: Threading: const-ify other atomic methods and add atomic_flag::test
Ethin Probst on 2026-06-02T14:59:53Z: Make atomics load method const
Sam Tupy on 2026-05-01T12:29:41Z: form.nvgt: do not allow creation of controls without a window
Colton Hill on 2026-04-30T21:29:06Z: Fix double free bug crashing tts_voice initialization. (#389) sapi5_engine::get_voice_language was freeing the char* returned by sapibridge, but that pointer is a pointer directly into sapibridge's own cache. When sapibridge later tried to clean the cache when told to refresh, it tried to free it a second time, which crashed with a heap exception. Removed the free call and made sapi5_engine::get_voice_language mirror sapi5_engine::get_voice_name in behavior and function, including the conditional expression on the return. Confirmed that a SAPI test does actually speak now.
Ethin Probst on 2026-04-30T03:10:50Z: Sapibridge: do not free voice token name or language when NULL
Hamza Ahmad on 2026-04-26T19:10:52Z: Fix for Issue 160: Use UTF-8-aware length for character counts (#385) Replace byte-based .length() calls with utf8length(text) when announcing character counts to ensure correct counts for UTF-8 text. Added a utf8length helper that iterates with utf8next to count Unicode characters (handles empty strings). Applied to password input character announcement, selection highlight speech, and text summary.
Ethin Probst on 2026-04-26T19:07:50Z: Revert "Enable Common Controls v6 for modern Windows visual styles (#359)" This reverts commit 257d2ece6e4b883f38a7fae7ce6d1d070be9f590. Closes #386.
NKPR0d on 2026-04-23T05:03:49Z: Enable Common Controls v6 for modern Windows visual styles (#359) * Enable Common Controls v6 for modern Windows visual styles * Move everything to the build system, fix compiling * Proper formatting Fix plugin load failures on Linux Update vcpkg/bin repository
Hamza Ahmad on 2026-04-23T05:01:29Z: Fix typo in sound API method name (#381) Corrects a misspelling in RegisterObjectMethod: changes "get_position_in_milliseconnds" to "get_position_in_milliseconds" so the sound object's property is registered with the correct name for scripting API compatibility.
Colton Hill on 2026-04-23T05:00:15Z: Implement timer_queue::ticks_to_next_event method from TimerWheel (#380) * Added a registration for TimerWheel::ticks_to_next_event(max) which reports the duration up to max before the next timer in the wheel would fire. This function seems especially useful for simulation loops where tick throughput is more important than being absolutely consistent in terms of inter-frame timing. * Added pressing enter in test_timer_queue.nvgt speaks the value of ticks_to_next_event, letting you preview the state of it in real-time.
Day Garwood on 2026-04-22T21:04:39Z: Further improvements to SAPI abstraction (#370) * Improve pitch behaviour We now use SPF_PERSIST_XML when setting pitch, meaning dynamically escaping XML is unnecessary. This fixes a bug where uttering phrases with XML characters such as apostrophe weren't speaking properly. * Improve error handling in char_to_wchar * Fix memory leak when cleaning voice cache * Fix bug in get_voice Now returns -1 (failure) if voices failed to refresh instead of returning 0. * Improve error handling in populate_voices Now fails cleanly if no voices were written. * Improve performance in speak_to_memory We now cache the stream object rather than setting and releasing it for every utterance, making subsequent calls 75-80% faster. * Fix small oversight in string conversions
Sam Tupy on 2026-04-22T20:59:14Z: update vcpkg baseline
Sam Tupy on 2026-04-22T20:16:45Z: cause vcpkg build_dependencies to correct install_name ID for macos dylibs (fixes #369) Also prepend rather than append our libpaths during environment construction.
Ethin Probst on 2026-04-15T14:49:30Z: Fix typos in threading
Sam Tupy on 2026-04-13T19:51:00Z: Fix voice over speech on MacOS (resolves #372)
Daniel Nash on 2026-04-13T18:51:57Z: Added logic to detect arm64 linux triplet (#379)
Sam Tupy on 2026-04-13T17:19:45Z: bundler now cleans build directories when creating new bundle This came with side effect of improved bundling facility interface using SDL_RunOnMainThread for message boxes and questions rather than a limited multistep compilation task interface.
Sam Tupy on 2026-04-13T15:21:03Z: Revert "Bundling: do not append platform to generated executable" The $platform variable does sstill need to be allowed, however feedback about how it should not be used by default has been received and is being taken into account. This reverts commit c6eba52c0a73cd1af83b9fd201b6acfda132d175.
Lukáš Tyrychtr on 2026-04-12T17:30:07Z: speech-dispatcher-engine: Use lower priority for non-interrupted messages (#374) The current text priority was always interrupted (at least on Arch linux) when interrupt was set to false when calling screen_reader_speak, so decrease it to SP_PRIORITY_MESSAGE which can get queued properly.
Day Garwood on 2026-04-12T17:27:23Z: Fix character limitation in input_box (#377) Input box was limited to 60 characters and would crash when pasting longer texts. This is now fixed. Fixes #376.
Day Garwood on 2026-04-12T17:25:51Z: Fix bug in SCRIPT_MAIN_PATH (#378) SCRIPT_MAIN_PATH could be empty when running a script from the working directory using the command line. This is now fixed. Fixes #375
Sam Tupy on 2026-04-10T06:25:09Z: attempt fix for voiceover speech on MacOS (regarding #372)
Ethin Probst on 2026-04-06T21:52:36Z: Bundling: properly fix output_basename everywhere
Ethin Probst on 2026-04-06T21:08:37Z: Bundling: fix assertion violation when setting output_basename in nvgtrc
Ethin Probst on 2026-04-06T20:30:08Z: Bundling: do not append platform to generated executable
Ethin Probst on 2026-04-06T16:22:21Z: Linux compilation output target: fix failure to restore ELF header
Ethin Probst on 2026-04-06T15:58:05Z: Anticheat: do not do memory-based inline hook speed hack detection on wine (for now)
Sam Tupy on 2026-03-28T14:26:04Z: fix missing fclose calls when checking uptime on Linux (fixes #366)
Sam Tupy on 2026-03-27T03:09:52Z: uppercase Info.plist when generating macos bundle
Sam Tupy on 2026-03-27T02:57:25Z: Implement SDL_process wrapper allowing std IPC at long last (closes #189 resolves #286)
Sam Tupy on 2026-03-26T18:18:19Z: include zdsrapi.dll (fixes #325 fixes #164)
Sam Tupy on 2026-03-26T18:13:29Z: update to latest Angelscript master commit and latest universal speech static
Sam Tupy on 2026-03-26T16:40:48Z: add include preprocessor word (resolves #214)
Sam Tupy on 2026-03-26T15:49:23Z: add mobile and desktop preprocessor words
Sam Tupy on 2026-03-26T15:43:45Z: Wrap SDL's system tray API (resolves #219)
Sam Tupy on 2026-03-25T09:10:45Z: verify working mac build locally
Sam Tupy on 2026-03-25T08:45:47Z: fix arm64-osx triplet regarding angelscript-nc
Sam Tupy on 2026-03-25T08:33:14Z: fix some old and just now exposed usage of BOOL instead of bool in UI.cpp
Sam Tupy on 2026-03-25T08:01:23Z: Make UPX stubs build only for windows at this time
Sam Tupy on 2026-03-25T07:30:20Z: fix missing semicolon which certain compilers did not error report
Patrick Wilson on 2026-03-25T07:08:06Z: Docs: Updates regarding new platform
Sam Tupy on 2026-03-25T06:54:57Z: generic changes for initial IOS support! NVGT can now compile .ipa bundles that can run on IOS! Simply go into the compile script submenu on windows and click "IOS debug" and by default, NVGT will produce an unsigned but otherwise fully runnable IOS app of your game! At this point in time, NVGT disclaims responsibility regarding the actual deployment of such apps onto an IOS device, however we have confirmed that these bundles can be properly deployed with xcode as well as less official sideloading tools. Theoretically this should work on IOS versions 16 and newer, any arm64 device. We have everything from direct touch with voiceover to input box to AVSpeech and voice over speech output working here! On one hand, feedback is very appretiated! On the other, however, understanding of the fact that support on the IOS subject might be rather limited until further documentation has been written would also be very appreciated. Thanks and have fun! Prepare for potential CI failure starting now and over next few commits.
Sam Tupy on 2026-03-25T06:49:04Z: remove windows datatypes from scriptstuff such as DWORD
Sam Tupy on 2026-03-25T06:45:51Z: system_fingerprint was calling an invalid API causing endless hang on IOS, fix
Sam Tupy on 2026-03-25T06:44:18Z: Update vcpkg deps for IOS.
Sam Tupy on 2026-03-25T06:43:47Z: merge ios.mm and macos.mm into apple.mm while adding IOS input box
Sam Tupy on 2026-03-25T06:41:33Z: updates to CI and build scripts regarding initial IOS work
Sam Tupy on 2026-03-25T06:34:42Z: Update bundling facility to support IOS and to bundle with libarchive instead of PocoZip. * Switched to libarchive instead of PocoZip, thus executable permission bits are now added to cross compiled apps on windows (fixes #287), allowing compilation to .tar.gz for linux and .iso for MacOS on windows etc. * By default, the basename for distrobutions will contain the appended platform now. You can set #pragma compiled_basename dist/$platform/appname, if you want NVGT to place binaries in dist/windows/appname, for example. * Adds nvgt_compilation_output_ios which can create compatible .app or .ipa bundles which can be signed and deployed/sideloaded on to a device using whatever way you know to do so!
Sam Tupy on 2026-03-25T06:29:50Z: For mobile platforms where we must cross compile, added an optional target=platform argument to the SConstruct. From this point, env["NVGT_TARGET"] should be used to determine what is being compiled for. This prepares for IOS support - coming now, and for building Android with SConstruct later.
Sam Tupy on 2026-03-25T06:25:15Z: Add #pragma config key=value, and also #pragma asset $assetname, the prepended $ insures that the given asset is not bundled compressed (useful for reading certain inline assets such as sounds on Android).
Sam Tupy on 2026-03-25T06:24:56Z: conform to new SConstruct target argument in plugins
Sam Tupy on 2026-03-25T06:15:11Z: Begin conversion of library object to libffi! The test/quick/library.nvgt file still works. Conversion still in progress, but it is at least as functional as before. Returns var@ instead of dict, possible to fetch library_function@ and call directly.
Sam Tupy on 2026-03-17T00:12:25Z: Make windows fullscreen by default on Linux for Wayland focusing (fixes #255)