Category Archives: indiedev

Installation Instructions for Leap Avatar Hands for Leap Motion Orion

Installation

  1. Open your Unity project.
  2. If you have previously installed the old Leap Motion V2 skeletal tracking asset, ensure it is COMPLETELY REMOVED. This includes the various Leap motion DLLs etc.
  3. Ensure that the Orion version of the Leap Motion tracking software is installed on your computer https://developer.leapmotion.com/orion
  4. Ensure the official Leap Motion Orion Unity assets package is added into your Unity project https://developer.leapmotion.com/unity
  5. NOTE: The current version of this asset (1.21) is not compatible with the latest Leap Motion Orion Core Assets (4.1.0), please use the older 4.0.2 version of the core assets for the moment.
  6. The pending version on the asset store (1.3) REQUIRES Leap Motion Orion Core Assets 4.1.0.
  7. Download and import the Avatar Hand Controller for Leap Motion from the asset store.
  8. That’s it! The package will be installed into a LeapAvatarHands folder. You can check out a demo scene in the Scenes sub-folder.

Configuring your own avatar

Adding this solution onto a player avatar in your Unity scene is quite easy, although does require a fair bit of configuration for the avatar.

  1. 1. Set the update mode on the Animator component of your character to “Animate Physics”.
  2. For desk mode: Add a child gameobject to your player gameobject (GameObject->Create Empty Child). The player gameobject must be a properly rigged character with 5 fingered and 3+ jointed hands. I did all my testing with characters generated by Mixamo Fuse, and then rigged with the Mixamo auto-rigger.
  3. For VR mode: Add a child gameobject to your camera gameobject (GameObject->Create Empty Child).
  4. For desk mode: Position this child gameobject where you want the virtual Leap controller to sit, generally speaking you will want this to be about 20-40cm out from the avatar’s belly button.
  5. For VR mode: Position this child gameobject 0.1 z-units forwards of the Camera gameobject, so it sits a little ways in front of the avatar’s face. Then ROTATE the object -90 on the x axis and 180 on the y axis, so that it is facing forwards in the same way that the leap motion itself would face forwards when mounted on a VR headset.
  6. Add the IKOrionLeapHandController script and the LeapProvider script to this empty gameobject.
  7. Go to the avatar’s left hand and add the RiggedHand script from the Leap Unity package to it.
  8. Set the handedness appropriately.
  9. Add the AutoRigHand component to the hand and use it to automatically set up the hand. You will still need to set finger pointing and palm facing parameters appropriate for your particular avatar, although Mixamo rigged avatars should work with the default settings.
  10. You will also need to set the finger pointing and palm facing vectors for each hand and finger. For reference with my Mixamo characters I had the finger pointing as 0,1,0, and the palm facing as 0,0,0. For each finger I had 0,1,0 and 0,0,0 except the thumb which was 0,1,0 and either -1,0,0 for the left hand or 1,0,0 for the right hand. However, these settings will depend on how the character is setup.
  11. Do steps 7-10 for the right hand also.
  12. Go back to the IKOrionLeapHandController gameobject and set the Avatar Left Hand and Avatar Right Hand fields to use the hands you just configured.
  13. Go to the root node of the avatar and add the IKActioner script, and tell it which gameobject you put the IKLeapController onto.

The IKActioner script passes the inverse kinematics pass from the animator component on the avatar up to the actual IKLeapHandController.

The IKLeapHandController is an extension of the provided LeapHandController, set up to work with avatar hands and inverse kinematics.

Using rigid hands

So that your hands can interact with physical objects in game, I have included a RigidIKRoundHand_L and RigidIKRoundHand_R prefab which will work with my IK solution.
For desk mode simply add these as children of the IKOrionLeapHandController gameobject and update the physics left hand and physics right hand references in the IKOrionLeapHandController script.
For VR mode place these two gameobjects in root transform (straight into the scene, not as a child node of another transform). Then update the left physics hand and right physics hand references in the IKOrionLeapHandController script to point to them.
NOTE: Physics hands are a little inaccurate still, but can be improved by fine adjustments to the offset and wrist offset parameters in the RigidHands and RiggedHands components. The avatar hands are limited by the range of movement of the avatar’s hands, whereas the physics hands are not. Consequently, it is difficult to get the physics hands and the real hands to sync up perfectly. The offset and palm width parameters of the RigidIKHands can be tweaked to improve accuracy, but it’s still not perfect, particularly when your arms are at full stretch.

Making your own Animator

It is important to note the two different layers I used in my example Animator, with IK Pass enabled on the base layer and blending set to override with a weight of 1.
Also, don’t forget to set the Animator to Animate Physics! This tweaks the order of execution, allowing the Leap data to override the animation data.
If you make your own Animator and it’s not working right, refer to the example to see how it’s meant to be done.

Using Hand Position Data at Runtime

Unity has a very particular order of execution. If you attempt to reference the hand transform in the Update method you will find that the data is incorrect, it will be based on where the currently playing character animation thinks the hand should be, rather than the leap motion hand data. The Animator IK pass happens after this.
As such, if you are trying to use the hand transform data at runtime, you should probably be doing that in LateUpdate(), after the Leap data and IK pass has occurred.

Leap Motion Avatar Hand Installation Instructions for V2 Skeletal Tracking System

Installation

  1. Open your Unity project.
  2. First check that you have installed the official Leap motion V2 skeletal tracking asset, available free on the asset store. Optionally you may also want the Leap Motion OVR assets, available from the Leap motion developer website.
  3. Download and import the Avatar Hand Controller for Leap Motion from the asset store.
  4. That’s it! The package will be installed into a LeapAvatarHands folder. You can check out a demo scene in the Scenes sub-folder.
What you should see in your project assets folder if everything has been installed.
What you should see in your project assets folder if everything has been installed.

Configuring your own avatar

Adding this solution onto a player avatar in your Unity scene is quite easy, although does require a little bit of configuration for the avatar.

  1. Set the update mode on the Animator component of your character to “Animate Physics”.
  2. Add a child gameobject to your player gameobject. The player gameobject must be a properly rigged character with 5 fingered and 3+ jointed hands. I did all my testing with characters generated by Mixamo Fuse, and then rigged with the Mixamo auto-rigger.
  3. Position this child gameobject where you want the virtual Leap controller to sit, generally speaking you will want this to be about 10-30cm out from the avatar’s belly button.
  4. Add the IKLeapHandController script to this empty gameobject.
  5. Go to the avatar’s left hand and add the RiggedHand script from the Leap Unity package (v2.0+) to it.
  6. Go to each of the avatar’s fingers and add the RiggedFinger script to them.
  7. Set the finger type on each of the fingers.
  8. Set the bones (transforms) on each of the fingers, you should have 3, with the first one being the transform that represents the base of that finger, the second one being the knuckle, and the third one being the joint between the knuckle and fingernail.
  9. Go back to the avatar’s hand, and set each finger in the Fingers array: Thumb, Index, Middle, Ring, Pinky.
  10. You will also need to set the finger pointing and palm facing vectors for each hand and finger. For reference with my Mixamo characters I had the finger pointing as 0,1,0, and the palm facing as 0,0,0. For each finger I had 0,1,0 and 0,0,0 except the thumb which was 0,1,0 and either -1,0,0 for the left hand or 1,0,0 for the right hand. However, these settings will depend on how the character is setup.
  11. Do steps 4-9 for the right hand also.
  12. Go back to the IKLeapHandController gameobject and set the Avatar Left Hand and Avatar Right Hand fields to use the hands you just configured.
  13. Go to the root node of the avatar and add the IKActioner script, and tell it which gameobject you put the IKLeapController onto.
Leap Hands - Connected to your avatar.
Leap Hands – Connected to your avatar.

The IKActioner script passes the inverse kinematics pass from the animator component on the avatar up to the actual IKLeapHandController.

The IKLeapHandController is an extension of the provided LeapHandController, set up to work with avatar hands and inverse kinematics.

Using rigid hands

So that your hands can interact with physical objects in game, I have included a RigidIKHands prefab which will work with my IK solution. Simply add these into the physics hands slots on the IKLeapHandController component.

How to use rigid hands with the IK Leap Hand Controller.
How to use rigid hands with the IK Leap Hand Controller.

Using Leap Avatar Hands with Oculus Rift (OLD)

Note: This set of instructions relates to the old Oculus OVR package, and does not directly work with the new Unity Native VR feature.

leapovr_avatar_hands
How it should look when you’ve got it right.

Using my Leap Avatar Hands controller with the Oculus Rift DK2 is quite easy. Leap have provided examples of how to use the Leap motion with the Oculus Rift as part of their LeapMotion+OVR package. Using my controller works the same way as theirs.

