It is currently 16 Apr 2024, 06:26
   
Text Size

New sound mechanics

Post MTG Forge Related Programming Questions Here

Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins

New sound mechanics

Postby digitalcollector2 » 13 Nov 2018, 01:35

First of all, I have no idea how to programm in Java or how Forge works so this will sound more like a request rather than a new implementation. If this post should be somewhere else please tell me.

So I was thinking that the game lacks seriously on sound effects. If I am not mistaken we've been hearing that "destroy.wav" since 2012.

I assume there is a mechanism that checks every card when it enters or gets removed from the game. Whould it be hard to make a modification and implement a sound event based on the type and subtype of the card ?

I know that the user community will be thrilled and produce their own content.

I propose the following sound categories and mechanics:

Creatures

human_cast.wav -
    Aetherborn, Ally, Artificer, Assassin, Barbarian, Citizen, Coward, Deserter, Flagbearer, Human, Mercenary, Moonfolk, Merfolk, Nomad, Pilot, Pirate, Metathran, Rebel, Rogue, Rigger, Satyr, Soltari, Survivor, Thalakos
small_human_cast.wav -
    Beeble, Faerie, Homunculus, Kithkin, Ouphe, Slith, Thrull
big_human_cast.wav - big_monster_cast.wav - moster_cast.wav -
small_monster_cast.wav -
    Badger, Ferret, Frog, Lizard, Mole, Mongoose, Pangolin, Rabbit, Salamander, Squirrel, Turtle

wizard_cast.wav -
    Djinn, Druid, Dryad, Efreet, Monger, Shaman, Spellshaper, Vedalken, Wizard
cleric_cast.wav -
    Advisor, Cleric, Elder, Monk, Mystic, Nymph, Praetor
big_bird_cast.wav -
    Blinkmoth, Griffin, Hippogriff, Pegasus, Phelddagrif, Phoenix, Lammasu, Sphinx

bird_cast.wav - soldier_cast.wav -
    Azra, Archer, Dwarf, Elf, Kor, Ninja, Samurai, Soldier, Surrakar, Warrior, Berserker, Scout
nightmare_cast.wav - ghost_cast.wav -
    Dauthi, Eye, Illusion, Reflection, Shade, Wraith, Specter
dragon_cast.wav -
    Dragon, Drake, Egg
wall_cast.wav -
    Wall
plant_cast.wav -
    Fungus, Plant, Saproling, Treefolk
eldrazi_cast.wav -
    Eldrazi, Processor

robot_cast.wav -
    Assembly-Worker, Construct, Dreadnought, Drone, Gnome, Golem, Myr, Pentavite, Prism, Orb, Scarecrow, Servo, Sable, Splinter, Tetravite, Triskelavite, Gargoyle, Thopter

horse_cast.wav -
    Antelope, Aurochs, Camel, Caribou, Centaur, Elk, Goat, Horse, Knight, Minotaur, Ox, Noggle, Sheep, Unicorn
dog_cast.wav -
    Fox, Hound, Hyena, Jackal, Werewolf, Wolf, Wolverine
cat_cast.wav -
    Cat, Manticore

elephant_cast.wav -
    Elephant
fish_cast.wav -
    Cephalid, Crab, Fish, Homarid, Jellyfish, Nautilus, Octopus, Oyster, Sponge, Squid, Starfish, Whale

sliver_cast.wav -
    Sliver

wurm_cast.wav -
    Worm, Wurm, Hellion

ooze_cast.wav -
    Ooze

angel_cast.wav -
    Angel
snake_cast.wav -
    Basilisk, Serpent, Snake, Viashino, Naga
demon_cast.wav -
    Demon, Devil, Horror, Imp, Minion
vampire_cast.wav -
    Vampire
goblin_cast.wav -
    Kobold, Goblin, Gremlin, Ogre, Orc, Orgg, Troll

elemental_cast.wav - gorgon_cast.wav -
    Gorgon, Hag, Harpy, Lamia, Siren

