Pathfinder to D&D 5E - The Differences

Context

So I have been DMing a Pathfinder campaign (Rise of the Runelords) for a group of my mates for the last couple of months however from my point of view, things just haven’t felt right. As a DM I have been feeling bogged down by the rules, from having to know when to apply minor +1 bonuses or penalties to being able to describe why we have 5 different knowledge skills and what they are used for. I have been looking at a number of different systems to try and adapt to including Savage Worlds and Dungeon World but finally I have settled on D&D 5th Edition. This is a small look at the rule differences as they apply to our group for their benefit as well as anyone else thinking of making the switch.

Differences

Skills

D&D 5th Edition greatly simplifies both the list of skills and how to apply them. Here is the list of Pathfinder skills with their D&D equivalents:

Pathfinder D&D
Acrobatics Acrobatics
Appraise  
Bluff Deception
Climb Athletics
Craft  
Diplomacy Persuasion
Disable Device  
Disguise  
Escape Artist  
Fly  
Handle Animal Animal Handling
Heal Medicine
Intimidate Intimidation
Knowledge (arcana) Arcana
Knowledge (dungeoneering)  
Knowledge (engineering)  
Knowledge (geography)  
Knowledge (history) History
Knowledge (local) Investigation
Knowledge (nature) Nature
Knowledge (nobility)  
Knowledge (planes)  
Knowledge (religion) Religion
Linguistics  
Perception Perception
Perform Performance
Profession  
Ride  
Sense Motive Insight
Sleight of Hand Sleight of Hand
Spellcraft  
Stealth Stealth
Survival Survival
Swim Athletics
Use Magic Device  

In addition to this, players no longer put ranks into skills when they level up. Instead, their class determines what skills they are proficient in and when they use those skills, they instead get a bonus applied to the roll based on their level.

D&D also makes use of Passive Skill Checks, something I couldn’t find mentioned in the Pathfinder rule book. Passive skill checks don’t require dice rolls and is used by the DM to secretly determine whether the player characters succeed at something such as noticing a hidden monster. Passive skill checks are equal to:

10 + skill modifier + proficiency bonus (if proficient)

In addition to this, the aid another action is replaced by simply giving a character advantage (see Advantage and Disadvantage) if two or more are working together. There is also rules for group checks which force everyone to make a skill check and if at least half succeed then the check is a success, otherwise it is a failure.

Proficiency

Proficiency is incorporated into D&D at the expense of Skill Ranks and Saving Throws and scales with your characters level. When you create your character, you choose what skills and saving throws you are proficient in and any time you use those skills, you apply your proficiency bonus in addition to your ability modifier.

In addition proficiency is added to:

  • Attack rolls with weapons you are proficient with
  • Attack rolls with spells you cast
  • Ability checks using tools you are proficient with

Proficiency starts at +2 at level 1 and increases every 4 levels thereafter.

Saving Throws

Reflex, Fortitude and Will saves are “replaced” with ability saves meaning instead you will use your STR, DEX, CON, INT, WIS, CHA ability modifiers for your saving throws. It really is just a naming change but it reduces the number of terms players have to remember.

When you create your character, your class determines which 2 abilities you have proficiency in which means whenever you have to perform a saving throw of that type, you add your proficiency bonus.

Item Proficiencies

Your class will tell you what weapons and items your character is proficient in using. Whenever you use these items, you gain your proficiency bonus to your skill check.

Advantage and Disadvantage

Instead of remembering all the cases where players get minor bonuses or penalties when rolling the dice, D&D incorporates advantage and disadvantage. This makes it much easier on me since I don’t have a DM screen full of when these bonuses or penalties should apply.

In both cases you roll 2 d20s; if you have advantage you take the higher value and if you are at a disadvantage you take the lower value.

Cover

Cover is one of these things where I’m somewhat puzzled as to why they didn’t just use the advantage/disadvantage system in favor of +X bonuses but I can also see why. Simply, half cover provides a +2 bonus to AC and 3/4 cover provides a +5 to AC. You cannot target someone in full cover.

Inspiration

I tried to introduce a similar system into our game of Pathfinder under the term Hero Points. In hindsight I probably went a bit too overboard with the description of them and set too many parameters around how they are earned and what they are used for.

Inspiration is awarded when you play your character in a way that is true to their personality traits, ideals, bonds or flaws or otherwise portray your character in an interesting way.

Inspiration can be used to give a player advantage on one attack roll, save throw or ability check.

Character Personality

I love the D&D includes some guidelines for fleshing out a character as part of the creation process; in particular traits, ideals, bonds, flaws and background.

At character creation, a character background or create your own which describes where you came from and how you became an adventurer. This will then define your possible traits, ideals, bonds and flaws or you can create your own.

