Wednesday, December 11, 2019

Roadmap to 1.0


Since we released we've been getting a lot of questions about various features, bugs, and additions to the game. We've created a roadmap so you can see what we plan to add for our 1.0 release. 

This does not include bugfixes or small improvements that we will continue to work in as we go along. It's also, to be honest, just our best guess, in terms of exact features and also in terms of timing. So expect it to change over time as we learn more.

Wildermyth Roadmap to 1.0


Note: this will be updating as time passes! But as of December 2019, this is where we are:

Imminent Work

Happening over the next couple months
  • Deepist Campaign
  • Finish opportunity quests
  • Refine/update old & unsatisfying events
  • "Legacy Hero" mode for generic campaigns
  • Develop tech for translations
  • Some modding improvements
  • Deepist ability rework
  • Follow-ups for TurtleGuardian (mortal choice + tidings)
  • UI art reskin
  • Overland map UI cleanup
  • Advance transformations during intervals
  • Bigger fonts for high DPI monitors

A Bit Later On

Happening through spring-ish
  • Thrixl campaign
  • Intro/capstone/finale events for generic campaigns
  • "Undo" system in-mission
  • Upgrade graphics library
  • Borderless window
  • Cross-class abilities rework
  • XP more visible
  • Back button in comic panels
  • Better resource-get comic panels
  • Revisit incursion/defense comic art
  • Customize pronouns & orientation for heroes
  • Customize facial hair
  • Persist family relationships across legacies

Eventually... Before 1.0 Launch

Happening over the summer

  • Drauven campaign
  • More combat maps
  • Performance improvements
  • Drauven ability rework
  • Legacy Improvements (sorting, using as NPCs, weapon unlocks)
  • Ironman mode
  • Controller Support
  • Steam Achievements
  • Major modding improvements

Ongoing

Sprinkled in between the other bigger chunks of work
  • More events: parent/child
  • More events: lost lovers/rivals/parents/children
  • More events: follow-ups for heroes w/transformations
  • More events: player determines a relationship
  • More events: arriveAtSites & wildernessEvents
  • More music (for boss fights in particular)
  • More sound effects
  • As always, balance and bugfixes


The living version of the roadmap is here.

Wednesday, November 13, 2019

Wildermyth is now on Steam Early Access!


Get Wildermyth on Steam here!

After each chapter in Wildermyth, the map grows and opens up new lands for your heroes to explore. And after years of development and months of beta, we're finally ready to let the heroes loose on Steam!

Huge thanks to our Discord and all of the beta players who have helped bang this game into shape over the last year. Hearing the crazy stories about the characters you've made and your experiences in the Yondering Lands—it's what this whole endeavor is all about. <3

* * *

And if you're actually on the blog here, you get the honor of listening to our artist spout off a bit longer. Imagine her sitting in an armchair next to the window, maybe swirling a glass of wine and gesticulating a lot.

(We don't have an armchair in the office. And she doesn't have any wine right now. But she does gesticulate a lot.) 

For our twitter, I was doing a series of "Before & After" images, showing the first round of things like heroes, environments, & comics vs. how they ended up today, near the end of 2019. As I sifted through the blog for "Before" images, two major things struck me:

First, we thought we were really close to release back in like 2015.

"The pace of development is very good right now, and I think I'm well positioned to finish the core feature set in the next 3 months. After that, it will be all about content, polish, and growing our audience." 
Feast your eyes upon that 2015 hotness.

HA. HAHA. HAHAHAHAHA. You sweet summer children, you had no idea what the next four years were going to hold.

Second, every time we'd post about a new feature, or some in-game art, we were proud of it. Even back when our heroes had no shading and doofy haircuts and our UI was placeholder and our environments were visually just... all over the place. We thought it was looking pretty baller.

This realization is both terrifying and inspiring.

Terrifying because right now, again, we think things are looking pretty baller. I mean, the UI could use a visual pass, but you know, that'll come eventually. And so, are we going to look back on 2019-Wildermyth and be just as embarrassed by its appearance as we are of 2015-Wildermyth's?

(I kinda hope so, because it means the game was successful enough that we worked on it for another four years.)

And of course, it's inspiring because we have been making it better. Constantly. You don't realize how far you've come in the day-to-day grind until you look back and go "Holy crap, our comic editor from 2 years ago was noooottthiiinnng compared to what it can do today."


