Return to SVN Tools

As of 06:05:18 AM on Monday, October 26, 2026, the most recent weeks' worth of commit messages are as follows:

Sunday, October 25, 2026
12:21:01 AM Cmd 149 Perf improvements, especially around NS3MomentPack.
11:45:46 PM Nerd 5550 Made NS3MomentPack fixed-size so it doesn't thrash memory being constructed during parsing. Assumes NSynth::MaxVoiceIDs is universally constant; likely would need serialization fixes if this ever changed.
07:51:30 PM Cmd 148 More perf setup.
07:41:36 PM Cmd 147 Updated Boop::ToolWindowState::GetConsoleHwnd() to work better in non-debugging contexts. Not feeling great about it though. Also added the option to iterate over converting MIDI to NS3 and parsing proprietary events for testing perf.
03:42:56 PM Cmd 146 Working toward loading stuff in from the config file.
03:40:06 PM Nerd 5549 Removed hardcoded waveforms. Not yet loading them from config, but working toward it. Falls back to a basic square wave for now.
12:13:23 PM Cmd 145 Renamed inst.xml to synthcfg.xml.
11:47:07 AM Cmd 144 Updates before rename.
11:17:07 AM Cmd 143 Removed the HAS_DATA and HAS_NO_DATA macros.
10:39:42 AM Cmd 142 A comment so nice I made it thrice. No way I can miss this.
Saturday, October 24, 2026
12:38:37 PM Verse 557 Updates for latest.
12:38:24 PM Verse 556 VERSEWOOD \ SMOL Updates for latest.
12:37:10 PM Verse 555 VERSEWOOD \ XAN3 \ CANON Updates for latest.
12:36:28 PM Atlas 64 Updates for latest.
Wednesday, October 14, 2026
09:08:09 PM Cmd 141 Updates for latest.
Monday, October 12, 2026
08:00:53 PM Nerd 5548 Comment.
07:42:24 PM Cmd 140 Renamed NM2 -> NS3 etc.
07:29:08 PM Nerd 5547 Primarily renaming "NMS" and "NM2" to "NS3" and "tune" to "song."
Sunday, October 11, 2026
09:39:05 PM Nerd 5546 Oop.
08:37:25 PM Nerd 5545 Little more cleanup.
08:08:07 PM Nerd 5544 Little more cleanup.
07:59:26 PM Nerd 5543 Deleted some unused stuff.
07:46:50 PM Nerd 5542 Added NSynthBucketConfig and renamed NS3 types:
CBufferElement -> NS3OutElement
NSynthMixerInputs -> NSynthMixer
NM2SingleDatum -> NS3VoiceSample
NM2Datum -> NS3Moment
NM2Pack_Single -> NS3VoicePack
NM2Pack_Total -> NS3MomentPack
NM2TunePack -> NS3SongPack

