Statistics Update (#12)

* Adding GenevensiS's stats page overhaul
* Update card_fields: automated stats are now disabled
* Update set_fields: added customization fields for stats
* Stats have new icons
* Updated position hint and card shape for several frames
* Added preliminary localization updates
* Added detect_custom_subtypes_statistic

---------

Co-authored-by: cajun <kajunkittyavenger@gmail.com>
This commit is contained in:
GenevensiS
2023-11-10 14:21:14 +01:00
committed by GitHub
parent 217630b275
commit 8c617b5936
65 changed files with 3928 additions and 853 deletions

View File

@@ -1,26 +1,645 @@
# Language specific strings
############# Localization Hub
############# Strings and Word Lists specific to supported languages
languages := [
English: [
code : "en",
spellcheck_code : "en_US",
fallback : "English",
pt_separator : "/",
type_separator : " — ",
subtype_separator : " ",
is_battle : match@(match: "(?i)Battle")
is_creature : match@(match: "(?i)Creature")
is_tribal : match@(match: "(?i)Tribal")
is_dungeon : match@(match: "(?i)Dungeon")
is_tribal : match@(match: "(?i)Tribal|Kindred")
is_kindred : match@(match: "(?i)Tribal|Kindred")
is_artifact : match@(match: "(?i)Artifact")
is_land : match@(match: "(?i)Land")
is_enchantment : match@(match: "(?i)Enchantment")
is_spell : match@(match: "(?i)Instant|Sorcery")
is_planeswalker : match@(match: "(?i)Planeswalker|Emblem")
is_instant : match@(match: "(?i)Instant")
is_sorcery : match@(match: "(?i)Sorcery")
is_planeswalker : match@(match: "(?i)Planeswalker")
is_plane : match@(match: "(?i)Plane(?!swalker)")
word_list : "word_list"
is_nonstandard : match@(match: "(?i)(Token|Emblem|Dungeon|Hero|Conspiracy|Vanguard|Scheme|Phenomenon|Plane\\b)")
is_token : match@(match: "(?i)Token")
is_basic : match@(match: "(?i)Basic")
is_conspiracy : match@(match: "(?i)Conspiracy")
is_emblem : match@(match: "(?i)Emblem")
is_hero : match@(match: "(?i)Hero")
is_phenomenon : match@(match: "(?i)Phenomenon")
is_scheme : match@(match: "(?i)Scheme")
is_vanguard : match@(match: "(?i)Vanguard")
is_legendary : match@(match: "(?i)Legendary")
is_snow : match@(match: "(?i)Snow")
is_vehicle : match@(match: "(?i)Vehicle")
is_elite : match@(match: "(?i)Elite")
is_host : match@(match: "(?i)Host")
is_ongoing : match@(match: "(?i)Ongoing")
is_world : match@(match: "(?i)World")
is_plains : match@(match: "(?i)Plains")
is_island : match@(match: "(?i)Island")
is_swamp : match@(match: "(?i)Swamp")
is_mountain : match@(match: "(?i)Mountain")
is_forest : match@(match: "(?i)Forest")
is_wastes : match@(match: "(?i)Wastes")
get_supertypes : filter_text@(match: "(?i)(Legendary|Basic|Snow|Token|World|Ongoing|Elite|Host)\\b ?")
remove_supertypes : replace_text@(match: "(?i)(Legendary|Basic|Snow|Token|World|Ongoing|Elite|Host)\\b ?", replace:"")
base_supertypes : "Legendary|Basic|Snow|Token|World|Ongoing|Elite|Host"
mana_symbol_production : filter_text@(match:"<sym[^>]*>[^<]+<\\/sym[^>]*>", in_context:"\\b[Aa]dd [^(\n|^).]*<match>")
gold_mana_production : filter_text@(match:"(any( one)?|different|combination of) color", in_context:"\\b[Aa]dd [^(\n|^).]*<match>")
chosen_mana_production : filter_text@(match:"that color|chosen color", in_context:"\\b[Aa]dd [^(\n|^).]*<match>")
word_list : "word_list",
word_list_artifact:
"Attraction,"
+ "Blood,"
+ "Clue,"
+ "Contraption,"
+ "Equipment,"
+ "Food,"
+ "Fortification,"
+ "Gold,"
+ "Incubator,"
+ "Junk,"
+ "Map,"
+ "Powerstone,"
+ "Treasure,"
+ "Vehicle"
word_list_battle: "Siege"
word_list_dungeon: "Undercity"
word_list_land:
"Cave,"
+ "Desert,"
+ "Gate,"
+ "Lair,"
+ "Locus,"
+ "Mine,"
+ "Power-Plant,"
+ "Sphere,"
+ "Tower,"
+ "Urza's"
word_list_enchantment:
"Aura,"
+ "Background,"
+ "Cartouche,"
+ "Class,"
+ "Curse,"
+ "Role,"
+ "Rune,"
+ "Saga,"
+ "Shard,"
+ "Shrine"
word_list_spell:
"Adventure,"
+ "Arcane,"
+ "Lesson,"
+ "Trap"
word_list_planeswalker:
"Ajani,"
+ "Aminatou,"
+ "Angrath,"
+ "Arlinn,"
+ "Ashiok,"
+ "Bahamut,"
+ "Basri,"
+ "Bolas,"
+ "Calix,"
+ "Chandra,"
+ "Comet,"
+ "Dack,"
+ "Dakkon,"
+ "Daretti,"
+ "Davriel,"
+ "Dihada,"
+ "Domri,"
+ "Dovin,"
+ "Ellywick,"
+ "Elminister,"
+ "Elspeth,"
+ "Estrid,"
+ "Freyalise,"
+ "Garruk,"
+ "Gideon,"
+ "Grist,"
+ "Guff,"
+ "Huatli,"
+ "Jace,"
+ "Jared,"
+ "Jaya,"
+ "Jeska,"
+ "Kaito,"
+ "Karn,"
+ "Kasmina,"
+ "Kaya,"
+ "Kiora,"
+ "Koth,"
+ "Liliana,"
+ "Lolth,"
+ "Lukka,"
+ "Minsc,"
+ "Mordenkainen,"
+ "Nahiri,"
+ "Narset,"
+ "Niko,"
+ "Nissa,"
+ "Nixilis,"
+ "Oko,"
+ "Quintorius,"
+ "Ral,"
+ "Rowan,"
+ "Saheeli,"
+ "Samut,"
+ "Sarkhan,"
+ "Serra,"
+ "Sivitri,"
+ "Sorin,"
+ "Szat,"
+ "Tamiyo,"
+ "Tasha,"
+ "Teferi,"
+ "Teyo,"
+ "Tezzeret,"
+ "Tibalt,"
+ "Tyvar,"
+ "Ugin,"
+ "Urza,"
+ "Venser,"
+ "Vivien,"
+ "Vraska,"
+ "Vronos,"
+ "Will,"
+ "Windgrace,"
+ "Wrenn,"
+ "Xenagos,"
+ "Yanggu,"
+ "Yanling,"
+ "Zariel"
############# Very Long Word Lists
############# Split into array of strings for submenus
############# Used directly by the localized word_lists
############# Combined for the upgraded stats page
word_lists_basic: ["Plains", "Island", "Swamp", "Mountain", "Forest"]
word_lists_race: [
"Aetherborn,"
+ "Alien,"
+ "Angel,"
+ "Antelope,"
+ "Ape,"
+ "Archon,"
+ "Assembly-Worker,"
+ "Astartes,"
+ "Atog,"
+ "Aurochs,"
+ "Avatar,"
+ "Azra",
"Badger,"
+ "Balloon,"
+ "Basilisk,"
+ "Bat,"
+ "Bear,"
+ "Beast,"
+ "Beeble,"
+ "Beholder,"
+ "Bird,"
+ "Blinkmoth,"
+ "Boar,"
+ "Bringer,"
+ "Brushwagg",
"C'tan,"
+ "Camarid,"
+ "Camel,"
+ "Capybara,"
+ "Caribou,"
+ "Carrier,"
+ "Cat,"
+ "Centaur,"
+ "Cephalid,"
+ "Chimera,"
+ "Cockatrice,"
+ "Construct,"
+ "Crab,"
+ "Crocodile,"
+ "Custodes,"
+ "Cyberman,"
+ "Cyclops",
"Dalek,"
+ "Dauthi,"
+ "Demigod,"
+ "Demon,"
+ "Devil,"
+ "Dinosaur,"
+ "Djinn,"
+ "Dog,"
+ "Dragon,"
+ "Drake,"
+ "Dreadnought,"
+ "Drone,"
+ "Dryad,"
+ "Dwarf",
"Efreet,"
+ "Egg,"
+ "Eldrazi,"
+ "Elemental,"
+ "Elephant,"
+ "Elf,"
+ "Elk,"
+ "Eye",
"Faerie,"
+ "Ferret,"
+ "Fish,"
+ "Fox,"
+ "Fractal,"
+ "Frog,"
+ "Fungus",
"Gargoyle,"
+ "Germ,"
+ "Giant,"
+ "Gith,"
+ "Gnoll,"
+ "Gnome,"
+ "Goat,"
+ "Goblin,"
+ "God,"
+ "Golem,"
+ "Gorgon,"
+ "Graveborn,"
+ "Gremlin,"
+ "Griffin",
"Hag,"
+ "Halfling,"
+ "Hamster,"
+ "Harpy,"
+ "Hellion,"
+ "Hippo,"
+ "Hippogriff,"
+ "Homarid,"
+ "Homunculus,"
+ "Horror,"
+ "Horse,"
+ "Hound,"
+ "Human,"
+ "Hydra,"
+ "Hyena",
"Illusion,"
+ "Imp,"
+ "Incarnation,"
+ "Inkling,"
+ "Insect",
"Jackal,"
+ "Jellyfish,"
+ "Juggernaut",
"Kavu,"
+ "Kirin,"
+ "Kithkin,"
+ "Kobold,"
+ "Kor,"
+ "Kraken",
"Lamia,"
+ "Lammasu,"
+ "Leech,"
+ "Leviathan,"
+ "Lhurgoyf,"
+ "Licid,"
+ "Lizard,"
+ "Llama",
"Manticore,"
+ "Masticore,"
+ "Merfolk,"
+ "Metathran,"
+ "Minotaur,"
+ "Mite,"
+ "Mole,"
+ "Mongoose,"
+ "Monkey,"
+ "Moonfolk,"
+ "Mouse,"
+ "Mutant,"
+ "Myr",
"Nautilus,"
+ "Necron,"
+ "Nephilim,"
+ "Nightmare,"
+ "Nightstalker,"
+ "Noggle,"
+ "Nymph",
"Octopus,"
+ "Ogre,"
+ "Ooze,"
+ "Orb,"
+ "Orc,"
+ "Orgg,"
+ "Otter,"
+ "Ouphe,"
+ "Ox,"
+ "Oyster",
"Pangolin,"
+ "Pegasus,"
+ "Pentavite,"
+ "Pest,"
+ "Phelddagrif,"
+ "Phoenix,"
+ "Phyrexian,"
+ "Pincher,"
+ "Plant,"
+ "Prism",
"Rabbit,"
+ "Raccoon,"
+ "Rat,"
+ "Reflection,"
+ "Rhino,"
+ "Robot",
"Sable,"
+ "Salamander,"
+ "Sand,"
+ "Saproling,"
+ "Satyr,"
+ "Scarecrow,"
+ "Scorpion,"
+ "Sculpture,"
+ "Serpent,"
+ "Servo,"
+ "Shade,"
+ "Shapeshifter,"
+ "Shark,"
+ "Sheep,"
+ "Siren,"
+ "Skeleton,"
+ "Slith,"
+ "Sliver,"
+ "Slug",
"Snail,"
+ "Snake,"
+ "Soltari,"
+ "Spawn,"
+ "Specter,"
+ "Sphinx,"
+ "Spider,"
+ "Spike,"
+ "Spirit,"
+ "Splinter,"
+ "Sponge,"
+ "Squid,"
+ "Squirrel,"
+ "Starfish,"
+ "Surrakar",
"Tentacle,"
+ "Tetravite,"
+ "Thalakos,"
+ "Thopter,"
+ "Thrull,"
+ "Tiefling,"
+ "Time Lord,"
+ "Treefolk,"
+ "Trilobite,"
+ "Triskelavite,"
+ "Troll,"
+ "Turtle,"
+ "Tyranid",
"Unicorn",
"Vampire,"
+ "Vedalken,"
+ "Viashino,"
+ "Volver",
"Wall,"
+ "Walrus,"
+ "Weird,"
+ "Werewolf,"
+ "Whale,"
+ "Wolf,"
+ "Wolverine,"
+ "Wombat,"
+ "Worm,"
+ "Wraith,"
+ "Wurm",
"Yeti",
"Zombie,"
+ "Zubera"
]
word_lists_class: [
"Advisor,"
+ "Ally,"
+ "Archer,"
+ "Archon,"
+ "Army,"
+ "Artificer,"
+ "Assassin,"
+ "Barbarian,"
+ "Bard,"
+ "Beast,"
+ "Berserker,"
+ "Carrier,"
+ "Child,"
+ "Citizen,"
+ "Cleric,"
+ "Clown,"
+ "Coward",
"Deserter,"
+ "Detective,"
+ "Doctor,"
+ "Dreadnought,"
+ "Drone,"
+ "Druid,"
+ "Egg,"
+ "Elder,"
+ "Employee,"
+ "Flagbearer,"
+ "Gamer,"
+ "Guest,"
+ "Horror,"
+ "Incarnation,"
+ "Inquisitor,"
+ "Juggernaut,"
+ "Knight",
"Leviathan,"
+ "Mercenary,"
+ "Minion,"
+ "Monger,"
+ "Monk,"
+ "Mutant,"
+ "Mystic,"
+ "Ninja,"
+ "Noble,"
+ "Nomad,"
+ "Peasant,"
+ "Performer,"
+ "Pilot,"
+ "Pirate,"
+ "Praetor,"
+ "Primarch,"
+ "Processor",
"Ranger,"
+ "Rebel,"
+ "Reflection,"
+ "Rigger,"
+ "Rogue,"
+ "Samurai,"
+ "Scientist,"
+ "Scion,"
+ "Scout,"
+ "Serf,"
+ "Shaman,"
+ "Skeleton,"
+ "Soldier,"
+ "Spawn,"
+ "Spellshaper,"
+ "Spirit,"
+ "Survivor",
"Thopter,"
+ "Vampire,"
+ "Warlock,"
+ "Warrior,"
+ "Werewolf,"
+ "Wizard,"
+ "Zombie"
]
word_lists_plane: [
"Alara,"
+ "Amonkhet,"
+ "Arcavios,"
+ "Bloomburrow,"
+ "Capenna,"
+ "Dominaria,"
+ "Duskmourn,"
+ "Eldraine,"
+ "Ikoria,"
+ "Innistrad,"
+ "Ixalan,"
+ "Kaladesh,"
+ "Kaldheim,"
+ "Kamigawa,"
+ "Lorwyn,"
+ "Mercadia,"
+ "Mirrodin,"
+ "New Phyrexia,"
+ "Rath,"
+ "Ravnica,"
+ "Shadowmoor,"
+ "Tarkir,"
+ "Theros,"
+ "Thunder Junction,"
+ "Ulgrotha,"
+ "Zendikar",
"The Abyss,"
+ "Antausia,"
+ "Arkhos,"
+ "Azgol,"
+ "Belenon,"
+ "Bolas's Meditation Realm,"
+ "Cridhe,"
+ "Echoir,"
+ "Equilor,"
+ "Ergamon,"
+ "Fabacin,"
+ "Fiora,"
+ "Gargantikar,"
+ "Gobakhan,"
+ "Iquatana,"
+ "Ir,"
+ "Karsus,"
+ "Kephalai,"
+ "Kinshala,"
+ "Kolbahan,"
+ "Kylem,"
+ "Kyneth,"
+ "Luvion,"
+ "Moag,"
+ "Mongseng,"
+ "Muraganda,"
+ "Phyrexia,"
+ "Pyrulea,"
+ "Rabiah,"
+ "Regatha,"
+ "Segovia,"
+ "Serra's Realm,"
+ "Shandalar,"
+ "Shenmeng,"
+ "Valla,"
+ "Vryn,"
+ "Wildfire,"
+ "Xerex,"
+ "Zhalfir",
"Alkabah,"
+ "Aranzhur,"
+ "Diraden,"
+ "Kodisha,"
+ "Metal Island,"
+ "Skalla,"
+ "Tavelia,"
+ "Tolvada",
"Azoria,"
+ "Cabralin,"
+ "Celesta,"
+ "Gastal,"
+ "Ilcae,"
+ "Mirrankkar,"
+ "Nether Void,"
+ "Obsidias,"
+ "Torwynn,"
+ "Vatraquaz",
"Alfava Metraxis,"
+ "Androzani Minor,"
+ "Apalapucia,"
+ "The Dalek Asylum,"
+ "Darillium,"
+ "Earth,"
+ "Gallifrey,"
+ "Horsehead Nebula,"
+ "Kandoka,"
+ "The Library,"
+ "Mars,"
+ "Moon,"
+ "Necros,"
+ "New Earth,"
+ "Outside Mutter's Spiral,"
+ "Skaro,"
+ "Spacecraft,"
+ "Time,"
+ "Trenzalore,"
+ "Unknown Planet"
]
],
"English (British)": [
code : "en",
spellcheck_code : "en_GB",
fallback : "English",
pt_separator : "/",
type_separator : " — ",
subtype_separator : " ",
@@ -30,13 +649,14 @@ languages := [
is_land : match@(match: "(?i)Land")
is_enchantment : match@(match: "(?i)Enchantment")
is_spell : match@(match: "(?i)Instant|Sorcery")
is_planeswalker : match@(match: "(?i)Planeswalker|Emblem")
is_planeswalkish : match@(match: "(?i)Planeswalker|Emblem")
is_plane : match@(match: "(?i)Plane(?!swalker)")
word_list : "word_list"
],
"English (Canadian)": [
code : "en",
spellcheck_code : "en_CA",
fallback : "English",
pt_separator : "/",
type_separator : " — ",
subtype_separator : " ",
@@ -46,13 +666,14 @@ languages := [
is_land : match@(match: "(?i)Land")
is_enchantment : match@(match: "(?i)Enchantment")
is_spell : match@(match: "(?i)Instant|Sorcery")
is_planeswalker : match@(match: "(?i)Planeswalker|Emblem")
is_planeswalkish : match@(match: "(?i)Planeswalker|Emblem")
is_plane : match@(match: "(?i)Plane(?!swalker)")
word_list : "word_list"
],
Russian: [
code : "ru",
spellcheck_code : "ru_RU",
fallback : "English",
pt_separator : "/",
type_separator : " — ",
subtype_separator : " ",
@@ -62,13 +683,14 @@ languages := [
is_land : match@(match: "(?i)Земля")
is_enchantment : match@(match: "(?i)Чары")
is_spell : match@(match: "(?i)Мгновенное заклинание|Волшебство")
is_planeswalker : match@(match: "(?i)Planeswalker|Emblem")
is_planeswalkish : match@(match: "(?i)Planeswalker|Emblem")
is_plane : match@(match: "(?i)Plane(?!swalker)")
word_list : "word_list_ru"
],
Italiano: [
code : "it",
spellcheck_code : "it_IT",
fallback : "English",
pt_separator : "/",
type_separator : " — ",
subtype_separator : " ",
@@ -78,13 +700,14 @@ languages := [
is_land : match@(match: "(?i)Terra")
is_enchantment : match@(match: "(?i)Incantesimo")
is_spell : match@(match: "(?i)Istantaneo|Stregoneria")
is_planeswalker : match@(match: "(?i)Planeswalker|Emblem")
is_planeswalkish : match@(match: "(?i)Planeswalker|Emblem")
is_plane : match@(match: "(?i)Plane(?!swalker)")
word_list : "word_list_it"
],
"Português do Brasil" : [
code : "pt-br",
spellcheck_code : "pt_BR",
fallback : "English",
pt_separator : "/",
type_separator : " — ",
subtype_separator : " ",
@@ -94,13 +717,14 @@ languages := [
is_land : match@(match: "(?i)Terreno")
is_enchantment : match@(match: "(?i)Encantamento")
is_spell : match@(match: "(?i)Mágica Instantânea|Feitiço")
is_planeswalker : match@(match: "(?i)Planeswalker|Emblem")
is_planeswalkish : match@(match: "(?i)Planeswalker|Emblem")
is_plane : match@(match: "(?i)Plane(?!swalker)")
word_list : "word_list_pt"
],
Français: [
code : "fr",
spellcheck_code : "fr_FR",
fallback : "English",
pt_separator : "/",
type_separator : " : "
subtype_separator : "<atom-sep> et </atom-sep>",
@@ -110,19 +734,50 @@ languages := [
is_land : match@(match: "(?i)Terrain")
is_enchantment : match@(match: "(?i)Enchantement")
is_spell : match@(match: "(?i)Éphémère|Rituel")
is_planeswalker : match@(match: "(?i)Planeswalker")
is_planeswalkish : match@(match: "(?i)Planeswalker")
is_plane : match@(match: "(?i)Plane(?!swalker)")
word_list : "word_list_fr"
word_list : "word_list",
word_lists_basic: ["Plaine", "Île", "Marais", "Montagne", "Forêt"]
word_list_artifact:
"Attraction,"
+ "Sang,"
+ "Indice,"
+ "Appareil,"
+ "Équipement,"
+ "Nourriture,"
+ "Fortification,"
+ "Or,"
+ "Incubateur,"
+ "Lithoforce,"
+ "Trésor,"
+ "Véhicule"
word_list_land:
"Grotte,"
+ "Désert,"
+ "Porte,"
+ "Repaire,"
+ "Site,"
+ "Mine,"
+ "Centrale énergétique,"
+ "Sphère,"
+ "Tour,"
+ "D'urza"
]
]
# The selected language
language := { languages[set.card_language] or else languages.English }
# The language's name
lang_name := {
if languages[set.card_language].code or else false != false then
set.card_language
else "English"
}
# Get a setting from a language, or use a fallback
lang_setting := {
language()[input] or else languages[language().fallback][input] or else languages.English[input] or else ""
}
# language scripts
spanish_number := {
input := remove_tags(input)
espanol_ones_array := ["cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince"]