Cameron Binda
Gameplay Programmer
This page is specifically for my final project for GAM 495, the capstone of my degree.

Introduction
I'm Cameron and I'm now a graduate in Game Programming and Development. I'm so glad I picked this degree because I've always been interested in coding, and game programming has proven to be the most enjoyable way to do it. I just love the idea that what I make can be played for fun, especially by me and my friends.

All of these artifacts create a larger picture of my range and depth of abilities. Each artifact focuses on specific aspects of my degree, with some crossover. They all share my ability to solve complex logic problems, and come together to show my mastery in game development. The first focuses on 3D modelling and animation; the second focuses on 2D Graphics, interface design, and audio; the third focuses on game AI; and the fourth focuses on game physics and 3D graphics. The first artifact uses no code, being a 3DS Max project, the second uses Blueprints only, and the third and fourth use a mix of C++ and Blueprints to program functionality.

I feel that, with the electives I chose, my degree has mostly focused on programming aspects. I have learned more about programming than anything else in this degree. Of course, I also have fundamental understandings of the other concepts covered in this degree. I've learned almost the whole process for making games, and, with enough time and effort, I could create entire indie-level games by myself. More specifically, I've learned how to program for games, create models and materials, develop user interfaces, set up audio, use game physics, create AI, and how to program and solve problems across languages. I've also learned about the software development lifecycle, in which I'm given specifications that I must fulfill and not go past, program those specifications, and test what I've built.

The work done throughout my course has shown my mastery in game programming and development by selectively using the concepts through multiple game projects. They also share some concepts as needed for the goals of the projects. I picked the concepts that felt most fitting for the projects' current state, and came up with ideas that explored the concepts that weren't already apparent. Specifically in programming, I've also created clear, effective code that efficiently solves the problems I set out in planning. I also have demonstrated a clear ability to plan and manage my time effectively, through the planning and polishing of these artifacts.

Best practices have been applied by creating clear, efficient code that is documented through accompanying videos. There's also a clear folder structure that allows any developer to review the files easily. Class structures and object oriented approaches were used to split up code into relevant objects and functions, allowing easy reuse and modification. Some projects also make use of parent-child class relationships, where multiple classes share code from the same parent class.

The main way the capstone fits in my professional development is through the portfolio I created for it. Each artifact allowed me to explore, improve, and showcase my skills in this portfolio. I took four artifacts, and proved that I can manage time effectively by planning, refining, and polishing, while I research as necessary. Through this, I've taken what I learned about game development and turned it into a basis for my professional career as a gameplay programmer by learning and showcasing my skills.

There were two main obstacles, which I go into detail in the reflections for the respective artifacts. The first was simpler, where I had to upgrade all of my projects to the Unreal version I was using, 5.5. The second artifact required me to delete some code, and redo a feature that used deprecated engine functions. The third and fourth artifact required changes to the Target.cs files, and that was a little confusing, since I didn't realize I needed to make changes, and then open the copy of the project it made. Eventually I saw the project directory location in Visual Studio, and realized my confusion. The other obstacle was losing my source files for my fourth artifact. I had files larger than 100 MB, the limit, so it refused to upload to GitHub. In trying to remove them, I lost a lot of my work done in this class. With some help from my instructor, and the internet, I figured out how to recover files, and remove the ones too large, so that I could upload the project. There were other minor problems with finding the best way to implement features, and managing lag. All I needed was time away from the projects, and the solutions came to me.

I will incorporate professional ethics in my career of gameplay programming by considering the impact of game concepts. By creating publicly available products, I'll have a real possibility of affecting people. I'll have to be aware of biases, stereotypes, and acceptable monetization routes. Biases and stereotypes are obvious, since they basically are false beliefs, and that shouldn't be propagated. Monetization routes have been a point of contention in the game industry, since some games allow players to “pay to win,” or, in other words, buy DLC that gives them a competitive advantage. These, by affecting players, will reflect on me as a developer, and risk my reputation.

Phone Model and Animation

Details
This is a phone model and animation I made for a college course. It was made at the beginning of my college career in 3DS Max. It was then refined and polished for the capstone course of my degree. During the capstone, I also decided it was necessary to be able to import it into a game engine. I found that it was very simple to export and import the project into Unreal Engine. I also used ffmpeg to convert the image sequence to a video. I then used it to convert the video to a GIF for this website. The source files are available here, and all files can be downloaded under Releases on the right.

Reflection
I would describe creating and polishing the artifact as insightful. The reason I say that is because I got over the hurdle of 3D modeling and Unreal imports, and realized it wasn't as difficult as I thought.