Essentially you need to do only a few things:

  1. Add an Oculus OVR Camera Rig from the Oculus provided Unity 4 Integration package onto your avatar, just in front of their eyes.
  2. Drag the LeapHandController GameObject I provided onto the Oculus Camera Rig’s CenterEyeAnchor transform.
  3. Set its position to 0,0,0
  4. Set its rotation to 270,180,0 (this mimics the physical orientation that the Leap Motion device will have when it’s attached to the front of your Oculus Rift headset).
  5. Set the “Is Head Mounted” flag to true in the IKLeap Hand Controller component.
  6. Move the LeapHandController object along the z-axis so that it is a little ways in front of the camera rig object. Tweak this location to suit.

When you’re done it’ll look like the screenshot provided above.

Leap Avatar Hands in action with the Oculus Rift.
Leap Avatar Hands in action with the Oculus Rift.

 

Progress Update 15 Minutes [1]

A little while back I wrote about how I planned to take over the world by creating a game, tentatively called “15 Minutes”. I also posted something of some design documents. I even detailed which Unity Asset Store assets I would purchase to help me create this game.

The plan was to get a good chunk of work done over the Easter break, now that the Easter break is over, I figure I should report on my progress! The good news is that I have made progress, the bad news is that it was a lot less than I would have liked.

Setbacks

As 100% of you probably predicted, there were some setbacks. Since I wrote up my plan a few things happened that cut into my development time in fairly significant ways.

Wisdom teeth

Doctors reliably informed me that I was too wise. One of my wisdom teeth was actually growing backwards in an attempt to correct this fault, but it wasn’t working. Another one was just impacted like a normal wisdom tooth. Surgery was required.

Who is this handsome fat faced devil!?
Who is this handsome fat-faced devil!?

This knocked me out of action for about a week. It was either pain or painkillers, and either option made coding really difficult.

It was a bit of a mixed blessing though. When I did start to feel better I got a few hours work in here and there, whereas if I was 100% I would’ve just gone back to work.

House buying antics

About this time we fell in love with a house that was going up for auction on the 28th of March. Turns out there’s a ton of work involved in buying a house at auction, at least here in Tasmania. I spent way too much time at open homes, contacting building inspectors, reviewing contracts of sale, talking to the council, talking to the banks and mortgage brokers, real estate agents, etc.

Among the best features of this house was the fact it’s 5 minutes from work, and it’s one of about 15 houses in Australia that is already connected to the fixed-fibre National Broadband Network.

This would’ve made it awesome for my indie dev activities.

Such NBN. So sad.
Such NBN. So sad.

Unfortunately, although we won the auction we never met the reserve price. Even a strong follow-up offer was too low. Turns out we couldn’t quite pay what the vendor wanted. Complete waste of time and energy.

Childcare plagues

My partner, Vanessa, recently returned to work 1 day a week, putting our almost 1 year old baby Eva into childcare for that day. Consequently she now brings home a new disease every week. I then catch this disease and then recover from it just in time for her to bring a new one home a week later.

Not my baby, but you get the idea.
Not my baby, but you get the idea.

Progress

Despite all this, some progress has been made.

I’ve implemented a Diablo style character control system, and the framework of the enemy AI system and combat system. It’s all a bit clunky still, but it works. Just needs polish.

A mushroom attacks!
A mushroom attacks!
A range of weapons can be equipped.
fireballfairy
A fireball shooting fairy.

 

Top 5 Insane Reasons Why Indie Game Dev Projects Fail (with Solutions!)

It’s really hard to succeed as an independent game developer. Let’s explore 5 insane reasons why that might be, and give you the solutions you need to succeed!

1. Good Computers

The problem with game development when compared to most desk jobs is that you need a decent gaming computing to do it properly. Couple this with the fact that most game developers are keen gamers and you have an insane recipe for distraction. Can’t make games when all you’re doing is playing them!

Don't hire this guy.
Don’t hire this guy.

It’s a catch-22 situation, but there is a solution!

Only hire game developers who loathe gaming. They will be motivated to complete their task as quickly and dispassionately as possible so they can move on to a real job doing financial modelling for accounting firms in Excel. This will make your project a sure fire success.

This is the dev you need.
This is the dev you need.

2. Kickstarter

These days it’s all about the kickstarter campaign. A good kickstarter campaign is considered almost essential to a struggling indie game developer.

Unfortunately, it’s much harder for a game developer to make a compelling and successful kickstarter campaign than it is for them to make a compelling and successful game. By the time the kickstarter is ready you’re already broke and burnt out on the project.

You will fail.
You will fail.

Fortunately the solution is simple. Instead of wasting time on kickstarter, just make a game and release it instead. Easy.

tumblr_static_yks-logo

3. The Internet/Social Media

It’s very hard to focus on game development when there’s so many other things to focus on. Your Twitter account needs attention, your Google+ page needs attention, your Facebook needs attention, your YouTube account needs attention, pornographic content needs to be consumed, has PewDiePie stopped being annoying and bad at games yet? It’s been a while since you last visited Second Life, maybe it’s not shit now?

The Internet is really making it hard to create games, with all its enticing distractions. So what’s the solution?

map-internet-twitter-skype-continents
Xkcd is smart, you should read it instead of this blog.

Unplug your ethernet cable.

4. GamerGate

The GamerGate … uhhh whatever it is, scandal? movement? … is totally ruining our vibe. Because every single game developer is a privileged white male we only know how to make games about sexual violence and discrimination against women. By being forced to think about equality and transphobia and other challenging topics we’re increasingly finding that the kinds of games we used to make, which were almost exclusively about high paid male executives keeping women barefoot and pregnant, are now socially unacceptable. This is a total creative bummer.

When I did a google image search for GamerGate I decided this image was least likely to offend.
When I did a google image search for GamerGate I decided this image was least likely to offend. Although it does have a powerful man in it… Oh god, what have I done? I regret everything.

The solution is simple though. If we bury our heads in sand then the GamerGate thing ceases to exist, and we can continue making our discrimination simulators without worry or fear of persecution.

This gives me a great idea for a game: male players just walk around wearing suits, making bro jokes, and high fiving each other for money. Female players simply stare upwards through a glass ceiling, watching the men have all the fun and earn all the money. The only way for women to escape the glass prison is to catch the attention of one of the males. If they successfully do this he will put them into a new prison where they watch Ellen, Dr Phil and Peppa Pig on repeat while trying to prevent a constant stream of babies from electrocuting themselves and starving to death.

Welcome to the Metaverse. The future is looking bright.

The future.
The future.

5. Ourselves

Think about it. Yeah, I totally couldn’t come up with a good fifth thing and Top 4 sounded stupid. Have a picture of a baby meerkat instead.

So fucking cute.
So fucking cute.

Disclaimer

This entire post is a comedy piece. Please don’t think that I actually think this way. I just wanted to make you laugh. I’m so sorry. Don’t make me the next Justine Sacco.

Just hold me.
Just hold me.

Mecanim is broken and needs to be fixed properly

Generally speaking, Unity has a coherent design philosophy that provides a nice workflow. Essentially you make GameObjects in the Editor, then when you hit play it makes a working copy of the object. Any changes that are made to that object during runtime are not reflected on the original. Your scene is preserved, your prefabs are preserved, yet your game play objective is met.

There are a couple of notable exceptions to this rule that I have encountered.

Navigation meshes. You can only generate these in the editor, and have very limited access to them with scripts. This is a bad design choice, and should be fixed.

However, to work around this I just use the RAIN NavMesh implementation (free on the asset store!), which has been done properly. It provides you with the editor tools to generate NavMeshes in the editor, but it also gives you complete access to the NavMesh library at runtime. It’s also faster. It’s just plain better than the built in Unity NavMesh solution in every way I can think of. Because RAIN exists the Unity NavMesh implementation doesn’t bother me so much… but it’s still wrong.

Bad design.
Bad design.

The other one is the one that really grinds my gears. The Mecanim animator. Their implementation makes no sense. It’s billed as a major feature of Unity’s engine, but it’s underpinned by a simply bad design choice. To make things worse, despite being aware of the issue, the response from Unity has been to patch it with dodgy hacks and work-arounds, rather than solving the actual problem in a way that empowers developers to do their job.

Bad design.
Bad design.

Mecanim Animator

At some point during design someone decided that the Animator component itself would not be cloned off to a working copy like normal Unity GameObjects. Rather, just the animation parameters and the current state of the machine would be individual.

Bad design.
Bad design.

Consequently any changes made to the animator are permanently saved. As such, if someone was to use a script to fiddle with their animation state machine it would have unintended permanent consequences.

To prevent this, virtually none of the animator data structure is exposed to scripts. You cannot access States, Transitions, BlendTrees, Clips… you know, everything useful.

