Technical Explainer: Powering Up with Launch Pads

Hi everyone! For our second Technical Explainer, we’re going to take a look at our collaborative philosophy through the lens of a key feature in Hytale: launch pads.

My name is Anna, and I’m an engineer on the Gameplay team. Our space is particularly interesting because it’s the perfect mix of problem solving and creativity. We’re responsible for features like crafting, movement, UI, and most recently, launch pads. 

Like many creator teams, Hypixel teams work remote and are made up of people from diverse backgrounds. To succeed together, we need to find a way to collaborate together, which is why having a collaborative culture is so core to who we are. In this article, I’m excited to share with you some collaboration and feedback oriented strategies, and how they were critical for the development of our launch pad feature. 

Why Do We Collaborate?

Software engineers often find themselves working within their own bubbles to problem solve, but making a game is a creative process that requires collaboration with team members from different disciplines. Our designers may be working in entirely different aspects of the game, but without talking to them, we wouldn’t know enough about the tools we’re making. We also rely on artists, audio, VFX, and production, and actively collaborating with them gives us the invaluable benefit of their viewpoints. Us engineers are also full of creative ideas, and being able to share these and bounce our ideas around helps with the ultimate goal of creating player-serving content. 

The Feature Team

The Gameplay team consists of 3 engineers, 2 tech designers, 2 quality analysts, and 1 producer. We’re responsible for the gameplay surrounding the player experience within the main Hytale Capital and on player islands. This space requires active daily teamwork, with tech design as a vital consumer of the engineering work for the team. They create prototypes, iterate on smaller features, and provide feedback. 

Having a multi-discipline team with embedded resources gives us quick response times, faster iterations, and a more trusted creative process. And working closely with other disciplines for brainstorming and creating during the design process is the most valuable collaborative tool–and the best preventative medicine for bugs and tech debt. Failure to be inclusive outside of the engineering discipline when it comes to creating features and making decisions quickly results in losing sight of the desired vision. Without both sides actively reaching out to work together, we can be left in a place of assumptions, or find ourselves only executing on lists of tasks instead of making the most of our creative mindsets to make the best experience for the game and players as a whole. 

Early points of contact for a new feature are not just about getting clarity, but also about answering the question “Why?”. From this conversation, we can all trust that we’re working towards the same goal: a place to start iterating for an excellent feature for the game. 

Launch Pads

At their core, launch pads are an actor in a world with a trigger collider. When objects (such as players) overlap with the trigger, an event is fired that applies a configurable impulse to the target. This sends that object–the target–flying through the air. In other words, they’ve been launched

A basic launch pad

Building Launch Pads

When we were first tasked with creating launch pads, my first thought was, “Well, it’s a launch pad! Most games have them, it’ll probably be the same as everywhere else.” Despite this initial impression, I leaned on our values of collaboration and spoke to the designer on point at the very start to understand their perspective. The next steps were reading through the design spec, speaking about it in our weekly public design huddle, gathering clarifications from design, and building out a Miro board. 

This board included the primary physics functionality and API required to create the launch pad feature itself, as well as some basic exposed variables for design to tinker with.

Proactive Feedback

This board and a timeline were sent out to all stakeholders to gather async feedback before development began, and got feedback from game design, tech design, and creative contributors. This feedback led us to alter what would be configurable for tech design and how the trigger would work for the initial development, which began as a ray cast and turned into using trigger volumes within the engine. 

At key points, I reached out to people suggesting changes and met in 1 on 1s to make sure a culture of creative collaboration was being fostered even at this early stage, and to make sure their input would be fully understood. These contributors were continually looped in at every stage of the process to make sure we were still headed in the direction that worked for them.

Under the Hood

Dealing with server-authoritative movement is a vital part of launch pad development. A physics impulse must be applied by the server, and the velocity and launch vector is calculated and resolved there. The client predicts and resolves its position through the same calculations. This physics impulse is only known at the time of the launch, as each launch pad could be configured to aim in a different direction–or require the character’s forward vector to calculate the velocity. 

Basic implementation of a launch pad from the Miro board

Server and client launch requests

Code for running the launch request on the server and client, including networking rollback.

We found ourselves primarily interacting with two other teams while building launch pads, as they owned spaces that we needed expertise and buy-in for.

The movement and impulse are owned by the Characters, Camera, and Controls (CCC) team. Creating launch pads meant closely collaborating with them to create the backbone of the launch pad implementation that both the server and the client could run. Collaborating with them led to the discovery of several networking bugs, which opened up a larger conversation about networking movement, prediction, and impulses. 

Networking is owned by the Core Tech team, which handles the prediction from the client, as well as ownership of messages being sent between the server and client. These are heavily used throughout the feature, and required support from engineers on all teams to get the launch pads functioning correctly. 

This process also allowed us to give feedback to the Core Tech team for movement prediction networking, and helped work out bugs by having it implemented in an actual feature. It also led to a player-focused implementation of instances. At that time, parent actors were placed and needed to be duplicated to alter a variable on a per-instance basis. As part of launch pad development, we had a use case to investigate actor instancing and therefore add another tangential tooling workflow. 

Configuration for Designers

Now that we had the core functionality supported, we needed to make it possible for tech designers to jump in and start using the launch pads. We built an API using Luau scripting which requires sending the message from the client to the server to trigger a launch. This meant that tech designers had access to the scripting–but also to configurations within each asset for each launch pad actor placed in the world. 

Original configuration design

Data Configurations

These configurations are important because they allow the tech designer to change basic settings without needing to write logic. 

For example, it’s easy to set any of the following values:

  • The direction for the launch pad
  • Whether it uses character forward direction
  • How strong the launch force is
  • If character velocity is overridden
  • Actor filters
  • If there’s a specific target to launch towards

The options for these configurations and their technical implementations were created with tech design, and are still being iterated on to prioritize the best–and most realistic–experience for designers. 

In-game editor view

Code version

Scripting Configurations

Along with the ability to configure specific actor details, script functionality was also created for tech design to be able to manipulate logic when necessary. For example, the LaunchActor() function gave tech designers the ability to use launch functionality without needing to place a launch pad in the first place. 

This specific tooling feature was actually not initially requested by the tech designers, but after testing launch pads, it was added to the backlog as a critical tool. This gave designers immediate access to iterate, as it works in parallel with the scripting function OnTriggerOverlap(), which was used in code for the launch pads to fire the system that launches the actor. Having this available within scripting meant designers could create game loops through differing queries and launch behaviour. 

Luau script for trigger overlap with launch pad

An early perspective for the scripting and configurability was not just to support tech designers and creatives, but also to support players who will one day use these functions themselves. In the context of this feature, we thought deeply about all the ways players may want to launch actors in their world. We had so many discussions about making sure players could build and create in Hytale in the same ways Hypixellians do. 

Player-Focused Development

Launch pads were perfectly oriented to create opportunities for collaboration and cross-discipline work, but these opportunities don’t always make themselves readily known. It’s critical to take the time to think of who works on a feature, who would use it, and how–then talk to those individuals directly before writing even the first line of code. 

This value of feedback and collaboration extends beyond Hypixellians. Launch pads are an ongoing process, and always will be as gameplay grows and evolves within Hytale. We look forward to seeing how launch pads are implemented by players in new and exciting ways and make use cases of their own. And in return, we’ll continue to use this collaboration to continue to iterate and create new player-focused tooling features in Hytale. 

First-person view of in-game launch pad

---

Does this kind of technical content interest you? We're hiring! Check out our Careers page for job openings and application tips.

Matiascommented
Some random comment
Matiascommented
Some random comment
Matiascommented
Some random comment