Synth Jam: The End

Before I get to some final reflections on this game jam, I’d like to give a little Loop Synth update. Here’s the list of potential jobs from the last post. with comments

  1. Add half volume toggles on hat hats and percussion sounds (fixed with dial volume).
  2. Experiment with moving the faders slightly further away from the left edge (done).
  3. See if there is a way to reset a group of sounds or the whole thing (Resetting of sounds done).
  4. Think about ways to expand with alternative sound sets and/or scenes.
  5. Look into ways the app could connect with other music apps.
  6. Add Mac version to AppStore (done).
  7. Look into publishing for Android and Windows.

So, this is what I did: I added volume dials to all sounds; I made sure the sliders fit and forced the app to at least open in left facing landscape mode; Added a reset positions array with each group of sounds, but reset all didn’t work due to issues with the audio manager singleton; I added iOS, MAC versions to App Store, Windows, MAC, and WebGL to itch.io. Here are a few images and videos to help explain this:

Volume dials

Note the volume dials on the left and buttons on the right

Unity and Xcode seem to disagree

Player prefs and array for saving positions

The array script creates slots for game objects

This singleton caused position/volume value issues on resetting all

Unfortunately, to resolve this last issue I simply deleted my reset all button, but a solution my be found here: The solution seems to be to delete the singleton and recreate it to avoid values from player prefs being added to the already existing singleton.

One thing I discovered with Mac builds in Xcode is the need to add a sandbox. Info can be found here at the moment. It adds a sandbox entitlement which is needed in Apple Connect when configuring publishing settings. Hopefully this will become clearer to me in the future.

Anyway, let’s reflect. This is the first time I’ve actually made something I think people might actually enjoy using. Being quite happy with myself I decided to get it on the app store as a free app to see if I could make it over all the hurdles. As with all game jams I was forced into using the knowledge I had or could piece together from a range of sources online. This process seems to lead to more original ideas and learning than following a tutorial or book. The feedback, in the form of a wish list, was an excellent launch pad for a more complete game/sound toy. I uploaded to itch.io and the app store at least 5 times and also had to update the screenshots and info. I still think it is good to build early, just to check it all works, especially with sound and lighting effects, but 5 times was far too time consuming. More local play testing is needed. The best way to play test was revealed to me in a Twitch streaming which the application was pushed to its limits in an attempt to break it, and potentially do things that may have or to make it do things unintended by the creator. This last point highlights the need to get others to do this, and itch.io game jams are great for this. And this brings me to my final thought. With all this support and feedback on Itch.io, Is it worth putting a game/app on the App Store?

Synth Jam: Publishing and updates

This is an update on progress with Loop Synth, made for Synth Jam. You can view previous posts by clicking on the following titles: The Idea; Prototyping; Bugs & Reverb; WebGL Mac, & Windows; Feedback.

Since I started trying to make games, I have always done my best to go through all the stages of development from ideas to publishing. Up until now however, I have only published on Itch.io. So before I made any further improvements to Loop Synth, I thought I might give the App Store a go.

Click on image to see in App Store

The first barrier was money; at present, to publish on the App Store you need to pay 99 beer tokens, and this only lasts a year, so in theory you will probably want to get some money back out of the endeavour. The second issue is space; Aside from having the latest version of Unity and all the right packages for iOS development, you also need to install Xcode, which is massive. Xcode seems to be there to check your app works on various operating systems and models, but it also seems to function as a gatekeeper to the AppStore. After drowning in errors and bugs in Xcode, I had to update my computer, unity, and Xcode to the latest versions, so the third barrier is having the hardware that can run these updated versions. The fourth barrier is the convoluted sequence of steps you need to take to get your app ready and accepted; this part took a couple of days and included getting a certificate, making a support website, privacy policy, and a selection of screenshots for a range of screen sizes and models. Then, don’t forget, if you change anything, you have to go through the review acceptance process again and potentially change all those screenshots!

iPad format
iPhone format

