Godot Rhythm Game

The game is played by either your left or right hand (configurable in the options menu) on the A, W, E, R and Space keys (other keys for other hand) and pressing the correct key at the correct time as determined by the falling notes. The notes align to the melody of the current song. The closer you hit the key to the start of the note, the more points you will receive. You can select a song via the screen to the right of the playing screen. You can spend your points in a shop to the left of the playing screen.

Gameplay

The game is programmed in GDscript using the Godot game engine. The songs that can be selected are read from a folder on the disk and played dynamically (i.e., the game does not need to be rebuilt with new songs, the files need only to be added to the appropriate folder.) The note files themselves are written in JSON format. This file also contains information relating to the track such as BPM, artist/author, etc…

Movement

Audio

Used as one of the tracks in the actual game.

Music for the title screen. It also loops seamlessly.

Sound Effects

Footstep:

Menu Move:

Menu Select:

Stairs:

Wind:

Note Files using JSON

Notefiles are stored as JSON files that are parsed by the game. Each file is composed of a “meta” section, which stores metadata about the track, and a “notes” sections, which stores the actual note data for the track.

{
	"meta":{
		"title":"120 Click Test",
		"bpm":120,
		"beatsperbar":4,
		"author":"Test",
		"path":"res://Music/120clicktest.ogg",
		"instshoulduse":false,
		"instpath":"",
		"previewtime":0
	},
	"notes":[
		{
			"start":0,
			"length":"1/4",
			"channel":1
		},
		{
			"start":"1/2",
			"length":"1/4",
			"channel":1
		},
		{
			"start":"1",
			"length":"1/4",
			"channel":1
		},
	]
}

Each note is its own object and must be listed in chronological order.

Meta

Key Name Description
title The title of the track.
bpm Used for calculating when to spawn notes and note spawn speed. Also displayed to the user in the song selection list.
beatsperbar Used for time signatures.
author The composer/artist of the track.
path Used to locate the audio of the track.
instshoulduse Specifies whether to use an instrument when the player plays notes.
instpath The instruments path if it is being used.
previewtime The time that the song preview should start while browsing the song list.

Notes

Key Name Description
start When the note should start. Based of the BPM of the track. May be represented as a number (integer) or as a string. Values in a string will be summed to get the final value. The allows for easier inputting. For example, instead of beat “12.0625” (beat 12 and a 1/16th note), you can use “12 1/16” or even “4 4 4 1/16”.
length How long the note should be displayed for. Same input style as the start field.
channel Which channel should the note be played on with channel 1 being the left and 5 being the right.

The options menu lets you change between left- or right-handed controls and adjust the volume.

The market shows items that can be purchased.

Gameplay screenshot showing the multipliers and combos.

The original background for the game using a different colour scheme.

Colour palette used is “Sandwich 6 Ramps Palette” from user Space Sandwich.

The sprite sheet for the player includes some unused animations for running, interacting, and interacting whilst moving.

Selection of Development Sprites

Below, I have included a selection of sprites using in development of the game that I created myself.

The game uses a resolution of 160 x 140 pixels, the same as the Nintendo Game Boy, and as such some of the early sprites and backgrounds use the “Nostalgia” colour palette which is designed to emulate the look of the Game Boy.

Font

I created a custom font for the game’s UI. I created two font weights to provide variety in the UI elements. The font was created using an online tool called BitFontMaker2.

Download Thin

Download Medium