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

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.

Combat Design Section Anchor
First wide shot viewing the Level 1 map
Workflow
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.

Casey flying around the map during the setup phase
AI Design Anchor
AI Design Main Goals

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

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

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.

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
