HomeWildfire Games

Add slaughter animations to most units.

Event Timeline

Nescio added a subscriber: Nescio.May 25 2020, 12:22 PM

Great, all infantry can now slaughter. How about cavalry?

[units]$ grep -c attack_slaughter */*cavalry*_r.xml
athenians/cavalry_javelinist_a_r.xml:1
athenians/cavalry_javelinist_b_r.xml:1
athenians/cavalry_javelinist_e_r.xml:1
athenians/cavalry_swordsman_a_r.xml:1
athenians/cavalry_swordsman_b_r.xml:1
athenians/cavalry_swordsman_e_r.xml:1
britons/cavalry_javelinist_a_r.xml:1
britons/cavalry_javelinist_b_r.xml:1
britons/cavalry_javelinist_e_r.xml:1
britons/cavalry_swordsman_a_r.xml:1
britons/cavalry_swordsman_b_r.xml:1
britons/cavalry_swordsman_e_r.xml:1
britons/hero_cavalry_javelinist_boudicca_r.xml:1
britons/hero_cavalry_swordsman_cunobelin_r.xml:0
carthaginians/cavalry_javelinist_a_r.xml:1
carthaginians/cavalry_javelinist_b_r.xml:1
carthaginians/cavalry_javelinist_e_r.xml:1
carthaginians/cavalry_spearman_a_r.xml:1
carthaginians/cavalry_spearman_b_r.xml:1
carthaginians/cavalry_spearman_c_r.xml:0
carthaginians/cavalry_spearman_e_r.xml:1
carthaginians/hero_cavalry_spearman_maharbal_r.xml:0
carthaginians/hero_cavalry_swordsman_hamilcar_r.xml:0
gauls/cavalry_javelinist_a_r.xml:1
gauls/cavalry_javelinist_b_r.xml:1
gauls/cavalry_javelinist_e_r.xml:1
gauls/cavalry_spearman_c_r.xml:0
gauls/cavalry_swordsman_a_r.xml:1
gauls/cavalry_swordsman_b_r.xml:1
gauls/cavalry_swordsman_e_r.xml:1
gauls/hero_cavalry_swordsman_vercingetorix_r.xml:0
iberians/cavalry_javelinist_a_r.xml:1
iberians/cavalry_javelinist_b_r.xml:1
iberians/cavalry_javelinist_c_r.xml:1
iberians/cavalry_javelinist_e_r.xml:1
iberians/cavalry_spearman_a_r.xml:1
iberians/cavalry_spearman_b_r.xml:1
iberians/cavalry_spearman_e_r.xml:1
iberians/cavalry_swordsman_a_r.xml:1
iberians/cavalry_swordsman_b_r.xml:1
iberians/cavalry_swordsman_e_r.xml:1
iberians/hero_cavalry_spearman_indibil_r.xml:0
kushites/cavalry_javelinist_a_r.xml:1
kushites/cavalry_javelinist_b_r.xml:1
kushites/cavalry_javelinist_e_r.xml:1
kushites/cavalry_spearman_a_r.xml:1
kushites/cavalry_spearman_b_r.xml:1
kushites/cavalry_spearman_c_r.xml:0
kushites/cavalry_spearman_e_r.xml:1
kushites/hero_cavalry_spearman_harsiotef_r.xml:0
kushites/hero_cavalry_spearman_nastasen_r.xml:0
macedonians/cavalry_javelinist_a_r.xml:1
macedonians/cavalry_javelinist_b_r.xml:1
macedonians/cavalry_javelinist_e_r.xml:1
macedonians/cavalry_spearman_a_r.xml:1
macedonians/cavalry_spearman_b_r.xml:1
macedonians/cavalry_spearman_c_r.xml:0
macedonians/cavalry_spearman_e_r.xml:1
macedonians/hero_cavalry_spearman_philip_r.xml:0
macedonians/hero_cavalry_spearman_pyrrhus_r.xml:0
macedonians/hero_cavalry_swordsman_alexander_r.xml:0
mauryas/cavalry_javelinist_a_r.xml:1
mauryas/cavalry_javelinist_b_r.xml:1
mauryas/cavalry_javelinist_e_r.xml:1
mauryas/cavalry_swordsman_a_r.xml:1
mauryas/cavalry_swordsman_b_r.xml:1
mauryas/cavalry_swordsman_e_r.xml:1
persians/cavalry_archer_a_r.xml:1
persians/cavalry_archer_b_r.xml:1
persians/cavalry_archer_c_r.xml:0
persians/cavalry_archer_e_r.xml:1
persians/cavalry_javelinist_a_r.xml:1
persians/cavalry_javelinist_b_r.xml:1
persians/cavalry_javelinist_e_r.xml:1
persians/cavalry_spearman_a_r.xml:1
persians/cavalry_spearman_b_r.xml:1
persians/cavalry_spearman_c_r.xml:0
persians/cavalry_spearman_e_r.xml:1
persians/cavalry_swordsman_a_r.xml:1
persians/cavalry_swordsman_b_r.xml:1
persians/cavalry_swordsman_e_r.xml:1
persians/hero_cavalry_spearman_cyrus_r.xml:0
ptolemies/cavalry_spearman_a_r.xml:1
ptolemies/cavalry_spearman_b_r.xml:1
ptolemies/cavalry_spearman_c_r.xml:0
ptolemies/cavalry_spearman_e_r.xml:1
ptolemies/hero_cavalry_swordsman_ptolemy_IV_r.xml:0
romans/cavalry_javelinist_a_r.xml:1
romans/cavalry_javelinist_b_r.xml:1
romans/cavalry_javelinist_e_r.xml:1
romans/cavalry_spearman_a_r.xml:1
romans/cavalry_spearman_b_r.xml:1
romans/cavalry_spearman_e_r.xml:1
romans/cavalry_swordsman_c_r.xml:0
romans/hero_cavalry_swordsman_marcellus_r.xml:0
romans/hero_cavalry_swordsman_maximus_r.xml:0
romans/hero_cavalry_swordsman_scipio_r.xml:0
seleucids/cavalry_spearman_c_r.xml:0
seleucids/hero_cavalry_spearman_antiochus_the_great_r.xml:0
spartans/cavalry_javelinist_a_r.xml:1
spartans/cavalry_javelinist_b_r.xml:1
spartans/cavalry_javelinist_e_r.xml:1
spartans/cavalry_spearman_a_r.xml:1
spartans/cavalry_spearman_b_r.xml:1
spartans/cavalry_spearman_e_r.xml:1

And healers?

[units]$ grep -c attack_slaughter */*healer*.xml
athenians/healer.xml:0
carthaginians/healer.xml:0
celts/healer.xml:1
hellenes/healer.xml:0
iberians/healer.xml:0
kushites/healer.xml:0
mauryas/healer.xml:0
mauryas/hero_healer_chanakya.xml:1
persians/healer.xml:0
ptolemies/healer.xml:0
romans/healer.xml:0
spartans/healer.xml:0
Stan added a comment.May 25 2020, 12:24 PM

