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!
Sam Tupy on 2026-01-24T23:12:37Z: Try Android NDK r29 and switch to c++_shared in Android toolchain
Sam Tupy on 2026-01-23T23:41:10Z: attempt to upgrade to Android ndk r27d to fix missing fstream ops after dep upgrades
Sam Tupy on 2026-01-23T23:29:05Z: add missing Linux packages to CI after dep upgrades
Sam Tupy on 2026-01-12T20:16:45Z: Massive dep upgrade including Angelscript miniaudio SDL and VCPKG baseline! Unfortunately my local setup for testing various platforms is a bit in need of love at the moment, so we're going to let CI report errors on various platforms other than windows until we fix them.
Sam Tupy on 2026-01-08T18:22:17Z: update to latest miniaudio dev miniaudio dev commit 5ef2e1ec57cdbd2b9b09d776f0a13c2c2a796a7d
Sam Tupy on 2026-01-08T08:23:59Z: fix memory leak in JSON wrapper when assigning arrays and objects via operator overloading
Sam Tupy on 2026-01-07T20:07:24Z: add menu::delete_all_items() method to menu.nvgt
Sam Tupy on 2026-01-06T19:32:29Z: timer_queue::set forces timeout to be at least 1ms to avoid debug assertion from underlying timer_wheel, a bit of styling to timer_queue in the process
Quin Gillespie on 2026-01-06T17:43:10Z: Added the / operator overload to spec::path for cross-platform path joining, as well as a test case for it.
Aryan Choudhary on 2026-01-01T01:52:31Z: fix is_window_active on android (#322)
Aryan Choudhary on 2026-01-01T01:50:29Z: fixed detection of jieshuo on Android when the game mode is active (#321)
Sam Tupy on 2025-12-20T07:27:33Z: make sound basic panner take listener orientation into account
Sam Tupy on 2025-12-14T19:50:10Z: fix linux build error
Sam Tupy on 2025-12-14T19:02:29Z: Merge conflict after pr acceptance
Aryan Choudhary on 2025-12-14T19:01:21Z: merge Android input box code initially provided by @ethindp (#314)
Hamza Ahmad on 2025-12-14T18:59:31Z: Add file_touch function to update file timestamps (#317)
Sam Tupy on 2025-12-14T18:59:01Z: do not compress .dat files in APK packages
Sam Tupy on 2025-12-12T20:00:05Z: fix menu.nvgt not playing sounds if sound_default_pack set - broke after last pack based fix
Sam Tupy on 2025-12-12T01:28:49Z: fix unable to load sfx from disc if sound_default_pack is set (resolves #313)
Aryan on 2025-12-11T04:23:42Z: Fixed the Android active screen reader detection logic by explicitly requiring Explore by Touch to be enabled For speaking to the screen reader (#312)
Day Garwood on 2025-12-05T18:23:34Z: Add more PCM helpers to tone_synth (#311) write_samples(), properties for sample_rate and channels. Enspired from #310
Ethin Probst on 2025-11-14T17:15:21Z: http: add remaining HTTP request methods to http class
Sam Tupy on 2025-11-09T03:52:35Z: bass vcpkg portfiles
Sam Tupy on 2025-11-09T03:31:21Z: bass vcpkg portfiles
Sam Tupy on 2025-11-09T03:23:37Z: continue updating bass portfile hashes, likely not done
Sam Tupy on 2025-11-09T03:10:00Z: update bass portfile hashes
Quin Gillespie on 2025-11-09T02:54:40Z: Use set instead of add when setting HTTP headers to avoid Poco's horrible and undocumented behavior of add appending to the string.
Quin Gillespie on 2025-11-09T02:43:44Z: Fix the NVGT version string being part of the user-agent header of all http_request objects, even if one was manually set.
Sam Tupy on 2025-10-23T21:42:37Z: fix accidental ambiguous datastream constructor (fixes #301)
Sam Tupy on 2025-10-22T13:17:43Z: actually fix MacOS build this time
Sam Tupy on 2025-10-22T12:47:31Z: fix macos build after auto_chdir change
Sam Tupy on 2025-10-22T12:22:08Z: NVGT finally automatically changes directory to script or executable folder!
Sam Tupy on 2025-10-22T12:21:32Z: increase soundsystem buffer size to 256 frames
Sam Tupy on 2025-10-18T19:29:16Z: new domain nvgt.dev
Day Garwood on 2025-10-16T13:26:17Z: Consistency fix in StringSplit/string::split (#294) * Fix StringSplit Returns empty array if allow_blanks is false and source string is empty. * Update documentation
Day Garwood on 2025-10-16T13:24:33Z: Fix crash due to attempted out-of-bounds access in join (#295)
Day Garwood on 2025-10-16T13:23:20Z: fix library unload registration (#296)
Sam Tupy on 2025-10-11T17:40:49Z: hopefully fix bass portfile?
Sam Tupy on 2025-10-11T17:29:41Z: update bass portfile to latest hashes (might happen couple more times)
Sam Tupy on 2025-10-11T17:16:59Z: tts_voice major refactor (in progress) This entirely reworks the tts_voice object internally. the nvgt API is still the same, but both code and feature wise the tts system is much cleaner, more extensible, more feature ritch and fewer bugs, more modern etc. Note to bleeding edge testers, this commit is being made for colaberative purposes and not because the system is 100% complete. Testing is welcome and appreciated so long as it's kept in mind that this is not production ready. The commit that completes the system will include a much more detailed feature list.
Sam Tupy on 2025-10-07T03:39:26Z: install android APKs with -r flag
Sam Tupy on 2025-10-03T23:33:39Z: Android improvements * Asset based packs have now been confirmed to work on Android! * It is now possible to select between multiple connected Android devices for APK installation rather than NVGT failing if more than one device was connected.
Ethin Probst on 2025-10-03T15:54:44Z: Update extra repo to commit a731e25
Day Garwood on 2025-09-29T22:17:43Z: Rewrite SAPI abstraction (#250) New implementation provides the following improvements: * Use vtable-based COM implementation instead of IDispatch, * Fix several potential memory leaks and crashes (resolves #240), * Implement pitch control.
Sam Tupy on 2025-09-29T21:32:57Z: Introduce fallback prerelease branch Currently NVGT's semantic versioning releases are on hold until the 0.90 milestone and possibly a bit further. Until they resume with greater responsibility than before, this fallback release provides a way for users to test a relatively modern and stable development version of NVGT but without being caught up in any broken code from the latest development work. This branch is experimental and is subject to change or deprication, but should be a useful help at least for a time. Unlike the bleeding edge release, the fallback branch will only update when main is manually merged into it rather than automatically at every commit, giving us control to let anyone test bleeding edge features while allowing those with sensative projects to maintain a stable installer.
Sam Tupy on 2025-09-29T21:17:50Z: prepare to provide fallback dev prerelease
Sam Tupy on 2025-09-27T21:08:54Z: nvgt binary is now marked executable in MacOS and Linux packages
Sam Tupy on 2025-09-26T22:16:24Z: fix encrypted pack creation with sdl file streams
Sam Tupy on 2025-09-25T09:15:06Z: sound system improvements * Testing needed, but it should now be possible to open pack files and raw sounds from the Android asset system! This means that special code to embed packs on android should hopefully no longer be necessary. This was done by using SDL's file stream instead of Poco's, please report any new instability when dealing with packs or sounds on disc. * Fix max_distance not being applied to hrtf attenuator. * Handle the case of opening an encoder while it is already opened.
Ethin Probst on 2025-09-21T00:31:32Z: Have generate_engine_dump include the unicode functions from the Unicode plug-in
Sam Tupy on 2025-09-17T19:29:56Z: try windows package with explicit windows-2022?
Sam Tupy on 2025-09-17T19:08:53Z: try windows_package on 2019 in response to runner breakage
Sam Tupy on 2025-09-17T18:48:38Z: audio encoders draft, fix sound.datasource access, other improvements * NVGT can officially make recordings! API is very new and subject to improvement, but you can create an audio_wav_encoder or audio_opus_encoder and attach it to an effect chain / write samples to it directly, and either encode to a file, a datastream which you must keep open and untouched while the encoder is active, or a pulling system. When pulling, you may call read after close, and must exclusively do so for any encoder that ever seeks backwards (wav so far). * Fixed an internal failure when accessing sound.datasource which caused everything about the datasource wrapper to malfunction unless the stream's format was f32, meaning that now things like loop points and ranges actually do work this time, loop points actually tested - ranges should work but still only in theory. * Microphone class now has volume property. * Restored ability to set sound_default_engine to a different value. * Sound engine components maintain engine reference so engine cannot be destroyed while something depending on it is alive. * Fix spatializer component inheritance. * It is now possible to completely change the string contents of a datastream base by passing a new string to the new version of the str function which takes an argument. * FileDelete() accessible in filesystem.h.
Sam Tupy on 2025-09-13T07:13:06Z: more work on sound system, URL streaming is back! * Register audio_ring_buffer datasource, which microphone now inherits from. * data sources now have an advised_read_frame_count property which indicate a good amount of frames to read from the datasource at this time, though you can still read a different amount. As a result, the data source read function no longer requires an argument as it defaults to this advised frame count. * Data sources now have channels and sample_rate properties, shortcuts to the variables returned from get_data_format. * Streaming from URLs has returned! A rough draft of it, anyway. Function is bool sound.stream_url(string url). Involved micro improvements to sound service vfs.
Sam Tupy on 2025-09-12T09:00:59Z: Work on sound system, deps * Registered Miniaudio's data source concept! Though testing is needed, we should theoretically now support things like loop point, ranges, file chaining etc. Microphone and audio_decoder are both data sources. New method sound.open and property sound.datasource. * The audio_engine class now inherits from audio_node, you can attach a no device engine to anything! * Upgrade Angelscript to latest WIP, update VCPKG baseline. * Add opusenc from vcpkg for use in near future.
Sam Tupy on 2025-09-11T17:15:52Z: Add microphone node! Other small fixes * Allow sound.volume to go above 1.0. * Add SOUNDSYSTEM_LAST_ERROR_TEXT property. * Separate effect_node_impl into source/header pair so files other than sound_nodes.cpp can inherit from it.
Sam Tupy on 2025-09-10T01:46:35Z: A few fixes and improvements * setters for sound rolloff and directional attenuation clamp the input value to between 0 and 100. * Fixes the phonon_attenuator applying rolloff to a sound that was exactly at the listener's position (resolves #278). * Register const bool thread_is_main property which returns true if it's executed on the main thread. * Added the ability to run only specific test cases. * Push engine_key_event test update from event signature change earlier.
Sam Tupy on 2025-09-09T20:49:07Z: fix Linux engine registration
Sam Tupy on 2025-09-08T22:14:49Z: upgrade SDL to 3.2.22 including MacOS fixes
Sam Tupy on 2025-09-08T22:05:41Z: fix missing parens in destructor declaration that I'm pretty sure somehow built on windows?
Sam Tupy on 2025-09-08T21:43:26Z: a few spatializer safety measures, update Angelscript
Sam Tupy on 2025-09-07T05:49:35Z: Make sure spatializer is freed on sound close before sound node is destroyed.
Sam Tupy on 2025-09-07T04:36:09Z: fix Android build
Sam Tupy on 2025-09-07T04:19:52Z: More work on sound system * sound_default_engine is now a virtual property which initializes the sound system before returning, thus insuring that unless explicitly unset, a default sound engine should always be returned. * Finished registering the API for adding reverb3d at different placements in the spatializer chain. * Fixed the constructor for audio_freeverb_node, it no longer needs arguments. * Made the aforementioned tweaks to the sound pool.
Sam Tupy on 2025-09-07T02:15:50Z: Major improvements to audio spatialization (in progress) * Completely reworked our steam audio integration, though the old phonon_binaural_node can still be created from scripts. There is no more internal mixer monitor node or multithreaded hrtf update mechenism as that is now done in a safer way, and it is possible to swap out panners or attenuators on sounds including the ability to easily add new spatializer components like new panners in the future. The API should be just about entirely backwards compatible. * This means panning now sounds much better, both with and without HRTF. The attenuation_model property was removed. The phonon attenuator uses a Steam Audio IPLDirectEffect to create realistic frequency based attenuation based on properties of air, while the basic components attempt to provide classic audio game style panning and attenuation. * This is a work in progress though is in a runnable state, however sound shapes still need full reintegration, this needs more testing, sound pool may need a couple of luckily quick tweaks etc. * Anyone using reverb3d might need to change any custom parameters - especially volume levels, as reverb3d's volume system now works in db. The default min and max volume levels are -7 and -5 db, best max audible distance is somewhere around 50 to 70. * Plugins will be able to create spatializer component nodes, but this support still needs work.
Sam Tupy on 2025-09-05T18:11:26Z: sound_nodes organization to prepare for spatializer work
Sam Tupy on 2025-09-05T18:10:43Z: begin work on input events
Sam Tupy on 2025-09-05T13:29:03Z: properly define AES bit size in vcpkg tiny-aes-c (fixes #274)
Sam Tupy on 2025-09-04T15:37:58Z: sounds load from disk if inactive pack is passed to load
Sam Tupy on 2025-09-04T15:03:57Z: Android compilation works again (fixes #265)
Sam Tupy on 2025-09-04T13:44:02Z: fix vcpkg.json and sound.cpp missing override specifier
Day Garwood on 2025-09-04T13:36:08Z: front() and back() helpers for array (#273) These are helpers (front() and back()) that retrieve the first and last elements respectively, they will throw the standard out of bounds exception if the array is empty. These are functionally the same as array[0] and array[array.length()-1] or array[-1], but can make code more readable and intentions clearer if using an array as a queue or similar structure.
Quin Gillespie on 2025-09-04T13:31:43Z: Switch to VCPKG for multiple dependencies previously in the dep folder, such as fast-float, tinyexpr, tiny-aes-c, and unordered-dense. (#268)
Sam Tupy on 2025-09-04T02:12:13Z: update vcpkg dependencies
Sam Tupy on 2025-09-01T21:25:06Z: fix memory leak in encrypted pack::get_file (fixes #271)
Sam Tupy on 2025-09-01T21:19:15Z: reimplement sound_default_mixer default_property
Sam Tupy on 2025-09-01T21:12:54Z: music system uses sound.stream by default
Quin on 2025-08-30T13:41:36Z: Merge branch 'main' of https://github.com/samtupy/nvgt
Quin on 2025-08-30T13:41:31Z: Add a test for message headers, add other/nvgtexport to gitignore.
Day Garwood on 2025-08-30T13:28:40Z: Improve join function (#267) Add optional start and count parameters to allow joining any part of the array.
Day Garwood on 2025-08-30T05:37:50Z: Documentation (#188) * Document dictionary::opIndex, complete with explanations on how to set and retrieve values in this way. * Document dictionary::serialize * Document read/write_* methods in datastream; modified datastream::read/write to include read/write_int, read/write_double and friends. * Document datastream::get_pos/seek methods * Clarify array/grid list constructors * Removed the {...} constructors from the main array and list topics, as they are implicit constructors used with the assignment operator during initialisation. Instead, added a remark that clarifies and demonstrates their usage. * Document vector class; 8 operator overloads and 5 methods documented. * Added clarifications, differences, and return behaviour details for string::substr and string::slice, and clarify *_this methods to clarify the difference of each, I.E. "this" methods directly modify the string making the call rather than returning a new string. * Document error behaviours for string::insert/erase (clarified throwing exceptions for boundary errors). * Document many more string functions: is_alphanumeric, find_*, replace_characters/replace_characters_this, replace_range, escape, remove_UTF8_BOM, unpacket. * streams: Inheritance advisory in main topic: Advised that all streams inherited from datastream so read that documentation first, and document several datastream elements and separate all the read_* and write_* methods into their own topics to avoid confusion. Also document a few properties (bad, fail, binary). * Clarifications in toolkit configuration: Reversed config file list from highest to lowest priority, add brief description of use case for each type of config, reworded ambiguous or vague phrasing, minor structural changes to improve reading flow. * Document caveat in wait function - don't rely on it for accurate timing. * Documented several debugging functions (profiler, garbage collection, assert). * Document get_last_error * pack.open: Remarked on opening embedded packs. * Add more info on BGT/NVGT differences: Which functions are missing, what have different names, caveats about using bgt_compat.nvgt, including ignored parameters and other small changes. * Document aabb class: 10 methods (including 1 overloaded) and 5 properties. * Several new methods documented, mostly for arrays. Consolidate array aliases into one document per unique function (erase/insert, push_back/insert_last etc.). * Added classes/functions structure to containers for consistency and for documenting deserialize function. * Update vector documentation * Update BGT upgrading instructions to reflect current state --------- Co-authored-by: Patrick Wilson <patrick@pwry.net>