Your personality traits define your character, you get to choose 2 at creation. e.g. I’ve enjoyed fine food, drink, and high society among my temple’s elite. Rough living grates on me.

You also get to choose 1 ideal, which describes what drives your character. Ideals typically are connected to your alignment. e.g. Power - I hope to one day rise to the top of my faith’s religious hierarchy.

Your bonds represent your connection with the people, places and events in the world. You get to choose 1 at creation. e.g. I owe my life to the priest who took me in when my parents died.

Flaws represent some vice, fear, compulsion or weakness for your character. e.g. I am suspicious of strangers and expect the worst of them.

Feats

Feats are optional in D&D and are quite powerful. Every 4 levels, you get to choose if you want to take a feat or increase 2 of your ability scores. In our campaign, feats characters currently have will be reworked slightly to match their D&D power levels.

Combat Turns

Combat turns are mentioned a lot more simply in D&D but that doesn’t mean they lack the depth of Pathfinder, it leaves more up to the DMs discretion and players imagination. Each player turn in combat is simply:

  • Move
  • Take 1 action

Some spells, actions or abilities will also allow you to take a bonus action on your turn. You can only take 1 bonus action per turn.

When you attack, you no longer apply a base attack bonus. Instead, if you are proficient with the weapon you are attacking with, you can apply your proficiency bonus.

Critical Hits

Critical hits mean you roll your damage dice twice, there is no rolling to confirm the critical.

Non-Lethal Damage vs Knocking Out

Instead of stating whether you are doing non-lethal damage; when an attacker reduces a creature 0 hit points, they determine whether the opponent is killed or just knocked out.

Two Weapon Fighting

As long as you have a light weapon in your other hand, you can attack with it as a bonus action. You don’t add your ability modifier to the damage of the bonus attack.

Combat Maneuvers

The terms Combat Maneuver Defense (CMD) and Combat Maneuver Bonus (CMB) are gone in favor of using a characters Athletics and Acrobatics skills depending on the situation. I like this change because the few times I would have to ask for a player characters CMD it would draw blank looks followed by a search through the character sheet to find the appropriate value.

Damage Resistance

In Pathfinder, damage resistance is expressed as a type of damage followed by a number which determines how much to reduce incoming damage of that type. This is simplified in D&D by ruling if a creature or character has resistance to a particular type of damage, damage of that type is halved against it.

D&D also introduces vulnerabilities. If a creature has a vulnerability to a particular damage type, damage of that type is doubled.

Dying

When you start your turn with 0 hit points, you must perform a death saving throw. Roll a d20, if the result is 10 or higher, it is a success, otherwise you fail.

On your third success, you become stable. On your third failure, you die.

This is just a small summary of the rule differences between Pathfinder and D&D that I found important for our group, they are in no way all the differences. In a follow up, I will be discussing how the player characters change as a result of us moving to D&D.

Releasing is Equal Parts Terrifying and Exciting

Just over a month ago I released my small side-project to the world and while the limited hype around it has fizzled out, its an experience I will never forget. I built a web app that showed Board Game collectors to show the games in their collection that they have not played, something commonly known as a ‘wall of shame’; you can view it at Board Game Wall of Shame.

This was the first time I’ve ever built something to the point where I felt proud to put it out in the wild. Normally I would start a whole bunch of ideas but never get to a point where I can look at it and say I’m proud for people to start using it. I feel like I have partly experienced a fear of shipping and partly a lack of motivation to continue working on things.

My approach to side projects

I must say I’ve read my fair share of articles about dealing with a fear of shipping but the most useful by far was a Hacker News thread on it in which, a wise person stated that the only way to get over a fear of shipping is by actually shipping. There are more pieces of wisdom in the thread which I could rehash however here are some of the biggest things I learned from this process.

Know your Target Audience

And know where they frequently go; it helps if you are also part of this community. These are the people that are going to care about what you’re doing and make sure you’re not just telling people you know because you’re not always going to get realistic feedback from them.

So for me this was easy, I was targeting board gamers and the places they most frequent are [/r/boardgames] and [Board Game Geek]. I got my biggest spike in users when I posted my project to the Board Games Subreddit which was an incredibly exciting experience for me. I was able to watch the usage graphs spike and the database fill up with entries which was really fucking cool.

My first week of traffic

Respond to Feedback

No matter how good or bad it is, make sure you have a presence and respond to what people have to say.

This was the hardest one for me, not everyone is going to like what you’ve done and those people are typically the ones that are going to let you know about it. Within the first 10 minutes of my post being on Reddit someone commented with a URL on Board Game Geek that will allow you to do the exact same thing as my web app did. At this point I could have said “how stupid am I for building something that is already easily available?!” and called it a night.

Called out on Reddit

