Bonuses and The Bonus Editor

schedule 30 min

Prerequisites:

Goals:

  • Understand how to represent a simple number
  • Understand how to represent a number that scales off something
  • Understand how to represent a number based on a die roll
  • Understand how to represent a complicated computation
  • Understand how to create bonuses to specific stats

Bonuses: a core element of most TTRPGs. And TTM is here to make them easy to work with!

If you've been designing Homebrewing content or an entire system, chances are, you've seen an editable number. And when you click on it, you see a dialog for editing bonuses open up — we call this the Bonus Editor, but we use it for a variety of numbers across TTM to maximize the power available to you as a creator.

In short, the Bonus Editor is all about providing an easy way for you, as a creator, to implement concepts that might scale with the stats of characters in your system.

For example, maybe you want to create a bonus that adds a character's Intellect to their Knowledge skills. Or maybe you want to create a bonus that increases by +1 at every odd Character Level. All of these things (and more) can be done from this dialog.

Simple Number

If you're just trying to create a flat number bonus, it's fairly easy — just simple use the "Simple Tab" and specify the number you want it to be!

For example, this bonus is specified to be equal to 2. Of course, negative numbers work here too!

Scaling Bonuses

For bonuses that scale with some sort of field, including entity fields and character derivations, you should go to the second tab — the "Scaling" Tab.

If necessary, you might have to click the "Add Component" Tab. But ultimately, you should see a view like this (with or without parentheses):

In short, to define a scaling bonus on TTM, you can create a simple equation to represent your number and it will automatically compute this number when you use it in session.

For example, let's say you want to represent a bonus that is "Half your Character Level". You can represent it like this:

Notice we are adding 0 to Character Level, divide the result by 2, and then perform some rounding. Then we multiply that result by and add another 0.

Here, the parentheses indicate where we should perform rounding. Depending on the configuration of your Rule System, you may or may not see these parentheses — indicating whether or not results will be rounded.

As another example, let's say we made this bonus more complicated: we want to add +2 for every 3 Character Levels, starting at level 5.

Here, we are dividing our Character Level by 3, then rounding, and finally, multiplying by 2. In other words, at Levels 3, 6, 9, and so on, we add an additional +2. To check our logic, we can think through what the result would be for a few character levels (assuming we use floor rounding):

Character Level (Character Level / 3) (Character Level / 3) x 2
1 0 0
2 0 0
3 1 2
4 1 2
6 2 4
7 2 4

That seems consistent with what we'd expect, so looks like this would work.

Now, let's say we want this bonus to also start at +1. So it would be +1 at levels 1-2, then +3 until level 6, and then +5 and so on.

We can do this easily by adding 1 after we multiply (note: we honor order of operations, so multiplication is done before adding):

Updating our table, we would find this produces the results we expect:

Character Level (Character Level / 3) 1 + (Character Level / 3) x 2
1 0 1
2 0 1
3 1 3
4 1 3
6 2 5
7 2 5

Looking good. Let's say we want to add one final (more complicated) tweak: we want this bonus to be 0 until Level 5. So it would start at +3 at Level 5, then go up to +5 at Level 6, and so on.

To do that, we need to subtract 2 from the character level before we divide.

Why is it 2? It's because we want the stuff inside parentheses to be "0" until Level 5, so that when we multiply by 2, the result is also 0. To do that, we need the rounding to end up with 0, so whatever number we subtract from our character level needs to be less than 3 until level 5 (so that it rounds to 0).

So now our bonus looks like this:

But you might be noticing that makes a negative bonus (a.k.a. a penalty) at Character Level 1. This is a problem we'll fix later in this guide, but for now, let's remove the +1 and talk about dice.

Bonuses With Dice

What if our bonus varied on the result of a die?

Let's continue from our example and try to express: "2d6 for every 3 Character Levels starting at level 5".

Let's start with our previous example: "+2 for every 3 Character Levels starting at Level 5".

To add a die to this, we click the die icon on the right, and notice our UI looks a bit different now:

Specifically, you'll notice one more multiplication added to the end there — a multiplication by "1d1".

All bonuses on TTM, technically, by default, have a die roll involved! We multiply all bonuses by a single hidden 1 sided die roll. Because there's only 1 possible outcome, we assume it's just that — 1.

To change our "+2" to "+2d6", all we have to do is tweak the number of sides on this hidden die (and thus, make it no longer hidden).

This would create our desired bonus of "+2d6 for every 3 Character Levels starting at level 5".

You might notice, we're multiplying by 1d6, and not 2d6. That's because our original number was already multiplied by 2. If that's not intuitive to you, you can always move some things around and get the same outcome:

