I want to follow up on the blog from March of last year (already? 😬) where I discuss the plan for the game idea I had. It didn't pan out, but, not in a bad way. This was the first time where I've really put a lot of effort into trying to create a prototype instead of wandering around with no clear goal or trying to make something perfect when it has no direction. I sincerely tried to "find the fun". I wanted to get what I had in my mind into reality any way I could figure out.
I'm still not 100% sure that this idea is untenable, as in it may be something I want to explore again in the future, but I'll explain it anyway. Basically, I enjoyed playing HYPER DEMON while listening to music. The game has little to no soundtrack playing during gameplay, which is cool don't get me wrong. The combination of playing that game when you're in the groove and blaring tunes that fit the moment is incredibly satisfying. Thus, I had the idea to take that feeling and put it into a game where evoking that feeling is the goal. A rythym-shooter based on the music in the level.
I couldn't get this thought out of my head, having something like the intense gameplay of HYPER DEMON paired (in beat) with tracks like:
This was an incredibly motivating idea, I really wanted to see it to come to fruition. For the first time, it was one of those things where I'd rather just play something someone else had already made, but I don't think something like this exists already. There's BPM: BULLETS PER MINUTE of course, which I don't want to discredit, it looks cool but it's just not what I'm looking for specifically. In case you haven't seen some already, I think it's important you see some HYPER DEMON gameplay to get the full picture:
Perhaps regardless of your own personal tastes, I think you can agree these make a great pairing. Something like plain old metal just isn't gonna cut it for this. The swampy driving basslines really settle into the grooves of the HYPER DEMON experience nicely. And the drum and bass plus ethereal tones of something like Cynthoni fit perfectly, in my opinion.
So, the idea is there. The goal: a game that combines these things and gives you a good feeling of playing a hardcore arena shooter in rhythm with satisfying music. Besides theming and what the goal of the feeling the game should create, there's actual gameplay logistics to figure out. Immediately obvious is the fact that it's probably not simple to marry these two things together nicely. Spoiler: in my prototyping at least, it doesn't seem so.
One simple thing I didn't even consider until it directly hit me while playing my prototypes was wrist pain. The speed I wanted the game to be was something that had never caused wrist pain from the mouse movements required in my experience before. I've been playing lots of shooters since I was very young and never experienced the almost immediate wrist pain. It's not like the usual target switching you'd do in almost any shooter, no matter the pace. Those shooters are not having you switch from targets on the far left of your view, to the far right of your view, back, then to the middle, and so on within time spans of a second or so.
What I had ended up prototyping was basically a small plane with a prism in front of it which shot out 3D primitives based on the song at play. I had the idea of just using MIDI files to trigger whatever spawner you want to at any point. As long as the MIDI file is the same BPM as the song (and more importantly, as long as the timing of the parsed data is kept in sync) it should work out nicely. I'll get into the MIDI stuff in a separate section later.
So, MIDI notes timed to the song were triggering various object spawners which you had to "shoot" (I believe I tested both simple raycast shooting and projectile shooting but you can imagine that raycasting was better) before they flew behind you or hit you. Not an extremely novel approach, but it was good since I was just prototyping. It was the most direct path of testing the idea I could think of. It also seemed like the only way to make the concept work. Games like BPM force you to shoot in rhythm. I wanted you to be playing in rhythm. I think this is a much harder to pull off, even badly, let alone do it well.
It would be very satisfying to be jumping around and shooting things that you must shoot quickly in succession with fluid movements in time to music, but I couldn't think of a good way to "enforce" this.
I even tried converting the concept into 2D instead. I think that was even worse, and obviously much further away from the direction I had in mind. Ultimately it just seemed infeasible and not fun. It's easily possible that someone else knows exactly what to do to make this work, and pull it off well. I'm not an experienced designer whatsoever, which may have simply limited my thinking in approaching this. I'm only unhappy that the thing I wanted to play hasn't been made a reality. I am happy with my attempts at prototyping and thinking about the idea properly instead of just vaguely stabbing in the dark.
I was proud of the idea to use MIDI as a sort of "beatmap" system. I imagined it would be something that potentially a lot of people would overlook. Music/music production being my first passion before programming, I'm very familiar with it and jumped to it immediately. For one, the "tooling" already exists and is incredibly refined. Just open a digital audio workstation (Ableton, FL Studio, Reaper, Reason, Pro Tools, etc) and plot away.
The notes don't have to be correct or anything either, obviously. I just dragged in the song I wanted to make a "level" for and plopped down MIDI in time with things like drums, bass, stabs, etc. You could do something like writing MIDI to specific channels like drums for drums, bass for bass, etc. but I think I just reserved ranges of notes for each "channel". I was just prototyping anyway.
Because I was working in S&box, importing a MIDI parser library was not as simple as it would be otherwise. S&box wants to be a game "platform" first and foremost like Roblox. You create games and push them to the "S&box cloud" and people play them from the S&box game "hub". S&box does also supports creating standalone games, they've been doing so half-assedly until recently since we are getting closer to release in April, for exporting your game and putting it on Steam.
They'll let you do this for free, no engine license charges... as long as you publish it to Steam. This makes sense when you know that S&box is built on top of Source 2. Source 2 being Valve's thing, Valve being the creators of the first digital storefront people go to for buying games: Steam. Facepunch creating this agreement with Valve does make sense. I appreciate that they'll let us use their engine for free but I understand having Steam as the ONLY option being off putting for many people.
All this is to explain why there is a whitelist. This whitelist prevents you from publishing a game to the cloud which can do things like use System.IO and find the players crypto wallet password in their Documents folder or something. Obviously, you don't want to let games reference any library they want if their going to be on your platform in "the cloud".
If you mark your game as standalone however, the whitelist is turned off, obviously.
I think at first I did try to import a MIDI parser library and modify it to be whitelist compliant but I quickly realized what a waste of time that was since it was PROTOTYPING time, not waste time time. This made things 1000x easier. I remember having some trouble keeping the MIDI in time with the song's audio source. I looked at someone else's code for a rhythm game and they were using a different time parameter from the audio source component of course, so I think that fixed things. It's been a year now, I've forgot a lot of this by now :(.
When I eventually got it working, the idea worked well. I'll definitely re-use this idea of using MIDI like this if I need it for a similar project.
This was the first time I had something that resembled a unique idea for a game that I wanted to pursue out of a more "pure" passion. I mean that, by wanting to enjoy something that simply doesn't exist, I was motivated to make it myself for that fact alone. Instead of "I just want to make a game." or "I want to make a game to make loadsa' money!" it was more pure in that it had a clear direction and clear justification instead of being a vague blob. I'm happy to have had the experience. If you end up making this dream game yourself, let me know... please!