Godot Version
4.2
Question
Hi, to explain my current issue:
All enemies’ abilities extend from an AbilityNode class, and there are a few different types of abilities I defined ( ConeCleave, Projectile, RectangleCleave, Donut etc… )
Currently I thus have a few different ability scenes, each representing their own type. And each enemy attack is a resource that has parameters that inject into the scene to alter the behavior ( things like radius, direction etc… ). Hitboxes are also correctly configured etc…
To give a brief showcase, it looks like this
The nice thing about the current system is that I can easily edit any enemy ability at will by just increasing / lowering values.
Ideally I want to keep this system and make it so that effects are triggered after telegraph end and occupy the area within the hitbox/collision shape.
So far, mechanically, this system works, HOWEVER, I am now starting to second guess myself because of the effects I want to implement for each attack.
I will be honest and say I have barely, or more like no experience on the art side of things ( particle effects, shaders, sprites etc… ), so I am kind of lost as to how to approach making new effects for each attack. Using an animated sprite for example would lead to the size of the sprite maybe not representing the full size of the actual effect, which might be difficult for scaling in a generic fashion etc… It’s also difficult to know really how would abilities look like in the final product without going into the game/actual runtime.
And knowing each effect would maybe be deeply tied to the attack then it makes maybe not much sense to separate modifiers such as radius etc… from the actual sprite/scene itself.
To summarize then, I am wondering which would be the best practice in that case:
- Keep generic scripts, make instead one scene for each ability and add parameters onto the scene directly.
- Keep generic ability scenes, make some placeholder nodes ( sprite, particle effect… ) I could override based on an attack resource property ( like effect_name etc… )
- Something else?