2023 recap, and plans for 2024
Added 2024-01-03 18:00:18 +0000 UTCLast year to-do plans
Here was what I said I planned last year.
- Ext list update – add Mac exporter, add paid extensions
Currently CEM has some extensions that Darkwire ext list doesn't have. - Mac SDK investigations, port of Lacewing Blue and DarkEdif extension SDK to Mac, if it's doable.
- SDL Joystick object – add extra features, port to Android/iOS
- Web Query Object – port to Android/iOS
- DebugObject – roll out the smart logging and all its features
What I actually did:
- Ext list update – Mac exporter was added, CEM extensions too, as planned!
- DarkEdif SDK Mac port was done, so now DarkEdif code can be written for Windows, Android, iOS, Mac, on all CPU types; and there are templates for HTML5 and UWP.
- DarkEdif SDK now has a Prepare DarkEdif tool which allows a would-be dev to instantly get a copy of the DarkEdif Template into a project folder customised for their platforms and needs. It generates SLN file, VCXPROJ files, and allows you to select ext platforms you want, and will even remove Unicode or French translations.
- The DarkEdif Ext DB tool was updated to fix a bug of line endings displaying with double spacing if you edited same entry twice. Fixed thanks to CT user lily.
- SDL Joystick has a ton of features, and was ported to Android, iOS, Mac, with a translator for HTML5, too.
- Lacewing Blue Client was ported to Mac; the HTML5 version now loads a library for Blue's UTF-8 text encoding ⬌ JS's UTF-16 encoding, on browsers that don't have it built in.
HTML5/UWP port was given "public" variables so other extensions can read and modify the received messages/binary message-to-send. Signed byte expressions and float actions/conditions were also fixed. - Lacewing Blue Server was ported to Mac. The Server has fixes for Firefox support, TLS/SSL errors are reported, and >32kb HTML5/UWP packets are accepted. Signed byte expressions and float actions/conditions were also fixed.
It was also modified to delay actions to lower the chance of deadlock; for example, kicking a user in the same moment they get ping-disconnected makes Fusion UI thread and ping thread get tangled up. - Web Query was not ported as planned – it's not a small job – but it was updated to add multi-part messages, useful for REST image upload, such as all those new OpenAI interfaces. A file download memory leak and a broken error message were also fixed.
- RTSP Object was updated to latest libraries, and added FPS capping for output files, display resizing, and audio recording. Audio playback was added too.
On Connect and On Connect Error conditions were fixed. You can now also read and modify the displayed images on an image-by-image basis, allowing AI object tracking and broadcasting e.g. via Blue Server. - Phi Object was updated to read alterable values/strings in the new CF2.5+ layout.
Plans for 2024
There were other things already done in 2023, which I'll be cleaning up and rolling out in 2024:
- DarkEdif SDK object selection was ported to all platforms, and was updated to a nicer C++ interface. It is as simple as a C++ for-each loop now.
- DarkEdif SDK now allows you to access Fusion internals on all platforms, but it's a piece-by-piece affair.
I don't see the need to write a ton of wrapper functions for the thousands of variables, but I do think, for easy porting, an example of how to access the things on every platform is necessary. - DarkScript was ported to Android, iOS and Mac as the main impediment was object selection. In tests, it's worked well.
DarkScript in build 2 also now has a new property for running singular Active for-each actions to trigger that Active's Qualifier for-each conditions. I also fixed the Create Object bug, and reported why it happened to Yves (ActionLoop), who has patched the runtime to avoid most of those effects. - Blue Server had some delayed events to prevent deadlock, which work well, but are very delayed as I stuck it onto the ping timer thread, which only runs every five seconds. I will be improving that responsiveness in next build.
I have also fixed a bug where the outgoing UDP port was overloading, resulting in lots of retries, rather than discarding the message – which in turn lead to a lot of logs, which lead to delay, which lead to more queued messages, more overload... - A Darkwire shader list is now available. The data for it was cleaned up some thanks to CT user lily, but it still needs work before I publicise it; updating CT forum links, confirming ports, etc. I'm hoping to have some interface for previewing what a shader will do by screen capture, but that's a ton of work. If anyone has an idea for an interface for previewing shaders that'd be useful for someone searching for one, that'd be good to hear about.
- RTSP's new image access comes with some bugs when the camera is disconnected/just connected/before connecting, and no video image is available. It's not clear how or if it is, but it may also be accidentally dropping half the image frames in display.
- Web Query also needs some fixes, as it has new memory-sharing as well, allowing quick passing of images from RTSP/Surface to Web Query, and reading images back from downloads, without having to write to disk in-between; saving a lot of time.
And on top of the above, as new projects in 2024:
- uPnP has been getting a lot of attention and hopefully will be funded. This will allow port forwarding from Fusion events; so people can host games where one of the players is the server, rather than the game owner dedicating a server machine to it.
You'll need a server to pair the players together, though, as they'll need to know what to connect to. The bulk of the gameplay can be on the players' machines, though.
I did write a simple webpage you can read with Get Object to get a remote IP, if you plan on having no matchmaker server.
(Note you don't need uPnP to host a LAN game; by default, hosting a Blue Server will be available to LAN. uPnP Is when you want it accessible to clients beyond the router.)
You should be wary of the security and cheating risks of this uPnP model. If there's progression in your game, or a risk of someone making others lose and ruining their play experience, you may want to keep it as a traditional server where you can control what the server allows. - DebugObject! As mentioned in last year's plan.
I've also got an idea for monitoring a variable, like an alt value, and noting the events/actions that interact with it. It may not be possible, or portable, but we'll see. - Web Query port, hopefully. This is a lesser priority, as Get Object exists, and the libraries that port to other platforms are a bit... annoying to port over.
The library in question, cpprestsdk, depends on several other libraries including OpenSSL, Boost, etc, which translates to a month-scale work. Sometimes these libraries can only be built in Linux-based OSes, sometimes they require a lot of extra tools like CMake, MinGW-w64, sometimes they need tricking to target XP-compatible and other platforms.
So that's a lot of plans for 2024. It's gonna be good stuff!
Thanks for the support so far!
~ Phi