07:46:40 PM Nerd 5541 Oop.
Friday, October 09, 2026
11:43:10 PM Cmd 139 I don't know what these are or why they're here, but I'm going to version them because that's better than losing something I might want later. It looks like these were iterations on BoopTool.cpp.
10:07:33 PM Nerd 5540 All right, let's just slam this in, it's not gonna get any better staring at it.
09:32:59 PM Nerd 5539 Made NFont a named class.
Thursday, October 08, 2026
10:23:06 PM Nerd 5538 Bringing in the shelved changes from ScriptWIP so I can delete it. Leaving the script type class commented out for now.
Sunday, October 04, 2026
06:04:13 PM Nerd 5537 These can be const.
Saturday, October 03, 2026
03:06:16 PM Nerd 5536 Filling out the full range of operators I intend to support at this time and cleaning up some code.
03:05:17 PM Nerd 5535 operator bool () -> operator bool() for consistency
01:46:51 PM Nerd 5534 Improved specialization of property type operators.
01:00:54 PM Nerd 5533 Oop.
10:09:45 AM Nerd 5532 Same deal but for NTypeOf<>.
09:56:09 AM Nerd 5531 Condensing binary operation implementations down to smaller forms using NFunc<>.
Friday, October 02, 2026
08:39:08 PM Nerd 5530 Getting subtraction working. Lot of copy/paste code to reduce.
07:26:02 PM Nerd 5529 Merged NERD-279 back into main. This is just the one change from the "Ops3" local shelf. I believe subtraction is all that's needed here to get Fibonacci working again.
07:22:14 PM Nerd 5528 NERD-279 This is everything from the "Ops3" local shelf. This replaces StackValue with NProperty, and...stuff. I don't know. I'm tired. I was going to clean this up more before checking it in but here we are.
01:12:26 PM Nerd 5527 NERD-279 Branching for NERD-279. Doing this in Atlas and switching the working copy just to see how local shelves are handled, then I will switch back.
Saturday, September 26, 2026
02:37:41 PM Nsdrv 53 Getting this working again.
02:37:10 PM Nerd 5526 Getting this working again.
10:17:37 AM Nerd 5525 Fixed up the WIP generalized parser to take in the lexer reference.
10:10:46 AM Nerd 5524 This compiles but it does not run successfully yet. Uncommented the annotator, code generator, and virtual machine. Gave each of these their own debugger. (Still tbd whether that's okay.) Fixed up bytecode enum classes not implicitly converting. More work needed there. (See "BtyeCdoe" [sic].) Reworked some lexer code for legibility, but more is needed there too. Restored syntax node parent member, fixed up some debug output, more work needed on that.
Wednesday, September 23, 2026
10:26:14 PM Nerd 5523 Getting the debugger working again, ish?
09:30:34 PM Nerd 5522 All right, I'm not gonna be precious about any of this. Half of it is commented out; the rest is patched together with little understanding of the original intent. But it runs and it doesn't leak memory. Next step is verifying the output, then I can move on to annotation and code generation.
09:13:00 AM Nerd 5521 Added IStreamBase::ReadLine() for reading human-readable text files. Feels like something I should've had a while ago.
Tuesday, September 22, 2026
08:23:14 PM Nerd 5520 Rewrote EToken as enum class EScriptToken.
08:23:28 AM Nerd 5519 Random cleanup, const references and such.
Monday, September 21, 2026
10:47:27 PM Nsdrv 52 Unversioning these files specifically.
10:43:42 PM Nsdrv 51 Bug fixes.
10:43:04 PM Nerd 5518 Getting things working in Release.
10:14:46 PM Nsdrv 50 Restoring Output to narrow down what's expected or required.
10:11:40 PM Nsdrv 49 Unversioned Output.
10:11:04 PM Nsdrv 48 These probably shouldn't be versioned.
10:09:15 PM Nsdrv 47 Getting this compiling again.
09:36:23 PM Nerd 5517 Fixed some ICascadingPropertyOwner stuff that hadn't been caught yet because I wasn't compiling this stuff.
09:35:32 PM Nerd 5516 More type name declarations. Adds const, pointer, and reference type names.
09:33:54 PM Nerd 5515 Implemented InitializeTypes() in NGameSettings.
08:39:57 PM Nerd 5514 Cleanup.
08:23:53 PM Nerd 5513 Added property serialization.
07:56:47 PM Nerd 5512 Formatting.
07:56:10 PM Empty 76 Formatting.
07:52:40 PM Empty 75 Stubbed out Empty_ProjectSettings::InitializeTypes().
07:49:07 PM Nerd 5511 NCoreSettings now implements InitializeTypes() as an extensible way for projects to register their own types and conversions.
07:38:06 PM Nerd 5510 Renamed NTypeConversion to NPropertyMgr and rewrote it as a singleton rather than a namespace. Lost some changes somewhere in here, need to see whether I can recover them.
07:29:20 PM Nerd 5509 First of several checkins to improve type naming and conversion. Moved NTypeNames to its own header file.
Sunday, September 20, 2026
07:02:42 PM Nerd 5508 Improved type conversion macros, added IType::GetTypeName().
07:01:59 PM Nerd 5507 Added IFuncImpl::Clone() and updated the NFunc copy constructor and assignment operator to not be templated and to use Clone() instead.
06:51:08 PM Dev 151 Added NTypeID to the natvis.
10:20:06 AM Dev 150 Added a new project for experiments that just sets up a "Hello world!" main.cpp file, and updated NERD.natvis to display property byte size in square braces.
Saturday, September 19, 2026
04:33:09 PM Nerd 5506 Added NProperty functions Reset<>() (which is really just ConstructTypedData()) and ConvertTo<>(), which attempts to convert the property in place via a temporary.
04:31:32 PM Nerd 5505 Removed property members. It's a neat idea but it feels like it's going to introduce problems in the long run. Cascading property sheets are probably a better take on a similar idea.
04:20:41 PM Nerd 5504 Updates to type conversion to use constexpr type ID values so I can do an actual switch. Needs some cleanup.
03:41:23 PM Nerd 5503 NERD-274: Added NTypeConversion. This will need more work in the future to do compile time type ID hashing, more legible and performant comparisons, and error reporting when types are not handled, but this gets me over the hump and provides a clearer picture of how things will work.
03:26:34 PM Nerd 5502 NProperty::HasType() should also check for InvalidType.
03:26:07 PM Nerd 5501 More consistent syntax, will require a reshelve.
03:23:48 PM Nerd 5500 Comments.
03:22:33 PM Nerd 5499 Added NMat4::operator !=() just because.
Friday, September 18, 2026
06:28:02 PM Nerd 5498 Comment.
06:27:07 PM Nerd 5497 Added NColor325 equality operator for testing properties. This would really want an epsilon.
06:25:49 PM Nerd 5496 Added partial property comparison. Does not yet account for member properties. I'd need a map equality test for that.
06:19:04 PM Nerd 5495 Renamed Free() to Reset() and ConstructType() to ConstructTypedData().
06:12:31 PM Nerd 5494 Renamed the Types filter to Properties.
Wednesday, September 16, 2026
01:28:26 AM Nerd 5493 Couple bug fixes.
12:42:34 AM Nerd 5492 I like As<>() better than Get<>() and there's no Set<>() to match this against, so, yeah.
12:17:20 AM Nerd 5491 Hey what if properties could have members by name or by index.
12:16:10 AM Nerd 5490 Bug fix.
10:00:45 PM Nerd 5489 Implemented copy and move for NProperty.
09:57:36 PM Nerd 5488 These should be const.
07:56:22 PM Nerd 5487 Yeah, I'm okay with allowing NProperty to be stomped over with a different type. It's handled gracefully.
07:55:39 PM Dev 149 Added NProperty and NOptional<> to NERD.natvis.
06:35:19 PM Nerd 5486 NERD-274: NProperty now constructs and destructs its owned data, and will attempt to move incoming data into place when it can.
06:30:47 PM Nerd 5485 Added Construct() and Destruct() to IType, using NoRef<T> to ensure this is a type we are allowed to point to (i.e., not a reference).
06:20:29 PM Nerd 5484 Added NSemantics to provide NoRef<T> and NoPtr<T> which are basically just std::remove_reference_t and std::remove_pointer_t.
06:14:41 PM Nerd 5483 More verbose mutex warnings. We already assert on (ThreadID == 0) and (LockCount == 0) but this will give an upfront warning indicating whether it's this thread or another one that still has the lock.
06:13:22 PM Nerd 5482 Added constructors to NFunc so this can be used as an actual object and not strictly used as a wrapper around lambdas the way I did in Atlas. It's unclear to me whether this is entirely safe but it lets me prove out a silly NProperty thing so I'm gonna roll with it for now.
06:11:32 PM Nerd 5481 Added copy constructor and assignment operator to NDelegate. The copy constructor had been incorrectly stubbed out before; it's likely I've never used it. This is really just to get a silly NProperty test to compile.
05:57:42 PM Nerd 5480 Removed an errant space.
05:57:24 PM Nerd 5479 Addressing the startup mutex bug. It seems like it's not actually a problem and usually just indicates that the mutex hasn't been released because the operation hasn't finished. It does not leak or otherwise seem to indicate any serious failures.
Monday, September 14, 2026
09:32:52 PM Nerd 5478 More user data changes.
09:14:29 PM Nerd 5477 NERD-268: Split config data into local and roaming sets. As part of this, scope is never implied anywhere.
09:10:41 PM Nerd 5476 Renamed ConfigVariableType to EConfigVariableType.
08:54:34 AM Nerd 5475 Moved EUserDataScope to NUserDataPath.h and updated includes.
08:27:51 AM Nerd 5474 Moved user data stuff to NUserDataPath and out of NPath and NFileIO.
Sunday, September 13, 2026
01:50:36 AM Empty 74 Updates for latest.
01:39:32 AM Nerd 5473 NERD-244: Replaced all uses of the legacy GetUserDataRoot() function with NPath, which should probably be renamed to NUserDataPath, etc.
12:58:20 AM Nerd 5472 Made NPath an actual type. Totally untested but could be neat!
12:32:16 AM Verse 554 Updates for latest engine version.
12:31:15 AM Nerd 5471 NERD-244: Big pass on user data location. User data is now defined by 'scope,' either device-specific (local) or shared (roaming), where roaming is the default. This means we are no longer saving to Documents\My Games\, we are now (back!) to app data, but now split across Local and Roaming app data! Wow! Mac and Linux are untested but they should write to the same paths they always have, but with "Local\" or "Roaming\" appended to the end based on the intended scope.

Also I'm pretty sure I can't build Mac anymore since svn doesn't work anymore or some nonsense, and I'm never realistically gonna boot up the Mint lappy am I? I think I'm in strictly maintenance mode for Mac and Linux with only Windows as my real concern. Same as it ever was.
04:03:02 PM Nerd 5470 NERD-244: Renamed GetLocalAppDataPath() to GetUserDataRoot(), GetLocalAppDataPathName() to GetUserDataRootName(), and GetGameDataPath() to ResolveUserDataPath(). Switched the Windows location from CSIDL_PERSONAL[i.e., My Documents]\MyGames\ to CSIDL_APPDATA[ie., AppData\Roaming]\Minor Key Games\ for now. I suspect I'll refine these further as I start splitting out data into local and roaming sets. Removed GetLocalAppDataSubfolderName() which was only used by Windows and was hardcoded to return "My Games."
01:21:41 PM Dev 148 Added NSDRV back to the list of live repos.
12:26:08 PM Nerd 5469 NERD-261: Project-wide rename of /// to //-. It's cleaner.
12:23:42 PM Nerd 5468 Added a move constructor and assignment operator to NArray and added an assignment operator to NString.
11:29:40 AM Nerd 5467 NHashTable now stores NStrings internally instead of doing its own const char* data management.
11:23:42 AM Nerd 5466 Reorganization around strings and hashes. Inlined string data now lives in NStringData.h and the actual hash table that powers NHash lives in NHashTable.h.
10:46:40 AM Nerd 5465 Comment.
10:11:09 AM Nerd 5464 Added a move constructor to NString to absorb the data of the moved string and reset it to empty. Addresses thrashing of string data when returning a string object due to the data being allocated for both the scope of the called function and the calling function. The called function's string is now moved to the calling function's.
09:01:06 AM Verse 553 Updates for latest engine changes. Every project will need this stuff, but I'm starting here.
Saturday, September 12, 2026
01:50:19 AM Empty 73 Updates for latest.
01:47:35 AM Nerd 5463 NERD-264: More general "Gamepad" naming.
01:45:59 AM Nerd 5462 NERD-264: More general "Gamepad" naming.
01:38:52 AM Nerd 5461 NERD-264: More general "Gamepad" naming.
01:14:51 AM Nerd 5460 NERD-264: Renamed a bunch of Xinput / GameController stuff to "Gamepad." Even if it's not entirely accurate, it's a decent shorthand.
12:49:09 AM Nerd 5459 NERD-265: NMessageBox uses NStrings.
12:25:20 AM Nerd 5458 Somehow these got lost again.
12:24:38 AM Nerd 5457 NERD-263: Okay, this is the big one. Replacing all uses of Text() with NString::Print() or NHash::Print(). Also some cleanup of includes.
12:01:30 AM Nerd 5456 NERD-266: Code cleanup.
11:53:07 PM Nerd 5455 Rewrote strcatf() as a variadic template function in the interest of eliminating any uses of va_list, __VA_ARGS__, et al.
11:42:57 PM Nerd 5454 NERD-263: Added NString::Print() and NHash::Print().

11:29:09 PM Nerd 5453 NERD-263: Removed NStringMgr. Added a warning to Text() which may not have existed in other shelves but feels appropriate.
11:10:32 PM Nerd 5452 NERD-263: Deprecated Text() in favor of AllocText().
11:03:01 PM Nerd 5451 NERD-263: Rewrote Text() as a variadic template function instead of an old school variadic argument function. First of several changes along the way to removing NStringMgr.
10:32:01 PM Nerd 5450 Rolling back r5449. I feel like it will make more sense to start this from before those changes.
10:27:33 PM Empty 72 Forgot to check this in, but this adds NERD_Script to the empty project.
04:47:09 PM Nerd 5449 Deprecated Text(...) in favor of NString::Print(...). This needs to be tested in NFML immediately!
04:46:06 PM Nerd 5448 Added another version of NString::RelinquishTo() that relinquishes to a raw const char* and returns length as another out param.
04:44:06 PM Nerd 5447 NString's operator bool() should not compare text against text_null, as text_null is never assigned to any string's text property; it is a fallback for when text is null.
04:42:05 PM Nerd 5446 Added a function deprecation warning with a suggested alternative.
04:41:31 PM Nerd 5445 Missed these in r5443.
04:41:04 PM Nerd 5444 Yeah I probably want these.
04:15:27 PM Nerd 5443 Deleted NTable again.
04:15:19 PM Nerd 5442 Replaced NTable (formerly NUtilHashTable) with NMap. These do the same thing. I don't care how the data is laid out. Switched a bunch of dynamically allocated strings over to being actual NStrings.
04:14:08 PM Nerd 5441 Implemented operator bool() in NString to determine whether the string is pointing to the static null text.
04:12:20 PM Nerd 5440 Comment.
03:14:25 PM Nerd 5439 Renamed NUtilHashTable to NTable.
02:20:52 PM Nerd 5438 Renamed NContainerNode to IContainerNode.
02:05:43 PM Nerd 5437 Renamed NContainer.h to IContainer.h.
02:04:33 PM Nerd 5436 Commented these out. They are unused and NObject would need to be renamed.
01:58:52 PM Nsdrv 46 Set this up as a proper NBaseTool.
01:58:36 PM Nerd 5435 More const char*s.
12:15:07 PM Nsdrv 45 Unversioned these again since they constantly change.
12:13:12 PM Nerd 5434 NULL -> nullptr
12:12:52 PM Nsdrv 44 NULL -> nullptr
12:07:18 PM Nsdrv 43 Updates.
12:06:35 PM Nerd 5433 More const correctness.
11:48:48 AM Nsdrv 42 Compiles and runs without but I've commented out code execution for now until I can determine the cause of the crash.
11:44:06 AM Nsdrv 41 Oop.
11:43:04 AM Nsdrv 40 Updated output.
11:42:40 AM Nsdrv 39 Getting this compiling. Crashes.
11:40:33 AM Nerd 5432 Consistent usage of const char*.
10:28:48 AM Nsdrv 38 Don't need this anymore.
10:28:29 AM Nsdrv 37 Oops. These might be important.
10:27:34 AM Nsdrv 36 Updated solution for VS2022.
10:26:25 AM Nerd 5431 Added NUtilHashTable to NERD_Util to get NERD_Script compiling again. This will all need another pass.
10:08:08 AM Nerd 5430 Restoring NUtilHashTable.h for the sake of NERD_Script. This will need a revision pass. I believe this should retain history, as I used "copy to working copy..." from the repo browser.
09:45:24 AM Nerd 5429 Added NERD_Script source. No changes have been made; this is code from 2014-2015 and does not yet compile.
09:42:55 AM Nerd 5428 Moved NERD_Script files from the legacy folder to the new one. I believe this should retain source control history.
09:40:59 AM Nerd 5427 Initial checkin of new NERD_Script project.
09:38:22 AM Nerd 5426 Moved legacy projects to a Legacy folder to make room for new projects.
09:28:36 AM Dev 147 Versioned NERD project template. This goes in, e.g., \Documents\Visual Studio 2022\Templates\ProjectTemplates.
Wednesday, September 09, 2026
08:09:07 AM Nerd 5425 Comment.
Tuesday, September 08, 2026
10:18:13 AM Nerd 5424 Changed IType and NTypeOf<> from structs to classes.
10:17:15 AM Nerd 5423 NERD-260: Consistency pass to change template <class T> to template <typename T>, to drop the template class or struct declaration to the next line (will do functions later, or not), and to split multiple inheritance onto multiple lines.
10:11:08 AM Nerd 5422 lol this should've gone in several checkins ago; it was only working correctly due to local carte changes i think
08:06:30 AM Nerd 5421 Added a stub for a bimap class, to be implemented later.
08:06:17 AM Nerd 5420 Don't need this include.
Monday, September 07, 2026
10:47:24 PM Nerd 5419 Moved NProperty's functions to the .cpp file.
10:12:16 PM Nerd 5418 Didn't mean to check this in.
10:03:58 PM Nerd 5417 Might decide I don't like this and roll it back, but I'm adjusting the flags/numeral properties in the ID to be 11/21 bits instead of 16/16. Also adding support for producing the numeral from a hash of the type literal via a macro, for more convenient generation without having to care about manually selecting numerals. There's probably some small risk of hash collisions but they would be caught.
08:23:41 PM Nerd 5416 Couple small bits of cleanup.
08:20:52 PM Dev 146 Added NTypeOf.
05:56:15 PM Nerd 5415 IType can report its size now, for validation of NProperty.
05:49:56 PM Nerd 5414 Added static invalid type ID and property. Switched to type ID references where possible.
05:12:53 PM Empty 71 More experiments.
05:11:14 PM Nerd 5413 Big update to types. Instead of a static uint, NTypeOf now maintains a static pointer to the managed instance owned by the NTypeMgr. Types may be registered with constant ID numerals, allowing them to be safe to serialization, at least in theory. Not yet proven.
04:55:24 PM Nerd 5412 Stubbed out property read/write stream functions and reordered the handle ones. These are all stubs still.
04:49:32 PM Dev 145 Comments.
08:57:51 AM Nerd 5411 Comment on serialization. (Not allowed at this time.)
08:53:46 AM Nerd 5410 Added NTypeMgr to keep track of types that have been assigned an ID. Added comments on a lot of stuff from last night.
Sunday, September 06, 2026
02:02:06 AM Nerd 5409 Moved an assert into NProperty and added comments on future work.
01:48:50 AM Nerd 5408 Moved NPropertyMap into NProperty.h.
01:44:18 AM Nerd 5407 Renamed NCascadingPropertyList.h to ICascadingPropertyOwner.h.
01:40:15 AM Nerd 5406 Moved NCascadingProperty to NProperty and renamed it the same. Renamed property list to property map. Filename to be renamed in the next change.
01:25:23 AM Nerd 5405 All right, I'm calling it here tonight. I ended up not needing optionals or explicits, just typeof, and this is potentially a much wider reaching system, but I'll need to review it with fresh eyes.
11:14:21 PM Nerd 5404 Added NTypeOf, which is well-intentioned and very stupid. :)
11:08:08 PM Nerd 5403 Consistency pass to mark all implementations of operator ==() as const.
05:54:07 PM Nerd 5402 Added NExplicit<>, which prevents automatic template argument deduction, enforcing an explicit type specifier to be provided when calling a template function.
05:53:11 PM Nerd 5401 Couple more improvements to NOptional. Fixed a bug when assigning from an unset NOptional, removed the mutable get-with-fallback which was dangerous and could allow the fallback value to be modified, and added IsSet() and operator bool() as synonyms of HasValue().
12:10:28 PM Nerd 5400 NERD-85: Stubbing out a bunch of render stuff for Carte. Will need revisions along the way, but this should get me started.
11:57:01 AM Nerd 5399 Comments and cleanup around font metrics and font drawing params.
11:54:29 AM Nerd 5398 NERD-254, NERD-256: Some comments and reorganization of NDefFile in advance of more sweeping changes.
11:45:37 AM Nerd 5397 NERD-257: Added NOptional, an analogue of Unreal's TOptional. This uses ReconstructInPlace() to destruct the optional value when it is reset.
11:37:10 AM Nerd 5396 NERD-257: Added NPlacementNew.h with a template implementation of ReconstructInPlace() which was previously done only in NArray but which will be useful for optionals in the future.
11:20:34 AM Empty 70 Commenting out experiments.
Wednesday, September 02, 2026
08:24:50 PM Nerd 5395 Comment.
08:24:43 PM Nerd 5394 A little more dinking around with NCarte ideas.
Sunday, August 23, 2026
12:47:38 PM Verse 552 I don't remember why this is here, but I assume I need it.
12:43:53 PM Atlas 63 I guess I should ever commit this, lol.
Sunday, July 05, 2026
09:03:41 AM Nerd 5393 NERD-190: Comment.
Saturday, June 20, 2026
01:45:48 AM Verse 551 VERSEWOOD \ XAN3 \ CANON Updates for latest.
11:51:48 PM Atlas 62 Updates for latest.
11:43:17 PM Verse 550 Updates for latest.
11:06:19 PM Empty 69 Updates for latest.
11:05:36 PM Nerd 5392 NERD-190: Added NGameToolbox as a random-odds-and-ends place to stick stuff that doesn't need to live in NBaseGame but doesn't have a better owner. Plus a bunch of other moving stuff around, mostly pulling stuff out of NBaseGame. Cleaned up some old comments.
Monday, May 25, 2026
11:07:57 PM Atlas 61 Updates for latest engine version.
10:42:17 PM Atlas 60 Updated copyright year.
Sunday, May 24, 2026
04:44:24 PM Verse 549 Cleanup for latest engine changes.
04:43:58 PM Nerd 5391 These should be added so they don't stomp over externally assigned callback functions. (Note that the results may stomp over others though. Might be better to assert that these are empty before assigning so the caller is aware?)
04:41:57 PM Nerd 5390 These need quickfind.
04:16:25 PM Verse 548 Updates for engine changes that I never committed.

