for the mixing system i created a look up table dictionary of combinations
for example
"1_0_0_0": Color("e6194b"),
means 1 pour of red and zero pours of red, yellow, blue, and water gives the colour e6194b (red)
"1_0_1_0": Color("911eb4")
means 1 pour of red, no pours of yellow, 1 poiur of blue, and no pours of water to give colour 911eb4" purple
The problem was the Look up table started getting ridiculously large particularly when mixing double and single shots. There was probably a better way to fix it but i just make the time limit slightly more punishing and setting a limit to the number of pours for each challenge before the brew gets "ruined" and it's counted as a fail.
If a combination isn't in the dictionary look up then it defaults to a muddy Color("4a3b32")
The look up method lets me pick vibrant colours as a result of each mix. Mixing via arithmetic code seem to result in pretty bland resulting colours.
The colour system is really what was hammering me. Everything else seemed to just come together and work. Well, except the grabbing system. That code is a complete mess and horrible hence why until I refactor it, it was pretty much impossible to have it register as the pour occuring at the point of releasing the mouse and it only registers after the animation (tween) finishes. The bottles and cauldron were make in inkscape using 4 circles for the cauldron and 2 circles and a fill for the bottles. They turned out a LOT better than they should have for about 10-15 minutes of work.
I have a boilerplate tempate I use for gameflow when I do game jams as that's what always seems to kill me. The template controls the flow as a state machine from splashscreen -> game title -> game play -> game over -> game title .... repeat. I actually have YOUR input manager (which is brilliant) load up so I'm not wasting time with setting up key bindings. So all I need to do is write the actual game scene and the game play state picks it up and runs it. The game scene is written without any knowledge of the boilerplate template except for emitting a game over signal which is picked upby the template which then switches to the game over state. Before the game flow template, I found trying to retro fit the game scene into a normal game flow seemed to take me hours. Now I just write the game and it slots in easily. The boilerplate is actually part of a RPG system I've been working on since 2022! (which I ended up redesigning the whole dialogue system after getting your "Adventure Essentials" Course because you elegantly did successfully what I couldn't even get close to doing in about 6 months, 4 separate scripts, and 2 scenes). The template is largely inspired by you after reading your article talking about systems rather than games. So I owe you a big thank you!