Monte Perdew's profile

Game Development Portfolio

Monte Perdew
Game Development Portfolio
My name is Monte Perdew and I currently work as a Software Compatibility Engineer where I work with a team to analyze application behavior and code to provide solutions to mitigate the issue or assist the software developer in correcting the code.  After ten plus years in the IT industry, I was looking to advance my knowledge and education and decided that I wanted to pursue my lifelong dream of being involved in creating and developing video games.  Growing up I’ve always played video games and wanted to be a part of the process of video game creation.  I do want to learn and be exposed to all aspects of video game development even though I tend to enjoy and lean towards the more technical side of things; thus my interest in game AI.  The concept of breathing life into the game aligns with my desire to be involved in the creation of something that brings others joy. 

The order that I chose to present the four artifacts shows the timeline of my progression though the Game Programming and Development degree program. Each artifact built upon the other as I added additional skills and learned more about game development.  The artifacts were chosen in order to showcase skills in 2D and 3D graphics, game engine mastery, graphic interface design, game AI, game physics with a good organizational and analytical ability in solving complex problems.  I choose the artifacts because I was proud of not only the initial creation but because there were aspects I knew I wanted to and could polish given my new knowledge base.  Each of the artifacts was a project I enjoyed and wanted to enhance after the initial project completion date.
Luigi's Daring Rescue

The intent of the animation was to bring my story, Luigi’s Daring Rescue, to life for entertainment purposes.  It's a silly story taking place in multiple gaming universes from the 1980s.  The character Luigi from the Mario universe dreams about saving Princess Peach.  In his dream he traverses through several game levels from the video game worlds of Nintendo's Super Mario, Metroid, and Zelda, and Capcom's Mega Man until arriving at the final level to face off against Princess Peach's captor, the evil Dr. Wily, a villain from the Mega Man universe. The story ends with Luigi waking and realizing it was all a dream.  The animation enhances the story by communicating and illustrating emotions, actions, and character interaction through visual motion rather than text. 

Luigi's Daring Rescue was created in May 2017 as a project for my Interactive Animation course and was one of the first projects near the beginning of my Game Programming and Development degree program that demonstrates skills working with 2D graphics, like sprites and textures, within Adobe Illustrator and Animate to create an interactive story animation. This animation includes basic graphic interface design elements as it incorporates interactive buttons for starting the story, progressing to the next scene, and restarting the animation from the beginning. In addition, it demonstrates working with the 12 basic principles of animation in order to simulate realism.  The characters appear to abide by the basic laws of physics or exaggeration, such as squash and stretch to convey emotions such as surprise, as well as incorporating precise timings for music and sound effects all while telling a cohesive and entertaining story.  Improvements to the artifact were completed in October 2019.

Credits:  Thank you to The VG Resource for providing sprites from the various game universes and information on working with sprites:  Main Page. (2019, September 11). The VG Resource Wiki. Retrieved from https://wiki.vg-resource.com/index.php?title=Main_Page&oldid=2282
Nested Animations
Timeline and Layering Management
Completed Animation
Tools used  

- Adobe Animate
- Adobe Illustrator

Highlighted skills

- Skills working with 2D graphics
      - Creation of 2D elements utilizing Adobe Illustrator.
      - Managing layered 2D elements to create characters and environment.
      - Utilization of timelines and keyframes to control animation flow.
      - Implementation of nested animations for character specific animations like walking or running.

- Skills with Graphic Interface Design
      - Implementation of interactive buttons to start the story, advance to the next scene, and restart
        the story.

- Skills in working with the 12 basic principles of animation
      - Each scene follows the principal of staging by directing the viewer's attention to the most
        important elements of the scene.
      - Characters utilize multiple principles such as follow through and overlapping action, timing,
        squash and stretch, and exaggeration to move realistically in the environment while conveying
        emotional responses within the cartoon-like style.

- Skills with Music and Sound Effects 
      - Each scene has music and sound effects within the theme of its universe.
      - Music and sound effects are executed correctly at the precise times in the overall animation
        timeline.
Reflection

