KYLE THOMAS
Game Programmer | Contact: kyle.j.t@live.co.uk

Buddies Bad Day


Game thumbnail
Developer: Kyle Thomas (solo)
My Role: Programmer
Tools: SFML 2.4.0
Language: C++
Time Taken: 72hrs
Jam: Ludum Dare 39
Theme: Running out of Power




Game Overview

Buddies Bad Day is a 2D, puzzle type game made for Ludum Dare 39 with the theme, "Running out of Power". You play as a robot that runs out of energy with each move made. Work your way through the levels by getting from point A to B by collecting ALL batteries. Try not to run out of the power in the process or the robot will run out of power.

What went well?

  • Grid based movement
    • As the main mechanic revolves around running out of power, rather than removing charge overtime, I went for losing charge with each step made. I feel like this type of movement suited the theme very well.
  • Parsing level files
    • To create map, I used Tiled (a software used to design maps using sprite sheets) and parsed over the xml data file. This helped save time because I was able to efficiently design levels and add collision data.
  • Collision Detection
    • Items, exit and walls all collide correctly. At one point in development, I came across a bug where, if you walked into a wall, you would lose power. That didn't feel fair so it was quickly fixed.


What can be improved?

  • Mechanics
    • There is a lack of mechanics as I ran out of time before I could add more. I plan on adding more in a future build as I have a bunch of cool ideas.
  • Level/puzzle design
    • Testing would help figure out the difficulty of each level and help improve on puzzles (though it was a game jam so I didnt have much time to get testers involved unfortunately)

CODE SAMPLE


Level loading

This part of the code deals with erasing any collision object from the previous levels, then loads and sets up the next levels, such as setting the players spawn location and battery locations.
            case LOADING:
		level->EraseMapObject(); // erase level collider

		// Delete the pickup vector incase of failure
		for (pickupIter = pickupVector.begin(); pickupIter != pickupVector.end(); pickupIter++)
		{
			pickupVector.erase(pickupIter);
			break;
		}

        // This checks first to see if objects were all removed correctly before allowing the program to go on
		if (level->GetAllObjects().size() <= 0)
		{
			level->LoadFromFile(levelFiles[level->getLevelID()]); // load level tilemap from file
			bSpawnNoMore = false;
			player->setPower(10); // reset the power

			StartPosition(*level); // set the players start pos
			EnergySpawner(*level); // set the pos of battery pickups
			state = new GameStates(State::GAME);
		}
		break;