Anyway, let’s get back to the changes made to Loop Synth during this process:

  1. I attached the lights to the Tempo slider so that the intensity increases with the speed.
  2. I added a X2 toggle to the Tempo slider which adds an extra beater on the outer ring.
  3. I added mute toggles to each sound. (Idea: might get round to making a half volume toggle).
  4. I added a toggle to the instructions to hide them.
  5. I made the Space fader shorter to fit it under the loop on certain phone and tablet models.

Things to potentially do:

  1. Add half volume toggles on hat hats and percussion sounds.
  2. Experiment with moving the faders slightly further away from the left edge.
  3. See if there is a way to reset a group of sounds or the whole thing.
  4. Think about ways to expand with alternative sound sets and/or scenes.
  5. Look into ways the app could connect with other music apps.
  6. Add Mac version to AppStore.
  7. Look into publishing for Android and Windows.

Download the app here!

Synth Jam: Feedback

After uploading my sound toy to Itch.io, I sent the link to a handful of friends for play testing. Quite a few of these friends are musicians, so I thought my creation might even come in useful for them. The first comment that came back was about the size of the sounds. Basically, in order to make the game work on mobile in both landscape and portrait orientations, I had to make some compromises. I’m not sure which device my friend used, but I assume it was a mobile. When I tested it I had to make the sounds big enough to drag and drop with touch, but small enough to fit in the sequencer loop. It might be the case that I should have a dedicated design for different formats or at least find a way to force players to play in landscape on mobile devices. Another friend didn’t get any sound whatsoever and I have no idea why seeing as this only happened to one person. Last but not least, another self-confessed non-musician friend managed to get a little groove going supposedly reminiscent of the African Krautrock outfit Congotronics!

Best of all, I got some detailed feedback from shiftBacktick on Itch.io with an image of a polyrhythm set up, some encouragement to keep my DevBlog up-to-date and a wish list!

Let’s see if there are any grantable wishes in the list…

Well, the first one is easy enough, all I need to do is duplicated the prefabs in the hierarchy, but there must be a more efficient way to do this, possibly with code.

Quantization would require some kind of locking mechanism for the sounds in the loop area. I assume this is not too tricky and would be common in any point and click game for example. This is something I should learn how to do. However, on this one I would like to avoid it simply because I like the swinging messy out of time human touch effect as it is.

Multiple loops? My original idea was to have more than one loop until I quickly ran out of screen space. Switching between loops would be a nice way to add variety to a performance though. In theory, there could be switches above the loop to rotate to a different loop. It would probably be a good idea to have mute switches for each loop too… I’ll have a think about this one.

At the moment there is only a master volume fader. I’m not even sure if this is useful seeing as you can adjust the volume on your device. Anyway, how could I add volume for each sound without taking up too much space? One idea might be to add a toggle switch to the pitch faders but then this might cause issues with volume affecting pitch. Another idea could be to create a circular slider for volume to save on space. Maybe like this!

Clearing notes of a specific sound would probably require a button under or next to the corresponding fader. Clearing the sound would mean returning all the instances of that sound to the starting pile. I’m not sure how to do this, but I will look into it. An easier option for starters would be a mute button on each sound.

Accessibility is definitely lacking in this project. In general, it is probably best to integrate accessibility into game design from the outset to get it right. In the past I have done this with Life Forms for the Games for Blind Gamers 2 and it was a real challenge, especially with audio in WebGl builds. At the moment, this game is very visual heavy/dependent with no keyboard controls or audio feedback to help with interaction. Having the sounds play when you hover above them is a good idea, but might ruin the overall sound/performance. The same might be the case with screen readers. If I wanted to make an accessible sequencer I would probably start from scratch and avoid mouse and touch controls. I’d have keys assigned to slots on the sequencer and sounds assigned to keys. Players would then select the sound and then the step in the sequence. To get the loose sequencing feel there could be keys to push the sounds slightly between steps.

After today, I will have to take a break due to all the other things in life, but I may have time to come back to this before the game jam deadline in 18 days, 12 hours, 19 minutes, and 10 seconds. Let’s hope so!

Synth Jam: WebGL, Mac, & Windows

Check out the context for this post here: The idea; Prototyping; Bugs and Reverb.

