Dual Shadows is my team’s capstone project for this year at Champlain College. Dual Shadows is a 3rd-person hack and slash with RPG elements. Set in the futuristic city of Dragon’s Rain (inspired by Ho Chi Minh City), the player must traverse the various city districts and seek justice, with a combination of ranged and melee combat. As the only level designer (for the first semester) on our team, I was tasked with creating a linear vertical slice area to showcase combat abilities and the destructive environment, concluding with a boss.
The main goals that I wanted to teach the player moving through this level were: movement, dashing, melee and ranged combat, special abilities, and ultimate, which would then all need to be used to defeat the final boss. I divided the areas between teaching and reinforcing, so starting at the red area on the map the lessons were:
Movement & Melee
Ranged
Special Abilities
Reinforcement
Ultimate
Boss Arena
After finishing the vertical slice level, I wanted to continue challenging myself, so I decided to work on technical art and tool engineering, because our team lacked both. For technical art, I wanted to learn more about shaders, post-processing effects, and Unreal’s Niagra System, so I attempted to create an environment that was rainy and dark, to fit the cyberpunk vibe that we were going for. The main technical art that I was really proud of are the puddles that are scattered across the landscape. I decided to use noise textures to create random decals, and added a dotted normal texture to act as the ripples from the rain.
Another thing I did to help speed up development was creating a building generation tool based on the various modular assets our artist made. This was inspired by the building generation tool that I worked on over the summer (which you can read about here), but simplified and cleaned up a lot. Calculating rotation into the tool was something that I avoided doing for my previous attempt, and trying it now, even though it was more work upfront, resulted in it running way smoother than it did before with less equations needed. I tried to make sure it was heavily commented, and easy to understand and use even for the non-programmers on our team. To save on memory, I also developed a system to randomly generate the buildings when played. My visual scripting is featured below, along with an example of the tool in action.
Generate Building
Generate Wall
We ended up pitching our game for our school’s greenlight presentation. Basically, faculty vote to decide what teams and projects will go through for next semester. This was a big deal, and we worked really hard on our presentation and game to make sure that it could get through. Luckily, our hard work paid off, and our team was accepted to go through for next semester, so this project in on-going as I’m writing this, and I am bursting at the seams with different ideas and challenges. I’m really excited to jump back in and continue working with my team!
-
Even though I was spending a lot of time on the level, that didn’t stop me from wearing different hats and challenging myself to learn new things. I think art is one of my weaker areas, so it was fun to combine the programming aspects where I am more comfortable with the new world of shaders, decals, and post-processing. I’m excited to keep pushing that front!
-
With the amount of time we were given, and a large chunk of that time devoted to rapid prototyping, I think I was able to create levels, art, and tools at a really good pace. I generally work pretty quickly, but I was able to step up to meet the needs of my team and get my work done quick, without skimping out on quality.
-
While I think I could provide value to any team that I am apart of, in a humble way, obviously :), I’m really glad that our faculty saw the potential in our game and let us continue with our vision. I believe that our game will be even better with more time, especially with us being able to onboard more team members and continuing to produce work.
What I Did Right
-
We spent so long trying to get our combat to feel right, that it gave me less time to really polish up the level design. We had a fun cheat of incorporating contextual arrows into the environment, but spending a bit more time looking at the shape language and lighting of the scene wouldn’t hurt.
-
Unfortunately, Dual Shadows didn’t run great on my system, even with the various optimizations that we implemented. The real answer is probably programming the level to load and unload chunks. I’ve never done that before, but it sounds like a fun challenge!
-
There were some sprints where I had a ton of work to get done, and others where I didn’t really have that much to do. However, having more time on my hands gave me the opportunity to dabble with technical art more, so it definitely wasn’t a complete negative. Because we have onboarded a producer next semester, hopefully this problem can be resolved.
What I Did Wrong
-
I really want to implement a heat map system into my levels, where data can be recorded during testing, and I can act on that data to improve the flow and pacing of my levels. I already have so many ideas that I would love to implement.
Also, not to mention how a custom heat map tool would make a great addition to my portfolio!
-
For our vertical slice, we wanted our levels to be linear, in order for the faculty to fully complete our game loop, but for the future we have been talking about adapting a more segmented open world approach to level creation. These levels would be something akin to the different areas in InFamous or Star Wars Jedi: Fallen Order. I would love to add more verticality to levels in addition to making them way more expansive, dividing the map into three different districts that could be loaded in and out to save on performance. With another level designer being onboarded, I totally think this is possible.
-
I am still pretty new with tech art, but one of the levels that we are picturing is a flooded district, and I can’t stop thinking about how cool it would be to have realistic water. I’ve looked into vertex displacement and buoyancy simulations, and I’d love the challenge of write some HLSL code to accomplish that. If level design doesn’t eat up all of my time, I could definitely see myself getting totally absorbed into water simulations, I find the programming fascinating!