I recently released my 7th short adventure game. If you haven’t already played it, go and check it out now, I’ll wait.
Well, what did you think? Are you enlightened?
The game was an entry for the $108 Adventure Game Challenge, and I’m happy to say it ended up finishing 3rd overall, tying with my previous 2-week game jam entry The Alignment Paradox.
As well as being my 7th game, it was the 5th game I’ve made using PowerQuest, a super awesome Unity tool for making point and click games, developed by Dave Lloyd of Powerhoof. With 5 PowerQuest games under my belt, I feel like I’m finally getting to grips with it, so instead of a post about my game, I thought I’d share a few tips I’ve picked up over the last year and a bit – like one of those “What I wish I’d know when I started” videos that are all the rage.
If you’re thinking about trying PowerQuest for your next project, hopefully some of these tips will come in handy for you!
1. RTFM (Read the F***ing Manual)
Despite how easy PowerQuest makes it to develop your own point and click adventure game, it’s not something that you can just dive into without any knowledge of how it works. You’ll need to at least learn the basics of how to set up a room and create your characters. If you just try to wing it, you’ll almost certainly end up getting in trouble.
As a starting point, watch the 40 minute intro video, which covers pretty much all of the basics. Also read the Getting Started guide. With those you should have just enough info to start setting up a game, but I would strongly recommend watching the rest of the PowerQuest tutorials, especially the one that covers the dialogue system, and going through the Editor Manual. It’s always tempting to skip this part, but the more you know going in, the less likely you’ll be to make time-consuming mistakes.
2. Use Unity 2020
If you started with tip #1, you’ll already know this because it’s the first thing on the Getting Started page of the documentation:

Still, this deserves its own tip, because you’d be surprised how many people miss/ignore this recommendation and dive in with a later version of Unity only to wonder why they end up having trouble.
I get it. Unity 2020 is over 4 years old (at time of writing), and it stopped getting updates in 2023, so it’s natural for people to want to use a more up-to-date version.
However, the reason 2020 is recommended is because that’s what PowerQuest has been built around, so all of its features are known to work well in that version of Unity. It may seem counterintuitive not to use the newest available version, but Unity 2020 is very stable after receiving almost 3 years of updates and fixes, making it a very solid choice for 2D adventure games, which don’t generally need all the bells and whistles of the latest versions.
I’ll note that several developers use PowerQuest with Unity 2021 and don’t appear to have too much trouble, but unless you have a good reason, like specifically needing a feature of a later Unity version, my advice is to just stick with 2020. You’re free to use any version you like, but you’ll pretty much be on your own if you run into any compatibility issues, and changing versions midway through a project is not gonna be much fun.
3. Use the QuestScript Editor
One of PowerQuest’s most useful features is its QuestScript editor, which makes scripting your game more like writing a movie script than a computer program. For example, instead of writing C# code like:
yield return C.FaceClicked();
yield return C.Dave.Say("Hello.");
yield return E.Break;You can just write:
FaceClicked
Dave: Hello.
EndThis is a huge timesaver, especially if you’re not an experienced developer, but besides that, it just keeps things simple. One of the most common reasons I’ve seen new users getting tripped up is when they have a bit of C# experience and they end up trying to write C# code in the PowerQuest editor and run into all sorts of problems.
It’s worth noting that PowerQuests converts all the QuestScript code to C# behind the scenes anyway, and you can always click the handy “View C#” button to open the current .cs file in an IDE, so if you do want to any fancy coding, you can do it that way.
But the best advice I can offer is to stick to the QuestScript editor only to begin with, at least until you’re familiar with the basics. Once you’ve got the hang of it, you can start building fancy new mechanics in C# if you need to.
4. Leave the sprite pivot alone!
This is another common issue I’ve seen, which essentially stems from neglecting tip #1.
When you first create a character, their baseline is in the vertical centre of the sprite, instead of at their feet where it should be.