That's how you build big things, I guess.  One day at a time. One Trello card at a time. Nate admitted that if he had known back in 2014 how much work this game was going to take, he probably wouldn't have done it. I don't know if I would have.

But we did.

For some indie games, time is the enemy. You've gotta release quickly, you've gotta jump on that new technology before everyone else does. We're absurdly lucky enough to not have a project like that. We have a project about hand-drawn art and lovingly-crafted stories and details that stack so deep on top of each other that we've had a really hard time describing the game succinctly in interviews and stuff. We wanted to generate characters that surprised and delighted us with every playthrough, and I still message the team on Slack when I get something particularly good out of our hero-name-generator.

Tuesday, October 22, 2019

How to: Write your own Villain for Wildermyth - Part 3

This is part 3 of a series where I'll teach you how to write and implement your own "main story" for Wildermyth.

Part 1 - Creating a Villain
Part 2 - A Custom Fight

Wildermyth is a mythmaking tactical RPG currently in beta. Our philosophy is to put as much storytelling power into your hands as possible, and part of that is exposing our tools so that you can craft your own stories inside the game.


That's our goal, anyway. 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 our Discord. We have a tools-and-modding channel just for this, and I'll be thrilled to answer your questions and help however I can.

How To: Create a Custom Monster in Wildermyth



Wednesday, October 16, 2019

New Trailer, New Campaign and an Official Release Date

It's been a couple of years, our gameplay looks loads better, we have more features to, er, feature, and it's high time we made an updated trailer for Wildermyth:


Oh and hey, what's that at the end? Looks like Wildermyth has an official Steam release date:

Steam Early Access:
November 13, 2019!
https://store.steampowered.com/app/763890/Wildermyth/

You heard it here fir—okay, you probably didn't hear it here first. This is a dev blog. Anyway, mark your calendars and give it a wishlist!

(And remember, those of you who bought the beta on itch automatically get Wildermyth on Steam as well. Thanks for being awesome.)

* * *

With that comes a new five-chapter campaign, our second one after the introductory Ulstryx campaign!

This one is called Enduring War, and it features Morthagi as the main enemy. You'll be beating back the clockwork undead, of course, and we're also hoping to give you some chunky, meaningful choices during the campaign that explore what it means to be human, mortal or otherwise...


So then one thousand years later, this becomes your problem. How so? 

Give it a whirl and find out.



Patch Notes: 0.7+74 Agarantha


0.7+74 Agarantha


Friday, August 30, 2019

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

This is part 2 of a series where I'll teach you how to write and implement your own "main story" for Wildermyth.
Part 1: A First Playable(Note - if you completed Part 1 in an earlier patch, you might need to run through those steps again, since the tool chain has improved and the data structure has changed a bit. This stuff will stabilize over time! Contact me if you need help.)
Wildermyth is a mythmaking tactical RPG currently in beta. Our philosophy is to put as much storytelling power into your hands as possible, and part of that is exposing our tools so that you can craft your own stories inside the game.



That's our goal, anyway. 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. We have a tools-and-modding channel just for this, and I'll be thrilled to answer your questions and help however I can.

How To: Create a Custom Fight in Wildermyth

You'll Need:

  • Wildermyth Beta - get it here
  • Java (64 bit) in order to run the dev tools


Step 1: make a plan

For this article I'll be continuing to work on the Heart of the Forest campaign I sketched out in Part 1. Here's the outline again:

Introduction
  1. Intro Event: a rumor reaches town of strange beasts in the woods. Three friends decide to investigate.
  2. Fight: You find a shrine, and you're attacked by Thrixl. You learn they've been disrupting shrines.

Chapter 1
  1. Goal: Clear all hostile sites to unlock chapter one boss
  2. Fight: A forest guardian is slain, but you kill the thrixl responsible.
  3. Interval ~10 years pass

Chapter 2
  1. 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.
  2. Goal: Track the thrixl to a poisoned stream. 
  3. Fight: The seed has been corrupted and planted at the source of the stream, poisoning the water. Kill thrixl and corrupted guardians. 
  4. Victory: Over time the forest heals, yay!

We'll be working on the first fight, where the heroes are scouting in the woods and find a shrine desecrated by some weird creatures.

Here's a little sketch of how I think I want the map to look:



