Show
Ignore:
Timestamp:
05/23/08 02:41:12 (22 months ago)
Author:
eevee
Message:

Changed breeding chain calculator to interpret its Pokemon input as a target rather than.. whatever it was before. (#309)
Also added some more detail on reading the results.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • veekun/trunk/lib/Vee/Controller/Dex/Utils.pm

    r431 r432  
    270270    } 
    271271 
    272     if ($pokemon->breeding_code == 255) { 
    273         $s->{error_msg} = $pokemon->name . ' cannot breed.'; 
     272    my $basic_form = $pokemon->evo_chain->basic_form; 
     273    my @egg_forms  = $pokemon->evo_chain->egg_forms; 
     274 
     275    warn join "\n", map { $_->name } @egg_forms; 
     276    # N.B.: this assumes (correctly, as of DP) that every gendered Pokemon in 
     277    # a given chain has the same breeding code. 
     278    my $breedable_form = $pokemon->evo_chain->pokemon({ 
     279        'breeds.breed' => { '!=' => 15 }, 
     280    }, { 
     281        join           => 'breeds', 
     282    })->first; 
     283    if (not $breedable_form) { 
     284        $s->{error_msg} = 'Nothing in the ' . $basic_form->name 
     285                        . ' family can breed.'; 
    274286        return; 
    275287    } 
    276288 
    277289    my @unlearnable_moves; 
    278     for my $move (@moves) { 
    279         my $method = $pokemon->move_method_string($move, $version); 
    280         if (not $method) { 
    281             push @unlearnable_moves, $move; 
    282         } 
     290    MOVE: for my $move (@moves) { 
     291        for my $egg (@egg_forms) { 
     292            next MOVE if $egg->move_method_string($move, $version); 
     293        } 
     294 
     295        push @unlearnable_moves, $move; 
    283296    } 
    284297    if (@unlearnable_moves) { 
     
    287300            $move_names[-1] = 'or ' . $move_names[-1]; 
    288301        } 
    289         $s->{error_msg} = $pokemon->name . " cannot inherit " 
    290                         . join(', ', @move_names) . '.'; 
     302        $s->{error_msg} = 'No egg in the ' . $basic_form->name . ' family can' 
     303                        . ' inherit ' . join(', ', @move_names) . '.'; 
    291304        return; 
    292305    } 
     
    329342    # tree iteratively from there 
    330343    my %egg_groups_tree = ( 
    331         groups   => [ $pokemon->breeding_groups ], 
    332         pokemon  => [ $pokemon ], 
     344        groups   => [ $breedable_form->breeding_groups ], 
     345        pokemon  => [ @egg_forms ], 
    333346        children => [], 
    334347    );