It's entirely up to you how you want to structure this kind of configuration. In the future, we'll do a more detailed breakdown of all the things you can do with these "Dice Settings", but just remember, the number of dice you specify here will be multiplied by the result of the computation inside both sets of parentheses.

Complex Bonuses

Let's go back to that problem we mentioned: If your character level is 1, this creates a negative 2d6 instead of positive 2d6!

To fix this, we need to go to the "Advanced Tab", which can be a bit intimidating at first:

You will see some familiar things from the previous section here: there's still the basic operands structure we saw before, with options for dice configuration, scaling, and so on.

However, there's a few aspects that build upon the previous knowledge.

Operands

Firstly, it's possible for each component to actually have multiple operands. And for each component, you specify an operation that will be used to combine the operands.

For example, in the example above, we are using a "MAX" operation (based on the dropdown in the top left). That means, if we had more operands, only the highest one would be kept, while all others would be removed from the calculation.

For example, if we had 2 operands: 1 x Strength and 1 x Character Leve, as so:

And our Character Level was 2, but our Strength was 12, then the result would be 12 (our Character Level would be ignored).

Note: if the operand uses dice, like ours above, then the player would have to roll the dice before we decide which operand is "the max value".

In addition to max, TTM also supports a few other operations for combining operands:

  • MIN: Which takes the minimum value instead of the highest
  • SUM: Which adds all the operands together
  • PRODUCT: Which multiplies all the operands together
  • DIVISION: Which divides the first operand by all the operands that follow.

Note: If we have multiple components, then the final bonus will always be computed by adding together the results of each individual component (including the operation it applies to its operands).

Condition Sets

In addition to being able to combine each operand within a component, we can also decide when a component should be entirely ignored via Condition Sets.

As their name implies, Condition Sets are a way to define a set of conditions that must be true for a component to be relevant.

For example, we could create a component with a condition set as so:

In this example, the component (including all of its operands) is ignored unless one's Strength is above 2 and their alignment is "Lawful Good".

We could also change the Condition Set Operation from "AND", which requires all of the conditions to be true, to "OR", which means that if any single condition is true, then that's enough for the component to be considered.

If a component is considered, the output of its component operation (MIN/MAX/SUM/DIVISION/PRODUCT) will be added to the output of all other considered components' outputs. Otherwise, it'll be ignored (as if it didn't exist).

Min/Max Values

Lastly, at the top of each component, we see two fields to configure the min/max value for each component of our bonus:

As their name might imply, these two fields can be used to specify the minimum or maximum value for any bonus calculation.

This is the particular feature we need to solve our problem regarding negative values for level 1 Characters. All we have to do is set our Min Value to 0:

And viola, the end result is a bonus that represents 2d6 for every 3 Character Levels starting at Level 5 (and 0 before that).

In the future, we'll be creating more guides about the advanced bonus editor to show some examples of creating bonuses that intermittently increase, as well as more complicated, but practical examples of bonuses.

Targeted Bonuses

Before we close out this guide, we have to cover one more topic: targeted bonuses.

Sometimes, you'll see a Bonus Editor dialog open that looks a little bit different:

The only difference between a dialog like this and the Bonus Editor dialog we just talked about is that this one is targeted. That is, this specifically is used to denote bonuses or penalties to specific stats in your system. Once we select a target stat/field, we'll see the layout from before.

For example, we could use this to grant a +2 bonus to Strength like so:

Or add your Character Level to your Athletics like so:

Configuring the Targeted Bonuses

There's two subtle features that Targeted Bonuses also have: "Apply As" and "Priority".

"Apply As" is basically the operation you want to use once you've computed the final result of all of the components.

In the examples above, we used "SUM" — indicating that we want all the components to be added to our Athletics.

We could have used "MIN" or "MAX" alternatively, which would indicate that we should replace our Athletics with the highest of Athletics and all of the component results. In the last example, if we used "Apply as MAX" that would mean our Athletics would stay unchanged (if our Athletics is higher than our Character Level) or it would become Character Level (if our Character Level is higher than our Athletics).

Lastly, Priority is used to determine when in the computations this bonus should be applied. Lower values (including negative values) happen before higher values. That is, Priority 1 bonuses are applied before Priority 2, and so on.

For MOST cases, we should not change this value from 0.

However, if you need a complicated sequence of logic, you can use priority to create multi-step operations. In the future, we'll create a guide to show such an example.


Otherwise, that covers the Bonus Editor! If you have any questions, always feel free to reach out to us, but the ideas in this guide apply broadly across TTM and should lay a solid groundwork for anything you might try to build!

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.