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)
Sam Tupy on 2026-03-16T22:47:16Z: fix microphone::set_device (resolve #338)
Sam Tupy on 2026-03-16T20:55:22Z: Spatialization and freeverb now work on multichannel audio devices (fixes #323 fixes #302)
Aryan Choudhary on 2026-03-16T16:16:03Z: Add graphics_texture class for GPU caching (#356) Introduced the graphics_texture class to wrap SDL_Texture, allowing developers to cache textures. This eliminates the severe performance bottleneck caused by converting SDL_Surface to SDL_Texture every frame in the legacy render_graphic method, even for loaded images that could just be cached.
Sam Tupy on 2026-03-16T14:30:15Z: Update scriptdictionary addon and fix print_func's dictionaryValue output (resolves #354)
NKPR0d on 2026-03-16T14:00:36Z: Fix MSVC compilation errors by writing version.cpp as UTF8 (#355)
Sam Tupy on 2026-03-16T06:40:18Z: update SDL android java code (fixes #353)
Sam Tupy on 2026-03-16T01:06:00Z: dep update - angelscript, sdl, more
Sam Tupy on 2026-03-16T00:27:46Z: Fix legacy_sound broken because of tonesynth not using namespace accessor (fixes #342)
Sam Tupy on 2026-03-16T00:01:46Z: Loads of work on game_window class and implementing graphics functions enspired from @aryanchoudharypro
Sam Tupy on 2026-03-15T23:55:07Z: The #pragma stub option works again (resolves #259) (fixes #340)
Arto Baltayan on 2026-03-14T22:53:47Z: Fix capitalization and hyphenation in README (#352) Fix README formatting (cross-platform, Unity, Unreal)
Aryan Choudhary on 2026-03-14T18:12:05Z: add window flags to show_window and new window sizing functions (#351) * fix lagg in open and save as dialogs on windows * add window flags to show_window and new window sizing functions * added optional flags argument to show_window to allow creating fullscreen, maximized, resizable, or hidden windows * added get_window_width() and get_window_height() to retrieve the current pixel dimensions of the game window * exposed various SDL window flags to AngelScript through the new window_flags enum * added accompanying documentation for the new functions and flags * fix docs and enums
Aryan Choudhary on 2026-03-14T02:16:35Z: fix lagg in open and save as dialogs on windows (#350)
Sam Tupy on 2026-03-12T19:12:37Z: attempt loading libspeechd.so.2 on linux (fixes #326)
Day Garwood on 2026-03-12T18:01:02Z: Several improvements and bug fixes to Sapibridge (#345) 1. Fix a few potential memory leaks (voice enumeration, stream creation, cleanup) 2. API consistency (getters now always return from cache) 3. Pitch now works (all text is now sent via XML and escaped) 4. Library now considers previous COM initialisation (fixes #344 Problem loading voices after window is created). 5. UTF8 consistancy (fixes #346 Chinese text is garbled in built-in TTS / SAPI5 on Windows).
Sam Tupy on 2026-03-12T17:57:48Z: fix windows screen_reader_braille UTF8 conversion (#346)
Sam Tupy on 2026-03-12T17:57:10Z: Add /utf-8 windows build argument (#346)
Sam Tupy on 2026-03-10T22:02:23Z: attempt to upload install action (untested at this time)
Quin Gillespie on 2026-03-06T16:45:01Z: Add parameter names to functions and fix brace coding style in cppmath.cpp.
Aryan Choudhary on 2026-03-05T04:10:58Z: added a get_process_id function (#343)
Quin Gillespie on 2026-03-05T03:52:14Z: Clean up run function on Windows, leading to far more reliability, remove a few old quick tests.
Sam Tupy on 2026-03-02T19:40:55Z: Attempt to fix overcomplicated settings::ensure_path_exists function to fix absolute path not working on some platforms
Sam Tupy on 2026-03-02T19:39:51Z: Fix statset deserialize_linear number detection so string stats can start with numbers and still deserialize
Mateo Cedillo on 2026-03-02T19:38:26Z: Added soundtrack and a quick test (#328) * This is version 1 (original) without drums, pitch bend or harmonies. Those can't be added at the moment because some internal functions are missing. * We can write songs to both memory or file. * Includes quick test.
Day Garwood on 2026-02-27T21:43:17Z: InputBox: Switch from richedit to edit control (#337)
Sam Tupy on 2026-02-27T19:37:32Z: fix bundler duplicating resources
Sam Tupy on 2026-02-27T19:16:05Z: http keepalive timeout and uuid properties
Sam Tupy on 2026-02-23T21:38:40Z: seems our automatic releases action broke mid dev, try latest ver of it?
Sam Tupy on 2026-02-23T20:55:34Z: hack parse_json to use aswrappedcall until we can fix angelscript exceptions on Intel Macs
Sam Tupy on 2026-02-23T17:16:36Z: manually lipo Angelscript on MacOS to attempt fixing intel exception mishandling
Sam Tupy on 2026-02-18T16:12:15Z: first attempt at signed windows installer!
Sam Tupy on 2026-02-17T02:00:56Z: several improvements to AVTTSVoice that showed themselves on MacOS26 - causes much faster NVGT app launches!
Sam Tupy on 2026-02-17T02:00:10Z: add a property to touch to determine if input has reached the manager recently
DalisonCPU on 2026-02-12T17:15:35Z: Changing core to allow DATE/TIME override by plugin (#336) * feat: Changing core to load plugins after ConfigureEngine and split time globals * fix: Initialize time cache on first read
Ethin Probst on 2026-02-10T12:36:44Z: Update contributor guidelines to moderate AI-generated pull requests
Ethin Probst on 2026-02-10T12:04:13Z: Revert "Little Code Enhancements (#332)" This reverts commit 7503627bc01aa1c1d73401a05e908a5397a805af.
Hamza Ahmad on 2026-02-09T15:21:47Z: Little Code Enhancements (#332) * Clarify regexp_match parameter names in registration Updated the registration of the regexp_match global function to include explicit parameter names (subject, pattern, options) for improved clarity in the scripting API. * Add property attribute to set_looping method registration The set_looping method is now registered with the 'property' attribute, aligning it with the get_looping method and improving script interface consistency. * Add parameter names to regexp global function signatures Updated the registration of regexp_search and regexp_replace global functions to include parameter names for clarity. This improves code readability and helps script users understand the function arguments.
MarcroSoft on 2026-02-02T11:15:08Z: Compile angelscript-nc again and use it in the windows stub (#331)
DalisonCPU on 2026-01-31T04:09:58Z: Implementations for random64 (#256) * add: Implementing Range64 * feat: Implementing rnd_xorshift_range64 * feat: Added Random64 function * refactor: Using Next64 instead of Next to Random64 and registered Next64 for AngelScript * feat: Added random64 test example
Day Garwood on 2026-01-31T02:53:29Z: improve input_box module (#307) * Fix potential bugs and leaks in window destruction * Few other minor fixes - OK NULL guard, correct brush reference, fix M_SETREADONLY parameter. * Fix leak (FreeLibrary) * Fix alignment helper. Hopefully now works with both static and text controls (no crashes/errors but can't confirm visual UI layout). * Fix clipboard retention bug
Aryan Choudhary on 2026-01-31T02:40:30Z: added the new touch include with better gesture detection using events (#318) This drastically improves the reliability of the touch include while adding several new features, such as flicks and long holds.
Sam Tupy on 2026-01-31T01:49:16Z: be sure android.mk no longer looks for miniaudio.c
Sam Tupy on 2026-01-31T01:48:34Z: local android builds now run after upgrading gradle/sdl project files, miniaudio is now vcpkg dep!
Sam Tupy on 2026-01-30T21:47:26Z: try forcing deps and nvgt to use same ndk
Sam Tupy on 2026-01-30T20:51:52Z: we appear to be building deps with different ndk ver than nvgt because of gradle. Downgrade to ndk r25b for now
Sam Tupy on 2026-01-30T20:14:01Z: update vcpkg baseline - android is building locally...
Sam Tupy on 2026-01-25T00:26:43Z: Needed to also set c++_static in jni/application.mk
Sam Tupy on 2026-01-24T23:41:20Z: oops? We want dynamic not shared for Android triplet
Sam Tupy on 2026-01-24T23:16:21Z: add aryanchoudharypro/NVGTBridge support to NVGT apps by default!