D20 Style Combat in RPG Maker

UPDATE: While the logic below is sound, a recent comment drew my attention to testing what I posted here to find a number of small but crucial JavaScript syntax errors that may cause the formula to result in always returning 0 (the universal RPG Maker sign that something broke). Here is the corrected formula for use in the Damage Formula:

b.def <= (Math.randomInt(20) + 1 + (Math.floor((MOD – 10)/2)) + (Math.floor(a.level/2))) ? Math.random(X*Y) + 1 + (Math.floor((a.atk – 10)/2)) : 0;

Substitute MOD for a.atk or a.mat or whatever parameter you want to use for the attack.  Substitute X for the number of dice. Substitute Y for the dice size (4,6,8,10,12,20).

Something I’ve often toyed with aside from my own game FateStone was the idea of re-creating a Dungeons & Dragons campaign in something like RPG Maker.  Seems easy right? You’ve got dungeons, monsters, characters all there and ready to go!  However, the big hurdle is quite simply that the way combat works does not overlap. Like at all.  RPG Maker’s combat calculations are more inspired by Final Fantasy or Dragon Quest than anything you’d find in a Pen & Paper RPG tome. So I recently put my mind to work on figuring out how exactly you would be able to bring a d20 or D&D Style of combat to a RPG Maker game.

Now take in mind that this is a very basic version of what I started working with.  While I have started working on versions to incorporate all the different D&D ability scores, I haven’t hammered out all the nitty gritty of using them.  So for now I strictly went for Attack Roll (Attack) vs AC (Defense) and Spell Attack (Magic Attack) vs Saving Throw (Magic Defense).

First is the dice roll:

1dX = Math.randomInt(X)+1

YdX = Math.randomInt((X*Y), Y) + 1

For the YdX formula, it’s important to note that you’ll be setting the range of the random numbers, when it says X*Y you should replace that with the actual value of X * Y.  In other words, for 3d6 don’t put (6 * 3) just put (18).  These formulas will be used for everything from determining the attack to the damage, so they are pretty much the cornerstone of this whole thing.  But another important one would be how to you get the Ability Modifier from the Ability Score.  For that you’ll want to use the following calculation:

Math.Floor((A – 10)/2) = M

A = Ability Score.  M = Ability Modifier.

In simple terms, you subtract 10 from the Score, divide that by 2 and round down (because you always round down in D&D) and that will give you the modifier.  So an Attack (Strength) of 14 would result in a modifier of 2.

So how would this work for an actual skill?  Well, let’s take a look at one.  First, you’ll want to set the Skill in RPG Maker to be a ‘Certain Hit’.  We are just going to skip the whole Accuracy/Evade cycle of the attack in favor of our own math.  Then our damage formula will look something like this:

