Rift: Tale of the Oath

Rift: Tale of the Oath is an Action Adventure Game made for school project Level Design Production. What shown in this video is developed in 3 months. As the developer of Penguin ARPG Toolkit, I used PAT for the action aspect of this game to save time and test for usability. On the other side, this game is meant to present well designed levels. There should be many more elements other than combats, so I made some tools for those element as well


Trigger and Mover

A very common design in action adventure games is the dynamic environment. It might be some constant moving platform, it could be a door to be opened, or it could be a rising wall.

As the needs is large and people what it to associate with more events, it’s not a good idea to just animate/timeline those. Thus I created a trigger and mover combo

as you can see, the mover are separate object from the trigger. When you bind it, it is simply mover listening to the trigger. You can set how will this mover be changed in the inspector in terms of transform, also the animation curve. Most important, you can preview the gizmo

This screen shot contains three kinds of use mover: moving up from ground, rotation, and scaling up. Note that by default the preview is using drawing a cube regardless the actual collider. You can also let it draw the real shape by toggling option


Dialogue and Cinematic

In later part of development, we realized that conversation and cinematic camera would be a very helpful tool to narrate as well as guiding player. As we complete those features, it turns out helpful indeed.

When we first decide to add dialogue in game, it was only the dialogue and it will be few. Thus we are not using any third-party narrative tool, and the design was simply pause the game when people are talking.

I made some scriptable object for designer to configure so she don’t have to touch the scene to assign conversation to npcs. It work out very well at that time. But then, as well want to add cinematic, things a little fuzzy: the cinematic timeline shall only happen in scene, while talk info are all stored as scriptable objects. Unity natively can not let the scriptable object to reference scene object. Programmer could definitely hard code those events, but that will be inflexible.

Thus, I did some UI works to smooth the pipeline.

The talk unit, who’s invoking conversation event with configured talk info, will now automatically generate a list of unity events that associate with the talk assigned. And you will see read only text of this talk to make it clean which is which without the need to check for id.

We still have one more problem though: when timeline happens during a conversation, we sometimes want it to wait until the timeline to end before talking. As I really don’t want the dia system to couple with timeline, I wrote a playable behavior for this:


Save System

Save system and setting were in the game long times ago, in which I only used to store check point information and level info. As the development moves on I got request to make triggers save-able, so I did this:

Function wise this definitely works, level designers can do what ever they like with this and if they put it in a good folder it well be organized as well. But the problem is that, later, the design team think instead of having something to be saved, they want many. Thus I did this:

This is a single object called savable. The editor script make it have 2 different state. And you can easily give it a new GUID by button click. This attribute have been add to many class like npc, triggers, collectable.

Since we only have the idea of this save object in the middle of dev, I’m not using inheritance. As it need to store state, I am not using interface as well. Instead I encapsulate it and do the dirty works in script.

Sadly, at the end, it turns out we want everything to be saved. This means I might shall just use interface as those object don’t need to store the state of saving or not anymore. I should have vision this at the beginning of save system development as that’s a common need. Something learned for next time

Next
Next

Full Stack Web App Board Game