Project: Homing with a Twist

Role: Personal Project

Skills: Technical & System Design

Origins of this project

To show off and build on our skills, a group of designers and I tasked ourselves with listening to a GDC talk and then implementing what we learned. For this project, I decided to watch The Many Dimensions of Kirby talk from GDC 2023. Overall it was a great talk, with the developers talking about how they improved the experience for their first 3D Kirby game Kirby and the Forgotten Land as well as the Nintendo Switch re-release of Kirby’s Return to Dreamland Deluxe.

Between 10:30 & 15:30 in the presentation, the developer talks about how they got Kirby’s star spitting to work in 3D. The basic idea is, that since Kirby is round, properly aiming his ranged attacks is hard since you can’t really tell which way he is looking. To get around this they added homing to his attacks, but they used many clever little tricks to make it not feel like homing and that the player was aiming properly. After watching the rest of the talk, I decided to implement this system. To make sure I didn’t just copy the talk though I also put the following limitations on myself:

1. I could not re-watch the talk until the project was 100% complete

2. I could not copy the targeting system (all enemies having a value on them to determine which one was homed in on)

3. I had to use a round character to make sure aiming was just as hard as in Kirby and the Forgotten Land

4. Players should be able to aim well, while not noticing the homing like Forgotten Land

Designing the system

After getting my player, camera, projectile, and enemies set up it was time to work on the homing system. First I decided that it was unimportant for the player to consider enemies that aren’t in front of them. While Forgotten Land has points for all enemies on screen, Kirby never shoots backward at an enemy or does a 180 to shoot backward even if enemies are only behind him. When figuring out which enemies to target, I choose to use a cone-shaped trigger in front of the player. I also flattened the cone so it wouldn’t take enemies above or below the player into consideration, however, this was changed to be a little less flat later as it was hard to hit enemies when jumping due to quickly passing them. Whenever an enemy entered the range, that enemy would be added to a list, and then whenever the player shoots it picks the closest and sends that data to the projectile.

Once the projectile is fired, on the first frame in turns 500 times more than any other frame to correct itself then slightly rotates (0.1 degrees) every additional frame until it hits the enemy, or if the player aimed too far off, it will stop steering left or right once it passes the enemy and moves away; it also moves at a speed of 20 meters a second. It’s also important to note that the projectile takes into consideration whether it was fired in the air or not, if it was it gets an even stronger homing of 125% for the entire duration. Finally, there is a bit of extra strength to the turn at longer ranges with it going up as the star’s lifetime increases. While it may seem like a problem, stars pass/hit their targets, at most, 2.5 seconds into their lifetime, so it isn’t noticeable.

For why I chose those numbers, they all just felt right. If the homing was any stronger, it would make it too obvious that it was homing in on the enemy, and missing would be too hard. Meanwhile, if the homing was any weaker, aiming would be way too hard and things that felt like they should have hit, wouldn’t.

Gameplay with Homing

Shot comparing homing to no homing

Gameplay with no homing