endless-sky / endless-sky

Space exploration, trading, and combat game.
https://endless-sky.github.io/
GNU General Public License v3.0
5.69k stars 1.02k forks source link

Situation based ship animations #4991

Open beccabunny opened 4 years ago

beccabunny commented 4 years ago

Is your feature request related to a problem? Please describe. Currently, the only animation a ship can have is one that starts as soon as a ship spawns and never stops until the ships gets disabled, and the only options are to have a random start frame and to make it reverse after it stopped playing (e.g. instead of passing from frame 5 to frame 0, it goes back to frame 4 first). It would be nice to have more options, for istance situation based animations: -an animation, repeatable or not, playing when engaging in combat (e.g. not only in the exact moment when it's shooting, but during all the combat action) -a non repeatable animation playing when entering hyperspace, probably also preventing the ship from entering hyperspace until the animation has finished, to play reversed when ceasing hyperjumps (either because of player input, or because the jump is complete) -a non repeatable animation playing when departing from a planet, and playing in reverse when landing

Related Issue Links None I could find

Describe the solution you'd like A possible example sintax:

ship "Kimek Briar"
    departing "ship/kimek briar departing"
        "frame time" 2
    fighting "ship/kimek briar fighting"
        "frame time" 2.45
        "repeat"
    jumping "ship/kimek briar jumping"
        "frame time" 3.6
    sprite "ship/kimek briar"
    thumbnail "thumbnail/kimek briar"
Zitchas commented 4 years ago

Definitely!

This also helps bring ES up to feature parity with EVN. (Actually, this would bring it ahead). EVN had a limited version of this, specifically, certain ships had special firing animations that were connected with specific weapons. For instance, the Asteroid miner had arms that would unfold outwards and roughly double its width which preceeded weapon firing. This long delay made what might have been a decent combat ship (6 lasers, I think?) into a relatively poor one, but also made it an excellent miner, because bigger reach for picking up stuff. The Polaris Raven, Scarab, and Arachnid all had special firing animations connected to the CPL (giant purple laser) that had the laser emiting from several different points and joining into the actual weapon beam at a point in front of the ship, which was really cool to see.

And probably the highlight was the Pirate Manticore, which had a ring of weapon placements around the front that was tied to the "Ring of Thorns" turreted beam. Most ships, that was just a generic turreted laser. On the Manticore, when firing the whole ring lit up then emerged from one point to strike at the target. Looked awesome.

Anyway, all this to say there should be two parts to this:

One is the trigger for the animation which you've got here, but also to add a "firing" animation that can be set to either trigger a) anytime a weapon is fired, or b) when a specific weapon is fired. This allows for, like the Polaris, to have weapons that are tied to specific ships for extra special animations.

Anyway, great suggestion!

LordInsane commented 4 years ago

IIRC, Nova also had 'banking' animations for a few ships. Perhaps turning in a given direction could be another situation trigger? It could allow things like thrusters shifting position

Zitchas commented 4 years ago

Given that we have turning thrusters in the works, a banking animation would be great. Definitely make things look a lot sharper and active.

tehhowch commented 4 years ago

One of the biggest challenges blocking this is how to define what happens to all those engine and weapon hardpoints drawn on every ship.

XessWaffle commented 2 years ago

I wanted to resurface this issue as I have been working on an implementation for this. Plus, a similar issue was discussed in PR #7090 which was basically the inspiration to revisit this issue. Essentially, the solution involves keeping track of the state of the body (Flying, Jumping, Landing, Launching, Fighting etc.) and then transitioning/switching between sprites as the body state changes. The syntax to define these sprites is basically identical to how @beccabunny described it. It is possible to animate each sprite individually and also define transitions between sprites.

I have also thought about the hardpoint issue (as @tehhowch describes), but I am not sure exactly how to approach it yet.

Let me know if this is an issue that would be worth creating a PR for!

beccabunny commented 2 years ago

I wanted to resurface this issue as I have been working on an implementation for this. Plus, a similar issue was discussed in PR #7090 which was basically the inspiration to revisit this issue. Essentially, the solution involves keeping track of the state of the body (Flying, Jumping, Landing, Launching, Fighting etc.) and then transitioning/switching between sprites as the body state changes. The syntax to define these sprites is basically identical to how @beccabunny described it. It is possible to animate each sprite individually and also define transitions between sprites.

I have also thought about the hardpoint issue (as @tehhowch describes), but I am not sure exactly how to approach it yet.

Let me know if this is an issue that would be worth creating a PR for!

As far as I'm concerned I still really want to see this feature in ES, so if you can make it a PR, go for it

On the hardpoints issue, I see little reason to touch them. We already have an animated ship sprites feature and hardpoints never change there, these are just a few additional animated sprites where the hardpoints would still be in the same normal coordinates. It'd be nice to have, but it's really a separate feature from the rest of the issue imo considering that it also concerns a mechanic that's already in game

Zitchas commented 2 years ago

I, too, would very much like to have these features in game.