At this point, if you already have a bit of familiarity with Unity, you might go into the ‘Sprite Editor’ and move the sprite’s pivot point so it aligns with their feet. That will appear to solve the problem, and if your character only has a single sprite for now, you won’t notice any issues.
But when you come to add more animations for the character, each with multiple sprites, you’ll need to edit the pivot point on each individual sprite, and if they don’t match exactly, your character will jitter around as it animates.
The correct way to do this is far simpler. Just find the Character Pivot setting in the Character Component, and adjust the Y value until the baseline lines up with the characters feet.

That’s it! This will apply automatically to any new animations you create for this character.
Note: This setting was previously called “Offset” and could be found in the PowerSprite component of the character. In fact, it’s still there too, and the settings are linked, so changing the “Offset” values will also change the “Character Pivot” values, and vice versa.
5. Use the default GUI
PowerQuest does have its own GUI system that lets you create your own custom user interfaces, but it’s a bit more complex than the basics of scripting props and characters etc.
So for you first project, or if you’re entering a game jam with a time limit, I’d suggest sticking with the default GUIs that come with the PowerQuest template games. Wrestling with custom GUIs too soon in your journey tends to lead to frustration and might sour your experience. You can always edit the GUI sprites to make the colours match your theme, but save the actual GUI editing until you have more time to get to grips with it.
At some point, you will want to start making your own GUIs, and for that I’d definitely recommend watching the GUI system tutorial video before you dive in.
6. Use testing shortcuts
Making a game involves a lot of testing. Sometimes you might be testing a puzzle that can only happen after a bunch of other stuff has happened in the room, and you don’t want to have to go through all the previous steps every time you want to test that puzzle. Fortunately there are a bunch of handy shortcuts you can use to make this testing more efficient.
Keyboard shortcuts
The most basic shortcut is simply holding down the “.” (period/full stop) key, which speeds the game up and skips all cutscenes so you can speed through a scene much faster than usual.
Another handy one is hitting ~ + F9, which instantly resets the current room. This is a million times faster than exiting Play mode and entering it again.
EnteredFromEditor
If the room you’re working on has a sequence of things happening when you first enter, you don’t want to have to sit through that every time you load the room. To avoid it you can wrap it in if ( R.EnteredFromEditor == false ) so that the whole thing will be skipped when you load the game from the Unity editor.
PlayFrom functions
These are functions you can add to a room to set up specific game states for faster testing. For example, say you’re working on a puzzle where you have to give some seeds to a bird so it will give you a feather, but in order to get the seeds, you first have to pick up a cup, use it on a tap to get water, give it to another character, and then go through a long dialogue tree until he gives you the seeds. Doing all of this every time you want to test the feather puzzle would take forever (even using the ‘full stop’ shortcut mentioned above). So instead you can create a PlayFromGotSeeds function, which adds the seeds to your inventory, hides the cup, and sets any other variables that need to be in place in order for you to test the feather puzzle.
Now if you select that ‘Got Seeds’ function in the Play From menu, when you start the game you will already have the seeds, so you can just give them directly to the bird, without having to do all the other stuff first.
To begin with, it can seem too time-consuming to set up these functions and you might be tempted to skip them. I know when I made my first PowerQuest game I relied on the “full stop” shortcut way too much and didn’t really make use of these functions. But if you take a couple of minutes to set them up, they can save you hours in the long run.
7. Enums are your friend
The simplest way to keep track of what has happened in your game is using global variables e.g. add bool m_talkedToLlama = false; at the top of your global script, and then when you talk to the Llama, set Globals.m_talkedToLlama = true;
These are easy to understand, but as your game gets more complex, they become pretty hard to keep track of. They’re still the best way to track things that only have two possible states, e.g. if a door is open (m_doorOpen = true;) or closed (m_doorOpen = false;). But if you’re working with something that has several possible states that have to happen in order, then you’re better off using enums.
For example, let’s say you have a puzzle where you have to make toast, and you need to keep track of where you’re up to. You can add this in your global script:
public enum eToast { None, GotBread, Toasted, Buttered }; public eToast m_toast = eToast.None;
Then as you complete each step, you set the state accordingly, e.g. when you get bread:
E.Set(eToast.GotBread);
And if you want to check if the bread has been toasted yet:
if (E.Is(eToast.Toasted)) ...
Enums can be tricky to wrap your head around at first, but once you get the hang of them, you’ll never go back.
8. Skippable cutscenes
One of the most frustrating things in any video game is cutscenes that can’t be skipped. Sure, some cutscenes might contain important information, and you want to make sure the player doesn’t miss it, but if I have to watch the same cutscene every time I perform a certain action, and there’s no way to skip it, I’m probably gonna give up on that game pretty fast.
In PowerQuest all you need to do is add StartCutscene and EndCutscene, and anything that happens in between those lines can be skipped by pressing Escape. Simple as that. Use it liberally, especially if you want the game to appeal to speedrunners.
The one thing to keep in mind is that if a cutscene does contain important information, make sure the player still has access to that information even if they skip the cutscene.
9. Identify your bundle
Believe it or not, there are people out there who play games on a Mac! Ok, I confess, I am one of those people. Don’t hold it against me.
Anyway, making a Mac build of your game in Unity generally doesn’t require any extra work, so you might as well make the game available to as many people as you can, right? (Make a Linux build too, while you’re at it).
But there’s an interesting quirk you should be aware of when building for Mac. This came up during a game jam last year, when I played someone else’s game, and the restore screen was showing saved game screenshots from a different game entirely!
It seems that the save game system on Mac relies on a ‘bundle identifier’ to determine which game is being saved. This can be found in Project Settings > Player > Other Settings. By default it’s set to com.DefaultCompany.2DProject