But I think the most important thing is how you respond to that feedback. I could take pride in how well my web app displayed the results and how people found it more pleasurable to use. So make sure whenever you release your product, you are there to respond to people and provide a real presence behind it no matter if the feedback is good or bad.

Continuing Work is Harder than Finishing

One of the most amazing things that happened when I released my app and told people about it was the constructive feedback and additional features people wanted to see. While it was extremely exciting to see people using my product, it was more exciting that they could see the potential of it and give me ideas on how to improve it.

While getting the app to a point where I was proud to show it off was difficult and became a bit of a slog at times, it was a whole lot more difficult trying to continue on working on it. In my head I was done, I had got it to a point where I was happy with it and even though some people provided me with some great ideas to extend it, I just could not find the motivation to implement them.

I think this comes back to my approach to side projects where I always want to work on the next big idea because after enough time I poke enough holes in the existing ideas them that they sink. That is why something like the Board Game Wall of Shame is going to be something I may use from time to time but I think it will eventually fall away.

Having said that, the experience of actually shipping something and getting it in the hands of actual users was a hugely beneficial one, mostly full of ups and involving a sizeable learning curve in how to deal with feedback. It is something I would love to do again, provided I come up with something I am motivated to work on for long enough.

Building, Testing and Deploying your Nuget package with Travis CI

This all came about because I am building a Board Game Geek XML API wrapper in C# and wanted to be able to commit a change, build and upload the new version of the package to Nuget. You can view the repository here. If you want to get straight into it without diving indepth, my .travis.yml configuration file is as follows

language: csharp
solution: <Project Name>.sln
install:
  - curl -L -o nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
  - mono nuget.exe restore <Project Name>.sln
  - mono nuget.exe install NUnit.Runners -Version 3.6.1 -OutputDirectory testrunner
script:
  - xbuild /p:Configuration=Release <Project Name>.sln
  - mono ./testrunner/NUnit.ConsoleRunner.3.6.1/tools/nunit3-console.exe ./<Project Name>Test/bin/Release/<Project Name>Test.dll
  - mono nuget.exe pack ./<Project Name>/<Project Name>.nuspec -Version $MAJOR_VERSION_NUMBER.$MINOR_VERSION_NUMBER.$TRAVIS_BUILD_NUMBER
  - mono nuget.exe setApiKey $NUGET_API_KEY -Source https://www.nuget.org -Verbosity quiet
  - mono nuget.exe push <Project Name>.$MAJOR_VERSION_NUMBER.$MINOR_VERSION_NUMBER.$TRAVIS_BUILD_NUMBER.nupkg -Source https://www.nuget.org/api/v2/package  

Also it was quite important that my nuspec file had the following lines. You can view my full nuspec file here.

<files>
     <file src="bin/Release/<Project Name>.dll" target="lib/<Target runtime>" />
</files>

The first 2 lines of the file should be fairly self explanatory and are required for telling Travis about your project. I’ll start by going into the install section of the file.

  - curl -L -o nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
  - mono nuget.exe restore <Project Name>.sln
  - mono nuget.exe install NUnit.Runners -Version 3.6.1 -OutputDirectory testrunner

These lines simply set up the necessary dependencies to build your project, namely the latest version of Nuget, any dependencies for your project and the NUnit test runner. I know it may be considered bad practice to bring in the latest version of Nuget for this however until it lets me down, I don’t think I’ll change it.

The more interesting part comes in the script configuration.

  - xbuild /p:Configuration=Release <Project Name>.sln
  - mono ./testrunner/NUnit.ConsoleRunner.3.6.1/tools/nunit3-console.exe ./<Project Name>Test/bin/Release/<Project Name>Test.dll

The first two lines simply build the library using xbuild and runs the unit tests for the project. If you have no tests you can simply remove all the lines that reference NUnit.

Note about using different versions of NUnit - You shouldn’t have a problem most of the time using a different version however I know between versions 2 and 3, they completely changed the directory structure so it did take a bit of fiddling to find the correct test runner.

  - mono nuget.exe pack ./<Project Name>/<Project Name>.nuspec -Version $MAJOR_VERSION_NUMBER.$MINOR_VERSION_NUMBER.$TRAVIS_BUILD_NUMBER

This line simply builds the Nuget package based off your nuspec configuration. It is important to note here that you cannot just reference your csproj as you may do when running on Windows since this feature is not supported as of yet on Mono. I have also added environment variables in Travis for MAJOR_VERSION_NUMBER and MINOR_VERSION_NUMBER and then I use the automatically generated TRAVIS_BUILD_NUMBER for generating a full version number.

  - mono nuget.exe setApiKey $NUGET_API_KEY -Source https://www.nuget.org -Verbosity quiet
  - mono nuget.exe push <Project Name>.$MAJOR_VERSION_NUMBER.$MINOR_VERSION_NUMBER.$TRAVIS_BUILD_NUMBER.nupkg -Source https://www.nuget.org/api/v2/package  

