Back to Portfolio

Grapple Grub

A 3D multiplayer action-adventure platformer

Gameplay Programmer and Level Designer2023Game

Live demoTeam site

  • Unity
  • C#
  • Photon
  • Maya
  • Photoshop
  • Illustrator
  • Trello
Grapple Grub

Grapple Grub is a 3D multiplayer platformer set in a flooded, neon-lit future city, where the players are delivery robots for the food delivery giant Foober Uoods. They run, jump, and grapple between buildings to deliver orders before they go cold, and spend their tips on new abilities and harder levels.

We made it as Grubby Games, a team of twelve students at Drexel University, over the 20 weeks of our junior game workshop. I was one of its gameplay programmers, and designed levels for the single-player mode.

A traffic system tool

The city needed traffic: hovering cars streaming along the streets between the players' rooftops, and obstacles to dodge. I built it as a Unity tool, so the level designers could lay out a traffic path, choose its vehicles and obstacles such as traffic lights, and set how busy it runs, all from the editor.

Cars spawn at random points around each loop, but never closer together than a safe distance, including across the seam where the loop closes:

TrafficPathFormer.cs
C#
// Place cars around the loop at random, but at least _minSafeDistance apart:
// pick sorted random offsets within the length the safe distances leave over,
// then push each car one safe distance further along than the car before it.
// The gap from the last car back around to the first is at least
// _minSafeDistance too.
private float[] GetSpawnTimes(int count)
{
  float slack = _length - count * _minSafeDistance;
  float[] times = new float[count];
 
  for (int i = 0; i < count; i++)
  {
    times[i] = Random.Range(0f, slack);
  }
 
  System.Array.Sort(times);
 
  for (int i = 0; i < count; i++)
  {
    times[i] += i * _minSafeDistance;
  }
 
  return times;
}

The whole tool is in this gist.

Online multiplayer

I built the multiplayer on Photon: the lobby, public and private rooms, and keeping every player's game in sync once a match starts.

Movement and levels

I added a smooth mantle that carries the player up and over a ledge they catch, so a near miss keeps the run going instead of ending it. I also designed several of the single-player levels.

Screenshots