Quin on 2025-07-29T21:27:25Z: Update mistune in requirements.txt to the latest version.
Quin on 2025-07-29T21:25:04Z: Allow running docgen with UV.
Sam Tupy on 2025-07-27T13:48:55Z: network object compatibility fixes * IPV6enabled is now false by default until we can improve automatic address type detection. * enet_host_flush is now called immediately whenever a packet is sent. If you wish to disable this, set the new bool send_immediately property to false. * If send_immediately is false, you can now call network.flush) to force any queued packets to be sent.
Sam Tupy on 2025-07-25T19:59:09Z: fix coordinate_map::get_areas_in_range
Sam Tupy on 2025-07-25T08:51:36Z: finish implementing AUDIO_ENGINE_NO_CLIP, build linux NVGT on Ubuntu-22.04 runner
Sam Tupy on 2025-07-24T00:20:24Z: fix invalid registration of socket::receive_bytes
Sam Tupy on 2025-07-22T13:31:52Z: music.nvgt add playing_filename and upcoming_filename properties
Sam Tupy on 2025-07-22T12:13:25Z: slight increase to mixer monitor stability
Sam Tupy on 2025-07-22T00:45:00Z: add audio_decoder class, sound system polish * An API now exists to retrieve floatingpoint samples for any supported audio file, see the engine dump for audio_decoder. * It is now actually possible to initialize a no device engine, specifying the channel count and sample rate. * If sound engine initialization fails, an exception is thrown rather than a broken audio_engine object being created which would crash the application if used. * Though potentially redundant, sound_service_vfs now returns MA_AT_END if stream is no longer good.
Sam Tupy on 2025-07-22T00:44:48Z: add on_tell to ma_decoder_init, upcoming official miniaudio change
Sam Tupy on 2025-07-22T00:44:03Z: add empty string checks to aes crypto
Hamza Ahmad on 2025-07-15T23:39:39Z: Update key handling and rename sound test files (#254) Changed key_codes type from key_code[]@ to int[]@ in get_key_name.nvgt for compatibility. Renamed slide_sound.nvgt and sound_callbacks.nvgt to legacy_slide_sound.nvgt and legacy_sound_callbacks.nvgt, adding legacy sound plugin pragmas for legacy namespace support.
Day Garwood on 2025-07-15T23:37:46Z: Further BGT compatibility in tone_synth (#247) No output would be generated if the synth detected that it would be silent. This is now configurable via the allow_silent_output property. By default tone_synth is now reset to BGT defaults: * Initial waveform: Saw * Allow silence: true * Start/end fade times: 8, 12.
Sam Tupy on 2025-07-12T08:16:47Z: correct path to screen reader libs in osdev_sconscript
Sam Tupy on 2025-07-12T07:44:50Z: new auto build system now ships proper screen reader dlls
Sam Tupy on 2025-07-12T04:38:05Z: fix android build workflow missing cd
Sam Tupy on 2025-07-12T04:09:13Z: try fixing cache hit detection
Sam Tupy on 2025-07-12T03:58:40Z: Attempt fixing windows builds by upgrading runner cmake Also removes the test vcpkg workflow.
Sam Tupy on 2025-07-12T02:30:19Z: remove old android libs download
Sam Tupy on 2025-07-12T02:15:56Z: testing automatic vcpkg integration
Sam Tupy on 2025-07-12T01:17:16Z: debug builds are fully functional!
Sam Tupy on 2025-07-10T22:59:20Z: scons can now build or download ddeps
Sam Tupy on 2025-07-10T04:01:45Z: I think I fixed MacOS zlib! I was finally able to get the MacOS builds to crash on my local machine, leading me to a likely fix for the issue. This issue was severe and caused the MacOS NVGT builds both compiler and compiled to be completely defunct on MacOS as zlib, the library used for compressing bytecode, certain hashing and other things, was not working on this platform. Future readers, sorry for the below spam.
Sam Tupy on 2025-07-10T02:48:27Z: another macos zlib test
Sam Tupy on 2025-07-10T02:18:05Z: next macos zlib test
Sam Tupy on 2025-07-10T02:02:59Z: another zlib attempt, can only reproduce this issue on CI not local machine
Sam Tupy on 2025-07-10T01:35:28Z: more zlib experiments, sorry
Sam Tupy on 2025-07-10T01:03:32Z: more experiments trying to fix macos zlib
Sam Tupy on 2025-07-10T00:30:47Z: fix sconstruct error regarding zlib static linkage
Sam Tupy on 2025-07-10T00:19:43Z: force static zlib linkage on non-windows platforms
Sam Tupy on 2025-07-09T23:13:09Z: temp comment cppmath lerp to build on macos15
Sam Tupy on 2025-07-09T23:04:37Z: build NVGT with macos15, prepare to test without minsizrel for Macos libs
Sam Tupy on 2025-07-09T22:07:21Z: upgrade minimum MacOS version to 14 [skip CI]
Sam Tupy on 2025-07-09T21:38:41Z: temporarily disable macos notarization
Sam Tupy on 2025-07-08T23:43:42Z: oops, missing sudo in vcpkg_linux_build
Sam Tupy on 2025-07-08T23:42:00Z: continue work on VCPKG workflow
Sam Tupy on 2025-07-08T23:03:39Z: continue work on VCPKG workflow
Sam Tupy on 2025-07-08T23:01:55Z: continue work on vcpkg workflow
Sam Tupy on 2025-07-08T22:54:00Z: beginnings of a vcpkg workflow, set macos target in scons
Quin on 2025-07-08T00:04:15Z: Fix indentation errors in vcpkg.json for SDL packages [skip CI]
Sam Tupy on 2025-07-08T00:01:11Z: add disable-library-validation macos entitlement
Sam Tupy on 2025-07-07T23:37:32Z: remove a bad macos entitlement
Sam Tupy on 2025-07-07T23:01:30Z: add macos entitlements file
Sam Tupy on 2025-07-07T03:13:23Z: defer joystick initialization until joystick object creation or other globals
Sam Tupy on 2025-07-07T03:05:43Z: fix SDL_Quit being called even when not initialized
Sam Tupy on 2025-07-07T02:07:16Z: rework how anticheatt and joystick deinit, update vcpkg readme
Ethin Probst on 2025-07-06T22:09:42Z: Update sdl3 to add wayland and x11 support
Ivan S on 2025-07-06T19:05:43Z: Menu include now supports both pack objects
Sam Tupy on 2025-07-06T16:57:20Z: VCPKG integration, all dependencies can be built with one command! The dependencies do not build on CI yet, but that should be coming soon. Sorry for the larger binary sizes, we'll see what we can do in time. This also merges opus support into miniaudio (#208).
Patrick Wilson on 2025-07-06T16:32:14Z: Doc: Fix example code in game development tutorial.
Sam Tupy on 2025-06-30T06:09:45Z: add ring buffer based pcm streaming interface to new sound system
Sam Tupy on 2025-06-29T13:42:44Z: work on sound system * Disable Miniaudio clipping function, perhaps replace with limiter later (fixes #245) * Plugins can theoretically register audio nodes, has yet to be tested. * Set up our own custom distance attenuation model as the existing ones were all less than ideal. * Add volume_curve property to reverb3d, between 0 and 1 controls whether most of the volume change happens closer to the beginning or the end of the transition, 0.5 = linear fade. * Code cleanup, for example register passthrough_node as a c++ class.
Jordan on 2025-06-28T23:04:57Z: Merge pull request #244 from caturria/section_negative_offset Section_istream relative seek fix
caturria on 2025-06-28T21:43:41Z: Minor math error caused section_istream to seek to negative offsets when seeking in cur direction.
Sam Tupy on 2025-06-27T13:29:27Z: now possible to upcast from audio_node Also fix bugged android build instructions link in readme.
Sam Tupy on 2025-06-27T12:10:08Z: New sound system has filters an delay! Also made audio_node_chain an actual node, so the chain itself can be slotted into a graph at any point. This introduces the mixer or sound.effects_chain API, where you can easily add any valid audio node as an effect to a sound. You can access mixer/sound.internal_node_chain if you really want to break things - it contains hrtf, the mixer monitor node and other such things, but you should rarely need to access the internal chain. Spatializer in general still needs tuning, but reverb3d now has a max_audible_distance property.
Sam Tupy on 2025-06-27T07:33:34Z: Reverb is now in the new sound engine! This might still be rough, but test/quick/sound_verb.nvgt, though messy, does run. You can create an audio_freeverb_node object and set it's parameters. You could just attach this between a mixer and the engine's endpoint, however this is not ideal for 3d spaces. Instead, after creating the freeverb node, you can create a reverb3d node, passing the freeverb node into the constructor. This gives extra properties min_volume, max_volume, and max_volume_distance. When you create your object mixer or for each positioned sound if not using a mixer, you can set @my_sound.reverb3d = my_reverb3d to begin applying the reverb to that sound. The reverb3d's output can be controled, so you could pan all the reverb in HRTF by positioning my_reverb3d.mixer in HRTF. The reverb3d node is useful because it takes into account the distance between each object and the listener. You can use any valid audio_node as an underlying reverb effect, and you can change it on the fly. Currently we only support freeverb from Blastbay's verblib, but we hope to add more soon. Usually you only need one reverb3d object per area, sometimes per game. This commit also introduces the object audio_node_chain, which is an easy way to manage a connected sequence of audio nodes. When you add or remove them, the node graph automatically updates accordingly. The mixer_impl code was cleaned up to use this accordingly.
Sam Tupy on 2025-06-25T04:21:15Z: fix missing unordered_map include for Android build
Sam Tupy on 2025-06-25T04:15:24Z: generate_engine_dump now includes constructors [skip ci]
Sam Tupy on 2025-06-25T03:54:54Z: rough work on sound shapes
Sam Tupy on 2025-06-24T08:52:31Z: menu.nvgt works with legacy_sound again
Sam Tupy on 2025-06-24T06:05:17Z: sound_pool should now work with plugin packs
Sam Tupy on 2025-06-24T04:09:38Z: sound_play global function, sound system can play one-shot sounds! This manifests as sound@ audio_engine::play(const string&in path, vector position = unpositioned constant, float volume = 0, float pan = 0, float pitch = 100, mixer@ mix = null, const pack_interface@ pack_file = sound_default_pack, bool autoplay = true) A thin wrapper, a global called sound_play, wraps this method so that users need not access sound_default_engine all the time. Updated menu.nvgt to demonstrate. Also makes useful global functions sound_get_listener_position, sound_set_listener_position.
Sam Tupy on 2025-06-24T00:28:34Z: sound_pool now basically works with the new sound system!
Patrick on 2025-06-22T07:26:13Z: Fix the workflow
Patrick on 2025-06-22T07:06:09Z: Forgot a chmod +x
Patrick on 2025-06-22T06:51:20Z: Try to fix workflows
Ethin Probst on 2025-06-22T02:18:28Z: Added more methods for speed hack detection
amerikrainian on 2025-06-20T00:53:59Z: Joystick Bugfixes (#237) * Fixed joystick::set returning info that's out-of-date by pumping events one time * Redesign power level to be in line with SDL
Sam Tupy on 2025-06-19T21:18:20Z: fix string_constructor test to conform with print_func modifications
Sam Tupy on 2025-06-19T20:45:09Z: fix script_function::get_script
Sam Tupy on 2025-06-19T20:44:30Z: fix settings.nvgt remove_product path splitting
amerikrainian on 2025-06-19T20:43:02Z: Testcase Refactoring (#229) Converted a fair few quick files to tests. We should try and update case directory from now on rather than quick. Fixed test runner not running multiple tests per file. It only ran test_file, which seems counterintuitive as you might want to split out testing features in isolation rather than in giant functions. All tests pass.
amerikrainian on 2025-06-19T19:23:15Z: Add Redis, Random Number Generators, and UUID (#223) Closes #139 * Add random number generators * Add poco UUID * Add Redis support * Add basic mail support
amerikrainian on 2025-06-19T19:06:37Z: Added Joystick support (#228) Added joystick support and removed the noop class in bgt_compat. Some methods like detecting whether a joystick can rumble or not are still stubs until we upgrade to SDL 3.2 or higher. But it's definitely usable.
Day Garwood on 2025-06-19T18:52:59Z: Add musical components to tone_synth (#231) Added musical components such as notes, beats, bends. Current differences to BGT: * Reverb still not present here: Wouldn't even know where to start with that, so will leave that to others. Having said that, if the audio system itself supports reverb now we probably won't need it in the synth. * Default waveform: BGT was sawtooth, this is sine. If that needs changing that's likely just a quick el_tonar_set_waveform(el_tonar_waveform_saw); in the constructor. * Generator functions (note*/freq*) took strings in BGT for multiple notes. Here they only work with one component (one double for freq, one resolvable char* name for a note). * Waveform type currently doesn't have a registered enum. Neither did BGT, but I note we have a lot more enums here in NVGT, so that's also something to consider.
amerikrainian on 2025-06-19T18:38:08Z: Calendar fixes (#234) Fixes #198. * Fix calendars returning incorrect values * Fix negative indices in strings
amerikrainian on 2025-06-19T18:20:17Z: Datetime bugfixes (#232) Resolves #221 (the provided script no longer crashes) and improves print output: * Spaces are added in between arguments. * If printing objects, we check if they can be coerced to strings and only print "Registered Object" if we can't be anymore helpful.
amerikrainian on 2025-06-17T17:07:07Z: Fix Async crash (#233) Fixes #175 (just some null pointer checks).
Sam Tupy on 2025-06-15T00:35:07Z: mac_package step now creates unsigned dmg on forks rather than failing
Sam Tupy on 2025-06-14T03:11:46Z: nvgt's MacOS app now gets signed and notarized!
Day Garwood on 2025-06-13T08:19:46Z: Several improvements and fixes to tone_synth (#226) * Update Tonar to fix some memory initialisation/allocation bugs * Started work on improving BGT compatibility * Add cursor facilities (length/position/seek etc)
Sam Tupy on 2025-06-13T01:15:34Z: merge new keyhook code from Silak
Sam Tupy on 2025-06-12T03:40:32Z: MacOS app bundles can be codesigned!
Day Garwood on 2025-06-11T02:41:11Z: Rough and early implementation of tone_synth (#205) 1. Currently uses a system I built for C last September. I'm a beginner when it comes to audio processing, that means lots of AI help, and possibly several rooky errors. It's certainly slower than I'd like. Maybe figure out how good ma_waveform is. Does it have anti-aliasing, for instance? 2. waveform types need rearranging to make them compatible with BGT's waveform types. Currently, 0=sine, 1=square, 2=triangle, 3=saw (in other words, plainest to richest). 3. There's an oversight that means a final rest() call is required to complete the sequence - this was not an issue in BGT. 4. Current functions are frequency and MS only. Musical concepts like tempo, notes, and transposition haven't yet been implemented, and I wouldn't even know where to start with reverb. 5. Signals always start from 0. While this avoids aggressive clicking at the start and end of signals, it does mean that harmonically rich signals like square and saw will click regularly due to constructive interference. We'll have to consider what tradeoff is better in the long run, unless there's another fix I haven't thought of to reduce this.
Sam Tupy on 2025-06-09T05:17:17Z: fix sound::set_position_3d not updating position until next engine::set_listener_position call Also fix issue where distance attenuation / rolloff facftor was not being applied to sounds detached from mixers by default.
Ivan S on 2025-06-06T16:40:21Z: Settings now correctly saves data on all platforms
Sam Tupy on 2025-06-04T18:15:02Z: forward declare json and var classes before plugin registration
amerikrainian on 2025-06-04T02:44:57Z: Add more Rp3d features (#215) * Add raycasting example * Add mesh support * Add copy to world settings and generic shape destroy function * Fix add collider creating temporary shape object * Rename transform to physics_transform to avoid future name conflicts * Add user data to bodies * Add height field support * Add bare bones logging
Day Garwood on 2025-06-03T22:54:55Z: Add SCRIPT_PATH property (#211) Implemented a property SCRIPT_MAIN_PATH to get the path of the main script when running from source. This makes it easy for scripts to force chdir to their own directory for asset location and so on.
Sam Tupy on 2025-06-03T19:04:05Z: work on fixing Android build - take 3
Sam Tupy on 2025-06-03T19:00:13Z: work on fixing android build - take 2
Sam Tupy on 2025-06-03T18:51:53Z: work on reactphysics depending on includes from bad places - take1
Sam Tupy on 2025-06-03T18:44:04Z: major organization to nvgt_plugin.h allows all functions to be exported in one place
Sam Tupy on 2025-06-03T18:43:24Z: add missing override specifiers to sound.cpp
Sam Tupy on 2025-06-03T15:00:00Z: legacy_sound: fail on embedded pack if open mode is not read
Sam Tupy on 2025-06-03T06:26:51Z: plugins starting with legacy_sound can work with embedded packs
Sam Tupy on 2025-06-03T02:27:54Z: Add bgt compatible combination object by day-garwood, manual merge of #210 (closes #210)
Sam Tupy on 2025-06-03T01:38:40Z: ci: release workflow will not run if commit only updates website, add missing word to blog post
Sam Tupy on 2025-06-03T01:26:53Z: fix cobalt build, {{}} was being mistaken for liquid syntax