From 262066dd85e2cbfca6879ac8fb469b2fd1278337 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 6 Oct 2009 00:01:28 -0500 Subject: refactor demon types into actual subclasses --- lib/Games/SMTNocturne/Fusion/Demon.pm | 41 +++++++++++++++++++++------ lib/Games/SMTNocturne/Fusion/Demon/Avatar.pm | 8 ++++++ lib/Games/SMTNocturne/Fusion/Demon/Avian.pm | 8 ++++++ lib/Games/SMTNocturne/Fusion/Demon/Beast.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Brute.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Deity.pm | 17 +++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Divine.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Dragon.pm | 8 ++++++ lib/Games/SMTNocturne/Fusion/Demon/Element.pm | 10 +++++++ lib/Games/SMTNocturne/Fusion/Demon/Entity.pm | 8 ++++++ lib/Games/SMTNocturne/Fusion/Demon/Fairy.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Fallen.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Femme.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Fiend.pm | 8 ++++++ lib/Games/SMTNocturne/Fusion/Demon/Foul.pm | 17 +++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Fury.pm | 17 +++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Genma.pm | 8 ++++++ lib/Games/SMTNocturne/Fusion/Demon/Haunt.pm | 17 +++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Holy.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Jirae.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Kishin.pm | 17 +++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Lady.pm | 17 +++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Megami.pm | 17 +++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Mitama.pm | 10 +++++++ lib/Games/SMTNocturne/Fusion/Demon/Night.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Raptor.pm | 8 ++++++ lib/Games/SMTNocturne/Fusion/Demon/Seraph.pm | 12 ++++++++ lib/Games/SMTNocturne/Fusion/Demon/Snake.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Tyrant.pm | 17 +++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Vile.pm | 17 +++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Wargod.pm | 8 ++++++ lib/Games/SMTNocturne/Fusion/Demon/Wilder.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Demon/Yoma.pm | 21 ++++++++++++++ lib/Games/SMTNocturne/Fusion/Types.pm | 3 +- 34 files changed, 536 insertions(+), 9 deletions(-) create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Avatar.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Avian.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Beast.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Brute.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Deity.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Divine.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Dragon.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Element.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Entity.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Fairy.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Fallen.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Femme.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Fiend.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Foul.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Fury.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Genma.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Haunt.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Holy.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Jirae.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Kishin.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Lady.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Megami.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Mitama.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Night.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Raptor.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Seraph.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Snake.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Tyrant.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Vile.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Wargod.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Wilder.pm create mode 100644 lib/Games/SMTNocturne/Fusion/Demon/Yoma.pm diff --git a/lib/Games/SMTNocturne/Fusion/Demon.pm b/lib/Games/SMTNocturne/Fusion/Demon.pm index 355dc86..bc386d1 100644 --- a/lib/Games/SMTNocturne/Fusion/Demon.pm +++ b/lib/Games/SMTNocturne/Fusion/Demon.pm @@ -1,15 +1,17 @@ package Games::SMTNocturne::Fusion::Demon; use Moose; +use Moose::Util::TypeConstraints; use MooseX::ClassAttribute; -use MooseX::Types::Moose qw(ArrayRef HashRef Int Str); +use MooseX::Types::Moose qw(ArrayRef HashRef Int Maybe Str); use YAML::Any qw(Load); use Games::SMTNocturne::Fusion::Types qw(DemonType FusionType SMTDemon); -use overload - '""' => sub { - my $self = shift; - '<' . $self->type . ' ' . $self->name . ' (' . $self->level . ')>' - }; -use namespace::autoclean; +# XXX ick ick ick (n::ac breaks overload) +use namespace::clean -except => 'meta'; +use overload '""' => sub { + my $self = shift; + '<' . $self->type . ' ' . $self->name . ' (' . $self->level . ')>' +}; +# use namespace::autoclean; with 'MooseX::Traits', 'MooseX::Role::Matcher' => { default_match => 'name' }; @@ -38,7 +40,12 @@ class_has list => ( } qw(deathstone evolve special); $traits{normal} = []; return [ map { - $class->new_with_traits(traits => $traits{$_->{fusion_type}}, %$_) + my $demon_class = "Games::SMTNocturne::Fusion::Demon::$_->{type}"; + Class::MOP::load_class($demon_class); + $demon_class->new_with_traits( + traits => $traits{$_->{fusion_type}}, + %$_, + ); } @{ $class->_list } ]; }, ); @@ -67,6 +74,24 @@ has fusion_type => ( required => 1, ); +has elemental_fusions => ( + traits => ['Hash'], + is => 'ro', + isa => HashRef[Maybe[enum[qw(up down)]]], + init_arg => undef, + default => sub { { } }, + handles => { + elemental_fusion_direction => 'get', + }, +); + +has self_fusion_element => ( + is => 'ro', + isa => Maybe[enum[qw(Erthys Aeros Aquans Flameis)]], + init_arg => undef, + default => undef, +); + sub lookup { my ($class, @props) = @_; my @possible = $class->grep_matches($class->list, @props); diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Avatar.pm b/lib/Games/SMTNocturne/Fusion/Demon/Avatar.pm new file mode 100644 index 0000000..dc1f48d --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Avatar.pm @@ -0,0 +1,8 @@ +package Games::SMTNocturne::Fusion::Demon::Avatar; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Avian.pm b/lib/Games/SMTNocturne/Fusion/Demon/Avian.pm new file mode 100644 index 0000000..a9b7694 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Avian.pm @@ -0,0 +1,8 @@ +package Games::SMTNocturne::Fusion::Demon::Avian; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Beast.pm b/lib/Games/SMTNocturne/Fusion/Demon/Beast.pm new file mode 100644 index 0000000..530093a --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Beast.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Beast; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'up', + Aquans => 'down', + Flameis => 'up', + } }, +); + +has '+self_fusion_element' => ( + default => 'Aeros', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Brute.pm b/lib/Games/SMTNocturne/Fusion/Demon/Brute.pm new file mode 100644 index 0000000..668b39d --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Brute.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Brute; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'up', + Aeros => 'down', + Aquans => 'up', + Flameis => 'up', + } }, +); + +has '+self_fusion_element' => ( + default => 'Erthys', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Deity.pm b/lib/Games/SMTNocturne/Fusion/Demon/Deity.pm new file mode 100644 index 0000000..57797de --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Deity.pm @@ -0,0 +1,17 @@ +package Games::SMTNocturne::Fusion::Demon::Deity; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'down', + Aquans => 'down', + Flameis => 'down', + } }, +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Divine.pm b/lib/Games/SMTNocturne/Fusion/Demon/Divine.pm new file mode 100644 index 0000000..74412a5 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Divine.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Divine; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'down', + Aquans => 'up', + Flameis => 'up', + } }, +); + +has '+self_fusion_element' => ( + default => 'Aeros', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Dragon.pm b/lib/Games/SMTNocturne/Fusion/Demon/Dragon.pm new file mode 100644 index 0000000..eee0d7d --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Dragon.pm @@ -0,0 +1,8 @@ +package Games::SMTNocturne::Fusion::Demon::Dragon; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Element.pm b/lib/Games/SMTNocturne/Fusion/Demon/Element.pm new file mode 100644 index 0000000..160d50c --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Element.pm @@ -0,0 +1,10 @@ +package Games::SMTNocturne::Fusion::Demon::Element; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +# XXX: add stuff here + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Entity.pm b/lib/Games/SMTNocturne/Fusion/Demon/Entity.pm new file mode 100644 index 0000000..a9090a3 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Entity.pm @@ -0,0 +1,8 @@ +package Games::SMTNocturne::Fusion::Demon::Entity; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Fairy.pm b/lib/Games/SMTNocturne/Fusion/Demon/Fairy.pm new file mode 100644 index 0000000..9d546b4 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Fairy.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Fairy; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'up', + Aeros => 'down', + Aquans => 'up', + Flameis => 'down', + } }, +); + +has '+self_fusion_element' => ( + default => 'Aeros', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Fallen.pm b/lib/Games/SMTNocturne/Fusion/Demon/Fallen.pm new file mode 100644 index 0000000..34d323d --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Fallen.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Fallen; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'up', + Aquans => 'down', + Flameis => 'up', + } }, +); + +has '+self_fusion_element' => ( + default => 'Erthys', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Femme.pm b/lib/Games/SMTNocturne/Fusion/Demon/Femme.pm new file mode 100644 index 0000000..048a010 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Femme.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Femme; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'up', + Aeros => 'down', + Aquans => 'up', + Flameis => 'up', + } }, +); + +has '+self_fusion_element' => ( + default => 'Aquans', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Fiend.pm b/lib/Games/SMTNocturne/Fusion/Demon/Fiend.pm new file mode 100644 index 0000000..98d820c --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Fiend.pm @@ -0,0 +1,8 @@ +package Games::SMTNocturne::Fusion::Demon::Fiend; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Foul.pm b/lib/Games/SMTNocturne/Fusion/Demon/Foul.pm new file mode 100644 index 0000000..426dc73 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Foul.pm @@ -0,0 +1,17 @@ +package Games::SMTNocturne::Fusion::Demon::Foul; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'down', + Aquans => 'up', + Flameis => 'down', + } }, +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Fury.pm b/lib/Games/SMTNocturne/Fusion/Demon/Fury.pm new file mode 100644 index 0000000..5a26039 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Fury.pm @@ -0,0 +1,17 @@ +package Games::SMTNocturne::Fusion::Demon::Fury; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'down', + Aquans => 'down', + Flameis => 'down', + } }, +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Genma.pm b/lib/Games/SMTNocturne/Fusion/Demon/Genma.pm new file mode 100644 index 0000000..298d774 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Genma.pm @@ -0,0 +1,8 @@ +package Games::SMTNocturne::Fusion::Demon::Genma; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Haunt.pm b/lib/Games/SMTNocturne/Fusion/Demon/Haunt.pm new file mode 100644 index 0000000..a9727af --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Haunt.pm @@ -0,0 +1,17 @@ +package Games::SMTNocturne::Fusion::Demon::Haunt; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'up', + Aquans => 'down', + Flameis => 'down', + } }, +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Holy.pm b/lib/Games/SMTNocturne/Fusion/Demon/Holy.pm new file mode 100644 index 0000000..4842d67 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Holy.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Holy; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'down', + Aquans => 'down', + Flameis => 'up', + } }, +); + +has '+self_fusion_element' => ( + default => 'Flameis', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Jirae.pm b/lib/Games/SMTNocturne/Fusion/Demon/Jirae.pm new file mode 100644 index 0000000..74ce071 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Jirae.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Jirae; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'up', + Aeros => 'up', + Aquans => 'down', + Flameis => 'down', + } }, +); + +has '+self_fusion_element' => ( + default => 'Erthys', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Kishin.pm b/lib/Games/SMTNocturne/Fusion/Demon/Kishin.pm new file mode 100644 index 0000000..f511d03 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Kishin.pm @@ -0,0 +1,17 @@ +package Games::SMTNocturne::Fusion::Demon::Kishin; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'up', + Aeros => 'down', + Aquans => 'down', + Flameis => 'down', + } }, +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Lady.pm b/lib/Games/SMTNocturne/Fusion/Demon/Lady.pm new file mode 100644 index 0000000..1d5c793 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Lady.pm @@ -0,0 +1,17 @@ +package Games::SMTNocturne::Fusion::Demon::Lady; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'up', + Aeros => 'down', + Aquans => 'down', + Flameis => 'down', + } }, +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Megami.pm b/lib/Games/SMTNocturne/Fusion/Demon/Megami.pm new file mode 100644 index 0000000..2521aa6 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Megami.pm @@ -0,0 +1,17 @@ +package Games::SMTNocturne::Fusion::Demon::Megami; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'down', + Aquans => 'down', + Flameis => 'down', + } }, +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Mitama.pm b/lib/Games/SMTNocturne/Fusion/Demon/Mitama.pm new file mode 100644 index 0000000..9f79544 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Mitama.pm @@ -0,0 +1,10 @@ +package Games::SMTNocturne::Fusion::Demon::Mitama; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +# XXX: add things here + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Night.pm b/lib/Games/SMTNocturne/Fusion/Demon/Night.pm new file mode 100644 index 0000000..23e1e40 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Night.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Night; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'up', + Aquans => 'down', + Flameis => 'down', + } }, +); + +has '+self_fusion_element' => ( + default => 'Erthys', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Raptor.pm b/lib/Games/SMTNocturne/Fusion/Demon/Raptor.pm new file mode 100644 index 0000000..ccc3724 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Raptor.pm @@ -0,0 +1,8 @@ +package Games::SMTNocturne::Fusion::Demon::Raptor; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Seraph.pm b/lib/Games/SMTNocturne/Fusion/Demon/Seraph.pm new file mode 100644 index 0000000..4473a7b --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Seraph.pm @@ -0,0 +1,12 @@ +package Games::SMTNocturne::Fusion::Demon::Seraph; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+self_fusion_element' => ( + default => 'Flameis', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Snake.pm b/lib/Games/SMTNocturne/Fusion/Demon/Snake.pm new file mode 100644 index 0000000..0c0e0b1 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Snake.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Snake; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'down', + Aquans => 'up', + Flameis => 'up', + } }, +); + +has '+self_fusion_element' => ( + default => 'Aquans', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Tyrant.pm b/lib/Games/SMTNocturne/Fusion/Demon/Tyrant.pm new file mode 100644 index 0000000..aeb4fb1 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Tyrant.pm @@ -0,0 +1,17 @@ +package Games::SMTNocturne::Fusion::Demon::Tyrant; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'down', + Aquans => 'down', + Flameis => 'down', + } }, +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Vile.pm b/lib/Games/SMTNocturne/Fusion/Demon/Vile.pm new file mode 100644 index 0000000..48487b4 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Vile.pm @@ -0,0 +1,17 @@ +package Games::SMTNocturne::Fusion::Demon::Vile; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'down', + Aquans => 'down', + Flameis => 'down', + } }, +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Wargod.pm b/lib/Games/SMTNocturne/Fusion/Demon/Wargod.pm new file mode 100644 index 0000000..d487fa0 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Wargod.pm @@ -0,0 +1,8 @@ +package Games::SMTNocturne::Fusion::Demon::Wargod; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Wilder.pm b/lib/Games/SMTNocturne/Fusion/Demon/Wilder.pm new file mode 100644 index 0000000..85dd867 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Wilder.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Wilder; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'down', + Aquans => 'up', + Flameis => 'up', + } }, +); + +has '+self_fusion_element' => ( + default => 'Aeros', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Demon/Yoma.pm b/lib/Games/SMTNocturne/Fusion/Demon/Yoma.pm new file mode 100644 index 0000000..50de288 --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/Demon/Yoma.pm @@ -0,0 +1,21 @@ +package Games::SMTNocturne::Fusion::Demon::Yoma; +use Moose; +use namespace::autoclean; +extends 'Games::SMTNocturne::Fusion::Demon'; + +has '+elemental_fusions' => ( + default => sub { { + Erthys => 'down', + Aeros => 'up', + Aquans => 'up', + Flameis => 'down', + } }, +); + +has '+self_fusion_element' => ( + default => 'Aquans', +); + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Types.pm b/lib/Games/SMTNocturne/Fusion/Types.pm index f5276f9..86f7fab 100644 --- a/lib/Games/SMTNocturne/Fusion/Types.pm +++ b/lib/Games/SMTNocturne/Fusion/Types.pm @@ -22,7 +22,8 @@ coerce DemonList, from ArrayRef[Str], for my $typename (@demon_types) { my $type = __PACKAGE__->can($typename)->(); - subtype $type, as SMTDemon, where { $_->type eq $typename }; + class_type $type, + { class => "Games::SMTNocturne::Fusion::Demon::$typename" }; coerce $type, from Str, via { Games::SMTNocturne::Fusion::Demon->lookup($_) }; } -- cgit v1.2.3