I'm sorry to hear about your mom. While I was writing this, the song "Only love can hurt like this" was playing in the background, and I think that means something.
For your game, this seems doable.
To spawn enemies, first make a spawner object. This can just be a rectangle with initial visibility false. Give it an instance variable, like "to spawn," and set it to the most enemies you want on screen
For the conditions, use System: Every X seconds AND Spawner object: compare value: "to spawn" > 0
For the actions, use spawner object: spawn another object: enemy AND spawner object: subtract from: 1 from "to spawn"
To add back in to the counter, use
enemy: on destroyed
spawner: add to : 1 to "to spawn"
Note: this assumes you're using only 1 spawner.
For enemy movement, I just use
enemy: compare x: > player.x
enemy:simulate control: right
enemy: simulate control: left
To jump, you could try
enemy: is moving, invert condition (right click the condition and select "invert")
enemy: simulate control: jump
As far as making the boss, you would probably need a global variable like "points."
Add the action "system: add to: 1 to points" to the enemy destroyed event
Add the condition "system: compare value: points < (the number of enemies you want killed before the boss spawns)" to the spawning event.
Add the new event:
System: compare value: points >= (number to spawn boss)
Spawner: spawn another object: boss
And give the boss the AI you want, maybe the same as the base enemies.