The real highlight of this year. Puffy MacPuffer is an opera about the titular character Puffy, a puffer boat and their adventure through the five Crabbit Canals. The development was split between two phases; Preproduction, no points for guessing what that was about, and the main meat of IP3 where we developed the game.
We initially started in IP3 with only a team of six: three programmers, one artist and two designers, though one of the designers had to unfortunately leave after the first few weeks. We met with out client, Ian Piercy, once every few weeks for brain storming and to update him on the progress.
The first few weeks was coming up with ideas and looking at the previous year's team attempt given the specifications we got in our initial brief: We were to make a game for 4-7yrs for the web, that were 1-3 minutes of gameplay per "section". we came up with with 3 ideas:
For the Pokémon Snap idea I was so excited for it I went ahead and tried to make a demo of the gyro control. The idea being, due to the recent-ish scheme by the Scottish government to give iPads to students we could use that to enhance our game and have a fun, memorable gimmick. Though, sadly due to issues with gimbal lock, drift and the more fundamental issue of it not being supported on Unity's WebGL compiler, I had to shelf it.
Concept 2 and 3 were our favourites, especially so concept 3, though we were apprehensive about the idea due to the high art cost with only having the one artist and the limited time we had to create the needed assets, and the lectures and client agreed so we went with concept 2's Pipe Mania but were told to expand it.
After that meeting we planned to see Ian at his studio for a brainstorming session the following day, where we ended up landing on the idea of a minigame collection; we'd keep Pipe Mania and make it about 10 seconds long per level and create another minigame I came up with based upon steering a boat in the hectic waters that form whilst going up a lock whilst trying to avoid hitting the sides, almost "balancing" it.
How we worked initially in preproduction was each developer was in charge of a minigame: I had Lock Balance, Dylan had Pipe Mania and Jack had Canal Cruiser, though we did of course still help each other whenever needed, either during our weekly meetings at the university or with the odd message on Discord
I started work on the first minigame Lock Balance, or at the time called "Canal Balance", I made the boat be pushed around using one-dimensional perlin noise, one for each axis and another for rotation, as it was some smooth randomness that was easily controllable for the designers to play with. Originally the game was played from a top-down view but due to perception issues during a demonstration in class of the progress this was quickly changed to a side-on view instead.
This was quickly followed up in the next 2 weeks with an indicator for the water's direction (which eventually got misconstrued into being wind?), a stun system to disable player input briefly when hit, a short transition cutscene of puffy exiting the top of the lock, the ability to actually lose by crashing into the sides and most importantly of all falling objects system for Puffy to collect and dodge to fit in with the new win condition suggest by Iain instead of the old system of having to survive an amount of seconds as the water raised to leave.
In-between doing all of that I created a website to allow us to quickly test builds using GitHub pages with an auto-deployer due to the WebGL builds requiring a server to be ran on, though all of this came with the added bonus of being able to showcase the progress to the client and lectures incredibly easily. Which was such a useful tool that I'll be 100% using a similar process for any future projects going forward.
void MovePuffy()
{
if (Input.GetButton("Horizontal")) velocity = Input.GetAxis("Horizontal") * (float)movementStrength / 100;
else
{
// Decelerates by X amount (divided by 100 to make it more reasoanble)
if (Mathf.Abs(velocity) > (float)movementDeceleration / 100)
{
if (velocity > 0) velocity -= (float)movementDeceleration / 100;
if (velocity < 0) velocity += (float)movementDeceleration / 100;
}
else velocity = 0;
}
// Stops Puffy from going past the edges
if (Mathf.Abs(transform.position.x + velocity) > movementArea)
{
if (transform.position.x > 0) transform.position = new Vector2(movementArea - 0.01f, transform.position.y);
else transform.position = new Vector2(-movementArea + 0.01f, transform.position.y);
velocity = 0;
}
transform.transform.position = new Vector2(velocity + transform.transform.position.x, transform.transform.position.y);
transform.rotation = Quaternion.Euler(0, 0, -velocity * (rotationStrength * 5));
} At this point we were at week 10 of 12 and we had just had our prototype presentation as well as a group playtest shortly after, the presentation went well with Iain liking how things were progressing but as always the lecturers held no punches.
After the presentation we focused on acting upon the feedback we got, I mostly focused on Canal Cruiser due to it lagging behind slightly compared to the other games. I changed the movement from lane-based to be completely free by borrowing my movement function from Lock Balance, rotated the playfield to make the obstacles from top to bottom to instead be right to left, added mouse controls to steer Puffy for mobile support for parity with our other minigames and for bonus accessibility, changed the win condition to be collecting creates based instead of surviving for a period of time and made the cargo dynamically add and remove itself behind Puffy when the player do collects them or get hurt by a obstacle instead of constantly having 3 as a quasi-life metre, changed the rope from being based on hinges to distance joints which finally got rid of the cargo stretching issue that was plaguing any showcase after playing for a short while, make Puffy flash when damaged, and made the game overall a lot faster.
We finally had our big playtest and it was mixed; we only had a small handful of people play the game, and even less so once the rest of the team had to leave and I was alone... but! the feedback we did get was very useful and it was very interesting to see where everyone else was at with their own projects, and of course I couldn't help myself and was trying to help them fix some issues .
After the playtest I went back to implement some feedback we got about Lock Balance: It being too unforgiving and remove the randomness, or as it was roughly said "let the designers do their job and let them make the fun." So I changed the indicator from a windsock to an arrow, added damage flashes similar to Canal Cruiser's, changed it so Puffy could hit the lock walls multiple times shown with a small health bar the bottom left instead of dying instantly, added small animation for when a object hit the water of them slowly sink towards the ground, animation of Puffy entering the lock to give the player time to prepare and completely reworked how the objects dropped to be based on layouts where it would drop pre made, allowing the designers to change the frequency of the drops and the time it takes before the objects would drop.
Lastly we also had to make a small vertical slice for our final presentation, as well as a trailer which was made by Dylan and it was incredibly well made, though admitly just a little (quite) jarring due to the choice in music being "igaku" by Kasane Teto, a J/K-pop song which for a Scottish Opera production was an interesting choice though incredibly catchy but they still enjoyed the humour and appreciated the high energy of it all.
The presentation itself went well, we talked about the feedback we got during the playtest and how we acted upon it so far and how we'll try and continue to do so, as well the main features necessary for the minimum requirements to finish the game, and afterwards what we wanted to do for the final product including some "stretch goals" if we finish ahead of time.