summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-10-06 03:26:30 -0500
committerJesse Luehrs <doy@tozt.net>2009-10-06 03:26:30 -0500
commit82ab25a55d12290b310eb3ec7e20aa1b3f91a7cd (patch)
tree41859636c9e431f056e31af21ce4349cd79b7a95
parent6e93d01badd1e90966b8c9b0cb251dbddf0c3cfe (diff)
downloadgames-smtnocturne-fusion-82ab25a55d12290b310eb3ec7e20aa1b3f91a7cd.tar.gz
games-smtnocturne-fusion-82ab25a55d12290b310eb3ec7e20aa1b3f91a7cd.zip
make sure we can't get evolve or special demons with normal fusion
this should really be factored out
-rw-r--r--lib/Games/SMTNocturne/Fusion/Chart.pm6
-rw-r--r--lib/Games/SMTNocturne/Fusion/Demon.pm11
2 files changed, 14 insertions, 3 deletions
diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm
index fcb967d..287e7df 100644
--- a/lib/Games/SMTNocturne/Fusion/Chart.pm
+++ b/lib/Games/SMTNocturne/Fusion/Chart.pm
@@ -2,6 +2,7 @@ package Games::SMTNocturne::Fusion::Chart;
use Moose;
use MooseX::ClassAttribute;
use MooseX::MultiMethods;
+use List::MoreUtils qw(firstval);
use YAML::Any qw(Load);
use Games::SMTNocturne::Fusion::Types
qw(DemonType SMTDemon Element Mitama
@@ -53,7 +54,10 @@ multi method fuse (ClassName $self: SMTDemon $demon1 is coerce,
type => $type,
level => sub { $_ >= $level },
);
- return $possible[0];
+ return firstval { !$_->does('Games::SMTNocturne::Fusion::Role::Deathstone')
+ && !$_->does('Games::SMTNocturne::Fusion::Role::Evolve')
+ && !$_->does('Games::SMTNocturne::Fusion::Role::Special') }
+ @possible;
}
multi method fuse (ClassName $self: Element $demon1 is coerce,
diff --git a/lib/Games/SMTNocturne/Fusion/Demon.pm b/lib/Games/SMTNocturne/Fusion/Demon.pm
index 23df00c..3efe004 100644
--- a/lib/Games/SMTNocturne/Fusion/Demon.pm
+++ b/lib/Games/SMTNocturne/Fusion/Demon.pm
@@ -3,6 +3,7 @@ use Moose;
use Moose::Util::TypeConstraints;
use MooseX::ClassAttribute;
use MooseX::Types::Moose qw(ArrayRef HashRef Int Maybe Str);
+use List::MoreUtils qw(firstval lastval);
use YAML::Any qw(Load);
use Games::SMTNocturne::Fusion::Types qw(DemonType FusionType SMTDemon);
# XXX ick ick ick (n::ac breaks overload)
@@ -105,7 +106,10 @@ sub level_up {
type => $self->type,
level => sub { $_ > $self->level },
);
- return $possible[0];
+ return firstval { !$_->does('Games::SMTNocturne::Fusion::Role::Deathstone')
+ && !$_->does('Games::SMTNocturne::Fusion::Role::Evolve')
+ && !$_->does('Games::SMTNocturne::Fusion::Role::Special') }
+ @possible;
}
sub level_down {
@@ -114,7 +118,10 @@ sub level_down {
type => $self->type,
level => sub { $_ < $self->level },
);
- return $possible[$#possible];
+ return lastval { !$_->does('Games::SMTNocturne::Fusion::Role::Deathstone')
+ && !$_->does('Games::SMTNocturne::Fusion::Role::Evolve')
+ && !$_->does('Games::SMTNocturne::Fusion::Role::Special') }
+ @possible;
}
__PACKAGE__->meta->make_immutable;