summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-10-06 03:15:13 -0500
committerJesse Luehrs <doy@tozt.net>2009-10-06 03:15:13 -0500
commit6e93d01badd1e90966b8c9b0cb251dbddf0c3cfe (patch)
treea6b211038e202020f1c2fec9d1603fcd035d66f7
parentb914e1b76e7e9f8cb8dbee0862315a4e223fcce6 (diff)
downloadgames-smtnocturne-fusion-6e93d01badd1e90966b8c9b0cb251dbddf0c3cfe.tar.gz
games-smtnocturne-fusion-6e93d01badd1e90966b8c9b0cb251dbddf0c3cfe.zip
add implementations for how to fuse elements and mitama
-rw-r--r--lib/Games/SMTNocturne/Fusion/Chart.pm71
1 files changed, 49 insertions, 22 deletions
diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm
index 9095a50..fcb967d 100644
--- a/lib/Games/SMTNocturne/Fusion/Chart.pm
+++ b/lib/Games/SMTNocturne/Fusion/Chart.pm
@@ -22,6 +22,29 @@ class_has _type_chart => (
},
);
+my %element_fusions = (
+ Erthys => {
+ Aeros => 'Nigi',
+ Aquans => 'Ara',
+ Flameis => 'Kusi',
+ },
+ Aeros => {
+ Erthys => 'Nigi',
+ Aquans => 'Kusi',
+ Flameis => 'Ara',
+ },
+ Aquans => {
+ Erthys => 'Ara',
+ Aeros => 'Kusi',
+ Flameis => 'Saki',
+ },
+ Flameis => {
+ Erthys => 'Kusi',
+ Aeros => 'Ara',
+ Aquans => 'Saki',
+ },
+);
+
multi method fuse (ClassName $self: SMTDemon $demon1 is coerce,
SMTDemon $demon2 is coerce) {
my $type = $self->_type_chart->{$demon1->type}{$demon2->type};
@@ -63,28 +86,6 @@ multi method fuse (ClassName $self: SMTDemon $demon1 is coerce,
multi method fuse (ClassName $self: Element $demon1 is coerce,
Element $demon2 is coerce) {
- my %element_fusions = (
- Erthys => {
- Aeros => 'Nigi',
- Aquans => 'Ara',
- Flameis => 'Kusi',
- },
- Aeros => {
- Erthys => 'Nigi',
- Aquans => 'Kusi',
- Flameis => 'Ara',
- },
- Aquans => {
- Erthys => 'Ara',
- Aeros => 'Kusi',
- Flameis => 'Saki',
- },
- Flameis => {
- Erthys => 'Kusi',
- Aeros => 'Ara',
- Aquans => 'Saki',
- },
- );
my $mitama = $element_fusions{$demon1->name}{$demon2->name};
return unless $mitama;
return Demon->lookup("$mitama Mitama");
@@ -138,6 +139,32 @@ multi method fusions_for (ClassName $self: DeathstoneDemon $demon is coerce) {
return;
}
+multi method fusions_for (ClassName $self: Element $demon is coerce) {
+ my @demons = Demon->lookup(self_fusion_element => $demon->name);
+ my @found;
+ for my $demon1 (@demons) {
+ for my $demon2 (grep { $demon1->type eq $_->type } @demons) {
+ next if $demon1->name eq $demon2->name;
+ next if $demon2->level < $demon1->level;
+ push @found, [$demon1, $demon2];
+ }
+ }
+ return @found;
+}
+
+multi method fusions_for (ClassName $self: Mitama $demon is coerce) {
+ my @found;
+ for my $demon1 (keys %element_fusions) {
+ for my $demon2 (keys %{ $element_fusions{$demon1} }) {
+ next unless $demon->name eq "$element_fusions{$demon1}{$demon2} Mitama";
+ my ($found1, $found2) = (Demon->lookup($demon1), Demon->lookup($demon2));
+ next if $found2->level < $found1->level;
+ push @found, [$found1, $found2];
+ }
+ }
+ return @found;
+}
+
__PACKAGE__->meta->make_immutable;
1;