I'm in for Global Game Jam 2018
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.
As for the tools I will be using:
Game Engine: Unity3D (C#)
Graphics: GIMP, Aseprite
Sound: Audacity, SFXR
while [ 1 ];do vardate=$(date +%d\-%m\-%Y\_%H.%M.%S); screencapture -t jpg -x ~/Desktop/Timelapse/$vardate.jpg; sleep 10; done
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
Pathfinder to D&D 5E - The Differences
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:
|Handle Animal||Animal Handling|
|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:
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 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.
WSU VR Nursing Tour
I was contracted by a local company by the name of Virtual Guest 360, which specialise in creating VR and AR experiences, to create a dashboard which pulls data from a virtual reality nursing simulation. The idea was that the users walk through the simulation and answer some questions based on what was shown to them and formed part of the curriculum at the Western Sydney University nursing school. The below screenshot is an example of the dashboard that was produced.
My work was involved getting the data from the VR simulation built in Unity and sending it to DynamoDB where it was later accessed on the dashboard via some Lambda function calls. I also designed and implemented the dashboard in React, incorporating user feedback along the way and supported the product for a period after the contract ended.
This job taught me a lot about setting expectations when it comes to what I am working on, what I can produce and my time. I am extremely happy with what I produced and learned along the way.
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.
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.
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 MAJORVERSIONNUMBER and MINORVERSIONNUMBER and then I use the automatically generated TRAVISBUILDNUMBER 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 NUGETAPIKEY 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.