I enjoyed creating this artifact and I’m proud of what it became.  I had never worked with Adobe Animate or knew anything in regards to the fundamental processes of animation before this project, like key framing, tweening, and other various techniques to make animation natural.  In revisiting this project I was given an opportunity to change and improve aspects of the artifact that I couldn’t due to time restraints when it was initially created.  For example, how the turtle shell interacted with Shadow Link was an item that I had always wanted to refine.  This also allowed me to add more animations to further immerse the viewer like the fireworks and change how some aspects looked like Princess Peach’s chat bubble at Dr. Wily’s castle.  I also really felt the final scene in Luigi’s room was barren and was glad to revisit that to add more to make it consistent with elements of that world.  It was a fun and educational learning project to take a game world, Super Mario Brothers, and create something unique and different from anything else I’ve done before.   

One of the main fundamentals I learned was the 12 basic principles of animation in order for the characters to appear more realistic and as if abiding by the basic laws of physics.  Specifically, the stretch and squash principle was useful in generating a cartoonish animated surprise emotion.  I learned how to use key framing, tweening, and through some research how to use nested animations.  Nested animations allowed for animation while characters moving and an example would be Luigi’s walk animation and the piranha plant added in the last scene.  Overall, I learned how to animate and this was a good opportunity for me to learn some fundamentals that I’ve continued to build on.

One of the challenges I faced was needing to research techniques outside of the course material.  For example, I had to research and determine how to use nested animations to simulate a character walking.  Another challenge was synchronizing animations with sounds and music.  The biggest challenge during modification was adding frames and/or key frames to the animation while not disrupting other existing elements of scenes.     

As I was creating the animation I often sought feedback from friends and family, specifically if I thought something just wasn’t right.  Some feedback I received was around timing of Dr. Wily shooting, the interaction between the turtle shell and Shadow Link was too slow motion, when sounds triggered versus the animation timing, and separating the chat bubbles on the Samus Aran scene.  I agreed with these recommendations and some I was able to address when I initially worked on this artifact.  Others, like the turtle shell interaction and the chat bubbles, I implemented for the ePortfolio.

Artifact Improvements

In implementing changes to the artifact, I’ve cleaned up the rough edges in order to present a polished artifact that shines in working with 2D graphics, animations, sounds, and timings.  The below changes prove a more robust experience, convey emotions more clearly, and help with readability:

- When Dr. Wily shows up to kidnap Princess Peach,
      - I have enhanced Luigi’s animation at the moment where the exclamation point presents to                more effectively convey the character’s surprise.
      - I have adjusted the timing and sequence in response to when Dr. Wily shoots Mario and Luigi            ducks to take cover.
      - I added a tweening animation to smooth the transition from Mario standing to Mario lying on              the ground after being hit by Dr. Wily's laser. 

- In the Metroid scene, I separated the chat bubble for Samus Aran with timing to
  increase readability when Luigi is taken away by the Metroid into two separate bubbles.

- In the scene where Luigi defeats Shadow Link, I adjusted the timing of the turtle shell by removing
  unneeded keyframes, adding animation frames, and combining some tween animations to provide
  a smoother animation and transition.

- In the scene where Luigi arrives at Dr. Wily’s castle, 
      - I added an exclamatory chat bubble for Princess Peach.  
      - I added fireworks explosions and timed sound effects to represent the explosions at the end of          a Super Mario Brothers level.

- In the final scene, I enhanced Luigi’s room by adding items from the Super Mario universe to fill in
  the open space and make the scene more immersive and consistent with that world, including an
  animated piranha plant.

Miner's Revenge

Miner's Revenge was created in February 2017 as a project for my Information Technology and Digital Games course, which was one of the first classes that introduced working with game engines.  This artifact was another of my creations near the beginning of my Game Programming and Development degree program and I selected this artifact because it presented an opportunity to add further content and polish through the use of skills and knowledge obtained following the course.  Within this course, I worked with LiveCode and Unreal Engine to produce mock-ups of a tower defense game, guided by a provided abbreviated game design document outlining the basic idea that the game was set in a western themed gold mine. I created a short story where the player is hired as Gold Dig Dug Mine's Chief Security Officer to defend the mines from the raiders utilizing the design document as a guideline, which is displayed within the game on the Instructions screen. 

