Documentation + User Guide


Concept Comparison:

 

This implementation of The Last Fishing Trip significantly differs from the game that was described in the original concept statement. While the overarching story idea has remained the same as well as the 2D platformer genre, the inclusion of a catching mechanic was reevaluated. The game initially aimed to be a collectathon involving collecting all of the land-walking fish on a quest to find inner peace. However, this level of detail in the game was simply unrealistic in terms of scope. In addition, I received feedback from the testing session, suggesting that the fishing minigames that I had initially proposed were not missed by players. Rather they would have liked to see the inclusion of some sort of other collectible. This implementation has no collectible element, which I am disappointed about, however, I am still proud of what the game has become and will seek to include collectibles once the assessment period is over.

 

The number of enemies required to make an fish collection system interesting and compelling would be unreasonable for a 8 week project. I’ve only managed to include two enemy varieties in the game so far, one being a miniboss. In future I would still like to include some of the enemies listed in the original concept, such as, a shark, sword fish, stone fish, and puffer fish. I have so many other enemy ideas that I will be able to chip away at in the future.

 

Something that has remained consistent throughout development since the concept creation is the grapple function. This turned out exactly how I had envisioned it in the concept, closely following the movement offered by the grappling hook in the Messenger by Devolver Digital. While many of the bugs associated with my grapple have been fixed, there are so many edge cases that still result in glitching out of bounds and into objects. I will work to resolve these in the future; however, I have included a checkpoint function accessed through the pause menu that allows players to return to the nearest checkpoint if they get stuck.

 

The style of the game is a factor I am particularly proud of. I feel as though I really channelled the games that had inspired the original concept art. In particular, my art style heavily drew inspiration from Dave The Diver by Mintrocket, Dead Cells by Motion Twin and Evil Empire, and The Messenger by Devolver Digital. Having said this, the environment in which the game takes place differs from the seaside biome described in the concept. This was because I began to plan the game as having multiple levels that would lead to a seaside area by the third level. Again, I dreamed big and fell short due to over scoping (NO REGRETS THOUGH)! One day we will find out what’s on the other side of that lake (look for the snails) – this will make sense if you finish the game ;)

 

 The soundtrack I wrote 4 hours ago in an hour suits the forest vibe and definitely channels the game music I was listening to throughout development (make sure you use headphones for the drop… TRUST). In terms of competitive analysis in the concept documentation, I still feel as though my game is unique in its execution with interesting art, movement and oodles of potential for expansion. In this regard, the game concept has been upheld. While some aspects of the game have changed since the concept document, I believe the game is interesting and offers a unique experience, albeit incomplete.

 

 

Feedback Summary:


In the testing session I received a lot of feedback about bugs to do with the grapple function. Many Testers had issues with getting stuck in walls, bugging through the world, and being trapped in an infinite loop of sending it into water. As an observer and developer, this was a challenging experience. So many of these I knew about, and so many of them I didn’t. I have worked to fix up some of these grapple bugs, such as the one where if you grapple as you hit water the grapple still connects with whatever it was going towards before the players position was reset. Although, there are still bugs that I was unable to resolve in this week passed. In an attempt to reduce the frustration that some testers experienced from losing their level progress after getting stuck in a wall, I implemented a checkpoint function. In the pause menu, there is an option to restart last checkpoint, which will teleport the player to the last snail they interacted with. In addition, the enemies will be reset as well as the players health.

 

The difficulty of the first few grapple sections was reduced as to ease the player into using the grapple, as I noted some players struggling with some of the timing. The grapples being slightly too difficult was also mentioned in one of the testers’ feedback form.

 

There were other pieces of feedback from the testing session that also led to game functions. For example, testers were interested in having a boss fight, so I implemented a miniboss which must be defeated in order to progress. One tester recommended that I create a dust particle effect when the fisherman has a speed boost. This turned into a fully-fledged function by which the player is incentivised to chain hooks together to increase speed, changing the colour of the dust particles behind. Another suggested atmospheric sounds, which have been added!

 

There were also some recommendations that were not implemented, such as collectibles, health upgrades, grapple distance increase, shields, different lures, and a pistol shrimp (lol). In addition, feedback from the testing session survey forms suggested that players would like some faster, more challenging levels. These were left out mainly due to time constraints and prioritising other aspects of the game that were incomplete.

 