The final 2 lines relate to uploading your package to Nuget. The first requires you to have set your NUGET_API_KEY in the environment variables for Travis. Also if you have a public build it is very important that you include the -Verbosity quiet option in this step since otherwise your API key gets exposed in your build log.

The final line will simply push your Nuget package to the server.

I hope you have enjoyed my quide to building, testing and deploying your Nuget packages with Travis CI and if you have any questions or comments, feel free to let me know below.

10/03 Friday Changelog

Friday Changelog is a way of updating you on my progress with my side projects throughout the week, no matter how little.

It has been a number of weeks since my last progress update mostly due to conflicting priorities and focusing on producing something worth showing off. The first priority was trying to organise a surprise 21st birthday party for my lovely girlfriend and then once that was over, I was attempting to get my game into a state where I could show it off to my friends this upcoming weekend. It is something that is funny to see reflected in my Github commit history.

Commit History

Since my last update over a month ago I have worked on:

Project Osprey

  • Tweaked the generation of levels to create more engaging and tight spaces for combat as well as providing open spaces for players to explore. I have started adding more details to the levels starting with the walls and the shadows they cast and crates with randomised weapon spawns.
Level Details
  • Added 4 additional weapons for the players to use. So far I have a pistol, assault rifle, SMG, shotgun and sniper rifle. They are going to remain as very generic weapons mainly differing in accuracy, fire rate, ammunition, projectile speed and shot type (i.e. shotguns having multiple projectiles in a spread).

  • Game UI elements including player health bars and ammunition counters. Next to implement is a game feed and game over overlays.

  • Networking improvements including smoothing of player movement and rotation, weapon pick up/drop and change of ownership.

Networking Improvements

But one thing I’ve remembered throughtout all this is that game development is hard and taxing which is what put me off it in the first place. As such I wanted to start something different for a couple of weeks and actually get something out there. Which takes me to the ‘Board Game Wall of Shame’.

Board Game Wall of Shame

For about 2 years now I have been an avid board game player and collector and in that time I have amassed quite a collection. One thing that has been a bit of a problem for me, not just with board games, is acquisition disorder; where the rate of aquiring games is greater than the rate of playing new ones.

The games that are in my collection that have not been played are commonly known as the Wall of Shame and I thought it would be a quick win to create a web app to see that list.

Board Game Geek is probably the most important website for the board game commmunity because it is effectively where we come together to view information as well as discuss the board gaming hobby. Commonly people will upload their board game collections here and record their playing habits making it an excellent source of data.

Board Game Geek does provide a rudimentary XML API to allow developers to pull down this data so it was relatively easy to get something off the ground to display. In just one day I was able to display all the information needed for the basic wall of shame but now I want to make it presentable and add in a few extra features.

Basic Wall of Shame

For this particular project, even though I have made a basic Node API currently, I would eventually like to build it with a C# backend since the upskilling in this area will help me at my current job. Aside from the basic functionality of showing a users wall of shame, I would like to add a feature to show which games appear most on everyones list. That way I can show this information on the homepage prior to the user searching for their username.

Overall this seems like a fairly simple project but I would like to do it properly in the form of a proper testing and deployment pipeline. I’m toying with the idea of using Docker and I would like to see how various Devops tools can help and which are overkill. The first one for me to implement was TravisCI and you can see the current build status below:

Build Status

It will be nice to work on something with a relatively quick and simple minimum viable product that I can post online and get feedback to iterate. I feel like that is something missing with the game that I was building or maybe it was my sense of perfection that was preventing me from feeling like I can post it online.

Anyways, thats a discussion for another time, thanks for reading this far.

03/02 Friday Changelog

Friday Changelog is a way of updating you on my progress with my side projects throughout the week, no matter how little.

Progress was a bit limited this week since we got a new addition to the family which has been eating into my development time but he is pretty cute so it is alright.

Milo

For the week ending the 3rd of February 2017 I worked on:

  • This week I managed to get the whole flow from the user choosing a name to entering a lobby in which the master player (first player in the lobby) will generate a level which then gets sent to all the players. I successfully completed the communication and drawing of the level for each of the players.

  • What is remaining is the generation of spawn points for the players and then getting players to spawn with a bit of distance between them. The last thing I would like to have happen is 2 or more players spawning on top of each other.

  • This week I would actually like to spawn players in and have them move around to prove the communication happens in real time. I anticipate needing to do a lot of troubleshooting around this so I would like to get it in place as soon as possible.

Can’t wait too see what it looks like this time next week!