Additionally, I selected the imagery and sound to be consistent with the western theme. The original mock-up that was created did not require level content to be created and focused on building a functional menu system according to the specifications given in the game design document.  By including additional level content I hope to showcase a greater range of game development skills beyond the initial work, which demonstrated skills with 2D images and blueprint logic to create a functioning main menu, such as interactive graphic interface design, basic enemy AI spawning and pathing, and complex logic problem solutions to functions such as placing a tower within the level.    Improvements to the artifact were completed in October 2019. 
Menu Navigation
AI Spawning and Pathing
Tower Placement
Tools used  

- Unreal Engine 4
- Adobe Illustrator
- Adobe Photoshop

Highlighted skills

Skills with Graphic Interface Design
      - Strong menu system containing the following:
            - Level progress screen which unlocks access to the next level upon completion of the
              previous level and allows the player to reset game progress.
      - Tech Vault screen which displays tower details when unlocked on completion of each even
        numbered level.
      - Audio Setting screen which contains functional sliders that adjust background music or sound
        effect volumes.
      - Instruction screen which provides a basic story and details regarding the game.
      - Quick Play buttons allowing the player to start the most recent unlocked level from any menu
        screen other than the level progress screen.
      - In game HUD containing the following:
            - Enemy counter to display how many enemies made it to the exit.
            - Money counter which updates on money gained or spent to place towers.
            - Level and Wave information.
            - Functional countdown timer which ends the level when time expires.
            - Interactible buttons to start the level, return to the main menu, or demonstrate prototype
              element functionality such as completing the level or gaining money.

Skills with Sound
      - Adjustable volume levels for background music and sound effects.
      - Volume levels are preserved when exiting and entering game levels.

Skills with Game Engine Mastery and Complex Logic Problem Solving
      - Implementation of global variables within Unreal Engine blueprints to allow tracking and control
        of the following:
            - Music and Sound volume control.
            - Tracking player level progress for use in unlocking the correct levels in the level progress
              menu.
            - Reset of game progress and variables to default values.
      - Implementation of interactive buttons on game head up display which perform the following:
            - Triggering the start of the level which triggers AI enemies to spawn and countdown timer to
              start.
            - Interactive tower pads which respond to mouse over events and present options to chose
              which tower to place only when a tower is not present.
                  - Tower placement buttons also have logic to only allow placement of unlocked towers
                    and will not allow placement if money is not sufficient.
            - Interactive buttons for demonstrating win condition for a level and updating the amount of
              money available during a level.

Reflection

This artifact was initially created as a proof of concept where the main focus was on the menu system, thus initially I created limited level content.  As this was also my first exposure to the Unreal Engine (UE) tool and specifically blueprints within UE, I’m happy with the level of functionality I was initially able to achieve with the main menu system.  In polishing this prototype and adding further functionality in game levels by adding the enemy AI spawning and despawning mechanics, tower placement, and interactive and dynamically updating heads-up display elements, I feel this artifact is closer to a final working prototype.  Though I do recognize that there is more work to be done such as damage interaction between towers and the enemies.

This is one of the first projects where even though I was using blueprinting in UE I still needed to understand the concepts of blueprint communication in order to implement many of the features, such as global variables, enemy AI spawning mechanics, and tower placement.  I also learned that to solve a problem you must research and try multiple approaches in order to successfully resolve the need.  For example, I had initially planned on using spline paths to provide the pathing for the enemy AI but due to challenges and disappointing results I conducted further research which lead me to redesigning AI behavior using character blueprints, navigational meshes, and target points to achieve the desired results. 
    
One of the original challenges this design presented was the need for global variables such as background music and sound effect volumes, current level and tower unlocks, and currency. This was achieved through the use of a game instance blueprint which contains these exposed variables so that other elements such as the main menu, game HUD, and the level could read and manipulate their values for needed functions.  Another challenge was the implementation of an enemy AI that would not only spawn and run to the exit but also animate correctly. At first I attempted this through the use of spline paths but did not obtain the results I desired. After much research and experimentation I was able to implement the desired behavior and animation by using character blueprints which use the AI move to function, an AI Spawn actor blueprint, and a target point for the exit.  Finally, the last challenge was the placement of towers within the level. To do this I implemented a tower spawn pad blueprint which responds to mouse over and click events to display a menu to choose which tower blueprint to spawn.

I adjusted imagery and sound effects throughout the course of creating and updating the project in order to create a consistent and pleasant experience that aligned with the games overall western theme.  Feedback that I received about the menu system was overall positive and confirmed my initial assessment that the lack of any substantial level content was the big weakness for the prototype.  This is why I focused polishing and improvement efforts on creating level content to demonstrate how the game would play. 

