Astral Productions - Technical Gameplay Design

Job Overview

Astral Productions is a game development studio I founded to build projects I genuinely care about, while deliberately expanding both my technical and design skill sets. The work produced under Astral falls into two primary categories:

Large-Scale Projects
Multi-year productions and smaller commercial titles intended for public release. These projects prioritize production-quality systems, long-term scalability, and shipping discipline. A current example is Storm Reavers (as of February 2026), a co-op heist game developed (solo) in UE5.

Experimental Projects
Shorter, focused explorations targeting specific mechanics, workflows, tools, or design problems. These are not intended for release and instead function as rapid R&D. Common themes include gameplay prototyping, UI experimentation, procedural systems, and custom tooling, all designed to feed back into larger productions or meaningfully expand my skill set.

The core objective of Astral Productions is to push forward gameplay design and technical tooling simultaneously. Although this is an independent studio, every system is approached with a AAA production mindset—prioritizing scalability, iteration velocity, maintainability, and long-term team growth. Nothing is built as a one-off solution.

Several other sections of this site contain deeper technical breakdowns of systems currently under development. I strongly recommend exploring those pages for detailed design and implementation context. This page will continue to evolve as Storm Reavers approaches its playable demo milestone.

Want to read something specific? Jump to…

  1. Tooling

  2. Reinventing Movement in 2.5D

    1. Spline-Based 3D Navigation for 2D Characters

    2. Mapping Movement to a Spline

    3. RVT Spline

    4. PCG Integrated World

Reinventing Movement in 2.5 D — R&D

Spline-Based 3D Movement for 2D Characters

Okay, that’s a lot of words—so what does it actually mean?

Essentially, while there are plenty of 2D, 3D, and even 2.5D games, very few fully side-scrolling titles preserve the freedom of movement you find in a 3D game. I wanted to explore that intersection. What if a player could move with true omnidirectional control—like in a 3D action game—while still following a guided side-scrolling path? And what if that path wasn’t locked to a flat axis, but could twist, curve, and branch, shaping traversal in a more dynamic and spatially interesting way?

Mapping Movement to a line…

The first thing I had to do was decide an approach, Unreal's spline were an obvious choice as they were lightweight and flexible while offering my just enough existing support and info to not require a bunch of additional legwork.

In the first prototyped iteration I grabbed directional input from the player's Input Action (X Value) to determine if the player was moving left or right. Once I had this value I could access the player's current spline owner and run through a series of functions to get the Actor's closest point on the spline. From there you almost need to do the inverse which is simply move forward or backwards on the spline, then convert that spline on the point back to the player's location.

It's important to note, because we have full 3D movement, the player's movement is rarely directly on top of the spline. They are usually off to the top or bottom, so retaining a persistent offset is important. This is key when later discussing the player's dash or other movement abilities.

Functionally this is a somewhat simple setup: Get spline -> Find Closest Point -> Transform Point -> Set Actor's Rotation. It's when the system begins to expand and account for more than basic movement that complex interactions occur.

Spline Rotation Adjustment Function. Called by *most* movement actions.

Choosing A Spline Owner

One of my main objectives was to fully embrace a 3D environment with multiple paths, which meant building a system that could dynamically transfer a player’s owning spline whenever they encountered a new route.

To achieve this, I needed to handle four things:

  1. Spline bounds

  2. Path validity and overlap

  3. Path priority

  4. Path transition

For brevity, I’ll briefly walk through each:

Spline Bounds

Splines in Unreal typically use very few points, which makes their bounds unreliable for path ownership. To fix this, I subdivided the spline in the construction script. By defining a width and dividing by collider size, I could spawn colliders at each subdivision. This gave me far more accurate path bounds, minimizing gaps or overlaps.

Path Validity & Overlap

Without guardrails, the camera would snap aggressively the moment a new spline was detected. To prevent this, I implemented a short timer system that checked two things:

  • Is the path valid? (basic safety check)

  • What type of path is it?

In this system, main paths always took priority over side paths. However, certain “unique” paths (like overlooks) could even override main paths. Each type also had its own overlap duration requirement: unique paths would take over ownership quickly, while side paths required a longer overlap before control shifted.

This layering gave us more natural transitions. Combined with environmental art cues to visually distinguish side routes, it prevented abrupt snapping while still allowing flexibility in player movement.

One of my main objectives was to fully embrace a 3D environment with multiple paths, which meant building a system that could dynamically transfer a player’s owning spline whenever they encountered a new route.

To achieve this, I needed to handle four things:

  1. Spline bounds

  2. Path validity and overlap

  3. Path priority

  4. Path transition

For brevity, I’ll briefly walk through each:

Spline Bounds

Splines in Unreal typically use very few points, which makes their bounds unreliable for path ownership. To fix this, I subdivided the spline in the construction script. By defining a width and dividing by collider size, I could spawn colliders at each subdivision. This gave me far more accurate path bounds, minimizing gaps or overlaps.

Path Validity & Overlap

Without guardrails, the camera would snap aggressively the moment a new spline was detected. To prevent this, I implemented a short timer system that checked two things:

  • Is the path valid? (basic safety check)

  • What type of path is it?

In this system, main paths always took priority over side paths. However, certain “unique” paths (like overlooks) could even override main paths. Each type also had its own overlap duration requirement: unique paths would take over ownership quickly, while side paths required a longer overlap before control shifted.

This layering gave us more natural transitions. Combined with environmental art cues to visually distinguish side routes, it prevented abrupt snapping while still allowing flexibility in player movement.

Accounting for Movement Abilities

A major consideration for this system was how to handle movement abilities. Basic movement along the spline was straightforward: rotation was continuously adjusted to match the spline, so the player’s motion naturally aligned with the path. But abilities that moved the player by a fixed offset—for example, dashing 100 units forward—didn’t work with this approach.

The solution was simple in principle but crucial for feel. After calculating the end point on the spline, I determined the offset and set that as the target location for root motion. However, since root motion doesn’t adjust rotation by default, I also had to apply rotation updates. Without this, abilities produced unnatural, straight-line motions that ignored spline curvature.

This is the key point: the system lives and dies on whether characters convincingly follow the spline. Any diagonal or disconnected movement (not driven by player input) breaks the illusion immediately. Imagine if, instead of rotating continuously, a character just moved forward and then snapped downward—it would feel exactly like AI pathfinding, which often looks awkward and robotic. The player should never be asking themselves “why is my character moving like that?” when using core movement or abilities.

Spline Dash Ability - Uses GAS.

RVT Path

To create path system, I designed a workflow that takes spline input (via PCG) and converts it into material data via Runtime Virtual Textures suitable for rendering and terrain interaction. The process begins by obtaining spline data via PCG tags. This data is then parsed for additional information such as a spline volume/size.

Once the core spline data is obtained we actually need subdivide the spline as our in-world spline has very few points. After subdivision a new spline is spawned via a spline mesh and a special material that maps to a RVT is implemented.

This mesh is only used for RVT data and has neither collision nor visibility. This RVT data can then be obtained in other materials (I use a global Landscape material) and mapped to the designed texture. This enables smooth integration with terrain materials, additional effects like blending dirt or foliage suppression, and ensures the paths feel naturally embedded into the environment without heavy manual sculpting or texture painting.

In addition, I also do some other actions inside of the PCG graph such as spawning rocks/pebbles on the path as well as spawning trees outside of the path's bounds.

Early Prototyped Path Using Generic Materials & Textures. Everything is spawned via PCG, no manual placement.

Final Note

The thing about this system it's its applicable for more than just my 2.5D application. You could also use this as a way of setting up a scripted path for a quest or perhaps pathfinding for AI. It isn't as though this system was designed and siloed off, it does support other direction if I or another designer wanted to do something diferent with it.

About

Gameplay Designer

B.S. Interactive Design

3+ Years Exp.

Resume

Location

Columbus, Georgia

Will relocate

All content on this site was designed and developed by Cole Andrews, unless otherwise noted. Any third-party tools, assets, or references are credited where applicable.

About

Gameplay Designer

B.S. Interactive Design

3+ Years Exp.

Resume

Location

Columbus, Georgia

Will relocate

All content on this site was designed and developed by Cole Andrews, unless otherwise noted. Any third-party tools, assets, or references are credited where applicable.