Asking about reusable bullets among other stuff with game development

Godot Version

4.6

Question

I kinda have a shark that vommits out debris as a boss. To make it less boring, I made gemini generate some interesting things a shark could spit out.

But I realised the items have weirder shapes sometimes so I need to manually adjust the hitbox a little bit. I don’t want to do this for all item.

I also have the same problem for enemies. I kinda want some variety so it feels interesting, but more or less it is the same thing, but let’s say an enemy throws something, I wanna reuse the code or scene, but we cannot really do it easily without manually tweaking an animation player.

There’s also issues with abstraction, where we cannot create an abstract scene or class then save it without an error.

Question 2: Let’s say we have a cut scene in the middle before a boss battle, how do we preserve the player hp or game state?

Is Global PlayerData the only way? I kinda have my player attributes in a PlayerScene and Object.

Question 3: How does one design platform levels? I really have no idea how to design good ones cause I failed in pixel art. Can anyone recommend me some level design tutorial maybe XD.

Does anybody have some good advise for me?

Yes, but it depends on whether this is a 2D or 3D game.

Why? Just have one throw animation and put different stuff in their hand.

Why not? Works for me.

This is question 4 by my count.

There’s lots of ways. The easiest is pause the game, make the cutscene work when the game is paused, and display it on top of the game.

That’s another way.

This is a GREAT talk on the subject.

Yes, lots of good advice. But, while you clearly have a lot going through your head, you wrote relatively little of it in your post.

Take a deep breath and start from the beginning. What kind of game are you trying to make? Platformer? Metroidvania? Something else? 2D or 3D? Have you started using Godot yet? Done any tutorials? Made anything?

It’s kinda just abit of a 2D platformer or Metroidvania with bosses.

The problem is that the bullies also have different skins and looks with regards to that.

With regards to the abstract class, I sort of want that logic to be in a standard scene file I use with common behaviours, so attaching an external GDScript will cause it to fail because it is an abstract GDScript. Sorta gave up on forcing implementation and just used a non abstract class with concrete methods for overriding if I inherit the scene.

There are also other debates, I read it was always, signal up, call down. But there seem to be weird moments in practice, where in order to say spawn units or attacks correctly for bosses, I need to orchestrate the position in the main scene.

Yeah, I did the tutorials already, I made my first cuphead like boss although ugly textures and made with Gemini. Now I am trying to design the levels.

I admit I bit off more than I can chew by deciding my first game would be an 2D platforming RPG with boss fights :rofl:

But that is unfortunately always how ambitious I am. I can’t think of a casual game to code XD.

In that case, check out my CollisionSprite2D Plugin. You use it like a Sprite2D and it creates the collision polygons for you based on the image at runtime. You can read more about how I came up with it and how it works in my Katamari Mech Spacey Day 2 Devlog. And you can see how it works by playing my game jam game, Katamari Mech Spacey.

You might look into scene inheritance. You create a scene to inherit.

Then go to Scene → New Inherited SCene and make a new scene:

All the yellow parts inherit from the base scene, but you can add new nodes and new code.

Those are from my Metroidvania game jam game, Eternal Echoes if you want to see them in action.

You can pass arguments in signals.

signal spawn_unit(position Vector2)


func _ready() -> void:
	spawn_unit.emit(global_position)

You also might benefit from reading my Eternal Echoes Postmortem where I discuss the month I spent making a Metroidvania in Godot.