Sometimes you can’t have it all. Einstein’s theory of Relativity works on the massive scale while Bohr’s and Plank’s quantum theory works on the minuscule. If I’m not wrong, and I usually am, Hawking’s last book suggested that we may just have to accept the two theories for different scales rather than continue on a quest for the ultimate unifying theory of everything. That was my conclusion this week when it came to the, too good to leave out, reverb effects and pan controls in Loop Synth for Synth Jam. So, the WebGL build has all the knobs but they don’t do anything, yet. The real magic is in the Mac and Window’s builds, with the space and pan faders literally adding another dimension to the sound toy!

First, I added tiny pan controls for two sounds Wood and Steel which work on Mac builds and hopefully Windows.

Then, I added a ‘space’ fader to control the reverb level in the audio filter component. The audio filter is attached to the main camera where the audio listener is. Notice the fader knobs look like faders now and have labels below them rather than being anonymous circles. I drew the faders in Asprite with whites and greys and then change the tint to match the sounds in Unity.

Adding sliders is new to me, but it is actually very simple to implement without the need for code, just press the + to create a new On Value Changed, drap the game object in, select the component and the function. Just remember to select from the dynamic float section at the top and to match the min and max values.

The sounds also went through a make over thanks to some simple pixel art made in Asprite.

And while I was at it I thought I’d add some lighting using Unity’s Universal Pipeline Renderer. As I set this up as a 2D project, 2D lighting was already installed and a previously unnoticed Global Light 2D game object was just sitting there in the hierarchy. I just needed to increase the intensity and add 2D lights to my rotating ball beaters. Finally I added a particle effect with trails to to beaters just for good measure!

Synth Jam: Bugs and Reverb

It has been quite an intencse couple of days making and breaking my synth in Unity.

Bugs: Just as all my sounds were in place and I could control the volume and rotation speed with sliders a bug crept in to my convoluted code pastiche. Halfway into rewriting the whole thing I discovered that I hadn’t assigned an audio source in one of the multiple [SerializedField] slots. That’s all it was!

Reverb: Then there was the reverb in an audio filter component that sounded great but just wasn’t having it in the WebGL build, and it looks like that is an issue with WebGL builds full stop. Oh well… If anyone knows how to get reverb working on a WebGL build, please let me know!

Anyway, I do believe I am almost there with this one. I usually know when I start adding particle effects. I’ll probably try to do that universal rendering thing too, once I remember how to do it or at least where I found out how to do it.

So, I have 6 sounds on the right, a rotating beater in the middle, and a selection of sliders on the left. Each slider controls the pitch of the corresponding sounds on the right. There are also 2 sliders for rotation speed and master volume. At the moment it seems to work on my laptop and mobile through the Itch.io website. This is what it currently looks like in action!

I have 2 days left to focus on this before a little break. I would like to: see if I can make different levels with different sounds and different backgrounds; improve the sprites; use that universal pipeline to make it glow; add some kind of instructions or tutorial; perhaps make it zoom out when it starts.

Synth Jam: Prototyping

Day one on the Synth Jam was mainly to get a working prototype and see if the idea laid out in the previous post works and/or if I can actually make it.

This is what I did:

  1. Made a black background.
  2. Added a red circle game object and child circle and made it rotate (see code 2 below).
  3. Positioned 16 circles in a circle at regular intervals, every 22.5 degrees.
  4. Found some code to drag and drop (code 3) using a mouse.
  5. Set up another green circle to be dragged and dropped and added a sound to it.
  6. Tried for a quite a while to get the red circle to ‘play’ the green circle with collision (code 1).
  7. Waded through YouTube, GaveDevTV tutorials to find a solution.
  8. Ended up making a sound manager(code 4) and some convoluted patchwork of code and game objects
  9. Added a cinemachine camera, with target group to ensure my prototype would look similar on different devices.
  10. Basked in the glory of my genius prototype sound toy sequencer.

This is what it looks like so far.

Here are some code examples:

1. This code is attached to sound objects, each with their own tag.
2. Rotate code
3. Drag and drop code
4. Crazy sound manager code with singleton

So what’s next?

