Inspiration:
Ocean Motion was inspired by dance arcade games and virtual reality rhythm games. We wanted to create that same feeling using something most people already have, being a webcam.
The ocean theme came from the way the gameplay feels. Your hands move up and down with the music while notes flow toward you. That idea shaped the entire visual style.
What it does:
Ocean Motion is a rhythm game where the player’s movements become the controller. Players move their hands to match notes on two underwater panels while performing open-palm, fist, thumbs-up, and pinch gestures. Notes test timing, hand position, and gesture accuracy, while longer notes must be held. Players receive “Perfect, Great, Good, or Miss” ratings and can build combos and score multipliers. The game supports both one-hand and two-hand modes.
How we built it:
We built the computer vision system in Python using OpenCV and MediaPipe to capture and recognize hand movements. The tracker sends each hand’s position, movement, confidence, and gesture to Godot through local UDP messages.
Godot 4 handles the music, notes, scoring, calibration, menus, effects, and results screen. Our JSON chart system stores each note’s timing, position, length, hand, and gesture, while the chart editor allows players to create charts. We drew the ocean-themed assets by hand in Figma.
Challenges we ran into:
Dividing the project among team members created dependencies between the vision, gameplay, and design systems. We used a shared UDP format and mouse-based test controls so everyone could continue working independently. Webcam latency and inconsistent gesture recognition also made rhythm-based scoring difficult. We improved the experience with calibration, gesture stabilization, and hand-loss handling. We also spent time making sure the interface scaled correctly and that every displayed gesture matched its scoring requirement.
Accomplishments that we're proud of:
- Creating smooth, responsive hand tracking from noisy webcam input.
- Completing a full game loop with menus, gameplay, scoring, calibration, and results.
- Supporting open-palm, fist, thumbs-up, and pinch notes.
- Hand-drawn ocean artwork and jellyfish cursors.
What we learned:
Building a rhythm game also showed us how much small timing differences can affect the player’s experience. Separating the Python tracker from Godot made development and debugging much easier. We also learned that visual clarity directly affects gameplay because players must understand each note quickly.
What's next for Ocean Motion:
- Add more songs, charts, gestures, and difficulty options.
- Create a guided calibration and tutorial for new players.
- Expand the chart editor and custom-song tools.
- Add more underwater environments, animations, and accessibility options.
Technologies:
- GDScript
- Python
- OpenCV
- MediaPipe
- NumPy
- UDP networking
- JSON
- Godot
- Computer vision
Log in or sign up for Devpost to join the conversation.