Artifact Improvements

In implementing the below changes to the artifact, the prototype’s theme and play style are more succinctly conveyed, game AI design and logic are demonstrated, and the usability of the prototype has been polished:

- Current state of menu navigation demonstrates that the menu system, audio system, and 
  navigation is intuitive and functional.  I adjusted the lock icon on the Tech Vault screen so that it
  doesn’t impact readability of the Tower name.

- To implement the placement of towers within the level,  I created a tower pad blueprint that
  responds to mouse over and click events that interact with heads up display elements to display
  tower options for purchase and placement.

Improved the 3D aspect of the prototype by implementing enemy character AI through the use of a
  character blueprint, AI spawn actor blueprint, a target point, and navigational mesh.   

- Changed the artifact’s name to Miner’s Revenge to be consistent with the prototype’s theme. 

Team B Sidescroller

This was a prototype game built in a team setting and is a 3D Sidescroller, platformer similar to Nintendo's Metroid.  The character must navigate through the level avoiding enemies.  The character can walk, jump, and shoot a weapon.  Holding right-click allows the player to aim.  The prototype includes player health and ammunition pickups, hidden collectibles, obstacles, HUD (progress of collecting objects, player health, ammo count, and countdown timer), collectible power-up item, and sound.  Win condition is to make it to the level’s end within the allotted time.  Loss conditions include running out of time or health.
 
This artifact was selected as it holds a level of pride and sense of accomplishment for me in addition to demonstrating a greater range of skills which I have developed over the course of my studies in the Game Programming and Development degree program. This game was designed as a prototype built in a team setting in October 2018 for my Digital Game Development class utilizing the scrum approach to agile software development with each phase divided into week long sprints. I specifically was assigned the role to design and implement enemy characters which included artificial intelligence (AI), texturing, collision, and player interaction in addition to assisting with implementing character design and player controls.  Due to challenges that impacted member participation and deliverable completion arose during the project I stepped up to fill the role of Project Manager/Producer helping to facilitate team communication, enable individuals to complete their deliverables, and maintain the project deadlines under tight time restrictions. This included the creation of the quality assurance (QA) release testing checklist to ensure all critical features were implemented successfully, as well as the team member sprint and postmortem surveys to gather feedback from each team member and evaluate any new challenge that arose during the project. Later in the project I also contributed to implementing pickups, collectibles, and their interactions with the player.  To facilitate code management and team contribution we utilized a Bitbucket repository for this project. 

​​​​​​​I completed further refinements to the prototype in October 2019 which included correcting and adjusting sound, destructible floors, texturing, damage zones that were not applying knockback to the player, a problem where the player was temporarily blocked by dead enemies, and enemy AI wandering and chasing.

Credits:  Thanks to the team who brought Team B Sidescroller to life - Nick Jennings, William Horn, Elaine Bolte, Amanda Ackerman, Ben Middleton, and Monte Perdew
AI Chase Example
AI Chase Blueprint
AI Wander Example
AI Wander Blueprint
Navigation Mesh with Target Points
Destructible Walls
Collectible Example
Pickups and Collectibles 
Level Area Examples
Level Play-through
QA Testing Worksheet Example
Sprint and Postmortem Survey Examples
Tools used  

- Unreal Engine 4
- Adobe Photoshop
- Adobe Illustrator
- Microsoft Excel
- Microsoft Word
- Bitbucket

Highlighted skills

- Skills with 2D and 3D graphics
      - Dynamically updating 2D graphics used in the HUD for collectible progress, health, and ammo.
      - Custom 3D models for pickups and collectibles.
      - Player, enemy, and environment texturing.

- Skills with Graphic Interface Design
      - Main menu with actionable buttons to start the game, exit the game, or display controls
      - Dynamically updating heads up display (HUD) showing time remaining, health, ammo, and
        collectible progress as well as error display when health or ammo is full when a player tries to
        restore health or ammo.
      - Pause menu which allows the player to unpause or exit the game.
      - Game over or level complete menus are displayed when the appropriate conditions are met.