In general, players loved the art style and the ‘vibe’ of the game. The testing session yielded a substantial amount of enthusiasm from players who also got in on the innovation of new ideas and functionality (Many of these were not listed here but will be a part of a future development log).

 

Asset List:


Art + Animation:

*Note: all art assets are original, designed by Taylor Lewincamp (Kronkerd). These Include:

  • All Tilesets: The terrain, including grass, dirt, jetty and water elements
  • Trees
  • Enemies
  • Fisherman Character
  • Signs, including arror 
  • Splash
  • Title Screen and cover art elements 
  • God Rays 
  • Health Bar UI, including heart, grapple icon and streak meter. 
  • Cabin 
  • Arena Barriers
  • Lanterns
  • Background + Foreground, which are composed of multiple elements


Unused Art Assets: 

  • Various healthbar elements 
  • Shell Collectibles 
  • Rocks 
  • Fish Scale Collectibles 
  • Alternative Tilesets for later levels 
  • Glow Particle
  • Catch Exclamation Mark

All Animations were created in Aseprite and Unity. 


Font:


Audio:

Original Audio Assets

  • Sound Track: Original composition – Lake Forest by Taylor Lewincamp (Kronkerd)
  • Fisherman Voice: Taylor Lewincamp (Kronkerd) 

Other Audio Assets


Scripts:

*Note: The Last Fishing Trip was coded with C# in Visual Studio Code with assistance from Github Co-Pilot. Co-Pilot was used to check errors in code and as an additional learning tool, by which It was asked to explain any in-line changes it made.

Animate Text: Takes in a string from the unity inspector and prints it out in a TMPro component with an adjustable words per second. This script was created with no external assistance.


Arena Trigger: Utilises an OnTriggerEnter2D function that sets the bounds for the miniboss arena to active. Takes in three Game Objects, arenaBoundsLeft, arenaBoundsRight, and enemy. When the enemy is deactivated the arena bounds are deactivated too. Attatches to a tree object in the latest implementation.

  

Break (unused): Handles the breaking of interactable objects in the foreground and background, such as rocks and leaves. This script handled setting the animator states, managing camera shake and destroying the object.  

 

CameraShakeManager: Handles Cinemachine impulse instantiation

 

Checkpoint (unused): Incomplete

 

CheckpointManager: has one function to Update the spawn point of the player, is called by multiple scripts


EnemyHealth: Handles all things related to enemy health, resetting health, taking damage, and death.

 

EnemyMovement: Handles enemy movement. Currently based on two enemy types, Patroller, and PatrollerWithBreaks. Both patrol between two areas but one transitions to an idle animation for set period, adjustable in the unity editor. In addition, this script handles enemy knockback, which is also adjustable in the unity inspector.

  

FishingRodGrapple: Handles all thingds related to the fishing rod, mainly grappling. Is a state machine for managing the various states that the fishing rod can be in. Such as, Idle, Shooting, Hooked, Returning

 

Idle: waits for player input provided that they are not submerged in water and if they have acquired the grapple hook. If input is successful, starts coroutine to shoot the hook. This involves a ray cast that looks for grappleable layers. If the hit is successful, the state moves to hooked. If the ray cast hits nothing, the state is switched to returning

Hooked: Moves the player towards the hook tip.

Returning: moves the hooktip to player.

Shooting: Cannot shoot while shooting!

 

FoodItem: Utilises OnTriggerEnter2D to detect when the player touches the food item. The player is healed when the trigger condition is met.

 

GameOver: This handles the game over screen. Has methods for quitting game, activating the game over menu, Returning to title, restarting the level, and restating the checkpoint.

 

GrappleIconEnabled: Updates the grapple icon on the healthbar if the grapple has been acquired

 

HealthBar: Handles fill amounts of all health bars healthbar, as well as managing the healthbar position for enemies provided they are tagged as either Patroller or PatrollerWithBreaks (as flipping the sprite and moving the enemy causes havoc).

 

HurtPlayerOnCollision: Attached to the enemies to hurt the player on collision. This handles allocating damage, by calling the TakeDamage() method in the PlayerHealthScript. As well as this, handles knockback of the player by calling the Knockback() method in the PlayerMovement script.

  

ItemPickups: Handles picking up a non-food item. Would likely be used for collectibles if they were implemented. Currently the only item that uses this is the grappling hook pickup. Deactivates the game object when the player collider overlaps with the item collider.

 