If I’ve learnt anything from previous game jams it’s that you need to build and test early, so I’ll upload a draft version and test it for sound and controls. I do not expect the mouse to convert to touch but I will try on the phone just in case I’ve been lucky. Then I will try to fix anything and add touch controls.

After this stage I need to add sliders to control various parameters, such as volume, speed, direction, play/stop, and pan.

I originally thought of including more than one sound source circle, but I can already see that screen space is going to be an issue. I now think it might make more sense to add second circle inside the first or even change the circle into a clock hand to enable the laying of sounds. Each sound could even be pre-panned to avoid the need for so many sliders.

Synth Jam: The idea

It is December 2023 and I am struggling to get started on yet another game jam, Synth Jam, hosted by shiftBacktick. This time the objective is to make a ‘sound toy’. How could I resist!

I did some research on making a synth with code. Looks fun, but perhaps a bit ambitious for me in a game jam!

I didn’t give up on my synth idea here though and went on to have a long chat with Chat GPT only to give up on the synth idea again due to reasons mentioned below.

I jotted down a final idea a week ago during while suffering from insomnia. I wanted to make a 16 step sequencer with at least four layers or tracks and a selection of sounds. If I have time I’ll probably make a new sample pack for this project, but I can always use these sounds to prototype.

My first sketch resembled a classic horizontal sequencer similar to a Korg volca.

Then I realised it might be easier to make a circular sequencer. The reason being that I could use my old rotate code to make a looping movement. It might seem strange but a mechanical solution seems easier considering my limitations in coding. I can make a ball with a collider spin in circles and hit sound objects at regular intervals. With a little bit of research I should be able to make sliders to change the speed and volume of the loop. Another slider could be added for the stereo pan. If the speed is almost limitless any sound will become a pitch. With 3 or 4 loops harmonies can be achieved and what was a step sequencer becomes a synth!

This are some issues though.

First of all, I’ll need to learn how to make drag and drop objects to enable players to change the sounds and their positions on the loop.

Secondly, I’ll need to make a user interface using a canvas and sliders that links to the variables I need to change.

Finally, although I’m sure other issues will arise, I’ll need to make the code from scratch. Chat GPT could help, but the code itself is fairly useless without the context, links to the scripts and game objects. I can definitely learn from it though!

Liminal Capitalism Part 2

This post is about how I made Liminal Capitalism. A maze full of 1950s TV commercials which transform into videos discussing issues with capitalism when you put your sunglasses on, in the spirit of They Live.

You can find out about my initial inspiration here, but now I want to get into the nitty gritty of game design, C#, and Unity.

I started by making a sandbox, or tiny prototype, of the game I wanted to make in order to test out the functionality of what I wanted to create.  First, I needed a first person controller assigned to WASD keys for computers and buttons for touch controls on mobile devices. I used the old input system to achieve this as I find it more intuitive than the new one in Unity for now. Here’s an example function for the keys.

And one of the scripts I attached to a button.

After that I needed a screen to display my videos on. This was where I had to study a bit, which means heading over to YouTube and skipping adverts. Anyway, the video below helped a lot, but it wasn’t the end of the story.

Rather than simply adding videos to game objects I learned how to make a video texture so that the video could take advantage of internal illumination through emission.

But, surprise surprise! Video doesn’t seem to work with WebGL. To get video to work you have to do this!

As I added more videos, performance started to suffer. This meant that the videos and associated audio would distort and slow down. It sounded a bit like Aphex Twin! Interesting, but not really the effect I was looking for in this game. So, I had to separate the audio from the video, save it as an .ogg file, and then remove the audio from the video. I managed to do most of this with QuickTime Player and VLC. I also decided to pull back from the rather ambitious level I was starting to build!

I’ve been into liminal spaces since I saw the TV series Severance. I’ve also seen liminal spaces on YouTube and probably experienced a few unintentional ones in first person shooters (FPS) over the years. Liminal spaces are supposed to create a feeling of dread in people, perhaps due to their likeness to open plan offices or the feelings of infinity they might invoke. 

I don’t think I actually managed to create this feeling, but I am perhaps closer to knowing how it might be done. In this game I used a maze image as a texture to stamp onto terrain in Unity. I then added and deleted walls to create rooms.