For this fight, I want the heroes to approach the shrine in the center, and then get ambushed by Thrixl from the two sides. We'll create three comics, an arriveAtSite to set the scene, a midMission event to announce the ambush, and a victory to wrap it up.

Step 2: Create a New (Basic) Fight

Run scratchpad, go to Site Lab.



This is where we'll be spending most of our time. Site Lab is all about previewing and editing combat maps. Find the New Fight button in the upper-right hand corner.



And press it! Fill it in something like this. Keep all the checkboxes checked! They'll save us some legwork.



Go for it.

So, that created a whole bunch of stuff, here's the breakdown:

Mission Map: This is the map itself, it's always created, and it defines the terrain, visuals, and where to sprinkle random scenery, as well as defining spawn points and stuff for the plot to use. You can view the map in SiteLab.
Scenario: This is how we will test drive the fight from the main menu, without having to embed it into a campaign. You can take a look in the Scenarios Editor (Content Editor, Control+4)
Plot: The plot controls how the fight is run, when things spawn, what the objectives are, and little things like defeat and victory. You can view it in the PlotView but normally we'll work on it in SiteLab where it's displayed right below the Mission Plan.
Arrive Event: This is a comic event that can be called from the campaign, that will kick off this fight. You can view it in the Comics tab or Effects tab.
Mid-Mission Event: If we want something to happen in the middle of the mission, like an ambush, a discovery, whatever, it's fun to have the heroes talk about it with a mid mission event. It's optional but we'll be using it here.
Victory Event: The comic that will be played on victory. We generally don't bother making defeat comics, to be honest, but you can if you want mission defeat to be a viable story path. Usually it makes more sense to end the game if the player wipes on a plot mission.

Step 3: Test it

This fight should actually work, just as it is, so let's take a look! To convince the game to show you the dev tools, you'll need to add a file called devMode.txt to your install folder, like this:



There doesn't have to be anything in the file, the name is all that matters. Now when you launch the game you should see an option called "New Battle." This is how we're gonna test our fight.



Find it in the list...



You should see the mid mission event play, and then the fight will start. The default roster is just one farmer, who probably definitely won't win this fight, so... When you're done let's head back to scratchpad and make some changes!

(Note - the Arrive event is not played when using the Battle menu, but it will be useful when we integrate our fight into the campaign later.)

Step 4: Edit the Map

Head back over to Site Lab, and use the Scenario dropdown to find our map, like so:



Ok now this is the fun part! But Also I'm gonna be honest with you: this tool is maybe not what you were expecting.



So yeah. The way it works is, there's a grid of text that controls the individual tiles. Here's the (default) meanings of the characters:



Characters not on this list can be used for spawn points or other purposes, as we'll see in a bit. Based on my sketch from earlier, I'm going to enter some data. I want the heroes to spawn at the bottom, so I'll put the '1' there, and I want the monsters to spawn in on the wings, so I'll put a '2' at each wing, like so:




(You can press **New Seeds** over on the right (Control+R) to see what it looks like and adjust as you go.)

Let's take a moment to fix the other problems with our fight - the monsters are the wrong group, and there's only one farmer on our side. Head over to the Scenarios tab (Control+4) and find our scenario in the second list:



We'll set the foe to Thrixl instead of Gorgons (Inhabitants -> 0 -> threat -> flavor), and we'll set calamities to 0 there as well.



Then expand the scenarioInfo at the top and define a roster for the scenario, like we did in part 1 for the campaign:



Save your changes (Control+S), and then head back to the Map view (Control+8) and refresh the map (New Seeds -> Control+R). If you don't save the scenario, the map view might not pick up your changes. Now you should see a warrior, hunter, and mystic, and thrixl spawning in the corners. Great!

Let's also set the biome to the forest, by setting the environment, like so:



Now, I want a focal point in the middle that they have to approach, and I also want to clear away some of the excess furniture, so I'll put some more marks on the map, like so:


The lowercase 'o' character just means "don't put scenery here," and you can find it in the legend to make sure. The 'ssss' is where we want the shrine to be, and the '3' is where we want the heroes to approach to investigate. You don't have to use 's' or '3', just check the legend, and use the same character in the next step, where we tell the map what to do with those locations.

First let's define the focal point. We'll create a piece of scenery where the ssss is, by adding a Map Detail. Click the New Detail button and choose MapDetail_SingleExactScenery.



