How to: Write your own Villain for Wildermyth - Part 3
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 Monster in Wildermyth
* Wildermyth Beta
* Java (64 bit) in order to run the dev tools
* A picture of a monster?
Step 1: Make a Plan
For this article I want to make a "corrupted forest guardian" to insert into our "Heart of the Forest" fight from part 2. You should be able to make your own unique monster by following the same basic process.
My corrupted guardian will use this art:
The monster image should be a square .png file, usually 512x512, or 1024 x1024 for larger monsters, and should be placed in the mod under /assets/figures/images/
I want the forest guardian to have a free attack based on Wild Grasp, that can pull heroes out of position, and a standard melee attack to follow up with. The guardian should have about 16 health, 2-3 armor, take up 2 tiles, and otherwise be a fairly standard mob.
Step 2: Create the monster
Run scratchpad, and go to Combat Lab.
Combat Lab is great for testing out monsters and combat abilities, because you can control both sides of the fight. Press F10 or click Content Editor to open up the editor view.
Make sure that the Heart of the Forest mod is enabled in the Mods control in the upper left.
Go to the Monsters view (Control+7). From here you can see all the monsters that are defined in the game. The best way to make a new monster is to base it on an existing monster. Let's start with the actual Forest Guardian.
On the very top row, to the right there are three buttons, Copy, Duplicate, and Delete. Click Duplicate.
That will bring up the New Monster dialog. Let's call it "hotf_corruptedGuardian." Make sure to save it to your mod, as well.
Go ahead and create it. It will be using the new ID, but otherwise it's a total copy of the old monster. Now we'll change the image to use our "corrupt" version. At the very bottom, expand the skin->0->image-> nodes.
click on the misc/forestGuardian line. That will bring up a big list on the left of all the "figure" images in the game. Use the box at the top left to search for our image by name:
Select it. The picture in the upper left should now show our version:
Step 3: Edit the Stats
You can edit the guardian's stats in the stats section by clicking on the values and entering new values.
press Enter to confirm. I'll edit the stats, set the scale to 1, and also enter a name and blurb:
Save your work! (Control+S)
Step 4: Make a new Ability
Next, I want to add a new ability, "grasping vines," based on the mystic "wild grasp" recipe. In the aspects section, let's add an entry called "monster_GraspingVines".
This aspect doesn't exist yet. That's ok, we're going to create it now. Head over to the Aspects view (Control+3) and find an aspect to duplicate. I'll use "drauven_stormsend", because it's a simple ability. Press the duplicate button
And fill out the New Aspect dialog. We'll use the exact name we entered before, "monster_GraspingVines". Make sure to save the aspect to your mod.
Edit the name and blurb to be more appropriate, and edit the effects->0 node to say "monster_GraspingVinesAbility". This is referring to the ability, which we're about to create.
Save your work! Now go to the Effects view (Control+2) and search for "mysticRecipeWildGrasp". This is the effect we're basing our new attack on. Find the duplicate button on the top line.
Click Duplicate to bring up the misleadingly named "New Event" dialog. Type "Grasping Vines" into the Long Name field, and use "monster_GraspingVinesAbility" for both the id and file.
Then press create. There's a fair number of changes to be made to this ability. Normally you'll iterate on this a fair bit, changing some things, testing them out, and adjusting. For now I'll just run you through all the changes I've decided to make. Some of this stuff might not make sense at first, so I'll list them one by one and explain them as I go. Also, I'm not gonna take a billion screenshots of this, sorry. But let me know if you'd like to see videos of this sort of stuff I guess?
name -> "Grasping Vines" - this is the name that shows on the Ability Button.
blurb -> "Thick vines shoot out to grab and draw in an enemy." - this shows up in the tooltip
info.aiPriority -> 2500 - this tells the AI to prioritize this over a regular attack (which is 2000).
info.tags -> null - this is not an interfusion recipe, just a basic ability
ability.cooldown -> oncePerTurn - we'll be making this a free action, so we need to put a cooldown on it or else the AI will just spam it.
targets.cost -> null - make it a free action
delete targets (source) - in Wild Grasp, this would be the interfused plant, we don't need it. When we delete this, a lot of errors pop up. Cool! We'll need to fix all those...
targets(target).relativeTo -> self - find an enemy that's within range of self (not the scenery that we're not using)
targets(target).minRange -> 2.1 - don't pull an enemy who's already adjacent.
targets(sourceTile).relativeTo -> self - find targets nearby self.
outcomes (AttackRoll).intermediateRole -> null - there's no intermediate role anymore, just a simple attack.
outcomes (AttackRoll).particles.setPosition -> self - vine particles should originate at self.
outcomes (AttackRoll).particles.setPosition2 -> self - vine particles should travel back to self.
outcomes (AttackRoll).flankMarkOrigin -> self - controls where the flanking mark originates
outcomes (AttackRoll).always -> null - we don't need to damage scenery
outcomes (AttackRoll).onHit (Damage) -> delete - we don't want to damage the foe, just pull them close.
targets.missionFeedback.orientTo -> target - self should orient towards the target of the attack when hovering, animating.
So now it should look something like this.
Let's save our work.
Step 5: Test it out!
Let's test it out. (Due to a bug, you may need to close Scratchpad and re-open it in order to refresh the data.) Head over to Combat Lab (press Esc to close the Editor.) Where it says "Farmer" in a dropdown in the upper left, pick our new monster:
Press F2 or click the button just below to spawn the monster on side B (the heroes are side A). The unit should show up. Click on it to select it. (in combat lab, use SHIFT+CLICK to select a unit on the other team from the one you have currently selected.)
You should be able to select Grasping Vines, and target as hero, and pull them over!
Step 6: Set up difficulty levels
Let's open up Content Editor again (F10) and go back to the monsters tab (Control+7) and find our guy.
Monsters can have different stats and abilities depending on the difficulty level the player selects. The base stats we set before are for "George R. R. Martin" or "Hard" difficulty, and are the default vaules for other difficulties. To make our monster easier for "C.S. Lewis" players, let take a look at the "mods" section of the monster definition. If you expand those three mod nodes, you'll see one for C. S. Lewis (easy), One for J. K. Rowling (Medium), and one for Edgar Allen Poe (very hard). You can override stats for any of these, and you can see there are already entries that override the main attack of the guardian.
I'll set these up like so:
Step 7: Add the monster to a fight
Let's put our new monster into our fight so we can see how it feels. From Combat Lab, We'll hit the "back" button (lower left) to get back to the Lab Selector screen, and head over to "Site Lab"
We'll use the selector on the top right to find our fight.
And then down at the bottom where we spawn the Thrixl ambush, we'll add our monster by specifying the mosnter id.
And let's set "combatantCards" to false while we're here, so that we won't also spawn some random Thrixl.
Step 8: Playtest
Load up the game and choose the scenario from the New Battle menu (you have to be in dev mode to see this)
Start the scenario and play through. Our monster should spawn, and use its devastating wild grasp on us!
So, this is how we make new content for Wildermyth. Hopefully we've got your imagination started. The tools are still getting better, so let me know what you'd like to see improved. Our dream is for it to be a really powerful and flexible content creation tool. Thanks for reading!
Leave a comment
Log in with itch.io to leave a comment.