If (b.def <= (Math.randomInt(20) + 1 + (Math.Floor((a.atk – 10)/2) + (Math.Floor(a.lvl / 2)) )) Math.random((X*Y), X) + 1 + (MOD – Math.Floor(a.level/2)); else 0

Kind of crazy, right?  Let’s break it down.

If (b.def <=: This First bit is essentially starting an ‘If-then’ clause that says if the following math results in something equal to or higher than our target’s defense (AC).

(Math.randomInt(20) + 1: This is our d20 roll.

+ (Math.Floor((a.atk – 10)/2): This is adding our attack modifier

+ (Math.Floor(a.lvl / 2)) )): This adds half our level to the math and finishes our If condition.  So it’s a random number between 1-20, plus the modifier, plus half our level.

Math.random((X*Y), X) + 1 + (Math.Floor((a.atk – 10)/2))This part is our damage calculation. Essentially, do this much damage (a random XdY dice amount) plus our Attack modifier damage.

else 0 And if the math DIDN’T equal or beat the Target’s Defense(AC), then deal zero damage due to it being a miss.

To summarize, the formula is basically:

If (Target AC) <= 1d20 + Attack Modifier + Half Level; Deal XdY + Attack Modifier damage; else deal no damage.

Naturally, you can probably imagine how this basic formula can be applied to a lot of different things.  It forms the basic idea for skill checks, saving throws, and pretty much any Difficulty Check based roll. You could replace the target defense with a d20 roll on the enemy side as well and have an opposed check.

As I said at the top, this isn’t perfect.  It doesn’t quite yet take into account D&D’s Ability Scores, which I’m still working on.  Mostly just stuck on thinking of a way to make the Target Defense side of things work when b.def would simply be their Constitution score or something.

If I ever figure out a good solution to it, I will let you know.

In the mean time, you might find the following plug ins for RPG Maker MV to be handy when it comes to recreating the D&D experience:

Yanfly’s Weapon Unleash: Allows you to reassign a different attack skill to different weapons, thus being able to give daggers a different damage formula than a great axe.

Yanfly’s Limited Skill Usages: For those interested in bringing D&D 4th Edition’s system of At-Will, Encounter and Daily abilities to the game, this plugin can help.  However, you might want to create a common event for sleeping that gets called when using an item like ‘Camping Set’ or something to reset the Daily uses.

FateStone Development Journal: Planning

rpgmaker1

I’ve been tinkering with some of my work on FateStone again recently and it got me thinking that maybe since I do have this platform, I could share some of my notes and thoughts about working on the game with all of you.

There’s a lot of ways one can go about coming up with an RPG Maker game.  Some folks just dive in and start creating, building as they go, some start with a story they’ve wanted to tell, and others begin with the characters.  These are all valid ways of exploring the creative tools that something like RPG Maker MV offers up.  Me though?  I’m a planner.  Always have been.  I would keep lists and figures of milestones and objectives written down or in my head.  I may not have ever gone as far as full blown theorycrafting in my WoW Raiding days but I did keep a list of drops I needed to work toward to get hit capped (Hit capping for the newer WoW players was a god awful mechanic where you needed to prioritize a now defunct ‘Hit’ stat just so you wouldn’t spend raid fights missing with every attack.)

So when it came to sit down and try to make an actual game, I didn’t open RPG Maker – I opened Google Sheets.  My Google Drive is full of documents and spreadsheets all around creating a basic layout for what the game I want to make will entail.  From how the crafting system will work, to a spreadsheet breakdown of items, crafting components for those items, effects for the items, and naturally the item id.  I’ve done the same work for class skills, which is an impressive list of hundreds of skills for FateStone’s currently planned twenty classes. I mean, I just like to have everything down on paper for easy reference once I begin, regardless if a lot of stuff I’ve been working on is for later ‘phases’ of the development.

Currently, Phase 1 is just planned to only be the single starter city and the quests that take place there in.  That includes a 3-floor dungeon built around the City Sewers and an ancient forgotten temple full of ghosts and skeletons hidden beneath the city, three city districts and the castle where the king lives.  Because of course there’s a castle where the king lives.  There’s a total of 5 recruit-able characters, namely because I wanted there to be some exploration of the ‘morality’ system and have different paths through the prologue based on your decisions. The Positive or “Astral” Path features the ability to recruit the Princess (Bard class) and a Knight and the Negative or “Chaos” path will feature the Rogue and the Mage NPCs.  The others will be eventually recruit-able, but I wanted Phase I to have a full party by the end of the Prologue.

So just there alone that’s seven areas with subzones of buildings, etc. Five NPCs featuring an array of five different classes, not to mention your starting class that brings the total to six. Two branching paths with different quests.  A half dozen or so different monsters of varying difficulty. Then items and shops to put them in.

…THAT is why I tend to go for the planning approach to things.  Just this small prologue has so many different things to keep track of in terms of IDs, variables, values, and so on and so forth.  I like being able to just flip open a spreadsheet and go “Ah, yes. That chest should have Item #52 in it.”