I guess I missed some. Feel free to make a patch :)

I guess I missed some. Feel free to make a patch :)

You did this one, are more familiar with the art files, and have commit access, so it's probably better if you do it. :)

Stan added a comment.May 25 2020, 12:32 PM

I guess I missed some. Feel free to make a patch :)

You did this one, are more familiar with the art files, and have commit access, so it's probably better if you do it. :)

If I do it, will you check for completeness? All those changes are completely useless for the current game, so I don't care much either way.

If I do it, will you check for completeness?

Sure, checking for completeness is the easy part, that takes just a few seconds.

Good to have that done.

Great, all infantry can now slaughter. How about cavalry?

[units]$ grep -c attack_slaughter */*cavalry*_r.xml

A classic grep won't suffice, you'll have to do it semantically to check variants.

For that one for example:

romans/hero_cavalry_swordsman_marcellus_r.xml:0

You will have to check "biped/rider/cavalry/base_swordsman_ready_shield.xml" which appears ok.

Nescio added a comment.EditedMay 25 2020, 3:38 PM

A classic grep won't suffice, you'll have to do it semantically to check variants.

For that one for example:

romans/hero_cavalry_swordsman_marcellus_r.xml:0

You will have to check "biped/rider/cavalry/base_swordsman_ready_shield.xml" which appears ok.

That's quite confusing! Why is that?

Checking cavalry swordsmen only:

[units]$ grep -c attack_slaughter */*cavalry_sw*_r.xml
athenians/cavalry_swordsman_a_r.xml:1
athenians/cavalry_swordsman_b_r.xml:1
athenians/cavalry_swordsman_e_r.xml:1
britons/cavalry_swordsman_a_r.xml:1
britons/cavalry_swordsman_b_r.xml:1
britons/cavalry_swordsman_e_r.xml:1
britons/hero_cavalry_swordsman_cunobelin_r.xml:0
carthaginians/hero_cavalry_swordsman_hamilcar_r.xml:0
gauls/cavalry_swordsman_a_r.xml:1
gauls/cavalry_swordsman_b_r.xml:1
gauls/cavalry_swordsman_e_r.xml:1
gauls/hero_cavalry_swordsman_vercingetorix_r.xml:0
iberians/cavalry_swordsman_a_r.xml:1
iberians/cavalry_swordsman_b_r.xml:1
iberians/cavalry_swordsman_e_r.xml:1
macedonians/hero_cavalry_swordsman_alexander_r.xml:0
mauryas/cavalry_swordsman_a_r.xml:1
mauryas/cavalry_swordsman_b_r.xml:1
mauryas/cavalry_swordsman_e_r.xml:1
persians/cavalry_swordsman_a_r.xml:1
persians/cavalry_swordsman_b_r.xml:1
persians/cavalry_swordsman_e_r.xml:1
ptolemies/hero_cavalry_swordsman_ptolemy_IV_r.xml:0
romans/cavalry_swordsman_c_r.xml:0
romans/hero_cavalry_swordsman_marcellus_r.xml:0
romans/hero_cavalry_swordsman_maximus_r.xml:0
romans/hero_cavalry_swordsman_scipio_r.xml:0

