Perl
YAML
PokemonGo

Data::Pokemon::GoというPerlモジュールをリリースした

More than 1 year has passed since last update.

Data::Pokemon::Goというperlモジュールをリリースさせていただきましたので、取り急ぎ日本語版の解説をまとめさせていただきます。

共同編集者絶賛募集中!

正直、一人で更新/メンテするのは大変なデータ量(執筆時点で386種ですぜ!)なので、この場を借りてモジュールのコンセプトに共感してくださる(≒更新を手伝ってくださる)有志を募りたいと思います。

大元のデータはYAMLなので、言語問わず、YAMLの編集が可能な方であればどなたでもPRできます。よろしくお願いいたします。

モジュールの概要

現時点では「直接ソース読めよ」というレベルの英語ドキュメントしか用意できてませんので、日本語のドキュメントを書くつもりでここに記しますね。

開発の動機

ポケモンGOにどハマりしてる割には、相性を全然覚えられなくて逐一ググってたので、LINE BOTを作成しました。
8E634C74-94BE-45D9-936E-1483F839CC60.pngq-kl0z-wez.png
同じような悩みをお持ちの方はぜひ友達になってください。執筆時点で友達数は6人です(キリッ)

で、このBOTで実装している、ポケモン名を認識させジム戦に有利なタイプのポケモンを提案するためのサブモジュールがこちらになりまして、このBOTにゆくゆくは個体値推定などをさせたいと思って途中まで実装したのがこちら
スキルについて攻略サイトではDPS至上主義で掲載していることに疑問を感じ、評価基軸にEPSとモーションの小ささ(避けやすさ)を加味して評価点を再計算させようとしたのがこちらです。

166個のわざについて手入力をするまでは(その時は)どうにかなりましたが、386種のポケモンのタイプ(入力済み)、および覚えるわざと種族値、進化の系統など(カントー地方のみ入力済み)を全て詳細に入力するのは骨が折れるので、いずれ公開予定だったものですから、公開を前倒しにして更新の手間を省けるなら、と思いました。

実装済みの機能

相性検索(高精度)

use Data::Pokemon::Go::Pokemon;
my $pg = Data::Pokemon::Go::Pokemon->new( name => 'カイリュー' );
print $pg->effective();    # こおり ドラゴン いわ フェアリー
print $pg->invalid();      # くさ みず むし じめん ほのお かくとう
print $pg->advantage();    # はがね でんき いわ
print $pg->disadvantage(); # むし かくとう ドラゴン くさ
print $pg->recommended();  # こおり いわ フェアリー

タイプ別の「こうかばつぐん」および「いまひとつ」の基本的な相性情報、およびそこから有利に戦える(敵の属性一致わざを軽減する)タイプの提案、その逆の提示、また、それらの情報を考慮して最終的に選ぶべき(敵の技を軽減しつつ大ダメージを与える)タイプの提案が可能です。複数候補がある場合は、効率の良い順にソートされた値を返します。

伝説レイドでカビゴン&ハピナス使ってる方が未だに散見される点を、筆者は非常に残念に感じており、そういう人たちにこそ相性を検索して覚えて欲しいと思っています。

個体値計算

予定になかったのですが、この記事を読んだら無性に実装したくなり、優先度を無視して実装してしまいました。

例えばたまごから孵化したてまたはレイドでゲットしたばかりの場合、理論上のCPの最大値が計算可能です。

use Data::Pokemon::Go::IV;
my $iv = Data::Pokemon::Go::IV->new();
print $iv->_calculate_CP( name => 'カイリュー', LV => 20, ST => 15, AT => 15, DF => 15 );
# 2046

例えばこれをオール14などにした場合、

print $iv->_calculate_CP( name => 'カイリュー', LV => 20, ST => 14, AT => 14, DF => 14 );
# 2029

妥協できる個体値を持つCPの目安を知ることができます(一部ガチ勢に重宝される機能?)

TODO

  • 日本語版ドキュメントの作成
  • ジョウト地方およびホウエン地方のポケモンの詳細データのYAML化
  • 多言語対応(英語以外も、全てのプレイ可能な言語に対応したモジュールにしたい)
  • リーダーの評価から個体値を推定するアルゴリズムの作成(実装は思いついてるのですが、なかなかコードにする機会が見当たらない。)
  • testの厳格化(なかなかいいテストが思い浮かばない)

最後に

細かなtypoの指摘とかでもいいです!どしどしPR送ってください!