Skip to main content

· One min read
Brandon Poole
  1. Use Edge browser
  2. Use the Image Creator app from the sidebar (you might have to customize sidebar to enable it)
  3. Enjoy!

NPC modeled after Ashe from Fire Emblem: Three Houses.

My Bugbear Monk, Pünch, with Strike of the Giants (Fire Strike) with for my new group.

DALL-E 3 even works pretty good with some of the more exotic races. You might just need to feed in more description. For example, it really liked giving bugbears horns until I added goblinoid (maybe the flaming fist made it lean towards infernal-ish attributes).

· 2 min read
Brandon Poole

We moved to London, UK in August for my wife's PhD program. Part of getting settled is to get the essentials: bank, phone, credit card. After putting in the research, I decided I wanted:

  • Starling for bank (mobile bank)
  • EE for phone (traditional phone company)
  • American Express for credit card
    • most UK banks use Mastercard for debit
    • I still have my no Foreign Transaction Fees USA AmEx + Chase cards

Well turns out there's a series of problems here.

  1. We didn't yet have a permanent address, which was needed for the Bank. Most people don't have a long term let when they move, so they don't have a proof of address.
  2. EE, and all major phone providers, do a credit check on you, which requires a UK bank account.
  3. UK credit cards require you to have a UK bank account.

To make matters worse, Starling's app supports international phone numbers for authentication, but this functionality broke on their end after I started the application with my US phone number and wasn't fixed 2 weeks later.

In other words:

  • To get a UK bank account, you need a UK phone number.
  • To get a UK phone number, you need a UK bank account.
  • To get a UK credit card, you need a UK phone bank account.

MVNOs to the Rescue!

Luckily, there happened to be an easy solution to this. Instead of using EE, we signed up for Lebara, a mobile virtual network operator (MVNO) that uses Vodafone's network. Additional perks of this are that it's pay-as-you-go (no contract), significantly cheaper, they don't credit check, and you can order a SIM card from their website. You can also get a SIM card at the airport if you know better (now you do, unlike me).

MVNOs still offer free EU roaming

Post Brexit, all traditional UK mobile no longer give free roaming in the EU; they have a roaming pass you can pay for or "get" (pay) as a perk in your bundle. MVNOs still have free roaming in the EU, so I can travel Europe without paying extra.

We also happened to finish our long term let contract around this time (we were able to do this with USA accounts).

· 15 min read
Brandon Poole

My West Marches-like group is having a DM play week, where the two fulltime DMs get to play characters. As one of the rotational DMs, I wanted to make a special encounter for one of the DMs who plays a lot of League of Legends. Since we're having an upcoming Feywilds extended 3 combo missions at CR 5-6, I suggested we do it during then and planned to make it feature one of the classic League of Legends characters: Shaco. Originally I was going to make him from scratch, but decided to see how well ChatGPT can creature a monster.

Fey version of Shaco

Building Shaco

Curious to see the base conversion, I did a simple:

Make me a D&D 5e creature stat block for Shaco from League of Legends

Shaco, The Demon Jester

Small fiend, chaotic evil

Armor Class: 16 (leather armor)
Hit Points: 65 (10d6 + 30)
Speed: 30 ft.

STR: 10 (+0)
DEX: 18 (+4)
CON: 16 (+3)
INT: 14 (+2)
WIS: 12 (+1)
CHA: 14 (+2)

Skills: Deception +4, Insight +3, Stealth +6

Senses: passive Perception 11
Languages: Infernal, Common

Challenge: 2 (450 XP)

Martial Advantage. Shaco's deceptive abilities allow him to catch his foes off guard, giving him advantage on attack rolls against creatures he has surprised.

Deceptive Strike. Shaco's first strike against a creature within 5 feet of him is especially deadly, dealing an additional 10 (3d6) damage.

Box Trick. Shaco can place a decoy of himself as an action. The decoy has 1 hit point and lasts for 1 minute, or until it takes any damage. Creatures within 10 feet of the decoy must succeed on a Wisdom (Perception) check against Shaco's Dexterity (Stealth) check or be frightened for 1 minute.

Multiattack. Shaco can use his action to attack twice.

Action:

Dagger. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 6 (1d4 + 4) piercing damage.
Javelin. Melee or Ranged Weapon Attack: +6 to hit, reach 5 ft. or range 30/120 ft., one target. Hit: 6 (1d6 + 4) piercing damage.

Fiend made sense since his title it "Demon Jester", though oddly it gave him Infernal. Very interesting was the Box Trick being a contested Wisdom (Perception) vs Dexterity (Stealth). Being a big fan of atypical checks, for example Intelligence (Athletics) or Strength (Medicine), I was all aboard this idea.

Now to scale it to CR 6 and make it for the Feywilds.

Make a CR 6 version that's a Medium sized Fey

Shaco, The Demon Jester

Medium fey, chaotic evil

Armor Class: 16 (leather armor)
Hit Points: 90 (12d8 + 36)
Speed: 30 ft.

STR: 12 (+1)
DEX: 18 (+4)
CON: 16 (+3)
INT: 14 (+2)
WIS: 14 (+2)
CHA: 16 (+3)

Skills: Deception +5, Insight +4, Stealth +6

Senses: passive Perception 12
Languages: Sylvan, Common

Challenge: 6 (2,300 XP)

Martial Advantage. Shaco's deceptive abilities allow him to catch his foes off guard, giving him advantage on attack rolls against creatures he has surprised.

Deceptive Strike. Shaco's first strike against a creature within 5 feet of him is especially deadly, dealing an additional 10 (3d6) damage.

Box Trick. Shaco can place a decoy of himself as an action. The decoy has 5 hit points and lasts for 1 minute, or until it takes any damage. Creatures within 10 feet of the decoy must succeed on a Wisdom (Perception) check against Shaco's Dexterity (Stealth) check or be frightened for 1 minute.

Invisibility. As a bonus action, Shaco can become invisible until the end of his next turn or until he attacks.

Multiattack. Shaco can use his action to attack twice.

Action:

Dagger. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 6 (1d4 + 4) piercing damage.
Javelin. Melee or Ranged Weapon Attack: +6 to hit, reach 5 ft. or range 30/120 ft., one target. Hit: 6 (1d6 + 4) piercing damage.

I like how it added an additional ability, his invisibility. Deceptive strike didn't scale. Dexterity stayed the same, but his size went from Small to Medium so maybe this explained it. Being now a Fey, Infernal switched to Sylvan.

Now, I can hypothesis all day why it make certain decisions, but best just to ask it.

Tell me how you decided the abilities

When creating the abilities for this version of Shaco, I took into account his chaotic evil alignment and his role as a trickster in the popular video game "League of Legends".

"Martial Advantage" is based on Shaco's deceptive abilities, which in-game allow him to ambush and surprise his foes, giving him an advantage in combat.

"Deceptive Strike" represents Shaco's first strike being especially deadly, as in the game his abilities often deal bonus damage on his first attack.

"Box Trick" is based on Shaco's signature ability in the game, where he places a box that can be triggered to deal damage and fear enemies. In this version, the decoy has a similar effect, frightening creatures that come too close to it.

"Invisibility" is included to represent Shaco's ability to vanish in the game and reappear to ambush his enemies.

"Multiattack" allows Shaco to attack twice in a single turn, reflecting his fast and deadly combat style.

The stats and numbers were balanced to match a CR 6 creature, taking into account its hit points, armor class, skills, and damage output.

All these seemed valid.

I was still curious why the original version was small, having forgotten the lore that Shaco was an animated puppet

Why was the original version Small size?

The original version of Shaco was made Small size to match his design in the "League of Legends" video game, where he is portrayed as a small, mischievous character. Additionally, the Small size can add a unique challenge for players, as small creatures typically have lower hit points and are harder to hit in combat, but also have an easier time hiding and maneuvering in tight spaces. Making Shaco Small size also helps maintain the tricky and deceptive nature of the character.

I ended up reverting him back to small given this explanation and looking it up. His defenses stayed the same despite this. In other words, while it said smaller have less HP but harder to hit (more AC or Dex), this wasn't reflected in the changes. Several of his stats decreased though, which I was expecting to only be Strength and possibly Constitution. In other words, he became strictly worse.

STR: 8 (-1)
DEX: 18 (+4)
CON: 16 (+3)
INT: 14 (+2)
WIS: 12 (+1)
CHA: 14 (+2)

Those of you familiar with Shaco might notice that this one only does physical damage, whereas Shaco in League of Legends does hybrid damage, both physical and ability (i.e. magical). Knowing the bendable will of ChatGPT, I told it to fix the error.

Shaco does both physical and ability damage in League of Legends. Why do none of his abilities you generated do a type of magical damage?

I apologize for that oversight. Shaco is indeed capable of both physical and ability damage in League of Legends, but in D&D 5e, characters and creatures have the capability to deal magical damage through the use of spells or magical abilities. To represent this aspect of Shaco's abilities in D&D, you could add magical damage to some of his attacks.

Here is an updated version of the stat block that includes magical damage:

...

Deceptive Strike. Shaco's first strike against a creature within 5 ft. of him is especially deadly, dealing an additional 10 (3d6) magical damage.

...

magical damage? That's not right.

"magical damage" isn't a type of damage in D&D 5e

I apologize for that error. In D&D 5e, there is no specific type of damage referred to as "magical damage." However, abilities that deal damage can be considered magical in nature if they are the result of a spell or a supernatural ability.

Here's an updated version of the stat block that takes into account the fact that there is no specific type of damage referred to as "magical damage" in D&D 5e:

...

Deceptive Strike. Shaco's first strike against a creature within 5 ft. of him is especially deadly, dealing an additional 10 (3d6) damage of a type determined by the DM (such as psychic or force damage).

...

Psychic or force being the closest to pure magic damage is a good guess, but it being wishy-washy between letting DM pick the type isn't useful when I have enough to think about. I decided to not overcomplicate the mission and just stick to psychical damage.

Now, I needed a mission posting, but why write it myself?

write a quest mission description to kill Shaco.

The Demon Jester, Shaco, has been terrorizing the land and bringing chaos wherever he goes. Your mission is to track down and defeat Shaco to restore order and peace.

Here is a quest description to accomplish this task:

Quest: The Demon's Playtime

Objective: Eliminate Shaco, the chaos-loving fey known as the Demon Jester.

Background: Shaco has been causing trouble across the land, leaving a trail of destruction in his wake. Villages have been burned to the ground, crops have been ruined, and countless lives have been lost at his hands. The local authorities are offering a hefty reward for whoever can bring Shaco to justice.

Difficulty: CR 6

Location: Shaco's whereabouts are unknown, but rumors suggest that he has been seen lurking in the forests and caves near the outskirts of town.

Equipment: You will need to bring sturdy weapons, potions of healing, and any other supplies that you think might come in handy during your journey.

Completion: When you have defeated Shaco, return to the local authorities to collect your reward and receive recognition for your bravery.

Hints:

Shaco is a master of deception and trickery, so be wary of any traps or decoys he may have set.
He is highly agile and uses his speed to his advantage, so be prepared for a fast-paced battle.
Shaco is known to become invisible, so be sure to keep your senses sharp and be ready for an attack at any moment.

Quest name was good, but felt it could be better, more about Shaco being maniacal, less about being a jester/puppet.

Good Quest names. Can you list 10 alternatives as well so I can pick my favorite?

Sure, here are ten alternative quest names for the mission to defeat Shaco:

1. The Demon's Demise
2. Trickster's End
3. Jester's Justice
4. Shaco's Showdown
5. The Fey Fiend
6. The Chaotic Curse
7. The Mad Mage's Downfall
8. The Playful Predator
9. The Deceptive Death
10. The Final Joke.

I hope these suggestions help you choose the perfect quest name for your mission!

7 was funny considering he doesn't do magic damage. 10 made me think of The Last Laugh from Batman. Actually I was thinking of The Killing Joke, the Last Laugh was the signature growth weapon I gave my party in my 1-20 campaign, and got the name wrong, but outcome is the same. At this point I don't actually care what ChatGPT thinks, but wanted to be humored.

I like The Final Joke, but going with The Last Laugh which it made me think of for the Batman reference.

"The Last Laugh" is a great choice! It captures the humor and mischief that Shaco is known for while also emphasizing the idea that this is the end of his reign of chaos.

Building the Encounter

I already planned to make it a 2 roomer, fight two Hell Hounds reflavored as Fey Hounds in a forest clearing and then a cave with Shaco and probably another hound. This was because before I thought of the Shaco idea, I wanted the bad guy to be training beasts for the rebel forces.

Adding environment variables to encounters really brings it to life, so I again outsourced the seeds of the creative process.

This will take place in the Feywild in a forest with the Shaco fight in a cave. What are some good nature obstacles to include in a battlemap for this fight?

Here are some nature obstacles that could be included in a battlemap for a fight against Shaco in a forest in the Feywild:

Tree roots: The twisting roots of the trees in the forest could create obstacles for the players, tripping them up as they attempt to fight Shaco.

Thorn bushes: Thorn bushes could be used to block line of sight or slow down the players as they attempt to make their way through the forest to Shaco's lair.

Streams: Streams or rivers could create obstacles that the players must cross or find a way around, slowing them down as they make their way to Shaco's lair.

Mushrooms: Large mushrooms could be used to create cover for Shaco as he fights the players, or as obstacles that the players must navigate around.

Cliff edges: Cliff edges could create drop-off points that the players must be careful not to fall from as they make their way to Shaco's lair.

Crevasses: Crevasses or chasms in the cave could create obstacles that the players must navigate around or find a way across as they make their way to Shaco's lair.

Boulders: Boulders could be used to create obstacles that the players must navigate around or find a way to move as they make their way to Shaco's lair.

...

