After years of not doing much game development and never actually having somewhat of a reasonably completed game in my portfolio, I have decided to commit to doing Global Game Jam this year.
I will be participating at an event here in Perth, Australia and I’m going with the intention of meeting people and forming a group at the event. Since my expertise has always been programming, I hope to meet some artists/designers/other programmers and work as part of a team to get something done in the 48 hours.
Where I have usually let myself down in previous game jams is through too much scope and pursuit of perfection as opposed to just good enough. I really hope to meet some more experienced game jammers who can help me stay grounded and focused on getting one idea or mechanic complete in as short a time as possible and then polish from there.
I also have one optional goal that I’ve set myself and that is to build a game that is playable on an arcade machine since I am currently in the process of building my own and I think it would be really awesome to be able to play a game I made on it.
Also been looking through the list of diversifiers, there are a couple that have caught my eye:
So Sociable - Build a game that uses a social network API
Upside down - One or more game systems programmed by an artist, major art assets produced by programmers/coders
Look back - Create a game which uses retro controllers of any type. No modern controllers! (which fits in with my personal goal)
Created by Warren Robinett - Your game contains some kind of hidden secret or Easter egg.
This week I have started getting back into working with Unity3D so I don’t go into it without any practice. I am very much looking forward to putting something together over the weekend, meeting some people and having fun.
1 So the whole tradition of “I’m In” posts came about because there was a bug feature in the Ludum Dare website where a user didn’t exist until they created a blog post, hence they got people to tell them that they plan on participating and what tools they intend to use. Ludum Dare FAQ
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.
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:
Sleight of Hand
Sleight of Hand
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:
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 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.
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.
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 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.
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.
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 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 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:
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 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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
Since my last update over a month ago I have worked on:
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.
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.
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.
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:
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.