NPC Agent Placement System V0.3

u/Capsandnumbers


This is a project to allow DMs a fun side system for high-level PCs to safely interact with, without being cumbersome at the table or badly balanced. Inspiration was drawn from the D&D board game Lords of Waterdeep, and the Assassin Contracts system from the Assassin's Creed games. This is currently in active development.

The Big Idea

The aim is for the PCs to be able to recruit NPCs into their own adventuring guild and send them on quests of their own. The central idea is to easily take variables readily available at the table and automatically generate a suitable d100 table to represent their chance of success in their mission.

The input variables are arrived at by sorting your NPCs into a simplified class system, and the d100 table is generated using by getting an online calculator to do some fairly complicated maths so the DM doesn't have to. Currently this project uses the graphing calculator Desmos.

The Maths

The calculator can be found here:

Calculator V11


It works by using the shape of the tanh function to get the boundaries between outputs to squish together as they shift either one way or the other, using a variable m that is determined by the input variables.

The input variables include:

  • Level of the Mission - LM
  • Average level of the NPC party - LP
  • Number of people called for by the mission - NM
  • Number of people in the party - NP
  • How well the party suits that mission - PP

All of these are meant to be things that can be easily calculated at the table, see the Process section for details. The variables are put into a function involving logarithms, since they are mostly in the form of fractions, and logs treat numbers in the range (0,1] symmetrically to numbers in the range [1,inf). This helps to symmetrify a situation where either top or bottom of a fraction may dominate.

There are also a number of controller variables built in to help a DM easily pop the hood on this and arrange the odds to their taste. These include:

  • Strength Factors (a), these aim to change the responsiveness of the system to changes in individual effects, for example the NPC level effect, or to changes in m overall
  • Offsets (m), each outcome boundary is a separate tanh function, varying by offsetting each a given amount. You can use these to move boundaries closer together or further apart
  • Steepnesses (k), these change how slow or fast the function moves with respect to m. Changing these can let one outcome grow faster or clower than the others. I use it to stop crits taking over once you're very likely to succeed.

When I'm manipulating the controller variables I find it helpful to use the case where:

  • LP = LM = 5 - You're generally experienced enough
  • NP = NM = 5 - You're sending the right number of people
  • PP = 4 - Most of the roles asked for are covered

I then tweak the controller variables until these inputs give a fair chance of success.

You can also change anything about the plotting that you like. Feel free to take my name off it even. Any changes you make and save (With a Desmos account) are kept separately to my one, so feel free to make big changes.

The Process


For this section we'll be using the following example mission, all of which the players would know before embarking on the mission:

Find a Kidnapped Construct

A construct has been kidnapped and Rufus Frummagem needs help retrieving him!

Level 2 Mission:
1 Fighter, 1 Rogue, 1 Wizard

Success: 500gp + A magic item from Magic Item Table B (DMG p.144)

Mixed: 100gp + A magic item from Magic Item Table A (DMG p.144)

Failure: 100gp expenses

Failure Requiring Intervention: The kidnapper has also kidnapped a party member!


Step 1


First, look at the NPCs in your guild and sort them as well as can be into categories. For now I'm using the classic four D&D classes:

  • Fighter
  • Rogue
  • Wizard
  • Cleric

We also use levels 1-5 for the purposes of this. These are separate to usual class levels, but 1 level approximates to about 2 class levels. A class-level 10 NPC gains nothing but gold from working for the party.

Step 2


Next, decide who will go on this quest. You may select as many as the mission asks for, as well as an extra 1.

For example, let's say you send:

Jozan, Level 4 Cleric

The most experienced of your guild, here to provide leadership to your underleveled team

Lidda, Level 1 Rogue

The least experienced, in need of the training

Mialee, Level 2 Wizard

A solid pick and reliable in these sorts of encounters

Nott, Level 2 Rogue

Decent in a fight but certainly no warrior


