NET IL binaries (the executable C# compiled to). Great news! Tools like dnSpy can decompile, modify and recompile. It turns out, the game is written in C# using the Unity Engine. Unfortunately, the game is closed source and only distributed in binary form. Now that a plugin was out of the question, the only other way was to somehow get the game to voluntarily send the player position to Mumble. This interface was later used for automatic muting and unmuting during in-game meetings. It is also possible to send RPC commands to the currently running Mumble client, e.g. However, this approach turned out to be slow because the memory content of the game essentially has to be polled continuously, but each read took quite some time. I found shlifedev/AmongUsMemory, where a basic memory extraction and parsing for Among Us was implemented. Originally, I tried to implement a plugin that uses memory-scanning. This uses a named memory-mapped file (works similar to a pipe) to communicate between two processes. Alternatively, if the game itself can be modified, the Link protocol can be used to send positional data to Mumble. One can write a plugin, which gets loaded into the mumble application and extracts player position data from the memory of a game. To add support for a game to Mumble (in regard to the positional audio), there are two ways. This enables even weak hardware to handle hundreds of clients. Due to this approach, all the server has to do is route the audio packets. This audio effect can even emulate a 3D position and is readily implemented in APIs such as XAudio. The other clients then change the volume of each peer according to the computed distance between themselves and the received positions. The way Mumble handles positional audio is quite smart, instead of doing any resource-hungry audio mixing on the server, each client sends a stream of its own in-game position along with the audio stream. But most important, it features support for positional audio information. It is a native VoIP application with low latency and plugin support. Mumble has existed for over a decade as an open-source alternative to TeamSpeak. It seemed promising from a technical point of view, but the setup is not that easy and I would have had to write quite a lot of software parts, the client just being one of them. Next, I checked out Janus, which is a server/toolkit for WebRTC. Also, I wanted to use free and open-source software. However, Discord has no support for positional audio, and even if you wanted to manually implement something like that, the API is too limited. To begin with, I looked at several VoIP solutions, because I really do not want to implement my own.Īt first, I looked at Discord, because my group already used it. However, back then the only option was a paid software that was licensed to entertainers on a case-by-case basis. Since then, multiple other implementations have popped up. Please note, I started this project back in October 2020. As the dedicated game server admin of the group, I set out to experiment. However, the idea of a proximity-based voice chat came up recently, where players would be able to speak to each other depending on their in-game position. When no meeting is active, we all mute ourselves. When I play with my friends, we usually use the Discord VoIP software for discussion during in-game meetings. One of these games is “Among Us” by InnerSloth, an online multiplayer social deduction game, similar to the board games “The Resistance” and “Mafia”. Check out the project on GitHub, and join our Discord server if you want to.ĭue to quarantine, several interesting and fun computer games resurfaced and got popular.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |