top of page

Game Designer

Jonathan (J. L. Vance) Williams

Concrete Jungle

Combat + AI Designer

Concrete Jungle is an action-adventure platformer where you play as Tarell Thompson, otherwise known as TN, as he fights off evil screw enemies who have taken over his construction site in the jungle. But he’s been equipped with a magical monkey wrench that lends him the powers of the toolbox jungle to help him fight against this ongoing evil.

Concrete Jungle was a 2-month-long game jam called 'Ratchet it Up' for Sony's PlayStation Career Pathways Program, where we presented these projects in front of Josh Kinney and Ryan McCabe. 

My Responsibilities included:

  • Design and implement the core player combat system and iterate on the combat game feel

  • Design and implement player combat abilities and cooldowns

  • Design a base enemy AI behavior tree

  • Implement player, enemy, and ability 3D models and animations

UnrealEditor_LWaYi8v8q0.gif

The player taking on a whoard of enemies

Jump to a specific section

Combat Design Main Goals

  • Understand the principles of what makes combat feel good in games

  • Create a simple 3 hit combo for players to take on enemies with

  • Create a dynamic combat experience for players to interact with

My main goal was to provide players with a simple combat system they could easily digest and play around with that still felt good and hit on many of the principles that define good combat systems in games. 

CombatsystemGif-ezgif.com-video-to-gif-converter.gif
Combat Design Section Anchor

First wide shot viewing the Level 1 map

Workflow

Combat Design Doc Page 1.png

Image 1: First page of my combat design doc
Image 2: Second page of my combat design doc

Understanding The Principles of Combat Design

To get a better handle on what makes great combat I made sure to do tons of research by playing games like God of War but also taking the time to speak to Wilson Santiago, a combat designer at Santa Monica Studios. These were some of the principles he instilled in me about creating good combat in games:

  • Game feel is everything, combat can look cool but you need to implement specific elements for it to feel good

  • Things like camera shake and hit stop can make attacks feel heavier

  • Startup time and end lag can contribute to making attacks feel faster or slower

  • How attacks sound can also sell the illusion of packing a heavy punch

These principles were the core of how I built out our player combat system. And through many iterations keeping these foundational principles as integral parts of our design hepled us create the best combat experience for players.

Results of The Combat System

Through many iterations of this system I was able to create a quick and simple combat system for players to interact with and have fun using to take down enemies. Here are a list of some features that helped make this combat what it is:

  • Long hit-stop and heavy camera shake to carry a heavy impact

  • quick swinging animations so players feel fast but powerful

  • Created Fun and quick abilities to compliment the speed of combat

These additions helped create the best combat experience for our game implemented all using Unreal Engine's Blueprints. 

UnrealEditor_SyFIdQMg9a-ezgif.com-optimize.gif

Casey flying around the map during the setup phase

AI Design Anchor

AI Design Main Goals

JonathanWilliamsCTIN499PachinkoVideo-ezgif.com-video-to-gif-converter.gif

Our goal for our enemies was to create a custom roaming enemy that has a simple attack all with its own unique animations. For me to tackle this task as a team we decided it would be best to use Unreal Engine's Behavior Trees to setup the enemy AI. Here are some of my goals laid out as we developed our enemy AI:

  • Implement simple roaming enemies with their own individual pathing

  • Create a custom 3D model and animations for the enemy to use

  • Create easy basic enemies for players to take on and have fun fighting

Workflow

Setting Up Behavior Trees

Having some knowledge on behavior trees in the past, There was some familiarity with creating tasks for our character's behavior tree and creating AISense. Here is a list of details for our plans for our enemies behavior:

  • Each enemy should have their own unique pathing that they follow in their section of the level

  • unless seen or damaged by the player, enemies should be able to detect the player within a small range

  • Enemies should persist after the player but should lose him after a certain distance

EnemyAttack1-ezgif.com-video-to-gif-converter.gif

Top: Opening Sequence of Level 2
Bottom First wide shot of wave 1 in Level 2

Challenges with Waypoints

EnemyAIGif2-ezgif.com-video-to-gif-converter.gif

A large issue I ran into as I built out the behavior tree was getting each individual AI enemy to follow along their own specifc group of waypoints. Here are some ways I worked to solve this issue so each Enemy followed their own path:

  • Old behavior had enemy pathing determined in the main enemy blueprint

  • By moving this behavior into the AI Controller we allowed each enemy to have their own unique path

  • Some enemies have more points to go to than others so faisafe's were implemented so each enemy can have a different pool of waypoints no matter the size

Top: Opening Sequence of Level 2
Bottom First wide shot of wave 1 in Level 2

Final Results of the AI Enemies

Through lots of playtests and iteration cycles, I was able to problem solve and build out an AI behavior tree that allowed for unique pathing to be setup for each enemy with room in the future to build out new enemy types. 

ezgif.com-video-to-gif-converter.gif

Top: Opening Sequence of Level 2
Bottom First wide shot of wave 1 in Level 2

Extra Contributions

Here are some more contributions outside of these fields that I worked on for this project!

bottom of page