- Skills with Game Artificial Intelligence (AI)
      - Three different types of enemies: Walking, Jumping, and Shooting.
      - Walking and Jumping enemies transition between wander and chase state logics when either
        the enemy is damaged, player is seen, or player visibility is lost.
      - Shooting enemies are programmed to periodically fire their weapons providing further
        obstacles for the player to avoid.

- Skills with Game Physics 
      - Level contains various destructible walls and floors which hide secret areas.
      - Player push back and damage when colliding with enemies and damaging obstacles.
      - Player collision interactions with pickups, power-ups, and collectibles.
      - Projectile collision effects applying damage to the player, enemies, or destructible walls and
        floors.
      - Jump pad which allow a player to access alternate or previous areas of the level.

​​​​​​​- Skills with Game Engine Mastery and Complex Logic Problem Solution 
      - Successfully apply damage which updates the HUD and apply pushback to the player upon
        receiving damage.​​​​​​​
      - Updating HUD values when health, ammo, and collectible amounts change or notify the player
        when the collectible reward has been unlocked.
      - Successful triggering of win and loss conditions when player either reaches the end of the
        level, runs out of time, or health is depleted.
      - Implementation of AI states through the use of Navigation Meshes, Target Points, Component
        tagging and Pawn Detection.
      - Successful update of HUD to display errors when attempting to pickup health or ammo when
        either are full.
      - Successful transition to larger blue projectile for player weapon when power-up is collected
        which inflicts increased damage to enemy characters.
      - Enemy characters are all derived from a single master enemy blueprint for easy
        implementation and enemy variation.

- Skills in Project Management or Producer Support roles 
      - Creation of weekly sprint surveys, postmortem surveys, and Quality Assurance (QA) testing
        checklists.
      - Facilitated team communications and reviewed each weekly survey results to evaluate
        challenges to the project while providing assistance to contribute to success of team
        deliverables.  
Reflection

This was a team effort to create this prototype.  At the time, given time restraints and participation, I was quite happy with what the team was able to accomplish.  Some of the major challenges our team of six was that only half of the team was fully engaged and contributed through the whole process.  This left the challenge that other members of the team or myself were responsible for those tasks left undone.  Though this made it more difficult to complete the project on time, it was a good experience that mimics that challenge in real-life where several team members may get sick or experience a family emergency.  This required those of us to adapt our project plan and deliverables in order to meet the deadline.  Though I don’t actively seek leadership roles, when the team had an absence in that role, I was able to step up to assume that role and lead the team to successfully keep the team focused on their role and deliver the project on time. 

Yet, many aspects were added at the last minute and didn’t receive the level of polish I would have liked.  In polishing the artifact I took what was created in the team project then built upon and improved aspects that could be better based on experiences and additional knowledge gained throughout my course work.  For instance, I redesigned the AIs functionality to be more consistent with the intended chase and wander behavior states.    

In creating this artifact I learned that life events happen and the team may not always be able to contribute to their full capacity during the set timeline for the project.  This helped me to further develop my ability to be adaptable, understand how to lead a team, and make appropriate changes to deliverables to maintain the deadline despite unknown events that occurred.  Overall, I learned the importance of team communication not only in status updates but in communicating the creation methodologies for specific features like how the pickups or destructible items worked, coding and blueprint techniques, and placement of items.  When polishing the artifact I learned to be flexible in that you may implement a feature a certain way but later review the product and realize there were better, cleaner ways to implement said feature.  I also gained experience in reading and understanding other individual’s code and blueprints then how to modify it to gain the desired effect in order to further refine the artifact.   

During the creation some challenges were team participation, maintaining the schedule on deliverables, and adjusting for any slippages.  Communication amongst the team was also a challenge because we were virtual, in different time zones, and did not always actively work on the project at the same time.  In order to address the communication challenge we used Discord to stay connected despite time zones and Bitbucket to communicate progress.  In polishing the artifact the sound presented a bit of a challenge.  I had to read through code to understand where certain sounds were implemented so that I could determine if this was the best way to implement that sound function or if a better way existed.  For instance, the gun shot sound needed to be spawned and have attenuation added in order to localize the sound to a specific area.  Where other sounds like low health warning which is a game UI sound and needed to only play when the player’s health is below threshold.   Another challenge was with the enemy AI where the enemies wouldn’t wander consistently or throughout the entire area.  The AI would get stuck or would not properly chase the player.  The challenge was to find a better way to control the enemies and how they navigated the level when either in a chase state or a wander state.  

