3D Game Framework

Created while at The Devhouse Agency, 2021-2022

While at The Devhouse Agency, I helped create many small 3d (and 2d) games, and for quite a few of them I was the primary systems developer. After a few projects of remaking the same basic systems again and again, I began creating all systems to be reusable, and over time it became a conglomeration of systems that I could import into projects to save days, sometimes weeks, of development time.

The systems I created as part of this framework include:

  • UI/Application States
  • Gameplay Objects
  • Player and AI Controllers
  • Character State Machine and States
  • Character Loadouts
  • Designer-Friendly Projectiles
  • Progress Saving
  • Audio Systems
  • Level Loading
  • Object Pooling

Wisp and Cleric

UTD Scripting for Games, Spring 2019

A perspective-based two player co-op platforming puzzle game. One player is a character in 3d space, while the other is a character in the 2d screen space. The 3d player must move and orient their view to allow the 2d character to jump on 3d objects in the scene in order to reach the goal.

The objective of the game is for the 2d player (Wisp) to reach a green cube located somewhere in the scene while using the dark grey shapes as platforms and avoiding red shapes. Often the 3d player (Cleric) must move and look while the 2d player is platforming in order to progress. Levels are procedurally generated and will continue infinitely. Points are given based on how quickly the level is completed.

The 3 dimensional scene is projected into 2 dimensions in order to calculate the collision for Wisp. A core mechanic is mirrors and portals that do not allow Cleric through, but allow Wisp to interact with anything seen through them. By layering moving platforms with the other mechanics, a lot of complexity is created.


Gravity Book

UTD Scripting for Games, Spring 2019

Walk on any surface, causing the inverted normal of that surface to become your local pull of gravity. Climb onto walls, ceilings, and slopes while wielding your gravity book. This book lets you choose any two points on surfaces, causing those objects to violently attract. You can use this to move platforms and crush enemies.

A downwards raycast is used to determine the normal of the surface you are standing on. If you were to jump, the normal of the last surface you were standing on is used for your gravity. You can manually jump to a new surface regardless of its orientation if you are close enough to it. If a surface is curved with an angle of less than around 45 degrees, you can continue to walk on it, and your rotation will be smoothly updated. If you are standing on a moving object, you move and rotate with that object. Your exact position and rotation relative to the object is stored and used for this.

The Gravity Book works using selections that store these relative positions. If at least one selected object has a rigidbody, it or both objects are accelerated by a force at that exact position on the object. Some platforms have constraints on their movement and rotation, allow you to change how fast you want to rotate or move objects. Enemies take damage upon collision depending on their velocity. Enemies can also be crushed by platforms that you manipulate.


Power Grid

UTD Scripting for Games 2, Fall 2020

Power Grid is a digital card/board game prototype where the player builds machines and infrastructure using cards from a deck in order to outwit the opponent and fully charge their obelisk on the opposite side of the board.

Power grid uses the implementations of multiple higher-level games programming concepts including game states/state machine, scriptable objects for fast card implementation, and a command stack.

I ensured that the UI and feedback was clear on the ranges of machines, where you could place cards, and the various options each card has.


Cat Game

Personal Project

A simple and entertaining screen saver game made in the Processing language. Watch a ball bounce around the screen, leaving roadblocks in it wake that it will bounce off of. A cat might enjoy it if you play it on a tablet!

If you move your mouse you can view the controls. Scroll wheel speeds up and slows down the movement of the ball (Can become buggy if too fast), left click places a stationary circle, and right click removes them.


Drosera

UTD Game Lab, Fall 2020

Drosera is a semi-procedural 3D dungeon-crawling game featuring a team of space explorers as they harvest resources from colonies of plant-like alien creatures in a series of linear caverns that serve as the game’s levels.

My role in Drosera was as the team’s tools developer and an auxiliary mechanics programmer. I primarily worked with the level design, environment art, and lighting teams and the level generation programmer to make sure there were no hiccups in the implementation of their work into the procedural level generation. To make things easier for the teams and to avoid any accidental overwrites in git I created the tool seen below.

As a mechanics programmer, I created all the interactables for the game such as health and ammo pick-ups.


Blob Squad

Chillenium 2019

