Games Preproduction/IP3: Puffy MacPuffer

GitHub Repo:

Puffy-McPuffer

And

Website
Main menu of Puffy MacPuffer: A side on view of a puffer boat called Puffy on a canal going through the hills. Periodically a small puffin called Puff swoops down and a fish appears. There are 3 buttons, "Play", "Help" and "Options" with an overarching ribbon with the title of the game "Puffy MacPuffer".

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.

Preproduction: Week 1 - 4

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:

A slide with the title "Concept 1: Point & Click Adventure", the explanation text is as follows "A Point and Click Adventure style game is self-explanatory mechanic wise – using a pointer, you can hover over whatever you wish to interact with, then click!", "A game in this style would optimally fit the target demographic due to the simple to understand gameplay/user friendly and can lead to a more narrative based game with a richer story, focusing heavily on interactions can provide a memorable experience"A slide with the title "Concept 2: Photography Rail Shooter - Pokemon Snap", the explanation text is as follows "Pipe Mania is a 89 game originally for the Amiga where you need to direct "ooze" through X number of pipes getting score for each. Sometimes the board will have pre-placed tiles, some to block you and others for extra points. Depending on the game mode the board will be empty, and you place pipes down yourself. Another you swap pre-placed pipes and another you rotate them. As you can see this game play is very versatile and very simply to understand"A slide with the title "Concept 3: Photography Rail Shooter - Pokemon Snap", the explanation text is as follows "A first-person Photography [sic] game, where you take photos from Puffy of important locations and landmarks on Puffy"s Journey. Goal [sic] is to gain the highest score possible by taking the best photos before you reach the end of the level. Want [sic] the player to really feel that the canals are alive, feel like they are on a journey with Puffy across these canals. When photos are revisited, learn about what they"ve captured in photos. [sic] USP: Casual and Memorable Experience, learning about the local area"
A small pill-shaped object rotated in front of the Unity default background. Text above and below reads "Disabled" and "(36.52, 35.37, 2.38)" respectively.

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

Lock Balance: Week 5 - 9

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.

Canal Cruiser: Week 9.5 - 11


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.

Finishing Touches: Week 12

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.