spirit_cast.wav -
    Spirit, Kirin, Zubera
monkey.wav -
    Ape, Monkey

god_cast.wav -
    Archon, Avatar, Bringer, God, Scion, Volver
insect_cast.wav -
    Carrier, Germ, Insect, Pest, Pincher, Sand, Scorpion, Spawn, Spider, Spike, Trilobite
zombie_cast.wav -
    Graveborn, Skeleton, Zombie
slime_wav -
    Leech, Licid, Slug
mouse_cast.wav -
    Rat, Wombat
changling.wav -
For each of the above there could be a _destroy.wav

Plainswalkers

There should be an entrance sound for every Plainswalker. (A quote from a flavor text maybe?)
    Ajani, Aminatou, Angrath, Arlinn, Ashiok, Bolas, Chandra, Dack, Daretti, Domri, Dovin, Elspeth, Estrid, Freyalise, Garruk, Gideon, Huatli, Jace, Jaya, Karn, Kaya, Kiora, Koth, Liliana, Nahiri, Narset, Nissa, Nixilis, Ral, Rowan, Saheeli, Samut, Sarkhan, Sorin, Tamiyo, Teferi, Tezzeret, Tibalt, Ugin, Venser, Vivien, Vraska, Will, Windgrace, Xenagos, Yanggu, and Yanling

And an entrance sound for every Planechase Plane Card. (An atmospheric music/sound)

Other Cards

There could be a default sound event attribute implementation on every card were it whould search in the sound directory its' own name with the postfix _cast.wav or _destroy.wav. That whould enable developers to group some card effects by a sound like an explosion, counter effect, fire or thunderbolt allowing the game for a more diverse sound ecosystem. Users whould benefit from this enabling them to make their own sounds and asign them to any card of their liking. The mechanic whould allow for alternative sounds with postfix _0x expanding the soundpool. Handy for players using decks with many same-type creatures like beasts or zombies. Also makes the game nicer when playing lands of the same type.

Last but not least

Why does forge use .wav files and not .mp3 ?

EDIT - 14/11

I've introdused Supertypes to avoid collisions when a card is Legendary but also has subtypes. When a card has a supertype and that supertype has a sound asigned to it then all consecuent subtype sound events are ignored.

Supertypes : Legendary Creature, Artifact Creature, Legendary Artifact Creature, Enchantment Creature

For example if an Artifact Creature - Eldrazi enters the game a mechanical sound should be heard insted of the eldrazi_cast.wav (Taking into account that the game makes use of the default sound event system and not a custom sound for the specific card asigned by the user)

Mutant is out of the order because there is no printed card with just that subtype.

To make the inequality readable I've divided it into groups with underscores.

OK the order of preference (I hope users agree with that) for the sounds is the following:

_SuperType_ > _State_Altering_Morphology_ > _Casts_ > _Animal_ > _Race_

_State_Altering_Morphology_
    Shapeshifter > God > Eldrazi > Demon > Skeleton > Spirit > Illusion > Ooze > Zombie > Nightmare > Werewolf > Elemental

_Casts_
    _Big_Humans_ > _Small_Humans_ > _Upper_Class_ > _Conjurers_ > _Professions_
_Professions_
    Artificer > Assassin > Barbarian > Flagbearer > Mercenary > Pilot > Pirate > Rogue > Rigger > Archer > Ninja > Samurai > Soldier > Surrakar > Warrior > Berserker > Scout
_Conjurers_
    Druid > Dryad > Efreet > Monger > Shaman > Spellshaper > Wizard
_Upper_Class_
    Archon > Avatar > Bringer > Scion > Volver > Advisor > Cleric > Elder > Monk > Mystic > Nymph > Praetor
_Big_Humans_ _Small_Humans_
    Beeble > Faerie > Homunculus > Kithkin > Ouphe > Slith > Thrull

_Animal_
    _Robots_ > _Scary_ > _BigMonsters_ > _Monsters_ > Sliver > _Mammals_ > _SmallMonsters_ > _Reptiles_ > _Insects_ > _Fish_ > _Other_

_Robots_
    Assembly-Worker > Construct > Dreadnought > Drone > Gnome > Golem > Myr > Pentavite > Prism > Orb > Scarecrow > Servo > Sable > Splinter > Tetravite > Triskelavite > Gargoyle > Thopter

_Scary_
    Nephilim > Nightstalker > Eye > Reflection > Shade > Wraith > Specter
_Mammals_
    Ape > Monkey > Fox > Hound > Hyena > Jackal > Werewolf > Wolf > Wolverine > Manticore > Antelope > Aurochs > Camel > Caribou > Elk > Goat > Horse > Ox > Sheep > Unicorn > Rat > Wombat
_Reptiles_
    Basilisk > Serpent > Snake
_Insects_
    Leech > Licid > Slug
_Fish_
    Crab > Fish > Jellyfish > Nautilus > Octopus > Oyster > Sponge > Squid > Starfish > Whale
_BigMonsters_ _Monsters_ _SmallMonsters_
    Badger > Ferret > Frog > Lizard > Mole > Mongoose > Pangolin > Rabbit > Salamander > Squirrel > Turtle
_Other_
    Worm > Wurm > Hellion > Incarnation > Lhurgoyf > Weird > Drake > Egg > Kirin > Zubera

_Race_
    Vampire > Angel > Djinn > Dryad > Efreet > Aetherborn > Elephant > Rhino > Cat > Dragon > Centaur > Minotaur > _Goblins_ > _Gorgons_ > _Devils_ > Homarid > Cephalid > Snake > Viashino > Naga > _Plants_ > Noggle > Vedalken > Barbarian > Citizen > Moonfolk > Merfolk > Nomad > Metathran > Rebel > Satyr > Soltari > Thalakos > Azra > Ally > Elf > Dwarf > Kor > Human

_Goblins_
    Kobold > Goblin > Gremlin > Ogre > Orc > Orgg > Troll
_Gorgons_
    Gorgon > Hag > Harpy > Lamia > Siren
_Devils_
    Demon > Devil > Horror > Imp > Minion
_Plants_
    Fungus > Plant > Saproling > Treefolk

The mechanic uses a point system to determine the output sound. The subtype with the smallest points gets to be heard from the speakers.

Example 1

Beetleform Mage - Creature - Human Insect Wizard

Probably the player uses a deck with many insects so to make things interesting a wizard_cast.wav should be heard. After all what will make this card stand out in the battlefield is the magical abilities of the wizard not his six legs. If that doesn't make much sense then a good point to favor the Wizard subtype whould be the Human-Insect conflict since both seem to be of equal significance, why favor Insect over the Human nature or the opposite ?

So why not make the game choose the last subtype printed ?

Example 2

Emberstrike Duo - Creature - Elemental Warrior Shaman

What is the dominant element of this creature ? A Warrior or Shaman entering the game usualy is not a big deal, even an elemental entering the battlefield is not a big deal but many players just love Elementals. Many decks are full of Elementals and their unlimited otherwordly forms excites all. So the nature of the creature is not the shaman or warrior attributies but the Elemental spark of it.

Using the formula
_SuperType_ > _State_Altering_Morphology_ > _Casts_ > _Animal_ > _Race_

For the Example 1 we get (pseudo-code)

Human = len(_State_Altering_Morphology_) + len(_Casts_) + len(_Animal_) + index_of_member( _Race_ , "Human")
Insect = len(_State_Altering_Morphology_) + len(_Casts_) + index_of_member(_Animal_, "Insect")
Wizard = len(_State_Altering_Morphology_) + index_of_member(_Casts_, "Wizard")

The downside of this search is that for every subtype there is a lengthy linear traversal of all the lists until the member is found ... and there are many Humans in this game :P .
Last edited by digitalcollector2 on 19 Nov 2018, 19:42, edited 3 times in total.
digitalcollector2
 
Posts: 15
Joined: 10 Jul 2017, 13:14
Has thanked: 1 time
Been thanked: 0 time

Re: New sound mechanics

Postby Marek14 » 13 Nov 2018, 08:11

How should creatures with types from multiple categories be handled?
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: New sound mechanics

Postby digitalcollector2 » 13 Nov 2018, 12:44

Marek14 wrote:How should creatures with types from multiple categories be handled?
Good question.

I suggest the first keyword determine the type of sound. Of course a list of conditions will have to be implemented to handle exceptions.

Usualy cards are printed with a logical order of subtypes.

Example one:

Creature - Centaur Warrior

It is logical to hear a galoping sound when a Centaur enters the battlefield ruther than a war cheer.

Example two:

During the game a creature can be assigned an additional subtype:

a Creature - Centaur Warrior can become Creature - Centaur Warrior Zombie

Now although a galoping sound seems to be still a valid choice, players whould probably prefere a zombie's groul to match the existing atmosphere of the game state (probably an enchantment zombifing creatures). So here there should be an implemented condition to handle circumstances as this favoring the Zombie subtype over all others (in this case the Centaur).

An other solution whould be a long priority comparison list containing all subtypes from most important to least important type so the mechanism whould pick the the fist common type between the list and the card. Sounds nice but i'm sure it whould be a pain in the a** to compile (not computationaly) that list.

Example of the priority list:

Big Bird (actually all the subtypes I grouped under that category with their own descending order) > Big Monster > Zombie > Monster ........ > wizard >warrior > human etc.
digitalcollector2
 
Posts: 15
Joined: 10 Jul 2017, 13:14
Has thanked: 1 time
Been thanked: 0 time

Re: New sound mechanics

Postby Marek14 » 13 Nov 2018, 14:48

The thing is that determining by the first keyword would mean that sounds associated with classes would be almost never heard since very few creatures has just class. Race is always first.
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: New sound mechanics

Postby digitalcollector2 » 13 Nov 2018, 18:38

Technicaly speaking there is no such thing as "class" or "race" in MTG. There are types and subtypes of sells.
The card types are
    Land, Basic Land, Artifact Land, Snow Land, Artifact Creature, Creature, Sorcery, Artifact, Instant, Enchantment, Plainswalker

Enything else on the right of the dash like forest, tribal, aura, world, zombie etc. is considered a subtype of said spell.

Conflicts will occur only between subtypes.
In the rare event where a Creature is also a Land that spell always has a subtype.
digitalcollector2
 
Posts: 15
Joined: 10 Jul 2017, 13:14
Has thanked: 1 time
Been thanked: 0 time

Re: New sound mechanics

Postby Marek14 » 13 Nov 2018, 18:51

Well, not really -- that post has quite a few mistakes. For example, there's no type called "Basic Land" or "Artifact Creature", and Tribal and World are not subtypes. Also, if something is both creature and land, then it can't be a spell.

And Magic absolutely has races and classes -- the division is informal (in the sense that both are creature types), but the grand update that started in Mirrodin aimed to give each sentient being (or at least most of them) both race and class.

And when a creature has race and class, the race is always printed first. For example, you can have a Human Artificer, but you will never find a creature printed as "Artificer Human".

Creatures that have only a class type with no race are usually tokens, and some rare cards (artifact creatures and/or Phyrexians). But if you want to make sounds that are actually heard, then just going by first listed type on the card is not a good idea because then it will be hard to actually hear the class sounds.
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: New sound mechanics

Postby digitalcollector2 » 13 Nov 2018, 19:29

You are absolutly right on your first paragraph.

If something is both creature and a land then it has to be a token (as for now, you never know what they will pull out for the next expansion set !). But this token will probably end up destroied eventualy so it has to be able to choose the right _destroy.wav based on its subtype.

Well if you put it that way then yes there are classes and races, I never heard about these before and never occured to me of an existing phylosophy of how they deside the printing order.

You are right, most of the races will never be heard that's why I grouped them with other classes. An other reason of why I took them all in to acount was for completeness and for occasions I couldn't imagine...

So, which are the races ? Is Druid a race or a class ? I've never seen a card stating Creature - Human Druid ... Is zombie a class or race ?

Anyway I think I did well by grouping all classes and races in 42 sound groups (I guess there is still room for improvement). There should only be the issue of how to prioritize these 42 sound classes which should be devised purely on aesthetics like the zombie example. (I will look into it, see if find a way)

I think the situation whould be managable in python using an ordered dictionary containing lists (small_monster, big_monster etc...) paired with the corresponding .wav file...
digitalcollector2
 
Posts: 15
Joined: 10 Jul 2017, 13:14
Has thanked: 1 time
Been thanked: 0 time

Re: New sound mechanics

Postby Marek14 » 13 Nov 2018, 19:37

digitalcollector2 wrote:You are absolutly right on your first paragraph.

If something is both creature and a land then it has to be a token (as for now, you never know what they will pull out for the next expansion set !). But this token will probably end up destroied eventualy so it has to be able to choose the right _destroy.wav based on its subtype.
Well, no. There's Dryad Arbor and many lands that can be animated.

Well if you put it that way then yes there are classes and races, I never heard about these before and never occured to me of an existing phylosophy of how they deside the printing order.

You are right, most of the races will never be heard that's why I grouped them with other classes. An other reason of why I took them all in to acount was for completeness and for occasions I couldn't imagine...

So, which are the races ? Is Druid a race or a class ? I've never seen a card stating Creature - Human Druid ... Is zombie a class or race ?
Let's see... Atzocan Seer?

Druid is a class. Zombie is mostly used as race (you can have Zombie Wizards, for example), but it's also combined with other races a lot (Zombie Elf, Zombie Beast, Zombie Centaur...)

Anyway I think I did well by grouping all classes and races in 42 sound groups (I guess there is still room for improvement). There should only be the issue of how to prioritize these 42 sound classes which should be devised purely on aesthetics like the zombie example. (I will look into it, see if find a way)

I think the situation whould be managable in python using an ordered dictionary containing lists (small_monster, big_monster etc...) paired with the corresponding .wav file...
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: New sound mechanics

Postby digitalcollector2 » 13 Nov 2018, 19:46

I really have to catch up with the new sets :oops: ... My knowledge is up to Theros :( ...

What about the old cards ? Did Wizards Of The Coast make a rule for them or publish an update list ? Are these cards implemented in Forge as they are printed or as WOTC dictates ?

I've got to study their official rulebook to find any rulling listing the classes and races seperatley.
digitalcollector2
 
Posts: 15
Joined: 10 Jul 2017, 13:14
Has thanked: 1 time
Been thanked: 0 time

Re: New sound mechanics

Postby Marek14 » 13 Nov 2018, 20:05

Well, races and classes are not listed separately because it's, as I said, not that important (they both work the same). You should probably start by reading this:

https://magic.wizards.com/en/articles/a ... 2008-01-21

The official Oracle database on gatherer.wizards.com shows the current text of each card, and Forge uses that.
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: New sound mechanics

Postby digitalcollector2 » 14 Nov 2018, 21:18

I've tried to put an order to that mess of classes and races to make a proper descending list or a kind of syntax like <State><Race><Class> but even Magic is incosistent so there can't be a logic. The only thing I can do is to make changes to my original list and put those groups in a descending list and let the program choose which subtype of a certain card should be responsible for the sound based on the list.
digitalcollector2
 
Posts: 15
Joined: 10 Jul 2017, 13:14
Has thanked: 1 time
Been thanked: 0 time


Return to Developer's Corner

Who is online

Users browsing this forum: No registered users and 39 guests


Who is online

In total there are 39 users online :: 0 registered, 0 hidden and 39 guests (based on users active over the past 10 minutes)
Most users ever online was 4143 on 23 Jan 2024, 08:21

Users browsing this forum: No registered users and 39 guests

Login Form