How To: Write your own Villain for Wildermyth - Part 1

We call Wildermyth a "mythmaking RPG" because or philosophy is to put as much storytelling power into your hands as possible. Part of that is exposing our tools so that players can craft their own stories inside the game. Right now, we're in the middle of adding a rather large feature to the game, that we call "Villains." It's still a work in progress, but when it's complete, each time you start a new story, you'll select a "villain," which really just means a "main story" for that playthrough.

This means that on top of the regular procedural content, there will be a single story that connects the whole campaign together, that gives it meaning, that ties all the action together and punctuates it with stories and designed fights. (See this previous article for background on the what and why of Villains.)

Sound fun? I'm gonna teach you how to create your own "main story" for Wildermyth. If you can DM a game of Dungeons and Dragons, you can write your own Villain for Wildermyth.

That's our goal. The tools I'm going to show you today are under active development, but they work right now and they're only getting better. Some of this stuff is documented on the wiki, and some needs to be. If you decide to give this a shot, find me on Discord - I'll be thrilled to answer your questions and help however I can.

Ok let's get to it!

How To: Write a Villain in Wildermyth

You'll Need:

  • Wildermyth Beta
  • Java (64 bit) in order to run the dev tools
  • An idea for the story you want to tell!

Step 1: outline a story

Make a quick outline of what you want to happen in your story. We've learned that it's much easier if you have some idea of this upfront!
Wildermyth campaigns take place in a chapter structure, with intervals (years of peace) in between. Start by breaking your story down into a series of chapters, where each chapter has one (or two) big goal for the heroes. Then break it down further, event by event. Try to map out how many events you'll need to write.

For this series, I'll use a very simple 2-chapter story I'm calling "Heart of the Forest". Here's the outline:

Intro Event: a rumor reaches town of strange beasts in the woods. Three friends decide to investigate.
Fight: You find a shrine, and you're attacked by Thrixl. You learn they've been disrupting shrines.
Chapter 1
Goal: Clear all hostile sites to unlock chapter one boss
Fight: A forest guardian is slain, but you kill the thrixl responsible.
Interval ~10 years pass
Omen: the woods are growing wilder and more angry, and the thrixl have returned in greater force. The heartseed has been stolen from the fallen guardian.
Chapter 2
Goal: Track the thrixl to a poisoned stream. Fight: The seed has been corrupted and planted at the source of the stream, poisoning the water. Kill thrixl and corrupted guardians. Victory: Over time the forest heals, yay!

This is a real simple story, but even so for this article we're not going to get into most of it. If you don't have a story in mind, just play along with this one! Once you've made a few comics you'll have a better understanding of what you can do with the medium.

Step 2: create a mod for your work to live in

Villains are intended to work as mods, so let's make a mod to put our files in. Then we can easily share it! Run scratchpad, go to the content Editor,

and click on the mods button in the upper-left corner.

The Mod Config dialog shows you which mods the Editor is loading.

In order to see your content, you need to create a mod and make sure it's selected. So, click New Mod and fill it in with your details.

That will create a folder inside your install directory, like this:

Everything for your villain should live inside here, so that you can give this folder to someone else and they can play. Make sure your mod is selected in the Mod Config dialog, and we should be ready to start!

Step 3: create the campaign

Head over to the Scenarios view by using the editor dropdown or pressing Control+4.

Press the New Campaign Button in the upper left corner.

And fill in the details.

This creates the campaign scenario. The scenario will be accessible from the main menu under New Story. Take a look at the Map Config -- this object defines how the world map is generated. You can mess around with it a bit. We also checked the box to create a villain plot, so one was made for us. We'll take a look at that later.

Step 4: write an event

The introduction to Heart of the Forest needs 3 events. The intro event sets the stage. Then the party scouts a tile and assaults it. The arrive event needs to establish the situation, and the victory event will wrap up the introduction. Writing events isn't the main focus of this post so I'm going to move a bit fast here, and we'll just create the very first one.

From the Effects View (Control+2), press New... button.

This opens up the new event dialog. We gant a generic plot event, and go ahead and name it.

