Hello, my name is Caleb Smith and I am a freelance game programmer and designer with several years experience working on independent projects with a focus on gameplay development. I have experience working with UE4, Unity and the Source Engine.
Previously I have developed various game types, AI scripts, UI layout and scripts, level scripting and general gameplay related code/script. On the design side I have delivered technical and game design documentation, numbers balancing and task management.
If you are in need of someone who can:
Worked closely with creator in order to translate original Junction Gate gameplay from 2D UI based game to fully realized 3D survival simulator
Took various packages, including the Advanced Locomotion System (premade humanoid character complete with animation, foot IK and psuedo motion-matching animation), Character Interaction (a complete 3rd person shooter/adventure package), Custom Character Creator and other various packages.
Developed a workflow to allow one character animation script to be used for multiple characters.
Developed Rolling and Crawling movement locmotion for characters.
Developed game item that could be used on any size/shaped object in the world and make it hover/be pushed by player.
A 2D side-scrolling shooter inspired by Contra, Ghost 'n Goblins and Doom. Players take control of a knight fighting through a fantasy world being invaded by a demon army.
Weapon Coding and Scripting
Developed an easy to extend weapon system that fires projectiles, trace lines and timed melee attacks for players, AI and environment traps. Opened functionality up to scripting so that designers could easily prototype new weapon ideas.
Three classes exist in C++ code. ABaseWeapon provides some Blueprint events as well as a data driven design that controls fire rate, fire type, projectile type, etc. The other two classes are AShootWeapon, which provides implementation for projectile and ray-trace fire types, and AMeleeWeapon, which implements a simple melee implementation.
The above video shows a Blueprint script inheriting from the AShootWeapon class. It uses several events to trigger appropriate audio and effects.
AI Coding and Scripting
Developed a base AI class with several behaviors (idling, charging, attacking, etc.) that could be reused by all of our enemy types. Integrated functionality into Blueprints and Behavior Trees so that designers could quickly prototype new enemy types with a library of behaviors.
The code consists of several parts. The ABaseAIController acts as a liason between the BaseEnemy class and the Behavior Tree. The ABaseEnemy class acts as a repository for reuseable behaviors for all enemies, as well as controlling some shared properties. Finally there are several custom Behavior Tree Task that can be used for AI scripting.
The following blueprints are inherited from the BaseEnemy class for our Bull Demon enemy, an enemy that growls when he sees the player and charges in their direction, trampling other enemies in their path.
All AI is driven by reuseable components in the Behavior Tree. Here you can see the composite behaviors for an attack sequence, and two idling sequences (one that follows waypoints and a fallback that just sleeps the AI till woken.)
Used UE4 animation tools and scripts to hook up several enemy characters and the player character assets. Worked with lead artist to ensure assets were imported correctly in engine and in gameplay.
Various prototypes and game jam projects developed over the years
Role: Lead Designer/Developer
Tech: UE4, Blueprints
Date: January 2018
ReVamp was a prototype developed for #1gam over the period of a month. The concept sought to parody video game media through a found footage narrative of discovering the unreleased files for a game teased at E3 in the year 2019.
The actual game of ReVamp is a third-person character stealth-action where players take control of an ancient vampire recently cybernetically enhanced and hell-bent on revenge. Enemies are powerful and smart, which requires the player to use hit-and-run tactics, jumping in and out of combat to annihilate foes off guard. Mechanics are inspired by games like Dishonored, The Splinter Cell, Tenchu and Uncharted 4.
The player has two resources: Health and blood.
Health operates like a standard health mechanic. Passively the player will use blood to regenerate a portion of health.
Blood is split up into several tanks and can be used in burst to perform abilities.
Abilities include teleporting, invisibility, regenerating health, mind control, etc.
The player can grapple with any enemy to replenish their blood supply.
AI Alert Behavior
Decreased vertical field of view for enemies. This allows the player to perch just overhead without being seen.
AI has 3 major behavior states (Idle, Investigating, Alert) that determine their broad behavior patterns. Enemies will only be alerted to the player’s presence if they remain in their field of view for more than a specified time. This mechanic is largely borrowed from Uncharted 4.
If players are quick enough, they can kill an alerted enemy before they are able to alert their squadmates.
Players can use abilities to change an enemies allegiance to their side.
Civilians attempt to flee the area in a random direction.
Role: Lead Designer/Developer
Tech: Unity, C#
Date: January - July 2018
Took various concepts learned from UE4 Perception System and developed a custom perception system in Unity.
Developed generic state machine to be used across the code base, especially for the simple AI denziens of the Dun’Djinn.
Designed AI for several creates, fully implemented two creatures.
Procedural level generation system builds dungeons from prefab level spaces and using the Drunken Traveller searching method. Various properties can be tweaked to create radically different dungeons.
Tech: C++, SDL
One of my first projects! Recreates the AI, character movement and most of the gameplay as described in The Pacman Dossier (2009).
Worked closely with technical director and creative director to develop game prototypes and promotional content.
Championed and produced media for Let’s Play series to promote brand.
Designed and developed prototypes for inventory, player interaction and open world mechanics.
Consulted on story, providing editorial notes and storytelling direction.
A project me and a group of others developed for the Ludum Dare 39 competitiontheme "Running out of Power".
The battle system is easily the most complex script I wrote for the project. It handles numerous tasks, including setting up the visuals for the battle area (lighting, background, enemy and player), resolving player/enemy actions, and offering notifications for other scripts to poll the state of the battle. Inspired by the combat in Superbrothers: Sword & Sorcery, combat happens in real time. To resolve a block, the combat system checks whether the swing happened during the blocks active window. See the Action Component section below.
Functions & Variables - Event Graph Part 2 - Event Graph Part 3 - Start Battle - End Battle - Cache World Lighting - Show Spotlight - Dim World Lights - Spawn Battle Ground - Handle Melee Attacks Part 1 - Handle Melee Attacks Part 2 - Handle Melee Attacks Part 3 - Handle Melee Attacks Part 4 - Handle Melee Attacks Part 5
You will notice that the character has several components (Attack, Block, Heal, Quake). This are inherited from the Action Component script. More on that below.
This is where the meat of the player’s interaction with the game takes place. The UI informs the player of their health, the enemy’s health and their available actions. These buttons are updated with cooldown info after the player has used an associated action. Over the course of the game, some of the buttons are disabled as the player character loses strength.
This class drives both player and enemy actions. It provides a simple data driven interface to tweak the length, active window and other such timing properties of an action. Using this component I was able to easily hookup player and enemy actions and their associated effects without copying a lot of code over and over. This little component turned out to be a life saver on the project, and the small amount of investment time I put into creating it paid off well.
By the end of the project we had a level filled with static props and other environment art with a general idea of the pathway the player would take through the world. I came in and placed all of the enemy encounters, defined the player level boundaries, scripted all of the narration and music triggers, and tweaked the level’s geometry to extend gameplay for narration length and cue the player to environmental details.
Worked closely with lead to balance existing characters and help push feature creation for an initial alpha release.
Pushed and help develop highest priority features needed for alpha release. Worked closely with programmer to ensure these featuers worked as expected and to share observed bugs. Rewrote ability descriptions to be more brief and reflect actual game values.
Developed Sheet documents projecting character XP growth, player gold gain, general stat growth, and game mode specific modifiers to sync up with desired time limit of ARAM-esque mode.
Input all stat changes from documentation in-editor and verified that their values reflected what was in the design. Added bounding boxes, setup actors and optimized level for game mode.
Bringing experience as a passionate player and student of game design, I can provide design documentation, idea pitches and prototypes to sell or communicate your vision.
I can provide initial design layouts, level block-outs, scripted sequences and events, and finalized “beautified” levels ready for shipping.
Game balancing isn’t just about moving sliders up and down. Using Sheets or Excel, I can provide graphs, tables and other means to make balancing an informed decision rather than a shot in the dark.
From rapid prototyping to full production of systems like AI, UI, weapons, characters and game rules, I can turn any design into a functional feature quickly.
My goal is to develop clean, “sane” code fully integrated with the game editor. This gives you maximum flexibility to tweak and/or extend my code easily to meet any new requirements throughout production.
Give me your code and I’ll quickly diagnose and squash bugs, refactor the code for readability and performance, and extend its functionality.