I had the pleasure of working with a talented team at the University
of Michigan to create a game centered around the different museum
collections the university had to offer. Collect Connect was meant
to inspire creative thinking between the players and spark conversations
about players’ schemas and associations between varying museum pieces.
We wanted to take these very human thought patterns and use them to train
an AI to be able to follow these seemingly random jumps in thinking and
create its own associations between objects. We did not want to train an AI
to identify objects or simply their physical/ functional capabilities,
but rather to attempt to move to a more abstract interpretation between objects.
For a majority of my time on the Collect Connect team I was the solo gameplay programmer
for the 2 player version of the project. During the development cycle I worked
on creating rapid prototypes for the latest version of the game, a majority of
the time using placeholder assets to test varying look and feel of the game.
These prototypes helped lay the groundwork for the team to decide the final direction
on game play and style. While working on this project, I was very careful with the
underlying design, especially in the early stages where gameplay wasn’t locked in
and pivoted often. I wanted to make sure the code base was scaleable and easy to
maintain as features needed to be added; I felt especially accomplished on this
aspect when in the final hours before we launched the game, the designers requested
some changes and additions to the game flow and I was easily able to implement those
request without worrying if they were going to negatively impact another aspect of
the game. That was probably the biggest miracle of last minute changes which actually
did what they were supposed to do and didn't break anything along the way.
I’m still shooketh.
Alpha/ Beta Pruning:
Taxman is a game whose goal is to show the effectiveness of min maxing and how
alpha beta pruning can expedite those results. It is a single player nim game
created in Unity where players face off against the ever calculating taxman.
The goal of the game is to accrue more money than the opponent, but with every
choice a player makes there is the potential for their opponent to also gain points.
The taxman is a tough opponent as it searches hundreds of thousands of potential
possibilities in advance depending on the players set preferences. Players are able
to adjust the depth at which the taxman searches, whether it uses alpha/ beta pruning,
and adjust the turn length of the taxman’s turn.
This project was a simple one to create game play wise, but it was the first time I
needed to use multithreading in Unity. Min maxing is quite a resource intensive search,
and in order for the taxman's turn to not clog up the main thread it needed to be moved
to its own. This move also allowed the game to have the real time time limit for taxman's
turn, otherwise players would have to estimate how patient they’re willing to be before
his turn starts. This gave me the opportunity to learn about the capabilities of Unity’s
multithreading system and a chance to test it out.
Part of a series of tools created for Dr. Maxim for use in his artificial intelligence class.
Heuristic Search Tool:
Pathfinder is an app made to display and explain the effectiveness of different heuristic searches.
It displays Dijkstra,Breadth First, Depth First, Branch and Bound, A*, Hill Climbing,
and Best First. It shows all explored paths and the accepted path, giving total distance
traveled so users can more easily compare efficiency. Users can customize start and goal
locations as well as adding any barriers or difficult terrain(squares that are traversable
but cost more than a normal square) to test interesting situations. They can also play
around with the underestimators and the weight it has in calculating distance.
Part of a series of tools created for Dr. Maxim for use in his artificial intelligence class.
Neural Network with Reinforcement Learning:
This project was created using Unity’s ML agents and contains multiple pretrained models
to compare. It allows users to immediately see the effects of varying the weights the
neural network had been trained with on the behaviour. Since nn can take a very long long
time to train, we wanted the users to be able to experiment without the wait.
Users can see how raising/ lowering the rewards given to the ai can dramatically
change the ai’s ability to complete the desired task. This also helps demonstrate
a classic issue with training ai, they tend to cheat. I encountered this problem
when initially setting up the rewards for aiming at a target. While developing I
would set some parameters, sit back, and feel accomplished. And then I started
watching the behaviour develop and realize the fool I’ve become. I had given the
bot accumulating rewards for staying aimed at a target. That reward minus the time
penalty was greater than the total reward for quickly shooting the targets.
This reinforcement learning project was a great way for me to jump in and start
hands on experimenting with neural networks. There were a lot of learning curves, one
such being credit assignment. For example, my first goal was to train the bot to
accurately shoot a target.When the bot hit a target, the reward would be given
the moment the bullet hits the target. If the bullet missed and hit a wall, they would
get a negative reward. This set up caused a lot of random shots at best, and when the
negative reward was too high, no shots at all. The ai had no way of crediting a positive
shot to hitting a target and a negative one to missing. As a human who set this up I thought
it was very obvious, until I read this article on training an ai to play google’s dino run.
I had run into a credit assignment issue, since I was still learning I didn’t have the
background knowledge to recognize at a glance. I was able to overcome this by breaking
up shooting into aiming at a target and pulling the trigger. It cuts the corner a little,
but the ai’s aren't the only ones who can cheat the system.
Part of a series of tools created for Dr. Maxim for use in his artificial intelligence class.
Steampunk Airship Senior Design Project
“Is a multiplayer tabletop turn-based game made in Unity for Android tablets to entertain users.
Before the game is started, players will be allowed to tune settings relating to game difficulty,
length, and various gameplay elements. Some of these settings include the number of players, the
number of target objects needed for a player to win, enemy aggression levels, day and night cycle
lengths, weather severity, and turn timers.
Core gameplay features include resource management, evasion of enemies, navigation around terrain
obstacles, and racing against opponents. Players of the game will be encouraged to strategize in
order to finish the game faster than their opponents. If a player feels they require more information
during their turn, they will be able to toggle a hint button to help them. Also, if players wish to
stop playing the game at any time, they have the option to save their game to be able to resume play
in the future.”
A Piece (art/ story collab, solo programmer)
A Piece is a small puzzle which is meant to be part of a larger game world that I am developing.
I felt comfortable releasing this prototype because it contains a mini vision for the game as a
whole. There are multiple ways to solve the puzzle, the world feels foreign and ominous, and the
theme of the game is reflected in the solution of the puzzle.
This was meant to be a submission for the weekly game jam with the theme of one big boss.
I wanted to take the approach of playing as the final big bad evil guy. I thought it would be
fun to create a game where the players’ offensive abilities need to be strategically used defensively.
Inspired by games where it seemed accidental that a bosses attack could block incoming shoots/ attacks
from players. If I had more time I would like to have implemented the classic mechanic of if the boss
is reduced to 0 hp it brings out a second stronger form at full hp. This change would have completely
eliminated the ability to heal and potentially the addition of more rounds to the game.
This game was created for my game design class back in 2017. I worked on a team of 4 people.
Ayah Hamad: Documentation, Sound. Zachary Kreklau: Level Design. Afeefeh Seblini: UI/UX Design,
Level Design. Adriana Haddad: Programmer , Game Design.
My primary focus was on player movement, object collection/interaction, camera changes, basically
anything that isn’t the menu. We created this game while trying to rapidly learn Unity and game design
principles. We had a grand idea of what we wanted to make, but we didn't understand basic steps to get
there. In this game there is no environmental storytelling, the objective and directions aren't clear,
and it's hard to tell what items are important and which aren't. Not to mention the fact that a lot of
the physics are wonky and the camera is super disorientating.
In 2019 I went back and tried to update some major fixes to the game, but not wanting to completely
overhaul it I left some of the quirks in (such as the odd camera shift with the maze). Changes include:
Player movement, Holding/ Placing Objects, Lighting, Scenery, Loading Screen, Changes in puzzle gameplay,
adding a little more direction to the game (some spotlights to show important objects)
It was a fun challenge to go back and fix this old project, making some optimization and QOL changes
felt very necessary looking back on the game now. I found myself wanting to add and change most things,
but at some point I had to put a limit on it, or else it wouldn't even be the same game. All in all I feel
like I left this project in a better place and got to make the game more enjoyable.
This game is my baby. It’s terrible in so many respects but it’s the first game I made and I’ll love it forever.
My teammate Zak and I spent the majority of our development time coming up with grand ideas, secret rooms, achievements,
unlockable skins, a storyline… All of which are not pictured in the game. We did have a secret path, power ups, traps,
and if you’re gracious with terminology “combat”.
We planned this game before we had an inkling of an idea of the difficulty it is to make games. I think that’s what makes
this my favorite project, we were just riding on an idea of “what if this”, and “let’s try x”. That was chill until the due
date was approaching and we quickly limited the “what ifs” to “its functional-ish”.
I worked on player movement/ abilities, object interaction, character design, check points, menu (I’m most sorry about that one),
enemy movement/ “attacks,” player character animations and final boss design.