Bad design.
Bad design.

This has serious consequences. Consider the situation where I have several attack animations, but my character has various attack speeds depending on which particular weapon they’re using, such as in Borderlands or Diablo. The attack animations need to be played back with an animation speed such that the animation play length matches the attack speed.

For example, WeaponA has attack speed of 1.5 attacks per second. The attack animation that applies to that weapon has an original length of 3 seconds. To make that 3 second long clip play in 1.5 seconds, I need to make sure that the speed of that clip is set to 3/1.5=2. To do this I need access to both the length of the clip, and the speed parameter of the motion in the attack animation state. Unity currently gives me access to neither.

How should this work? The same way almost everything else in Unity works. The actual animator component that is on a given character should be a working runtime clone of the original, and any changes to it in script should be reflected immediately in game play, but not saved permanently. This way I can change whatever the hell I please in runtime scripts, without any permanent ramifications. They could expose everything.

Unity acknowledge that this problem exists – so in the 5.1 release they have a solution whereby you can drive the speed variable with an animation parameter, just tick a checkbox! Hurrah?

No. This is a hack solution to a problem that shouldn’t exist.

Bad design.
Bad design. On a side note, disastrous public bathrooms are 90% of what you get in a Google image search for “bad design”.

Fix it properly. This solution will only fix a very small subset of the problems that you should be able to solve through manipulation of the animation state machine at runtime. Give us tools that allow us to do whatever we please with our game while it is running.

I appreciate that there can be a certain level of “protect the user from themselves”, and that there are sometimes limitations or efficiencies that we might not fully understand. But in this instance, it really does appear that it’s just a bad design choice that needs to be fixed. Properly. I don’t believe for a second that cloning the animation state machine for each animated character would have disastrous performance implications. Games in other engines have been doing it for years without issue.

What do you think? Do Unity need to address this obvious issue? Am I way off on this one? Is there some missing piece of information I don’t have that would make this all make sense?

My Five Step Program For Twitter Followers

We all know how important it is to cultivate a good Twitter following for our indie dev projects. Marketing via social media is very important for any game project, but as indie devs it’s doubly important, as we need all the free marketing we can get if our games are to be successful.

The growth of my Twitter account.
The growth of my Twitter account.

I hadn’t paid much attention to Twitter until the start of this year (2015). I had an account, but was only followed by a few close friends. All that started to change on January 10, when I resolved to get my Twitter account sorted.

Detailed in this post are the steps I took to get 400 followers in about 6 weeks. No paid tools, no bought followers, no tricks. Just a small investment of time and effort – you’ll need around 15-30 minutes per day. The more you put in the more you’ll get out.

The five steps.
The five steps summarised.

Step One – Become Followable

The first thing to do is set up your profile. This is very important. Whenever someone is trying to decide “should I follow this person?” they will typically look at your profile. If they can tell at a glance that you’re going to tweet the kinds of things they are interested in then they may decide to follow you. If they can’t tell what your account is about from a quick glance, then you have little chance of being followed.

Write a good profile description

Your description is the most important aspect of your profile: people will quickly read this to find out who you are and decide whether they want to follow you. Like all things on Twitter, it has to be short. Typically people list a few key things that they’re interested in, and are likely to tweet about, as well as a little bit about themselves personally. This should include your professional interests, and a few personal interests/hobbies.

Choose a good profile photo

Leaving the default egg profile photo is a death sentence for any Twitter account. If you have a good eye-catching square logo for your group then you might consider using this as your profile photo, otherwise it’s always a good option to use a head-shot. Preferably the photo should be somewhat interesting, memorable, and eye-catching so that people’s eyes are drawn towards it.

cropped-bloody_profile_pic.jpg
My Twitter profile photo. Seriously. It’s eye-catching, memorable, and a headshot. Perfect.

Add a header photo

This is perhaps the least important part of the profile, but can help it to stand out further. This is a large wide landscape banner style photo. If you have something suitable then it’s a great extra to have, but if you don’t have something on hand then you can probably skip this for now. But keep it in mind. The more personalized your profile is the more it sends the message to potential followers that this person takes their Twitter account seriously.

Seed your account

Once you’ve set up your account, you need to seed it with some good, relevant tweets that exemplify the kinds of things that you’re going to post on your account. This could be links to recent work that you or your colleagues have published, or it could be relevant news media articles relating to your field.

When people are deciding whether they should follow you they are given a sample of the last few tweets that you’ve made, and many people will use these to make their final decision about whether you’re someone they want to follow. As such it’s important that whenever you’re going to go on a follower recruitment drive that your most recent tweets are good examples of what you’re about.

Make your Twitter account visible

Make sure your conference presentations, websites, emails, business cards, and other outward facing materials you produce reference your Twitter account. The little blue Twitter bird icon, or the little chat bubble lowercase ‘t’ icon are the universally understood icons for Twitter.

In web-based materials you should insert a clickable link to your Twitter account, so that people can easily follow you straight from your website/email. Like the one you can see on the left.

An example of a business card that includes a Twitter account.
An example of a business card that includes a Twitter account.

Step Two – Recruit followers!

As someone who’s just starting on Twitter the best way to recruit followers is to follow people yourself. Whenever someone receives a new follower Twitter notifies them, shows them a summary of your profile, and gives them the option of following you right back.

Follow people you know

To start with you’ll probably want to follow your friends, family, and colleagues. These people are very likely to follow you back, as you already have an established relationship and they’re inherently more likely to be interested in the things you have to say.

Twitter has tools that help you to do this. In the Discover page you’ll see a “Find friends” link. Clicking this link will give you options to search for friends who use Twitter in the address books of various email services you might use. Twitter will also ask to use your mobile phone number to help connect you with friends in your phonebook. Whether you choose to do this or not is up to you, but it’s fairly harmless in my experience.

The discover page.
The discover page.

Follow people who have the same interests as you

The next step is to start following people who are likely to be interested in the things you want to tweet about. These people are more likely to look at your profile summary, think “they seem interesting” and follow-back. There’s a few ways to go about this.

Search

You can search Twitter for people, or for the words they use in their tweets. If you go to the Discover page, and use the Search Twitter field to start searching for keywords that relate to your areas of interest then Twitter will return pages upon pages of tweets that contain those keywords. Read through the list of tweets that you found in your search and if they seem relevant to you, click on the username of the person who posted the tweet, and click the Follow button.

Tip: If you use the Twitter phone app rather than the website then there will be a little follow shortcut icon that you can use to immediately follow the person who posted the tweet, without having to look at their profile. This can provide a much faster workflow when you want to follow large numbers of accounts.

Hashtags

As well as being able to search for keywords, Twitter has the hashtag system. People tweeting about particular popular topics will add a hashtag code to identify that their tweet is about that topic. This is tremendously useful when looking for people to follow, as it’s a more reliable and unique identifier than simple keywords. Hashtags don’t automatically become a thing as soon as someone uses one though – there needs to be a certain threshold of people using a particular hashtag before it becomes relevant or useful. Usually this is only achieved when there is a particular social movement that is encouraging it, or when the area is so broad or commonplace that it naturally emerges.

