The past year has been a good year for Trosnoth. Over this time, we have:
- migrated Trosnoth to Python 3
- made several UI improvements, including adding indicator lights around orbs, showing the short names of friendly players on the minimap, and adding a respawn gauge to all ghosts
- adjusted the costs of items based on observed usage
- added a way for players to select their preferred scenario for the next match, along with a bunch of new scenarios including Elephant King, Orb Chase and Cat Among Pigeons
- updated the server to keep track of some statistics across multiple matches in a tournament
- made huge improvements to the momentum-based physics that was released in late 2017: we overhauled the collision detection to use separating axis theorem which eliminates the possibility of falling through walls; we also made improvements to how grappling hook works (these are yet to be released)
- as part of the grappling hook changes, given players the ability to hold on to roof surfaces, and shoot while holding onto walls and roof
- made bots feel a bit more fair—they have a short simulated reaction time, but they’re still a challenge to defeat
- fixed a bunch of bugs
- made other minor changes and improvements in response to player feedback
- made fair progress towards bots using the updated momentum-based physics
In 2018 a small number of players formed a Trosnoth League. Once a month we scheduled time to play Trosnoth competitively online. The internet causes some frustrations that aren’t experienced on a LAN (chiefly of the, ‘I hit you on my screen!’ variety). But our experiences showed us that internet Trosnoth is still a lot of fun!
One of the fun things we did during Trosnoth League was to play Human vs. Machines matches. These matches were often very tense matches. Over the course of the year, 8 HvM matches were won by the humans, compared to 6 won by machines.
Trosnoth League also provided regular opportunity for player feedback—we often played with an alpha or beta Trosnoth version and solicited feedback. This resulted in us fixing a number of minor annoyances for players, and adding a number of low-effort medium-payoff features to the game. For instance, we added a visual indicator for ninjas to see how close they can get to enemy orbs before being seen, and we made it possible to remap the right mouse button (previously only keyboard keys could be remapped).
In 2017, three people contributed code to Trosnoth. In 2018, there was only me. This 67% drop isn’t a concern in itself, but it does serve to illustrate how the project operates at the moment: I’m the main code contributor, and other contributors offer a bit of code every so often as they’re motivated an able. Maybe this is ok for a working game like Trosnoth, but I’d still love more regular contributors. We’ve actually never been great at attracting new coders to Trosnoth. Almost all of the occasional contributors were contributors 8 to 10 years ago when the project was still getting off the ground. If you’re a coder and you’re interested in helping out with Trosnoth, please get in touch! I’ll be as helpful and encouraging as I can!
The previous paragraph may sound like doom and gloom, but having no new coders doesn’t mean I’m the only one involved in the project. Trosnoth League has been a great source of ideas and suggestions, and has also resulted in one or two people contributing to future artwork and design of Trosnoth, which I find exciting! And there are still 5–10 people who help me decide on project priorities when I do spend time on Trosnoth.
I always welcome new contributors to Trosnoth, but right at the moment we don’t have any regular contributors with particular expertise in game graphics, and it would also be really cool to have someone who could put together video tutorials or a Let’s Play. Please get in touch if you’d like to be involved! You can connect with us on the trosnoth-dev Google Group.
Releases and Artist in Residence Grant
2018 saw three Trosnoth releases in January, April and May. This means that there has been no new release in over six months. The man thing that’s been holding up the release of Trosnoth 1.13.0 is the bot pathfinding: I’d like the bots and humans to be using the same physics, but that can’t happen until the pathfinding is working. I keep thinking that I’ve almost finished updating the pathfinding code only to find that there’s more to do.
One huge motivator to work on the bot pathfinding was when I was named as the Pygame Artist in Residence in October. During October I wrote a bunch of Trosnoth-related blog posts, but I also spent significant time working on bot pathfinding. (I did a time-lapse video of my work too!)
The Artist in Residence program also came with a small grant of money. I spent some of it obtaining a Windows code signing certificate and related hardware, so future releases of Trosnoth should actually be signed!
What Next: Server Deployment, New Levels, Chrome, and Synchronisation
Once I finally finish the bot path-finding, there are a few different ideas that I’d like to work on. I haven’t yet prioritised these, so I can’t tell you which one is coming soon. But here are four things somewhere in the pipeline at present:
- Simpler server deployment: I want to make it really easy to install, configure and run your own Trosnoth server, so that people can play Trosnoth at LANs even without specific technical knowledge.
- New levels: And not just new levels, but a restructure of how levels work so that there are coherent rooms such as a control centre, cargo bay, living quarters, recreation areas, and so on.
- HTML and CSS UI elements: I’d like to experiment with using Chromium Embedded Framework for some Trosnoth UI elements. This wouldn’t be used to render the game itself, but for menus and some parts of the heads-up display. One potential advantage of this approach is that it allows people who know HTML and CSS to tweak the UI without forcing them to learn how Python and pygame work. This also might simplify things if we ever move to using Panda3D for rendering: the HTML/CSS parts wouldn’t need to be rewritten to make the shift.
- Speed/smoothness/synchronisation improvements: At the moment Trosnoth has a very workable process for synchronising the game state between the server and clients. But I’d like to generalise what Trosnoth does into a separate library. This will allow for more automated testing of the synchronisation code, and more consistency and robustness. This will also make it easier to reason about the code when making improvements to how the game handles internet latency smoothly.
With the current level of time I spend on Trosnoth, I don’t expect to complete more than one (or at most two) of these four things in 2019, but that gives you an idea of where things are heading at the moment.