New sound mechanics
Posted: 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 -
small_monster_cast.wav -
wizard_cast.wav -
bird_cast.wav -
robot_cast.wav -
horse_cast.wav -
elephant_cast.wav -
sliver_cast.wav -
wurm_cast.wav -
ooze_cast.wav -
angel_cast.wav -
elemental_cast.wav -
spirit_cast.wav -
god_cast.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?)
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_
_Casts_
_Animal_
_Robots_
_Scary_
_Race_
_Goblins_
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 .
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
- Beeble, Faerie, Homunculus, Kithkin, Ouphe, Slith, Thrull
- Cyclops, Giant, Juggernaut, Mutant, Yeti
- Dinosaur, Hydra, Kraken, Leviathan
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
- Advisor, Cleric, Elder, Monk, Mystic, Nymph, Praetor
- Blinkmoth, Griffin, Hippogriff, Pegasus, Phelddagrif, Phoenix, Lammasu, Sphinx
bird_cast.wav -
- Cockatrice, Bird
- Azra, Archer, Dwarf, Elf, Kor, Ninja, Samurai, Soldier, Surrakar, Warrior, Berserker, Scout
- Nephilim, Nightmare, Nightstalker
- Dauthi, Eye, Illusion, Reflection, Shade, Wraith, Specter
- Dragon, Drake, Egg
- Wall
- Fungus, Plant, Saproling, Treefolk
- 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
- Fox, Hound, Hyena, Jackal, Werewolf, Wolf, Wolverine
- Cat, Manticore
elephant_cast.wav -
- Elephant
- 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
- Basilisk, Serpent, Snake, Viashino, Naga
- Demon, Devil, Horror, Imp, Minion
- Vampire
- Kobold, Goblin, Gremlin, Ogre, Orc, Orgg, Troll
elemental_cast.wav -
- Elemental, Incarnation, Lhurgoyf, Weird
- Gorgon, Hag, Harpy, Lamia, Siren
spirit_cast.wav -
- Spirit, Kirin, Zubera
- Ape, Monkey
god_cast.wav -
- Archon, Avatar, Bringer, God, Scion, Volver
- Carrier, Germ, Insect, Pest, Pincher, Sand, Scorpion, Spawn, Spider, Spike, Trilobite
- Graveborn, Skeleton, Zombie
- Leech, Licid, Slug
- Rat, Wombat
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)
- Academy at Tolaria West, Tazeem,The Aether Flues, Agyrem, Bant, Cliffside Market, The Dark Barony, Eloren Wilds. The Eon Fog, Feeding Grounds, Fields of Summer, Celestine Reef, Horizon Boughs, Mirrored Depths, Tember City, Stairs to Infinity, The Fourth Sphere, Glimmervoid Basin, Goldmeadow,The Great Forest, Grixis, The Hippodrome, Immersturm, Isle of Vesuva, Izzet Steam Maze, Krosa, Lethe Lake, Llanowar, The Maelstrom, Minamo, Murasa, Naar Isle, Naya, Otaria, Panopticon, Pools of Becoming, Raven's Run, Sanctum of Serra, Sea of Sand, Shiv, Skybreen, Sokenzan, Stronghold Furnace, Turri Island, Undercity Reaches, Velis Vel,Chaotic Æther, Interplanar Tunnel, Morphic Tide, Mutual Epiphany, Planewide Disaster, Reality Shaping, Spatial Merging, Time Distortion, Akoum, Aretopolis, Astral Arena, Bloodhill Bastion, Edge of Malacol, Furnace Layer, Gavony, Glen Elendra, Grand Ossuary, Grove of the Dreampods, Hedron Fields of Agadeem, Jund, Kessig, Kharasha Foothills, Kilnspire District, Lair of the Ashen Idol, Mount Keralia, Nephalia, Norn’s Dominion, Onakke Catacomb, Orochi Colony, Orzhova, Prahv, Quicksilver Sea, Selesnya Loft Gardens, Stensia, Takenuma, Talon Gates, Trail of the Mage-Rings, Truga Jungle, Windriddle Palaces, The Zephyr Maze
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_
- Artificer > Assassin > Barbarian > Flagbearer > Mercenary > Pilot > Pirate > Rogue > Rigger > Archer > Ninja > Samurai > Soldier > Surrakar > Warrior > Berserker > Scout
- Druid > Dryad > Efreet > Monger > Shaman > Spellshaper > Wizard
- Archon > Avatar > Bringer > Scion > Volver > Advisor > Cleric > Elder > Monk > Mystic > Nymph > Praetor
- Cyclops > Giant > Juggernaut > Mutant > Yeti
- 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
- Ape > Monkey > Fox > Hound > Hyena > Jackal > Werewolf > Wolf > Wolverine > Manticore > Antelope > Aurochs > Camel > Caribou > Elk > Goat > Horse > Ox > Sheep > Unicorn > Rat > Wombat
- Basilisk > Serpent > Snake
- Leech > Licid > Slug
- Crab > Fish > Jellyfish > Nautilus > Octopus > Oyster > Sponge > Squid > Starfish > Whale
- Dinosaur > Hydra > Kraken > Leviathan
- Badger > Ferret > Frog > Lizard > Mole > Mongoose > Pangolin > Rabbit > Salamander > Squirrel > Turtle
- 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
- Gorgon > Hag > Harpy > Lamia > Siren
- Demon > Devil > Horror > Imp > Minion
- 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 .