During creation the team surveys facilitated changes throughout creation as everyone on the team play tested as we went through the process.  A lot of the polishing efforts in sound and texture were based on feedback from the professor of the course that the artifact was created.  As for the enemy AI, the polishing that took place in this aspect was something I felt could be improved through playing the game.  I invited others to play the game with the intention of receiving feedback for improvements. Those who played the game had mentioned the inconsistent crumbling of the floors and that feature was also refined. 

Artifact Improvements

I have implemented the following changes for this artifact polishing the usability of the prototype:

- Corrected shooting sound upon enemy discharge, as it was heard throughout the level, by
  changing from play sound to spawn sound at location then adding attenuation.

- Adjusted additional sounds throughout the level:
      - Lowered background music volume by half.
      - Lowered shooting sound volume to 25%.
      - Adjusted sound of jumping enemy by adding attenuation to localize sound to the                                enemy.
      - Changed sound for power-up pickup to a more appropriate sound.
      - Adjusted volume level and added attenuation to localize the sound effect.
      - Adjusted volume level and added attenuation to all pickup items.
      - Corrected low health sound so that it quits playing once player obtains a health                                   pickup.

- Corrected destructible floors that were not crumbling correctly by:
      - Recreated the destructible mesh so that the floor was breaking correctly.
      - Updated lifetime of debris so they don't impede the player.

- Corrected texturing throughout the level to remove stretching and distortions by                                   adjusting UV scaling on textures.

Corrected damage zone (pain causing volumes) that were not applying impulse (knockback) to the
  player by adding a check when the player takes damage to apply impulse when the damage is
  caused by pain causing volumes.

- Corrected problem where player would be temporarily blocked by dead enemies by adding a
  function to change collision response to ignore player collisions when enemies die.

- Corrected issue where enemy wandering and chasing did not work correctly and sometimes
  resulted in the AI getting stuck or not wandering/chasing as intended by adding target points to
  each of the navigation mesh areas then assigning tags to both enemy AI actors and target points. I
  used the tags to create an array of the correct target points for each zone then using a random
  integer within the range of the array length to select a random point to move to when wandering.

- Corrected issue where if enemy is not facing the player it will not chase and enemy does not
  respond to damage by adding a function on damage to the enemy that it will start chasing the
  player.

  SplatMaster

This purpose of this artifact was to understand fundamentals of when it is beneficial to use pre-existing game engine functions versus writing custom code from scratch.  The theme is a paintball level with multiple objects.  The player’s projectile creates a random size, color, and shaped splat effect when connecting with objects, floors, walls, or water.  Certain objects within the level change their shader/texture on collision with paintball.  The artifact shows differences between high and low level Application Programming Interfaces (APIs), optimization techniques such as writing custom plugins using low level APIs.  Specifically, the runtime mesh component plugin was used in order to create meshes for objects and apply/change textures at runtime instead of using more resource intensive static meshes.  

This artifact was selected as it demonstrates my continued growth in working with the Unreal Engine and the C++ programming language while learning further concepts in regards to considerations between high-level and low-level Application Programming Interfaces (APIs) when implementing 3D objects and applying materials (aka shaders). This artifact also demonstrates the use of the C++ language and custom plugins such as the runtime mesh component and procedural mesh component plugins to create dynamically changing elements during runtime while optimizing game performance. As this was my second project where I utilized a majority of C++ code instead of blueprints within the Unreal Engine, in addition to creating and applying materials, which I consider one of my weaker points, I am pleased with the outcome. I believe this project is a good foundational creation in which I can continue to build upon as I learn and gain experience.  This artifact was refined in October 2019.

Runtime Mesh Component Plugin
Procedural Mesh Component Plugin
Applying Materials at Runtime 
Projectile Splat
Dynamic Materials
Level Play-through
Tools used  

- Unreal Engine
- Adobe Photoshop
- Adobe Illustrator
- Microsoft Visual Studio

Highlighted skills

Skills with 2D and 3D graphics 
      - 2D textures utilized to apply randomly shaped and colored paintball splat decals to the impact
        area.
      - Creation of various 2D and 3D shapes through C++ code at runtime.
      - Application of materials (shaders) to objects during runtme.
      - Creation of dynamic instanced materials which allowed parameter changes during runtime.

