Andrea Horvath

Software Engineer, Problem Solver


Gone Fishing

This short game was made in a week for Bitsy Jam #98 (theme: fishing). The theme was actually one that I had suggested to the community, so when I saw that it was selected, I had to make something!

I've played a handful of fishing minigames over the years and was inspired by the calm, meditative atmosphere they often create. I decided to make a small fishing game that could also teach players about fish native to my region and encourage curiosity about their conservation.

Core Features

  • Implemented a timed fish-catching minigame
  • Built custom room-transition functionality in Bitsy
  • Developed randomized fish encounters with educational fish data

Reeling in Fish

The core interaction revolves around a timed reeling sequence. After waiting for a fish to bite, the player must rapidly press space (or tap on mobile) enough times before a countdown expires. If they fail, the fish escapes and the waiting cycle begins again.

Implementing this required tracking player input, managing timers, and coordinating transitions between the waiting, reeling, and catch states.

Managing Game States with Rooms

Bitsy organizes games into "rooms," which function similarly to scenes in Unity. These can be used very creatively to generate slightly different versions of the "default" room and trick the user into thinking it's the same "scene." By swapping between rooms at the right moments, it's possible to create the illusion of a single dynamic scene even though Bitsy is actually loading entirely different rooms behind the scenes.

The player starts in a "waiting" room, and then transitions to a "reeling" room when the timer triggers a fish to bite. Then, after a fish is caught, we swap to a room for that specific fish (as I used pixsy to generate rooms from real images of fish). I used a state variable to manage these three states (waiting, reeling, looking at fish), to make it easier to know which room to show next (i.e. if looking at fish, return to waiting).

Bitsy has built-in functionality to change rooms when entering "door" tiles, but I needed to trigger a room change on different actions. To support these transitions, I wrote custom functions based on Bitsy's room-loading code.

function exitFuncCustom(destRoom, newState) {
	if (destRoom != undefined) {
		// update world state
		player().room = destRoom;
		player().x = 0;
		player().y = 0;
		state.room = destRoom;

		// update game state
		initRoom(state.room);

		game.switchState(newState)
	}
}

// examples of how the above function is used, runs in Bitsy's update() loop
if (game.reelInTimer > 0) {
	game.reelInTimer -= dt;

	if (game.getAttemptSuccess()) { // successful catch -> show next fish room
		game.reelInTimer = 0;
		exitFuncCustom(names.room[game.randomizedFishData[game.currentIndex].sceneId], 3);
	}
}
else if (game.state == 2) { // failed to catch, return to default waiting room
	exitFuncCustom(names.room.fishing_room_1, 1)
	handleDialog("Darn, it got away...", true);
	dialogBuffer.SetPreventSkip(true);
}

Closing Thoughts

This was one of the smallest Bitsy projects I've created, but it gave me an opportunity to experiment with custom room transitions and lightweight gameplay systems while focusing on presentation and educational content.

Most of the development effort went into researching local fish species and writing dialogue for each catch. The end result is a simple, relaxing fishing game that combines a simple arcade-style mechanic with information about fish native to my region.