04:15:13 PM Verse 547 VERSEWOOD \ XAN3 \ CANON Updates for engine changes that I never committed.
Monday, May 18, 2026
01:46:39 AM Nerd 5389 NERD-85, NERD-175: Initial checkin of Carte, the new menu system. This is mostly just a stub class but this also includes a change to tickables to allow the usage of the general-purpose Tick() in place of Tick_CalcUpdate() and Tick_CommitUpdate().
Friday, May 15, 2026
11:01:15 PM Nerd 5388 Couple audio bugs when a stream doesn't exist.
Thursday, May 14, 2026
11:54:30 PM Nerd 5387 That last checkin really should've followed this one, but here we are. Moved DestroyAllAudioBuses() to the audio thread. Removed ShutDownStreamingSounds(). Locked access to game thread mappings. Added a function to remove a sampler from all contexts (in this case meaning the event log and game thread mappings). Restricted NAudioMgr::CanShutDown() further to wait until everything except buses and the resource map are freed.
11:10:32 PM Nerd 5386 :)
11:03:04 PM Nerd 5385 Added an optional WaitingForShutdown() thread function. It turns out I didn't need this to fix the audio bug I'm looking at tonight, but it feels like a good thing to have anyway.
Tuesday, May 12, 2026
09:11:15 PM Quasar 57 [Automated Build Checkin]

