summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-10-06 16:23:35 -0500
committerJesse Luehrs <doy@tozt.net>2009-10-06 16:23:35 -0500
commit6a0ded05309cd7a9eb388f3d4026cf9870e7201b (patch)
treeea197887645ea3c58c69aca5d3a0fda12ee2d46c
parent3935ce91b27415104a80de6a38fa50b2f310b50f (diff)
downloadgames-smtnocturne-fusion-6a0ded05309cd7a9eb388f3d4026cf9870e7201b.tar.gz
games-smtnocturne-fusion-6a0ded05309cd7a9eb388f3d4026cf9870e7201b.zip
add allowable times for the various deathstone fusions
-rw-r--r--lib/Games/SMTNocturne/Fusion.pm2
-rw-r--r--lib/Games/SMTNocturne/Fusion/Chart.pm3
-rw-r--r--lib/Games/SMTNocturne/Fusion/KagutsuchiPhase.pm31
-rw-r--r--lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm73
4 files changed, 96 insertions, 13 deletions
diff --git a/lib/Games/SMTNocturne/Fusion.pm b/lib/Games/SMTNocturne/Fusion.pm
index 1564280..071d688 100644
--- a/lib/Games/SMTNocturne/Fusion.pm
+++ b/lib/Games/SMTNocturne/Fusion.pm
@@ -1,6 +1,8 @@
package Games::SMTNocturne::Fusion;
use Games::SMTNocturne::Fusion::Demon;
use Games::SMTNocturne::Fusion::Chart;
+use Games::SMTNocturne::Fusion::Deathstone;
+use Games::SMTNocturne::Fusion::KagutsuchiPhase;
use Sub::Exporter -setup => {
exports => [
qw(fuse fusions_for lookup_demon
diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm
index 16611ec..02eb000 100644
--- a/lib/Games/SMTNocturne/Fusion/Chart.pm
+++ b/lib/Games/SMTNocturne/Fusion/Chart.pm
@@ -152,7 +152,8 @@ multi method fusions_for (ClassName $class: EvolveDemon $demon does coerce) {
multi method fusions_for (ClassName $class: DeathstoneDemon $demon does coerce) {
my @demons = Demon->lookup(type => $demon->required_target_type);
- return map { [@$_, Games::SMTNocturne::Fusion::Deathstone->new] }
+ my $time = $demon->required_time;
+ return map { [@$_, Games::SMTNocturne::Fusion::Deathstone->new, $time] }
map { $class->fusions_for($_) }
@demons;
}
diff --git a/lib/Games/SMTNocturne/Fusion/KagutsuchiPhase.pm b/lib/Games/SMTNocturne/Fusion/KagutsuchiPhase.pm
new file mode 100644
index 0000000..08f161f
--- /dev/null
+++ b/lib/Games/SMTNocturne/Fusion/KagutsuchiPhase.pm
@@ -0,0 +1,31 @@
+package Games::SMTNocturne::Fusion::KagutsuchiPhase;
+use Moose;
+use namespace::clean -except => 'meta';
+use overload '""' => sub {
+ my $self = shift;
+ '<Kagutsuchi: ' . join(', ', map { $_ == 0 ? 'new'
+ : $_ == 4 ? 'half'
+ : $_ == 8 ? 'full'
+ : $_ } $self->phases) . '>';
+};
+# use namespace::autoclean;
+
+has phases => (
+ traits => ['Array'],
+ isa => 'ArrayRef[Int]',
+ required => 1,
+ handles => {
+ phases => 'elements',
+ },
+);
+
+around BUILDARGS => sub {
+ my $orig = shift;
+ my $class = shift;
+ my @phases = @_;
+ return $class->$orig(phases => \@phases);
+};
+
+__PACKAGE__->meta->make_immutable;
+
+1;
diff --git a/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm b/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm
index 3d65cb2..a8f04b2 100644
--- a/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm
+++ b/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm
@@ -26,17 +26,25 @@ class_has required_target_types => (
=cut
-sub _required_target_types {
+sub _required_state {
local $/ = undef;
my $data = <DATA>;
close DATA;
return Load($data);
}
-memoize('_required_target_types', NORMALIZER => sub { "" });
+memoize('_required_state', NORMALIZER => sub { "" });
sub required_target_type_for {
my $class = shift;
- return $class->_required_target_types->{$_[0]};
+ return $class->_required_state->{$_[0]}{type};
+}
+
+sub required_time_for {
+ my $class = shift;
+ my $time = $class->_required_state->{$_[0]}{time};
+ return Games::SMTNocturne::Fusion::KagutsuchiPhase->new(
+ $time->[0]..$time->[1]
+ );
}
sub required_target_type {
@@ -44,16 +52,57 @@ sub required_target_type {
return $self->required_target_type_for($self->name);
}
+sub required_time {
+ my $self = shift;
+ return $self->required_time_for($self->name);
+}
+
1;
__DATA__
---
-Black Rider: Night
-Daisoujou: Night
-Hell Biker: Fairy
-Matador: Yoma
-Pale Rider: Tyrant
-Red Rider: Fairy
-The Harlot: Tyrant
-Trumpeter: Tyrant
-White Rider: Yoma
+Black Rider:
+ time:
+ - 0
+ - 0
+ type: Night
+Daisoujou:
+ time:
+ - 5
+ - 8
+ type: Night
+Hell Biker:
+ time:
+ - 4
+ - 7
+ type: Fairy
+Matador:
+ time:
+ - 1
+ - 4
+ type: Yoma
+Pale Rider:
+ time:
+ - 0
+ - 0
+ type: Tyrant
+Red Rider:
+ time:
+ - 0
+ - 0
+ type: Fairy
+The Harlot:
+ time:
+ - 4
+ - 4
+ type: Tyrant
+Trumpeter:
+ time:
+ - 8
+ - 8
+ type: Tyrant
+White Rider:
+ time:
+ - 0
+ - 0
+ type: Yoma