I wanna make something like Air Rally

I want to make something like Air Rally. For the ones who don’t know what I am even talking about, I am talking about Rhythm Heaven. Rhythm Heaven, (As you can guess in its name) is a rhythm game where you try to match the rhythm with the song currently playing. I have tried looking for ways on how to replicate the system but I can’t seem to find the perfect one or find one in general. Does anybody know how to make something just like this? It would help very, very much.

What I got down so far inside the game:

Example of what I want in the game:

1 Like

Funny thing, I’m also interested in making a rhythm heaven styled Roblox game. I haven’t programmed anything like this yet, but I think I have a rough method.

• When a cue is first played, a tick() is recorded.
• Then you can calculate a time estimate after the first tick() of when the player needs to perfectly hit an input.
• When the player inputs, a second tick is recorded and compared to the first one to see how off they were.
• Figure out if the player was too early, too late, or just close enough with their response to the rhythmic cues.

For example, pretend there’s a rhythm game at 120 BPM (1 beat every 0.5 seconds). A rhythm cue that’s 3 beats long records a tick at time = 0. This means that to get a frame perfect input, a player has to wait exactly 3 beats (at time = 1.5 seconds) before inputting.

Then you can do something like: if input is less than 1.6 but greater than 1.4 then it’s acceptable timing. If it’s less than 1.4, player inputted too early, if it’s greater than 1.6, player inputted too late.

2 Likes

Here’s how I would go about making this:

  1. Create some loopable ocean, ideally you’d have randomized placements of structures and islands.
  2. Make the ocean move around the player (the player is the origin point), most games that deal with spaceship flying, and a few other cases (the train from Uncharted 2) have the environment moving around the vehicle instead of the player, this is done to save the possible programming stresses of having players on complex moving objects whilst being able to move around (killing two birds with one stone), I imagine this is also more performant too.
  3. Make the camera fixed, focusing on the ship.
  4. Make a function that can take the position of anything on the X and Z axis and the position of the player’s ship to figure out the arch (do kinematics equationss), something like getting the displacement and then calculating velocity horizontally from that using time (this will make it so that the object is faster because velocity = meters per second and distance = ((initial velocity + final velocity)/2)*time = initial velocity * time + (0.5 * a * Time^2), you’ll want to rearrange these equations to get the desired variables) and then calculating velocity vertically with gravity (a vector acceleration force) and your desired height multiplied by distance or something (I can’t remember off the top of my head). The forces/velocity when on a 3d plot will appear to form an arc (like a parabola). After that all you’ll wanna apply the velocity/forces to the ball and stuff via something like VectorForce (not to be confused with vectors - something with both scale and direction).
  5. Check for player inputs within regular time intervals over a period of time, make sure its not frame-perfect levels of time sensitive as it will both make it near impossible to play and near impossible to be functional (the wait function is not precise after a few decimal points I believe, like 0.0001, and events do not fire fast enough as you’ll want it to run server side for security reasons). Optionally you could make the ball instead move in the direction of the cursor requiring far more skill on the player’s part (this could replace the opposing player’s position and take its place.)
  6. Add counters to record the delay between the ideal frame perfect inputs, from here you’ll want to do something like an exponential curve with the delay as the input (preventing players from getting a perfect rank despite one input being a minute late). After this, add up the total delay and grade the player(s) based on that or rank the delay times individually and then grade them combined.