We've had a number of a problems for a while with our skill checks. Staff understanding of how a given skill check functioned was entirely based on their experiences. In order to fully understand them, folks would have to look at code. And each check was free to work how it wanted. Over 150 different points in the code performed skill checks, in a variety of ways, some involving modifiers to the skill checks, bonuses given based on gear in use or parts installed, etc. To understand all this would take months, if not years.
Another issue with our skill checks was the issue of manual rolls. If GMs needed to have a coders understanding of over 150 different bits of code, they'd likely be coders, not GMs. GMs without the understanding would have to rely on documentation telling them how to do things. The documentation would have to be kept in sync with any code changes. A lack of said documentation would mean these GMs could not manually do undocumented checks. Obviously not ideal if the GMs of your roleplaying game can not perform roleplaying skill checks.
A third issue was abuse. Someone with the needed level of understanding behind the skill checks was easily able to abuse the detailed knowledge for their own gain. Whether we're talking about a coder making choices with their alt(s) and reviewing code they're planning to leverage or sharing knowledge with a close group of friends so the plots go the way they want, it's all spelled out directly in the code on the gizmos and gadgets and various feature objects of the game.
To solve these problems and provide a foundation for future improvements, we have centralized skill checks. A repository with each check given a useful yet succinct label and set of parameters that define how that check should be performed. Each Check Configuration lets us declare what skills it can leverage, what stats will be tested, if there are modifier inputs, how those are determined, if the check defines its own difficulty, or if it knows how to calculate the difficulty, and so on.
Using the new $Checks System is meant to be simpler than what came before. Where the feature code would need to know (or determine) the skill and stat(s) that were evaluated in the check, and calculate the modifiers, these are all removed from the feature code directly.
It looks something like this:
$checks:skill($checks.COMBAT_ATTACK, dude, challenger);
If the player being tested is the one being tested, and there's no opposing character, this brief:
Today, almost every skill check you're experiencing is going through the new $Checks System. Combat is being tested on our development server prior to implementation here. Pretty much everything else has been on it, in some cases, for more than 2 weeks now. In implementing this, I had to touch over 150 different points in the code.
I came across some questionable choices - I did not however, change these questionable choices. I felt it was important to preserve the functionality everyone was used to while switching over to the new system. It's not going to be a perfect transition, and catching and fixing errors is easier when you don't overall everything else in the process. But having all the checks in one place makes doing this task a lot more possible than ever before. We can even do things like A/B Testing with this!
Staff have limited visibility into the $Checks system. They can all see what checks are available, but only more senior GMs can see what skill they leverage and only the most senior rank can see what stats are tested.
All this doesn't yet mean much to you. GMs can't yet manually run these checks. There's no IC way to access the information this will make possible. We're close though. Those announcements will occur in this thread as they come. If you are experiencing bugs or things that were easy 2 weeks ago are suddenly impossible with repeated attempts, please raise those issues for us to troubleshoot. There may be very logical reasons why you suddenly suck, but at this juncture, I want to hear early from anyone who feels something has been borked. Thanks and have a Merry Christmas everyone!