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

CSRD Update: 26 March 2018

← Blog

Picture of RED team getting destroyed by their own Payload cart.

The future is here! Thank you for your patience during this drought of update posts.

After a few days of figuring out how SourceMod extensions work and poring over a disassembly of the game, I've managed to add Payload Race support for bots!

With existing research from iPlayer's PLRbots Source:Python plugin, this update adds support for an additional 6 maps!

Hah, yeah, that's not much, but this also lays down the groundwork for future improvements to TFBots. Like Arena support. Or even rocket jumping, someday. The extension system is much more capable of digging into the guts of the engine.

That said, that's not the only thing that was being worked on. Here's a list of changes since the last time I've posted.

Bot changes

  • Raised the bot player count to 12, from 6. I still align with the philosophy that I'd never want players to join under the false pretense that the server is full of humans, but it's awfully boring when there's only 3 players on the other team. Raising the numbers means a more distributed spread of skill levels. I think this is as high as I'm comfortable setting it at.
    • The minimum count required to change to unsupported maps is still four players. I still want to give players a chance to discover maps that aren't supported by bots (yet).
  • Bots will now force themselves to respawn if the spawn room they are in does not have any active spawn points. This should fix cases when bots are stuck in an old spawn (either by the map not forcing players to respawn in a new spawn or plain ol' stuck bots).
  • Applied a fix to force a map change if overtime runs for too long on an empty server. This mainly affects Cactus Canyon (Payload), as bots tend to get stuck on the last stage with the cart rolling back forever.
  • Fixed a longstanding issue in Bot Manager that truncated bot names to 30 characters, instead of 31. Say hello to Grandiose Mechacow 3000-XC (properly) and AWeaponToSurpassMetalGear!
  • Updated Loadout Randomizer to be able to persist Ubercharge when touching resupply.
  • Fixed the Demoman's ability to SPIN2WIN when holding the Stickybomb Launcher (his walk animation with it active is rotated a full 180 degrees, and so the animation tweening rotates him).
  • Created a SourceMod extension to add rudimentary Payload Race support to bots.
    • Bots on both teams will act like the map is a standard Payload map and will push their respective carts (using the PayloadPush action). They'll also destroy Engineer nests and fight other bots, as usual, but will make no concentrated effort to block the enemy team from pushing their cart.

Map changes, navigation fixes

  • Added Shoreleave (Payload), Vigil (Payload), Kalinka (5-CP), and Haywire (Payload) to the standard rotation. Bots are supported.
  • Fixed the navigation mesh at the second BLU spawn in Enclosure (Payload). BLU bots were trying to traverse a ramp that didn't exist in the latest version. A few other areas had minor connection changes as well.
  • Updated Map Runner:
    • Added handling of an edge case in the Map Runner where workshop map availability changes when Steam disconnects and reconnects in a short period of time. Previously, the change in connectivity would kick the bots in preparation of a map change, but never actually switch maps due to the map being considered "bot supported" when back online.
    • When a map vote is called without enough players to run bot-unsupported maps, all non-nominated maps will be ones that are supported by bots.
      • This ensures that players have more confidence that the map they vote on will actually be switched to, instead of the server overriding the unsupported map choice at the last second.
      • Any passed nominations may still fail if the bot-unsupported criteria isn't met, however.
    • Fixed cases where manually-set map changes fail on shorthand map names, even if the map is supported by bots.
      • This occurred because the plugin didn't resolve the full map name for the sv_nextmap ConVar.
  • Support has been added for the following Payload Race maps: Pipeline, Nightfall, Banana Bay, Panic, Yuno, and Valentine.
    • Hightower is currently unsupported because fuck that map bots aren't capable of riding elevators very well. I'll have to check the navigation mesh and tweak it a bit later.
    • Did you actually remember about Frostfell being in the winter rotation? I've only done the standard rotation so far.

Client functionality improvements

  • Changed over to use the updated VGUI URL Cache Buster to handle the workarounds for VGUI messages. Profile, Workshop, and Steam group pages should work again.
  • Minor changes to Building Radar:
    • Now emits a client-only ping sound when a building glow is used.
    • Fixed glow possibly not matching the model of its parent (e.g., after upgrades).

Achievement changes

  • Fixed broken Shortstop shove detection on The Shortstop's Touch — the shove hurt event uses the victim's weapon when self-damaging, which resulted in a check for a Scattergun as a result of testing with Scout bots. It should now work correctly on all player classes.

Site changes

  • Added minor optimizations to the scoreboard background; it now uses a dedicated canvas element (rather than creating a new one on image load), attempts to use CSS filters on the canvas for the blur effect, and is able to avoid using a data URL as a background on Gecko-based browsers.
  • Malwarebytes finally removed the blanket ban on the .science gTLD, so users of the software should not run into issues connecting to the server anymore.

Behind-the-scenes stuff

  • Finally segmented the backend system into individual files. I don't know why I had issues with it before, but after spinning up a VM and writing a smaller API with hug, it's a lot easier than I thought it'd be.
  • Moved the download preferences redirect service out of PHP and into the Python backend.
  • Improved resiliency of the backend system by adding a number of tests in development mode.

Other fun experiments

  • I heard there was a better way to set up multiple servers, so I wrote a script for that. You can find it here.
(Up you go!)