Advanced Skill Stuff

I’m looking to make something that has some different approaches to skills than the default. I have two questions in that regard:

  • Is there some way to hide a skill entirely? Like not just hidden at 0, hidden at all values? Trying to figure out the best way to add an incremental counter that the player doesn’t see.
  • Is there a way to add/subtract skill values? Like if I wanted to roll something that’s Skill A + Skill B or Skill A - Skill B, for example.

Not really, the option is only to hide them until level up. I could add an extra option to hide them until a script does something specific to unlock it.

I don’t think so at the moment, the check is being tested against your skill level. Could add options in the future to do things like that, I’m not sure how though. It’s similar to what I wanted to do with adding optional modifiers to skill checks.

One hacky way to do it for now would be to dynamically adjust the difficulty of your skill checks based on the skill level of the other skill, so every time you do a skill check, instead of just typing the difficulty you use that function to calculate a modified difficulty.

For example, say each skill gives you +2 to rolls and you want a skill check using skillA and skillB:

calculate_combined_difficulty skill_id base_difficulty skill_multiplier:
  // Base generic function to calculate a skill check taking into account an extra skill level multiplier
  var result (sub $base_difficulty (* $multiplier (get_level $skill_id)))
  return $result

combined_difficulty skill_id base_difficulty:
  // Shortcut version to use the same multiplier every time
  var result (run calculate_combined_difficulty $skill_id $base_difficulty 2
  return $result

my_special_skillcheck difficulty:
  // Even more shortcut version if you always use the same skill
  var result (run combined_difficulty skillB $difficulty)
  return $result

test_skillcheck:
  choice:
  "Let's do a thing"
  roll skillCheckId skillA (run my_special_skillcheck 6) "Test for the skill check":
    success:
      "Success"
    failure:
      "Failure

Something like that

2 Likes

Gotcha. The first part was less necessary, but will be fine. I might be able to get where I want it with clever CSS.

The difficulty thing is a solid workaround, thanks! Makes a ton of sense that would work if that’s the main input difference.

Is there a way to get the actual numerical value from a skill check, or do an arbitrary roll in some other way?

There are passive skill rolls which you can use directly as a function in a condition, they’re mentioned in the docs.

There’s no way to get the numerical value from a roll at the moment though, and some configs for rolls don’t even have a single numerical value result

You can make custom functions to do your own roll system if you need though

1 Like

No worries! I think I’ll just do things a way that doesn’t involve randomization in the exact way I had planned (and honestly, I think it’ll turn out better this way anyway).

1 Like

Yeah, fundamentally if you try to go a bit too far from the set of features that come with the engine you’ll have trouble.
I can add tweaks and features to enable new options, and to some extent you can make plugins to add changes, but the skills system won’t be able to adapt to everything you could imagine (for now anyway).

In the future, a general solution could be to add a way to create custom roll systems where you write your own roll function and can plug that into the system, to have deeper control.

In general though, it’s probably safer to stay reasonably within the constraints of the engine if you want to have a good time with it. Narrat is created to make it very easy to make narrative RPGs of this type with little manual coding, but the tradeoff is that you can’t have as much control as if you were coding a game from scratch in a typical game engine.

1 Like

Yeah, makes perfect sense. Right now my plan is I’m gonna get a little weird with it but probably not too-too far off from something like your RPG examples in the repo. We’ll see though!