com.harryaskham.orbitdrums · Kotlin · OpenGL ES 3 · sounds by chirp

Orbit Drums

A drumming game in polyrhythms, played with two thumbs, a game controller or a keyboard. Every lane is an orb: a circular drum whose arm sweeps once per bar, in lock-step with the others. An orb that divides the bar into three carries a triangle of notes, four a square and five a pentagon, and you strike each note as the arm crosses it.

23 levels in 6 worlds6 bosses6 lessons±38 ms perfect

Overclock on Hard, played perfectly. The Neon boss runs from 4/4 into 7/8, 11/8 and back to 4/4. The game recorded its own frames while its autoplay struck every note, and its own mixer rendered the music underneath.

Orbs

Three orbs, one bar The orbs of the level Accretion (6-1), as the game draws them. Each orb is a circular drum whose arm sweeps once per bar, all in lock-step. An orb that divides the bar into 3, 4, 5 beats carries that many notes, at the corners of a triangle, a square and a pentagon. All the arms start at the top together, so the downbeat is a conjunction: a note on every orb at the same instant. 3 3 per bar 4 4 per bar 5 5 per bar Accretion · 96 BPM · arms sweep clockwise; filled notes meet on the downbeat
Drawn from the level's definition in Catalog.kt, so it changes when the level does.

Notes come in several kinds: strikes, accents, holds, rolls, flicks (a swipe up), ghost notes you may skip (on Hard they become ordinary strikes), and voids, where you must stay silent. Notes that land at the same instant on different orbs are conjunctions, and filling the Resonance meter ignites it on the next downbeat.

Songs are built in sections, and a section can change the music under you: it can turn the orbs into different shapes, run the arms backwards, hide an orb, ramp the tempo or change the meter.

Controls
OrbsControllerKeyboard
TwoL1, L2, D-pad · R1, R2, A B X YD F · J K
Threeadds L2 and R2 for the middle orbadds Space
Foursplit across both shoulders and padsS · D F · J K · L

Six worlds

Each world has its own key, instruments, background and a mechanic it introduces. Landed strikes leave each world's mark: moon dust, sand, laser streaks, petals, bubbles or bent light.

The Journey, read from Catalog.kt and World.kt when this page was built
WorldKeyLevelsOrbsBPMBoss
LunaD major51–280–96The Tidewarden
DuneD Hijaz42100–138Simoom
NeonA minor42–3108–124Overclock
GildedE pelog42–384–96Kala
AbyssF minor3272–80Kraken
HorizonC Dorian32–496–104Event Horizon

Bosses in odd time

Clearing a world opens its boss. Bosses move through odd and shifting meters. Before each change a card slides in with the new time signature and its beat groups, then bursts on the downbeat. An orb that follows the groups (2+2+3 in 7/8) draws an irregular polygon through the group starts, and arcs around its rim mark each group.

Every landed strike drains the boss's health; PERFECTs and conjunctions hit hardest. A boss must be broken before the song ends, because one that survives is a fail. Each boss brings its own band, from djembe and sitar to gong and waterphone, and breaking it plays a fanfare.

Modes

Timing

How close a strike has to be The timing windows, from the game's Session.kt. A strike within 38 ms of the note is perfect, within 75 ms great and within 115 ms good; anything further is a miss. Easy charts widen all three by 1.2 times. The top row is a close-up of 200 ms either side of one note. The row underneath is one whole bar of Accretion at 96 BPM (2.5 s) to scale, with the good window around each of the triangle orb's three notes. perfect ±38 ms great ±75 ms good ±115 ms the note close-up ±200 ms one bar to scale · Accretion · 96 BPM 0 2.5 s
Read from Session.kt. A close-up of one note above, and one whole bar to scale below.

Calibration is tapping along with a click. Offsets are kept separately for each audio output (the speaker, wired headphones, and each Bluetooth or USB device by name), and calibrating with a controller measures that controller's own extra delay. On a controller or keyboard, flick notes strike themselves.

Sound and picture

The game's 44 instruments are rendered ahead of time with chirp, the synthesiser on the tools site, into Ogg sample banks shipped in the app (about 6 MB), and played by a sample-accurate mixer. The band grows with your combo: extra parts join at 10 and 30, every 16 PERFECTs in a row plays a run, and conjunctions ring a chord. Each world's sounds are decoded once and cached, so only the first play of a world waits for decoding.

The picture is drawn with OpenGL ES 3.0. The game logic (charts, judging, worlds, the composer, the mixer and the generators for daily, endless and workshop songs) is a plain Kotlin module with its own tests, including an autoplay of every level on every difficulty to a perfect result.

Limits