- Skills with Game Engine Mastery 
      - Utilization of C++ language to implement player character, projectile, and object meshes at
        runtime.
      - Implemented collision logic within C++ to manage object references to control changing
        materials or applying splat decals at the impact point during runtime.

- Skills with Complex Logic Problem Solution
      - Implemented projectile collision logic to consistently apply randomly shaped and colored splat
        decals to the correct impact location of both static objects and objects simulating physics
        interactions.
      - Solved for challenges in collecting references to objects that the projectile collided with in order
        to change parameters for the object's dynamic instanced material, such as changing the
        question block from yellow to orange when hit by the projectile.

- Skills with Game Physics 
      - Correct application of splat decals to objects simulating physics which allows the object to
        move while maintaining the decal application at the impacted location.
      - Collision with objects with instanced dynamic materials, such as the question block or targets,
        properly change colors.
      - Collision with water allows application of splat decal below water surface providing a more
        realistic effect.

Reflection

This artifact demonstrates use of C++ code and 3D texturing.  Even though this was a more recent project, in comparison to other projects this was completed primarily through the use of C++ programming language with only minor materials created through the editor.  I approached this project with the basic concept of a paintball arena or level and simply begin creating shapes and textures without any real though to placement.  In polishing the artifact I wanted to ensure it had the look and feel of an actual paintball level.  Thus, I created a layout that made sense to the concept and added additional shapes and textures but still maintained some of the objects and textures I had created in the original creation.  I felt the original creation successfully shows specific skills in a small environment that was more museum like where each object was showcased.  In polishing the artifact with the purpose to build-out an actual paintball level while using those skill and items helped to actualize how these methods could be used to create a full paintball game.

Before starting this project I only had a basic understanding of what Application Programming Interfaces (APIs) were and how they were utilized in programming a game.  I honestly wasn’t aware of the specific differences between a high-level and low-level API and what the trade-offs were.  So once the project was completed I understood how to use low-level APIs in the form of plugins, the benefits of using low-level versus high-level APIs, and the cost associated with each. 
While polishing the artifact I learned to manipulate my existing code in order to implement a limited lifetime for the splat decal.  I utilized texturing techniques from other courses that I had learned to produce new materials fitting the paintball arena theme.      

The biggest challenge I faced was during the project creation was that a majority of the project had to be completed using C++ code instead of materials available within the engine.  Another challenge was when I used the low-level API plugins for the runtime and procedural meshes, I had to write out the specific code that creates the three dimensional mesh of the object being drawn.  I had to really think in 3D terms of how all the vertices were connected to write successful code for the object and for the UV texturing coordinates.  Other challenges encountered were in regards to the application of the splat decal.  It wasn’t as simple as adding a texture rather I needed to consider collision of the projectile, destruction of that projectile, the application of the splat on the collided target at the hit location, and ensure that the decal is facing the right direction.  Specific to the splat decal again, I had to determine how to implement the splat material for the decal in a way that would vary the size, shape, and color of the splat at the time of its application. 
​​​​​​​
Being that one of the focuses of the project was on the creation of objects and materials and understanding those techniques, I didn’t focus on the layout of the level.  Though it was my intention to incorporate a layout that fit the paintball theme when polishing, this was feedback that I received.  I also received feedback to consider performance considerations with the decals even though I wasn’t experiencing performance issues with the original iteration.  This would be an important consideration if the artifact was to evolve into a multiplayer prototype, which would exponentially increase the number of decals at any given moment leading to possible performance issues.  To solve for this I implemented a 45 second lifetime for the splat decals.  

Artifact Improvements

I have implemented the following changes for this artifact polishing the usability of the prototype:

- Added a 45 second lifetime to paintball splat decals to reduce the number of decals covering the
  level and prevent performance issues related to large number of decals.

- Redesigned level layout and added actors with different shapes to create more of a paintball level
  feel. 
  
- Created new textures and materials that were then applied to various areas of the level both prior
  to runtime and at runtime.

- Updated C++ code for actors applying both static and dynamic materials at runtime.
Game Development Portfolio
Published:

Game Development Portfolio

This is a collection of projects I've been working on as I learn and grow in the art of video game development.

Published: