From a4e8c201077e389e71b4a0fa9a63ffe666481c42 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 25 May 2014 10:45:06 -0400 Subject: don't allow fusing bosses that haven't been beaten yet --- lib/Games/SMTNocturne/Demons.pm | 21 ++++++++++++--------- lib/Games/SMTNocturne/Demons/Demon.pm | 3 +++ 2 files changed, 15 insertions(+), 9 deletions(-) (limited to 'lib/Games') diff --git a/lib/Games/SMTNocturne/Demons.pm b/lib/Games/SMTNocturne/Demons.pm index d4aff76..b5da3d1 100644 --- a/lib/Games/SMTNocturne/Demons.pm +++ b/lib/Games/SMTNocturne/Demons.pm @@ -6,7 +6,7 @@ use Games::SMTNocturne::Demons::Demon; use Games::SMTNocturne::Demons::FusionChart; sub fuse { - my ($demon1, $demon2) = @_; + my ($demon1, $demon2, $options) = @_; $demon1 = Games::SMTNocturne::Demons::Demon->from_name($demon1) unless ref($demon1); @@ -14,12 +14,13 @@ sub fuse { unless ref($demon2); if ($demon1->type eq 'Element' && $demon2->type eq 'Element') { - return _fuse_mitama($demon1, $demon2); + return _fuse_mitama($demon1, $demon2, $options); } elsif ($demon1->type eq 'Element' || $demon2->type eq 'Element') { return _element_fusion( - $demon1->type eq 'Element' - ? ($demon1, $demon2) : ($demon2, $demon1) + ($demon1->type eq 'Element' + ? ($demon1, $demon2) : ($demon2, $demon1)), + $options ); } elsif ($demon1->type eq 'Mitama' && $demon2->type eq 'Mitama') { @@ -27,15 +28,16 @@ sub fuse { } elsif ($demon1->type eq 'Mitama' || $demon2->type eq 'Mitama') { return _mitama_fusion( - $demon1->type eq 'Mitama' - ? ($demon1, $demon2) : ($demon2, $demon1) + ($demon1->type eq 'Mitama' + ? ($demon1, $demon2) : ($demon2, $demon1)), + $options ); } elsif ($demon1->type eq $demon2->type) { - return _fuse_element($demon1, $demon2); + return _fuse_element($demon1, $demon2, $options); } else { - return _normal_fusion($demon1, $demon2); + return _normal_fusion($demon1, $demon2, $options); } } @@ -85,7 +87,7 @@ sub _fuse_element { } sub _normal_fusion { - my ($demon1, $demon2) = @_; + my ($demon1, $demon2, $options) = @_; my $new_type = Games::SMTNocturne::Demons::FusionChart::fuse( $demon1->type, $demon2->type @@ -98,6 +100,7 @@ sub _normal_fusion { type => $new_type, level => $new_level, fusion_type => 'normal', + %{ $options || {} }, }); } diff --git a/lib/Games/SMTNocturne/Demons/Demon.pm b/lib/Games/SMTNocturne/Demons/Demon.pm index 41b689a..1185f2d 100644 --- a/lib/Games/SMTNocturne/Demons/Demon.pm +++ b/lib/Games/SMTNocturne/Demons/Demon.pm @@ -40,6 +40,9 @@ sub from_fusion_stats { @possible = grep { $_->fusion_type eq $options->{fusion_type} } @possible if $options->{fusion_type}; + my %bosses = map { $_ => 1 } @{ $options->{bosses} || [] }; + @possible = grep { !$_->boss || $bosses{$_->name} } @possible; + my $found; for my $demon (@possible) { $found = $demon; -- cgit v1.2.3