I learned how to model with reference images. I was able to take 2D shapes and create a 3D model. I also learned how to use 3DS Max more efficiently. There are, like other professional software, many shortcuts to save time. I also learned how to import assets into Unreal. I discovered that many softwares can export to .fbx files, and Unreal can import those files. There's also lots of settings to make sure you only import what you need.

The main challenge I faced was cleaning up the model. I needed to get rid of a lot of unnecessary vertices, but I couldn't find an easy way to do that. I decided to manually remove the vertices, and add back some edges to make the faces transition more smoothly. Finally, I learned how to use ffmpeg to convert between image and video file types. I went from an image sequence to a video, and then from a video to a GIF to avoid embedding the video.

I incorporated feedback by considering time. I had to efficiently split my time between four projects. I barely remembered 3DS Max, so I had to consider how long it would to relearn how to do what I wanted, and then how long the change would take itself.

The model's main improvement was its animation. It's now much more detailed, and includes movement on the phone buttons. Any button can move, but I have it type 911. The models were also slightly improved. Like I said, I removed a ton of vertices, and the handset now has speaker and microphone holes. I also changed the smoothing on the model.
Examples



Metallic Dectective: Treasure Hunter

Details
This is a game prototype called Metallic Detective: Treasure Hunter. It was made at the beginning of my college career, and was then refined and polished for the capstone course of my degree. It was originally made in Unreal 4, and then upgraded to Unreal 5. In the game, players dig up and collect treasures within a time limit. There's a metal detector that has visual and audio output. The source files are available here, and playable files are under Releases on the right.

Reflection
I would describe creating and polishing the artifact as fun. I think this was the first time I made an actual game in Unreal, and it was nice to polish it as a single experience. It was so great to be able to play something that I made without direct tutorials.

Without following an exact guide, there was a lot learning in Unreal. I had to learn a lot about Blueprints in the class, and reuse or modify those concepts for the requirements of the game. During the capstone, I learned a little about upgrading from Unreal 4 to 5. For a blueprint project, there is some code that needs to be changed. This was a challenge I faced, but all I needed was to do was delete some VR code.

The main challenge was trying to fix my destructible objects. Unreal 4 used Apex for destructible objects, while Unreal 5 uses Chaos. I had to learn how to use the new geometry collection system, which basically required me to replace the static mesh with a geometry collection in runtime. I also had to learn how to create geometry collections from existing meshes, which is done in fracture mode.

I incorporated feedback of my own based on how I felt about the game and my time constraints. I knew I couldn't downgrade the game by getting rid of the destructible objects, but I decided to do the improvements first in case it was too time consuming. I found resources that helped, and decided it was pretty easy to fix.

The game's main improvement was the metal detector. It now has visual and audio feedback instead of light over the diggable spots. There's a bar that goes down and the beeps get faster as the player gets closer. The level also looks a lot nicer, as I used the foliage mode with custom meshes to randomly place trees and grass. There is also now a start screen, and pause screen on top of the end screen, with options to restart, quit, or continue, depending on which one.
Examples





Development


Survival Prototype

Details
This is a game survival game prototype. It was made later in my college career, and then refined and polished for the capstone of my degree. It was made entirely in Unreal 5, with a mix of C++ and Blueprint classes. There are objectives for collecting resources and building. There are also basic enemies that wander, and chase and attack the player when seen or touched. The player can also hit them to kill them. The source files are available here, and playable files are under Releases on the right.

Reflection
I would describe creating and polishing the artifact as a little difficult. This was my first C++ project, and while I was copying code from the tutorials, I didn't fully understand what was happening. By the end I had some foundational knowledge, but it wasn't until the next entry on this page that I fully understood C++ in Unreal.

One thing I learned was how to create objectives for the player. This was something I wasn't sure how to tackle, but now I have a better idea. I also learned more about modeling and texturing in Unreal. Using the modelling mode, I created trees, rocks, and bushes, which served as the resources for the game. I also learned a simple way to apply different materials to different parts of objects. Finally, I learned how to create a navigation mesh, and how to use that for the AI. During the capstone, I learned how to use behavior trees and how to program for that. In a personal project, I also wanted AI, so I taught myself there before taking on this feature. I also learned how to use actors in the foliage mode. Unreal has a way to convert actors to foliage actors, so that their code still runs. This also allowed to use foliage mode to randomly place resources with a sort of painting tool. One final thing I learned was how to use the default animations on custom characters. It just requires either a small code or setting change.

