Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags

Onslaught

An audio-only Asteroids-like shooter · By Lights Out Games

Radio silence

A topic by Lights Out Games created Sep 25, 2020 Views: 134 Replies: 2
Viewing posts 1 to 3
Developer

Hey folks, wanted to explain why I’ve been silent and haven’t pushed out a release in a few days. The TLDR is that I’m working on refactors that might bring Onslaught, and other future games I create, to mobile. Unfortunately, that work has required lots of focus, but fortunately it’s wrapping up and I can get back to game development.

The longer version: I’m not just releasing Onslaught. I’m also releasing godot-accessibility for access to the engine. Godot-accessibility in turn depends on godot-tts which uses tts-rs for providing TTS access on most of its platforms, which in turn uses speech-dispatcher-rs under Linux. This is a lot of code, much of which is in Rust, and all of which is in projects I own. And while Rust is great for creating fast, stable code, it can be hard to work with.

Over the last week, I’ve been working on making TTS-RS call callback functions whenever it starts and finishes speaking a bit of text. There are some instances in Onslaught where I need to perform some action when speech stops–starting the game after telling the user to disable TalkBack, for instance. The way I’d done this before is by checking whether TTS was speaking, then telling the engine when it was done. That was fine, and probably mostly unnoticed on desktops. But those checks happened around 60 times per second, and as you might imagine, that had the potential to slow things down drastically on mobile. Android in particular was likely to suffer, since calls crossed the Java-to-native process boundary, which is generally a bit slow even when you aren’t hammering it 60 times per second. :) And, indeed, Android performance was kind of bad.

TTS-RS now calls functions when utterances finish speaking, which in turn will eventually propagate those calls up to godot-tts. As such, godot-tts will tell the engine that it is done speaking, rather than the engine having to check in 60 times per second. Hopefully that will give mobile performance the kick in the ass it needs.

Unfortunately, Rust makes some things hard. Function pointers, callbacks, and closures are one example. Further, I had to implement and test these mechanisms on Windows, Linux, MacOS and the web. Each platform does things differently, or in some cases not at all. That took all my energy this week, and I didn’t have any left over for game dev.

Fortunately, TTS-RS seems to be working. I still need to work these changes into godot-tts, but most of the differences are abstracted away behind TTS-RS, so I only need to do that work in one way. That’ll probably wrap on Monday or Tuesday, and I can get back to implementing Onslaught changes.

Speaking of, since the game seems more or less stable, I’m considering (knock on wood) adding another platform into the mix. If I can get things working on my Xbox, that’s what I’m considering launching next. I’ll post another update if that works out.

I think that will only work on windows with SAPI and Jaws. The last I've known is that NVDA has no ways of communicating that information.

Developer

If you mean speech callbacks, you’re correct. TTS-RS has half a dozen drivers of which Tolk is one, and it’s the only one that doesn’t support callbacks. That just means the feature won’t work there, but all mobile platforms do and that’s where I care about performance.