Problems I ran into while making Two Player
I wanted to do a quick breakdown of how it all worked and the problems you have to think about when making a game-within-a-game and the problems that come with it
First off, if you haven't already, please go play Two Player!! It's about 5 minutes long (about 15 if you do all the endings), and this post is going to have a lot of spoilers.
Problem one: Idea
I decided to 7DFPS before I really had an idea of what to do, so on the day it started I went through some of my old sketchbooks to see if there were any good ideas and I decided to do this one (sorry for the indecipherable handwriting)
So to start out, I knew that I wanted to make a game about two people playing a video game, focusing on the social interaction between them, and the social ramifications of the decisions made in-game. Initially it was going to be a parent-child pair playing an old 2D zelda-like game, but I decided to make it two friends playing an FPS instead, for a couple of reasons:
- It's for the 7DFPS jam
- I don't have a kid and I don't play video games with of my parents, so I wasn't sure if I could write believable dialog with those two as a pair
- Both FPS's and 2D adventure games can be coop, but FPS's are commonly more typically to be team-based. They also often force you to depend on your partner (eg. being defended by, or sharing resources or information with), but also give opportunities to frustrate or disappoint your partner (eg. friendly fire and resource hoarding)
Problem two: Basic implementation
So I knew the general idea was to:
- Make a believable shooty-shooty zombie video game with an AI partner
- Make an environment where two people would play the game, and build a chat system
- Render the FPS game inside the dialog game, and hook up events in the first game to dialog triggers in the second
The first two steps were pretty straightforward - building a basic FPS is pretty quick in Unity, and a dialog system isn't too hard, and I'm not going to go into the technical details of those here. The third point is where it gets a little trickier.
To implement it you just put the two games next to each other, and put a camera in both. You can then use Render Textures and Projector shaders to render the contents of the secondary camera on a quad placed in the first game, and mess around with it a bit in order to make it look like it's a projection (like washed out colours and some bloom).
So far everything has been kind of plain sailing. The Big Problem is really from the game design side and how to balance the two games while making them feel like they're making sense:
Problem three: how to make the one game feel connected to the other
So there were a few problems in this area:
- What happens if the person playing is wrapped up in the FPS and doesn't read any of the dialog? If the FPS is too hard or too hectic, then they won't have a chance to read the dialog, or just won't want to
- How do you make the partner in the FPS feel like the partner in the living room, rather than just two disconnected NPCs?
- What happens if the player walks into a zombie and dies in the FPS at a crucial point in the dialog? What if the player just isn't very good at shooters, and can't get to get to the end of the game without dying?
- How do you get the FPS level to line up with the dialog? How do you do this when the dialog is also dynamic based on the players choices???
The answers to these questions were a big part of whether I thought the game was "good" or not. There were points where I just thought there was no way of sticking the two halves together properly and I thought the game was a good idea in theory but awful in practice.
I don't think the game is perfect, but I think I eventually came up with decent solutions for these problems:
How to get the player to play the FPS while reading the dialog - my solution to this was a bit hacky - the idea was just to overlay the conversation onto an area of the FPS game. Before they were side-by-side, which meant that it was really easy to just accidentally ignore the text and just focus on shooting zombies, but just nudging it to the right interrupted enough to get the player to read the text.
How to make the friend feel connected to P2: This was a bit tricky. To solve it, I tried to include dynamic dialog that (hopefully) triggered early in the game, that "glued" the dialog with the shooter. These was the "you're character is huge" bit when you first get up close to look at them, and the "nice teamwork there haha" line the first time you and P2 shoot the same enemy. Because both of these were dynamic, it's possible that these happen later in the game, but I hoped that they would happen early enough to develop some sort of empathy before the healthpack choice.
Death in the FPS - The main choice in the game is whether to take both healthpacks or not. I wanted this to not be an obvious "GOOD CHOICE VS BAD CHOICE" binary thing with a straightforward answer - so you've got to give a tangible motive for getting the healthpacks, and a tangible motive not to. The motive for leaving them is because P2 just said to keep an eye out for them because they're low on health. The motive for taking them is because you yourself need health.
For most of development, the player never had a health bar - they were effectively just invulnerable. This was useful for dialog options, because I didn't need to worry about having to handle the case of the player dying mid conversation, or thinking about how the game would continue. On the other hand, no health bar immediately makes the healthpack question pointless - it makes it very obvious that the healthpacks are just a empathy cue, because you have no need for health, so you have no motivation for taking it. It also means that the player is likely to not care about getting hurt by zombies, and the "realism" of playing a FPS is lost, because you can just walk to the end without shooting anything. But allowing the player to die and ending the game abruptly felt wrong - because it could happen at any point, I just couldn't imagine any dialog that would give a decent feeling of closure to the game.
The compromise here is to pretend that the player can die, but actually not allow it. I added a big obvious health bar, and made it so if a zombie gets too close then the healthbar goes down, it makes a thud noise, the screen goes red. But the healthbar doesn't go down to zero - each time you get hit, a smaller amount is lost. Before you get to the boss, the lowest your health can be is 30%, even if you've just been beaten up by every zombie on the way - but it can't go lower. The plan for this was to strongly indicate to the player that you can die in this game (even though in reality you can't). This tries to give weight to the concept of death, something that is essential in FPS's, but doesn't cause a bunch of issues for the dialog portion of the game. (It's worth noting that you stop being secretly invincible if you've somehow caused the partner to leave - dying in that scenario is the Bad Ending)
Getting dialog to sync with the FPS level design - There's no way of really "fixing" this in the general case, it was just a lot of refinement of zombie placement and level layout. I tried to get conversation to happen during lulls in the shooting, to feel more natural and to not split the players attention too much. If conversation ever branched, I had to make both branches of it approximately the same length, so they wouldn't cause timing issues with other conversations. The reason for the massive long walk before the boss is so these post-decisions conversations can take place, and there's no enemies there because I wanted the player to be fully focused on the text.
Was it a success?
Overall, I'm pretty proud of Two Player. It got covered by Warp Door and Alpha Beta Gamer, and even got listed in Game-Curator's Game Jam Game of the Year 2020 list.
There are some awkward parts of it that I definitely would fix if I had more time on it, sure, but overall I think managed to do what I was trying to do, and I'm overwhelmed by people's nice words in the game's comments
Leave a comment
Log in with itch.io to leave a comment.