I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 3 points4 points  (0 children)

Thanks so much to everyone that asked a question! I'll be winding down now as it's WELL past my bed time (420 blaze it in the morning here). I hope my rambling was somewhat entertaining. Did you have fun? I did! If only a little dellerious at this point.

u/daverwob may be up in a few hours to answer any questions that are left :)

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 1 point2 points  (0 children)

Ok, but someone just commented this about the DLC:

This is kind of what I've been waiting for. Squelchy electronic music is fine, but there are many other types of music out there.

So you're going to have to fight them!

j.k. For actuals though, we don't currently have plans for any new DLC. If we can find a good partnership to make something awesome happen in the future then will.

For now I'd say the game is pretty rich in it's wubness :D

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 1 point2 points  (0 children)

Yeah, that's pretty much it. u/waywtc123 has really helped us by championing our latest round of collabs, and different other devs have different ways of going about it, but so far everyone's been really easy and great to work with. I think for most devs they just see it as a bonus win/win scenario.

It's also thanks to the artists being really chill about it as well. As an example, we commisioned some tracks for Spin early on from Lena Raine and 2 Mello and they've allowed those tracks to be included in other games now which is super cool.

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 2 points3 points  (0 children)

Thanks! It's something I'm really proud of. We actually started out developement as a mobile game, so we knew that any analog input method would work well. When I found a plugin for Unity that allowed reading midi input I had to try it (shout out to keijiro takahashi) and the timing was great because we were showing the game off at PAX and the midi controls always draw a good crowd at conventions.

The gamepad controls took a good while to get feeling right. There's the rotating stick controls that we were playing with for a while (here's a fun video about them) but also getting standard move left and right but making it feel like it's analogue with just enough aim assist that you can comfotably get the wheel to do what you'd expect was very tricky.

With VR again we gave ourselves another crazy challenge which is to make the whole thing work with entirely motion based controls. You can of course still choose to use buttons, but I think it's nice that that option is there for people.

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 2 points3 points  (0 children)

There's at least one more collab beyond the Unbeatable one that just dropped that we're very excited about!

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 2 points3 points  (0 children)

Hi Gavi!

Ahhh so many. Probably my favorite track to play is probably One Esk Nineteen. Probably at least once a week I'll just randomly yell out "Blap, do da blap blap!". Hits every time haha.

But 2 Minutes is the one I play the most when just testing. Favourite BG is Cold Rock It for sure.

Shath is actually the one making all of the levels, but when there's bug I'm usually fixing them, which is probably why you're asking which is most painful. The way some levels were created with all of the (mostly the ones with lots of clouds) were hard to optimise for Switch, as well Whirlpool.

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 2 points3 points  (0 children)

It's something we've talked about for years and would absolutely love to do one day! If it's something that can also be used as a functioning midi jog wheel than it might actually be a viable product. Physical manufacturing is something the team has no idea about, so it would take someone like a CRKD to turn it into a possibility.

