summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-05-26 01:14:49 -0400
committerJesse Luehrs <doy@tozt.net>2014-05-26 01:14:49 -0400
commita5a7af512be47df8e23ae53754bdeedd891351a9 (patch)
treeec75cdf66e58bb6b4d59c1b081abd6bae83ce820
parentdc31eaead0386016a265f7b2371cd2e166a395b0 (diff)
downloadgames-smtnocturne-demons-a5a7af512be47df8e23ae53754bdeedd891351a9.tar.gz
games-smtnocturne-demons-a5a7af512be47df8e23ae53754bdeedd891351a9.zip
support limiting fusions_for by level
-rw-r--r--lib/Games/SMTNocturne/Demons.pm13
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/Games/SMTNocturne/Demons.pm b/lib/Games/SMTNocturne/Demons.pm
index d7f4a58..f25f1c3 100644
--- a/lib/Games/SMTNocturne/Demons.pm
+++ b/lib/Games/SMTNocturne/Demons.pm
@@ -58,7 +58,7 @@ sub fuse {
}
sub fusions_for {
- my ($demon) = @_;
+ my ($demon, $options) = @_;
$demon = Games::SMTNocturne::Demons::Demon->from_name($demon)
unless ref($demon);
@@ -68,7 +68,11 @@ sub fusions_for {
for my $types (Games::SMTNocturne::Demons::FusionChart::unfuse($demon->type)) {
my ($type1, $type2) = @$types;
for my $demon1 (Games::SMTNocturne::Demons::Demon->from_type($type1)) {
+ next if defined $options->{level}
+ && $options->{level} < $demon1->level;
for my $demon2 (Games::SMTNocturne::Demons::Demon->from_type($type2)) {
+ next if defined $options->{level}
+ && $options->{level} < $demon2->level;
push @fusions, [ $demon1, $demon2 ]
if (fuse($demon1, $demon2) || '') eq $demon;
}
@@ -95,6 +99,9 @@ sub fusions_for {
} @types
];
}
+ $special->{$key} = [
+ grep { $_->level <= $options->{level} } @{ $special->{$key} }
+ ] if defined $options->{level};
}
if ($special->{demon3}) {
@@ -118,7 +125,7 @@ sub fusions_for {
elsif ($special->{demon1}) {
if ($special->{target}) {
my @target_fusions = map {
- fusions_for($_)
+ fusions_for($_, $options)
} @{ $special->{target} };
push @special_fusions, grep {
my $fusion = $_;
@@ -133,7 +140,7 @@ sub fusions_for {
else {
if ($special->{target}) {
push @special_fusions, map {
- fusions_for($_)
+ fusions_for($_, $options)
} @{ $special->{target} };
}
else {