The main challenge I faced was upgrading the project to Unreal 5.5 from 5.2. Since there's a built-in upgrade tool, I thought I would be fine. However, I found that there were a lot of errors coming up in the conversion process, and there was an option to open Visual Studio. It gave me a hint that the .cs files had wrong include versions, and I found the problem. I thought I fixed it, but when I tried to upgrade again, I got the same errors. I eventually realized that it was making a new copy every time I upgraded the project, so I had to change the files, and just open from the new folder that I was actually changing. Another challenge I had was with the AI. They would chase the player, but stop every time they reached the destination they decided the player was at. I realized this was because I had them navigating to the player's location, not the player actor. I changed the service that found the player to just return the player actor object instead of a vector, and now they follow without stopping. Finally, another challenge that I decided to work around was C++ decorators, services, and tasks. I couldn't, at the time, figure how I would cast to blueprint classes (the AI) from C++ code. I later learned I could probably use Blueprint Implementable Events.

I incorporated feedback by considering time again. This was the hardest polishing yet, and I had to learn a whole new section of Unreal. I decided I would spend my free time learning AI, and then use that to work on the project. I also considered features I didn't think of in the planning stage, like snapping structures, or a new structure, but I decided that I had probably spent enough time on this one already.

Most of the improvements were related to the AI enemies. They originally wandered, but on top of that, they now have animations, and can sense the player, chase them, and attack them when in range. The player can also attack the enemies. I also expanded the map, changed the resource availability, and added better materials to the structures. By using the foliage mode to place actors, I may have also improved performance a little, although it wasn't really a problem. It was also given a start screen, pause screen, and end screen, like the other artifacts.
Examples





Development


Parkour Prototype

Details
This is a parkour game prototype. It was made later in my college career, and then refined and polished for the capstone of my degree. It was made entirely in Unreal 5, with a mix of C++ and Blueprint classes. The player can move jump, and place platforms off of other ones with a gun. There are also portals that "catch" the player and teleport them back. These portals also allow you to see the level from above. Finally, there are jump boosts to jump higher, and bounce pads that launch the player. The source files are available here, and playable files are under Releases on the right.

Reflection
I would describe creating and polishing the artifact as a little stressful, but satisfying. Upgrading the project went smoothly, but I struggled a little with the lag from all of the portals. Fixing this lag in runtime was the satisfying part, and then there was the most stressful part. After packaging, trying to upload, and it being rejected for size constraints, I ended up losing everything done after refinement, although the git history still exists. Luckily I still had the packaged project to work with, but I was still dedicated to recovering the files and was successfully able to do so.

While creating the project, I learned a lot about graphics. I learned about dynamic materials, which can change in runtime. I also learned about particle effects, which add a lot of life to the game. They were used for the gun. Another thing I learned was how to make procedural meshes. This was used a terrain and could be modified by the gun. During the capstone, one thing I learned was how laggy scene captures (cameras) can be. Having 20 if them in the level just freezes the editor, but I also learned how to mitigate it. I just used the portal's variable for the player camera location, and had it disable its scene capture when the player was far enough away. This had the added benefit of acutally changing the scene capture when the player moved. I also have learned more about git through losing and recovering my files. I specifically learned how to go "back in time" in git, and modify a commit, with the reset and ammend commands.

I kind of already talked about challenges, but the main one was the lag from the scene captures. My attempt during refinement didn't work correctly, so I removed it and tried again during polish. I was only able to get it to work because I realized the portals already somehow had the player's location, and I just had to find it. The other main challenge was losing my files, which has not been overcome yet. I accidentally left the packaged project in the files, which was too big to be uploaded. In trying to remove those files, I lost a bunch, although they were still recoverable. I eventually learned about the ammend command, which changes a commit based on the current working tree. I reset to after my polish commit, used reset to untrack the PackagedBuilds folder, and then used commit --ammend to change the commit. My next challenge was getting the platforms to spawn when the gun's projectile hits something. I realized from past experience that I can make a UPROPERTY that could be set in the Blueprint for that C++ class, avoiding the need to create another C++ class. I discovered that the spawned platforms would have to be actors, and not just meshes, though.

I incorporated feedback through my own opinions. I discovered how laggy the game was, and decided to shorten it to reduce the portals. I also considered that the platform gun wasn't necessary as I orignally built it, so I changed some things to make it more challenging without the gun.

The game was improved by making an entire game concept out of the features I already created. I realized that the portals would be an interesting way to checkpoint the player through a basic parkour level, since a player could see the level from above, but a little behind. I also thought that the parkour should have some other features, so I decided to include jump boosts, bounce pads, and the platform gun. It was also given a start screen, pause screen, and end screen, like the other artifacts.
Examples




Development