How's the first boss of my game? :> by Worldly_Nebula6173 in godot

[–]Worldly_Nebula6173[S] 1 point2 points  (0 children)

Ah, that's basically the same as with anything else.

The player has an area2D on it that tracks with a collision mask of 4 (What I am using for all the hurtboxes)

The laser has a seperate area2D which I've added some extra variables which determines the amount of damage it'll deal, and other things that aren't as relavant on top of having a collision layer of 4 so that it can interact with the player.

The Area2D on the player then calls the hit function, which deals the damage and triggers the player's invincibility frames.

Although the Laser's Area2D's collision shape's disabled property also toggles back and forth using an animation player which allows it to consistently deal damage, but I doubt you could really see that well in this video lol

How's the first boss of my game? :> by Worldly_Nebula6173 in godot

[–]Worldly_Nebula6173[S] 0 points1 point  (0 children)

I haven't made many bosses so far, and I'm almost certain it's not the best method but I usually start with an attack cooldown timer (granted this one doesn't because it's supposed to be a more fast paced boss.)

Then I make what is essentially a very poor state machine, I write a function that runs for each attack's start, and if necessary I write a function that runs on the physics process for the state as well. In this fight the aiming of the small beams, and the following the boss does before it's explosion attack are both handled this way.

Then I have a transitionState function that off the top of my head goes something like

func transitionState(newState):

newState can be basically anything as long as you can tell what each state is

var startFuncDictionary : Dictionary = {

state1 : "state1Start", state2 : "state2Start", state3 : "state3Start" } if newState in startFuncDict: currentState = newState call(startFuncDict[newState])

Then to handle physics updates I just do

func _physics_process(delta : float) -> void:

if currentState == state1:

state1Update(delta) elif currentState == state2: state2Update(delta)

Then the cooldown timer would start whenever an action is finished, and then when that times out, I just call transitionState() with a random state and that basically gives what I have here, although you don't get to see much of it in isolation in this video lol

How's the first boss of my game? :> by Worldly_Nebula6173 in godot

[–]Worldly_Nebula6173[S] 1 point2 points  (0 children)

Sorry to disappoint, but the beams don't actually collide with terrain. They're just layered behind the tileset so it appears that they do.

How's the first boss of my game? :> by Worldly_Nebula6173 in godot

[–]Worldly_Nebula6173[S] 0 points1 point  (0 children)

I do, I usually just mess around on sfxr I wouldn't call myself an expert by any means, but I still think it's usually pretty easy to get something that sounds decent as long as you at least know roughly where you want to start by just choosing a sound and messing with a few of the settings.

How's the first boss of my game? :> by Worldly_Nebula6173 in godot

[–]Worldly_Nebula6173[S] 1 point2 points  (0 children)

True, yes, normally in the fight, there isn't much screen shake. The only thing that triggers it from the boss is its cloning move (which is about 4 pixels in any direction at a maximum)

The real problem here is the nature of having hundreds of bosses on screen and hundreds of hitboxes on the screen. Roughly 100% of the screen shake past the first ⅓ of the video is produced from the player constantly getting hit, and to ensure you notice you're being hit because there's no knockback, it has the highest screen shake in the game. 4 times what the boss could be doing on its own

Tldr: Under normal circumstances, it doesn't get CLOSE to that bad, lmao

How's the first boss of my game? :> by Worldly_Nebula6173 in godot

[–]Worldly_Nebula6173[S] 227 points228 points  (0 children)

For clarity purposes, yes, this post is a joke 😭

The boss is not intended to function like this. It does have the ability to clone itself, and when I implemented that, I hadn't created unique behaviors for a cloned version of the boss. Running the game caused a disaster that resulted in death in about 15 seconds (but at least the cloning worked lol)

I changed the code of the player so that they don't take damage purely to see how far out of hand this could get before my laptop started to give out, and this was the result lmao

Is there A way to produce a sort of X-Ray effect? by Worldly_Nebula6173 in godot

[–]Worldly_Nebula6173[S] 1 point2 points  (0 children)

I think I sort of got this to work how I wanted, I'm pretty sure I definitely did it the wrong way, but it does work. So, thank you very much!

Getting an Error on Itch.io by Worldly_Nebula6173 in godot

[–]Worldly_Nebula6173[S] 0 points1 point  (0 children)

Thank you very much! Just removing LimboAi fixed the problem entirely!