Game submission for Chillennium 2019. It is a 4-player co-op puzzle game where each person controls a small blob that can hop around. Players can combine with each other to create a larger blob, but it’s movement is determined by all the player’s inputs. Each size of blob can accomplish different tasks, so teamwork and coordination is required to win. It is available for download, but please note that it requires 4 controllers.
Chillennium is a 48 hour game jam at A&M. Blob Squad was created by me and three other developers. I did half of the programming and level design.


Runic Scrollery

Personal Project

My WIP mobile game. You run a magic shop and must write and sell scrolls to stay aloft. Scroll writing is an open ended puzzle, guided by requests for specific types of spells. You must draw runes in a specific order to create the desired spell effects.

Runes can be added to a list that is used as the master. Whenever a rune is drawn, it is compared to the lines of every rune in the master list to determine what rune it is. Each rune functions as an input to the rune directly before it, and some runes edit the spell info sheet with a unique function depending on the rune. Whenever a rune is confirmed, spell info is determined by recusing down the chain of runes.

The shop side of the game is still in early development, but customers will look for spell scrolls with certain specific attributes, so having a stock of a wide variety of spells will be important.


The Midground

UTD Scripting for Games 2, Fall 2020

The midground is a game prototype about being able to switch between 3d and 2d movement.

The 3d-2d swap is actually quite simple. I created some basic shaders to hide how it actual works and improve the visual aesthetic of the game. The camera is in orthographic mode and when the command is given to switch dimensions, the camera movement is frozen and all objects are moved to be on the same plane as the player with the skew of the camera render plane, then moved back when returning to 3d.


Geldamin’s Vault

Personal Project

A WIP 2d puzzle adventure game. Choose one of three characters, each with a unique ability and story, to play through the campaign (story not yet implemented). Navigate your way through dungeons in order to progress through the story and gather unique items. You can equip a restricted amount of active and passive items, some of which may be required to complete certain dungeons.

Currently, the game is in a prototype phase. Many core mechanics have been fleshed out such as player movement, player health and statuses, UI, item abilities, player abilities, a few enemy AIs, traps, logic puzzles with switches/buttons/etc, sprite animations, ledges and pits, and more.

Please see the project page for more information.


Shield and Sword

UTD Topics in Games, Spring 2020

An endless fighter mobile game for Android. Swipe across the screen to slash enemies, and hold to block their attacks. Don’t let your health drop to 0 or let your shield break! Enemies can attack or block. Blocking enemies will stop your swing, but if you manage to break their shield they’ll be stunned and open to attacks.

Made in a group of 4 people. I programmed the touch input system, game manager, player actions and health system, and enemy balancing.


Temple of Mirrors

UTD Level Design, Fall 2019

What you see in the mirrors may not be the same as the normal world. Anything you can see in a mirror you can interact with, but only while it is visible. Shatter a mirror to flip into the mirror dimension, where you can see the normal world through the mirrors. Solve puzzles and platform your way to the end of the level. Made with Unity’s 3d game kit. Mirror mechanics created by me.

I built the level and the mirrors. The mirrors can be found on the Tools page of my portfolio: https://trevorthacker.com/tools/


Orbit

UTD Scripting for Games, Spring 2019

Pilot a small space ship trying to find a green cube while orbiting around a star. Make sure to avoid comets, asteroids, and death zones on your way! Objects orbiting the star are affected by it’s gravitational pull, and you are also affected by the pull of comets and asteroids.

Objects orbiting the star are only affected by the star’s gravity for performance reasons. Your ship considers all actors in the game when calculating gravity. The gravitational formula is used, but the density of everything is scaled extremely high. It is not an accurate gravity sim, but it is fun.


Splinterplane

Personal Project

Shift through dimensions using left and right mouse buttons in order to solve puzzles. Each dimension has two adjacent dimensions, which can be seen as transparent overlays in the world.

Splinterplane is a prototype for a plane-shifting mechanic. While interesting, in its current state it is too confusing to play, and very difficult to design levels for.

It uses Unity’s physics layer system and asynchronous scene loading to have 3 planes shown at a time. Each plane has it’s own physics layer, and there are additional layers for objects that interact with both adjacent planes.