Sponsored By

Logistical Problem

In designing Bonbon, I decided that I didn't want the player to be able to carry objects over distances. Players didn't like that, so I found a compromise.

Nick Bell, Blogger

November 6, 2017

6 Min Read
Game Developer logo in a gray background | Game Developer

After being on itch.io for a few months, Bonbon, Aetheric Games' first-person domestic-horror narrative game, launched on Steam in time for Halloween, with the help of Pixeljam. I was honoured to have it mentioned in the spooky round-ups of both PC Gamer and The Telegraph, as well as previously getting a great review in Rock, Paper Shotgun.

The post below refers to the Steam release update, and was first published on the itch.io devlog on 17th October, where you will find some more devlogs from earlier in the year.

 

In the previous post [on itch.io] I announced that there will shortly be a new version of Bonbon, also hitting Steam as well as itch.io. In the change log, observant people might have noticed:

- You can now move around whilst carrying objects, within limits.
- You now have to hold 'R' or gamepad 'Y' to rotate held objects.

The original release (and the one on sale on itch.io at the time of writing) didn't allow you to move while you are holding objects, whereas the new version does. This post is to explain firstly, why that was such a big change in design terms, and secondly why it was an easy change to actually implement.

One of the first design goals of Bonbon was to make the player feel like a small child. One way to do this was by a small tweak to the HUD - see the Preschool Reticule devlog. Another way was by limiting your movement, to remove some of your agency against your environment. A toddler has very little agency in the setting of their family home. I decided that I didn't want the player to be able to run, jump or climb. I did want you to be able to go under and through things, but not by virtue of ducking, just by virtue of being small. That's why the player character automatically stoops a little when next to the table - it should feel natural to go under there.

I also decided that I definitely didn't want you to be able to carry objects over distances. Pick them up, give them a little throw, maybe even push them along, but not pick them up and carry them with you. That's more power than I originally wanted my little protagonist to have. If mummy tells you to put a ball in a box across the room, that's not a simple task. It takes both your little hands to hold that ball, and you need those to balance. You can't do these things you take for granted. The toys have a price - holding them makes you vulnerable.

I thought that mechanic worked OK. I mean, it was a good example of ludonarrative consonance, but reactions to it were very mixed. Some people barely noticed, others hated it with a passion. The Kotaku review is very two-sided, including some high praise as well as damning scorn. The scorn is based entirely around the tidy-up tasks and not being able to complete them by carrying, even though Matt sees thematic reasons for it. Some people found it very tedious. We all have different thresholds for tedium.

So, when fixing some bugs and integrating Steamworks for version 2.0, I had the opportunity to revisit this mechanic. My goals were:

  1. To allow players to move whilst holding objects, if they want to.

  2. To still make holding objects feel disempowering.

  3. To not make the tasks much easier or quicker or grant any new agency.

What I came up with is this:

  1. You can now move while carrying objects, but only for a short while.

  2. Carrying tires you out quite quickly and your movement speed drops towards zero. A short rest will recharge you. The numbers behind this are hidden from the player.

  3. If you push it too far, you will stumble and drop or throw the object anyway, so it doesn't change much.

In this gif, the protagonist is toddling along with the bouncy hopper to the extent of his little endurance, but since the player is still pressing forward, he stumbles and drops it.

I also think that since this is more similar to the standard first person physics interaction model that people are used to, it will be far more acceptable.

Incidentally, carried objects in Bonbon are not physically simulated. That made it really easy to add the player movement back in. To explain the difference, I'll use Portal 2 as an example.

Wheatley in Portal 2

Wheatley in Portal 2

You might notice, in Portal 2, when you are carrying Wheatley, the professionally idiotic AI core, it's impossible to get him stuck on the environment. He never clatters around or clips through geometry. It just works. That's because he's not physically there, he is being rendered as part of the player's view model, a separate 3D environment usually just used to render weapons. To a certain extent, he is moved closer or further from your view to make it seem like he is filling the space available, but you can actually walk right up to a wall so that it is right up to your face and there is always room for Wheatley. Compare this to carrying a cube or a turret around. It's much easier to get them stuck on the environment, jam them in machinery, drop them down a bottomless pit, etc.. In the confines of a test chamber, where the geometry is deliberately simplified and the objects are disposable, that works fine. When you're carrying an essential character/item along narrow walkways and around machinery, it's a different story. My guess is that this was Valve's main reason for not physically simulating carried-Wheatley.

Bonbon's scenario is similar. There are tables to get under, couches to get behind. A semi-realistically proportioned human house is no place for gravity-gun style logistics. What's more, many of the toys are essential to progress: I didn't want an important toy clipping through the garden fence or pinging over the roof. So I did something similar to carrying Wheatley. Unreal doesn't have built in view models, like Valve's Source engine does, but in Bonbon, when you pick up an object it ceases to be a physically simulated object in the world. It's main body become's a purely kinematic, massless illusion that maintains an offset just in front of you. (In games dev, "kinematic" means that a body moves and animates in authored or programmed ways, rather than physically simulated ways.)

When you let go, it becomes physical again and forces are applied. It made objects easier to manage. The objects, while you are carrying them, avoid clipping through things by moving upwards when they are near potentially intersecting objects. It works OK, because it looks like you are lifting the object over low obstacles, or like you've dropped it for bigger obstacles. Butter fingers! *eyeroll*

That means that, in Bonbon, if you are carrying a ball and you walk towards the wall, the ball won't clip through it or start to jitter as it gets trapped between you and the wall, but it will appear to float in front of you until you get too close to the wall, at which point it is tossed out of the way and falls to the ground as a physical body.

Read more about:

Featured Blogs

About the Author

Daily news, dev blogs, and stories from Game Developer straight to your inbox

You May Also Like