However, when I play tested I found I could walk through walls. It took me quite a while to fix this and I’m not sure if I fixed it entirely. First of all, I changed the physics settings for default max depenetration velocity. Then I increased the size of the collider on the player.

I didn’t actually think I would be able to pull off the sunglasses mechanic I wanted, but in the end I kind of got the effect I was looking for. First of all, I attached 2 transparent game objects in front of the player and main camera which differing levels of opacity. Then I made code to set one or the other as active when a button was pressed. By some kind of fluke, I also ended up with a glare effect as a result of all this.

This was the same technique for changing the video game objects. Here is the code.

And there it is, another game jam in the bag! You can check it out here. Bye!

Liminal Capitalism Part 1

Yes, the title of this post is the result of 8ish days of procrastination. As always I am having difficulty with my game jam addiction. Having finished with the GameDev.tv jam and claiming my ‘free’ course, I now find myself propelled into the F**k Capitalism jam!

Do I want to do another jam? Can I stop myself? I don’t know. I don’t care. I have no choice anyway… So, yes, I am going to try and finish this one too. Even though there is a month for this one, I’m not going to let the generous time scale stop me from simulating the pressure of capitalist game development crunch.

Artists, i.e. game developers are especially prone to exploitation. And, I have often wondered whether game jams are not just another aspect of this. Here we are making games for free, to potentially promote someone’s ‘thing’. Help! I can’t help but stick quotation marks everywhere. Anyway, yes, the GameDev.tv jam did give away a free course, but in the meantime us indie gamers were busy making games and content to promote a business, albeit one I particularly like.

Anyway again, let’s move on shall we? Capitalism, or should I say ‘capitalism’ seems to mean different things to different people, and the F**k Capitalism jam definitely brought out quite a few alternative views, and quite often pro-capitalist views. To be honest, it is always quite surprising to come across such emotion online. I left Discord to free myself of it, but it would seem that Itch is no refuge.

It is ‘normal’ and healthy to come across different views online, but sometimes people can get quite angry when you express a different viewpoint. This made me think of Terror management theory from the mind of Ernest Becker. The idea is that Humans became aware of their own demise and that this is a paralysing thought. So, in order to function, humans need to create a death denying fantasy, such as nations, religions, and culture to become immortal. Thus, any criticism of these death defying beliefs becomes a mortal threat and reaction to these threats becomes instinctively strong and aggressive to protect against the fear of death.

All this actually motivated me to stop dithering and make a game for this jam. Anything that receives the amount of criticism this jam has so far, deserves some support. Not that I wasn’t already intrigued by the jam and its theme. In fact, I have been thinking about the systems we live in for quite a while, as I’m sure most have.

Let’s bring this back to game jams and game development, shall we. I think the game jam for Blind gamers made me realise that game jams can have a purpose beyond simply making games. And, it could be argued that some of the best games I’ve played were actually driven by some kind of message or mission.

After three and a half jams, I’m getting a feel for what seems rather mediocre and for what moves me. I can hazard a guess that the games that have something special are trying to communicate something. Often this relates to something you never noticed, like how water would be to a fish. So, making a game that criticises financial systems which seem like water to most of us fish is definitely worth a go.

I did actually start interacting on discord with this jam, but have managed to pull myself away from this form of social media for better or worse. However, I did save some of my thoughts for my blog. I approached the F**k Capitalism jam from popular culture initially, especially the film They Live, which I will come back to.

I then looked into capitalistic design in games and came across this interesting article:

https://www.eurogamer.net/games-that-avoid-capitalistic-design

I then reverted to the popular source of anarchist wisdom, Noam Chomsky, for some inspiration:

Finally, I went down my usual rabbit hole of meritocracy, free will, the self illusion, and the fantastic Century of Self documentary:

In the end, I settled on my initial research into popular culture and the film They Live. My initial final idea for this jam is to make a liminal space with black and white commercials plastered all over the surfaces. I might even add Chomsky talking above the whole thing and maybe a colour video to be found in some kind of liminal maze.

