Some digital games (assume I'm talking only about those for the rest of this post) with "board game / pen & paper" aesthetics represent die rolls by actually making rigid body physics objects and simulating them tumbling around from an initial (possibly player input determined, possibly not) transform + impulse, and then reading the result for "which face of this object is facing directly up?" to get the outcome. Other games more conventionally pre-calculate the result of the roll in code, and then play a canned animation of the die coming up with that value.
For the latter - at Irrational we called this "emulated" in contrast to the former "simulated", which I assume came from the Looking Glass lexicon - it's very easy to transparently apply any of the usual PnP / board game bonuses and penalties that your mechanics might feature to the result - eg a stat boost turning a straight D6 roll(1, 6) into a roll(1+bonus, 6) or roll() + 1, etc. The result is calculated instantly in code, and the appropriate canned visual is displayed to the player to give them the feeling of having just made the roll. Standard stuff.
What I'm wondering about is how you do this for the former case - for simulated die rolls where the result really is an emergent outcome of the physics sim. If you want to add a +1 bonus of any kind, does that put you back into predetermining the result territory, and faking that it was a real simulated roll for the player? Or do you actually add extra weight to the sides of the die that will produce the intended outcomes? Or do you run a bunch of simulations invisibly behind the scenes in a single frame / spread over a few frames until you get the result you want, and then play that for the player? Or do you somehow calculate what starting transforms and impulses for the die will or won't produce the intended result? And how do you handle any of those if player input is affecting the dice as the roll starts?
This isn't for an actual game I'm working on or anything, it's just a question that stuck in my brain because it didn't seem to have an obvious answer. Would love to hear about it if anyone has tackled this particular problem before!