If you don’t change that before you build your game, and another game has the same default bundle identifier, then the system will identify those as the same game, and you’ll have the same issue with saved games.
To fix it, you just need to go up to the top of the player settings and edit your Company name and project name:

Then back in the bundle identifier settings, toggle the “Override default bundle identifier” setting off and on again, and you’ll have yourself a nice unique bundle identifier that will prevent any saved game issues:

10. Consume!
This last tip is pretty specific, but I’ve seen it come up a few times, so I thought it would be worth sharing.
To understand it, you need to know the basic difference between ‘blocking’ and ‘non-blocking’ functions.
Blocking functions are things that generally happen over multiple frames and the script waits for them to finish before continuing, e.g. character movement, saying dialogue lines etc.
Non-blocking functions are things that happen instantly in a single frame, e.g. showing/hiding props, adding/removing inventory items, changing characters position/orientation.
Normally, when you click on a prop, you’ll probably want to run some blocking functions, e.g. have the player walk to the item you clicked on, and maybe play a ‘pick up’ animation before hiding the prop and adding the item to your inventory.
But in some cases, you might have only non-blocking functions in there, e.g. if you click on a door, and the character doesn’t have to walk to it (maybe they are in cupboard or something), you would just have the face the door and then change rooms, both non-blocking functions.
This will work, but you’ll also see that the script falls back to an ‘Unhandled interaction’ so you’ll click on the door and it will change rooms, but it will also say “You can’t use that.”
To get around that, you need to add a “ConsumeEvent” after your non-blocking functions, to prevent it falling back to an unhandled interaction.
In QuestScript, you just type ‘Consume’, so it looks something like this:
FaceClicked
Plr.Room = R.Bedroom;
ConsumeYou might never need it, but if you find your game unexpectedly saying “You can’t use that”, it could be that you need a Consume.
Bonus tip: Get on Discord
Hopefully you’ve learnt something from these tips, and they’ll make your introduction to PowerQuest slightly smoother. However, at some point you will undoubtedly come across something you don’t know how to do, or something that doesn’t seem to work as expected.
At that point (or preferably sooner), it’s time to jump on the PowerQuest Discord and ask for help. Either Dave himself or one of the other Questers (maybe even me!) will be able to help you out. Just make sure you have first exhausted tip #1!
Got any tips of your own? Share them in the comments.






Leave a Reply