What should I do if I reported a bug but nobody seems to care

Godot Version

v4.4.1.stable.official [49a5bc7b6]

Question

Context

I reported an issue some months ago on GitHub:

I am surprised because there are more people (and discussions) involved in some more recent issues.

Questions

I am wondering the following:

  • Which bug reports are prioritized ? Is there criteria ?
  • Can I do something else than waiting ?
  • Am I doing something wrong ?

disambiguation

It is important to make it clear that this is not a complaint. Also, I hope the words I use are not unpleasant. I am not a native speaker and I just use the words I find.
I don’t want to denigrate the amazing work of Godot developers, I just want to understand how things are organized.

1 Like

You did everything right. There could be many reasons why it isn’t prioritized. Maybe there’s no one to work on it. If it is important to you to get it fixed, this could be a reason for you to contribute to the project.

3 Likes

Thank you !

Do you mean fixing the bug myself ? There are even more reasons for me to try:

  • an amazing experience (I guess)
  • the best way to understand how things are organized, I guess.
  • Learning c++ which is a language I don’t master (never really used it).

However, this last point could also be a reason to avoid doing it. I am not sure to be able to make clean code in this language. It is still recent for me to write GDScript or python that I can easily understand later.
And there is an even more important reason I will not do it soon: I am currently really busy for school and exams. I can do my hobbies only if they bring zero deadlines. And I am unable to predict how next year will be.

Is contributing the only thing I can do ?

Do you know other plausible reasons ?

I don’t think this is a bug, move_and_slide is supposed to conserve speed to an extent; and your object is moving with a magnitude of 111.8, which pretty close to the resulting 109 when sliding against the wall. It’s not clear what you expect to happen, if you wish it canceled any “sliding” then that could be achieved easier by using move_and_collide instead of altering move_and_slide.

When grounded this is considered a “floor” so the vertical movement is canceled out by a presumed gravity which keeps horizontal movement consistent, which is usually desired for platformers.

This is also a widely used function, any change to move_and_slide would break many projects and tutorials so a contributor would be weary to take this on, and reviewing the change would require a lot of debate and rigorous testing.

You did a good job reporting, videos and demos are perfect, only thing missing is what your expected behaviour is. Issues take a long time, many have been open for years, for the reasons described I don’t think you will see a quick turn around on this.

2 Likes

Thank you to bring this to my attention !

No I don’t expect the sliding to be canceled.
In the example shown in the issue (where the collision happens on a horizontal edge), I just want the sliding to be slower. If velocity.x = 50, I expect the sliding speed to be 50. I think, it should not depend on velocity.y (as the collision happens on a horizontal edge). That’s why it should not conserve its magnitude in my opinion.

Maybe, I should make a schema :thinking: to explain things better…

1 Like

You can add your expected behavior as @gertkeno suggested.

I can think of many. Just like you’re busy with life, they are busy with life. The people working on Godot are doing it for fun and for free. They do not get paid for it. Just like the people on these forums are answering questions to the best of their ability for free.

1 Like

It looks like the engine is taking the expected velocity of 111 units/frame and then moving it as far as it can, then sliding it. From a physics standpoint, the current results are the ones most people would expect.

You’re constantly moving something at ~111units/frame. The game is taking that motion, moving until it collides with a wall, and then attempting to use up the remainder of that motion in whatever its new direction is. Or to put it another way; you’re not moving 50x and 100y units, you’re moving ~111units at about 296 degrees (or ~64 degrees below the X axis). Once you collide with something along that motion, the engine sees how much you’ve moved, and tries to use the rest of your movement along whatever surface you’ve hit.

I’d recommend playing with code to get the desired results. I haven’t personally dabbled with the physics engine much, but you could see if using move_and_collide followed by custom response.

After writing that and testing, this seems to get close to what you want:

func _process(delta: float) -> void:
	old_x = position.x
	old_y = position.y
	move_and_collide(velocity*delta)
	if (position.x - old_x) < (velocity.x*delta*0.99):
		move_and_collide(Vector2(velocity.x-(position.x - old_x),0)*delta)
	elif (position.y -old_y) < (velocity.y*delta*0.99):
		move_and_collide(Vector2(0,(velocity.y-(position.y-old_y)))*delta)
	print((position.x-old_x)/delta,",",(position.y-old_y)/delta)

Basically just moving and colliding, check for unused motion in the x or y direction, then continue moving in that direction.