The average level of this team is (4+1+2+2)/4 = 2.25, Jozan's experience makes up for Lidda.


The appropriateness of this team is given by matching them to the example composition as ideally as you can. Here we match the wizard and the rogue but not the fighter, so we have PP = 2 for that.


So we have the following input variables:

  • LM = 2
  • LP = 2.25
  • NM = 3
  • NP = 4
  • PP = 2


Plugging these numbers into the calculator and reading off the results gives:

Find a Kidnapped Construct
d100 Outcome
88-100 Critical Success
36-87 Success
25-35 Mixed Outcome
8-24 Failure
0-7 Failure Requiring Intervention

Step 4


The players roll when the NPC team returns, which may be functionally immediately, or may depend on the distance the team needs to travel. You might require a mission to take a number of days equal to the mission's level, to represent the difficulty of it. You may choose to show the players how their choices have affected the odds.

Step 5


Now we need to allocate experience!

An NPC needs 12 XP to level up. Use the following table to decide how much experience each NPC gets. This is a little bit of bookkeeping for the DM, you may like to appoint one PC the role of Guildmaster.


If an NPC levels up and there are still XP to factor in, the extra XP adds to their newly empty XP bar.

Experience
Character Level XP Gained Outcome Needed
Mission Level -3 or less 0 XP Any Outcome
Mission Level -2 4 XP Better than Mixed
Mission Level -1 3 XP Better than Failure
Mission Level 2 XP Better than Fail Req. Int.
Mission Level +1 1 XP Any Outcome
Mission Level + 2 or more 0 XP Any Outcome

What do you think of that? My reasoning for this is:

  • You should only have to do 6 missions of the level you're at
  • Going on underlevelled missions only improves your leadership and planning ability, which you get even if something goes wrong.
  • If you're inexperienced, you get a lot more out of it when things are going well. When they go badly the more experienced people tend to take over. This counters powerlevelling newbies by having them tag along on hard missions.
  • The maths scales, but is still simple enough to do at the table.

So for our example party, let's assume they've had a Mixed Outcome:

  • Jozan gets 0 XP - Nothing he hadn't seen before
  • Lidda gets 3 XP - A quarter of the way to level 2
  • Mialee gets 2 XP - Less of a learning experience for her
  • Nott gets 2 XP - As above, all in a day's work

And that's it! Payment will go here later.

Things I'm Thinking About Adding

In rough order of importance to me:

  • Start a bank of missions with success/fail consequences
  • How much do you need to pay your NPCs? Is that based on level?
  • Look at implementing some kind of equipment system, where you can stack your team with magic items to give them a better chance, but risk their loss if they fail
  • Explore splitting missions into categories as in Lords of Waterdeep, with a bonus based on your guilds' speciality
  • Look at making this in my own custom calculator rather than in Desmos - Feel free to message if you can help with this
  • Look at reputation systems - How do you quantify your brand awareness in a given region? What happens when you gain a lot of good reputation points?
  • Explore putting in some kind of quirk system as in Darkest Dungeon, whether on an RP level or a mechanical level
  • Explore changing the maths so that some missions inherently emphasise a mixed result or a critical result

Previous Versions:

Changes Since V0.3:

  • Added section on experience.

Changes Since V0.2:

  • m factor now uses one big logarithm, previously if one factor in m was negative, then increasing another factor would only make m more negative, leading to your odds of success getting worse when adding more people, if you're underleveled
  • Tidied up a bit, strength factors, steepnesses and offsets are now more clearly defined and given their own sliders, most aren't used currently but a DM using it might like to use them

Contact & Credit

You can message any feedback or ideas to u/Capsandnumbers on reddit. If you'd like to be kept updated on this, you can message me your email address and I'll send you updates as they occur.


No need to go out of your way to credit me, but please mention my name if someone asks who thought of this! Up to you whether you keep my name on the calculator.


If you really like this and want to hand me some cash for it, here is a Ko-Fi account.