PauseGame: Handles all things pause menu. Including methods for Resuming, pausing, quitting game, returning to title, restarting level, and restarting checkpoint.  Pause is activated with KeyCode.E and the pause menu cannot be accessed if the game is over.

  

PlayerCombat: Handles all things attacking. Controls when the player can attack and handles the progression pathway for performing the combo attack. This script was written very early in development and could probably use an overhaul at some stage to make the combat controller feel more responsive.

 

PlayerHealth: All things related to player health. Includes functions for healing, taking damage, resetting health, becoming invulnerable after taking damage (including flashing in invulnerability frames – achieved by deactivating sprite renderer), and Dying.

 

PlayerMovement: THE BIG BOY. Handles horizontal and verticle movement. Includes functions for moving, jumping, being submerged in water, freezing player movement variable jump height, adjusting gravity scale, coyote time, sprint multipliers, knockback, stopping knockback, wall jumping, wall sliding, flipping sprite, reetting position after falling in water, and making dust. This script could definitely be separated into multiple scripts as to improve navigation and workflow. It was created very early on in development and has been added to more times than I can count!

 

ResetEnemies: Handles resetting enemies, called when restarting checkpoint. (I believe this ended up being unused, as I made a more comprehensive reset manager)

 

ResetManager: Handles resetting game when restarting a checkpoint. Resets player position, enemies position, player health, and enemy health.

 

SetGradient: Used for adjusting the particle system’s colour over lifetime when the player has a speed boost. The colour gradient changes based on the hook streak:

  •  0 = white
  • 5 = yellow and white
  • 10 = red, orange, yellow, white
  • 20  = purple, blue, white.

These are set in the unity inspector.

 

SignInteraction: Manages when the signs will display their messages. Based on a Physics2D.OverlapCircle, adjusted in the Unity inspector.

 

SnailSpeech: Manages when the snails will display their messages. Based on a Physics2D.OverlapCircle, adjusted in the Unity inspector.

 

SpeedBoost: Handles the speed boost meter as well as the hook streak.

 

SwitchController (unused): Incomplete integration of controller support for Nintendo switch pro controller.

 

TitleScreen: Handles title screen. Includes functions for starting the game (loading game scene), activating control explanation, and quitting the game.

  

WaterSplash (unused) – incomplete

 


User Guide

 

Welcome to The Last Fishing Trip!

The Last Fishing Trip is a 2D platforming adventure where you, an old fisherman, take on an onslaught of fish that have emerged from the water to the land! Walk… Hop… Fight… and GRAPPLE WITH A FISHING ROD on a fisherman’s quest to find inner peace through one Last Fishing Trip.  

 

Controls

  • Left/Right [ A ] + [ D ]
  • Jump [ Spacebar ]
  • Attack [ H ] or [ LMB ]
  • Grapple [ J ] or [RMB ] – only after grapple hook is found
  • Pause [ E ]



*Note: If the player gets stuck in the wall (lol), reset to most recent checkpoint snail through the pause menu.

Features

Fishing rod grapple!

Find the grappling hook in the level to unlock more movement capabilities! Grapple to trees and other objects in the world to stimulate the youthful vigour of the tired old fisherman. Not only does grappling lead to a significant boost in the fisherman’s movement speed, but the colour of his wake also intensifies as more grapples are chained together!

Attack!

Use the fishing rod to attack the creatures from the depths! Destroying fish offers health rewards and is also satisfying as ever. Gone are the aspirations to catch em’ all! Use your three-hit combo to most effectively dispatch the fish enemies!

Walking Fish!

Jump over crabs, dodge chomping Piranhas, and time your attacks wisely to make sure you don’t end up dying!

Hop!

With variable jump height, gravity scaling, coyote time, and wall jump mechanics, The Last Fishing Trip includes some of the staple movement components of any good platformer ;)


Platform!

Navigate your way through picturesque platforming sections and try not to get distracted by the lovely lighting… Stay away from bodies of water though, as pretty as they are, everybody knows fishermen are scared of the water!

Title Screen

Original Art and Music!

All art and music were created by Taylor Lewincamp - Kronkerd :)

 Song : The Lake of The Forest by Taylor Lewincamp (Kronkerd)

*This game was created over 8 weeks for KIT109 at The University of Tasmania, 2024 by Taylor Lewincamp*

Files

TLFT_FinalBuild.zip Play in browser
20 days ago

Leave a comment

Log in with itch.io to leave a comment.