This semester, I've joined team Tall Hat to work on Mapstermind in Unreal Engine as a gameplay programmer and sound designer. I'll be mainly focusing on development for the new Seafloor stage and implementing various Pieceling tasks and Mapster traps for the gameplay. I'm excited to see where the game goes and so far the semester has been a fantastic growing experience.
Mapstermind is a Mario Party-esque couch co-op game that is played in a 3v1 dynamic. The map resembles a board game and 3 players are board game pieces called Piecelings. Their job is to work together to complete all tasks on the map before time runs out in order to open the door and escape the map. One player operates a set of hands at a control board and is called the Mapster. This player is equipped with various traps and attacks in order to slow the Piecelings down and run out the clock. If the Piecelings are unable to complete their tasks in time, the Mapster wins.
Here is the trailer from last semester:
In addition to the current city themed board, we are implementing a new seafloor themed board with new tasks and traps for the players to try out. Our team has divided ourselves to have a group working on polishing the city level and another working on creating the new seafloor level- and I am a part of the seafloor group. I've been working on implementing new features that the designers create for the level.
This is the current blockout the designers have developed:
First steps and mechanics
For the first week of development, I mainly worked on adding some features to the city level in order to give the designers some time to concept mechanics and finalize some pieces before I asked them for work to do. I implemented things like a drop function for the Piecelings, a Pieceling shout where they could call to the other players to rally to them, a countdown so the Piecelings can synchronize for tasks, and some UI indicators like a placeholder trap counter for the Mapster and a compass that would hover above the Pieceling showing them where to take the item that they have picked up. These were all pretty minor and quick, it really helped me to get to know the code base though and helped a lot as an intro to the project structure.
Since then, I've been working a lot with the designers to build up the new mechanics, meeting with them often to clarify the different elements that come up as we progress. The main pieces I've been developing were some Mapster traps and some efficiency tweaks to a few systems.
One of the biggest features I have been working on is a shark that will be patrolling the pirate ship in the level. This has been a multi step process to allow the designers to solidify mechanic decisions and find the most organized way to add these traps to the already existing systems.
Part I: Movement -
The shark patrols the ship on a spline path that is editable in the scene by the designers. They requested an infinity symbol shape for now that weaves in and out of the ship, where there will later be a hole in the middle.
Part II: Attack -
Whenever the shark encounters a Pieceling on its patrol, it will attack. The current plan is to knock back the Pieceling and throw the item it is holding across the map, but this is not finalized yet. As a temporary placeholder, the shark does a little spin when it encounters a Pieceling and then continues on its path. The current Pieceling colliders are offset for reasons involving the model, but the collider below is in the shark's path:
Part III: Activation -
Unlike previous traps that were controlled from the Mapster's panel, this trap is activated by the Mapster clicking on the game object itself that is on the board. This was a system that will likely be a reoccurring element, so I have implemented a system that allows a single variable on the trap object itself to allow the Mapster to select it on the board. The current activation not very smooth since the designers will be going back to alter the path and change the collisions, but this is the current result:
Mechanic: Puffer Fish -
Another trap the designers have decided on is a deployable puffer fish. The Mapster will be able to place a trap and choose its rotation. Once activated, a puffer fish will appear and patrol the area straight ahead of the trap with respect to the rotation. Any Piecelings that contact the puffer fish will have a consequence upon them- the working idea is they slow down for a set amount of time but that is still being decided. It will also turn around if it collides with any environment obstacles and continue to patrol until the set time runs out. Currently the only mesh in the level with colliders that work is the pirate ship, so this is a demonstration of the simple collision and turn around motion of the puffer fish. The placeholder asset is a satellite dish because I thought it was funny:
I have been able to work on the background music for the seafloor level. I'm trying to keep the music framework similar to the city level's background music, trying to keep the mood and key relatively similar. I wanted to make the song feel Caribbean with a bossa drum pattern and retain a relatively funky melody. I kept the chord structure similar but changed them to be minor to convey the funk style. There is a system in place that is intended to overlap instrument tracks in order to indicate the time that has passed in the game. For example to convey this with the seafloor- the first pass through of music consists only of a drum set and electric bass. As time progresses through the stage, instruments will be added in waves of ukulele and marimba, then a high hat, then aux percussion, and lastly some horns. The intention is to add chaos and intensity as the clock ticks down and the game comes to an end. I plan to make the melodies longer so the music will have less repetition, but I have had the opportunity to develop that draft and have fun with that.
So far, this has been a great learning experience for joining a team that is developing a project that is already in progress. I have learned a lot about entering a codebase that is written by someone else, especially in regards to blueprints and Unreal.
I'm happy with how quickly I've been able to add different features, a lot of them are added to existing systems and I have had to optimize some of I create my own. They're come out well though and I'm really excited to keep adding mechanics and new things!
I've also learned a lot about implementing C++ scripts along with blueprints in Unreal, which has been a big deal. It's super interesting and makes a lot of blueprint struggles much easier, for example with inheritance and individual classes. I'm excited to have the opportunity to work in an unreal project that integrates more scripts into the systems.
Overall summary for the semester so far:
I'm excited to keep working on Mapstermind and I can't wait to see where it goes!