Alright. Press "Create" and take a look at what it made. This can be confusing, because there's a lot going on here. You might want to read up about creating comics on the wiki[], but basically "targets" are individual entities that must be found in order of the event to work, and "outcomes" are what to do when the event happens.

I want the first intro event to have no choices, and just be the three friends deciding to go for a walk in the woods. So I'll delete the choiceTarget and create a new Description outcome, so it looks like this:

Then we can go over to Comics View (Control+1) to write the story.

I'll press New Story Role button to create a leader,

And then make 2 more story roles for greedy and bookish. Then I'll make a quick little intro story like this:

Ok... the comic tool is pretty sophisticated but I'm not going to get into it right now. You can check out the documentation and ask questions on discord. Please write a better story than this one ;-)

But first let's finish up here so we can make it show up in-game! Save all your work! (Control+S)

Step 5: define the plot

Over in Plots View (Control+0), you should be able to find your campaign plot. It will be called C_heartOfTheForest or something and should be listed under your mod. Click on it. There's nothing here yet, so let's add a New Step.

Pick StepC_BeginChapter. Set the chapter to Introduction.

Make one more step, this time a StepC_Event. Add our new plot event to the eventId list. (It's a list in case you need to define several fallback events.) You can search using the suggestions box, and when you have it, it should look like this:

Whoa, some error messages! That's super cool!

The error messages tell us that we need to inject roles in order for the event to work, so let's set that up. In the injectRoles list, click New Entry a couple times. We'll map from town to site, and from party to party. That should look like this:

What's going on here is that Plots keep track of a number of different roles, which can be defined or used in the steps and objectives. You can use those roles to fire events (here is some reference on how events use roles). There is validation to help with this, but the tooling and documentation is still a bit thin here, so for now let me just explain these particular roles.

The town role is defined by the BeginChapter step, because there's a town added to the map in the introduction. Our event calls for a "site," so we map "town" to "site" and that's fine. The party role is from the roster that you'll roll when you start a new story....

Hmmm.... I forgot to set up the roster. Let's go back over to the scenario view, find our scenario, and expand the ScenarioInfo object. This object controls how the new game dialog shows the scenario. Let's define some roster slots. For simplicity I'll start with a greenhorn warrior, greenhorn hunter, and greenhorn mystic, like this:

Then I'll head back to Plots View and add StepC_Victory to the end of our plot.

This is a pretty simple plot. All it does is start the chapter, play a story, and then you win. Let's see if it works. Save your work (Control+S)!

Step 6: test it out

Load up the game and hit New Story.

Super cool! If you're worried about the unlocalized text, we'll get to that in a later article. Right now the tooling is a bit awkward for it, but we'll get it fixed up some day. Roll a party and start the game. This is what I see:

And then Victory, and the credits roll, just like our plot said. Rad!

Step 7: add some gameplay

We'll go just a bit farther today, so that we have a game and not just a tech demo. Back in the content editor, in the Plots View, let's delete the StepC_Victory and instead start chapter 1. Then we'll add some objectives.

Objectives can show up to the player, and they're also how we update things over time, test victory/defeat conditions, etc.. Choose Objective_ClearAllHostileSites. This objective is completed when the player clears all hostile sites (that aren't locked.) You may also want Objective_CampaignDefeat (which ends the game if all the heroes die or all towns or destroyed.) Finally, Objective_CampaignUpkeep manages things like hook quests, RP, and burying fallen heroes.

Just defining an objective doesn't activate it though, that's done in a Step. Use Step_AddObjectives to activate all three objectives after the start of chapter 1. This will start checking the objectives after chapter one is begun. Then add a Step_WaitForObjectives step and specify to wait for Objective_ClearAllHostileSites. This will pause the plot script until all objectives are complete or failed.

Finally, add the StepC_Victory back in. It should look like this:

Step 8: play your story

Save your work and check it out in-game. You should now have a story with an intro, three fights, and one wilderness event, that's backed up by all the regular procedural content. From here, you can add a victory event, embellish the story, or start exploring what else the plots can do!

Next time, we'll add an interval and maybe a custom fight! What would you like to see? Find me on Discord and let me know :-)

Get Wildermyth Beta

Buy Now
On Sale!
25% Off
$20.00 $15.00 USD or more

Leave a comment

Log in with to leave a comment.