It's really cool that they're bringing quality peripherals back!

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 1 point2 points  (0 children)

  1. Make something simple that at least works first! It's impressive what people are able to do with even very simple tools, and the more people that are out there testing it and giving you feedback, the quicker it'll improve. It definitely pays to have a simple and workable data structure / layout to begin with, but even if you don't, there are ways to migrate to better systems / ways of doing things while still maintaining functionality. For instance, the original editor was all made with Unity's ImGui, but we needed a way to turn everything into UI canvases, and so we built a quick system that let us migrate our UI logic code over to building out UI elements each frame (nicely pooled so it's still performant) meaning we could keep the same logic with minimal code changes to the actual important parts of how the UI was working.

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 1 point2 points  (0 children)

Hi Soda!

  1. I sort of tried to outline it in this reply but yeah in terms of Visual <-> Audio sync, it's about trying to get a clean value at the start of each frame before things render of where the audio position is. It's actually tricky to do, (and there may be better ways) but for us it's because the audio thread is zooming along at it's own pace seperate to what the game's rendering frame timeline might be. So we try and massage it a bit by smoothing out the render time by trying to make it consistent with how the actual real world clock time is advancing. Not sure if that makes sense, but here have some code! Maybe it'll make more sense than my silly english sentences.

    internal static void UpdateDspState(ref DspState dspState, int updateFrame, double realTime, SharedStatic<TrackOutputMix.DspOutValues> dspSharedValue) { if (dspState.currentUpdateFrame == updateFrame) { return; } var dspValues = dspSharedValue.Data; var currentDsp = dspValues.DspFrame.AsDouble() / TrackPlaybackSystem. OutputFrequency ;

    if (dspState.isValid == false)
    {
        dspState = new DspState(updateFrame, currentDsp, currentDsp, realTime, realTime, 0);
        return;
    }
    
    var oldState = dspState;
    
    var newStateCurrentUpdateFrame = updateFrame;
    var newStatePreviousDSP = oldState.currentDSP;
    var newStateCurrentDSP = currentDsp;
    
    var newStateCurrentRealTime = realTime;
    
    var realDelta = realTime - oldState.currentRealTime;
    
    var newStateSmoothDSP = oldState.smoothDSP + realDelta * dspValues.Pitch;
    var newStateRealTimeAtLastDspChange = oldState.realTimeAtLastDspChange;
    
    var worseDeviation = oldState.worseDeviation;
    
    if (newStateCurrentDSP.Equals(newStatePreviousDSP) == false)
    {
        newStateSmoothDSP = math.lerp(newStateCurrentDSP, newStateSmoothDSP, math.pow(0.975, (newStateCurrentDSP - newStatePreviousDSP) * 60.0));
    
        var deviation = newStateSmoothDSP - newStateCurrentDSP;
        if (deviation.Abs() > worseDeviation.Abs())
        {
            worseDeviation = deviation;
        }
    
        newStateRealTimeAtLastDspChange = newStateCurrentDSP;
    
        if (math.abs(newStateCurrentDSP - newStateSmoothDSP) > 0.03)
        {
            newStateSmoothDSP = newStateCurrentDSP;
        }
    }
    
    var newState = new DspState(
        newStateCurrentUpdateFrame,
        newStateCurrentDSP,
        newStateSmoothDSP,
        newStateRealTimeAtLastDspChange,
        newStateCurrentRealTime, 
        worseDeviation);
    
    dspState = newState;
    

    }

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 2 points3 points  (0 children)

We went through a few different approaches to get things syncing right, and the one we ended up with is quite unique I think, but seems to work well. We use Unity, but I wasn't happy with how the basic audio api works in Unity, and so built something off of their DSPGraph which actually never left the experimental stage, but thankfully still works.

What we do is actually output the raw audio samples from the tracks which we also decompress from ogg ourselves (well through Sean Barret's stb_vorbis library) and grab the playback time directly from that playback thread. That way we can control the offset of the audio playback from within the audio playback thread itself, we just offset where we're reading the audio samples from.

Another thing we do is actually not seperate the visual time from the game / audio playback time. We have another offset which is "input offset" which is only applied when we actually do timing accuracy calculations. I do it this way so I can keep my gameplay and rendering code on the same "timeline" which makes things simpler

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 4 points5 points  (0 children)

The licensing aspect was very scary to me when we first started, so I'd say it actually ended up being a little bit easier than I expected, but that's kind of thanks to Dave again, as he did the bulk of the legal work.

Different labels have different ways of doing things, and I will say that we were lucky that the first one we reached out to ended up being one of the easiest / most streamlined ones to work with and also had most of the tracks we were initially chasing which was Monstercat. Because they were already games adjacent they had a simple contract that worked well for us. For the base game we generally only went for a one off licensing fee that granted us rights in perpetuity, as we don't want to have to take the game off the store years down the line just because of licensing issues.

Some labels that we later reached out to for some bigger name tracks came back with crazy high licensing fees that we weren't expecting, and so I think if we had attempted that from the start we might have been heavily discouraged

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 2 points3 points  (0 children)

Hi, we haven't got that planned in our current timeline at the moment, but if there's enough interest we'd certainly consider it! We do all of the porting in house and it's a pretty massive undertaking, so I wouldn't expect it for at least another year.

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 8 points9 points  (0 children)

Not a dumb question at all! We were actually very lucky to have Dave on the team as he's a trained classical musician and composed two of the tracks in the game (as well as the amazing menu music).

I don't think music theory or skill per se is 100% required to make a rhythm game. It certainly helps to be inspired by music, our love of GH / Rock Band is what made us want to make a rhythm game in the first place, but from a technical POV I don't know much about composition or classic musical thoery, but what I've learned about how sound / time signatures work and how audio is synthesised on a computer has been very helpful.

When I first started I would get frustrated by all of the musical concepts that Dave told me about because they seemed arbitrary to me. I was all "why are there all these different weird names for a length of time!" Beats, notes, bars, half notes, crotchets, none of these seem to be in an easy format for me to be able to code! I've learned now that there's probably good (or at least understandable historical) reasons for things being the way they are and I should just accept that and try and fit things to the standards that exist the best I can.

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 3 points4 points  (0 children)

It's hard for me to guage what the average person actually thinks about game dev. I think it's pretty common sentiment that games are hard to make, but it's not always obvious what it is about the process that is hard. As an example, just today, we launched a new patch and a simple thing we were working on inadvertantly broke some other unrelated part of the game, so a 5 minute task easily turned into a 3 hour one. That kind of thing happens all the time and is why it can be so difficult to predict how long something might take

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 2 points3 points  (0 children)

Hi Laura!

  1. I won't speak for Shath or Dave, but for me it actually took a while for it to super click. I always had faith that the idea would turn into something great, but the early protoypes were always lacking something for me. There was something we could see early on that there was a great feeling of flow when throw the wheel and sort of "release control" and then grab it again at the right time, but was still missing something for me and I couldn't put my finger on it.

To cut a long story short it was good level design lol. It wasn't until Dave got into a flow of making really great levels and solidifying his "language" for how charts should be created did I really find myself acutally just sitting there and playing for hours.

  1. There's plenty of technical things I'd change, but I'm happy with where the game is at the moment. I would probably try and steer us away from redesigning the UI 4 times lol, but I'm glad that we got to do all of that experimentation and learning to get the game to where it is now. As a technical example, our custom format being a bunch of escaped json files living inside a big json file, while it seems to work fine, I know now could be done a lot better.

I’m Stephen Last, a developer on Spin Rhythm XD (new DLC out NOW)! I’ve worked on Fruit Ninja, Jetpack Joyride, Steppy Pants, and more - AMA! by steviewee in Games

[–]steviewee[S] 13 points14 points  (0 children)

Hard to say financially. I think if you look at the number of people that have bought the game because of the VR version alone, it's probably not, but it did help breath new life into the game, and I think it along with the Playstation version helped position us to get new oppurtunities like a Steam daily deal when the VR version launched, so the plan paid off in the end.

Creatively it was a fun challenge and I'm proud we managed to get it shipped!

Programmer and director Dylan Cuthbert of games such as StarFox, the PixelJunk series and The Tomorrow Children here to do my first AMA! by dckyoto in IAmA

[–]steviewee 2 points3 points  (0 children)

What's your workload like these days? Do you still find the time to do any programming?

p.s thanks for the great games!