Project Quasar (56) - NERD (5384) - 2026-05-12_21-11
09:08:01 PM Quasar 56 [Automated Build Checkin]

Project Quasar (55) - NERD (5384) - 2026-05-12_21-07
09:07:30 PM Nerd 5384 Latest updates. Checkmate has changed to use "ProjectTitle" instead of "ProjectName." Not sure what else.
09:06:32 PM Cmd 138 WELL,
09:00:37 PM Quasar 55 Huh.
09:00:08 PM Quasar 54 Huh.
08:57:16 PM Quasar 53 [Automated Build Checkin]

Project Quasar (52) - NERD (5383) - 2026-05-12_20-57
08:55:57 PM Quasar 52 [Automated Build Checkin]

Project Quasar (51) - NERD (5383) - 2026-05-12_20-55
08:54:21 PM Quasar 51 [Automated Build Checkin]

Project Quasar (50) - NERD (5383) - 2026-05-12_20-54
08:49:33 PM Quasar 50 [Automated Build Checkin]

Project Quasar (49) - NERD (5383) - 2026-05-12_20-49
07:47:06 PM Quasar 49 lol OKAY
07:45:43 PM Quasar 48 Whoop, there we go.
07:42:28 PM Quasar 47 Guess I'm calling it here.
07:42:17 PM Nerd 5383 Couple entity factory improvements. More to do in the future.
09:27:58 AM Quasar 46 Last couple days' worth of work.
09:25:28 AM Nerd 5382 NERD-251: Checking this in for the test but this always asserts on shutdown and it is not ready to go.
Sunday, May 10, 2026
09:07:11 PM Quasar 45 Initial implementation of audio. It's bad! It makes the experience actively worse!
Saturday, May 09, 2026
02:15:06 AM Quasar 44 Okay I'm calling it for tonight.
09:28:33 PM Quasar 43 More level work.
08:28:40 PM Quasar 42 Better degradation.
08:21:22 PM Quasar 41 Whoop.
08:12:26 PM Quasar 40 Backdrop color by angle and squash and stretch improvement for double jump.
08:11:46 PM Nerd 5381 Comment. Not sure yet.
05:14:18 PM Quasar 39 Getting a first level built.
05:11:48 PM Nerd 5380 Fixed a collision bug.
03:05:59 PM Quasar 38 More polish.
02:48:26 PM Quasar 37 Moved this to the namespace.
02:39:51 PM Quasar 36 Double jump is instant fun, someone said once.
02:39:25 PM Nerd 5379 Adjusting max jump count should adjust remaining jumps too.
02:13:01 PM Quasar 35 Lots of work on transitions between stages.
11:18:19 AM Quasar 34 Use the non-serializable save slot.
11:18:04 AM Nerd 5378 Added support for a non-serializable save slot which operates like a normal save slot but never serializes data to or from disk.
11:03:54 AM Nerd 5377 Hey wow it's a case I hadn't needed before. There are more bits of data in here I could blend in the future if I need to.
10:54:31 AM Quasar 33 Stuff from last night to test physics degradation.
Friday, May 08, 2026
11:14:46 PM Quasar 32 Testing FOV changes, needs an actual implementation.
10:08:38 PM Quasar 31 Getting game font working.
09:27:20 PM Quasar 30 Stubbed out a new pre-HUD pass material to handle desaturation, vignetting, and fade-out.
09:04:15 PM Quasar 29 Added a new menu underlay and the Open Sans font, plus control bindings strings and some initial "despair" stuff.
08:42:50 PM Nerd 5376 Comment.
06:54:55 PM Nerd 5375 Improvements to camera pitch limits. For better or worse, I've preserved the API such that "max angle up" and "max angle down" are both usually positive numbers that default to 89 degrees, but now I have support for allowing them to go negative, clamping the pitch above or below the horizon. I've also improved the zenith overshoot case.
06:52:02 PM Nerd 5374 Comments on render path and pre-HUD pass material.
Thursday, May 07, 2026
08:55:57 PM Quasar 28 New splash image and no center switch in the penultimate level.
08:49:30 PM Quasar 27 Getting some naming stuff in place.
08:37:34 PM Quasar 26 Getting a penultimate level implemented.
Wednesday, May 06, 2026
09:58:49 PM Quasar 25 Comments.
09:55:32 PM Quasar 24 Getting multiple levels working.
09:55:16 PM Nerd 5373 It should be safe to use these without a controller, e.g., for using a sphere as a trace primitive.
08:04:53 PM Quasar 23 Getting ascension working.
07:08:01 PM Quasar 22 Work from last night. All hacks.
Tuesday, May 05, 2026
09:00:18 PM Nerd 5372 Comments on physical materials and an affordance for the hit primitive to override the physmat in the same way the sweeper can. All hacks all the way down.
Monday, May 04, 2026
09:55:28 PM Quasar 21 Getting teleporter beams working.
08:23:39 PM Quasar 20 Fixed that camera bug and stuff.
Sunday, May 03, 2026
11:20:18 PM Quasar 19 Getting aura particles and camera tilt on jumping working. Rough but,
Friday, May 01, 2026
09:16:08 AM Quasar 18 Texture scaling and background color stuff I forgot to check in last night.
Thursday, April 30, 2026
12:16:40 AM Quasar 17 Game feel tuning.
11:29:04 PM Quasar 16 Dinking around with level scale.
11:06:55 PM Quasar 15 Getting a first interactive thingy ("switch") stubbed out. Needs VFX to contextualize the area of effect when jumping to activate things.
07:49:40 PM Quasar 14 Camera easing and revised physics metrics.
Tuesday, April 28, 2026
12:12:11 AM Quasar 13 More better is.
11:47:19 PM Quasar 12 Squash AND stretch? In this economy?
09:47:39 PM Quasar 11 Simple environment and camera collision.
09:47:20 PM Nerd 5371 Switch box-point collision implementation based on space dimensions, to support both 2D and 3D games. Added scaling to the 3D implementation.
09:15:57 PM Nerd 5370 Oop.
08:46:55 PM Nerd 5369 Finally added stencil support for GL, lol.
07:46:38 PM Quasar 10 Added a stencil shadow for the player specifically.
07:45:06 PM Nerd 5368 Let's not show this warning if we didn't find the thing, only if we did.
Sunday, April 26, 2026
04:13:48 PM Quasar 9 First couple days of work.
03:31:51 PM Nerd 5367 Implemented sphere-box collision. Based on the capsule-box implementation. Likely needs more work, this is being done quickly for Quasar (thatgamecompany design test prototype) and has not been tested as thoroughly as I'd like.
03:29:19 PM Nerd 5366 Added spring smoothing functions for vector types. Would be neat to support this for quaternions too but I don't usually track rotational velocity and I'm not sure there would be a simple Slerp() wrapper like the basic exponential decay function.
03:23:40 PM Nerd 5365 Added an OnMoved delegate so external sources can react to the movement component moving a thing.
03:22:55 PM Nerd 5364 Comment.
03:22:33 PM Nerd 5363 Migrated some copy/paste code to a common location. Should be fine but I'll want to test the case of point colliders more.
03:16:30 PM Nerd 5362 Updated the IColliderInformant interface functions to take in a collider for context, as one informant (controller) may manage multiple colliders.
03:09:24 PM Nerd 5361 Fixed a typo. This function is unused anyway.
03:03:17 PM Empty 68 Updates for latest.
03:02:57 PM Nerd 5360 Added a warning if an entity is looked up by GUID and does not have the quickfind tag. This warning is muted during entity creation because we will not yet have added it to the set of quickfind entities, and debug builds look up the incoming GUID before assignment to make sure it is not already used for a different entity.
03:01:37 PM Nerd 5359 Updates to typed handles. I thought for some reason I wasn't able to have a typed handle constructor that just takes in a handle, but I guess I can, and I should have enough information to validate it.
02:27:31 PM Empty 67 More experiment stuff.
02:27:05 PM Nerd 5358 I'm checking this in for the sake of having a reference for it if I ever want to revisit it, but it's not super useful.
Thursday, April 23, 2026
07:57:05 PM Quasar 8 Couple more missing things.
07:56:52 PM Empty 66 Okay there.
07:54:09 PM Empty 65 Oh hey, this can't be blank.
07:50:26 PM Quasar 7 Removed experiments.
07:48:34 PM Dev 144 Updates.
07:46:53 PM Quasar 6 Version update, not versioning the packs yet.
07:44:48 PM Quasar 5 Updates missing from Empty_Project before copying.
07:42:24 PM Empty 64 Updates for reverse z-buffer.
07:35:52 PM Quasar 4 Initial setup.
07:33:51 PM Quasar 3 Added the NERD external.
07:32:49 PM Quasar 2 Initial checkin, copied from Empty_Project.
07:30:37 PM Quasar 1 Initial structure.
Tuesday, April 07, 2026
10:38:49 PM Atlas 59 Added worldspace-scaled texture.
Tuesday, March 31, 2026
09:10:55 PM Atlas 58 Unified height values between CPU and GPU and more.
Wednesday, March 25, 2026
12:24:51 AM Atlas 57 Getting saving and loading working. All hardcoded paths, no packed support, but it's working.
12:15:45 AM Nerd 5357 Yeah I guess for consistency it should be this.
08:04:05 PM Atlas 56 Laying some groundwork for terrain mapper memory management.
Saturday, March 21, 2026
03:47:47 PM Atlas 55 Mapper data is now dynamically allocated. The coarsest layer blends to a fixed height.
Wednesday, March 18, 2026
09:37:14 AM Atlas 54 There's going to be a lot of cleanup to do here, but I gotta check this in so I can move on to testing actual 32-bit height values without packing.
Monday, March 16, 2026
07:55:00 PM Atlas 53 Added surface texturing and a few other small changes.
11:22:00 AM Atlas 52 First implementation of the mapper. Lots of assumptions about height and texture packing in here but it proves the concept.
10:15:08 AM Atlas 51 Commented out FXAA test texture code.
Sunday, March 15, 2026
09:50:04 AM Atlas 50 Added surface texture.
09:49:52 AM Atlas 49 Updated copyright year.
09:48:30 AM Nerd 5356 Added support for anisotropic filtering. This mostly already works in D3D; the texture sampler just needs to specify, e.g., MinFilter = Anisotropic, MagFilter = Anisotropic, MaxAnisotropy = 16. It's probably safe to assume any modern GPU supports 16x anisotropy, right?
09:47:00 AM Nerd 5355 Updated copyright year (from 2024 lol).
Thursday, March 12, 2026
08:16:35 PM Atlas 48 Unversioned the pack files. I can bring these back when and if I start porting to other platforms.
08:15:46 PM Atlas 47 Couple last little things before I start working on the terrain backend.
Sunday, March 08, 2026
10:52:15 PM Atlas 46 Medium settings are probably fine.
10:22:59 PM Atlas 45 Getting distance fog working with an infinite reverse z-buffer again. Seems like W is what I want here.
09:51:49 PM Atlas 44 Some cleanup, moving terrain instance creation to an internal function that takes in a template function object to run for each instance.
09:18:43 PM Atlas 43 Eh, I'll leave this off for now.
09:12:32 PM Atlas 42 Brought over FXAA from TulpaThree and made some improvements.
09:04:57 PM Atlas 41 Going back to image heightmap terrain.
09:04:42 PM Atlas 40 Added an off-center projection. Pretty aggressive right now (golden ratio), just for funsies.
08:38:59 PM Nerd 5354 Introduced a path for the derived game to inject a postprocess step between VBB1 and VBB2, by allowing the game to override which RTT the pre-HUD pass samples from.
Saturday, March 07, 2026
09:13:11 PM Atlas 39 More generalizations such that GetDefaultBackdropDepth() is the authority of reversing the depth buffer.
09:00:25 PM Atlas 38 Getting a reverse z-buffer working.
08:59:34 PM Nerd 5353 Added support for reverse z-buffers. Does not work reliably in GL. Oh well!
Thursday, March 05, 2026
12:04:04 AM Atlas 37 Scale tests with an input height map. Fixed blend ranges.
Wednesday, March 04, 2026
09:44:48 PM Atlas 36 Got terrain levels blending out by height.
04:00:37 PM Atlas 35 Generalized a bunch of scale stuff. This should be a good base to start working on blending by height next.
10:53:23 AM Atlas 34 Getting some more things scaled correctly. This mostly works but there are some depth buffers problems now.
09:26:19 AM Atlas 33 Removed the PreTransform matrix in favor of forging a combination world-view matrix wrapping the actual camera position to the four immediate cells of the current level. The next step will be to keep the vertices at integer units and only apply scaling in this forged world matrix.
Tuesday, March 03, 2026
10:48:26 PM Atlas 32 Fixed up that blend radius scaling issue I forgot about last night, and made the background clear color and height gradient match the Verse32 off-black and off-white bounds.
10:41:59 PM Nerd 5352 Comment.
Monday, March 02, 2026
11:47:50 PM Atlas 31 NERD-247: Smoothing out blending between transitions, corrected some math on the circle gate. I think I can get rid of the blend verts in the vertex buffer.
07:37:53 PM Atlas 30 First pass of blending between levels, plus improved index buffer layouts that alternate split directions.
07:37:11 PM Nerd 5351 Added accessor for user slomo. This is not factored into time dilation, which is an actual shipping game feature and historically has only been used for like...Xanadu boss intros and the ending of Tulpa, I think?
Sunday, March 01, 2026
10:52:11 PM Atlas 29 Added console commands to lock and unlock the terrain observer position.
10:18:53 PM Atlas 28 Added degenerate triangles to fix gaps between levels of detail. Not the cleanest algorithm but it seems to work.
08:39:01 PM Atlas 27 NERD-247: Dirty rectangles for texture updates, plus texture packing into all four channels, which is really unnecessary but a good place to start.
08:37:30 PM Cmd 137 Potential solution to vertex textures in GLSL. I don't have a whole lot of confidence in this. It works on my machine, but that is never a guarantee with GL.
09:11:43 AM Atlas 26 Back to one vertex buffer for all levels.
Saturday, February 28, 2026
07:06:38 PM Atlas 25 Initial implementation of terrain texture, not yet moved to the vertex shader.
12:22:17 PM Atlas 24 NERD-247: Initial checkin of terrain. If this pans out, it will be eligible for promotion to NERD. This also includes some older code that I had never checked in where I was getting Enodia node objects stubbed out. That led to discovering a pretty severe collision bug (NERD-245) and then I never checked it in. So that's here now. Some of it is commented out because I was tired of hitting those capsules with the mouse all the time.
12:04:20 PM Nerd 5350 NERD-238: Added asset dependency support. Will warn in the case of mutual dependencies.
12:03:00 PM Nerd 5349 Apparently I never added this to the project.
12:02:09 PM Nerd 5348 Ignore glsl output.
12:01:22 PM Nerd 5347 Unversioned output folders. Pretty sure these will be generated automatically and don't need to be stubbed out, and I never want to version anything in them, because that's all data that's generated by rebuilding content for packaging.
11:56:26 AM Nerd 5346 First pass of NFunc, a templated function wrapper in the style of std::function. This does not yet support copy, assignment, etc.
11:54:53 AM Nerd 5345 NERD-246: Some changes to try to catch a seen-once assert in user data transaction at startup.
11:53:19 AM Nerd 5344 Removed an unfinished comment.
11:51:31 AM Nerd 5343 Added NTransform::ToMatrix(). The multiplication order seems backward to me. I thought these went right to left, but I guess not?
Saturday, December 27, 2025
04:46:45 PM Nerd 5342 Rolling back r5339 (adding radius to thick surface test). It's a solid idea but the implementation for cylinders was broken and there's too many other problems with this logic. I'll want to revisit this in the future (NERD-245) but I'm not there yet.
04:42:07 PM Nerd 5341 Comment.
04:41:16 PM Nerd 5340 Comment.
Sunday, December 21, 2025
12:14:38 AM Nerd 5339 Added a radius parameter to the thick surface test. Feels kinda risky buuuuuuut also this has felt like a problem since...Drome? Was that Spectre Shock / The Understory?
11:46:01 PM Nerd 5338 Implemented point-sphere intersections.
11:41:42 PM Nerd 5337 Made ThickSurfaceTest() a static function of NCollisionSpace.
11:37:19 PM Nerd 5336 ECollisionCleanup -> FCollisionCleanup
11:34:45 PM Nerd 5335 Comment on future changes to the entity factor for predominantly code-based projects.
11:33:42 PM Nerd 5334 Here's those NPrims.h -> NPrimGen.h includes.
11:30:43 PM Nerd 5333 Renamed NPrims to NPrimGen. This change does not include anything that includes this header, meaning this will break the build, but I can't shelve these apparently and I have other changes to sort out. It's fine. Whatever.
11:18:15 PM Nerd 5332 Same changes but for the mutable version.
01:45:37 PM Nerd 5331 Stubbed out an NTransform type. Will need some work.
Saturday, December 20, 2025
08:43:58 PM Atlas 23 Test of the new Trace() function.
06:07:45 PM Nerd 5330 Some improvements to trace primitives. Added NCollisionSpace::Trace() to perform arbitrary line traces without the need for a bespoke primitive. These use a globally accessible point primitive instead.
Saturday, December 06, 2025
09:40:04 AM Empty 63 More work on this triangulation thing.
09:39:46 AM Nerd 5329 Another comment.
Tuesday, December 02, 2025
10:02:21 PM Empty 62 Added triangulation experiment for Atlas.
10:02:02 PM Nerd 5328 Comment.
Wednesday, November 05, 2025
10:16:09 PM Nerd 5327 lol oops
Monday, November 03, 2025
09:38:56 PM Atlas 22 Threshold on mouse movement before hiding the cursor.
09:25:15 PM Atlas 21 Dinking around with stuff and things and stuff.
09:21:50 PM Nerd 5326 Disallowing serialization by not populating save slots doesn't currently work, so for now I've added asserts to ensure this doesn't happen and comments on how it could be supported. Mostly this comes down to IsSessionOpen() requiring a non-null save slot.
Saturday, November 01, 2025
10:44:59 PM Nerd 5325 Fixed a bug when a visible cursor is desired by default, and renamed this property for accuracy.
09:18:15 PM Empty 61 Better.
Wednesday, October 29, 2025
09:37:26 PM Empty 60 Testing spring smoothing.
09:37:18 PM Empty 59 Updates for latest engine changes.

09:36:54 PM Nerd 5324 Updates with lots of comments. This seems to work but I haven't solved all the math myself so who knows.
Tuesday, October 28, 2025
09:45:25 PM Nerd 5323 Added SmoothSpring(). Not fully tested.
Sunday, October 26, 2025
11:32:26 AM Atlas 20 Getting mouse input working a little bit better.
Friday, October 24, 2025
09:02:07 PM Atlas 19 Added color constants.
09:01:38 PM Nerd 5322 Added color constants.
07:22:01 PM Atlas 18 Getting mouse dragging for movement working. Very rough.
07:18:28 PM Nerd 5321 Moved a Mac-specific hack to another function. Who knows if it's correct anymore. Who knows if I'll ever build Mac again.
07:16:03 PM Nerd 5320 Fixed a bug in GL line drawing that's probably existed since the dawn of time.
Wednesday, October 22, 2025
07:17:24 PM Atlas 17 Stubbing out types for the Enodia graph. All super temporary.
07:16:29 PM Nerd 5319 Debug camera should use "FPS" motion for vertical (ctrl/space) movement.
07:14:07 PM Nerd 5318 Increased the limit on debug lines from 32 to 1024, added an option to make these persistent, and added an option to flush all debug lines.
Tuesday, October 21, 2025
07:06:53 PM Atlas 16 Getting a grid and debug camera working.
07:05:42 PM Nerd 5317 Raised debug mouse rotation speed from 0.001 to 0.0025. This should be a config variable but here we are.
07:04:58 PM Nerd 5316 Assert and remove erroneous cleanup flags when they occur.
07:04:31 PM Nerd 5315 Comment on the possibility of a generic post-construct step for all NObjects.
07:04:05 PM Nerd 5314 Renamed GameWantsVisibleMouse() to HasVisibleCursor() for clarity. There's more "mouse" -> "cursor" cleanup to be done in the future.
07:02:52 PM Nerd 5313 Added a default solid color material with only a WVP matrix and a color. Kind of weird that I'd never had something like this before. To be honest, I really need to move in the direction of composing materials from discrete parts, but not during a game jam. (NERD-241)
Monday, October 20, 2025
07:25:41 PM Empty 58 Added test of parcels.
07:20:29 PM Nerd 5312 Stubbed out a new version of NScheduledRoll as a "Parcel" system (IParcel, NParcelMgr, etc.). Not totally ready to go yet but good enough for an initial checkin in advance of LSDJAM 2025.

Return to SVN Tools