thanks for playing and for the feedback! I'll check out your game as soon as i can.
As for the enemy behaviours, in terms of bosses I used a rather crude form of a state machine that probably isn't very efficient but worked well in my case.
I'd first have a system which set a random boolean to be true. While this boolean is true the enemy would carry out their attack, which can be animated using a timer which decreases every frame. When the attack is finished, the boolean sets itself to false, and the system returns to the random choice. As for changing phase in a boss fight, that was handled by setting a boolean to be true when the boss reached half hp perhaps, which then changed some logic of the boss by checking if it was in that second phase.
As I said this is definitely not the most efficient way, and I'm pretty sure I'm effectively describing a function with the boolean system I used, but it worked well for the limited time frame I had.
Once again, thanks for playing, and your feedback is really important so thanks!