FLOATY BOAT QUEST: ‘Game On!’ - Solutions

Quest: Floaty Boat Quest
Challenge: Game On!

Feel free to share your solutions, ideas and creations below. If you get stuck, you can find some ideas here for completing this challenge.

Here’s my take on a fun game based from this project :slight_smile:
It’s Inspired a bit by the suggestion of “trading” as an idea to expand the project,… and also at me giggling a lot at a boat full of balls bouncing around, with balls flying everywhere :slight_smile:
https://sharemygame.com/@Morgan/ball-buoy

2 Likes

Enjoyed that - well done

1 Like

Also,… it says above this thread was created in May 1990,… and my reply came 31 years later,…

Thanks Eddie :slight_smile:

31 years… I’ve been working on this quest for a VERY long time… :rofl:

Great work on adding the delivery aspect to the game, very cool.
I don’t think I managed to deliver more than about 3-4 balls to the goal but I had a good chuckle while I was trying!

If you want to improve the gameplay, maybe try making the cargo area a bit bigger (like, the size of the whole boat) so you have a fighting chance at catching the balls after they go flying. This might add an element of skill in lining up your jumps just right to be able to grab them again.
I’d also consider tightening up the camera controls so that they don’t lag quite so much when taking a corner.

I love the assets you added by the way. Much better than my floaty cubes! :smiley:

1 Like

Thanks for the feedback Gary :slight_smile:
I was very much feeling the evil vibes in setting it up initially (and thinking about my own amusement rather then that of the players,… naughty me :stuck_out_tongue:), and yeah about 6 balls was my max before.
So taking on board you’re suggestions we’ve now got a bigger boat and bigger store,… and more importantly,… MORE BALLS! :smiley:. Now i think it’s WAY more fun! More balls make it to the end zone (20-50 ish) and more balls still spray around all over the place :smiley:.

Improved the cameras turning, feels a bit more in the action now it stays with you around the corner. I tweaked field of view and position a bit to, so things aren’t so oddly perspective.
Also gave more cornering speed, and boat will go even more faster each level.

I think physics is against me in trying to catch the balls again flying out of the boat, but there’s more chance of that now :).

Also i’ve named the boat the HMS Sam Beckett,…(oh Buoy),… i’m hoping someone gets the reference :smiley:
Thanks again!
https://sharemygame.com/@Morgan/ball-buoy!

1 Like

Captain Bakula reporting (unless you’re talking about a different Sam Beckett… then who knows!)

More balls makes it a lot more fun. It’s still just as silly with all the balls flying everywhere but at least you now have a chance of actually delivering some!
One thing I did notice is that if you go through the collection point at full speed then you can end up leaving practically all the balls behind. It could be worth adding some sort of obstacle/speed limit to force the player to slow down. Or, you could have the ball dropper follow the boat so that all of them land in the bucket.

Leaping from ramp to ramp, trying to deliver balls that once got lost, hoping that each time that the next ramp, would be his last one!
ahem, anyway,…

Nice suggestions for the collection point. I contemplated making it easier, but liked the extra panic element of balancing rushing to get though, and taking the time to go through a bit slower :smiley:. If i do some more improvements i’ll take a poke at it :slight_smile:.

1 Like

Ok this was super fun. The mechanics remind me of the hovercraft controls in Diddy Kong Racing. Love that game.

1 Like

My fix for not getting all the balls if you go through to fast.
Added in a “Slow” sign.
:smiley:

1 Like

Looks Great!

I have been messing with procedural terrain for this one and ended up down a complete Rabbit Hole.

Pop this Script on your Terrain

Download the Naughty Attributes package from the Asset Store as it allows you to control things from the inspector without running your game; so make a change in the inspector and your terrain will update in the scene view.

using NaughtyAttributes;

[ExecuteInEditMode]
public class TerrainGeneratorNaughty : MonoBehaviour
{
	private Terrain myTerrain;
	private TerrainData myTerrainData;

	private void OnEnable()
    {
		Debug.Log("Initialising Terrain Data");
		myTerrain = GetComponent<Terrain>();
		myTerrainData = myTerrain.terrainData;
    }



	[Header("Sin")]
	[SerializeField]
	bool UseSin = true;

	[Range(0.1f, 2f)]
	public float frequencyX = 1;

	[Range(0.1f, 2f)]
	public float frequencyY = 1;

	[Range(0.1f, 10f)]
	public float amplitude;


	[Header("Perlin")]
	[SerializeField]
	bool UsePerlin = true;

	[Range(0.001f, 0.1f)]
	public float perlinScaleX;
	[Range(0.001f, 0.1f)]
	public float perlinScaleY;

    private void OnValidate()
    {
		RandomisePerlin();
    }

    [Button("Create Terrain", EButtonEnableMode.Always)]
	private void RandomisePerlin()
	{
		float[,] myHeightMap;
		myHeightMap = new float[myTerrainData.heightmapResolution, myTerrainData.heightmapResolution];

		//Set a defaut Angle based on half a globe 0-180 degrees to fit terrain size
		float anAngle = 180.0f / myTerrainData.heightmapResolution;

		for (int x = 0; x < myTerrainData.heightmapResolution; x++)
		{
			// Convert my X into an Angle in degrees and then to Radians
			float myXAngle = (anAngle * x) * Mathf.Deg2Rad;

			for (int y = 0; y < myTerrainData.heightmapResolution; y++)
			{
				// Convert my Y into an Angle in degrees and then to Radians
				float myYAngle = (anAngle * y) * Mathf.Deg2Rad;

				myHeightMap[x, y] = 0;

				// Sin used to create top half of sphere can be adjusted with (Time.time * frequency + phase) * amplitude;
				if (UseSin)
				{
					myHeightMap[x, y] = ((Mathf.Sin(myYAngle) * frequencyX) * (Mathf.Sin(myXAngle)) * frequencyY) * amplitude;
				}

				// Add in PerlinNoise but clamp to the curve of the sphere
				if (UsePerlin)
				{
					myHeightMap[x, y] = Mathf.Clamp(Mathf.PerlinNoise(x * perlinScaleX, y * perlinScaleY), 0.0f, myHeightMap[x, y]);
				}

			}
		}
		myTerrainData.SetHeights(0, 0, myHeightMap);
	}