You’ve probably seen television shows encouraging viewers to use a particular hashtag to discuss their show (i.e. QandA’s #qanda, My Kitchen Rules #mkr15, etc.) Similarly, you’ll often find that conferences in “Twitter aware” circles have a designated hashtag for their conference, and they encourage all conference attendees to use that hashtag when posting about things relating to the conference. This is very helpful in ensuring that the conference attendees can connect with each other on Twitter. Conferences are great places to find new people to follow and new followers!

There are also more general purpose hashtags for specific topics that have enough social momentum behind them. Within the indie game dev community the most popular hashtags seem to be #gamedev, #indiedev, and #GamersUnite.

It might take a bit of experimentation, but if you keep your eyes peeled you’ll eventually figure out which hashtags are being used by the communities that you want to connect with. You can then search for these and use them as a shortcut to find people worth following.

Tip: Once you’ve identified the relevant keywords and are comfortable with how the community is using them, you can make use of these keywords to make your own tweets more discoverable. This is very important, and will be discussed in more detail later in this guide!

Follow people who follow people like you

Another way to find large numbers of people who might want to follow you back is to follow the people who follow people like you. Identify well established accounts with several hundred or thousands of followers that are posting about similar topics to you. Click on their Followers, and quickly scroll through the list following everyone who roughly seems to fit the mold.

Step Three – Clean your account

If you correctly follow step two you should find yourself following several hundred or even a thousand people within a couple of weeks. For all that effort, only a small percentage of those people will follow you back – if you’re doing well with your targeting then maybe 1 in 10. This starts to present a problem, as it will make your Twitter feed move very quickly, and it will inevitably be filled with a lot of garbage and spam.

Now is the time to clean up your account and restore your followed to following ratio to a more respectable number. Time to prune out the dead wood and cut back the weeds.

People that don’t follow back

The reality is you only followed most of those people because you were hoping they would follow back, and if they haven’t gotten around to following you back after a couple of days they’re probably never going to get around to it. Unless you’re particularly interested in hearing what they have to say it’s time to unfollow them so that you actually have some chance of seeing Tweets from the people that you do care about.

This is where it becomes necessary to use third party tools or websites. Most of these services will be able to fetch all the relevant data from your Twitter account, and can tell you important information about the people that you are following and the people that you follow. We can use these services to filter out people that we are following who aren’t following us back.

There are many services that offer a premium paid service, as well as a free limited trial service. For this particular activity I prefer to use www.socialbro.com, as it offers a good filtering system for free.

To do this, sign up for SocialBro and link your account. Perform your synchronization, and once it’s finished, go to the My Community page. Change the CRITERIA field to “People you follow who don’t follow back”.

SocialBro's filtering page.
SocialBro’s filtering page.

SocialBro will now give you a list of all the people matching this criteria, and on the left it has a set of filters that you can use to further refine the list.

If the list is short enough you can just trawl through it and manually unfollow each account you decide you aren’t interested in. However, you may find it easier to shorten the list by using different filters. For example, if you’re trying to stop following spam accounts you can change the Tweets per day slider so that it only selects people who post more than 15 tweets per day. Similarly, you might want to stop following people who have accounts that are more than a few months old yet have very few followers, or people who never tweet, suggesting that their account is inactive.

Getting rid of spammers

Some accounts are considered “bot” accounts, run by a computer program rather than a human. Others are run by humans, but just really annoying humans that post a lot of garbage. Either way, it is a common tactic for these accounts to follow you back in the hope that it means you won’t unfollow them.

So, as much as it may pain you to do it, it is important to also filter your entire following list for people that post more than 15 tweets per day. It is usually a good idea to unfollow people who post more than this, but there are two notable exceptions.

  1. They are just a really good, professionally managed account.

These accounts are usually pretty obvious. They post frequently, but it’s good stuff. These accounts are usually managed by a respectable organisation i.e. New Scientist magazine, Harvard Research, the Mayo Clinic, etc. but sometimes they’re run by professional marketing firms or people who have managed to turn their twitter account into a full time job. These people really exist, and it’s quite ok to follow them if you’re interested in what they’re posting about.

  1. They are a useful retweeting bot.

It is not an inherently bad thing to follow a Twitter bot. Although many of them are quite spammy, in some instances the spam may be worth it. It is common in many areas for people to create a Twitter bot as a service for a particular community. These bots will automatically retweet tweets that use certain hashtags – but sometimes they will only re-tweet you if you follow them in return. Following these retweet bots helps you to quickly discover what’s happening within your community, and it’s a great way to discover active users in your area. As per the Follow people who have the same interests as you section, it is a good idea to follow the people that the re-tweet bot helps you find, as there is a decent chance they will decide to follow you back, and you can always use SocialBro to easily unfollow these people later if it doesn’t pay off.

Step Four – Tweet good

To encourage people to follow you, and to keep your followers from unfollowing you, it is important that you regularly post good content on your Twitter account. Just like you did in Step Three – Clean your account, most people will unfollow inactive accounts, or accounts that post content they’re disinterested in.

Retweeting

One easy way to make sure you’re posting content that your followers should be interested in is to retweet tweets that you yourself liked reading. If you’re interested in it, your followers should be interested in it. As a rule of thumb you should aim to be retweeting at least a couple of interesting articles per day. Feel free to do more, but if you start to find yourself retweeting 10 or more articles per day then consider being more selective. You don’t want people to think you’re just another retweet spam bot.

Publications

Make sure to tweet every time you publish new work. Link the content where possible, and give a headline so that readers can tell at a quick glance if it’s the kind of thing they’d be interested in looking at.

Include images

Adding relevant or amusing images to your tweets makes them more visually interesting and significantly increases click-through rates. If the article you’re posting has a catchy logo or graphic to identify it then consider adding that image to your tweet. Alternatively you can search on Google images for a relevant image to add. As a rule of thumb, you might aim to include an image on at least 25% of your tweets.

Use appropriate hashtags

Hashtags are by no means required when you post a tweet, but selecting one or two appropriate hashtags to add into your tweet will help significantly with exposure. The retweet bots we’ve already talked about will see the hashtag and retweet you to a much bigger following audience than you personally have access to. Not only does this give you access to a bigger audience but it also helps other users find you, and if they like what they see they’re likely to start following you.

Tweet regularly

Aim to send at least one tweet every day, and preferably at least 3 or 4. Between your own articles that you want to promote and retweets this is quite easy to achieve. The more you post the more reasons you’re giving people to follow you… just make sure you’re always posting something that has some value.

Another consideration is time zones. Twitter is most active during the day… in America and Europe. For Australians that basically means the hours between midnight and 9am.

One solution is to use a tool like Buffer (https://bufferapp.com/) or HootSuite (https://hootsuite.com/) to schedule your tweets. Buffer will let you do this for free, and if you use the Google chrome browser you can install a browser extension that makes it very easy to do this. Paying for HootSuite or the extended version of Buffer unlocks a range of additional features.

A lot of people choose to send all their tweets through Buffer or HootSuite, rather than Twitter directly, because that way you can space your tweets out throughout the day, hopefully reaching a larger audience.

Tweets are instantly put into the feed of all your followers as soon as you send them. Any tweets that occur subsequently will push your tweets further and further down the feed.

If all your tweets happen around the same time then only the people who are both following you and happen to be looking at Twitter right now are likely to see them.

Repeat important tweets

Following on from this, it is important to repeat your most important tweets several times throughout the day. In my experience I need to tweet important announcements 4 or 5 times throughout a 48hr period before the click-through rate starts to noticeably decrease.

Use analytics

There are many twitter analytics sites out there. SocialBro, Buffer, and Hootsuite all do this in various ways. There are many others. Unfortunately, many of the really useful statistics require a paid membership to access.

By using the analytics on these sites you can see which of your tweets is having the most impact and learn from what works and what doesn’t work. Even the free analytics can be useful.

Build your personal brand

You’ll often hear criticism about Twitter and how it’s an inane waste of time. Critics cite examples of people posting about mundane daily activities. Although this does happen, and sometimes it really is pointless, there is a method to the madness.

The most successful Twitter users are those who can build their own personal brand, generating a cult of personality around themselves.

One great way to make people care about the things you have to say is to help people see you as a human being. Telling people that you had to get up super early to catch a flight to your conference may seem like a trivial detail that other people shouldn’t care about, but it does send the message “I am a human being, I have troubles just like you. You can relate to me.”, similarly you could mention that you’ve got a bad cold, or that you’re struggling to hit a big deadline, or share a humorous exchange about your kids. These are all great examples of the kinds of personal troubles that just about anyone can relate to and sympathize with. Don’t be shy, people like to feel socially connected, and to do that they need to feel like you’re a real person not just a mindless Twitter drone.

Do try to keep it reasonable though. If you are spending all your time talking about your personal life, and none of your time talking about your product, then the people who are following you because they’re interested in your product might switch off. That would be counterproductive to the whole purpose of this exercise.

It is also important to be aware of the boundaries. Your Twitter followers aren’t your close friends and family, and everything you post is public, so it’s important that you don’t post anything too personal, anything potentially offensive, or anything that should be kept secret. This brings us nicely to the next section…

DANGER

All your tweets are public, and aren’t necessarily going to be read by people who know you. Take care to make sure you never tweet anything that could be considered offensive or insensitive. It doesn’t help if you were just joking, because the people reading your message might not get your sense of humour.

Consider the story of Justine Sacco. 30 year old Senior Director of Corporate Communications at a big American media and internet company. Just before boarding a flight to Cape Town she posted this tweet to her 170 followers:

“Going to Africa. Hope I don’t get AIDS. Just kidding. I’m white!”

It was just meant to be a stupid joke, a parody of racism. Her tweet was supposed to mimic—and mock—what an actual racist, ignorant person would say. It never even occurred to her that people might take her at face value, nobody who knew her would think for a second that she was being serious.

Unfortunately for her, one of her followers saw the tweet and thought it ironic that a director of corporate communications was making such an insensitive communication. He retweeted it to his over ten thousand followers. As editor for a major blog his job was to generate traffic, and it worked.

While she was in the air on an 11 hour flight the Internet was stirred into a frenzy. She became the #1 trending topic on Twitter worldwide. The hashtag #HasJustineLandedYet exploded. People were both offended at her casually racist remark, and excited at the prospect of being part of a social media movement that would result in someone losing their job.

As soon as she landed and turned her phone back on realization dawned. She deleted the offending tweet and her entire Twitter account, but it was too late.

She lost her job that day.

Step Five – Repeat!

If you keep repeating all the steps outlined in this guide (particularly steps two through four) you should see your follower count continue to grow, and you should see the things you post gaining more and more traction and better and better response rates. You’ll find that you gradually get a better feel for the kinds of headlines and articles that your followers respond to, and you should start to see some genuine social relations forming between you and some of your more engaged followers. This can be quite a rewarding process, and hopefully you will find that you start to enjoy your daily Twitter activity… because if you don’t enjoy it you won’t continue, and inactive Twitter accounts die.

15 Minutes: WIP Design Documents

Disclaimer

This is a work in progress. It describes the basic design concepts that I have already got down for the 15 Minutes game, but nothing described here is set in stone. It’s also not really written for the public audience, so although you should be able to get the gist of what I’ve got in mind for the game from reading this document, you may misinterpret some of my notes or short-forms as they were written as a reminder for myself, rather than with anyone else in mind. I’ll try to go through and tidy things up periodically, but for now it’s a bit of a mess.

Concept

  1. ARPG
  2. Fast paced
  3. Time limited (i.e. 15 minutes)
  4. Random generated tileset dungeons
  5. Rogue-like (permadeath)
  6. Different classes with different playstyles
  7. Diablo style control scheme/playstyle

Classic roguelike dungeon diving but real time rather than turn based, and time constraints to really put the pressure on the player to rush. Add traps and/or puzzles that would be quite easy to deal with if you had plenty of time, but which the player is at risk of screwing up because they’re rushing. i.e. Swinging blade trap – easy to time it right if you’ve got time to think, but hard when you’ve got serious time pressure.

Goals

3 classes with genuinely different playstyles

Stealth/speed based (Thief)

Avoid or backstab most monsters, so that you don’t get delayed with face-to-face combat that you’re not well suited to, better at traps/puzzles due to movespeed.

Strength/combat based (Fighter)

Murder monsters fast, but slower movespeed and more difficult to get through traps/puzzles.

Magic based (Wizard)

Range-limited teleportation, ranged spells, squishy. Needs to make very smart engagements or will die easily. Can skip some traps/puzzles though! Need to manage mana usage or risk being very vulnerable.

Player is trying to get to end of dungeon

Beginner players should have about a 1/20 – 1/30 chance of making it to the goal within the time limit. Intermediate players should get up towards a 30% chance. Skilled players should get towards 50%. Master players should be able to make it around 75% of the time.

The dungeons should be maze-like, but not difficult mazes

Don’t want to frustrate the player with “shit shit shit how do I get to where I need to be”, but also don’t want it to be obvious where to go.

XP progress should be quite rapid if you’re killing stuff

Difficulty of each level as you descend into dungeon should also scale quite quickly. Players who rush downstairs too fast are taking a big risk of dying. Players who mill about levelling up are taking a big risk of running out of time. This also addresses one of the big issues I have with most rogue-likes where players get attached to their character over time and it crushes them when they lose a good one that they invested a lot of time on.

Beyond just “reaching the goal”, there should be leaderboards for how quickly you can reach the goal.

These should be broken down per class and per special win conditions. i.e. NetHack style pacifist runs, naked runs, vegetarian runs, no potion runs, etc. Add a sense of community competitiveness and adds a lot of replayability for those players who have gotten good at the game and want to increase the challenge.

Should be relatively easy to add different game-modes.

i.e. 10 minute mode, 20 minute mode, 30 minute mode, which have more levels to descend. Different leaderboards for each mode.

General rule of thumb is to put the player in situations where they must choose between speed and safety.

As the time pressure mounts they will be forced to make some dicey decisions.

Potential nice-to-haves that should be considered during design

  • Co-operative multiplayer?
    • Diablo style – more enemies that are scaled up
    • Potentially frustrating waiting for a friend who has a more cautious playstyle than you?
  • Top down third person control scheme and also first person control scheme options.
  • Different leaderboards. Perhaps one class is first person while another is third person?
  • Oculus rift support?

Style

Very self-aware, tongue in cheek mood. A lot of things about the design make no sense – why would there be a shop in a dungeon, and why would the shopkeeper still be running it if the world is about to end? Why would the player get hungry, he’s only got 15 minutes? etc. The game should be aware of the fact that these game design considerations are exactly that, they’re to facilitate a certain type of gameplay and they don’t really make sense.

Spawns

  • Monsters
  • Waypoints – paths for some monsters to patrol (aids the stealth based gameplay options)
  • Chests – loot droppers
  • Special tiles –
    • stores,
    • special quests,
    • special opportunities (shrines? Fountains?)
    • Traps

Loot

  • Should spray out when you open a chest or kill a monster, Diablo style. No goofy slow container system.
  • Arrows
  • Money (can be spent at stores)
  • Health and mana potions – insta hit restore.
  • Cure potions – remove DoT effects when drunk
  • Food – slow release timed restore with limited efficacy. Also restores hunger.
  • Equipment/weapons
  • Smoke bombs (for stealth character)
  • Monster essence – restores a fixed amount of health or mana when you kill the monster and loot them. i.e. Fighter archetype gets a certain amount of health back from killing, magic archetype gets a certain amount of mana back from killing. Stealth archetype gets nothing?

Equipment

  • Chest – primary damage reducer
  • Helm – secondary damage reducer
  • Boots – minor damage reducer and minor movespeed increaser
  • Ring – minor attack damage increaser and special effect giver
  • Amulet – minor attack damage increaser and special effect giver

Equipment gets RNG stat rolls.

All equipment rolls are monster level based. Min/max values defined.

Weapons

  • Long blade – hi sharp damage, slower attack speed
  • Short blade – lo sharp damage, faster attack speed
  • Axe – mix of hi blunt and sharp damage, slow attack speed
  • Mace – blunt normal damage, normal attack speed
  • Hammer – blunt hi damage, slow attack speed
  • Bow – ranged attack, lo sharp damage, consumes arrows.

Larger weapons have lower concealability for stealth mechanics. Short blade (daggers) best for this, but lowest damage.

  • Wands (spellcaster only, low damage fast attack speed)
  • Staves (spellcaster only, high damage slow attack speed)

Fighter – str primary stat

  • Prefers melee combat (cannot equip bow?)
  • High health
  • Recovers health from kills
  • Slower move speed
  • Higher detection radius (harder to avoid monsters, and to prevent multiple monsters from seeing and attacking)
  • Armor/health based face to face combat – i.e. Armor mitigates/absorbs damage to reduce its effect, with ways to improve armor?

Thief – dex primary stat

  • Two move modes – sprint or sneak.
  • While sprinting detection radius is similar to fighter, but move speed very high
  • While sneaking detection radius is much lower, but move speed is very slow
  • Can sneak behind monsters to do very high damage opening moves (backstabs)
  • Quite poor at face to face combat
  • Dodge based face to face combat? i.e. If hit take lots of damage, but chance to dodge and take none, w/ ways to improve dodge chance?
  • Can use smoke screen skill to evade monsters once detected?
    • This would break monster detection and make the stealth character invisible for a very short time, and also switch them into sprint mode so they can escape

Wizard – int primary stat

  • Two move modes – Range limited teleportation or walking
  • Teleportation is instant, but consumes mana
  • Walking is fairly slow
  • Terrible in melee combat. Low health. Low hand to hand damage.
  • Ranged combat with kiting preferred. But player must consider how much ground they are losing, and conserve mana. May opt to use bow but lower damage than spells.
  • Recovers mana from kills, and very very slowly over time?
  • Can use carefully timed shield spells to mitigate damage in exchange for mana.

Hunger system

  • Hunger gradually builds over time, can eat foods to reduce
  • If hunger gets too high reduce attack damage and move speed
  • If hunger maxes out start taking damage over time

Stealth system

  • Players have detectability value – this controls how fast before monsters are alerted to their presence once the monster can “see” the player
    • Heavier armor and weapons increases the detectability value. –  similar to Payday 2 concealment
  • Monsters have detection radius value. In front of them this is full, behind them this is reduced to ~1/4.
    • Once player is in the detection zone for that monster they start detecting the player… But only start pursuing/attakcing the player when their detection meter hits a threshold
  • Players have a detection radius modifier i.e. Fighter = 1.0x, stealth sneaking = 0.5x, stealth sprinting = 1.1x. This can be further altered with skills?
  • Detected players will be pursued by the monster for ~5 seconds (perhaps have different memory time for different monsters, i.e. Some pursue the player more dilligently than others), but if the player continues to be detected then this will be constantly reset back to zero.
    • This allows the player to attempt to evade the monster. i.e. Spellcaster can teleport around a corner, Stealth character can use a smokescreen? However, if they cannot get out of the monsters detection radius they will continue to be pursued.

Monsters

Ranged

  • Slow, ranged, low health, low damage
  • Bullet hell type variants – i.e. Ones that do triple shot, fast projectiles, slow projectiles. Player can manually dodge.

Melee

  • Many variants
    • Tanky high health types
    • Small faster ones that tend to spawn in clusters. Low health and damage but swarmy.
    • Lower health higher damage types

Magic

  • Also ranged
  • Fire/ice/poison variants. Insta damage/slowing/DoT(curable)
  • Drop extra mana when killed.

Variety of detection radiuses and move speeds. Some should be kitable by walking spellcaster, others should be able to keep up with a sprinting stealth character.

Some should patrol predictably between a set of 1-4 waypoints (in each tile set 4-5 locations where waypoints can spawn, giving each a ~75% chance to spawn. Monsters spawning in the same area that want to patrol waypoints will seek out spawned waypoints and start using them as routes. Others should be stationary or just pacing back and forward over a short distance (changing facing direction, for purposes of stealth gameplay). This sets up stealth gameplay.

Some monsters more susceptible to blunt, some sharp, some magic.

Some monsters may attempt to dodge projectile attacks.

Monsters do damage based principally on the level of the dungeon they spawned on. Different monsters do damage in different ways.

  • “Normal” attack speed, average damage.
  • Wind-up and big hit. Very avoidable/stunnable/shieldable
  • Fast attack with small damage.
  • Ranged attack with small damage
    • Multi-projectile attacks with even smaller damage, dodgeable
  • Slow AoE projectiles with reducing damage depending on how far from center

Quest NPCs

“Help me defeat such and such to get a reward!”. Options i.e.

  • Spawns a random single “big” monster in the next level of the dungeon (i.e. Make the monster more tough)
  • All of a particular monster type in the next level.
  • Reward is triggered automagically when the player fulfills the conditions? (making them walk back to the questgiver would eat too much time?)
  • If player completes all quests they encounter (minimum 2) they get the “Heroic Adventurer” flag and leaderboard.

“I am hurt! Please give me a health/mana/cure poison potion!”

  • Random chance that they will turn out to be hostile or friendly
    • If friendly, player receives a reward
      • Random piece of equipment…
    • If hostile, player just gets into a fight with no special reward
  • If player completes all “I am hurt!” quests (at least 2) they get the “Red Cross” flag and leaderboard.

“I am stuck down a hole, please find a rope to rescue me!”

  • Rope will spawn in a chest at some point in the same level of the dungeon
    • Random item reward
      • Small chance (i.e. 1/4) they will end up being hostile, but you still get the reward for killing them.
  • If player completes all “I am stuck!” quests (at least 2) they get the “No Man Left Behind” flag and leaderboard.

Traps

Primarily timing based traps i.e.

  • Swinging blades
  • Flame jets/Ice jets/Poison jets
  • Arrow traps

These should be easy to avoid if you are willing to go slow, but require significant skill to successfully speed run through. Player must choose between speed and safety.

Also some pressure plate based traps, following same types as above, but easy to dodge – just avoid the pressure plate.

  • Harder to avoid pressure plates when fleeing monsters though!

Traps do increasing amounts of harm as the player progresses, but the various types of traps should range from low to high damage. i.e. Low damage traps do ~10% of an appropriately levelled characters health, while high damage traps do more like 50%. Experienced players should be able to easily identify which are low/medium/high, so they can make appropriate snap decisions about whether they are going to bother spending time to avoid the trap, or if they’ll just plough through to save time.

Traps should also damage monsters, but monsters will avoid traps unless pursuing the player. This way the player an lure monsters into traps for assistance with kills, but monsters won’t just spontaneously get themselves killed.

Control scheme

Diablo style. Click to move. Click to attack. Right click to defend (reduces incoming damage, limited use).

4 skill hotkeys. 2 potion hotkeys (health and mana, consumes potion).

Stealth and Fighter have a switch weapons hotkey (i.e. Fast swap from ranged to melee)

Thief

Default attack is simple melee if using melee weapon, ranged if using bow

  1. Sneak
  2. Sprint
  3. Backstab (only available when close behind an enemy ?and not in combat?)
  4. Smoke screen (break engagement, opportunity to flee, consumes smoke bombs)

Fighter – generates rage during combat, but rage decays out of combat

Default attack is simple melee if using melee weapon, ranged if using bow.

  1. Bash (short stun effect that interrupts attacks, consumes rage)
  2. Berserk (time limited increased damage and improved armor rating, consumes rage)
  3. Whirlwind (AoE with knockback and short stun effect, consumes rage)
  4. Leap (can jump over enemies to escape a surround, can only use during combat, can only use every ~3 seconds)

Wizard – generates mana very, very slowly.

Depends on mana recovered from fallen enemies.

Default attack is ranged fireball (does not consume mana).

  1. Teleport (range limited, consumes mana)
  2. Ice projectile (slows enemy move speed, consumes mana)
  3. Meteor (AoE high damage, consumes mana)
  4. Shield (timing based damage mitigation, consumes mana)

Levelling and character customisation

When the player levels they get a skill point to award to one of their skills to improve it. This allows a degree of character customisation, as you can focus on different skills depending on play-style.

Sneak – improve sneaking speed and further improve detection stats
Sprint – improve sprint speed
Backstab – improve backstab damage
Smoke screen – increase duration before monster starts to see player again

Bash – reduce the rage cost
Berserk – improve duration of skill
Whirlwind – improve AoE damage and reduce rage cost
Leap – improve leap distance and reduce cooldown

Teleport – improve range of teleport, reduce mana cost
Ice projectile – improve slowdown effect, increase speed of projectile, reduce mana cost
Shield – improve duration of shield effect, reduce mana cost
Meteor – improve damage, reduce mana cost

Player base damage passively improves as the player levels.

Player also gets points which they can invest in stats.
Str is damage stat for fighters, but also improves armor for everyone
Dex is damage stat for stealth, but also improves dodge for everyone
Int is damage stat for spellcaster, but also improves magic resistance for everyone
Vit improves base health for everyone.

Damage

(Base damage + Weapon damage + Primary stat damage) * Attack Damage Modifier
Equipped weapons improve player damage.
Primary stat (str for fighter, dex for stealth, int for wizard) improves player damage

Damage mitigation applied by Armor stat for physical damage
Damage mitigation applied by magic resistance (int) for spell damage

Thus, fighters will be vulnerable to magic if they dont invest points into Int. Spellcasters will be vulnerable to physical damage if they don’t invest points into Str/Dex. Stealth characters will risk the chance of being one-shot if they don’t invest into Str and Int. Etc.

Special tiles

Fountains
– Drink from them to gain random effect
a. Restore health
b. Restore mana
c. Temporarily Improve armor
d. Temporarily improve damage
e. Poisoned (DoT)

Shops
– Shopkeeper sells an inventory of items in exchange for money. Limited stock.
○ Health potions
○ Mana potions
○ Smokebombs
○ Arrows
○ Cure poison potions

Pub
– Shopkeeper sells drinks
○ Drinks are just plain bad.
§ Lower stealthability
§ Lower attack speed
§ Lower health
§ Screen blur effect
○ Different leaderboard for alcoholic players
§ It’s a self-inflicted challenge for players
§ If they spend at least 1/5 of the total gamemode duration drunk (influenced by drink) then they get the alcoholic flag
§ Each drink lasts ~1 minute.

Traps (discussed previously already)

Quests
– Stuck in a hole quest NPC mentioned previously

Leaderboards and Achievements

Global leaderboard system should contain ALL completed attempts times and statistics. Local leaderboard should show all of your scores/times, not just completed ones.

Also daily/weekly leaderboards?

Each character gets a time alive, class, as well as a range of flags.

Flags
– Completed dungeon/Did not complete dungeon
– Vegetarian (has only eaten vegetarian food)
– Carnivore (has only eaten meat)
– No Man Left Behind (completes all stuck in hole quests – at least 2)
– Heroic Adventurer (completes all “go kill X for me” quests – at least 2)
– Red Cross Worker (completes all “I need a potion!” quests – at least 2)
– Trap Pro (takes no damage from traps)
– Pacifist (kills no enemies)
– Alcoholic (spends at least 1/5 of total gamemode duration drunk)
– Potions are for sissies (doesn’t drink any potions)
– Legolas fan (only uses a bow)
– Brute (only uses melee weapons)
– No Time To Eat! (spends at least 1/5 of the total gamemode duration at maximum hunger)
– Mad Hops (uses Leap at least ~50 times)
– So Dizzy (uses Teleport at least ~100 times)
– You’ll Never Catch Me! (uses at least ~30 smoke bombs)

Completing the dungeon with each flag is also associated with an achievement
Additional achievements
– Play as a fighter
– Play as a spellcaster
– Play as a stealth
– Complete as a fighter
– Complete as a spellcaster
– Complete as a stealth
– Equip each weapon type
– Equip each armor type
– Complete a quest
– Complete a stuck in hole quest
– Complete a heal me quest
– Complete a kill boss monsters quest
– Complete a kill all monster type quest
– Successfully stealth an entire dungeon level
– Successfully stealth an entire dungeon level as a fighter
– Successfully stealth an entire dungeon level as a spellcaster
– Reach xp level 2
– Reach xp level 5
– Reach xp level 10
– Reach xp level 15
– Reach dungeon level 2
– Reach dungeon level 5
– Reach dungeon level 8
– Reach dungeon level 9
– Reach dungeon level 10
– Die
– Die of poison
– Die in a trap
– Die of hunger
– Successfully backstab an enemy and one-shot them
– Use shield to avoid an attack
– Use bash to prevent an attack
– Use meteor to kill more than one enemy at once
– Buy from a shop
– Get drunk
– Kill 100 monsters
– Kill 500 monsters
– Kill 1000 monsters
– Stealth 5 levels
– Stealth 10 levels
– As a spellcaster kill a monster without taking damage

– Get top 10 in a daily leaderboard

– Get top 10 in a weekly leaderboard

 

The Plan: How one man with no time intends to make the next Diablo this year

I have a problem – I want to make a game, but I don’t have a lot of free time.

I’m a full time research scientist, father of a 10 month old baby, and partner to a sweet and deserving woman. I’m a family man now, and with that comes responsibility. I’m in no position to take significant time away from work. I’ve got a mortgage and mouths to feed. Vanessa is taking care of baby full time, so our income is already a lot lower than it used to be. Besides, I quite like my job (most of the time at least). I’m hardly going to quit.

Ok, so I want to make games, I don’t want to quit my job, but I don’t have much free time. How can I make this work?

Stop focusing on what I don’t have, start focusing on what I do have

It’s not very productive to fixate on how little free time I have, how tired I am, and how it’s a serious challenge just to keep my head above water. I need to take stock of things in an objective fashion and find a way to move ahead. If it is truly important to me that I make a game in my spare time I need to figure out how to make that possible.

no-time-to-say-no-time

I have skills and knowledge.

I’m a skilled and experienced programmer. I’ve got a PhD in Computing and years of experience implementing highly technical and complicated solutions to very sticky problems. Best of all, because some of my research projects have been in the serious games field, I’m skilled in game development using Unity. I’ve got a head-start over many indie developers, who often need to spend significant time getting up-skilled.

I have many of the tools I need.

Thanks to the aforementioned serious games projects I already have Unity Pro licenses and my Unity store account is already pre-loaded with a good set of useful development tools and assets. In particular, I’m fortunate enough to have a current subscription to Mixamo All Access, giving me near unlimited access to their massive library of humanoid animations and their very nice Fuse character creation tool.

I have some disposable income.

I’ve been working as a full time academic since 2009, and until recently my partner was working full time as well. We live quite frugally, and are generally very financially responsible. This has put us in a comfortable position financially.

I have money, but I don’t have time. I can buy back time by spending money on assets and tools that will save me time. It’s important to me that I make a game, not that I make every little part of the game myself.

I have accrued leave.

In Australia we earn 20 days of annual leave for every year we work. However, I typically only use 10-15 days of annual leave per year. Currently I have 35 days of annual leave in the bank. It’s not much in the scheme of making a game, and my partner will kill me if I burn through it all just to “do different work!”. But I can probably get away with spending 5-10 days of that on my personal projects, while still leaving plenty for proper family holidays and emergencies.

I have public holidays.

In Australia we are fortunate to have a respectable number of public holidays per year. As an academic I’m lucky enough to get a few extra “for free” (read: senior management and the union negotiated extra days of leave as an alternative to a more respectable annual pay increment). We get extra days at Easter and Christmas.

I do have some free time.

We put baby to bed between 7-7:30pm every evening. We are constantly exhausted and go to bed at 9:30pm. There’s a two hour window each evening in which I can potentially do a little work. Most nights I need to unwind and spend some quality time with my partner, or else our relationship can get strained. But on average I can probably squeeze around half an hour to an hour of “work” in the evenings, provided I’m motivated enough… It’s not quite the same as proper, focused, “in the office” work, but it’s something. I can also squeeze a couple of hours most weekends during baby’s daytime naps.

I have a game idea.

If the goal is to make a game, I have to come up with a good game idea first. Importantly, this idea has to be one that is sufficiently exciting to motivate me, yet one that recognises my limited time. I’m not going to make the next Skyrim solo in my spare time. I have to limit scope. Ideally I should probably be making a simple mobile game or arcade game, but I don’t like to play those kinds of games and I really don’t want to make one of those games. No point in trying to start a project I have no passion for.

I have decided I want to make a Diablo style top-down ARPG rogue-like with procedurally generated dungeons. To make it interesting I will use arcade elements instead of a vast world and a rich lore which are outside the scope of what I can reasonably deliver. The player will have a limited amount of time to get as deep into the dungeon as possible, while competitive leaderboards and character customisation elements will encourage replayability. See the WIP draft design documents for (a lot) more detail.

This idea is particularly inspiring to me, as it is the kind of game that I want to play, now that I have so little free time. A game that is inherently designed to be finished in under 15 minutes is perfect when you know that you only have 15 minutes to spare.

Make a plan

Alright I don’t have much free time, so I have to make sure that what little time I do have really counts. This means careful planning as per my previous blog post.

Looking at the calendar, I should be able to use a couple of days of annual leave to turn Easter into a full week break, and I can negotiate with my partner to spend a good percentage of that time working, once all the family obligations are complete.

I am going to use that window to really get stuck into implementation. I need to be able to sit down and focus for hours at a time, with few distractions, and without significant breaks between sessions. Once I’ve got a framework in place and I’m comfortably underway I can iteratively solve minor problems one at a time using my short blocks of free time, and feel like I’m still making progress, but without that initial burst of progress I find it very hard to motivate myself. Your mileage may vary, but this is what seems to work for me.

But now I have a deadline! I need to be ready to start full steam coding by April the 3rd! I’m only going to have a week, and I need to be able to get as much done as possible in that time. So my time between now and then is really valuable. There’s a lot of planning and preparation work that needs to be done to lay the groundwork.

  • I can browse the asset store to find the assets I need, and determine what I have to make for myself. 
  • I can prepare design documents and think about gameplay elements.
  • I can blog.
  • I can recruit Twitter followers.
  • I can prepare my website.
  • I can read up about solutions to the problems I know I’m going to have to solve.
  • I can prepare for marketing and promotion activities. Live streaming? Press releases? Greenlight? Kickstarter? Dev blogs? It all benefits from having some advance planning.

Clearly, I’ve already started doing these things. You can see my WIP draft design documents that outlines the game. My Twitter account has grown from 16 followers to over 350 followers over the last 6 weeks. I’ve been reading a lot about indie game development, greenlight, crowdfunding, dev blogs, blogging in general, marketing, press releases, and video production, and practicing these things where possible. And I’ve already found a great set of assets on the Unity Asset Store that are going to be perfect for my game.

I’ve also got an angle on this week of coding. I want to use this opportunity to showcase the amazing value that the Unity Asset Store offers, by demonstrating just how much one person can achieve in only a week if they make good use of the asset store. How’s this for a blog post title? “How much game do you get for $400 and 40 hours? – An experiment with the Unity Asset Store”.

Get to work?

By now I feel like I’m pretty much ready. I have a clear vision of what I want to achieve, and a plan in place to help me achieve it. There’s still plenty of things that I can do in advance, but I could start work tomorrow and feel like I was using my time productively and efficiently.

There is still one significant problem left to solve though. The game I want to make is still too big. It’s small enough that I can make a good start in my one week coding spree, but it’s not going to be feature complete, and it certainly won’t be consumer ready. I know from experience that if I cannot keep sustained momentum on this project throughout the year then it will eventually be abandoned. This has happened too many times before.

To a certain extent this problem can be solved by cutting scope. But for the style of game it is, the scope is already quite limited… Cutting it any further risks making the game disinteresting, un-fun, or lacking in replayability. Game designs are like plants. Pruning them back can be beneficial if you go about it in the right way, but if you go too far then the plant will simply die.

Stay motivated

This is where you come in, Dear Reader. I need you to want this game to be finished, I need you to put the pressure on. If I know the demand is out there, then the motivation will flow.

Follow me on Twitter, and feel free to heckle. Many of my best achievements have been motivated in part by wanting to prove other people wrong.

Salvador Dali knew how it was.
Salvador Dali knew how it was.

Unity Asset Store: Buying time with money

The fundamental premise of my grand plan to make an overly ambitious game this year, despite having virtually no time to work on it, is that I can buy tools and assets on the Unity Asset Store that will save me months of hard work. I actually looked extensively at what was available on the asset store before I decided to go with my time-limited Diablo-styled rogue-like ARPG game idea, 15 Minutes. The deciding factor was the sheer amount of high quality and very affordable stuff that I could buy from the asset store and use without much too much modification in this game.

This post is going to be a living post, wherein I list each of the assets I am considering buying and have bought, and describe my reasoning for buying them over other assets, as well as my trip report once I actually make use of the assets.

Environment Graphics

Since I’m a programmer with extremely limited 3D modelling and art skills (I once had significant difficulty texturing a cube the way I wanted it), the most important thing to make this project viable was that I could purchase all my 3D models. I definitely don’t have a year to practice my 3D modelling, and I don’t have another year after that to make all the models and materials I’m going to need.

When I first started browsing the asset store I immediately discovered the work of 3DForge. This guy has spent the last 2 years just making a phenomenal amount of fantasy themed graphics, all with a consistent semi-cartoony style, and all 100% game ready. After a couple of days of idly flicking through all the competitor products my mind was firmly made up, and I pulled the trigger on four huge packages that he’s released. Totaling $120 I have already purchased basically every model I would need to create this game… And it’s AAA quality as well, so I’ve made my game look way more awesome than I otherwise could have dreamed of, at the same time as saving hundreds of hours of work. Win-win.

Follow him on Twitter if you like what you see, he sometimes puts his packs on sale and announces it on his Twitter account.

Village Interiors Kit

This is an all in one fantasy interiors kit. It’s a lot more than just “village interiors”. It’s basically a mega pack, with over 2500 prefabs included and game ready. It even includes arguably all the weapons I need.

TaD – Sewer Kit

This is a nice sewer level kit, designed specifically to be suitable for “tile a dungeon” style games.

Fantasy Treasure Loot Kit

Various chests, scrolls, books, crates, barrels, coins, ingots, rings, amulets, potions. Going to make use of a lot of this stuff!

Particle Effects

Magic Projectiles 1.5

I grabbed this on sale for $10. It’s got a full set of game ready standard spells. Contrary to the title, it also includes shields, domes and auras, as well as projectiles. This one purchase got me every particle effect I needed to make the spellcaster class for my game. I’m not very good at making particle effects, so this purchase will have both improved the visual feel of my game, as well as saved me a lot of time. Twitter.

Scripts/Tools

Full Inspector: Inspect Everything

This nifty little extension to the MonoBehaviour class allows you to tinker with a significantly extended set of data structures using the inspector. Unity will let you play around with arrays, strings, ints, floats and the like… But Full Inspector takes it to the next level, letting you edit things like Dictionaries. It even deals with generics. Super useful.

DunGen

This procedural dungeon generator is super cool, and is basically a more polished and refined version of exactly what I had in mind when I started thinking about this project. It essentially allows you to build dungeon tiles of any size. You just tell it where the doors are (supports doors of all different sizes and shapes), define how likely things are to spawn and where, and then tell it to generate a dungeon. It figures out the rest. I’m basically 100% sold on using this as my procedural dungeon generation solution, but it’s $75 so I’ve just left it in my wishlist for now. If it goes on sale at some point before I’m ready to start coding then I’ll snap it up. Otherwise, I’ll just buy it when I need it. Twitter.

SimpleLOD

I also got this one on sale for $10. I’ve yet to use it, but as someone who has wasted whole work days setting up LODs in the past, the promise in the product description was enough to convince me that it would be a good investment. Not only would it do the decimation of your models, but it promises to also automatically set up the LOD levels for you. This is a fairly tedious process in Unity, so it’s potentially a great time saver. Twitter.

HerdSim

I grabbed this one on a whim when it was on sale for $8.75. I’ll use it to set up minor environmental critters like rats and cockroaches. Since these guys are just for atmosphere they don’t really deserve a proper AI, so it should be cheaper to just use HerdSim to let them wander about in a semi random fashion. Twitter.

RAIN

This is actually free, but it’s pretty awesome so it needs to be mentioned all the same. RAIN is an all-in-one behaviour tree based AI solution for your NPCs in game. Super importantly it includes its own Navigation Mesh solution which is in some ways superior to the built in Unity NavMesh system. In particular, it can be used to generate NavMeshes during runtime, and it’s pretty quick to do so.

Using RAIN I’ll be able to quite easily define a range of simple behaviours for the various types of NPC in my game. All the NPC movement and player detection stuff, which would normally be quite challenging, is going to be super easy. This free asset singlehandedly makes the game I want to create a whole lot more achievable… I’d go so far as to say I probably wouldn’t have attempted this project if RAIN wasn’t available. There is a learning curve, and the documentation leaves a little to be desired, but once you know how to harness it this tool has a lot of power. Twitter.

TextMesh Pro

I don’t strictly need this tool for this project, but since I already have it I’d be stupid not to use it. It makes it really quite easy to create cool graphics text effects within world. It’s a lot better than Unity’s built in text meshes. I’ll use it for menus, tutorials, title-screens, etc. It’ll make them look much more professional, distinctive, and cool. Twitter.

Characters

Mixamo Fuse

I already have Mixamo Fuse as part of my All Access subscription. I can use this to make any human and zombie characters I need. I’ve used it previously, it’s really quite good, and the ability to just upload your character straight to Mixamo for automatic rigging and animating is awesome.  Twitter.

I can also grab pre-made characters/monsters and the like from Mixamo too. There’s about 100 available on their store, which are all at my disposal thanks to All Access.

Monsters

You can get quite a lot of monsters and the like for free on the asset store. The quality is a bit variable though. I’m not 100% sure what I’m going to do here. I may need to buy some for specific NPCs. I’ll play this one by ear! Let me know if you have any recommendations.

Forest Creatures Pack

This bundle of creatures is nicely optimized, cute, and provides me with a broad base of creatures with a good selection of sensible animations for this type of game – melee, projectile, spell, damage, death, idle, walk, run. By providing a range of colours for each monster the creator gives me the easy option of using different versions of the same creature at different levels of the dungeon. Ideal for the kind of game I’m planning.

I do have some reservations about how well the art style will mesh with the rest of the graphics assets in my game, but I’m fairly confident. The environments are semi-cartoony already, just not quite on the same level as these creatures. We’ll see how it goes. I got this on sale for $75, which is a good price, but not cheap. Hopefully it works out. Twitter.

Animation

Mixamo

As mentioned earlier, I already have an All Access subscription. The Mixamo animation library is absolutely huge, reasonably easy to use, and very much game-ready. All my movement, attack, and defense animations will come from Mixamo. I’ll just have to make the Mecanim animation controllers myself – but that’s pretty unavoidable. Twitter.

Sound

Universal Sound FX

Got this pack for $10 on sale. It’s got a lot of sound FX that are game ready. Most of them I will not need for this game, but they may come in handy for future games. There are a ton of useful sounds for this game though – weapon clashes, spells, arrows, and heaps more. I could have just gotten these sounds off freesound.org, but then they’d be varying levels and require a certain amount of massaging in Audacity before I could use them. The $10 I spent here will save me quite a few hours of trawling through and editing sounds. Well worth it. Twitter.

Fantasy Music Collection?

There’s a lot of good music options on the asset store that would suit this kind of game. The one I’m most impressed by at the moment is the Fantasy Music Collection, but I’m not 100% convinced just yet, and at $30 it’s more than I’m willing to spend without being convinced.

The problem I have is that I want the game to be distinctive and recognisable. A really canny music choice can make all the difference. The biggest problem I have with the music packs on the asset store is that most of them have been used quite a few times already, so you lose the personal touch. I’ll keep my eyes open for a while yet. But if it comes on sale I might just buy it, because even if I don’t end up using it in the final product it’d be a great placeholder for the alpha and beta releases.

Cut-scenes

uSequencer

There’s not a lot in the way of cut-scenes I need for this project. Really just one for the opening story that sets the scene, and maybe another for the closing scene.

I could do these manually without too much trouble, but when I saw uSequencer on sale for $22.50 I figured it was time to pull the trigger on it. It will make this activity easier, and there’s always scope to use it in plenty of other projects!

I did hesitate, because Unity have teased a similar set of features coming natively to Unity “at some point during 5”, but who knows when that will be, or how complete it will be. Twitter.