for the location select New... TilesFromMap and set the mapInputCharacters to "s" (because we put some ssss on the map where we want the shrine to appear.) For the sceneryId, enter "shrineTreeTeal". (You can browse the sceneries in SceneryLab to learn what your other options are.) That should get your shrine spawning:



Hot! For my maps, I like to go a bit further, messing around with floor layers to create the impression of a path on the forest floor. You can see how this is done if you load some of the Ulstryx maps and poke around, there's a variety of different techniques available for map crafting. But for now let's get back to making it functional.

Step 5: Create an ambush

We want the mission to start out without any monsters, to give the player a chance to look around and get spooked out a bit. Then, once the player approaches the shrine, we want to play the midMission comic and spawn the monsters! To do that, we're going to add an objective to step in a certain region, and tell the plot to wait until that objective is complete, before playing the comic, etc..

Scroll down to the "Plot" section, and we'll add new Objective called Objective_EndTurnInRegion



Set the "region" to TilesFromMap and set the mapInputCharacters to "3" because we put some 3333 on the map for where we want the player to approach to investigate.

Now we need to add the objective, and we want to wait for it to complete before firing the event and spawning the monsters. We can do all of this by adding a new step, Step_WaitForObjectives. Add the "endTurnInRegion" objective to the list to wait for, and move the step upward so that it's just after Spawn Heroes. Make the mid mission event next, and the monster spawn after that, and leave the AddObjectives step last. Your plot should look like this:



Because steps operate in-order, the mission should go like this: set up, spawn the heroes, then wait for the heroes to approach the shrine. When they do, show a comic. Then spawn the monsters, and lastly, add an objective to kill them all. If the heroes succeed, play the victory event. Feel free to give it a spin in-game!

Step 6: write the comics

Let's hop over to to comics view and embellish our stories a bit. I'm going to move fast here because making comics isn't the point of this article, but you can read more about it here on the wiki.

I'll do a quick little arrive:



And a scene at the shrine:



And a victory scene:



One thing about the victory is, because any of the heroes might die in the fight, you might want to make most of the roles optional, or write a separate fallback event with fewer required roles, if you prefer. It shouldn't break the game if you don't, but it's nice to have stories that react to the actual in-game situation.

Step 7: hook it up

Now let's integrate our fight into the larger "Heart of the Forest" campaign we started in Part 1. In the Plots view (Control+0), find C_heartOfTheForest, and add a new Objective, Objective_AssaultJob.

Set the site to "otherSite", and set the arriveEvent to the arrive event we generated, something like "plot_hotf_1_1_shrine_arrive".


(If you're wondering where otherSite came from, check the MapConfig for chapter 0 to see how it's specified. You can specify whatever sites you want that way, and give them whatever roles you like.)

Then, create a Step_WaitForObjectives to wait for the Assault. Put it right before the start of chapter 1, like so:


Step 8: play your story!

Scout the tile, and assault it. You should see your Arrive event:


It worked!

So, now we've got a custom fight in our campaign, and honestly, stringing together custom fights is most of the work that goes into a villain (aside from writing comics, of course!)

These are the core tools we use to build game content. Maybe next time we'll talk about building your own monster, or we can go into more depth on another topic if I get feedback in that direction. Thanks, and happy writing!

Monday, July 22, 2019

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 - get it here.
  • 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:

Heart of the Forest Outline

  1. Introduction
    1. Intro Event: a rumor reaches town of strange beasts in the woods. Three friends decide to investigate.
    2. Fight: You find a shrine, and you're attacked by Thrixl. You learn they've been disrupting shrines.
  2. Chapter 1
    1. Goal: Clear all hostile sites to unlock chapter one boss
    2. Fight: A forest guardian is slain, but you kill the thrixl responsible.
  3. Interval ~10 years pass
    1. 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.
  4. Chapter 2
    1. Goal: Track the thrixl to a poisoned stream. 
    2. Fight: The seed has been corrupted and planted at the source of the stream, poisoning the water. Kill thrixl and corrupted guardians. 
    3. 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

Villains are intended to work as mods, so let's make a mod to put our files in. Then we can easily share our work! 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.

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


This opens up the new event dialog. We want 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 (upper left corner, in the "controls" section) 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 roles 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. 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 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 :-)