I have been working with a team of awesome developers on Dino Delivery for about a year and a half. During that time, our gameplay went through many iterations and reworkings but one of the things that remained constant was the desire for a modular, easy to use puzzle system that designers and artists could use to bring interactive objects to life in the game. What started as a simple object manager, turned into a robust, highly reusable puzzle system that is core to our gameplay.
Now that we have shipped the latest iteration of the game, I wanted to showcase how this system I created works. At its core, the system is pretty simple. A designer or artist drags in an “interactive object” (i.e. a lever, button, pressure plate, trigger, etc.) sets up a collection of parameters called a “packet”, sets up some conditions, and converts any actor in the world to an “action object” that will receive the packet. When the interaction is triggered, the packet is sent, and the object manages and updates its state based on the function provided. The reason why this system is so robust is that an interactive object can have 1-n number of action objects with 1-n number of unique functions that are each handled separately. For example, the user could create a sliding platform that scales, translates, rotates, and updates a quest at the same time with different durations, speeds, and vector values for each function all with a few clicks. Because the information being distributed is using an event system, the action object receiving the packet is disconnected from the interactive actor which helps prevent hard references. Moreover, to add another layer of complexity, users can indicate that action objects can reset (in the case of a pressure plate no longer colliding with an actor for instance) and these action objects will return to their initial state, ready to be triggered again.
However, all of this power would be useless if designers and artists couldn’t make it FEEL good. We base a lot of systems off of custom curves in Dino Delivery and this modular system is included in that. Each transformation-based function can be combined with a custom float curve using the curve editor built into the Unreal Engine. In addition, particle effects and Wwise events can be tied to different moments in the system. For example, multiple Wwise events can be triggered when the interaction begins, resets, and ends, and particles can be spawned from specific actors along the way.
With all of these features, our design and art teams were able to easily create many unique interactions in Dino Delivery. If I had more time, I would have loved to add more optimizations, effects, and built-in functions to the system but in the end, it was core to our gameplay and development process.
For more information, check out this video where I walk through examples, the concept, and the process of using our modular puzzle system.
- Jeremy McCarty