The blog for the bleeding-edge news in the server of Research and Development.

CSRD Update: 6 March 2019

← Blog

It's been a couple of months, so it's about time for another update rollup to document what's new on the server.

Ghidra is out; I've spent the entire day since it came out yesterday just disassembling the latest TF2 server library with it, and it's fantastic. There's still lots of things about it to figure out, but it's looking like a real alternative to paying thousands of dollars for IDA Pro (and the Hex-Rays Decompiler). Will probably dedicate a chunk of time on TFBot stuff with it.

Bot changes

  • Bots are no longer allowed to hide inside their buildings. Points to Deathreus for figuring out where in the code this happens. Figured it was close to where the game handles collision for the building Engineer; just not sure how I could find that with IDA.
  • Rewrote the taunt randomizer so it doesn't use filthy taunt condition reentrancy hacks, separating it from the larger weapon randomizer plugin.
    • Surprisingly, this is the first older internal plugin that was rewritten to use gamedata. All the older plugins have very, very filthy workarounds.

Client functionality tweaks

  • The text-based MOTD is now generated dynamically and displays the latest microblag news. For those that disabled HTML MOTDs, this one's for you.
  • Installed a plugin for smooth Sentry gun building animations, with a minor tweak for this to run slightly less often. Wonder if a SendProxy version of this would be more performant.

Misc. server changes

  • Added a tertiary hotfix to force maps / arena rounds to advance in the event that they stalemate for 1 hour and 10 minutes respectively.
    • This should prevent future incidents where bots are stuck on a map because they decided to go with three snipers in Mochville. Apologies to those that joined during the 2.5 days that this was an issue.
    • I thought I covered this case when I added class restrictions on bots for other Arena maps; apparently not.

Map changes

  • Added the following maps to the standard rotation (bots supported):
  • Navigation mesh tweaks:
    • Swiftwater was modified for proper handling of one-way gates and blockers in RED spawn. Bots shouldn't be getting stuck as often as they did before.
    • Tribute was modified for one-way gates and fixes due to holes in the wooden bridge outside of both teams' spawns.
    • Noticed BLU bots were getting stuck at the Pier dropdown, so I fixed that up, as well as realized the bridge in front of the fourth point has a bunch of holes that the navigation mesh generator added connections for. If there's anything I hate more than diagonal areas, it's non-playerclipped holes in the floor.
    • General maintenance for updated maps. It's great that people update their maps, not great because I have to rebuild the navigation meshes and give it a review each time.

Backend shenanigans

  • The live scoreboard backend was modified to use my KeyValues RPC library. I did this to segment the socket listener from the response handler, making adding functionality to the interop much cleaner if I ever want to do that in the future.
    • The protocol is based off of JSON-RPC. I didn't want function-serving plugins to depend on any particular JSON library (as SourceMod has multiple implementations), so I decided to use the engine's KeyValues support instead.
    • … not like it matters too much in this case since I just base64-encoded the entire JSON payload into the response for the port. The strings-only format of KeyValues is unfortunately limited in that aspect.
  • Refactored workshopmaps.py into a more reusable library — I'm considering rewriting the map cycle generator entirely in Python, as opposed to the clumsy pipeline of functions in bash that it's written as now (shell scripts have its uses for sure, though!).
(Up you go!)