But, and this is a fundamental but. I’m going to go camping first and chill out by the sea. That seems to me to be the most anti-capitalistic thing to do. Game jamming for someone’s game jam is fun, motivating and so on, but it is work nevertheless and something to keep an eye on. I’ll be back though!

Life in 2D

Intro: I have just submitted my “game“, for the second time with some minor modifications with one day, 23 hours and 19 minutes to go for the GameDev.tv game jam. You may be wondering why I have those suspicious quotation marks around the word game, well let’s go back to the start…

This is the third post about this game jam which start here. In my last post, I tried to find some game ideas for the theme, Life in 2 dimensions, by watching a couple of videos on YouTube. In the end, I was drawn to The Game of Life concept in which some initial conditions could evolve to make patterns that resemble life. (See gif from Wikipedia below)

Zero-player game: And this is where all the quotation marks come from; because The Game of Life, in reality, is a game in name only. That said, I know there is a lot of debate on what actually defines a game. The Game of life is actually defined as ‘a zero-player game‘ on Wikipedia. Anyway, I usually imagine some rules, maybe an objective, and then some obstacles and challenges mixed in. At the end of the day, The Game of life could be described as a simulation or even an experiment of sorts.

Bouncing balls: So, I thought maybe I could make an environment that changed randomly over time. Not quite as sophisticated as The Game of Life with rules, just a random variety of bouncing objects. I had done a tutorial from GameDev.tv on mobile game development and made an angry birds clone, so I had some idea of how to make a bouncing ball on a pivot with some objects to collide with. I used default sprite shapes in the spirit of Flatland, turned off the gravity, built some walls and added a bounce material to everything!

Toy: Yes, it’s black and white. One of my aims for this jam was to use a 1-bit style. Not that I’m sure this is actually 1-bit. Anyway, conveniently, using two colours also fits the 2 dimensional theme!

I added particle systems to all the shapes and triggered when colliding with the ball. Then, I added sounds to each shape and triggered them in code too (See image below). At one point I realised I had created a kind of musical toy.

With one ball bouncing around you got quite a chilled vibe, with two or three something like a jazz drum solo, and with four to infinity a wall of sound! I experimented with adding different sounds, panning, pitch until I got something that was almost listenable.

Fireplace: Another trick that was on my wish list for this game jam was to get my graphics to glow using Unity’s Universal Render Pipeline(URP). I used another tutorial from GameDev.tv on how to make an RPG to work this one out. The results ended up turning my musical toy into a watching a fireplace experience (See Jasper Juul’s ‘Not games’ area in 6th image above).

Buttons: In previous game jams I had some unfortunately long sessions trying to built the thing. And that’s when I got stuck, again, for a couple of days. You see, I got my controls code from that RGP tutorial with touch controls. It worked nicely on my phone even from the WebGL build on Itch, but didn’t respond to mouse clicks. I could have just stopped there, but I know people in game jams prefer a quick browser game. I tried juggling my code around, adding input for the mouse in the old and new Unity input systems, adding && and || to my conditionals, and consequently fell down a rabbit hole of forums and YouTube videos. Then I gave up, ploughed on through with building other scenes and submitted the thing before I went crazy. However, I wasn’t happy. I even made a desperate plea for help in the Itch community and added comments to that mobile development course. Then, just when I had stopped thinking about it, from out of nowhere, an idea popped into my head. What about a button?

Although this wasn’t an elegant solution and made the experience even less game/toy like, at least it could be experienced on a computer. I made a LauchBallMouse method with modified code from the touch controls and then rigged up the button to the method.

After all this, the game, or fireplace, with buttons, looks like this!

And this!

And this!

Theme: Just to recap; How exactly does my game/toy/fireplace/sound art fit the GameDev.tv game jam theme of ‘Life in two dimensions’? Firstly it’s about an interpretation of life as random activity that forms patterns that resemble what we think of as life. Secondly, it is in 2D, with x/y coordinates, 2D flatland shapes, and in two colours (mostly). When you start flinging balls into the mix, it all takes on a life of its own. However, instead of infinite evolution, as in the Game of Life, the friction eventually grinds all frantic activity to a halt as the universe dies.