and:

[units]$ grep -c base_swordsman_ready_shield */*cavalry_sw*_r.xml
athenians/cavalry_swordsman_a_r.xml:0
athenians/cavalry_swordsman_b_r.xml:0
athenians/cavalry_swordsman_e_r.xml:0
britons/cavalry_swordsman_a_r.xml:0
britons/cavalry_swordsman_b_r.xml:0
britons/cavalry_swordsman_e_r.xml:0
britons/hero_cavalry_swordsman_cunobelin_r.xml:1
carthaginians/hero_cavalry_swordsman_hamilcar_r.xml:1
gauls/cavalry_swordsman_a_r.xml:0
gauls/cavalry_swordsman_b_r.xml:0
gauls/cavalry_swordsman_e_r.xml:0
gauls/hero_cavalry_swordsman_vercingetorix_r.xml:1
iberians/cavalry_swordsman_a_r.xml:0
iberians/cavalry_swordsman_b_r.xml:0
iberians/cavalry_swordsman_e_r.xml:0
macedonians/hero_cavalry_swordsman_alexander_r.xml:0
mauryas/cavalry_swordsman_a_r.xml:0
mauryas/cavalry_swordsman_b_r.xml:0
mauryas/cavalry_swordsman_e_r.xml:0
persians/cavalry_swordsman_a_r.xml:0
persians/cavalry_swordsman_b_r.xml:0
persians/cavalry_swordsman_e_r.xml:0
ptolemies/hero_cavalry_swordsman_ptolemy_IV_r.xml:1
romans/cavalry_swordsman_c_r.xml:0
romans/hero_cavalry_swordsman_marcellus_r.xml:1
romans/hero_cavalry_swordsman_maximus_r.xml:1
romans/hero_cavalry_swordsman_scipio_r.xml:1

shows macedonians/hero_cavalry_swordsman_alexander_r.xml and romans/cavalry_swordsman_c_r.xml have neither.

Currently attack_slaughter is present in:

  • b, a, e, c, h infantry
  • b, a, e, c, h cavalry javelinists
  • b, a, e other cavalry

but not in:

  • c, h other cavalry

I'm not really familiar with how art files are organized, however, this doesn't really look consistent. Wouldn't it be better to define slaughter animations in the actor files only, not elsewhere?

Stan added a comment.May 25 2020, 3:59 PM

I believe that is because initially one could set all the animations in one variant, and be done with it. With the apparition of carrying animations, and later with approaching animations, things became more complex because such animations have to be defined in different groups in order to work.

However I'm not confident we can only define such animation in the variants because there is a lot of synchronisation between units and their mounts which might be broken.

Checking cavalry swordsmen only:

[units]$ grep -c attack_slaughter */*cavalry_sw*_r.xml

and:

[units]$ grep -c base_swordsman_ready_shield */*cavalry_sw*_r.xml

shows macedonians/hero_cavalry_swordsman_alexander_r.xml and romans/cavalry_swordsman_c_r.xml have neither.

You have to do it in a semantic way!
macedonians/hero_cavalry_swordsman_alexander_r.xml will led you to biped/rider/cavalry/base_swordsman_relax.xml

Yes, but base_swordsman_relax is also present in:

athenians/cavalry_swordsman_a_r.xml
athenians/cavalry_swordsman_b_r.xml
athenians/cavalry_swordsman_e_r.xml
persians/cavalry_swordsman_b_r.xml

and those do define attack_slaughter in their actor files. My point is that, for consistency, either all cavalry should define it in their actor files, or all of them should have it in their variant files, but the current situation is confusing at the very least.

Also, healers?

Yes, but base_swordsman_relax is also present in:

athenians/cavalry_swordsman_a_r.xml
athenians/cavalry_swordsman_b_r.xml
athenians/cavalry_swordsman_e_r.xml
persians/cavalry_swordsman_b_r.xml

and those do define attack_slaughter in their actor files. My point is that, for consistency, either all cavalry should define it in their actor files, or all of them should have it in their variant files, but the current situation is confusing at the very least.

That's another story (and if that can be done consistently, it should be done so). I just informed you that grepping does not show you the information you need (and led to bad conclusion).

Also, healers?

I guess the question is not for me ;-)