SlayHorizon / godot-tiny-mmo-demo

Simple MMO / MMORPG using Godot 4. Both client and server are on the same project. Discord: slayhorizon
MIT License
5 stars 3 forks source link

Separate Abilities System (With Standardized Animation Sets To Utilize) #10

Open WithinAmnesia opened 3 weeks ago

WithinAmnesia commented 3 weeks ago

https://github.com/SlayHorizon/godot-tiny-mmo-demo/issues/9#issuecomment-2307816286

"...the same animations can be easily shared across all characters without additionnal work."

I'll make a separate issue for separate ability system that calls upon a standardized set of animation so we can be free to use any animation set and have abilities can be used on any entity regardless of animation availability (but we should have a deep animation list to call from to make the best we can for what we have to work with)...

...With Flare the abilities (including attack abilities) were all shared even though the sprites had unique animation sets. So animations can be arbitrary if we have circle hit box abilities that Flare has used for attacks.

I think the logic flow was like this with Flare: ( https://github.com/flareteam/flare-engine )

Input V Ability start triggers V Ability calls on arbitrary sprite animation(s) to play V Finds Mouse / Controller Location on screen V Places closest allowable range of Ability X,Y coordinates to on screen location V Places the designated ability hit box circle size at X,Y coordinates location V Triggers ability effects of the ability with the designated ability hit box circle size at X,Y coordinates location V Ability continues for X seconds and or with more conditional effects or ends.

@dorkster Is this sort of close to correct for what Flare uses with its robust ability system?

So if we separate the abilities (including attacks) that trigger arbitrary animations for the affected entities and their sprites we can have the freedom of using any sprite set so long as the animations can be called / triggered by the ability system. We don't have to to worry about hands or not but instead we can look for animation amounts and getting a standard list of animation types to call for x seconds such as (Run / Walk Up, Down, Left, Right or Die, Attack, Cast, Idle, Swim, Climb etc. etc.).

Separate Abilities System is a more robust system that once made can gobble up any animation assets and pretty much all animations can be used efficiently and even if they lack animation type to call; placeholder animation sets can be used with duplicated / close enough approximations to rough out a demo. Such as say some sprite animation set lack a 'cast' animation. For a solution an attack / placeholder animation can be used / copy and paste can called 'cast' etc. this is a popular dev trick / method in bigger games like WoW, Baldur's Gate, Diablo etc.

I am wondering what steps are needed to implement a proper Separate Abilities System like with Flare for this Godot Tiny MMO demo? All thoughts and feedback are welcome. This is really cool and I hope it gets made so there are really great multiplayer dev tools for the community.

dorkster commented 3 weeks ago

That's more or less how Flare works. Although we map the mouse/controller position to our in-game target before the ability triggers.

Also worth noting that the hit circle doesn't exist until the character's animation hits its "active" frames. So, for example, a sword swing will be able to damage the target when the blade appears to visually make contact, rather than when the character is holding their blade above their head. This isn't strictly necessary, but it creates a better cohesion between what the player can and can't see.

WithinAmnesia commented 3 weeks ago

That's more or less how Flare works. Although we map the mouse/controller position to our in-game target before the ability triggers.

Also worth noting that the hit circle doesn't exist until the character's animation hits its "active" frames. So, for example, a sword swing will be able to damage the target when the blade appears to visually make contact, rather than when the character is holding their blade above their head. This isn't strictly necessary, but it creates a better cohesion between what the player can and can't see.

That makes sense. I suppose the mouse/controller mapping should be mentioned for its needed for things to work properly. Timing is a good detail for the ability system and that makes sense too.

I really like the options with the timing for making the say for your example the sword swing match / pair with the hit box and the visual data of the sword should be making contact with the target.

Its subtle but it gives lots of depth and organic feedback which is hard to describe but feels really good to the players when it works lol.