Balthazar - Tomb of Annihilationhttps://blog.balthazar-rouberol.com/2021-10-21T00:00:00+02:00To the Underdark and back2021-10-21T00:00:00+02:002021-10-21T00:00:00+02:00Balthazar Rouberoltag:blog.balthazar-rouberol.com,2021-10-21:/to-the-underdark-and-back<p>I've recently designed a 2 session long (6h) detour into the Underdark, that would feed into one of my player's character's backstory. The goal was to allow him to meet his long-disappeared father, while introducing both the players and the characters to the strange and dangerous land that is the Underdark.</p><p>I've recently designed a 2 session long (6h) detour into the Underdark, that would feed into one of my player's character's backstory. The goal was to allow her to meet her long-disappeared father, while introducing both the players and the characters to the strange and dangerous land that is the Underdark.</p>
<p>The way I prepared these sessions was an interesting process. I wanted these sessions to be mostly focused on exploration and roleplay, with a single (intense) fight, as well as a puzzle. I tried to design a sandboxed environement with enough lore and backstory to make sure the players enjoy themselves and have a reason to interact with the NPCs. I wanted them to care and have the necessary space and freedom to express themselves.</p>
<p>Following are my session design notes, that lasted me 2 whole sessions. These were as much a way to create the world as reminders about key elements or creature capabilities that I should remember mid-fight. They ended up being quite short, because I tried really hard to paint a picture, and prepare some colorful moments, but not to anticipate my player's reactions. <em>They</em> mostly filled the gaps and brought life to that setting.</p>
<p><em><a id=lang-switcher>Click here to switch to the <span id=lang-switcher-flag>🇫🇷</span> version.</a></em></p>
<p><picture>
<source srcset="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/underdark/en/dark/1.png" media="(prefers-color-scheme: dark)">
<img alt="" decoding="async" loading="lazy" src="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/underdark/en/light/1.png">
</picture>
<picture>
<source srcset="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/underdark/en/dark/2.png" media="(prefers-color-scheme: dark)">
<img alt="" decoding="async" loading="lazy" src="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/underdark/en/light/2.png">
</picture>
<picture>
<source srcset="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/underdark/en/dark/3.png" media="(prefers-color-scheme: dark)">
<img alt="" decoding="async" loading="lazy" src="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/underdark/en/light/3.png">
</picture>
<picture>
<source srcset="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/underdark/en/dark/4.png" media="(prefers-color-scheme: dark)">
<img alt="" decoding="async" loading="lazy" src="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/underdark/en/light/4.png">
</picture>
<picture>
<source srcset="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/underdark/en/dark/5.png" media="(prefers-color-scheme: dark)">
<img alt="" decoding="async" loading="lazy" src="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/underdark/en/light/5.png">
</picture></p>
<script>
const langSwitcher = document.querySelector('#lang-switcher');
const flag = document.querySelector('#lang-switcher-flag');
const pictures = document.getElementsByTagName("picture");
var currentLang = "en";
function toggleLangInUrl(url, currentLang) {
if (currentLang == "fr") {
return url.replace("/fr/", "/en/");
} else {
return url.replace("/en/", "/fr/");
}
}
function toggleCurrentLang(currentLang) {
if (currentLang == "fr") {
return "en";
}
return "fr";
}
langSwitcher.addEventListener('click', event => {
for (i=0; i<pictures.length; i++) {
pic = pictures[i];
source = pic.getElementsByTagName("source")[0];
img = pic.getElementsByTagName("img")[0];
source.srcset = toggleLangInUrl(source.srcset, currentLang);
img.src = toggleLangInUrl(img.src, currentLang)
}
if (currentLang == "en") {
flag.textContent = "🇬🇧";
} else {
flag.textContent = "🇫🇷";
}
currentLang = toggleCurrentLang(currentLang);
});
</script>Running the Port Nyanzaru Dinosaur Race2021-04-10T00:00:00+02:002021-04-10T00:00:00+02:00Balthazar Rouberoltag:blog.balthazar-rouberol.com,2021-04-10:/running-the-port-nyanzaru-dinosaur-race<p>When I was preparing for Port Nyanzaru, in <a href="https://dnd.wizards.com/products/tabletop-games/rpg-products/tomb-annihilation">Tomb of Annihilation</a>, I started reading what other Dungeons Masters had to say about the city. A lot of them would mention that the dinosaur race was a must-do, and that if done properly, it could really be a high point in the start of the adventure. The problem was, I felt that the official rules regarding this race were, well, underwhelming, to say the least. Each player rolls a dice, gets some points or not, repeatedly until the end of the race. If that race was going to be something to remember, I felt that I needed to spice it up a bit.</p><p>When I was preparing for Port Nyanzaru, in <a href="https://dnd.wizards.com/products/tabletop-games/rpg-products/tomb-annihilation">Tomb of Annihilation</a>, I started reading what other Dungeons Masters had to say about the city. A lot of them would mention that the dinosaur race was a must-do, and that if done properly, it could really be a high point in the start of the adventure. The problem was, I felt that the official rules regarding this race were, well, underwhelming, to say the least. Each player rolls a dice, gets some points or not, repeatedly until the end of the race. If that race was going to be something to remember, I felt that I needed to spice it up a bit.</p>
<p>The way I designed the race was as a mix between the official rules, the Game of the Goose and Mario Kart. You win if you are the first to complete 2 full laps around the city. Each lap is made of 48 squares, and starts/finishes at the Coliseum, marked with an X.</p>
<p><img alt="board" decoding="async" loading="lazy" src="https://balthazar-rouberol-blog.s3.eu-west-3.amazonaws.com/nyanzaru-race/nyanzaru-race.webp"></p>
<p>The players roll initiative to determine the order in which they'll play. We however consider that they all move at the same time, meaning that if 2 dinosaurs cross the finish line during the same round, they'll be considered ex aequo.</p>
<p>A player's turn goes as follows:</p>
<ul>
<li>the jockey rolls an animal handling check against the dinosaur's DC to see if they can control it<ul>
<li>if successful, the dinosaur moves using its high speed dice</li>
<li>if unsuccessful, the dinosaur moves its low speed dice. The jockey could however choose to hit its mount with its whip to coerce it into running faster (using its high speed dice).<ul>
<li>The dinosaur needs to make a successful CON DD10 check for that.</li>
<li>If unsuccessful, it moves at half speed for the rest of the turn.</li>
<li>For the more aggressive dinosaurs (the ones marked with an asterisk), if the CON check failed by more than 5 points, it stops moving for 2 rounds, in protest.</li>
</ul>
</li>
</ul>
</li>
<li>If a dinosaur moves through or stops on a red square (on a bridge), it could attempt to trip another dinosaur located on the same square.<ul>
<li>If the other dinosaur fails a DD 10 DEX check, it's considered prone for a turn.</li>
</ul>
</li>
<li>If a dinosaur stops (or <em>chooses</em> to stop) on a blue square, the jockey can decide to pick up some loot box. These boxes can have positive or negative effects, either instantaneous or to possibly be used later, anytime during the player's turn (think Mario Kart loot boxes).</li>
</ul>
<p>I've kept the same dinosaur stats as given in the book, and used the official <a href="https://5e.tools/bestiary.html#velociraptor_vgm">stats block</a> for the Velociraptor.</p>
<table>
<thead>
<tr>
<th>Dinosaur</th>
<th>Race</th>
<th>Jockey <abbr title="Wisdom">WIS</abbr></th>
<th>Low speed dice</th>
<th>High speed dice</th>
<th>Animal Handling DC</th>
<th><abbr title="Constitution">CON</abbr></th>
<th><abbr title="Dexterity">DEX</abbr></th>
</tr>
</thead>
<tbody>
<tr>
<td>Un Tej et l'Addition</td>
<td>Triceratops</td>
<td>14(+2)</td>
<td>1d6</td>
<td>1d4+6</td>
<td>14</td>
<td>15(+2)</td>
<td>9(-1)</td>
</tr>
<tr>
<td>Aubrion du Gers</td>
<td>Hadrosaurus</td>
<td>12(+1)</td>
<td>1d6</td>
<td>1d2+6</td>
<td>10</td>
<td>13(+1)</td>
<td>10(0)</td>
</tr>
<tr>
<td>Mambo Mambo King of Tango</td>
<td>Tyrannosaurus</td>
<td>17(+3)</td>
<td>1d6</td>
<td>1d6+6</td>
<td>18*</td>
<td>17(+3)</td>
<td>10(0)</td>
</tr>
<tr>
<td>Brigadier Gérard</td>
<td>Dimetrodon</td>
<td>13(+1)</td>
<td>1d4</td>
<td>1d4+4</td>
<td>8</td>
<td>15(+2)</td>
<td>12(+1)</td>
</tr>
<tr>
<td>Fanfreluche</td>
<td>Allosaurus</td>
<td>16(+2)</td>
<td>1d6</td>
<td>1d4+6</td>
<td>16*</td>
<td>15(+2)</td>
<td>13(+1)</td>
</tr>
<tr>
<td>Pourquoi il pleure?</td>
<td>Deinonychus</td>
<td>17(+3)</td>
<td>1d6</td>
<td>1d2+6</td>
<td>12*</td>
<td>14(+2)</td>
<td>15(+2)</td>
</tr>
<tr>
<td>Excelsior VII</td>
<td>Ankylosaurus</td>
<td>16(+2)</td>
<td>1d4</td>
<td>1d6+4</td>
<td>13</td>
<td>16(+2)</td>
<td>11(+0)</td>
</tr>
<tr>
<td>Irène</td>
<td>Velociraptor</td>
<td>15(+2)</td>
<td>1d8</td>
<td>1d2+8</td>
<td>12</td>
<td>13(+1)</td>
<td>14(+2)</td>
</tr>
</tbody>
</table>
<p>Here are the loot boxes that I came up with.</p>
<table>
<thead>
<tr>
<th>Effect</th>
<th>Instantaneous?</th>
</tr>
</thead>
<tbody>
<tr>
<td>An insect swarm scares off your mount. Your next move will use your low speed dice.</td>
<td>Yes</td>
</tr>
<tr>
<td>You find a juicy spider. When given to your mount, it will run using its high speed dice.</td>
<td>No</td>
</tr>
<tr>
<td>You injure yourself on an hallucinogenic vine. Your next animal handling check will be performed at a disadvantage.</td>
<td>Yes</td>
</tr>
<tr>
<td>A reflex potion, when consumed, will give you an advantage at the next DEX check.</td>
<td>No</td>
</tr>
<tr>
<td>This net will allow you to immobilize an adversary located on the same square than you during a whole turn if they fail a DEX check DC 12.</td>
<td>No</td>
</tr>
<tr>
<td>This blessing potion will allow you to add 1d4 to your next skill check or saving throw.</td>
<td>No</td>
</tr>
<tr>
<td>These beads allow you to trip all dinosaurs located on the same square than you or the square before you. A dinosaur trips if it fails a DEX check DC 13. In case of failure, its speed is divided by 2 during its next turn.</td>
<td>No</td>
</tr>
<tr>
<td>A blinding bomb explodes in your face. If you fail a WIS saving throw DC 13, your next 2 animal handling checks will be performed at a disadvantage.</td>
<td>Yes</td>
</tr>
<tr>
<td>An appetizing chicken heart will allow you to relaunch your speed dice, after consumption.</td>
<td>No</td>
</tr>
<tr>
<td>You get teleported on the same square than the penultimate dinosaur.</td>
<td>Yes</td>
</tr>
</tbody>
</table>
<p>Each player had to pay 20 gold to enter the race. The first finisher gets 100 gold, the second one gets 50 gold and the third one gets 20 gold. The players are obviously free to bet on anything they like, and the DM is responsible for giving them appropriate odds.</p>
<p>I hope these rules will help you run a fun race, or at least give you ideas to create your own set of rules! Feel free to tell me what worked and what didn't if you ran with these!</p>
<div class="Note">
<p>For those of you using Foundry, Steve Vlaminck has created a <a href="https://gitlab.com/mikedave/foundryvtt-macros/-/tree/master/dino-racing">plugin</a> implementing those very rules!</p>
</div>