diff options
Diffstat (limited to 'lib/Games/SMTNocturne/Fusion/Demon.pm')
-rw-r--r-- | lib/Games/SMTNocturne/Fusion/Demon.pm | 808 |
1 files changed, 808 insertions, 0 deletions
diff --git a/lib/Games/SMTNocturne/Fusion/Demon.pm b/lib/Games/SMTNocturne/Fusion/Demon.pm new file mode 100644 index 0000000..f1439f0 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon.pm @@ -0,0 +1,808 @@ +package Games::SMTNocturne::Fusion::Demon; +use Moose; +use MooseX::ClassAttribute; +use YAML::Any qw(Load); +use Games::SMTNocturne::Fusion::Types; + +with 'MooseX::Traits', + 'MooseX::Role::Matcher' => { default_match => 'name' }; + +class_has _list => ( + is => 'ro', + isa => 'ArrayRef[HashRef]', + lazy => 1, + default => sub { + local $/ = undef; + my $data = <DATA>; + close DATA; + return Load($data); + }, +); + +class_has list => ( + is => 'ro', + isa => 'ArrayRef[Games::SMTNocturne::Fusion::Demon]', + lazy => 1, + default => sub { + my $meta = shift; + my $class = $meta->name; + my %traits = map { + $_ => ["Games::SMTNocturne::Fusion::Role::" . ucfirst($_)] + } qw(deathstone evolve special); + $traits{normal} = []; + return [ map { + $class->new_with_traits(traits => $traits{$_->{fusion_type}}, %$_) + } @{ $class->_list } ]; + }, +); + +has name => ( + is => 'ro', + isa => 'Str', + required => 1, +); + +has level => ( + is => 'ro', + isa => 'Int', + required => 1, +); + +has type => ( + is => 'ro', + isa => 'Games::SMTNocturne::Fusion::DemonType', + required => 1, +); + +has fusion_type => ( + is => 'ro', + isa => 'Games::SMTNocturne::Fusion::FusionType', + required => 1, +); + +sub lookup { + my ($class, @props) = @_; + my @possible = $class->grep_matches($class->list, @props); + + return wantarray ? @possible : (@possible == 1 ? $possible[0] : undef); +} + +__PACKAGE__->meta->make_immutable; +no Moose; + +1; + +__DATA__ +--- +- fusion_type: normal + level: '38' + name: Horus + type: Deity +- fusion_type: normal + level: '47' + name: Atavaka + type: Deity +- fusion_type: special + level: '56' + name: Amaterasu + type: Deity +- fusion_type: normal + level: '65' + name: Odin + type: Deity +- fusion_type: normal + level: '78' + name: Mithra + type: Deity +- fusion_type: normal + level: '93' + name: Vishnu + type: Deity +- fusion_type: normal + level: '18' + name: Uzume + type: Megami +- fusion_type: normal + level: '30' + name: Sarasvati + type: Megami +- fusion_type: normal + level: '48' + name: Sati + type: Megami +- fusion_type: normal + level: '54' + name: Laksmi + type: Megami +- fusion_type: normal + level: '64' + name: Scathach + type: Megami +- fusion_type: normal + level: '44' + name: Dionysus + type: Fury +- fusion_type: evolve + level: '54' + name: Wu Kong + type: Fury +- fusion_type: normal + level: '61' + name: Beji Weng + type: Fury +- fusion_type: special + level: '95' + name: Shiva + type: Fury +- fusion_type: normal + level: '24' + name: Kikuri-Hime + type: Lady +- fusion_type: normal + level: '41' + name: Kushinada + type: Lady +- fusion_type: evolve + level: '57' + name: Parvati + type: Lady +- fusion_type: normal + level: '67' + name: Kali + type: Lady +- fusion_type: evolve + level: '74' + name: Skadi + type: Lady +- fusion_type: normal + level: '17' + name: Minakata + type: Kishin +- fusion_type: normal + level: '27' + name: Zouchou + type: Kishin +- fusion_type: normal + level: '33' + name: Koumoko + type: Kishin +- fusion_type: normal + level: '39' + name: Okuninushi + type: Kishin +- fusion_type: normal + level: '45' + name: Mikazuchi + type: Kishin +- fusion_type: normal + level: '52' + name: Jiroku + type: Kishin +- fusion_type: normal + level: '63' + name: Futomimi + type: Kishin +- fusion_type: normal + level: '72' + name: Bishamon + type: Kishin +- fusion_type: normal + level: '76' + name: Thor + type: Kishin +- fusion_type: normal + level: '13' + name: Shiisaa + type: Holy +- fusion_type: normal + level: '21' + name: Unicorn + type: Holy +- fusion_type: evolve + level: '27' + name: Senri + type: Holy +- fusion_type: normal + level: '36' + name: Feng Huang + type: Holy +- fusion_type: normal + level: '43' + name: Baihu + type: Holy +- fusion_type: normal + level: '55' + name: Chimera + type: Holy +- fusion_type: normal + level: '7' + name: Erthys + type: Element +- fusion_type: normal + level: '11' + name: Aeros + type: Element +- fusion_type: normal + level: '15' + name: Aquans + type: Element +- fusion_type: normal + level: '20' + name: Flameis + type: Element +- fusion_type: normal + level: '25' + name: Ara Mitama + type: Mitama +- fusion_type: normal + level: '29' + name: Nigi Mitama + type: Mitama +- fusion_type: normal + level: '32' + name: Kusi Mitama + type: Mitama +- fusion_type: normal + level: '35' + name: Saki Mitama + type: Mitama +- fusion_type: normal + level: '8' + name: Apsaras + type: Yoma +- fusion_type: normal + level: '14' + name: Isora + type: Yoma +- fusion_type: normal + level: '19' + name: Koppa + type: Yoma +- fusion_type: normal + level: '23' + name: Dis + type: Yoma +- fusion_type: evolve + level: '28' + name: Karasu + type: Yoma +- fusion_type: normal + level: '37' + name: Onkot + type: Yoma +- fusion_type: normal + level: '44' + name: Jinn + type: Yoma +- fusion_type: normal + level: '48' + name: Purski + type: Yoma +- fusion_type: evolve + level: '52' + name: Efreet + type: Yoma +- fusion_type: normal + level: '2' + name: Pixie + type: Fairy +- fusion_type: normal + level: '7' + name: Jack Frost + type: Fairy +- fusion_type: evolve + level: '10' + name: High Pixie + type: Fairy +- fusion_type: normal + level: '19' + name: Pyro Jack + type: Fairy +- fusion_type: normal + level: '26' + name: Kelpie + type: Fairy +- fusion_type: normal + level: '38' + name: Troll + type: Fairy +- fusion_type: normal + level: '43' + name: Setanta + type: Fairy +- fusion_type: normal + level: '46' + name: Oberon + type: Fairy +- fusion_type: normal + level: '57' + name: Titania + type: Fairy +- fusion_type: normal + level: '11' + name: Angel + type: Divine +- fusion_type: normal + level: '18' + name: Archangel + type: Divine +- fusion_type: normal + level: '28' + name: Principality + type: Divine +- fusion_type: normal + level: '33' + name: Power + type: Divine +- fusion_type: normal + level: '41' + name: Virtue + type: Divine +- fusion_type: normal + level: '50' + name: Dominion + type: Divine +- fusion_type: normal + level: '64' + name: Throne + type: Divine +- fusion_type: normal + level: '20' + name: Forneus + type: Fallen +- fusion_type: normal + level: '29' + name: Eligor + type: Fallen +- fusion_type: normal + level: '37' + name: Berith + type: Fallen +- fusion_type: normal + level: '45' + name: Ose + type: Fallen +- fusion_type: normal + level: '58' + name: Decarabia + type: Fallen +- fusion_type: normal + level: '68' + name: Flauros + type: Fallen +- fusion_type: normal + level: '14' + name: Nozuchi + type: Snake +- fusion_type: normal + level: '28' + name: Naga + type: Snake +- fusion_type: normal + level: '34' + name: Mizuchi + type: Snake +- fusion_type: evolve + level: '37' + name: Raja Naga + type: Snake +- fusion_type: normal + level: '55' + name: Quetzalcoatl + type: Snake +- fusion_type: normal + level: '66' + name: Yurlungur + type: Snake +- fusion_type: normal + level: '13' + name: Inugami + type: Beast +- fusion_type: normal + level: '18' + name: Nekomata + type: Beast +- fusion_type: normal + level: '23' + name: Badb Catha + type: Beast +- fusion_type: normal + level: '34' + name: Orthrus + type: Beast +- fusion_type: normal + level: '54' + name: Sparna + type: Beast +- fusion_type: normal + level: '61' + name: Cerberus + type: Beast +- fusion_type: normal + level: '3' + name: Kodama + type: Jirae +- fusion_type: normal + level: '5' + name: Hua Po + type: Jirae +- fusion_type: normal + level: '13' + name: Sudama + type: Jirae +- fusion_type: normal + level: '35' + name: Sarutahiko + type: Jirae +- fusion_type: normal + level: '49' + name: Titan + type: Jirae +- fusion_type: normal + level: '55' + name: Gogmagog + type: Jirae +- fusion_type: normal + level: '4' + name: Shikigami + type: Brute +- fusion_type: normal + level: '20' + name: Momunofu + type: Brute +- fusion_type: normal + level: '25' + name: Oni + type: Brute +- fusion_type: normal + level: '44' + name: Ikusa + type: Brute +- fusion_type: normal + level: '54' + name: Shiki-Ouji + type: Brute +- fusion_type: normal + level: '59' + name: Kin-Ki + type: Brute +- fusion_type: normal + level: '62' + name: Sui-Ki + type: Brute +- fusion_type: normal + level: '66' + name: Fuu-Ki + type: Brute +- fusion_type: special + level: '81' + name: Ongyo-Ki + type: Brute +- fusion_type: normal + level: '7' + name: Datsue-Ba + type: Femme +- fusion_type: normal + level: '20' + name: Taraka + type: Femme +- fusion_type: normal + level: '32' + name: Shikome + type: Femme +- fusion_type: normal + level: '43' + name: Yaksini + type: Femme +- fusion_type: normal + level: '52' + name: Dakini + type: Femme +- fusion_type: normal + level: '58' + name: Clotho + type: Femme +- fusion_type: normal + level: '63' + name: Lachesis + type: Femme +- fusion_type: normal + level: '67' + name: Atropos + type: Femme +- fusion_type: normal + level: '72' + name: Rangda + type: Femme +- fusion_type: normal + level: '30' + name: Arahabaki + type: Vile +- fusion_type: normal + level: '33' + name: Baphomet + type: Vile +- fusion_type: normal + level: '35' + name: Pazuzu + type: Vile +- fusion_type: special + level: '58' + name: Girimehkala + type: Vile +- fusion_type: normal + level: '65' + name: Tao Tie + type: Vile +- fusion_type: special + level: '73' + name: Samael + type: Vile +- fusion_type: normal + level: '83' + name: Mada + type: Vile +- fusion_type: normal + level: '52' + name: Loki + type: Tyrant +- fusion_type: normal + level: '69' + name: Abaddon + type: Tyrant +- fusion_type: normal + level: '74' + name: Surt + type: Tyrant +- fusion_type: evolve + level: '77' + name: Aciel + type: Tyrant +- fusion_type: normal + level: '84' + name: Beelzebub + type: Tyrant +- fusion_type: normal + level: '91' + name: Mot + type: Tyrant +- fusion_type: evolve + level: '95' + name: Beelzebub (Fly) + type: Tyrant +- fusion_type: normal + level: '8' + name: Lilim + type: Night +- fusion_type: normal + level: '18' + name: Fomor + type: Night +- fusion_type: normal + level: '25' + name: Incubus + type: Night +- fusion_type: normal + level: '37' + name: Succubus + type: Night +- fusion_type: normal + level: '47' + name: Kaiwan + type: Night +- fusion_type: normal + level: '53' + name: Loa + type: Night +- fusion_type: evolve + level: '56' + name: Queen Mab + type: Night +- fusion_type: normal + level: '66' + name: Black Frost + type: Night +- fusion_type: normal + level: '70' + name: Nyx + type: Night +- fusion_type: evolve + level: '80' + name: Lilith + type: Night +- fusion_type: normal + level: '6' + name: Zhen + type: Wilder +- fusion_type: normal + level: '15' + name: Bicorn + type: Wilder +- fusion_type: normal + level: '25' + name: Raiju + type: Wilder +- fusion_type: normal + level: '31' + name: Nue + type: Wilder +- fusion_type: normal + level: '43' + name: Mothman + type: Wilder +- fusion_type: normal + level: '75' + name: Hresvelgr + type: Wilder +- fusion_type: normal + level: '4' + name: Preta + type: Haunt +- fusion_type: normal + level: '11' + name: Choronzon + type: Haunt +- fusion_type: normal + level: '17' + name: Yaka + type: Haunt +- fusion_type: normal + level: '20' + name: Chatterskull + type: Haunt +- fusion_type: normal + level: '28' + name: Pisaca + type: Haunt +- fusion_type: normal + level: '49' + name: Legion + type: Haunt +- fusion_type: normal + level: '63' + name: Rakshasa + type: Haunt +- fusion_type: normal + level: '1' + name: Will O' Wisp + type: Foul +- fusion_type: normal + level: '6' + name: Slime + type: Foul +- fusion_type: normal + level: '7' + name: Mou-Ryo + type: Foul +- fusion_type: normal + level: '16' + name: Blob + type: Foul +- fusion_type: normal + level: '28' + name: Black Ooze + type: Foul +- fusion_type: normal + level: '42' + name: Phantom + type: Foul +- fusion_type: special + level: '45' + name: Sakahagi + type: Foul +- fusion_type: normal + level: '52' + name: Shadow + type: Foul +- fusion_type: evolve + level: '73' + name: Uriel + type: Seraph +- fusion_type: special + level: '84' + name: Raphael + type: Seraph +- fusion_type: special + level: '87' + name: Gabriel + type: Seraph +- fusion_type: special + level: '90' + name: Michael + type: Seraph +- fusion_type: special + level: '95' + name: Metatron + type: Seraph +- fusion_type: evolve + level: '33' + name: Valkyrie + type: Wargod +- fusion_type: evolve + level: '58' + name: Ganesha + type: Wargod +- fusion_type: evolve + level: '38' + name: Kurama + type: Genma +- fusion_type: evolve + level: '46' + name: Hanuman + type: Genma +- fusion_type: evolve + level: '52' + name: Cu Chulainn + type: Genma +- fusion_type: evolve + level: '24' + name: Gui Xian + type: Dragon +- fusion_type: evolve + level: '44' + name: Long + type: Dragon +- fusion_type: evolve + level: '22' + name: Makami + type: Avatar +- fusion_type: normal + level: '26' + name: Cai-Zhi + type: Avatar +- fusion_type: normal + level: '46' + name: Yatagarasu + type: Avatar +- fusion_type: normal + level: '60' + name: Barong + type: Avatar +- fusion_type: evolve + level: '63' + name: Garuda + type: Avian +- fusion_type: special + level: '63' + name: Gurr + type: Raptor +- fusion_type: evolve + level: '64' + name: Albion + type: Entity +- fusion_type: deathstone + level: '30' + name: Matador + type: Fiend +- fusion_type: deathstone + level: '37' + name: Daisoujou + type: Fiend +- fusion_type: deathstone + level: '42' + name: Hell Biker + type: Fiend +- fusion_type: deathstone + level: '52' + name: White Rider + type: Fiend +- fusion_type: deathstone + level: '55' + name: Red Rider + type: Fiend +- fusion_type: deathstone + level: '61' + name: Black Rider + type: Fiend +- fusion_type: deathstone + level: '63' + name: Pale Rider + type: Fiend +- fusion_type: deathstone + level: '69' + name: The Harlot + type: Fiend +- fusion_type: deathstone + level: '77' + name: Trumpeter + type: Fiend |