Large mushrooms and boulders sparked my imagination, so I made the first fight against the 2 fey hounds involved large (5x5 and 10x10) mushrooms in addition to trees and went a step further and made it so they exploded is in contract with fire (most likely from the hounds' Fire Breath), designing it as so:

If the mushroom takes fire damage (Fey Hound Fire Breath), they explode; everyone within 10 feet makes a CON 13 saving throw taking 4d6 poison damage on a failure or half damage on a successful saving throw.

The boulders I converted to a boulder trap at the cave entrance, playing off my love of traps and Shaco's tricky nature. Being a deceptive character, I added additional layers to the trap, making it always be able to trigger unless the directly disable the trap. I took it a step further and utilized Shaco's invisibility to make it even more strategically deadly in my design.

cave entrance rigged with tripwires

Following the tracks, the party finds the entrance to a cave. Have them make Wisdom Perception checks:
• DC 14 notice the tripwire trap
• DC 16 notice precarious boulders
• DC 18 notice the tripwire isn’t connect to the boulders
If they party doesn’t notice the tripwire, roll Dex saves for each person passing, DC 14. If they fail, they fall prone. When the tripwire triggers, everyone within 10 feet roll a DC 14 Dex saving throw as an explosion triggers, taking 6d6 fire damage on a failure or half on a success. Additionally, the boulder trap triggers; everyone within 20 feet roll a DC 15 Dex saving throw, dealing 5d6 bludgeoning on a failure or half on a success. Anyone who is prone and takes damage from the boulder trap is crushed by a boulder, taking an additional 3d6 bludgeoning and is restrained. To escape requires DC 15 Strength Check. A party member can use an Action to make the check to shove the boulder aside; if they have Powerful Build feature (Goliath, Half-Orc, etc.) they can make it at advantage.
Shaco is invisible and hiding behind the boulder trap. He will trigger it from above when most advantageous.
On the trap triggering, have everyone roll initiative as they hear resounding from inside the cave.

Making the encounter slightly easier, I reduced the cave's fey hound to 20 hp since he was being cruelly trained by the malicious Shaco, which also means the hound won't care if Shaco happens to be in its cone of Fire Breath. But Shaco is still a sneaky, sinister cookie.

Secretly include Shaco on initiative and have him approach invisible and attack the weakest looking member (low hp from trap else low AC).

But again, I'm not out to murder the players.

The Fey Hound will arrive on turn 2 as it’s approaching cautiously the noise (Dodge Action), though if attacked it’ll charge. Shaco will also arrive invisible behind a party member on turn 2 as he has to make his way down the cliffside. (Gives party time to recover). If most of the party got real messed up from the trap, give them an additional round before enemies arrive if they’re actively recovering but are still in the process when relevant during round 2 (DM mercy fiat).

While Shaco could easily flee with his invisibility, having an encounter the players can't possibly win is bad encounter design, and, in my opinion, even worse if it's not that they die, but the monster can just strike and run away without any possibility to stop it. This actually happened 2 weeks ago in a different campaign I'm playing in with a Green Slaad and left a bad taste in my mouth. Therefore I played off Shaco's homicidal clown nature.

Shaco is insane and bloodthirsty and won’t flee. He’ll go invisible and reposition as needed, but will attack by the next turn.

I'm looking forward to running this encounter and will post an update if there's an interesting takeaways.

· One min read
Brandon Poole

If you look at the #lego blog posts, you'll see GIFs at the bottom of the different stages of the build. While I'm sure there's tools on the internet for this, that's no fun compared to writing your own. These were achieved with the following Python script:

import imageio
import imageio.v3 as iio
from skimage.transform import resize
import os

# Set the directory containing the JPG files. Yes, I'm on Windows.
input_dir = Path(r"C:\Users\path\to\LEGO AT-AT")

# Set the output GIF file path
output_path = Path(r"C:\Users\path\to\build.gif")

# Get a list of all JPG files in the input directory.
jpg_files = [f for f in os.listdir(input_dir) if f.endswith('.jpg')]

# Create an empty list to hold the images
images = []

# Loop through the JPG files and add them to the images list
for jpg_file in jpg_files:
file_path = os.path.join(input_dir, jpg_file)
image = iio.imread(file_path)
# Reduce size from Pxiel phone's 4k to manageable size for personal website.
image = resize(image, (image.shape[0]*0.25, image.shape[1]*0.25), anti_aliasing=True)
image = (image*255).astype(np.uint8)
images.append(image)

# Save the images as a GIF
imageio.mimsave(output_path, images, duration=.75, loop=0)

· 2 min read
Brandon Poole

One of my favorite Star Wars vehicles and the LEGO set I always wanted growing up was the AT-AT from Star Wars, so when the LEGO® Star Wars™ AT-AT™ USC #75313 was announced on November 2021, I set alarm to order it at the moment it released.

I also ordered the Defense of Hoth #40557 and two of the Snowtrooper Battle Pack #75320 sets to build a small battlefield near it. Originally I planned to buy a bunch of the snowtropper battle packs to fill up the transport seats inside the AT-AT, but then I realized after the first two that I'm probably never going to have that visible so it'd be a waste. At the time there wasn't a white baseplate in release, but white baseplate #11026 came out by the time I got around to building it, so alls well that ends well.

My only complaints about this behemoth is the side door doesn't nicely stay open at 90 degrees and the command room can't stay open, though you can easily remove these covers so a better view.

LEGO AT-AT overlooking battle between Snowtroopers and Rebels

LEGO AT-AT build gif

· One min read
Brandon Poole

When Bowser, one of my favorite Mario characters, was announced as an amazing LEGO build in July 2022, I hands down knew I had to have it. I just finished building it today and need to find a home for him, luckily he doesn't require the base so I'm probably going to put him on the TV lamp shelves that aren't wide enough for it.

While I love the King Koopa, the UCS AT-AT still takes the top place in my LEGO collection.

LEGO Bowser LEGO Bowser build gif

· One min read
Brandon Poole

Today I launched the migration of my Monday West Marches-like D&D group's Fandom to Docusaurus hosted by GitHub Pages! I did this for a myriad of reasons:

  1. I hate all the extra Fandom platform noise going on
  2. Navigation and discoverability is terrible
  3. I loathe their editor

This was also my first foray GitHub Organizations, which I moved the initial repo under me into so that other members can have ownership as well, as well as future possibility for more repos such as mission notes or hidden DM (role) notes (repo).

Originally I migrated all the existing art from teh old wiki, but I since generated new images for anything that was pulled off the internet with the exception of some of the character art. Now we have a nice crisp site with easy to manage contributions.

I had a lot of fun (too much according to my wife) running Stable Diffusion locally and creating art for different sections and characters.

· One min read
Brandon Poole

Recently at LinkedIn we adopted GitHub Pages for documentation using Docusaurus. I've been a a big fan of it and am converting my personal website from a Rust WASM application to something a lot simplier to maintain.