diff --git a/Chopperman.psd b/Chopperman.psd
new file mode 100644
index 000000000..050e68187
Binary files /dev/null and b/Chopperman.psd differ
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..edac4f63d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,33 @@
+# optc-db.github.io
+
+The Continuation of the highly loved and apreciated OPTC Database.
+
+This is a Database for all things One Piece Treasure Cruise, including Stats, Drops, Sockets and a Damage Calculator.
+
+This project is written in html and js, using angular, bootstrap and jquery.
+
+It is hosted on github pages, although you can just download it and run a local copy.
+
+# Team
+
+* Mondfischer - Took over the Project and responsible for adding features and data
+* Zeenigami - Joined shorty after and helps out with data and features (And usually adds the newest Units)
+* xfts - The newest member for fact checking and everything concerning translations
+* Everyone else on Discord/Reddit/Github etc that reports errors and wrong data
+
+# Installation
+
+Just download it and run it in some kind of Live preview or via xampp. Or better yet access it via http://optc-db.github.io
+
+Keep in mind though that the images are not hosted here, but instead linked from the offical site. So you would need an internet connection to see them.
+
+# Contact
+ You can reach us on Discord @Mondfischer and @Zeenigami and on Reddit as Mondfischer and Zee_n1
+
+ The site also has a google contact form, you can also open an Issue on here.
+
+# License
+
+ GNU General Public License
+
+ It's also in the Project named LICENSE.md.
diff --git a/characters/css/edgy.css b/characters/css/edgy.css
index e267634f0..b2a91d43c 100644
--- a/characters/css/edgy.css
+++ b/characters/css/edgy.css
@@ -131,3 +131,10 @@ a:hover { color: #53dccd; }
.pagination > li:hover > a {
color: white;
}
+
+@media (max-width: 1024px) {
+ #rightContainer {
+ background: #404040;
+ }
+
+}
diff --git a/characters/css/index.css b/characters/css/index.css
index 8cc1bc777..f7480dfee 100644
--- a/characters/css/index.css
+++ b/characters/css/index.css
@@ -1,3 +1,14 @@
+/*
+Enable for April First
+#rightContainer {
+-moz-transform: scale(1, -1);
+-webkit-transform: scale(1, -1);
+-o-transform: scale(1, -1);
+-ms-transform: scale(1, -1);
+transform: scale(1, -1);
+}
+*/
+
@font-face {
font-family: 'icomoon';
src:url('../../res/icomoon.eot?xewvs9');
@@ -123,6 +134,7 @@ input[type="text"] {
.BLOCK { background: darkslateblue; }
.BOMB { background: maroon; }
.G { background: orange; }
+.EMPTY { background: #777; }
.cell-STR { font-weight: bold; color: red; }
.cell-QCK { font-weight: bold; color: blue; }
@@ -315,7 +327,7 @@ input[type="text"] {
}
#controllers > span:not(.separator) {
- width: 14.28%;
+ width: 9.09090909%;
display: inline-block;
padding: 2px 0;
cursor: pointer;
@@ -842,6 +854,10 @@ unit > a:hover, .clickable:hover {
height: 320px;
}
+.chart-line {
+ height: 338px !important;
+}
+
/*******************
* SLOT THUMBNAILS *
*******************/
diff --git a/characters/index.html b/characters/index.html
index 2c406572a..3c5a6e1a2 100644
--- a/characters/index.html
+++ b/characters/index.html
@@ -4,7 +4,9 @@
@@ -69,6 +71,10 @@
ng-model="filters.nonFarmable.special" ng-click="onDropFilterClick($event,true)">Special-onlyHide special-only
+ Ray Shop UnitHide Ray Shop Unit
Character Log filters a {
+ -webkit-transform: translateX(-18em);
+ -ms-transform: translateX(-18em);
+ transform: translateX(-18em);
+}
+
+#links-button.active .rotater:nth-child(7) > a {
+ -webkit-transform: translateX(-21em);
+ -ms-transform: translateX(-21em);
+ transform: translateX(-21em);
+}
+
+#links-button.active .rotater:nth-child(8) > a {
+ -webkit-transform: translateX(-24em);
+ -ms-transform: translateX(-24em);
+ transform: translateX(-24em);
+}
+
+#links-button.active .rotater:nth-child(9) > a {
+ -webkit-transform: translateY(-4em);
+ -ms-transform: translateY(-4em);
+ transform: translateY(-4em);
+}
+
#link-damage > .btn { background: #85C1F5; }
#link-characters > .btn { background: #7FCA9F; }
#link-drops > .btn { background: #F4BA70; }
#link-tally > .btn { background: #E96D63; }
#link-report > .btn { background: orchid; }
#link-slots > .btn { background: #99cc66; }
+#links-home > .btn { background: #939393; }
+#link-prob > .btn { background: #DEA5A4; }
+#link-turtles > .btn { background: #ce4500; }
+#link-es > .btn { background: linear-gradient(#ff0000 30%, #ffff00 30%, #ffff00 70%, #ff0000 30%); }
.tip { color: black; }
@@ -191,3 +219,6 @@
text-decoration: none !important;
}
+.top {
+ left: -1em;
+}
diff --git a/common/data/abilities.js b/common/data/abilities.js
index cbb5140f8..b7ffd4783 100644
--- a/common/data/abilities.js
+++ b/common/data/abilities.js
@@ -27,11 +27,11 @@ window.abilities = [
},
{
- name: 'Silence resistance',
+ name: 'Despair resistance',
levels: [
- [ 10, 'Silence duration reduced by 1 turn' ],
- [ 15, 'Silence duration reduced by 2 turns' ],
- [ 20, 'Silence duration reduced by 3 turns' ]
+ [ 10, 'Despair duration reduced by 1 turn' ],
+ [ 15, 'Despair duration reduced by 2 turns' ],
+ [ 20, 'Despair duration reduced by 3 turns' ]
]
},
@@ -62,7 +62,7 @@ window.abilities = [
levels: [
[ 5, 'Boosted chances (20%) of getting matching orbs' ],
[ 10, 'Boosted chances (22.2%) of getting matching orbs' ],
- [ 20, 'Boosted chances (25%) of getting matching orbs' ],
+ [ 20, 'Boosted chances (25%) of getting matching orbs' ]
]
},
@@ -71,7 +71,7 @@ window.abilities = [
levels: [
[ 10, 'Poison damage reduced by 20%' ],
[ 15, 'Poison damage reduced by 50%' ],
- [ 20, 'Poison damage reduced by 100%' ],
+ [ 20, 'Poison damage reduced by 100%' ]
]
},
@@ -79,7 +79,7 @@ window.abilities = [
name: 'Map damage resistance',
levels: [
[ 10, 'Map damage reduced by 50%' ],
- [ 20, 'Map damage reduced by 100%' ],
+ [ 20, 'Map damage reduced by 100%' ]
]
},
diff --git a/common/data/aliases.js b/common/data/aliases.js
index 20b0d058c..8bd06c053 100644
--- a/common/data/aliases.js
+++ b/common/data/aliases.js
@@ -1,165 +1,1432 @@
window.aliases = {
- 4: [ 'G2' ],
- 15: [ 'GPU' ],
- 16: [ 'Usopp' ],
- 63: [ 'Hachi' ],
- 207: [ 'Mr. 2 Bonclay' ],
- 208: [ 'Mr. 2 Bonclay Bombardier Arabesque' ],
- 209: [ 'Nico Robin' ],
- 217: [ 'Mistake', 'G3' ],
- 221: [ 'Towel Nami' ],
- 224: [ 'Sanji' ],
- 225: [ 'Sanji' ],
- 247: [ 'Chopperman', 'Chopper Man' ],
- 248: [ 'Monster Chopper' ],
- 249: [ 'Monster Chopper' ],
- 260: [ 'Whitebeard' ],
- 317: [ 'Califa', 'Calipha', 'Kalipha' ],
- 318: [ 'Beautiful Secretary Califa', 'Beautiful Secretary Calipha', 'Beautiful Secretary Kalipha' ],
- 334: [ 'Lapahn', 'Lapan', 'Rapan' ],
- 335: [ 'Lapahn Adult', 'Lapan Adult', 'Rapan Adult' ],
- 383: [ 'Crocodile' ],
- 384: [ 'Strikerdile', 'Impactdile' ],
- 393: [ 'Kumashi' ],
- 394: [ 'Inuppe' ],
- 408: [ 'Slasherdile' ],
- 409: [ 'Jinbe', 'Jimbei', 'Jinbei' ],
- 410: [ 'Jinbe Warlord of the Sea', 'Jimbei Warlord of the Sea', 'Jinbei Warlord of the Sea' ],
- 417: [ 'Doffy' ],
- 418: [ 'Doffy' ],
- 419: [ 'Kimono Sanji' ],
- 420: [ 'Kimono Luffy' ],
- 421: [ 'Kimono Zoro' ],
- 422: [ 'Kimono Nami' ],
- 425: [ 'Ryuuma' ],
- 432: [ 'Sarkies' ],
- 437: [ 'Valentine Perona' ],
- 438: [ 'Valentine Perona' ],
- 439: [ 'Valentine Vivi' ],
- 440: [ 'Valentine Vivi' ],
- 444: [ 'Carue', 'Karue' ],
- 445: [ 'Captain Karue and the Supersonic Duck Squadron', 'Captain Carue and the Supersonic Duck Squadron' ],
- 446: [ 'Blackbeard' ],
- 450: [ 'Namur' ],
- 451: [ 'One-Hit Namur' ],
- 461: [ 'Fugitive Bentham Mr. 2 Bonclay' ],
- 462: [ 'Prison Break Expert Mr. 2 Bonclay' ],
- 472: [ 'Enel\'s Elect: Red Guard Skypiea Enforcer' ],
- 473: [ 'Enel\'s Elect: Blue Guard Skypiea Enforcer' ],
- 474: [ 'Enel\'s Elect: Green Guard Skypiea Enforcer' ],
- 475: [ 'Enel\'s Elect: Yellow Guard Skypiea Enforcer' ],
- 476: [ 'Enel\'s Elect: Black Guard Skypiea Enforcer' ],
- 517: [ 'Usoppun' ],
- 518: [ 'Usoppun, Pupil of Heracles\'n' ],
- 519: [ 'Strong World Luffy', 'SW Luffy' ],
- 520: [ 'Strong World Luffy', 'SW Luffy' ],
- 521: [ 'Strong World Sanji', 'SW Sanji' ],
- 522: [ 'Strong World Sanji', 'SW Sanji' ],
- 523: [ 'Strong World Nami', 'SW Nami' ],
- 524: [ 'Strong World Nami', 'SW Nami' ],
- 525: [ 'Strong World Brook', 'SW Brook' ],
- 526: [ 'Strong World Brook', 'SW Brook' ],
- 527: [ 'Strong World Chopper', 'SW Chopper' ],
- 528: [ 'Strong World Chopper', 'SW Chopper' ],
- 529: [ 'Strong World Shanks', 'SW Shanks' ],
- 530: [ 'Strong World Shanks', 'SW Shanks' ],
- 531: [ 'Sakura Robin' ],
- 532: [ 'Sakura Robin' ],
- 533: [ 'Sakura Brook' ],
- 534: [ 'Sakura Brook' ],
- 535: [ 'Sakura Nami' ],
- 536: [ 'Sakura Nami' ],
- 543: [ 'Wiper' ],
- 544: [ 'Wiper, Descendant of Great Warrior Calgara' ],
- 545: [ 'Enel' ],
- 546: [ 'God Enel' ],
- 553: [ 'Strong World Zoro', 'SW Zoro' ],
- 554: [ 'Strong World Zoro', 'SW Zoro' ],
- 555: [ 'Strong World Usopp', 'SW Usopp' ],
- 556: [ 'Strong World Usopp', 'SW Usopp' ],
- 557: [ 'Strong World Robin', 'SW Robin' ],
- 558: [ 'Strong World Robin', 'SW Robin' ],
- 559: [ 'Strong World Franky', 'SW Franky' ],
- 560: [ 'Strong World Franky', 'SW Franky' ],
- 561: [ 'Strong World Ace', 'SW Ace' ],
- 562: [ 'Strong World Ace', 'SW Ace' ],
- 567: [ 'Big Pan' ],
- 570: [ 'Afro Luffy', 'Afroluffy' ],
- 571: [ 'Afro Luffy', 'Afroluffy' ],
- 577: [ 'Log Luffy' ],
- 578: [ 'Log Luffy' ],
- 579: [ 'Log Zoro' ],
- 580: [ 'Log Zoro' ],
- 583: [ 'Laki' ],
- 596: [ 'Log Chopper' ],
- 591: [ 'Princess Turtle' ],
- 592: [ 'Princess Turtle' ],
- 593: [ 'Princess Turtle' ],
- 594: [ 'Princess Turtle' ],
- 595: [ 'Princess Turtle' ],
- 597: [ 'Log Chopper' ],
- 602: [ 'Enel, 200 Million Volt Thunder God' ],
- 603: [ 'Enel the Lightning Human, 200 Million Volt Thunder God' ],
- 604: [ 'Log Sanji' ],
- 605: [ 'Log Sanji' ],
- 611: [ 'Pudding Pudding' ],
- 612: [ 'Log Brook' ],
- 613: [ 'Log Brook' ],
- 637: [ 'Hachi, Takoyaki Stand Owner' ],
- 650: [ 'Log Nami' ],
- 651: [ 'Log Nami' ],
- 660: [ 'Log Usopp' ],
- 661: [ 'Log Usopp' ],
- 678: [ 'Log Robin' ],
- 679: [ 'Log Robin' ],
- 710: [ 'Log Franky' ],
- 711: [ 'Log Franky' ],
- 725: [ 'Log Vivi' ],
- 726: [ 'Log Vivi' ],
- 728: [ 'Califa, Cipher Pol No.9', 'Calipha, Cipher Pol No.9', 'Kalipha, Cipher Pol No.9' ],
- 729: [ 'Califa Rokushiki, Cipher Pol No.9', 'Calipha Rokushiki, Cipher Pol No.9', 'Kalipha Rokushiki, Cipher Pol No.9' ],
- 744: [ 'Log Ace' ],
- 745: [ 'Log Ace' ],
- 751: [ 'Califa, CP9\'s Dark Justice', 'Calipha, CP9\'s Dark Justice', 'Kalipha, CP9\'s Dark Justice' ],
- 752: [ 'Califa, CP9\'s Strongest Generation', 'Calipha, CP9\'s Strongest Generation', 'Kalipha, CP9\'s Strongest Generation' ],
- 761: [ 'Halloween Luffy' ],
- 762: [ 'Halloween Usopp' ],
- 763: [ 'Halloween Franky' ],
- 764: [ 'Halloween Nami' ],
- 765: [ 'Halloween Chopper' ],
- 766: [ 'Halloween Zoro' ],
- 767: [ 'Halloween Robin' ],
- 768: [ 'Halloween Sanji' ],
- 769: [ 'Halloween Brook' ],
- 782: [ 'Kimono Tashigi' ],
- 783: [ 'Kimono Tashigi' ],
- 786: [ 'Dr. Hiruruk' ],
- 787: [ 'Dr. Hiruruk, Quack Doctor' ],
- 790: [ 'Usopp Pirates' ],
- 791: [ 'Usopp Pirates' ],
- 792: [ 'Iceberg' ],
- 793: [ 'Iceberg, Mayor of W7 and President of Galley-La Company' ],
- 799: [ 'Sea Lapahn, Sea Animal Pirates', 'Sea Lapan, Sea Animal Pirates', 'Sea Rapan, Sea Animal Pirates' ],
- 801: [ 'Log Bon Clay', 'Log Bonclay' ],
- 802: [ 'Log Bon Clay', 'Log Bonclay' ],
- 813: [ 'Spider Monkey' ],
- 832: [ 'Wiper, Warrior of Shandia' ],
- 833: [ 'Berserker Wiper, Warrior of Shandia' ],
- 849: [ 'Franky, Tom\'s Workers' ],
- 850: [ 'Iceburg, Tom\'s Workers' ],
- 866: [ 'Kimono Robin' ],
- 867: [ 'Kimono Usopp' ],
- 868: [ 'Kimono Chopper' ],
- 869: [ 'Doffy' ],
- 870: [ 'Doffy' ],
- 873: [ 'Senor Pink', 'Senior Pink' ],
- 874: [ 'Senor Pink', 'Senior Pink' ],
- 877: [ 'Giolla' ],
- 878: [ 'Giolla, Donquixote Pirates' ],
- 885: [ 'Kimono Jinbe', 'Kimono Jimbei', 'Kimono Jinbei' ],
- 886: [ 'Kimono Mr. 1' ],
- 887: [ 'Kimono Buggy' ],
- 897: [ 'Kimono Crocodile' ],
- 898: [ 'Kimono Mr. 3', 'Kimono Galdino' ],
- 899: [ 'Kimono Mr. 2', 'Kimono Bonclay', 'Kimono Bon Clay' ]
+ 1: ['モンキー・D・ルフィ','Monkey D. Luffy'],
+ 2: ['モンキー・D・ルフィ ゴムゴムの銃(ピストル)','Monkey D. Luffy Gum-Gum Carabine'],
+ 3: ['モンキー・D・ルフィ ゴムゴムのバズーカ','Monkey D. Luffy Gum-Gum Bazooka'],
+ 4: ['モンキー・D・ルフィ ギア2','Monkey D. Luffy Gear 2','Monkey D. Luffy', ' G2'],
+ 5: ['ロロノア・ゾロ','Roronoa Zoro'],
+ 6: ['ロロノア・ゾロ 三・千・世・界','Roronoa Zoro Moulinet Infernal'],
+ 7: ['ロロノア・ゾロ 煩悩鳳(ポンドほう)','Roronoa Zoro Calibre'],
+ 8: ['ロロノア・ゾロ 阿修羅弌霧銀(あしゅらいちぶぎん)','Roronoa Zoro Brume Argentée'],
+ 9: ['ナミ','Nami'],
+ 10: ['ナミ トルネード=テンポ','Nami Tornado Tempo'],
+ 11: ['ナミ 蜃気楼=テンポ','Nami MirageTempo'],
+ 12: ['ナミ サンダーボルト=テンポ','Nami Fulguro Tempo'],
+ 13: ['ウソップ','Usopp'],
+ 14: ['ウソップ タバスコ星','Usopp Etoile Piquante'],
+ 15: ['ウソップ ゴールデンパウンド','Usopp Usopp-Pilon doré','GPU'],
+ 16: [ 'そげキング','Sniperking','Usopp'],
+ 17: ['サンジ','Sanji'],
+ 18: ['サンジ 整形ショット(パラージュショット)','Sanji Tir esthétique'],
+ 19: ['料理人サンジ 焼き石シチュー','Chef Sanji Ragoût bouillonnant'],
+ 20: ['サンジ 悪魔風脚 (ディアブルジャンブ)','Sanji Jambe du diable'],
+ 21: ['トニートニー・チョッパー','Tony Tony Chopper'],
+ 22: ['トニートニー・チョッパー 重量強化(ヘビーポイント)','Tony Tony Chopper Weight Boost'],
+ 23: ['トニートニー・チョッパー 頭脳強化(ブレーンポイント)','Tony Tony Chopper Brain Boost'],
+ 24: ['トニートニー・チョッパー 腕力強化(アームポイント)','Tony Tony Chopper Arm Boost'],
+ 25: ['トニートニー・チョッパー 角強化(ホーンポイント)','Tony Tony Chopper Horn Boost'],
+ 26: ['トニートニー・チョッパー 毛皮強化(ガードポイント)','Tony Tony Chopper Guard Boost'],
+ 27: ['ヒグマ','Higuma'],
+ 28: ['近海の主(ヌシ)','Seigneur de la côte'],
+ 29: ['金棒のアルビダ','Alvida à la Massue'],
+ 30: ['金棒のアルビダ スベスベの実','Alvida à la Massue Fruit Glisse-Glisse'],
+ 31: ['コビー','Kobby'],
+ 32: ['雑用コビー','Kobby le mousse'],
+ 33: ['ヘルメッポ','Hermep'],
+ 34: ['雑用ヘルメッポ','Hermep le mousse'],
+ 35: ['斧手のモーガン','Morgan le Hacheur'],
+ 36: ['モージ&リッチー','Morge et Richy'],
+ 37: ['曲芸のカバジ','Cabaji l\'acrobate'],
+ 38: ['バギー','Baggy'],
+ 39: ['道化のバギー','Baggy le Clown'],
+ 40: ['ガイモン','Gaimon'],
+ 41: ['シャム','Sham'],
+ 42: ['ブチ','Buchi'],
+ 43: ['1・2のジャンゴ','Jango l\'hypnotiseur'],
+ 44: ['ダンシングジャンゴ','Jango le danseur'],
+ 45: ['キャプテン・クロ','Capitaine Kuro'],
+ 46: ['百計のクロ','Kuro les pattes de velours'],
+ 47: ['ヨサク','Yosaku'],
+ 48: ['ジョニー','Jhonny'],
+ 49: ['鉄拳のフルボディ','Fullbody au poing d\'acier'],
+ 50: ['パティ','Patty'],
+ 51: ['カルネ','Carne'],
+ 52: ['料理長ゼフ','Zeff le chef'],
+ 53: ['ギン','Gyn'],
+ 54: ['鬼人ギン','Gyn le démon enragé'],
+ 55: ['パール','Pearl'],
+ 56: ['ファイヤーパール','Fire Pearl'],
+ 57: ['首領・クリーク','Don Krieg '],
+ 58: ['首領・クリーク 猛毒ガス弾「M・H・5」','Don Krieg Bombe à gaz toxique MH5'],
+ 59: ['ネズミ','Nezumi'],
+ 60: ['モーム','Meuh-Meuh'],
+ 61: ['チュウ','Smack'],
+ 62: ['クロオビ','Kuroobi'],
+ 63: ['はっちゃん','Octy', 'Hachi' ],
+ 64: ['六刀流のハチ','Octy aux six lames'],
+ 65: ['アーロン','Arlong'],
+ 66: ['ブチ切れアーロン 鮫(シャ-ク)・ON・歯車(トゥース)','Arlong enragé Squalo Crunch'],
+ 67: ['たしぎ','Tashigi'],
+ 68: ['たしぎ 海軍本部少尉','Tashigi Lieutenant-colonel de la Marine'],
+ 69: ['スモーカー','Smoker'],
+ 70: ['白猟のスモーカー','Smoker le chasseur blanc'],
+ 71: ['ミス・ウェンズデー','Miss Wednesday'],
+ 72: ['ネフェルタリ・ビビ','Vivi Nerfertari'],
+ 73: ['王女ビビ','Princesse Vivi'],
+ 74: ['ポートガス・D・エース','Portgas D. Ace'],
+ 75: ['ポートガス・D・エース 鏡火炎(きょうかえん)','Portgas D. Ace Pyro-miroir'],
+ 76: ['シャンクス','Shanks'],
+ 77: ['赤髪のシャンクス','Shanks le Roux'],
+ 78: ['赤盗人ペンギン','Pingouin chapardeur rouge'],
+ 79: ['青盗人ペンギン','Pingouin chapardeur bleu'],
+ 80: ['緑盗人ペンギン','Pingouin chapardeur vert'],
+ 81: ['黄盗人ペンギン','Pingouin chapardeur jaune'],
+ 82: ['黒盗人ペンギン','Pingouin chapardeur noir'],
+ 83: ['虹盗人ペンギン','Pingouin chapardeur arc-en-ciel'],
+ 84: ['赤海賊ペンギン','Pingouin pirate rouge'],
+ 85: ['赤海賊ペンギン','Pingouin pirate bleu'],
+ 86: ['赤海賊ペンギン','Pingouin pirate vert'],
+ 87: ['赤海賊ペンギン','Pingouin pirate jaune'],
+ 88: ['赤海賊ペンギン','Pingouin pirate noir'],
+ 89: ['赤カブトヤドカリ','Bernard-l\'ermite rouge'],
+ 90: ['赤カブトヤドカリ','Bernard-l\'ermite bleu'],
+ 91: ['赤カブトヤドカリ','Bernard-l\'ermite vert'],
+ 92: ['赤カブトヤドカリ','Bernard-l\'ermite jaune'],
+ 93: ['赤カブトヤドカリ','Bernard-l\'ermite noir'],
+ 94: ['赤カブトヤドカリ','Bernard-l\'ermite arc-en-ciel'],
+ 95: ['赤ヨロイガニ','Crabe blindé rouge'],
+ 96: ['赤ヨロイガニ','Crabe blindé bleu'],
+ 97: ['赤ヨロイガニ','Crabe blindé vert'],
+ 98: ['赤ヨロイガニ','Crabe blindé jaune'],
+ 99: ['赤ヨロイガニ','Crabe blindé noir'],
+ 100: ['赤しま番竜','Dragon rayé rouge'],
+ 101: ['赤しま番竜','Dragon rayé bleu'],
+ 102: ['赤しま番竜','Dragon rayé vert'],
+ 103: ['赤しま番竜','Dragon rayé jaune'],
+ 104: ['赤しま番竜','Dragon rayé noir'],
+ 105: ['赤タカラガメ','Tortue-trésor rouge','Baby Turtle'],
+ 106: ['赤タカラガメ','Tortue-trésor bleue','Baby Turtle'],
+ 107: ['赤タカラガメ','Tortue-trésor verte','Baby Turtle'],
+ 108: ['赤タカラガメ','Tortue-trésor jaune','Baby Turtle'],
+ 109: ['赤タカラガメ','Tortue-trésor noire','Baby Turtle'],
+ 110: ['赤ダイミョウガメ','Tortue noble rouge'],
+ 111: ['赤ダイミョウガメ','Tortue noble bleue'],
+ 112: ['赤ダイミョウガメ','Tortue noble verte'],
+ 113: ['赤ダイミョウガメ','Tortue noble jaune'],
+ 114: ['赤ダイミョウガメ','Tortue noble noire'],
+ 115: ['タツノコ','Poney marin'],
+ 116: ['タツノワカ','Poulain marin'],
+ 117: ['タツノミコト','Cheval marin'],
+ 118: ['タツノオウ','Étalon marin'],
+ 119: ['カタナ山賊',''],
+ 120: ['ピストル山賊',''],
+ 121: ['格闘隊 雑用 レッドパイレーツ',''],
+ 122: ['格闘隊 雑用 ブルーパイレーツ',''],
+ 123: ['格闘隊 雑用 グリーンパイレーツ',''],
+ 124: ['格闘隊 雑用 イエローパイレーツ',''],
+ 125: ['格闘隊 雑用 ブラックパイレーツ',''],
+ 126: ['斬撃隊 雑用 レッドパイレーツ',''],
+ 127: ['斬撃隊 雑用 ブルーパイレーツ',''],
+ 128: ['斬撃隊 雑用 グリーンパイレーツ',''],
+ 129: ['斬撃隊 雑用 イエローパイレーツ',''],
+ 130: ['斬撃隊 雑用 ブラックパイレーツ',''],
+ 131: ['突撃隊 雑用 レッドパイレーツ',''],
+ 132: ['突撃隊 雑用 ブルーパイレーツ',''],
+ 133: ['突撃隊 雑用 グリーンパイレーツ',''],
+ 134: ['突撃隊 雑用 イエローパイレーツ',''],
+ 135: ['突撃隊 雑用 ブラックパイレーツ',''],
+ 136: ['狙撃隊 雑用 レッドパイレーツ',''],
+ 137: ['狙撃隊 雑用 ブルーパイレーツ',''],
+ 138: ['狙撃隊 雑用 グリーンパイレーツ',''],
+ 139: ['狙撃隊 雑用 イエローパイレーツ',''],
+ 140: ['狙撃隊 雑用 ブラックパイレーツ',''],
+ 141: ['砲撃手 雑用',''],
+ 142: ['格闘隊 隊員 レッドパイレーツ',''],
+ 143: ['格闘隊 隊員 ブルーパイレーツ',''],
+ 144: ['格闘隊 隊員 グリーンパイレーツ',''],
+ 145: ['格闘隊 隊員 イエローパイレーツ',''],
+ 146: ['格闘隊 隊員 ブラックパイレーツ',''],
+ 147: ['斬撃隊 隊員 レッドパイレーツ',''],
+ 148: ['斬撃隊 隊員 ブルーパイレーツ',''],
+ 149: ['斬撃隊 隊員 グリーンパイレーツ',''],
+ 150: ['斬撃隊 隊員 イエローパイレーツ',''],
+ 151: ['斬撃隊 隊員 ブラックパイレーツ',''],
+ 152: ['突撃隊 隊員 レッドパイレーツ',''],
+ 153: ['突撃隊 隊員 ブルーパイレーツ',''],
+ 154: ['突撃隊 隊員 グリーンパイレーツ',''],
+ 155: ['突撃隊 隊員 イエローパイレーツ',''],
+ 156: ['突撃隊 隊員 ブラックパイレーツ',''],
+ 157: ['狙撃隊 隊員 レッドパイレーツ',''],
+ 158: ['狙撃隊 隊員 ブルーパイレーツ',''],
+ 159: ['狙撃隊 隊員 グリーンパイレーツ',''],
+ 160: ['狙撃隊 隊員 イエローパイレーツ',''],
+ 161: ['狙撃隊 隊員 ブラックパイレーツ',''],
+ 162: ['砲撃手 腕利き',''],
+ 163: ['ボディガード・サングラス',''],
+ 164: ['ボディガード・ヒゲ',''],
+ 165: ['ナックルごろつき クロネコ海賊団',''],
+ 166: ['サーベルごろつき クロネコ海賊団',''],
+ 167: ['ナギナタごろつき クロネコ海賊団',''],
+ 168: ['ピストルごろつき クロネコ海賊団',''],
+ 169: ['バズーカごろつき クロネコ海賊団',''],
+ 170: ['格闘隊 隊長',''],
+ 171: ['斬撃隊 隊長',''],
+ 172: ['突撃隊 隊長',''],
+ 173: ['狙撃隊 隊長',''],
+ 174: ['遊撃手 凄腕',''],
+ 175: ['空手使いの魚人 アーロン一味',''],
+ 176: ['カタナ使いの魚人 アーロン一味',''],
+ 177: ['ヤリ使いの魚人 アーロン一味',''],
+ 178: ['銃使いの魚人 アーロン一味',''],
+ 179: ['ナックル三等兵 海軍',''],
+ 180: ['サーベル三等兵 海軍',''],
+ 181: ['ナギナタ三等兵 海軍',''],
+ 182: ['ピストル三等兵 海軍',''],
+ 183: ['バズーカ三等兵 海軍',''],
+ 184: ['ナックル一等兵 海軍',''],
+ 185: ['サーベル一等兵 海軍',''],
+ 186: ['ナギナタ一等兵 海軍',''],
+ 187: ['ピストル一等兵 海軍',''],
+ 188: ['バズーカ一等兵 海軍',''],
+ 189: ['赤タイロウガメ',''],
+ 190: ['青タイロウガメ',''],
+ 191: ['青タイロウガメ',''],
+ 192: ['青タイロウガメ',''],
+ 193: ['青タイロウガメ',''],
+ 194: ['ナックル少尉 海軍本部',''],
+ 195: ['サーベル少尉 海軍本部',''],
+ 196: ['ナギナタ少尉 海軍本部',''],
+ 197: ['ピストル少尉 海軍本部',''],
+ 198: ['バズーカ少尉 海軍本部',''],
+ 199: ['Mr.5 鼻空想砲(ノーズファンシーキャノン)','', 'Mr 5'],
+ 200: ['Mr.5 そよ風息爆弾(ブリーズ・ブレス・ボム)','', 'Mr 5'],
+ 201: ['ミス・バレンタイン',''],
+ 202: ['ミス・バレンタイン 1万キロギロチン',''],
+ 203: ['Mr.3','','Mr 3'],
+ 204: ['Mr.3 特大キャンドルサービスセット','', 'Mr 3'],
+ 205: ['ミス・ゴールデンウィーク',''],
+ 206: ['ミス・ゴールデンウィーク カラーズトラップ なごみの緑',''],
+ 207: ['Mr.2・ボン・クレー ','', 'Mr. 2 Bonclay', 'Mr 2 Bonclay' ],
+ 208: ['Mr.2・ボン・クレー 爆撃白鳥アラベスク(ボンバルディエ)','', 'Mr. 2 Bonclay Bombardier Arabesque', 'Mr 2 Bonclay Bombardier Arabesque' ],
+ 209: ['ミス・オールサンデー バロックワークス副社長','', 'Nico Robin' ],
+ 210: ['ニコ・ロビン',''],
+ 211: ['Mr.9','','Mr 9'],
+ 212: ['Mr.9 (熱血ナイン根性バット)','','Mr 9 Hot Blooded Bat'],
+ 213: ['ラブーン',''],
+ 214: ['ラブーン(ルフィ落書き)',''],
+ 215: ['大王イカ',''],
+ 216: ['モンキー・D・ルフィ(ゴムゴムの風船)',''],
+ 217: ['モンキー・D・ルフィ(ギア3)','', 'Mistake', 'G3','Gear 3' ],
+ 218: ['ゾロ_刀狼流し(とうろうながし)',''],
+ 219: ['ロロノア・ゾロ_獅子歌歌(ししソンソン)','','LS Zoro'],
+ 220: ['ナミ(ファイン=テンポ)',''],
+ 221: ['ナミ(幸せパンチ)','', 'Towel Nami','TNami' ],
+ 222: ['ウソップ(ウソップハンマー)',''],
+ 223: ['ウソップ(衝撃(インパクト))',''],
+ 224: ['Mr.プリンス(羊肉(ムートン)ショット)','', 'Sanji', 'Mr Prince Mutton Shot'],
+ 225: ['Mr.プリンス(仔牛肉(ヴォー)ショット)','', 'Sanji', 'Mr Prince Veau Shot' ],
+ 226: ['ジュラキュール・ミホーク','','Raidhawk'],
+ 227: ['鷹の目のミホーク','','Raidhawk'],
+ 228: ['脱獄モーガン',''],
+ 229: ['寝返りのジャンゴ',''],
+ 230: ['両鉄拳のフルボディ',''],
+ 231: ['ヒナ',''],
+ 232: ['黒檻のヒナ',''],
+ 233: ['Mr.8','','mr 8'],
+ 234: ['Mr.8 イガラッパッパ','','mr 8'],
+ 235: ['ミス・マンデー',''],
+ 236: ['ミス・マンデー カ・イ・リ・キ メリケン',''],
+ 237: ['ナックルミリオンズ バロックワークス',''],
+ 238: ['サーベルミリオンズ バロックワークス',''],
+ 239: ['ナギナタミリオンズ バロックワークス',''],
+ 240: ['ピストルミリオンズ バロックワークス',''],
+ 241: ['バズーカミリオンズ バロックワークス',''],
+ 242: ['ナックルビリオンズ バロックワークス',''],
+ 243: ['サーベルビリオンズ バロックワークス',''],
+ 244: ['ナギナタビリオンズ バロックワークス',''],
+ 245: ['ピストルビリオンズ バロックワークス',''],
+ 246: ['バズーカビリオンズ バロックワークス',''],
+ 247: ['チョッパーマン','', 'Chopperman', 'Chopper Man' ],
+ 248: ['トニートニー・チョッパー 暴走前','', 'Raid Monster Chopper' ],
+ 249: ['トニートニー・チョッパー 暴走後','', 'Raid Monster Chopper' ],
+ 250: ['マルコ',''],
+ 251: ['不死鳥マルコ',''],
+ 252: ['ジョズ',''],
+ 253: ['ダイヤモンド・ジョズ',''],
+ 254: ['ビスタ',''],
+ 255: ['花剣のビスタ',''],
+ 256: ['イゾウ',''],
+ 257: ['短筒使いのイゾウ',''],
+ 258: ['ブラメンコ',''],
+ 259: ['大槌のブラメンコ',''],
+ 260: ['エドワード・ニューゲート','', 'Whitebeard' ],
+ 261: ['白ひげ',''],
+ 262: ['特訓コビー',''],
+ 263: ['曹長コビー',''],
+ 264: ['特訓ヘルメッポ',''],
+ 265: ['軍曹ヘルメッポ',''],
+ 266: ['虹海賊ペンギン',''],
+ 267: ['虹しま番竜',''],
+ 268: ['白猟のスモーカー ビローアバイク','','WC Smoker'],
+ 269: ['格闘隊 武装隊員 レッドパイレーツ',''],
+ 270: ['格闘隊 武装隊員 ブルーパイレーツ',''],
+ 271: ['格闘隊 武装隊員 グリーンパイレーツ',''],
+ 272: ['格闘隊 武装隊員 イエローパイレーツ',''],
+ 273: ['格闘隊 武装隊員 ブラックパイレーツ',''],
+ 274: ['斬撃隊 武装隊員 レッドパイレーツ',''],
+ 275: ['斬撃隊 武装隊員 ブルーパイレーツ',''],
+ 276: ['斬撃隊 武装隊員 グリーンパイレーツ',''],
+ 277: ['斬撃隊 武装隊員 イエローパイレーツ',''],
+ 278: ['斬撃隊 武装隊員 ブラックパイレーツ',''],
+ 279: ['突撃隊 武装隊員 レッドパイレーツ',''],
+ 280: ['突撃隊 武装隊員 ブルーパイレーツ',''],
+ 281: ['突撃隊 武装隊員 グリーンパイレーツ',''],
+ 282: ['突撃隊 武装隊員 イエローパイレーツ',''],
+ 283: ['突撃隊 武装隊員 ブラックパイレーツ',''],
+ 284: ['狙撃隊 武装隊員 レッドパイレーツ',''],
+ 285: ['狙撃隊 武装隊員 ブルーパイレーツ',''],
+ 286: ['狙撃隊 武装隊員 グリーンパイレーツ',''],
+ 287: ['狙撃隊 武装隊員 イエローパイレーツ',''],
+ 288: ['狙撃隊 武装隊員 ブラックパイレーツ',''],
+ 289: ['砲撃手 敏腕',''],
+ 290: ['Mr.13&ミス・フライデー 13日の金曜日(アンラッキーズ)','','Mr 13 and Ms Friday the Unluckies'],
+ 291: ['ドリー',''],
+ 292: ['ブロギー',''],
+ 293: ['トリケラトプス',''],
+ 294: ['レックス',''],
+ 295: ['ブロントザウルス',''],
+ 296: ['おつるさん',''],
+ 297: ['大参謀つる',''],
+ 298: ['モモンガ',''],
+ 299: ['オニグモ',''],
+ 300: ['赤アーマーロブスター',''],
+ 301: ['青アーマーロブスター',''],
+ 302: ['緑アーマーロブスター',''],
+ 303: ['黄アーマーロブスター',''],
+ 304: ['黒アーマーロブスター',''],
+ 305: ['モンキー・D・ガープ','','Raid'],
+ 306: ['ゲンコツのガープ','','Raid'],
+ 307: ['トラファルガー・ロー','','Supernova'],
+ 308: ['トラファルガー・ロー ROOMバジル・ホーキンス','','Supernova'],
+ 309: ['バジル・ホーキンス','','Supernova'],
+ 310: ['魔術師バジル・ホーキンス','','Supernova'],
+ 311: ['キラー','','Supernova'],
+ 312: ['殺戮武人キラー','','Supernova'],
+ 313: ['ウルージ','','Supernova'],
+ 314: ['怪僧ウルージ','','Supernova'],
+ 315: ['ベポ',''],
+ 316: ['武闘家のベポ',''],
+ 317: ['カリファ','', 'Califa', 'Calipha', 'Kalipha' ],
+ 318: ['美人秘書カリファ','', 'Beautiful Secretary Califa', 'Beautiful Secretary Calipha', 'Beautiful Secretary Kalipha' ],
+ 319: ['パウリー',''],
+ 320: ['パウリー 1番ドック艤装(ぎそう)・マスト職職長',''],
+ 321: ['ロブ・ルッチ',''],
+ 322: ['ロブ・ルッチ 1番ドック木びき・木釘職職長',''],
+ 323: ['カク',''],
+ 324: ['カク 1番ドック大工職職長',''],
+ 325: ['ルル',''],
+ 326: ['ワポル',''],
+ 327: ['ワポルハウス',''],
+ 328: ['ドルトン',''],
+ 329: ['ドルトン 野牛(バイソン)',''],
+ 330: ['チェス',''],
+ 331: ['クロマーリモ',''],
+ 332: ['チェスマーリモ',''],
+ 333: ['Dr.くれは',''],
+ 334: ['ラパーン','', 'Lapahn', 'Lapan', 'Rapan' ],
+ 335: ['ラパーン 成獣','', 'Lapahn Adult', 'Lapan Adult', 'Rapan Adult' ],
+ 336: ['フランキー',''],
+ 337: ['解体屋フランキー',''],
+ 338: ['キウイ',''],
+ 339: ['モズ',''],
+ 340: ['クラーケン スルメ',''],
+ 341: ['クラーケン 北極の怪物',''],
+ 342: ['赤パワース豚(トーン)','','Pig','Pork'],
+ 343: ['青パワース豚(トーン)','','Pig','Pork'],
+ 344: ['緑パワース豚(トーン)','','Pig','Pork'],
+ 345: ['黄パワース豚(トーン)','','Pig','Pork'],
+ 346: ['黒パワース豚(トーン)','','Pig','Pork'],
+ 347: ['ルビーパワース豚(トーン)','','Pig','Pork'],
+ 348: ['サファイアパワース豚(トーン)','','Pig','Pork'],
+ 349: ['エメラルドパワース豚(トーン)','','Pig','Pork'],
+ 350: ['トパーズパワース豚(トーン)','','Pig','Pork'],
+ 351: ['アメジストパワース豚(トーン)','','Pig','Pork'],
+ 352: ['ゼファー','','Raid'],
+ 353: ['ゼファー NEO海軍総帥','','Raid'],
+ 354: ['アイン','','Raid'],
+ 355: ['アイン NEO海軍バイス・アドミラル','','Raid'],
+ 356: ['ユースタス・キッド','','Supernova'],
+ 357: ['キャプテン・キッド','','Supernova'],
+ 358: ['スクラッチメン・アプー','','Supernova'],
+ 359: ['海鳴り スクラッチメン・アプー','','Supernova'],
+ 360: ['X・ドレーク','','Supernova'],
+ 361: ['赤旗 X・ドレーク','','Supernova'],
+ 362: ['ジュエリー・ボニー','','Supernova'],
+ 363: ['大喰らい ジュエリー・ボニー','','Supernova'],
+ 364: ['カポネ・ベッジ','','Supernova'],
+ 365: ['カポネ・ギャング・ベッジ','','Supernova'],
+ 366: ['シルバーズ・レイリー',''],
+ 367: ['冥王レイリー',''],
+ 368: ['巨人斬撃隊 レッドパイレーツ',''],
+ 369: ['巨人射撃隊 ブルーパイレーツ',''],
+ 370: ['巨人女戦士隊 グリーンパイレーツ',''],
+ 371: ['巨人格闘隊 イエローパイレーツ',''],
+ 372: ['巨人突撃隊 ブラックパイレーツ',''],
+ 373: ['巨人斬撃近衛隊 レッドパイレーツ',''],
+ 374: ['巨人射撃近衛隊 ブルーパイレーツ',''],
+ 375: ['巨人女戦士近衛隊 グリーンパイレーツ',''],
+ 376: ['巨人格闘近衛隊 イエローパイレーツ',''],
+ 377: ['巨人突撃近衛隊 ブラックパイレーツ',''],
+ 378: ['海ネコ',''],
+ 379: ['クンフージュゴン',''],
+ 380: ['クンフージュゴン 兄弟弟子',''],
+ 381: ['バナナワニ',''],
+ 382: ['サンドラ大トカゲ',''],
+ 383: ['Mr.0 バロックワークス社長','', 'Crocodile', 'Mr 0' ],
+ 384: ['サー・クロコダイル','', 'Strikerdile', 'Impactdile', 'Mr 0','Mr. 0' ],
+ 385: ['ホグバック',''],
+ 386: ['ドクトル・ホグバック',''],
+ 387: ['シンドリーちゃん',''],
+ 388: ['ビクトリア・シンドリー',''],
+ 389: ['エンポリオ・イワンコフ','','Raid'],
+ 390: ['エンポリオ・イワンコフ カマバッカ王国女王【永久欠番】','','Raid'],
+ 391: ['ペローナ',''],
+ 392: ['ペローナ ゴーストプリンセス',''],
+ 393: ['クマシー','', 'Kumashi' ],
+ 394: ['犬ッペ','', 'Inuppe' ],
+ 395: ['ミス・メリークリスマス',''],
+ 396: ['ミス・メリークリスマス モグラ人間',''],
+ 397: ['Mr.4','','Mr 4'],
+ 398: ['Mr.4と犬銃ラッスー','','Mr 4 and Lassoo the Dog-Gun'],
+ 399: ['ミス・ダブルフィンガー',''],
+ 400: ['ミス・ダブルフィンガー 棘(とげ)人間',''],
+ 401: ['Mr.1','','mr 1','Daz Bones'],
+ 402: ['Mr.1 全身刃物人間','','Mr 1','Daz Bones'],
+ 403: ['レベッカ',''],
+ 404: ['アブサロム',''],
+ 405: ['墓場のアブサロム',''],
+ 406: ['将軍ゾンビ',''],
+ 407: ['風のジゴロウ',''],
+ 408: ['サー・クロコダイル 王下七武海','', 'Slasherdile' ],
+ 409: ['ジンベエ','', 'Jinbe', 'Jimbei', 'Jinbei' ],
+ 410: ['ジンベエ 王下七武海','', 'Jinbe Warlord of the Sea', 'Jimbei Warlord of the Sea', 'Jinbei Warlord of the Sea' ],
+ 411: ['バーソロミュー・くま',''],
+ 412: ['バーソロミュー・くま 王下七武海',''],
+ 413: ['ゲッコー・モリア','', 'Gekko Moriah'],
+ 414: ['ゲッコー・モリア 王下七武海','', 'Gekko Moriah Warlord of the Sea'],
+ 415: ['ボア・ハンコック',''],
+ 416: ['ボア・ハンコック 王下七武海',''],
+ 417: ['ドンキホーテ・ドフラミンゴ','', 'Raid Doffy' ],
+ 418: ['ドンキホーテ・ドフラミンゴ 王下七武海','', 'Raid Doffy' ],
+ 419: ['サンジ 整形ショット(パラージュショット) “嵐”','', 'Kimono Sanji' ],
+ 420: ['モンキー・D・ルフィ ゴムゴムのバズーカ“覇”','', 'Kimono Luffy' ],
+ 421: ['ロロノア・ゾロ 三・千・世・界“斬”','', 'Kimono Zoro' ],
+ 422: ['ナミ 蜃気楼=テンポ“天”','', 'Kimono Nami' ],
+ 423: ['ブルック',''],
+ 424: ['鼻唄のブルック',''],
+ 425: ['リューマ','', 'Ryuuma' ],
+ 426: ['マシラ','','Harambe'],
+ 427: ['ショウジョウ',''],
+ 428: ['モンブラン・クリケット',''],
+ 429: ['サウスバードと森の住民',''],
+ 430: ['ベラミー',''],
+ 431: ['ハイエナのベラミー',''],
+ 432: ['サーキース','', 'Sarkies' ],
+ 433: ['エリザベス',''],
+ 434: ['キャロライン',''],
+ 435: ['サンジ カマバッカ王国伝統の決闘スタイル',''],
+ 436: ['サンジ キャンディーちゃん',''],
+ 437: ['ペローナ スイート','', 'Valentine Perona' ],
+ 438: ['ペローナ スイート ゴーストプリンセス','', 'Valentine Perona' ],
+ 439: ['ネフェルタリ・ビビ ラブ','', 'Valentine Vivi' ],
+ 440: ['王女ビビ ラブ','', 'Valentine Vivi' ],
+ 441: ['カウボーイとバーボンJr. 超カルガモ部隊',''],
+ 442: ['ストンプとイワンX 超カルガモ部隊',''],
+ 443: ['ケンタロウスとヒコイチ 超カルガモ部隊',''],
+ 444: ['カルー','', 'Carue', 'Karue' ],
+ 445: ['カルー隊長と超カルガモ部隊','', 'Captain Karue and the Supersonic Duck Squadron', 'Captain Carue and the Supersonic Duck Squadron' ],
+ 446: ['マーシャル・D・ティーチ','', 'Raid Blackbeard' ],
+ 447: ['黒ひげ','','Raid'],
+ 448: ['サッチ',''],
+ 449: ['双剣のサッチ',''],
+ 450: ['ナミュール','', 'Namur' ],
+ 451: ['一撃のナミュール','', 'One-Hit Namur' ],
+ 452: ['ラクヨウ',''],
+ 453: ['モーニングスターのラクヨウ',''],
+ 454: ['フォッサ',''],
+ 455: ['火炎刀のフォッサ',''],
+ 456: ['クリエル',''],
+ 457: ['重火器使いのクリエル',''],
+ 458: ['センゴク',''],
+ 459: ['仏のセンゴク',''],
+ 460: ['犯罪者ギャルディーノ Mr.3','Mr 3',''],
+ 461: ['脱走者ベンサム Mr.2・ボン・クレー','', 'Fugitive Bentham Mr. 2 Bonclay', 'Fugitive Bentham Mr 2 Bonclay' ],
+ 462: ['脱獄名人ベンサム Mr.2・ボン・クレー','', 'Prison Break Expert Mr. 2 Bonclay', 'Prison Break Expert Mr 2 Bonclay' ],
+ 463: ['サトリ',''],
+ 464: ['シュラ',''],
+ 465: ['ゲダツ',''],
+ 466: ['ブラハム',''],
+ 467: ['ヤマ',''],
+ 468: ['黄のホワイトベレー部隊 隊員 スカイピア神隊',''],
+ 469: ['黒のホワイトベレー部隊 隊員 スカイピア神隊',''],
+ 470: ['黄のホワイトベレー部隊 隊長 スカイピア神隊',''],
+ 471: ['黒のホワイトベレー部隊 隊長 スカイピア神隊',''],
+ 472: ['赤のゴッド近衛隊 隊員 スカイピア神兵','', 'Enel\'s Elect: Red Guard Skypiea Enforcer' ],
+ 473: ['青のゴッド近衛隊 隊員 スカイピア神兵','', 'Enel\'s Elect: Blue Guard Skypiea Enforcer' ],
+ 474: ['緑のゴッド近衛隊 隊員 スカイピア神兵','', 'Enel\'s Elect: Green Guard Skypiea Enforcer' ],
+ 475: ['黄のゴッド近衛隊 隊員 スカイピア神兵','', 'Enel\'s Elect: Yellow Guard Skypiea Enforcer' ],
+ 476: ['黒のゴッド近衛隊 隊員 スカイピア神兵','', 'Enel\'s Elect: Black Guard Skypiea Enforcer' ],
+ 477: ['赤の突撃隊 隊員 スカイピア神兵',''],
+ 478: ['青の突撃隊 隊員 スカイピア神兵',''],
+ 479: ['緑の突撃隊 隊員 スカイピア神兵',''],
+ 480: ['黄の突撃隊 隊員 スカイピア神兵',''],
+ 481: ['黒の突撃隊 隊員 スカイピア神兵',''],
+ 482: ['赤の突撃隊 エリート スカイピア神兵',''],
+ 483: ['青の突撃隊 エリート スカイピア神兵',''],
+ 484: ['緑の突撃隊 エリート スカイピア神兵',''],
+ 485: ['黄の突撃隊 エリート スカイピア神兵',''],
+ 486: ['黒の突撃隊 エリート スカイピア神兵',''],
+ 487: ['赤の遊牧隊 隊員 シャンディアの戦士',''],
+ 488: ['青の遊牧隊 隊員 シャンディアの戦士',''],
+ 489: ['緑の遊牧隊 隊員 シャンディアの戦士',''],
+ 490: ['赤の遊牧隊 達人 シャンディアの戦士',''],
+ 491: ['青の遊牧隊 達人 シャンディアの戦士',''],
+ 492: ['緑の遊牧隊 達人 シャンディアの戦士',''],
+ 493: ['黄の狩猟隊 隊員 シャンディアの戦士',''],
+ 494: ['黒の狩猟隊 隊員 シャンディアの戦士',''],
+ 495: ['黄の狩猟隊 達人 シャンディアの戦士',''],
+ 496: ['黒の狩猟隊 達人 シャンディアの戦士',''],
+ 497: ['ポートガス・D・エース コルボ山の悪ガキ3兄弟','','Kid Ace'],
+ 498: ['ポートガス・D・エース コルボ山の悪ガキ3兄弟“兄弟盃”','','Kid Ace'],
+ 499: ['ベルメール',''],
+ 500: ['ベルメール ナミとノジコの養母',''],
+ 501: ['カヤ',''],
+ 502: ['カヤ シロップ村のお嬢様',''],
+ 503: ['ホトリ・コトリ',''],
+ 504: ['ホトリ・コトリ スカイピア副神兵長',''],
+ 505: ['ペル',''],
+ 506: ['ペル アラバスタの守護神ファルコン',''],
+ 507: ['チャカ',''],
+ 508: ['チャカ アラバスタの守護神ジャッカル',''],
+ 509: ['最強の囚人サー・クロコダイル Mr.0 バロックワークス社元社長','','Mr 0', 'Mr. 0','Crocodile','Prisondile'],
+ 510: ['最強の囚人サー・クロコダイル 元王下七武海','','Mr 0','Mr. 0','Prisondile'],
+ 511: ['服役囚ダズ・ボーネス Mr.1','','Mr 1','Daz Bones'],
+ 512: ['サボ コルボ山の悪ガキ3兄弟','','Kid Sabo'],
+ 513: ['サボ コルボ山の悪ガキ3兄弟“兄弟盃”','','Kid Sabo'],
+ 514: ['ニコ・ロビン トロピカル', '','Summertime Robin', 'Swimsuit Robin'],
+ 515: ['ヘラクレスン','','Raid'],
+ 516: ['ヘラクレスン 森の勇者','','Raid'],
+ 517: ['ウソップン','', 'Raid Usoppun' ],
+ 518: ['ウソップン ヘラクレスンの生徒','', 'Raid Usoppun, Pupil of Heracles\'n', 'fat usopp' ],
+ 519: ['モンキー・D・ルフィ メルヴィユの冒険者','', 'Strong World Luffy', 'SW Luffy' ],
+ 520: ['モンキー・D・ルフィ 特攻の麦わらの一味','', 'Strong World Luffy', 'SW Luffy' ],
+ 521: ['サンジ メルヴィユの冒険者','', 'Strong World Sanji', 'SW Sanji' ],
+ 522: ['サンジ 特攻の麦わらの一味','', 'Strong World Sanji', 'SW Sanji' ],
+ 523: ['ナミ メルヴィユの冒険者','', 'Strong World Nami', 'SW Nami' ],
+ 524: ['ナミと雷鳥ビリー','', 'Strong World Nami', 'SW Nami' ],
+ 525: ['ブルック メルヴィユの冒険者','', 'Strong World Brook', 'SW Brook' ],
+ 526: ['ブルック 特攻の麦わらの一味','', 'Strong World Brook', 'SW Brook' ],
+ 527: ['チョッパー メルヴィユの冒険者','', 'Strong World Chopper', 'SW Chopper' ],
+ 528: ['チョッパー 特攻の麦わらの一味','', 'Strong World Chopper', 'SW Chopper' ],
+ 529: ['シャンクス 黒衣の赤髪','', 'Strong World Shanks', 'SW Shanks' ],
+ 530: ['シャンクス 黒衣の四皇','', 'Strong World Shanks', 'SW Shanks' ],
+ 531: ['ニコ・ロビン 桜吹雪','', 'Sakura Robin' ],
+ 532: ['ニコ・ロビン 桜満開','', 'Sakura Robin' ],
+ 533: ['ブルック チェリーヘッド','', 'Sakura Brook' ],
+ 534: ['ブルック 桜音色','', 'Sakura Brook' ],
+ 535: ['ナミ 桜雲','', 'Sakura Nami' ],
+ 536: ['ナミ 桜日和','', 'Sakura Nami' ],
+ 537: ['ドミノ',''],
+ 538: ['ドミノ インペルダウン副看守長',''],
+ 539: ['ミノリノケロス',''],
+ 540: ['バシリスク',''],
+ 541: ['オーム',''],
+ 542: ['ノラ ウワバミ',''],
+ 543: ['ワイパー','', 'Wiper' ],
+ 544: ['ワイパー 大戦士カルガラの子孫','', 'Wiper, Descendant of Great Warrior Calgara' ],
+ 545: ['エネル','', 'Enel' ],
+ 546: ['ゴッド・エネル','', 'God Enel' ],
+ 547: ['モンキー・D・ルフィ コルボ山の悪ガキ3兄弟','','Kid Luffy'],
+ 548: ['モンキー・D・ルフィ コルボ山の悪ガキ3兄弟“兄弟盃”','','Kid Luffy'],
+ 549: ['サディちゃん',''],
+ 550: ['サディちゃん インペルダウン獄卒長',''],
+ 551: ['ミノコアラ',''],
+ 552: ['マンティコラ',''],
+ 553: ['ロロノア・ゾロ メルヴィユの冒険者','', 'Strong World Zoro', 'SW Zoro' ],
+ 554: ['ロロノア・ゾロ 特攻の麦わらの一味','', 'Strong World Zoro', 'SW Zoro' ],
+ 555: ['ウソップ メルヴィユの冒険者','', 'Strong World Usopp', 'SW Usopp' ],
+ 556: ['ウソップ 特攻の麦わらの一味','', 'Strong World Usopp', 'SW Usopp' ],
+ 557: ['ニコ・ロビン メルヴィユの冒険者','', 'Strong World Robin', 'SW Robin' ],
+ 558: ['ニコ・ロビン 特攻の麦わらの一味','', 'Strong World Robin', 'SW Robin' ],
+ 559: ['フランキー メルヴィユの冒険者','', 'Strong World Franky', 'SW Franky' ],
+ 560: ['フランキー 特攻の麦わらの一味','', 'Strong World Franky', 'SW Franky' ],
+ 561: ['ポートガス・D・エース 黒衣の火拳','', 'Strong World Ace', 'SW Ace' ],
+ 562: ['ポートガス・D・エース 黒衣の白ひげ海賊団2番隊隊長','', 'Strong World Ace', 'SW Ace' ],
+ 563: ['ポルチェ',''],
+ 564: ['ポーティ',''],
+ 565: ['ハンバーグ',''],
+ 566: ['ピクルス',''],
+ 567: ['ビッグパン','', 'Big Pan' ],
+ 568: ['フォクシー',''],
+ 569: ['銀ギツネのフォクシー',''],
+ 570: ['モンキー・D・ルフィ デービーバックファイト・アフロ','', 'Afro Luffy', 'Afroluffy' ],
+ 571: ['モンキー・D・ルフィ デービーバックファイト・コンバット','', 'Afro Luffy', 'Afroluffy' ],
+ 572: ['ウソップ デービーバックファイト・セコンド',''],
+ 573: ['トニートニー・チョッパー デービーバックファイト・マスク',''],
+ 574: ['青キジ','','Raid Kuzan' ],
+ 575: ['青キジ 氷結人間','','Raid Kuzan' ],
+ 576: ['ナミのティータイム',''],
+ 577: ['モンキー・D・ルフィ 航海の記録・麦わらの一味','', 'Log Luffy','Logfy' ],
+ 578: ['モンキー・D・ルフィ 航海の夢「海賊王」','', 'Log Luffy','Logfy' ],
+ 579: ['ロロノア・ゾロ 航海の記録・麦わらの一味','', 'Log Zoro' ],
+ 580: ['ロロノア・ゾロ 航海の夢「大剣豪」','', 'Log Zoro' ],
+ 581: ['ゲンボウ',''],
+ 582: ['カマキリ',''],
+ 583: ['ラキ','', 'Laki' ],
+ 584: ['アイサ',''],
+ 585: ['ノジコ',''],
+ 586: ['ノジコ ナミの義姉妹',''],
+ 587: ['クロッカス',''],
+ 588: ['クロッカス 双子岬の灯台守',''],
+ 589: ['コーザ',''],
+ 590: ['コーザ 反乱軍リーダー',''],
+ 591: ['朱の竜宮カメ姫','', 'Princess Turtle' ],
+ 592: ['蒼の竜宮カメ姫','', 'Princess Turtle' ],
+ 593: ['翠の竜宮カメ姫','', 'Princess Turtle' ],
+ 594: ['琥珀の竜宮カメ姫','', 'Princess Turtle' ],
+ 595: ['漆黒の竜宮カメ姫','', 'Princess Turtle' ],
+ 596: ['トニートニー・チョッパー 航海の記録・麦わらの一味','', 'Log Chopper' ],
+ 597: ['トニートニー・チョッパー 航海の憧れ「偉大な医者」','', 'Log Chopper' ],
+ 598: ['バギー 海賊見習い','','Young Buggy', 'Baggy'],
+ 599: ['バギー ロジャー海賊団','','Young Buggy', 'Baggy'],
+ 600: ['シャンクス 海賊見習い','','Young Shanks'],
+ 601: ['シャンクス ロジャー海賊団','','Young Shanks'],
+ 602: ['エネル 2億V 雷神','', 'Raid Enel, 200 Million Volt Thunder God' ],
+ 603: ['エネル 雷人間 2億V 雷神','', 'Raid Enel the Lightning Human, 200 Million Volt Thunder God' ],
+ 604: ['サンジ 航海の記録・麦わらの一味','', 'Log Sanji' ],
+ 605: ['サンジ 航海の夢「オールブルー」','', 'Log Sanji' ],
+ 606: ['海賊ゼフ',''],
+ 607: ['赫足のゼフ クック海賊団船長',''],
+ 608: ['ごろつきパティ',''],
+ 609: ['ごろつきカルネ',''],
+ 610: ['ハイキングベア',''],
+ 611: ['プリンプリン','', 'Pudding Pudding' ],
+ 612: ['ブルック 航海の記録・麦わらの一味','', 'Log Brook' ],
+ 613: ['ブルック 航海の夢「約束の再会」','','Log Brook' ],
+ 614: ['ザンバイ',''],
+ 615: ['怪力デストロイヤーズ 斧使い',''],
+ 616: ['怪力デストロイヤーズ 槍使い',''],
+ 617: ['怪力デストロイヤーズ 大砲使い','','Gunner'],
+ 618: ['ナックルチンピラ 赤の賞金稼ぎ',''],
+ 619: ['ナックルチンピラ 緑の賞金稼ぎ',''],
+ 620: ['カタナチンピラ 青の賞金稼ぎ',''],
+ 621: ['カタナチンピラ 赤の賞金稼ぎ',''],
+ 622: ['ピストルチンピラ 緑の賞金稼ぎ',''],
+ 623: ['ピストルチンピラ 黄の賞金稼ぎ',''],
+ 624: ['棍棒チンピラ 黄の賞金稼ぎ',''],
+ 625: ['棍棒チンピラ 黒の賞金稼ぎ',''],
+ 626: ['ガトリングチンピラ 黒の賞金稼ぎ',''],
+ 627: ['ガトリングチンピラ 青の賞金稼ぎ',''],
+ 628: ['タイルストン',''],
+ 629: ['フランキー フランキー一家棟梁',''],
+ 630: ['カク サイファーポールNo.9',''],
+ 631: ['カク 六式 サイファーポールNo.9',''],
+ 632: ['ロブ・ルッチ サイファーポールNo.9',''],
+ 633: ['ロブ・ルッチ 六式 サイファーポールNo.9',''],
+ 634: ['ケイミー','','Keimi'],
+ 635: ['ケイミー タコ焼き屋店員','','Keimi, Takoyaki Stand Assistant'],
+ 636: ['パッパグ',''],
+ 637: ['はっちゃん タコ焼き屋店主','', 'Hachi, Takoyaki Stand Owner' ],
+ 638: ['ドーマ',''],
+ 639: ['遊騎士ドーマ',''],
+ 640: ['ディカルバン兄弟',''],
+ 641: ['絆のディカルバン兄弟',''],
+ 642: ['スクアード','','Squardo'],
+ 643: ['大渦蜘蛛スクアード','','Maelstrom Spider Squardo'],
+ 644: ['ホワイティベイ',''],
+ 645: ['氷の魔女ホワイティベイ',''],
+ 646: ['リトルオーズJr.',''],
+ 647: ['猛攻のリトルオーズJr.',''],
+ 648: ['マルコ 白ひげ海賊団1番隊隊長','','LMarco','QMarco'],
+ 649: ['不死鳥マルコ 白ひげ海賊団1番隊隊長','','LMarco','QMarco'],
+ 650: ['ナミ 航海の記録・麦わらの一味','', 'Log Nami' ],
+ 651: ['ナミ 航海の夢「世界地図」','', 'Log Nami' ],
+ 652: ['鉄仮面のデュバル','','Raid'],
+ 653: ['デュバル トビウオライダーズ ヘッド','','Raid'],
+ 654: ['デュバル 人生バラ色ライダーズ ヘッド','','Raid'],
+ 655: ['海賊アーロン','','Young Arlong'],
+ 656: ['アーロン タイヨウの海賊団','','Young Arlong'],
+ 657: ['クロオビ タイヨウの海賊団','','Young Kuroobi'],
+ 658: ['チュウ タイヨウの海賊団','','Young Choo'],
+ 659: ['モンキー・D・ルフィ うきわ','','Summertime Luffy','Swimsuit Luffy'],
+ 660: ['ウソップ 航海の記録・麦わらの一味', '', 'Log Usopp' ],
+ 661: ['ウソップ 航海の夢「勇敢なる海の戦士」','', 'Log Usopp' ],
+ 662: ['ナミ バカンス', '', 'Summertime Nami', 'Swimsuit Nami'],
+ 663: ['ネフェルタリ・ビビ アラバスタ王国王女','','Young Vivi'],
+ 664: ['ネフェルタリ・ビビ 砂砂団 副リーダー','','Young Vivi'],
+ 665: ['コーザ アラバスタ住民','','Young Koza'],
+ 666: ['コーザ 砂砂団 リーダー','','Young Koza'],
+ 667: ['ネフェルタリ・コブラ アラバスタ王国国王',''],
+ 668: ['サボ',''],
+ 669: ['サボ 革命軍',''],
+ 670: ['コアラ',''],
+ 671: ['コアラ 革命軍',''],
+ 672: ['ハック',''],
+ 673: ['ハック 革命軍',''],
+ 674: ['エンポリオ・イワンコフ ニューカマー拳法 師範','','INTvankov'],
+ 675: ['エンポリオ・イワンコフ 革命軍','','INTvankov'],
+ 676: ['イナズマ',''],
+ 677: ['イナズマ 革命軍',''],
+ 678: ['ニコ・ロビン 航海の記録・麦わらの一味','', 'Log Robin' ],
+ 679: ['ニコ・ロビン 航海の夢「空白の歴史の解明」','', 'Log Robin' ],
+ 680: ['アイス大好きナミ','','Summertime Nami','Swimsuit Nami'],
+ 681: ['アイス大好きナミ レモンアイス','','Summertime Nami','Swimsuit Nami'],
+ 682: ['アイス大好きロビン','','Summertime Robin','Swimsuit Robin'],
+ 683: ['アイス大好きロビン チョコアイス','','Summertime Robin','Swimsuit Robin'],
+ 684: ['アイス大好きペローナ','','Summertime Perona','Swimsuit Perona'],
+ 685: ['アイス大好きペローナ ストロベリーアイス','','Summertime Perona','Swimsuit Perona'],
+ 686: ['ビビのひとやすみ','', 'Summertime Vivi', 'Swimsuit Vivi' ],
+ 687: ['カルガラ',''],
+ 688: ['カルガラ シャンディアの大戦士',''],
+ 689: ['モンブラン・ノーランド',''],
+ 690: ['モンブラン・ノーランド ルブニール王国探検船提督',''],
+ 691: ['ナギナタ伍長 海軍本部',''],
+ 692: ['ピストル伍長 海軍本部',''],
+ 693: ['サーベル伍長 海軍本部',''],
+ 694: ['バズーカ伍長 海軍本部',''],
+ 695: ['ナックル伍長 海軍本部',''],
+ 696: ['ナギナタ少佐 海軍本部',''],
+ 697: ['ピストル少佐 海軍本部',''],
+ 698: ['サーベル少佐 海軍本部',''],
+ 699: ['バズーカ少佐 海軍本部',''],
+ 700: ['ナックル少佐 海軍本部',''],
+ 701: ['オイモ',''],
+ 702: ['カーシ―',''],
+ 703: ['法の番犬部隊',''],
+ 704: ['有罪陪審員',''],
+ 705: ['3つ首のバスカビル',''],
+ 706: ['ブルーノ サイファーポールNo.9',''],
+ 707: ['ブルーノ 六式 サイファーポールNo.9',''],
+ 708: ['ニコ・ロビン 悪魔の子',''],
+ 709: ['ニコ・ロビン 麦わらの一味',''],
+ 710: ['フランキー 航海の記録・麦わらの一味','', 'Log Franky' ],
+ 711: ['フランキー 航海の夢「海の果てを旅する船」','', 'Log Franky' ],
+ 712: ['ガン・フォール','','Gan Fall','ganfall'],
+ 713: ['ガン・フォール 空の騎士','','Gan Fall the Knight of the Sky','ganfall'],
+ 714: ['ピエール',''],
+ 715: ['コニス',''],
+ 716: ['コニス スカイピアの少女',''],
+ 717: ['ジュラキュール・ミホーク 王下七武海','','INThawk'],
+ 718: ['鷹の目のミホーク 世界最強の剣士','','INThawk'],
+ 719: ['サー・クロコダイル ロギア 王下七武海',''],
+ 720: ['サー・クロコダイル ロギア 元王下七武海',''],
+ 721: ['ジェリー',''],
+ 722: ['ジェリー サイファーポールNo.6',''],
+ 723: ['Tボーン',''],
+ 724: ['船斬りTボーン 海軍本部大佐',''],
+ 725: ['ネフェルタリ・ビビ 航海の記録・アラバスタ王国王女','', 'Log Vivi' ],
+ 726: ['ネフェルタリ・ビビ 航海の夢「海賊女王」','', 'Log Vivi' ],
+ 727: ['モンキー・D・ルフィ ゴムゴムの銃乱打 (ガトリング)',''],
+ 728: ['カリファ サイファーポールNo.9','', 'Califa, Cipher Pol No.9', 'Calipha, Cipher Pol No.9', 'Kalipha, Cipher Pol No.9' ],
+ 729: ['カリファ 六式 サイファーポールNo.9','', 'Califa Rokushiki, Cipher Pol No.9', 'Calipha Rokushiki, Cipher Pol No.9', 'Kalipha Rokushiki, Cipher Pol No.9' ],
+ 730: ['ジャブラ サイファーポールNo.9',''],
+ 731: ['ジャブラ 六式 サイファーポールNo.9',''],
+ 732: ['フクロウ サイファーポールNo.9',''],
+ 733: ['フクロウ 六式 サイファーポールNo.9',''],
+ 734: ['クマドリ サイファーポールNo.9',''],
+ 735: ['クマドリ 六式 サイファーポールNo.9',''],
+ 736: ['カク 獣人 ウシウシの実 モデル麒麟(ジラフ)','','Box Kaku'],
+ 737: ['ルッチ 獣人 ネコネコの実 モデル豹(レオパルド)','','rob lucci'],
+ 738: ['スパンダム',''],
+ 739: ['フランキー 麦わらの一味',''],
+ 740: ['ネロ',''],
+ 741: ['ネロ サイファーポールNo.9',''],
+ 742: ['ワンゼ',''],
+ 743: ['ワンゼ サイファーポールNo.7',''],
+ 744: ['ポートガス・D・エース 航海の記録・白ひげ海賊団','', 'Log Ace' ],
+ 745: ['ポートガス・D・エース 航海の夢「海賊の高み」','', 'Log Ace' ],
+ 746: ['メガロ&しらほし姫',''],
+ 747: ['ロブ・ルッチ 闇の正義の「CP9」',''],
+ 748: ['ロブ・ルッチ 歴代最強の「CP9」',''],
+ 749: ['カク 闇の正義の「CP9」',''],
+ 750: ['カク 歴代最強の「CP9」',''],
+ 751: ['カリファ 闇の正義の「CP9」','', 'Califa, CP9\'s Dark Justice', 'Calipha, CP9\'s Dark Justice', 'Kalipha, CP9\'s Dark Justice' ],
+ 752: ['カリファ 歴代最強の「CP9」','', 'Califa, CP9\'s Strongest Generation', 'Calipha, CP9\'s Strongest Generation', 'Kalipha, CP9\'s Strongest Generation' ],
+ 753: ['ジャブラ 闇の正義の「CP9」',''],
+ 754: ['ジャブラ 歴代最強の「CP9」',''],
+ 755: ['ブルーノ 闇の正義の「CP9」',''],
+ 756: ['ブルーノ 歴代最強の「CP9」',''],
+ 757: ['フクロウ 闇の正義の「CP9」',''],
+ 758: ['フクロウ 歴代最強の「CP9」',''],
+ 759: ['クマドリ 闇の正義の「CP9」',''],
+ 760: ['クマドリ 歴代最強の「CP9」',''],
+ 761: ['モンキー・D・ルフィ ハロウィンモンスター','', 'Halloween Luffy' ],
+ 762: ['ウソップ うそつき狼','', 'Halloween Usopp' ],
+ 763: ['フランキー フランケンシュタイン','', 'Halloween Franky' ],
+ 764: ['ナミ かぼちゃランタン','', 'Halloween Nami' ],
+ 765: ['トニートニー・チョッパー リトルヴァンパイア','', 'Halloween Chopper' ],
+ 766: ['ロロノア・ゾロ ジャック・ザ・リッパ―','', 'Halloween Zoro' ],
+ 767: ['ニコ・ロビン セクシーデビル','', 'Halloween Robin' ],
+ 768: ['サンジ ゴーストナイト','', 'Halloween Sanji' ],
+ 769: ['ブルック こわがりスケルトン','', 'Halloween Brook' ],
+ 770: ['ダルメシアン 海軍本部中将','','Raid'],
+ 771: ['モモンガ 海軍本部中将','','Raid'],
+ 772: ['オニグモ 海軍本部中将','','Raid'],
+ 773: ['シュウ','','Raid'],
+ 774: ['ベリーグッド','','Very Good','Raid'],
+ 775: ['ストロベリー 海軍本部中将','','Raid'],
+ 776: ['ラッキー・ルウ','','Coliseum Lucky Roo'],
+ 777: ['ラッキー・ルウ 赤髪海賊団','','Coliseum Lucky Roo'],
+ 778: ['レベッカ 囚人剣闘士','','Coliseum Rebecca'],
+ 779: ['レベッカ コロシアム専属剣闘士','','Coliseum Rebecca'],
+ 780: ['ウルージ 破戒僧海賊団船長','','Supernova','Coliseum Urouge'],
+ 781: ['怪僧ウルージ 破戒僧海賊団船長','','Supernova','Coliseum Urouge'],
+ 782: ['たしぎ 正義の華','', 'Kimono Tashigi' ],
+ 783: ['たしぎ 海軍本部少尉・正義の華','', 'Kimono Tashigi' ],
+ 784: ['ゲンさん',''],
+ 785: ['ゲンゾウ ココヤシ村の駐在',''],
+ 786: ['Dr.ヒルルク','', 'Dr. Hiruruk', 'Dr Hiruruk'],
+ 787: ['Dr.ヒルルク ヤブ医者','', 'Dr. Hiruruk, Quack Doctor', 'Dr Hiruruk, Quack Doctor' ],
+ 788: ['くいな',''],
+ 789: ['くいな シモツキ村の少女剣士',''],
+ 790: ['たまねぎ&ピーマン&にんじん','', 'Usopp Pirates' ],
+ 791: ['たまねぎ&ピーマン&にんじん ウソップ海賊団','', 'Usopp Pirates' ],
+ 792: ['アイスバーグ','', 'Iceberg' ],
+ 793: ['アイスバーグ W7市長&ガレーラカンパニー社長','', 'Iceberg, Mayor of W7 and President of Galley-La Company' ],
+ 794: ['モンキー・D・ルフィ 希望の星','','Raid'],
+ 795: ['ナイトメア・ルフィ 希望の戦士','','Raid'],
+ 796: ['ブリード',''],
+ 797: ['ブリード ペトペトの実の能力者',''],
+ 798: ['クンフージュゴン 海獣海賊団',''],
+ 799: ['シーラパーン 海獣海賊団','', 'Sea Lapahn, Sea Animal Pirates', 'Sea Lapan, Sea Animal Pirates', 'Sea Rapan, Sea Animal Pirates' ],
+ 800: ['たこボクサー 海獣海賊団',''],
+ 801: ['Mr.2・ボン・クレー 航海の記録・B・W','', 'Log Bon Clay', 'Log Bonclay','mr 2' ],
+ 802: ['Mr.2・ボン・クレー 航海の生き様「おかま道」','', 'Log Bon Clay', 'Log Bonclay', 'mr 2' ],
+ 803: ['ヒナ 海軍本部大佐','','Coliseum Hina'],
+ 804: ['黒檻のヒナ 海軍本部大佐','','Coliseum Hina'],
+ 805: ['スモーカー 海軍本部大佐','','Coliseum Smoker'],
+ 806: ['白猟のスモーカー 海軍本部大佐','','Coliseum Smoker'],
+ 807: ['純白の天使ナミ ウエディング','','Bridal Nami'],
+ 808: ['純白の女神ナミ ウエディング','','Bridal Nami'],
+ 809: ['ローラ スリラーバークの花嫁',''],
+ 810: ['求愛のローラ スリラーバークの花嫁',''],
+ 811: ['リスキー兄弟',''],
+ 812: ['ケルベロス',''],
+ 813: ['タララン','', 'Spider Monkey' ],
+ 814: ['敷きグマ',''],
+ 815: ['ゲッコー・モリア スリラーバークの怪人','', 'Gekko Moriah, Thriller Bark\'s Mysterious Four'],
+ 816: ['ゲッコー・モリア スリラーバークの支配者','', 'Gekko Moriah, Ruler of Thriller Bark'],
+ 817: ['ソルジャーゾンビ 力自慢の影',''],
+ 818: ['ソルジャーゾンビ 素早さの影',''],
+ 819: ['ソルジャーゾンビ 悪巧みの影',''],
+ 820: ['ソルジャーゾンビ 憎しみの影',''],
+ 821: ['ソルジャーゾンビ 自尊心の影',''],
+ 822: ['トリッキー・ワイルドゾンビ',''],
+ 823: ['インテリ・ワイルドゾンビ',''],
+ 824: ['ハートフル・ワイルドゾンビ',''],
+ 825: ['ジェネラルゾンビ 怪力の影',''],
+ 826: ['ジェネラルゾンビ 奇技の影',''],
+ 827: ['ジェネラルゾンビ 疾速の影',''],
+ 828: ['???','','Kid Law','Young Law'],
+ 829: ['???','','Kid Law','Young Law'],
+ 830: ['バジル・ホーキンス ホーキンス海賊団船長','','Supernova','Coliseum Hawkins', 'Coliseum Basil Hawkins'],
+ 831: ['魔術師バジル・ホーキンス ホーキンス海賊団船長','','Supernova','Coliseum Hawkins', 'Coliseum Basil Hawkins'],
+ 832: ['ワイパー シャンディアの戦士','', 'Wiper, Warrior of Shandia','Coliseum Wyper' ],
+ 833: ['戦鬼ワイパー シャンディアの戦士','', 'Berserker Wiper, Warrior of Shandia','Coliseum Wyper' ],
+ 834: ['Mr.7 & ミス・ファーザーズデー','', 'Mr 7 and Miss Fathers Day', 'Coliseum Mr 7', 'Coliseum Miss Fathers Day'],
+ 835: ['暴君バーソロミュー・くま','','Raid'],
+ 836: ['暴君バーソロミュー・くま 政府の人間兵器','','Raid'],
+ 837: ['シーザー・クラウン',''],
+ 838: ['M(マスター)・シーザー',''],
+ 839: ['ヴェルゴ',''],
+ 840: ['ヴェルゴ ドンキホーテ海賊団',''],
+ 841: ['モネ',''],
+ 842: ['モネ ドンキホーテ海賊団',''],
+ 843: ['ベビー5',''],
+ 844: ['ベビー5 ドンキホーテ海賊団',''],
+ 845: ['バッファロー',''],
+ 846: ['バッファロー ドンキホーテ海賊団',''],
+ 847: ['トム トムズ ワーカーズ',''],
+ 848: ['伝説の船大工トム トムズ ワーカーズ',''],
+ 849: ['カティ・フラム トムズ ワーカーズ','', 'Franky, Tom\'s Workers','Young Franky' ],
+ 850: ['アイスバーグ トムズ ワーカーズ','', 'Iceburg, Tom\'s Workers','Young Iceberg' ],
+ 851: ['ブリキのワポル',''],
+ 852: ['スリムアップワポル',''],
+ 853: ['ロブソン',''],
+ 854: ['チョッパーの雪遊び',''],
+ 855: ['トラファルガー・ロー 聖夜の紳士','','Supernova','Christmas Law','CLaw'],
+ 856: ['トラファルガー・ロー 聖夜の貴公子','','Supernova','Christmas Law','CLaw'],
+ 857: ['ジュエリー・ボニー 食いしん坊のわがままサンタ','','Supernova'],
+ 858: ['ジュエリー・ボニー 食いしん坊の欲張りサンタ','','Supernova'],
+ 859: ['コビー 海軍本部曹長','','Coliseum Coby'],
+ 860: ['戦火の勇士コビー 海軍本部曹長','','Coliseum Coby'],
+ 861: ['レディー・アルビダ うるわしき美女','','Coliseum Alvida'],
+ 862: ['レディー・アルビダ 絶世の美女','','Coliseum Alvida'],
+ 863: ['銀世界のナミ',''],
+ 864: ['ボア・ハンコック 九蛇海賊団船長','','Raid'],
+ 865: ['女帝ボア・ハンコック 九蛇海賊団船長','','Raid'],
+ 866: ['ニコ・ロビン 百花繚乱 ウイング“華”','', 'Kimono Robin' ],
+ 867: ['ウソップ タバスコ星“撃”','', 'Kimono Usopp' ],
+ 868: ['トニートニー・チョッパー 重量ゴング“獣”','', 'Kimono Chopper' ],
+ 869: ['ドンキホーテ・ドフラミンゴ ドンキホーテ海賊団','', 'Doffy' ],
+ 870: ['天夜叉ドフラミンゴ','', 'Doffy' ],
+ 871: ['シュガー',''],
+ 872: ['シュガー ドンキホーテ海賊団',''],
+ 873: ['セニョール・ピンク','', 'Senor Pink', 'Senior Pink' ],
+ 874: ['セニョール・ピンク ドンキホーテ海賊団','', 'Senor Pink', 'Senior Pink' ],
+ 875: ['トレーボル',''],
+ 876: ['トレーボル ドンキホーテ海賊団',''],
+ 877: ['ジョーラ','', 'Giolla', 'Jora' ],
+ 878: ['ジョーラ ドンキホーテ海賊団','', 'Giolla, Donquixote Pirates', 'Jora' ],
+ 879: ['ラオG',''],
+ 880: ['ラオG ドンキホーテ海賊団',''],
+ 881: ['スクラッチメン・アプー オンエア海賊団船長','','Supernova','Coliseum Apoo'],
+ 882: ['海鳴りスクラッチメン・アプー オンエア海賊団船長','','Supernova','Coliseum Apoo'],
+ 883: ['ドリー 巨兵海賊団','','Coliseum Dorry'],
+ 884: ['青鬼のドリー','','Coliseum Dorry'],
+ 885: ['ジンベエ 鮫の武人','', 'Kimono Jinbe', 'Kimono Jimbei', 'Kimono Jinbei' ],
+ 886: ['Mr.1 西の海の剣客','', 'Kimono Mr. 1', 'Kimono Mr 1','daz bones' ],
+ 887: ['バギー 陽気なかぶき者','', 'Kimono Buggy', 'Baggy'],
+ 888: ['ホロホロゴースト',''],
+ 889: ['ペローナ スリラーバークの怪人',''],
+ 890: ['ペローナ 巨大なゴーストプリンセス',''],
+ 891: ['ドクトル・ホグバック スリラーバークの怪人',''],
+ 892: ['墓場のアブサロム スリラーバークの怪人',''],
+ 893: ['オーズ 特別ゾンビ',''],
+ 894: ['ゲッコー・モリア 影の集合地(シャドーズ・アスガルド)','', 'Gekko Moriah, Shadow\'s Asgard'],
+ 895: ['ブルック 紳士なガイコツ',''],
+ 896: ['ブルック 麦わらの一味',''],
+ 897: ['サー・クロコダイル 砂の武将','', 'Kimono Crocodile' ],
+ 898: ['Mr.3 姑息な楽士','', 'Kimono Mr. 3', 'Kimono Galdino', 'Kimono Mr 3' ],
+ 899: ['Mr.2・ボン・クレー あやふやな侍','', 'Kimono Mr. 2', 'Kimono Bonclay', 'Kimono Bon Clay', 'Kimono Mr 2' ],
+ 900: ['フレッシュ・フランキー 健康第一','','Coliseum Franky'],
+ 901: ['鉄人(サイボーグ)フランキー','','Coliseum Franky'],
+ 902: ['ブロギー 巨兵海賊団','','Coliseum Broggy'],
+ 903: ['赤鬼のブロギー','','Coliseum Broggy'],
+ 904: ['ヨコヅナ','','Coliseum Yokozuna'],
+ 905: ['ロロノア・ゾロ クライガナ島をさすらう剣士','','3D2Y Zoro','Timeskip Zoro'],
+ 906: ['ロロノア・ゾロ 世界最強剣士の門弟','','3D2Y Zoro','Timeskip Zoro'],
+ 907: ['ニコ・ロビン テキーラウルフの収監者','','3D2Y Robin','Timeskip Robin'],
+ 908: ['ニコ・ロビン 革命の灯火(ともしび)','','3D2Y Robin','Timeskip Robin'],
+ 909: ['トニートニー・チョッパー トリノ王国の平和の架け橋','','3D2Y Chopper','Timeskip Chopper'],
+ 910: ['チョッパーマスク 世界の平和を守るヒーロー','','3D2Y Chopper','Timeskip Chopper'],
+ 911: ['サンジ カマバッカ王国の逃走者','','3D2Y Sanji','Timeskip Sanji'],
+ 912: ['サンジ 男を懸けた愛の料理人','','3D2Y Sanji','Timeskip Sanji'],
+ 913: ['ブルック ハラヘッターニャの悪魔王','','3D2Y Brook','Timeskip Brook'],
+ 914: ['ブルック 骨(ボーン) to be wild!!!','','3D2Y Brook','Timeskip Brook'],
+ 915: ['ニコ・ロビン オハラの花嫁','','Wedding Nico Robin'],
+ 916: ['麗らかな才女 ロビン ウエディング','','Bride Nico Robin'],
+ 917: ['マーガレット',''],
+ 918: ['マーガレット 護国の戦士',''],
+ 919: ['アフェランドラ',''],
+ 920: ['スイトピー',''],
+ 921: ['ボア・ハンコック 女ヶ島の花嫁','','Bridal Boa Hancock', " Wedding Hancock"],
+ 922: ['愛に生きる女帝ハンコック ウエディング','','Bridal Boa Hancock'],
+ 923: ['南の海のキャプテン・キッド','','Coliseum Kid'],
+ 924: ['キャプテン・キッド キッド海賊団船長','','Coliseum Kid'],
+ 925: ['獄卒長サディちゃん','','Coliseum Sadie'],
+ 926: ['獄卒長サディちゃん 獄卒獣の指揮官','','Coliseum Sadie'],
+ 927: ['ドーベルマン 海軍本部中将','','Coliseum Doberman'],
+ 928: ['ハンニャバル','','Hannibal'],
+ 929: ['ハンニャバル','','Hannibal'],
+ 930: ['サルデス',''],
+ 931: ['ブルゴリ ','','Blue Gorilla'],
+ 932: ['ピーカ','','Raid'],
+ 933: ['ピーカ ドンキホーテ海賊団','','Raid'],
+ 934: ['海峡のジンベエ','', 'Jinbe', 'Jimbei', 'Jinbei','INTbe'],
+ 935: ['海峡のジンベエ 元王下七武海','', 'Jinbe', 'Jimbei', 'Jinbei','INTbe'],
+ 936: ['モンキー・D・ルフィ 頂上戦争の生還者','','Timeskip Luffy','3D2Y Luffy'],
+ 937: ['モンキー・D・ルフィ 仲間との誓い『3D2Y』','','Timeskip Luffy','3D2Y Luffy'],
+ 938: ['ナミ 天候の科学の探求者','','Timeskip Nami','3D2Y Nami'],
+ 939: ['ナミ 空島ウェザリアの泥棒ネコ','','Timeskip Nami','3D2Y Nami'],
+ 940: ['ウソップ ボーイン列島の大食漢','','Timeskip Usopp','3D2Y Usopp'],
+ 941: ['ウソップ おいはぎの森の果敢な戦士','','Timeskip Usopp','3D2Y Usopp'],
+ 942: ['フランキー メカアニマルと戦う改造人間','','Timeskip Franky','3D2Y Franky'],
+ 943: ['鉄人(サイボーグ)フランキー バルジモアの霊獣','','Timeskip Franky','3D2Y Franky'],
+ 944: ['???','','Wedding Perona'],
+ 945: ['???','','Bride Perona'],
+ 946: ['ラクヨウ 白ひげ海賊団7番隊隊長',''],
+ 947: ['フォッサ 白ひげ海賊団15番隊隊長',''],
+ 948: ['クリエル 白ひげ海賊団10番隊隊長',''],
+ 949: ['サッチ 白ひげ海賊団4番隊隊長',''],
+ 950: ['火拳のエース','','Coliseum Ace'],
+ 951: ['火拳のエース 白ひげ海賊団2番隊隊長','', 'Coliseum Ace'],
+ 952: ['ベン・ベックマン','', 'Coliseum Ben Beckman'],
+ 953: ['ベン・ベックマン 赤髪海賊団','', 'Coliseum Ben Beckman'],
+ 954: ['ギャロ',''],
+ 955: ['マクロ','','Makuro'],
+ 956: ['タンスイ',''],
+ 957: ['早業のガンマン 青のボディガード',''],
+ 958: ['計略のガンマン 黒のボディガード',''],
+ 959: ['技巧のガンマン 緑のボディガード',''],
+ 960: ['速攻のガンマン 青のボディガード',''],
+ 961: ['豪腕のガンマン 赤のボディガード',''],
+ 962: ['強心のガンマン 黄のボディガード',''],
+ 963: ['チャルロス聖',''],
+ 964: ['ロズワード聖',''],
+ 965: ['シャルリア宮',''],
+ 966: ['ユースタス・キッド 超新星(スーパールーキー)',''],
+ 967: ['トラファルガー・ロー 超新星(スーパールーキー)',''],
+ 968: ['パシフィスタ PX-1',''],
+ 969: ['パシフィスタ PX-2',''],
+ 970: ['パシフィスタ PX-3',''],
+ 971: ['パシフィスタ PX-4',''],
+ 972: ['パシフィスタ PX-5',''],
+ 973: ['戦桃丸','','Sentoumaru'],
+ 974: ['戦桃丸 海軍本部科学部隊隊長','','Sentoumaru'],
+ 975: ['スモーカー あらくれの一匹オオカミ','','Kid Smoker'],
+ 976: ['スモーカー 孤高の一匹オオカミ','','Kid Smoker'],
+ 977: ['黄猿','','Raid'],
+ 978: ['黄猿 光人間','','Raid'],
+ 979: ['イゾウ 白ひげ海賊団16番隊隊長',''],
+ 980: ['ブラメンコ 白ひげ海賊団6番隊隊長',''],
+ 981: ['ナミュール 白ひげ海賊団8番隊隊長',''],
+ 982: ['ビスタ 白ひげ海賊団5番隊隊長','','Coliseum Vista'],
+ 983: ['花剣のビスタ 白ひげ海賊団5番隊隊長','','Coliseum Vista'],
+ 984: ['パウリー ガレーラカンパニー1番ドック職長','','Coliseum Paulie'],
+ 985: ['デマロ・ブラック&ショコラ ニセ麦わらの一味','','Raid', 'Imposter', 'Fake'],
+ 986: ['ココア&のらギツネ ニセ麦わらの一味','','Raid', 'Imposter', 'Fake'],
+ 987: ['マンジャロウ&ドリップ ニセ麦わらの一味','','Raid', 'Imposter', 'Fake'],
+ 988: ['マウンブルテン&トルコ ニセ麦わらの一味','','Raid', 'Imposter', 'Fake'],
+ 989: ['ニセ麦わらの一味','','Raid', 'Imposter', 'Fake'],
+ 990: ['マッハ・バイス',''],
+ 991: ['マッハ・バイス ドンキホーテ海賊団',''],
+ 992: ['グラディウス',''],
+ 993: ['グラディウス ドンキホーテ海賊団',''],
+ 994: ['ヴァイオレット',''],
+ 995: ['ヴァイオレット ドンキホーテ海賊団',''],
+ 996: ['デリンジャー',''],
+ 997: ['デリンジャー ドンキホーテ海賊団',''],
+ 998: ['ディアマンテ',''],
+ 999: ['ディアマンテ ドンキホーテ海賊団',''],
+ 1000: ['コラソン ドンキホーテ海賊団','','Rocinante','Rosinante'],
+ 1001: ['ドンキホーテ・ロシナンテ','','Rocinante','Corazon'],
+ 1002: ['ベポ ハートの海賊団',''],
+ 1003: ['武闘家のベポ ハートの海賊団',''],
+ 1004: ['シャチ&ペンギン ハートの海賊団',''],
+ 1005: ['ジャンバール',''],
+ 1006: ['ジャンバール ハートの海賊団',''],
+ 1007: ['モネ 寒桜','','Sakura Monet'],
+ 1008: ['モネ 大寒桜','','Sakura Monet'],
+ 1009: ['キズナBOOOOSTルフィ','', 'Afro Luffy', 'Afroluffy' ],
+ 1010: ['バトラー伯爵',''],
+ 1011: ['バトラー伯爵(王なる力)',''],
+ 1012: ['ヘビー総裁',''],
+ 1013: ['ホットドッグ将軍',''],
+ 1014: ['トニートニー・チョッパー 動物王',''],
+ 1015: ['カポネ・ベッジ ファイアタンク海賊団船長','','Coliseum Capone Bege'],
+ 1016: ['カポネ・“ギャング”ベッジ ファイアタンク海賊団船長','','Coliseum Capone Bege'],
+ 1017: ['茶ひげ','','Coliseum Brownbeard'],
+ 1018: ['茶ひげ ワニのケンタウロス','','Coliseum Brownbeard'],
+ 1019: ['ピープリー・ルル ガレーラカンパニー1番ドック職長','','Coliseum Lulu'],
+ 1020: ['シュガー 実桜','','Sakura Sugar'],
+ 1021: ['シュガー 桜桃','','Sakura Sugar'],
+ 1022: ['モンキー・D・ルフィ 海賊王への軌跡','','Anniversary Luffy'],
+ 1023: ['ポートガス・D・エース 海賊王に馳せた夢',''],
+ 1024: ['首領・チンジャオ','Don Chinjao'],
+ 1025: ['首領・チンジャオ 花ノ国のギャング','Don Chinjao'],
+ 1026: ['ブルーギリー',''],
+ 1027: ['ブルーギリー 脚功道格闘家(ジャオクンドー)',''],
+ 1028: ['ボビー・ファンク&ケリー・ファンク',''],
+ 1029: ['ファンク兄弟 モガロ王国の殺し屋',''],
+ 1030: ['ハイルディン',''],
+ 1031: ['ハイルディン 海賊傭兵',''],
+ 1032: ['アブドーラ&ジェット','','Abdullah and Jeet'],
+ 1033: ['アブドーラ&ジェット 元賞金稼ぎ','','Abdullah and Jeet, Former Bounty Hunters'],
+ 1034: ['バルトロメオ',''],
+ 1035: ['人食いのバルトロメオ',''],
+ 1036: ['エンポリオ・イワンコフ 秘密の花園の女王',''],
+ 1037: ['エンポリオ・イワンコフ 奇跡を起こす花園の女王',''],
+ 1038: ['イナズマ 秘密の花園の乙女',''],
+ 1039: ['イナズマ 変革を画策する乙女',''],
+ 1040: [ 'ジョズ 白ひげ海賊団3番隊隊長', '','Coliseum Jozu' ],
+ 1041: [ '“ダイヤモンド”・ジョズ 白ひげ海賊団3番隊隊長', '','Coliseum Jozu' ],
+ 1042: [ 'キラー キッド海賊団', '','Coliseum Killer' ],
+ 1043: [ '“殺戮武人”キラー キッド海賊団', '','Coliseum Killer' ],
+ 1044: [ 'トラファルガー・ロー 最悪の世代', '','LLaw','PLaw' ],
+ 1045: [ 'トラファルガー・ロー 王下七武海', '','LLaw','PLaw' ],
+ 1046: [ 'サボ 竜の爪', '','Raid' ],
+ 1047: [ 'サボ 革命軍参謀総長', '','Raid' ],
+ 1048: [ 'ニコ・オルビア', '' ],
+ 1049: [ 'ニコ・オルビア オハラの考古学者', '' ],
+ 1050: [ 'ハグワール・D・サウロ', '' ],
+ 1051: [ 'ハグワール・D・サウロ 海軍本部中将', '' ],
+ 1052: [ 'ニコ・ロビン オハラの少女', '' ],
+ 1053: [ 'ヒナ おしとやかな優等生', '', 'Kid Hina' ],
+ 1054: [ 'ヒナ れいぎ正しい優等生', '', 'Kid Hina' ],
+ 1055: [ 'ボア・サンダーソニア', '' ],
+ 1056: [ 'ボア・サンダーソニア 九蛇海賊団', '' ],
+ 1057: [ 'ボア・マリーゴールド', '' ],
+ 1058: [ 'ボア・マリーゴールド 九蛇海賊団', '' ],
+ 1059: [ 'マーガレット 女戦士', '' ],
+ 1060: [ 'マーガレット 九蛇の戦士', '' ],
+ 1061: [ 'キキョウ', '' ],
+ 1062: [ 'グロリオーサ', '' ],
+ 1063: [ '破壊の女射手 九蛇の戦士', '' ],
+ 1064: [ '謀略の女射手 九蛇の戦士', '' ],
+ 1065: [ 'かしこい女剣士 九蛇の戦士', '' ],
+ 1066: [ 'あかるい女剣士 九蛇の戦士', '' ],
+ 1067: [ '熟練女格闘士 九蛇の戦士', '' ],
+ 1068: [ '敏捷女格闘士 九蛇の戦士', '' ],
+ 1069: [ 'シュライヤ・バスクード', '', 'Shovel Guy' ],
+ 1070: [ 'シュライヤ・バスクード 海賊処刑人', '', 'Shovel Guy' ],
+ 1071: [ 'ガスパーデ', '' ],
+ 1072: [ 'ガスパーデ ガスパーデ海賊団', '' ],
+ 1073: [ 'ニードルス', '' ],
+ 1074: [ 'リッキー', '', 'King Riku' ],
+ 1075: [ 'リッキー 謎の剣闘士', '', 'King Riku' ],
+ 1076: [ 'レオ', '' ],
+ 1077: [ 'レオ トンタッタ族戦士長', '' ],
+ 1078: [ 'マンシェリー', '' ],
+ 1079: [ 'マンシェリー トンタッタ族王女', '' ],
+ 1080: [ 'キュロス', '' ],
+ 1081: [ 'キュロス 元リク王軍軍隊長', '' ],
+ 1082: [ '首領・サイ', '' ],
+ 1083: [ '首領・サイ 花ノ国のギャング', '' ],
+ 1084: [ '藤虎', '' ],
+ 1085: [ 'イッショウ', '', 'Fujitora' ],
+ 1086: [ 'ムッシュール', '','Coliseum Musshuru' ],
+ 1087: [ 'ムッシュール 毒胞子人間', '','Coliseum Musshuru' ],
+ 1088: [ 'サガ', '','Coliseum Saga' ],
+ 1089: [ 'サガ 呪われた聖剣', '','Coliseum Saga' ],
+ 1090: [ 'X・ドレーク ドレーク海賊団', '','Coliseum X Drake' ],
+ 1091: [ '赤旗 X・ドレーク ドレーク海賊団', '','Coliseum X Drake' ],
+ 1092: [ 'レベッカ パラソルのリズム', '','Kid Rebecca' ],
+ 1093: [ 'レベッカ 虹のメロディ', '','Kid Rebecca' ],
+ 1094: [ 'Dr.インディゴ', '' ],
+ 1095: [ 'Dr.インディゴ 金獅子海賊団', '' ],
+ 1096: [ 'スカーレット隊長', '' ],
+ 1097: [ 'スカーレット隊長 金獅子海賊団', '' ],
+ 1098: [ '雷鳥ビリー', '' ],
+ 1099: [ 'コビー 雨の中の曹長', '' ],
+ 1100: [ 'コビー 露にきらめく曹長', '' ],
+ 1101: [ '黒腕のゼファー', '','Coliseum Zephyr' ],
+ 1102: [ '黒腕のゼファー 元海軍本部大将', '','Coliseum Zephyr' ],
+ 1103: [ 'アイン NEO海軍', '','Coliseum Ain' ],
+ 1104: [ 'アイン ゼファー最後の教え子', '','Coliseum Ain' ],
+ 1105: [ 'ビンズ NEO海軍', '','Coliseum Binz' ],
+ 1106: [ 'ビンズ ゼファー最後の教え子', '','Coliseum Binz' ],
+ 1107: [ '金獅子のシキ', '','Raid' ],
+ 1108: [ '金獅子のシキ 金獅子海賊団', '','Raid' ],
+ 1109: [ 'ナミ 若返った航海士', '' ],
+ 1110: [ 'ナミ 酒場のお茶目なアイドル', '' ],
+ 1111: [ 'ニコ・ロビン 若返った考古学者', '' ],
+ 1112: [ 'ニコ・ロビン 酒場の可憐な踊り娘', '' ],
+ 1113: [ 'チョッパー 若返った船医', '' ],
+ 1114: [ 'モンキー・D・ルフィ 夢を追い求める冒険者', 'New Strong World Luffy', 'SW Luffy' ],
+ 1115: [ 'モンキー・D・ルフィ 信念に生きる麦わらの一味', 'New Strong World Luffy', 'SW Luffy' ],
+ 1116: [ 'サンジ 夢を追い求める冒険者', 'New Strong World Sanji', 'SW Sanji' ],
+ 1117: [ 'サンジ 信念に生きる麦わらの一味', 'New Strong World Sanji', 'SW Sanji' ],
+ 1118: [ 'ナミ 夢を追い求める冒険者', 'New Strong World Nami', 'SW Nami' ],
+ 1119: [ 'ナミ 信念に生きる麦わらの一味', 'New Strong World Nami', 'SW Nami' ],
+ 1120: [ 'モンキー・D・ルフィ 終わらぬ夢の航跡・麦わらの一味', '', 'Log Luffy' ],
+ 1121: [ 'モンキー・D・ルフィ 大海賊時代への誓い「海賊王」', '', 'Log Luffy' ],
+ 1122: [ 'キャベンディッシュ', '','Hakuba', 'Cabbage' ],
+ 1123: [ '白馬のキャベンディッシュ', '','Hakuba', 'Cabbage' ],
+ 1124: ['スレイマン',''],
+ 1125: ['首はねスレイマン',''],
+ 1126: ['オオロンブス',''],
+ 1127: ['オオロンブス 殺戮支配者',''],
+ 1128: ['ダガマ',''],
+ 1129: ['ダガマ プロデンス王国軍師',''],
+ 1130: ['エリザベローII世',''],
+ 1131: ['エリザベローII世 プロデンス王国国王',''],
+ 1132: ['イデオ',''],
+ 1133: ['イデオ 破壊砲',''],
+ 1134: ['たしぎ がむしゃらな剣道少女','','Young Tashigi', 'Kid Tashigi'],
+ 1135: ['たしぎ 夢見る剣道少女','','Young Tashigi', 'Kid Tashigi'],
+ 1136: ['フクロウ 世界政府直下暗躍諜報機関',''],
+ 1137: ['ジャブラ 世界政府直下暗躍諜報機関',''],
+ 1138: ['ブルーノ 世界政府直下暗躍諜報機関',''],
+ 1139: ['クマドリ 世界政府直下暗躍諜報機関',''],
+ 1140: ['ゲッコー・モリア 魔の三角地帯の主','','Coliseum Gekko Moriah'],
+ 1141: ['ゲッコー・モリア 魔の三角地帯の支配者','','Coliseum Gekko Moriah'],
+ 1142: ['フォクシー ドーナツレースの邪魔者','','Coliseum Foxy','Dying Foxy'],
+ 1143: ['フォクシー コンバットの卑怯者','','Coliseum Foxy','Nurse Foxy'],
+ 1144: ['ポルチェ お花チアリーダーズ','','Coliseum Porche'],
+ 1145: ['ポルチェ キューティバトンの使い手','','Coliseum Porche'],
+ 1146: ['制圧の制服看守',''],
+ 1147: ['火急の制服看守',''],
+ 1148: ['包囲の制服看守',''],
+ 1149: ['理論派獄卒',''],
+ 1150: ['行動派獄卒',''],
+ 1151: ['ミノタウロス',''],
+ 1152: ['ミノゼブラ',''],
+ 1153: ['スフィンクス',''],
+ 1154: ['サルデス 牢番長',''],
+ 1155: ['軍隊ウルフ',''],
+ 1156: ['ハンニャバル副署長',''],
+ 1157: ['ハンニャバル副署長 海底監獄インペルダウン',''],
+ 1158: ['マゼラン署長',''],
+ 1159: ['マゼラン署長 海底監獄インペルダウン',''],
+ 1160: ['コアラ ビーチの天使','','Summertime Koala','Swimsuit Koala'],
+ 1161: ['コアラ 楽園の女神','','Summertime Koala','Swimsuit Koala'],
+ 1162: ['ギルド・テゾーロ','','Raid'],
+ 1163: ['ギルド・テゾーロ 黄金船のカジノ王','','Raid'],
+ 1164: ['カリーナ','','Raid'],
+ 1165: ['カリーナ 黄金船の歌姫','','Raid'],
+ 1166: ['バカラ',''],
+ 1167: ['バカラ 黄金船のコンシェルジュ',''],
+ 1168: ['ダイス',''],
+ 1169: ['ダイス 黄金船のディーラー',''],
+ 1170: ['タナカさん',''],
+ 1171: ['タナカさん 黄金船の警備担当',''],
+ 1172: ['ブルック 夢を追い求める冒険者','','New Strong World Brook', 'SW Brook' ],
+ 1173: ['ブルック 信念に生きる麦わらの一味','','New Strong World Brook', 'SW Brook' ],
+ 1174: ['ロロノア・ゾロ 夢を追い求める冒険者','','New Strong World Zoro', 'SW Zoro' ],
+ 1175: ['ロロノア・ゾロ 信念に生きる麦わらの一味','','New Strong World Zoro', 'SW Zoro' ],
+ 1176: ['チョッパー 夢を追い求める冒険者','','New Strong World Chopper', 'SW Chopper' ],
+ 1177: ['チョッパー 信念に生きる麦わらの一味','','New Strong World Chopper', 'SW Chopper' ],
+ 1178: ['オーズ','','Oz'],
+ 1179: ['魔人オーズ','','Oz'],
+ 1180: ['虹ヨロイガニ',''],
+ 1181: ['ブレンハイム',''],
+ 1182: ['カトラスのブレンハイム',''],
+ 1183: ['キングデュー',''],
+ 1184: ['双拳ガントレットのキングデュー',''],
+ 1185: ['ハルタ',''],
+ 1186: ['疾風の小剣士ハルタ',''],
+ 1187: ['アトモス',''],
+ 1188: ['水牛のアトモス',''],
+ 1189: ['スピード・ジル',''],
+ 1190: ['シールドランスのスピード・ジル',''],
+ 1191: ['青キジ 海軍本部最高戦力','','Aokiji','Kuzan'],
+ 1192: ['クザン','','Aokiji'],
+ 1193: ['ボア・ハンコック 渚にたたずむ女帝','','Summertime Hancock','Swimsuit Hancock'],
+ 1194: ['ボア・ハンコック 恋に溺れた乙女','','Summertime Hancock','Swimsuit Hancock'],
+ 1195: ['ガン・フォール 先代“神”','','Coliseum Gan Fall', 'Ganfall'],
+ 1196: ['ガン・フォール スカイピアの神','','Coliseum Gan Fall', 'Ganfall'],
+ 1197: ['スカイブリーダー・オーム','','Coliseum Ohm'],
+ 1198: ['ジュエリー・ボニー 弾けるサファイア','','Summertime Jewelry Bonney','Swimsuit Jewelry Bonney'],
+ 1199: ['ジュエリー・ボニー パールホワイトの煌き','','Summertime Jewelry Bonney','Swimsuit Jewelry Bonney'],
+ 1200: ['ヴァイオレット 挑発のバカンス','','Summertime Viola','Swimsuit Viola'],
+ 1201: ['ヴァイオレット 紅潮のバカンス','','Summertime Viola','Swimsuit Viola'],
+ 1202: ['ヨーキ',''],
+ 1203: ['キャラコのヨーキ',''],
+ 1204: ['ブルック ルンバー海賊団',''],
+ 1205: ['“音楽家兼剣士”ブルック ルンバー海賊団',''],
+ 1206: ['ラブーン ルンバー海賊団',''],
+ 1207: ['ニコ・ロビン 夢を追い求める冒険者','','New Strong World Robin', 'SW Robin' ],
+ 1208: ['ニコ・ロビン 信念に生きる麦わらの一味','','New Strong World Robin', 'SW Robin' ],
+ 1209: ['ウソップ 夢を追い求める冒険者','','New Strong World Usopp', 'SW Usopp' ],
+ 1210: ['ウソップ 信念に生きる麦わらの一味','','New Strong World Usopp', 'SW Usopp' ],
+ 1211: ['フランキー 夢を追い求める冒険者','','New Strong World Franky', 'SW Franky' ],
+ 1212: ['フランキー 信念に生きる麦わらの一味','','New Strong World Franky', 'SW Franky' ],
+ 1213: ['ベビー5 ドルフィンフロート','','Summertime Baby 5','Swimsuit Baby 5'],
+ 1214: ['ベビー5 ドルフィンライダー','','Summertime Baby 5','Swimsuit Baby 5'],
+ 1215: ['ガイラム ワールド海賊団','',''],
+ 1216: ['セバスチャン ワールド海賊団','',''],
+ 1217: ['ナイチン ワールド海賊団','',''],
+ 1218: ['ボア・ハンコック アマゾン・リリー皇帝','',''],
+ 1219: ['バーンディ・ワールド','',''],
+ 1220: ['バーンディ・ワールド ワールド海賊団船長','',''],
+ 1221: ['リトルオーズJr. 白ひげ海賊団傘下','',''],
+ 1222: ['猛攻のリトルオーズJr. 白ひげ海賊団傘下','',''],
+ 1223: ['バスティーユ','',''],
+ 1224: ['ヤマカジ','',''],
+ 1225: ['ヒナ 黒檻部隊','',''],
+ 1226: ['スモーカー 海軍本部准将','',''],
+ 1227: ['ジュラキュール・ミホーク 鷹の目','',''],
+ 1228: ['黄猿 海軍本部大将','',''],
+ 1229: ['戦桃丸 海軍本部将校','','Sentoumaru'],
+ 1230: ['鉞の戦桃丸 海軍本部将校','','Sentoumaru'],
+ 1231: ['スモーカー 海軍GL第5支部','',''],
+ 1232: ['スモーカー 海軍GL第5支部「G‐5」中将','',''],
+ 1233: ['たしぎ 海軍GL第5支部','',''],
+ 1234: ['たしぎ 海軍GL第5支部「G‐5」大佐','',''],
+ 1235: ['メイナード 海軍本部中将','',''],
+ 1236: ['追撃のメイナード 海軍本部中将','',''],
+ 1237: ['バスティーユ 海軍本部中将','',''],
+ 1238: ['鮫切りバスティーユ 海軍本部中将','',''],
+ 1239: ['黄猿 海軍本部最高戦力','','Kizaru'],
+ 1240: ['ボルサリーノ','','Kizaru'],
+ 1241: ['コアラ 魚人空手師範代','',''],
+ 1242: ['コアラ 革命軍・魚人空手師範代','',''],
+ 1243: ['ハック 魚人空手師範','',''],
+ 1244: ['ハック 革命軍・魚人空手師範','',''],
+ 1245: ['モンキー・D・ルフィ マリンフォードに舞う“麦わら”','',''],
+ 1246: ['ポートガス・D・エース 処刑台の“火拳”','',''],
+ 1247: ['ポートガス・D・エース マリンフォードに舞う“火拳”','',''],
+ 1248: ['マルコ 秋風にはためく襟元','','Kimono Marco'],
+ 1249: ['マルコ ほろ酔いの着崩れ','','Kimono Marco'],
+ 1250: ['マルコ 白ひげ海賊団','','Coliseum Marco'],
+ 1251: ['マルコ 復活の炎 白ひげ海賊団','','Coliseum Marco'],
+ 1252: ['遊騎士ドーマ 白ひげ海賊団傘下','','Coliseum Doma'],
+ 1253: ['スカイライダー・シュラ','','Coliseum Shura'],
+ 1254: ['大渦蜘蛛スクアード 白ひげ海賊団傘下','',''],
+ 1255: ['絆のディカルバン兄弟 白ひげ海賊団傘下','',''],
+ 1256: ['“氷の魔女”ホワイティベイ 白ひげ海賊団傘下','',''],
+ 1257: ['エドワード・ニューゲート 海賊王のライバル','','Edward Newgate','Young Whitebeard'],
+ 1258: ['エドワード・ニューゲート 大海賊“白ひげ”','','Edward Newgate','Young Whitebeard'],
+ 1259: ['ドンキホーテ・ドフラミンゴ “北の海”の海賊','','Young Doffy','Donquixote Doflamingo'],
+ 1260: ['ドンキホーテ・ドフラミンゴ “北の海”の闇','','Young Doffy','Donquixote Doflamingo'],
+ 1261: ['セニョール・ピンク “北の海”の海賊','','Senor Pink', 'Young Senior Pink'],
+ 1262: ['セニョール・ピンク “北の海”の闇','','Senor Pink', 'Young Senior Pink'],
+ 1263: ['ヴェルゴ “北の海”の海賊','','Young Vergo'],
+ 1264: ['ヴェルゴ “北の海”の闇','','Young Vergo'],
+ 1265: ['エース 黄昏の道草','','Kimono Ace'],
+ 1266: ['エース 月下の艶肌','','Kimono Ace'],
+ 1267: ['マーシャル・D・ティーチ 黒ひげ海賊団船長','',''],
+ 1268: ['黒ひげ 黒ひげ海賊団船長','',''],
+ 1269: ['ラフィット','',''],
+ 1270: ['“鬼保安官”ラフィット','',''],
+ 1271: ['ヴァン・オーガー','',''],
+ 1272: ['“音越”ヴァン・オーガー','',''],
+ 1273: ['ジーザス・バージェス','',''],
+ 1274: ['“チャンピオン”ジーザス・バージェス','',''],
+ 1275: ['シリュウ','','Shiliew'],
+ 1276: ['雨のシリュウ','','Shiliew'],
+ 1277: ['ドクQ','',''],
+ 1278: ['“死神”ドクQ','',''],
+ 1279: ['ジョン・ジャイアント','',''],
+ 1280: ['青キジ 海軍本部大将','','Kuzan'],
+ 1281: ['ガープ 海軍本部中将','',''],
+ 1282: ['センゴク 海軍本部元帥','',''],
+ 1283: ['赤犬 海軍本部大将','','Sakazuki'],
+ 1284: ['モンキー・D・ルフィ 野生の海賊','','Wild Luffy'],
+ 1285: ['モンキー・D・ルフィ 大地の開拓者','','Wild Luffy'],
+ 1286: ['ベビー5 スパイダーマイルズの少女','','Kid Baby 5'],
+ 1287: ['ベビー5 ドンキホーテファミリーの一員','','Kid Baby 5'],
+ 1288: ['トラファルガー・ロー スパイダーマイルズの少年','','Kid Trafalgar Law', 'Kid Law'],
+ 1289: ['トラファルガー・ロー ドンキホーテファミリーの一員','','Kid Trafalgar Law', 'Kid Law'],
+ 1290: ['バッファロー ドンキホーテファミリーの一員','','Kid Buffalo'],
+ 1291: ['ラオG 地翁拳の使い手','','Coliseum Lao G'],
+ 1292: ['ラオG ディアマンテ軍幹部','','Coliseum Lao G'],
+ 1293: ['ボア・サンダーソニア 九蛇の戦士','','Coliseum Sandersonia','Coliseum Boa Sandersonia'],
+ 1294: ['ボア・サンダーソニア ゴルゴン三姉妹・次女','','Coliseum Sandersonia','Coliseum Boa Sandersonia'],
+ 1295: ['カリファ グラマラスミイラ','','Halloween Kalifa'],
+ 1296: ['カリファ グラマラスミイラ ハロウィンナイト・マスカレード','','Halloween Kalifa'],
+ 1297: ['赤犬','','Raid Sakazuki'],
+ 1298: ['赤犬 マグマ人間','','Raid Sakazuki'],
+ 1299: ['レベッカ ラブリーモンスターキャット','',''],
+ 1300: ['レベッカ ラブリーモンスターキャット ハロウィンナイト・マスカレード','',''],
+ 1301: ['受刑者 バギー','','Baggy'],
+ 1302: ['受刑者 道化のバギー 脱獄同盟','','Baggy'],
+ 1303: ['脱走囚 ギャルディーノ','','Mr 3', 'Mr. 3'],
+ 1304: ['脱走囚 ギャルディーノ 脱獄同盟','','Mr 3', 'Mr. 3'],
+ 1305: ['シュガー リトルサキュバス','',''],
+ 1306: ['シュガー リトルサキュバス ハロウィンナイト・マスカレード','',''],
+ 1307: ['バルトロメオ フルムーンウルフ','','Halloween Bartolomeo'],
+ 1308: ['バルトロメオ フルムーンウルフ ハロウィンナイト・マスカレード','','Halloween Bartolomeo'],
+ 1309: ['錦えもん','','Coliseum Kinemon'],
+ 1310: ['狐火の錦えもん','','Coliseum Kinemon'],
+ 1311: ['ボア・マリーゴールド 九蛇の戦士','','Coliseum Marigold','Coliseum Boa Marigold'],
+ 1312: ['ボア・マリーゴールド ゴルゴン三姉妹・三女','','Coliseum Marigold','Coliseum Boa Marigold'],
+ 1313: ['赤犬 海軍本部最高戦力','','Sakazuki'],
+ 1314: ['サカズキ','','Akainu'],
+ 1315: ['海軍本部曹長 コビー “偉大なる航路”の海兵','',''],
+ 1316: ['海軍本部曹長 コビー “海軍の英雄”の教え子','',''],
+ 1317: ['モンキー・D・ガープ 海軍本部中将','',''],
+ 1318: ['ゲンコツのガープ 海軍本部中将','',''],
+ 1319: ['つる 海軍本部中将','',''],
+ 1320: ['“大参謀”つる 海軍本部中将','',''],
+ 1321: ['モモンガ 怪物斬りの名将','',''],
+ 1322: ['海軍本部中将モモンガ 怪物斬りの名将','',''],
+ 1323: ['オニグモ 八刀流の剣士','',''],
+ 1324: ['海軍本部中将オニグモ 八刀流の剣士','',''],
+ 1325: ['コラソン ロイヤルヴァンパイア','',''],
+ 1326: ['コラソン ロイヤルヴァンパイア ハロウィンナイト・マスカレード','',''],
+ 1327: ['レオ トンタッタ族トンタ兵団','',''],
+ 1328: ['戦士レオ トンタッタ族トンタ兵団','',''],
+ 1329: ['ウィッカ','',''],
+ 1330: ['ガンチョ','',''],
+ 1331: ['マンシェリー トンタ長の娘','',''],
+ 1332: ['マンシェリー トンタッタ王国の姫','',''],
+ 1333: ['カブ','',''],
+ 1334: ['ビアン','',''],
+ 1335: ['サボ 貴女との一幕','','Gentleman Sabo'],
+ 1336: ['サボ 劇場の怪人','','Gentleman Sabo'],
+ 1337: ['カン十郎','','Coliseum Kanjuro'],
+ 1338: ['夕立ち カン十郎','','Coliseum Kanjuro'],
+ 1339: ['トニートニー・チョッパー 飛力強化(ジャンピングポイント)','','Coliseum Chopper','Coliseum Tony Tony Chopper'],
+ 1340: ['ゲダツ スカイピア神官','','Coliseum Gedatsu'],
+ 1341: ['空番長 ゲダツ スカイピア神官','','Coliseum Gedatsu'],
+ 1342: ['カーリー・ダダン','',''],
+ 1343: ['ポルシェーミ','',''],
+ 1344: ['ブルージャム','',''],
+ 1345: ['ジンベエ 魚人海賊団船長','','Jinbe'],
+ 1346: ['ヘラクレス おいはぎの森のスゴ腕先生','',''],
+ 1347: ['トリノ王国の怪鳥','',''],
+ 1348: ['ヒューマンドリル','',''],
+ 1349: ['ハレダス','',''],
+ 1350: ['テーナ・ゲーナ王国の手長族','',''],
+ 1351: ['テキーラウルフの警備兵','',''],
+ 1352: ['エンポリオ・イワンコフ キングオブニューカマー','',''],
+ 1353: ['シルバーズ・レイリー 海賊王の船員','',''],
+ 1354: ['シルバーズ・レイリー 眠らぬ街のマスター','','Secret Rayleigh'],
+ 1355: ['シルバーズ・レイリー ライムライトに煌く冥王','','Secret Rayleigh'],
+ 1356: ['ペコムズ','',''],
+ 1357: ['ペコムズ ビッグ・マム海賊団','',''],
+ 1358: ['タマゴ男爵','',''],
+ 1359: ['タマゴ男爵 ビッグ・マム海賊団','',''],
+ 1360: ['ルフィの冬島冒険','','Winter Luffy'],
+ 1361: ['ロロノア・ゾロ 集結の麦わらの一味','','New World Zoro'],
+ 1362: ['ロロノア・ゾロ 新生・麦わらの一味','','New World Zoro'],
+ 1363: ['フランキー 集結の麦わらの一味','','New World Franky'],
+ 1364: ['フランキー 新生・麦わらの一味','','New World Franky'],
+ 1365: ['ナミ 集結の麦わらの一味','','New World Nami'],
+ 1366: ['ナミ 新生・麦わらの一味','','New World Nami'],
+ 1367: ['サンジ 集結の麦わらの一味','','New World Sanji'],
+ 1368: ['サンジ 新生・麦わらの一味','','New World Sanji'],
+ 1369: ['トニートニー・チョッパー 集結の麦わらの一味','','New World Chopper'],
+ 1370: ['トニートニー・チョッパー 新生・麦わらの一味','','New World Chopper'],
+ 1371: ['ロロノア・ゾロ 野生の海賊','','Wild Zoro'],
+ 1372: ['ロロノア・ゾロ 大地の開拓者','','Wild Zoro'],
+ 1373: ['マゼラン','','Raid Magellan'],
+ 1374: ['マゼラン 監獄署長','','Raid Magellan'],
+ 1375: ['デリンジャー 闘魚の血を引く半魚人', '', 'Coliseum Dellinger'],
+ 1376: ['デリンジャー ディアマンテ軍戦闘員', '', 'Coliseum Dellinger'],
+ 1377: ['マーガレット アマゾン・リリーの弓兵', '', 'Coliseum Marguerite'],
+ 1378: ['マーガレット 九蛇の覇気使い', '', 'Coliseum Marguerite'],
+ 1379: ['シャンクス 赤髪海賊団大頭', '', 'Coliseum Shanks'],
+ 1380: ['赤髪のシャンクス 赤髪海賊団大頭', '', 'Coliseum Shanks'],
+ 1381: ['', '', 'Christmas Tashigi'],
+ 1382: ['', '', 'Christmas Tashigi'],
+ 1383: ['オモチャの兵隊さん', '', 'Toy Soldier', 'Kyros'],
+ 1384: ['オモチャの兵隊さん 雷兵', '', 'Toy Soldier', 'Kyros'],
+ 1385: ['レベッカ 生き残った旧王家の血', '', 'Kid Rebecca'],
+ 1386: ['レベッカ 狙われる旧王家の血', '', 'Kid Rebecca'],
+ 1387: ['', '', 'Mega Luffy', 'Super Luffy'],
+ 1388: ['ロロノア・ゾロ 厄港鳥(ヤッコウドリ)', '', 'Mega Zoro', 'Super Zoro'],
+ 1389: ['ナミ サンダーブリード=テンポ', '', 'Mega Nami', 'Super Nami'],
+ 1390: ['道化のバギー バギー海賊団船長', '', 'Legend Buggy', 'Legend Baggy'],
+ 1391: ['キャプテン・バギー', '', 'Legend Buggy', 'Legend Baggy'],
+ 1392: ['戦桃丸 シャボンディ諸島の壁', '', ''],
+ 1393: ['デマロ・ブラック', '', 'Fake Straw Hat', 'Impostor Straw Hat', 'Imposter Straw Hat'],
+ 1394: ['ベビー5 神前の晴れ着', '', 'Kimono Baby 5'],
+ 1395: ['ベビー5 ぎこちない振袖', '', 'Kimono Baby 5'],
+ 1396: ['たしぎ シャンブルズ', '', 'Smoker'],
+ 1397: ['たしぎ 七尺十手 シャンブルズ', '', 'Smoker'],
+ 1398: ['スモーカー シャンブルズ', '', 'Tashigi'],
+ 1399: ['スモーカー 時雨 シャンブルズ', '', 'Tashigi'],
+ 1400: ['グラディウス 破裂人間', '', 'Coliseum Gladius'],
+ 1401: ['グラディウス ピーカ軍幹部', '', 'Coliseum Gladius'],
+ 1402: ['ドルトン ドラム島民間護衛団団長', '', 'Coliseum Dalton'],
+ 1403: ['モンキー・D・ルフィ 集結の麦わらの一味', '', 'New World Luffy'],
+ 1404: ['モンキー・D・ルフィ 新生・麦わらの一味', '', 'New World Luffy'],
+ 1405: ['ウソップ 集結の麦わらの一味', '', 'New World Usopp'],
+ 1406: ['ウソップ 新生・麦わらの一味', '', 'New World Usopp'],
+ 1407: ['ニコ・ロビン 集結の麦わらの一味', '', 'New World Robin'],
+ 1408: ['ニコ・ロビン 新生・麦わらの一味', '', 'New World Robin'],
+ 1409: ['ブルック 集結の麦わらの一味', '', 'New World Brook'],
+ 1410: ['ブルック 新生・麦わらの一味', '', 'New World Brook'],
+ 1411: ['トニートニー・チョッパー 脚力強化 集結の麦わらの一味', '', 'New World Chopper'],
+ 1412: ['トニートニー・チョッパー 怪物強化 新生・麦わらの一味', '', 'New World Chopper'],
+ 1413: ['白ひげ 四皇', '', 'Mega Whitebeard'],
+ 1414: ['サンジ 料理を作って一服中', '', 'Naked Sanji'],
+ 1415: ['センゴク 智将', '', ''],
+ 1416: ['仏のセンゴク 智将', '', ''],
+ 1417: ['ロンズ', '', ''],
+ 1418: ['カイゼルヒゲ', '', ''],
+ 1419: ['', '', 'Kimono Lucci'],
+ 1420: ['', '', 'Kimono Lucci'],
+ 1421: ['', '', 'Coliseum Diamante'],
+ 1422: ['', '', 'Coliseum Diamante'],
+ 1423: ['', '', 'Coliseum T-Bone'],
+ 1424: ['', '', 'Coliseum Gin'],
+ 1425: ['', '', ''],
+ 1426: ['', '', ''],
+ 1427: ['', '', ''],
+ 1428: ['', '', ''],
+ 1429: ['', '', 'Valentine Mansherry'],
+ 1430: ['', '', 'Valentine Mansherry'],
};
diff --git a/common/data/captains.js b/common/data/captains.js
index 649838608..d280e8fe2 100644
--- a/common/data/captains.js
+++ b/common/data/captains.js
@@ -1,2113 +1,3976 @@
window.captains = {
- 2: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 3: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 4: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 5: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 6: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 7: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 8: {
- atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; },
- hp: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
- },
- 10: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 11: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 12: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 13: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.2 : 1; }
- },
- 14: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 15: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 16: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 17: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 18: {
- hp: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 19: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 20: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 21: {
- rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
- },
- 22: {
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 23: {
- rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 24: {
- rcv: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 25: {
- rcv: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 26: {
- rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 27: {
- hp: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; }
- },
- 28: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.2 : 1; }
- },
- 35: {
- hp: function(p) { return p.unit.class.has("Slasher") ? 1.2 : 1; }
- },
- 36: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 37: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 38: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 39: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 41: {
- rcv: function(p) { return p.unit.type == "INT" ? 1.2 : 1; }
- },
- 42: {
- atk: function(p) { return p.unit.type == "STR" ? 1.2 : 1; }
- },
- 45: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; }
- },
- 46: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 49: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 52: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2.5 : 1; }
- },
- 59: {
- atk: function(p) { return p.unit.type == "INT" ? 1.2 : 1; }
- },
- 60: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 61: {
- hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 62: {
- hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 65: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 66: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 67: {
- rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 68: {
- rcv: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 74: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 75: {
- atk: function(p) { return p.unit.type == "QCK" ? 2.5 : 1; }
- },
- 76: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 77: {
- atk: function(p) { return p.unit.type == "PSY" ? 2.5 : 1; }
- },
- 194: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 195: {
- rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 196: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 198: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 199: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 200: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 201: {
- hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 202: {
- hp: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 205: {
- hp: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; }
- },
- 206: {
- hp: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; }
- },
- 209: {
- rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 210: {
- rcv: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 211: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; }
- },
- 212: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 215: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 217: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 3.5 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 220: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 221: {
- atk: function(p) { return p.unit.type == "INT" ? 2.5 : 1; }
- },
- 222: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
- },
- 223: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 224: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect"]) ? 2 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 225: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect"]) ? 2.5 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 226: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 227: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2.5 : 1; }
- },
- 228: {
- hp: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 230: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 231: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 232: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 233: {
- hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 234: {
- hp: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 235: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.2 : 1; }
- },
- 236: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 248: {
- atk: function(p) { return p.unit.type == "STR" ? 2.5 : 1; },
- hp: function(p) { return p.unit.type == "STR" ? 0.4 : 1; }
- },
- 249: {
- atk: function(p) { return p.unit.type == "STR" ? 3 : 1; },
- hp: function(p) { return p.unit.type == "STR" ? 0.4 : 1; }
- },
- 250: {
- atk: function(p) { return p.unit.type == "PSY" && p.percHP >= 99.0 ? 3 : 1; }
- },
- 251: {
- atk: function(p) { return p.unit.type == "PSY" && p.percHP >= 99.0 ? 3 : 1; }
- },
- 252: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
- hp: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 253: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
- hp: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 254: {
- hp: function(p) { return p.unit.type == "INT" ? 2 : 1; },
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 255: {
- hp: function(p) { return p.unit.type == "INT" ? 2 : 1; },
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 256: {
- atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
- },
- 257: {
- atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
- },
- 258: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 259: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 260: {
- atk: function(p) { return p.percHP <= 30.0 ? 3 : 1; }
- },
- 261: {
- atk: function(p) { return p.percHP <= 30.0 ? 3 : 1; }
- },
- 263: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 265: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 267: {
- atk: function(p) { return 1.5; },
- hp: function(p) { return 1.5; },
- rcv: function(p) { return 1.5; }
- },
- 290: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 293: {
- hp: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 294: {
- hp: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 295: {
- hp: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
- },
- 296: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
- },
- 297: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
- },
- 298: {
- hp: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 299: {
- atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
- },
- 305: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 306: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
- hp: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 307: {
- atk: function(p) { return p.unit.type == "DEX" ? 2.5 : 1; }
- },
- 308: {
- atk: function(p) { return p.unit.type == "DEX" ? 2.5 : 1; }
- },
- 311: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Below Good", "Below Good", "Below Good"]) ? 3.5 : 1;
- },
- hitModifiers: ["Below Good", "Below Good", "Below Good", "Perfect", "Perfect", "Perfect"]
- },
- 312: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Below Good", "Below Good", "Below Good"]) ? 3.5 : 1;
- },
- hitModifiers: ["Below Good", "Below Good", "Below Good", "Perfect", "Perfect", "Perfect"]
- },
- 313: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
- hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 314: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
- hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 315: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 316: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 319: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 320: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 321: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 322: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 323: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 324: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 328: {
- rcv: function(p) { return p.percHP <= 30.0 ? 5 : 1; }
- },
- 329: {
- rcv: function(p) { return p.percHP <= 30.0 ? 5 : 1; }
- },
- 332: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; },
- hp: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; },
- rcv: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; }
- },
- 333: {
- atk: function(p) { return p.unit.type == "INT" || p.unit.type == "PSY" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "INT" || p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 336: {
- atk: function(p) { return p.percHP <= 50.0 ? 1 : (p.unit.type == "PSY" ? 2 : 0.8); }
- },
- 337: {
- atk: function(p) { return p.percHP <= 50.0 ? 1 : (p.unit.type == "PSY" ? 2.5 : 0.8); }
- },
- 340: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 341: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 352: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
- },
- 353: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2.5 : 1; }
- },
- 356: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 357: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2.5 : 1; }
- },
- 358: {
- atk: function(p) { return p.unit.type == "DEX" && p.percHP >= 99.0 ? 2.5 : 1; }
- },
- 359: {
- atk: function(p) { return p.unit.type == "DEX" && p.percHP >= 99.0 ? 3 : 1; }
- },
- 360: {
- atk: function(p) { return p.unit.type == "INT" && p.percHP <= 30.0 ? 3 : 1; }
- },
- 361: {
- atk: function(p) { return p.unit.type == "INT" && p.percHP <= 30.0 ? 3 : 1; }
- },
- 362: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 363: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 364: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 365: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 366: {
- chainModifier: function(p) { return 4; }
- },
- 367: {
- chainModifier: function(p) { return 4; }
- },
- 373: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 374: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 375: {
- hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 376: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 377: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 378: {
- rcv: function(p) { return 1.5; }
- },
- 380: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 383: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 384: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 385: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 386: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 387: {
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 388: {
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 389: {
- damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['DEX', 'INT', 'QCK']); },
- hitAtk: function(p) {
- return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
- type: 'DEX',
- minModifier: 'Good'
- }, {
- type: 'INT',
- minModifier: 'Good'
- }, {
- type: 'QCK',
- minModifier: 'Good'
- }]) ? 2 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 390: {
- damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['DEX', 'INT', 'QCK']); },
- hitAtk: function(p) {
- return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
- type: 'DEX',
- minModifier: 'Good'
- }, {
- type: 'INT',
- minModifier: 'Good'
- }, {
- type: 'QCK',
- minModifier: 'Good'
- }]) ? 2.75 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 391: {
- rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 392: {
- rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
- },
- 395: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; }
- },
- 396: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 397: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition)
- .subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 3 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 398: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition)
- .subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 4 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 399: {
- hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 400: {
- hp: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 401: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 402: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 403: {
- rcv: function(p) { return p.percHP <= 30.0 ? 3 : 1; }
- },
- 404: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 405: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
- },
- 408: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 409: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 410: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2.5 : 1; }
- },
- 411: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
- hp: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 412: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
- hp: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 413: {
- atk: function(p) { return p.unit.type == "INT" && p.percHP >= 99.0 ? 2.5 : 1; }
- },
- 414: {
- atk: function(p) { return p.unit.type == "INT" && p.percHP >= 99.0 ? 3 : 1; }
- },
- 415: {
- atk: function(p) {
- return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 2.75 : 1;
- },
- rcv: function(p) {
- return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 1.5 : 1;
- }
- },
- 416: {
- atk: function(p) {
- return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 2.75 : 1;
- },
- rcv: function(p) {
- return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 1.5 : 1;
- }
- },
- 417: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 418: {
- hp: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; },
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 419: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 420: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 421: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 422: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 424: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 425: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 426: {
- hp: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 427: {
- hp: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
- },
- 428: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 430: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 431: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 433: {
- damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['QCK', 'STR', 'DEX']); },
- hitAtk: function(p) {
- return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
- type: 'QCK',
- minModifier: 'Good'
- }, {
- type: 'STR',
- minModifier: 'Good'
- }, {
- type: 'DEX',
- minModifier: 'Good'
- }]) ? 2 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 434: {
- damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['PSY', 'INT', 'INT']); },
- hitAtk: function(p) {
- return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
- type: 'PSY',
- minModifier: 'Good'
- }, {
- type: 'INT',
- minModifier: 'Good'
- }, {
- type: 'INT',
- minModifier: 'Good'
- }]) ? 2 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 435: {
- damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['INT', 'PSY', 'QCK']); },
- hitAtk: function(p) {
- return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
- type: 'INT',
- minModifier: 'Good'
- }, {
- type: 'PSY',
- minModifier: 'Good'
- }, {
- type: 'QCK',
- minModifier: 'Good'
- }]) ? 2 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 437: {
- rcv: function(p) { return p.percHP <= 30.0 ? 3 : 1; }
- },
- 438: {
- rcv: function(p) { return p.percHP <= 30.0 ? 5 : 1; }
- },
- 444: {
- atk: function(p) {
- return p.percHP >= 50.0 && (p.unit.class.has("Booster") || p.unit.class.has("Evolver")) ? 2 : 1;
- }
- },
- 445: {
- atk: function(p) {
- return p.percHP >= 50.0 && (p.unit.class.has("Booster") || p.unit.class.has("Evolver")) ? 2.5 : 1;
- }
- },
- 446: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
- hp: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 447: {
- atk: function(p) { return p.unit.type == "STR" ? 2.5 : 1; },
- hp: function(p) { return p.unit.type == "STR" ? 2.25 : 1; }
- },
- 448: {
- atk: function(p) { return p.unit.type == "QCK" && p.percHP >= 99.0 ? 3 : 1; }
- },
- 449: {
- atk: function(p) { return p.unit.type == "QCK" && p.percHP >= 99.0 ? 3 : 1; }
- },
- 450: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; },
- hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 451: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; },
- hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 452: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 453: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 454: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 455: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 456: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; },
- rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 457: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; },
- rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 458: {
- atk: function(p) { return p.unit.cost <= 20 ? 3 : 1; }
- },
- 459: {
- atk: function(p) { return p.unit.number == 458 || p.unit.cost <= 20 ? 3 : 1; }
- },
- 461: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 462: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 463: {
- hp: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 464: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 465: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Below Good", "Below Good", "Below Good", "Below Good"]) ? 3 : 1;
- },
- hitModifiers: ["Below Good", "Below Good", "Below Good", "Below Good", "Perfect", "Perfect"]
- },
- 466: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 467: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 470: {
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 471: {
- atk: function(p) { return p.unit.type == "INT" ? 1.2 : 1; },
- hp: function(p) { return p.unit.type == "INT" ? 1.2 : 1; }
- },
- 482: {
- hp: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; }
- },
- 483: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; }
- },
- 485: {
- hp: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
- },
- 486: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; }
- },
- 490: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; },
- hp: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; }
- },
- 491: {
- rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 492: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 496: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 497: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 498: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 499: {
- rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 500: {
- rcv: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
- },
- 501: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
- hp: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
- },
- 502: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 503: {
- hp: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 504: {
- hp: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 507: {
- atk: function(p) { return p.unit.type == "STR" ? 1.2 : 1; },
- hp: function(p) { return p.unit.type == "STR" ? 1.2 : 1; }
- },
- 508: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 509: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 510: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 511: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 513: {
- atk: function(p) { return p.unit.type == "PSY" && p.percHP >= 50.0 ? 1.5 : 1; }
- },
- 514: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 515: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 516: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 517: {
- hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 518: {
- hp: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 519: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 520: {
- atk: function(p) { return p.unit.type == "STR" ? 2.5 : 1; }
- },
- 523: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 524: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
- rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 525: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 526: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 527: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 528: {
- atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
- },
- 529: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 + 0.75 * p.percHP / 100 : 1; }
- },
- 530: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 + 0.75 * p.percHP / 100 : 1; }
- },
- 533: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 534: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 535: {
- rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 536: {
- rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
- },
- 537: {
- chainModifier: function(p) { return 2; }
- },
- 538: {
- chainModifier: function(p) { return 2; }
- },
- 541: {
- atk: function(p) { return p.unit.type == "STR" && p.percHP <= 50.0 ? 2.5 : 1; }
- },
- 542: {
- hp: function(p) { return 1.5; }
- },
- 543: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- rcv: function(p) { return 0; }
- },
- 544: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2.25 : 1; },
- hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- rcv: function(p) { return 0; }
- },
- 545: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 546: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 548: {
- atk: function(p) { return 1.2; }
- },
- 549: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 550: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.5 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 553: {
- atk: function(p) { return p.unit.type == "DEX" && p.percHP <= 30.0 ? 2.75 : 1; }
- },
- 554: {
- atk: function(p) { return p.unit.type == "DEX" && p.percHP <= 30.0 ? 3 : 1; }
- },
- 555: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
- },
- 556: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; },
- rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 557: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 558: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 559: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 560: {
- atk: function(p) { return p.unit.type == "STR" ? 2.25 : 1; }
- },
- 561: {
- atk: function(p) { return !p.unit.class.has("Shooter") ? 1 : (p.orb == 2.0 ? 3 : 2); },
- hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 562: {
- atk: function(p) { return !p.unit.class.has("Shooter") ? 1 : (p.orb == 2.0 ? 3 : 2); },
- hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 568: {
- atk: function(p) { return 1.25; },
- hp: function(p) { return 1.25; },
- rcv: function(p) { return 1.25; }
- },
- 569: {
- atk: function(p) { return 1.5; },
- hp: function(p) { return 1.5; },
- rcv: function(p) { return 1.5; }
- },
- 570: {
- atk: function(p) {
- return p.unit.class.has("Fighter") && p.unit.type == "STR" ? 2.25 :
- p.unit.type == "STR" || p.unit.class.has("Fighter") ? 1.5 :
- 1;
- }
- },
- 571: {
- atk: function(p) {
- return p.unit.class.has("Fighter") && p.unit.type == "STR" ? 2.25 :
- p.unit.type == "STR" || p.unit.class.has("Fighter") ? 1.5 :
- 1;
- }
- },
- 572: {
- atk: function(p) { return p.unit.class.has("Fighter") && p.percHP >= 99.0 ? 2.5 : 1; }
- },
- 573: {
- rcv: function(p) { return 1.2; }
- },
- 574: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 575: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
- hp: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 576: {
- atk: function(p) { return 1.5; },
- rcv: function(p) { return 1.2; }
- },
- 577: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 4 : 1;
- },
- hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 578: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 4 : 1;
- },
- hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 579: {
- atk: function(p) { return (p.unit.type == "QCK" || p.unit.type == "DEX") ? 1.5 : 1; }
- },
- 580: {
- atk: function(p) { return (p.unit.type == "QCK" || p.unit.type == "DEX") ? 2 : 1; }
- },
- 581: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 582: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 583: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 584: {
- atk: function(p) { return 0.1; },
- hp: function(p) { return 0.1; },
- rcv: function(p) { return 0.1; }
- },
- 585: {
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 586: {
- hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 589: {
- atk: function(p) { return 1.5; },
- hp: function(p) { return 0.2; },
- rcv: function(p) { return 0.2; }
- },
- 590: {
- atk: function(p) { return 1.5; },
- hp: function(p) { return 0.2; },
- rcv: function(p) { return 0.2; }
- },
- 596: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 597: {
- atk: function(p) { return p.unit.type == "STR" ? 1.75 : 1; }
- },
- 598: {
- atk: function(p) { return p.unit.stars < 3 ? 2.5 : 1; }
- },
- 599: {
- atk: function(p) { return p.unit.stars < 3 ? 3 : 1; }
- },
- 600: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 601: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 602: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 603: {
- atk: function(p) { return p.unit.type == "QCK" ? 2.25 : 1; }
- },
- 604: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 605: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 606: {
- atk: function(p) { return p.percHP >= 50.0 && p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 607: {
- atk: function(p) { return p.percHP >= 50.0 && p.unit.class.has("Fighter") ? 2.5 : 1; }
- },
- 612: {
- hp: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 613: {
- hp: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 614: {
- atk: function(p) { return p.unit.cost <= 20 && p.percHP <= 30.0 ? 2.25 : 1; }
- },
- 629: {
- atk: function(p) { return p.unit.stars <= 3 ? 2 : 1; }
- },
- 630: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 631: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 632: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 633: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 634: {
- atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.25 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.25 : 1; }
- },
- 635: {
- atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 636: {
- atk: function(p) { return p.unit.cost <= 2 ? 3 : 1; }
- },
- 637: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 638: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 639: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 640: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 641: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2.25 : 1; }
- },
- 642: {
- atk: function(p) { return p.unit.type == "PSY" && p.percHP <= 30.0 ? 2.5 : 1; }
- },
- 643: {
- atk: function(p) { return p.unit.type == "PSY" && p.percHP <= 30.0 ? 3 : 1; }
- },
- 644: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 645: {
- atk: function(p) { return p.unit.type == "INT" ? 2.5 : 1; }
- },
- 646: {
- atk: function(p) { return p.unit.class.has("Shooter") && p.percHP <= 30.0 ? 2.5 : 1; }
- },
- 647: {
- atk: function(p) { return p.unit.class.has("Shooter") && p.percHP <= 30.0 ? 2.75 : 1; }
- },
- 648: {
- atk: function(p) {
- return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 2.75 : 1;
- }
- },
- 649: {
- atk: function(p) {
- return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 2.75 : 1;
- }
- },
- 650: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 651: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 652: {
- atk: function(p) { return p.unit.type != "DEX" ? 1 : (p.orb == 2.0 ? 2 : 1); }
- },
- 653: {
- atk: function(p) { return p.unit.type != "DEX" ? 1 : (p.orb == 2.0 ? 2.25 : 1); }
- },
- 654: {
- atk: function(p) { return p.unit.type != "DEX" ? 1 : (p.orb == 2.0 ? 2.75 : 1); }
- },
- 655: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 656: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 657: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 658: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 659: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.5 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 660: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
- },
- 661: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
- },
- 662: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 665: {
- atk: function(p) { return 1.2; },
- hp: function(p) { return 0.2; },
- rcv: function(p) { return 0.2; }
- },
- 666: {
- atk: function(p) { return 1.75; },
- hp: function(p) { return 0.2; },
- rcv: function(p) { return 0.2; }
- },
- 667: {
- atk: function(p) { return 1.75; }
- },
- 668: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2 + 0.75 * p.percHP / 100 : 1; },
- hp: function(p) { return 1.2; },
- rcv: function(p) { return 1.2; }
- },
- 669: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2 + 0.75 * p.percHP / 100 : 1; },
- hp: function(p) { return 1.2; },
- rcv: function(p) { return 1.2; }
- },
- 670: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 671: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2.25 : 1; },
- rcv: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 672: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 673: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 674: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2 : 1; }
- },
- 675: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2.5 : 1; }
- },
- 676: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 677: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 678: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
- },
- 679: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 681: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 683: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
- },
- 684: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 686: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 687: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 1.5 : 1; }
- },
- 688: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2 : 1; }
- },
- 689: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.2 : 1; },
- rcv: function(p) { return p.unit.class.has("Slasher") ? 1.2 : 1; }
- },
- 690: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 696: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; }
- },
- 697: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; }
- },
- 698: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.75 : 1; }
- },
- 699: {
- atkStatic: function(p) { return p.unit.class.has("Shooter") ? 500 : 0; }
- },
- 700: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; }
- },
- 701: {
- hp: function(p) { return p.unit.type == "PSY" ? 2.25 : 1; }
- },
- 702: {
- hp: function(p) { return p.unit.type == "INT" ? 2.25 : 1; }
- },
- 705: {
- atk: function(p) {
- return p.unit.type == "STR" || p.unit.type == "DEX" || p.unit.type == "QCK" ? 1.25 : 1;
- },
- hp: function(p) {
- return p.unit.type == "STR" || p.unit.type == "DEX" || p.unit.type == "QCK" ? 1.25 : 1;
- }
- },
- 706: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 707: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 708: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
- },
- 709: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 710: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 711: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
- },
- 712: {
- atk: function(p) { return p.unit.class.has("Striker") && p.percHP >= 50 ? 2 : 1; }
- },
- 713: {
- atk: function(p) { return p.unit.class.has("Striker") && p.percHP >= 50 ? 2.5 : 1; }
- },
- 715: {
- rcv: function(p) { return p.percHP <= 30 ? 3 : 1; }
- },
- 716: {
- rcv: function(p) { return p.percHP <= 30 ? 5 : 1; }
- },
- 717: {
- damageSorter: function(d) { return CrunchUtils.mihawkSort(d); },
- hitAtk: function(p) {
- if (!p.unit.class.has('Slasher')) return 1;
- var prev = p.modifiers.slice(p.chainPosition - 1, p.chainPosition)[0];
- return p.chainPosition === 0 ? 2 : (prev == 'Good' ? 2.25 : (prev == 'Great' ? 2.5 : (prev == 'Perfect' ? 2.75 : 2)));
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 718: {
- damageSorter: function(d) { return CrunchUtils.mihawkSort(d); },
- hitAtk: function(p) {
- if (!p.unit.class.has('Slasher')) return 1;
- var prev = p.modifiers.slice(p.chainPosition - 1, p.chainPosition)[0];
- return p.chainPosition === 0 ? 2 : (prev == 'Good' ? 2.25 : (prev == 'Great' ? 2.5 : (prev == 'Perfect' ? 2.75 : 2)));
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 719: {
- atk: function(p) {
- return p.unit.class.has("Knowledge") ? 1.5 + 1.75 * ((100 - p.percHP) / 100) : 1;
- }
- },
- 720: {
- atk: function(p) {
- return p.unit.class.has("Knowledge") ? 1.5 + 1.75 * ((100 - p.percHP) / 100) : 1;
- }
- },
- 721: {
- atk: function(p) { return p.unit.class.has("Fighter") && p.percHP >= 99.0 ? 1.5 : 1; }
- },
- 722: {
- atk: function(p) { return p.unit.class.has("Fighter") && p.percHP >= 99.0 ? 2 : 1; }
- },
- 723: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 724: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.75 : 1; }
- },
- 727: {
- atk: function(p) {
- return p.unit.class.has("Freedom") || p.unit.class.has("Fighter") ? 1.75 : 1;
- }
- },
- 728: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; }
- },
- 730: {
- atk: function(p) { return p.unit.type == "INT" ? 1.2 : 1; },
- hp: function(p) { return p.unit.type == "INT" ? 1.2 : 1; }
- },
- 731: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 732: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 733: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
- },
- 734: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
- },
- 735: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 736: {
- atk: function(p) { return p.unit.class.has("Slasher") && p.percHP >= 50.0 ? 2.5 : 1; }
- },
- 737: {
- atk: function(p) { return p.unit.class.has("Fighter") && p.percHP <= 30.0 ? 2.75 : 1; }
- },
- 738: {
- atk: function(p) { return p.unit.cost >= 21 ? 2 : 1; }
- },
- 739: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2 : 1; }
- },
- 742: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 1.2 : 1; },
- rcv: function(p) { return p.unit.class.has("Freedom") ? 1.2 : 1; }
- },
- 743: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Freedom") ? 1.5 : 1; }
- },
- 744: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2 : 1; }
- },
- 745: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2.5 : 1; }
- },
- 747: {
- atk: function(p) { return !p.unit.class.has("Tough") ? 1 : (p.orb == 2.0 ? 3 : 2.5); },
- rcv: function(p) { return 0; }
- },
- 748: {
- atk: function(p) { return !p.unit.class.has("Tough") ? 1 : (p.orb == 2.0 ? 3 : 2.5); },
- rcv: function(p) { return 0; }
- },
- 749: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 750: {
- atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
- },
- 751: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; }
- },
- 752: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 2.25 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; }
- },
- 753: {
- atk: function(p) { return p.unit.class.has("Tough") ? 2 : 1; }
- },
- 754: {
- atk: function(p) { return p.unit.class.has("Tough") ? 2.5 : 1; }
- },
- 755: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 756: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
- },
- 757: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 758: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 759: {
- atk: function(p) { return p.unit.type == "STR" && p.percHP <= 30.0 ? 2.5 : 1; }
- },
- 760: {
- atk: function(p) { return p.unit.type == "STR" && p.percHP <= 30.0 ? 3 : 1; }
- },
- 761: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 762: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 763: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 764: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
- },
- 766: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 767: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 768: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 769: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
- },
- 770: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
- },
- 771: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 2.5 : 1; }
- },
- 772: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 774: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2 : 1; }
- },
- 775: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; }
- },
- 776: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.25 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.25 : 1; }
- },
- 777: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; }
- },
- 780: {
- atk: function(p) { return p.percHP <= 30.0 ? 2 : 1; }
- },
- 781: {
- atk: function(p) { return p.percHP <= 30.0 ? 2.5 : 1; }
- },
- 782: {
- rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 783: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; },
- rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 789: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 791: {
- atk: function(p) { return /STR|DEX|QCK/.test(p.unit.type) ? 1.25 : 1; },
- hp: function(p) { return /STR|DEX|QCK/.test(p.unit.type) ? 1.25 : 1; },
- rcv: function(p) { return /STR|DEX|QCK/.test(p.unit.type) ? 1.25 : 1; }
- },
- 793: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; }
- },
- 794: {
- atk: function(p) {
- return p.unit.class.has("Tough") ? Math.max(1.0, 3.0 - 0.1 * p.turnCounter) : 1;
- }
- },
- 795: {
- atk: function(p) {
- return p.unit.class.has("Tough") ? Math.max(1.0, 3.5 - 0.1 * p.turnCounter) : 1;
- }
- },
- 796: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 2 : 1; }
- },
- 797: {
- atk: function(p) { return p.unit.class.has("Knowledge") || p.unit.class.has("Tough") ? 2 : 1; }
- },
- 798: {
- hitAtk: function(p) {
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.5 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 801: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
- },
- 802: {
- atk: function(p) { return p.unit.type == "PSY" ? 2.5 : 1; }
- },
- 803: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; }
- },
- 804: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 805: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 806: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 807: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; }
- },
- 808: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; }
- },
- 809: {
- atk: function(p) { return p.unit.class.has("Tough") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Tough") ? 1.5 : 1; }
- },
- 810: {
- atk: function(p) { return p.unit.class.has("Tough") ? 2 : 1; },
- rcv: function(p) { return p.unit.class.has("Tough") ? 1.5 : 1; }
- },
- 815: {
- damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['STR', 'INT', 'DEX']); },
- hitAtk: function(p) {
- return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
- type: 'STR',
- minModifier: 'Good'
- }, {
- type: 'INT',
- minModifier: 'Good'
- }, {
- type: 'DEX',
- minModifier: 'Good'
- }]) ? 2.5 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 816: {
- damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['STR', 'INT', 'DEX']); },
- hitAtk: function(p) {
- return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
- type: 'STR',
- minModifier: 'Good'
- }, {
- type: 'INT',
- minModifier: 'Good'
- }, {
- type: 'DEX',
- minModifier: 'Good'
- }]) ? 2.75 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 825: {
- atk: function(p) { return p.unit.type == 'STR' ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == 'STR' ? 1.5 : 1; }
- },
- 826: {
- atk: function(p) { return p.unit.type == 'DEX' ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == 'DEX' ? 1.5 : 1; }
- },
- 827: {
- atk: function(p) { return p.unit.type == 'QCK' ? 1.5 : 1; },
- hp: function(p) { return p.unit.type == 'QCK' ? 1.5 : 1; }
- },
- 830: {
- atk: function(p) {
- return p.unit.class.has("Striker") || p.unit.class.has("Knowledge") ? 1.75 : 1;
- }
- },
- 831: {
- atk: function(p) {
- return p.unit.class.has("Striker") || p.unit.class.has("Knowledge") ? 2 : 1;
- }
- },
- 832: {
- atk: function(p) {
- return p.unit.class.has("Freedom") ? 1 + 1.5 * ((100 - p.percHP) / 100) : 1;
- }
- },
- 833: {
- atk: function(p) {
- return p.unit.class.has("Freedom") ? 1 + 1.75 * ((100 - p.percHP) / 100) : 1;
- }
- },
- 834: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 835: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 2 : 1; },
- hp: function(p) { return p.unit.class.has("Knowledge") ? 2 : 1; }
- },
- 836: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 2 : 1; },
- hp: function(p) { return p.unit.class.has("Knowledge") ? 2 : 1; }
- },
- 837: {
- atk: function(p) { return p.unit.class.has("Ambition") ? 2 : 1; }
- },
- 838: {
- atk: function(p) { return p.unit.class.has("Ambition") ? 2.5 : 1; }
- },
- 839: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
- },
- 840: {
- atk: function(p) { return p.unit.class.has("Striker") ? 2.5 : 1; }
- },
- 843: {
- atk: function(p) {
- return p.unit.class.has("Shooter") || p.unit.class.has("Slasher") || p.unit.class.has("Striker") ? 1.5 : 1;
- }
- },
- 844: {
- atk: function(p) {
- return p.unit.class.has("Shooter") || p.unit.class.has("Slasher") || p.unit.class.has("Striker") ? 2 : 1;
- }
- },
- 845: {
- hit: function(n) {
- return n > 22 ? 2.5 :
- n > 11 ? 1.5 : 1;
- }
- },
- 846: {
- hit: function(n) {
- return n > 40 ? 3.5 :
- n > 30 ? 2.75 :
- n > 22 ? 2.5 :
- n > 11 ? 1.5 : 1;
- }
- },
- 847: {
- atk: function(p) { return p.percHP <= 30.0 ? 1.5 : 1; }
- },
- 848: {
- atk: function(p) { return p.percHP <= 30.0 ? 1.5 : 1; }
- },
- 849: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; }
- },
- 850: {
- atk: function(p) {
- return p.unit.class.has("Striker") || p.unit.class.has("Knowledge") ? 1.5 : 1;
- }
- },
- 851: {
- atk: function(p) { return p.unit.class.has("Ambition") ? 1.5 : 1; }
- },
- 852: {
- atk: function(p) { return p.unit.class.has("Ambition") ? 2 : 1; }
- },
- 854: {
- atk: function(p) { return p.unit.type == 'DEX' ? 1.5 : 1; }
- },
- 855: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 856: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2.5 : 1; }
- },
- 857: {
- atk: function(p) { return p.unit.type == 'PSY' ? 2 : 1; }
- },
- 858: {
- atk: function(p) { return p.unit.type == 'PSY' ? 2 : 1; },
- rcv: function(p) { return p.unit.type == 'PSY' ? 2 : 1; }
- },
- 859: {
- atk: function(p) { return p.unit.class.has("Ambition") ? 1.5 : 1; }
- },
- 860: {
- atk: function(p) { return p.unit.class.has("Ambition") ? 2 : 1; }
- },
- 862: {
- atk: function(p) { return p.unit.type == 'QCK' ? 2 : 1; }
- },
- 863: {
- atk: function(p) { return p.unit.type == 'QCK' ? 1.75 : 1; }
- },
- 864: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2 : 1; }
- },
- 865: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 2 : 1; },
- hp: function(p) { return p.unit.class.has("Freedom") ? 2 : 1; }
- },
- 866: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 2 : 1; }
- },
- 867: {
- hit: function(n) { return n > 11 ? 1.5 : 1; }
- },
- 868: {
- atk: function(p) { return 1.2; }
- },
- 869: {
- hitAtk: function(p) {
- if (!p.unit.class.has("Ambition")) return 1;
- return p.modifiers.slice(0, p.chainPosition).count("Perfect") == p.chainPosition ? 3 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 870: {
- hitAtk: function(p) {
- if (!p.unit.class.has("Ambition")) return 1;
- return p.modifiers.slice(0, p.chainPosition).count("Perfect") == p.chainPosition ? 3 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 871: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
- },
- 872: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
- },
- 873: {
- atk: function(p) { return p.unit.class.has("Fighter") && p.percHP <= 30.0 ? 2.5 : 1; }
- },
- 874: {
- atk: function(p) { return p.unit.class.has("Fighter") && p.percHP <= 30.0 ? 3 : 1; }
- },
- 875: {
- atk: function(p) {
- return p.unit.class.has("Knowledge") || p.unit.class.has("Ambition") ? 2 : 1;
- }
- },
- 876: {
- atk: function(p) {
- return p.unit.class.has("Knowledge") || p.unit.class.has("Ambition") ? 2.25 : 1;
- }
- },
- 878: {
- atk: function(p) { return 1.5; }
- },
- 879: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; }
- },
- 880: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 881: {
- hitAtk: function(p) {
- if (!p.unit.class.has("Shooter") && !p.unit.class.has("Freedom")) return 1;
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 2 : 1;
- },
- hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 882: {
- hitAtk: function(p) {
- if (!p.unit.class.has("Shooter") && !p.unit.class.has("Freedom")) return 1;
- return p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 3 : 1;
- },
- hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 883: {
- atk: function(p) { return p.unit.class.has("Tough") ? 1.25 : 1; },
- hp: function(p) { return p.unit.class.has("Tough") ? 1.25 : 1; }
- },
- 884: {
- atk: function(p) { return p.unit.class.has("Tough") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Tough") ? 1.5 : 1; }
- },
- 885: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
- },
- 886: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 887: {
- atk: function(p) { return p.unit.class.has("Ambition") ? 1.5 : 1; }
- },
- 889: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; }
- },
- 890: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
- },
- 891: {
- atk: function(p) { return p.unit.class.has("Tough") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Tough") ? 1.5 : 1; }
- },
- 892: {
- chainModifier: function(p) { return 2; }
- },
- 893: {
- hitAtk: function(p) {
- if (!p.unit.class.has("Tough")) return 1;
- return p.modifiers.slice(0, p.chainPosition)
- .subcontains(["Perfect", "Perfect", "Perfect"]) ? 3 : 1;
- },
- hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 894: {
- hitAtk: function(p) {
- if (!p.unit.class.has("Ambition")) return 1;
- return p.modifiers.slice(0, p.chainPosition)
- .subcontains(["Good", "Great", "Perfect"]) ? 3 : 1;
- },
- hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
- },
- 895: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
- },
- 896: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
- },
- 897: {
- atk: function(p) {
- return p.unit.class.has("Knowledge") || p.unit.class.has("Ambition") ? 2 : 1;
- }
- },
- 898: {
- atk: function(p) {
- return p.unit.class.has("Striker") || p.unit.class.has("Knowledge") ? 1.5 : 1;
- },
- hp: function(p) {
- return p.unit.class.has("Striker") || p.unit.class.has("Knowledge") ? 1.5 : 1;
- }
- },
- 899: {
- atk: function(p) {
- return p.unit.class.has("Fighter") || p.unit.class.has("Freedom") ? 1.75 : 1;
- },
- hp: function(p) {
- return p.unit.class.has("Fighter") || p.unit.class.has("Freedom") ? 1.25 : 1;
- }
- },
- 900: {
- atk: function(p) { return p.unit.class.has("Shooter") && p.percHP >= 99.0 ? 2 : 1; }
- },
- 901: {
- atk: function(p) { return p.unit.class.has("Shooter") && p.percHP >= 99.0 ? 2.75 : 1; }
- },
- 902: {
- atk: function(p) { return p.class.has("Tough") ? 1.25 : 1; },
- hp: function(p) { return p.class.has("Tough") ? 1.25 : 1; }
- },
- 903: {
- atk: function(p) { return p.class.has("Tough") ? 1.25 : 1; },
- hp: function(p) { return p.class.has("Tough") ? 1.25 : 1; }
- },
- 905: {
- atk: function(p) { return p.unit.class.has("Slasher") && p.percHP <= 30 ? 2.5 : 1; }
- },
- 906: {
- atk: function(p) { return p.unit.class.has("Slasher") && p.percHP <= 30 ? 2.75 : 1; }
- },
- 907: {
- atk: function(p) { return p.unit.class.has("Knowledge") && p.percHP <= 30 ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") && p.percHP <= 30 ? 1.5 : 1; }
- },
- 908: {
- atk: function(p) { return p.unit.class.has("Knowledge") && p.percHP <= 30 ? 2.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") && p.percHP <= 30 ? 1.75 : 1; }
- },
- 909: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 910: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
- rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
- },
- 911: {
- atk: function(p) { return p.unit.class.has("Tough") ? 1.5 : 1; },
- hp: function(p) { return p.unit.class.has("Tough") ? 1.5 : 1; }
- },
- 912: {
- atk: function(p) { return p.unit.class.has("Tough") ? 2.25 : 1; },
- hp: function(p) { return p.unit.class.has("Tough") ? 2.25 : 1; }
- },
- 913: {
- atk: function(p) { return p.unit.type != "QCK" ? 1 : (p.orb == 2.0 ? 3 : 1); }
- },
- 914: {
- atk: function(p) { return p.unit.type != "QCK" ? 1 : (p.orb == 2.0 ? 3 : 1.2); }
- },
- 915: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 1.2 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") ? 1.2 : 1; }
- },
- 916: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 1.75 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") ? 1.75 : 1; }
- },
- 917: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
- },
- 918: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; }
- }
-};
\ No newline at end of file
+ 2: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 3: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 4: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1.5; }
+ },
+ 5: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 6: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 7: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 8: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; },
+ hp: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 10: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 11: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 12: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 13: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.2 : 1; }
+ },
+ 14: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 15: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 16: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 17: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 18: {
+ hp: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 19: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 20: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 21: {
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
+ },
+ 22: {
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 23: {
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 24: {
+ rcv: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 25: {
+ rcv: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 26: {
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 27: {
+ hp: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; }
+ },
+ 28: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.2 : 1; }
+ },
+ 35: {
+ hp: function(p) { return p.unit.class.has("Slasher") ? 1.2 : 1; }
+ },
+ 36: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 37: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 38: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 39: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 41: {
+ rcv: function(p) { return p.unit.type == "INT" ? 1.2 : 1; }
+ },
+ 42: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.2 : 1; }
+ },
+ 45: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; }
+ },
+ 46: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 49: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 52: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2.5 : 1; }
+ },
+ 59: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.2 : 1; }
+ },
+ 60: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 61: {
+ hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 62: {
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 65: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 66: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 67: {
+ rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 68: {
+ rcv: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 74: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 75: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2.5 : 1; }
+ },
+ 76: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 77: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2.5 : 1; }
+ },
+ 194: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 195: {
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 196: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 198: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 199: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 200: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 201: {
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 202: {
+ hp: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 205: {
+ hp: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; }
+ },
+ 206: {
+ hp: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; }
+ },
+ 209: {
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 210: {
+ rcv: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 211: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; }
+ },
+ 212: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 215: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 217: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 3.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 220: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 221: {
+ atk: function(p) { return p.unit.type == "INT" ? 2.5 : 1; }
+ },
+ 222: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
+ },
+ 223: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 224: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect"]) ? 2 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 225: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect"]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 226: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 227: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2.5 : 1; }
+ },
+ 228: {
+ hp: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 230: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 231: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 232: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 233: {
+ hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 234: {
+ hp: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 235: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.2 : 1; }
+ },
+ 236: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 248: {
+ atk: function(p) { return p.unit.type == "STR" ? 2.5 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 0.4 : 1; }
+ },
+ 249: {
+ atk: function(p) { return p.unit.type == "STR" ? 3 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 0.4 : 1; }
+ },
+ 250: {
+ atk: function(p) { return p.unit.type == "PSY" && p.percHP >= 99.0 ? 3 : 1; }
+ },
+ 251: {
+ atk: function(p) { return p.unit.type == "PSY" && p.percHP >= 99.0 ? 3 : 1; }
+ },
+ 252: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
+ hp: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 253: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
+ hp: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 254: {
+ hp: function(p) { return p.unit.type == "INT" ? 2 : 1; },
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 255: {
+ hp: function(p) { return p.unit.type == "INT" ? 2 : 1; },
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 256: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 257: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 258: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 259: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 260: {
+ atk: function(p) { return p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 261: {
+ atk: function(p) { return p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 263: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 265: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 267: {
+ atk: function(p) { return 1.5; },
+ hp: function(p) { return 1.5; },
+ rcv: function(p) { return 1.5; }
+ },
+ 290: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 293: {
+ hp: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 294: {
+ hp: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 295: {
+ hp: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 296: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 297: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 298: {
+ hp: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 299: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 305: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 306: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
+ hp: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 307: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2.5 : 1; }
+ },
+ 308: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2.5 : 1; }
+ },
+ 311: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Below Good", "Below Good", "Below Good"]) ? 3.5 : 1;
+ },
+ hitModifiers: ["Below Good", "Below Good", "Below Good", "Perfect", "Perfect", "Perfect"]
+ },
+ 312: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Below Good", "Below Good", "Below Good"]) ? 3.5 : 1;
+ },
+ hitModifiers: ["Below Good", "Below Good", "Below Good", "Perfect", "Perfect", "Perfect"]
+ },
+ 313: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 314: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 315: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 316: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 319: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 320: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 321: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 322: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 323: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 324: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 328: {
+ rcv: function(p) { return p.percHP <= 30.0 ? 5 : 1; }
+ },
+ 329: {
+ rcv: function(p) { return p.percHP <= 30.0 ? 5 : 1; }
+ },
+ 332: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; }
+ },
+ 333: {
+ atk: function(p) { return p.unit.type == "INT" || p.unit.type == "PSY" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" || p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 336: {
+ atk: function(p) { return p.percHP <= 50.0 ? 1 : (p.unit.type == "PSY" ? 2 : 0.8); }
+ },
+ 337: {
+ atk: function(p) { return p.percHP <= 50.0 ? 1 : (p.unit.type == "PSY" ? 2.5 : 0.8); }
+ },
+ 340: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 341: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 352: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 353: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2.5 : 1; }
+ },
+ 356: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 357: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2.5 : 1; }
+ },
+ 358: {
+ atk: function(p) { return p.unit.type == "DEX" && p.percHP >= 99.0 ? 2.5 : 1; }
+ },
+ 359: {
+ atk: function(p) { return p.unit.type == "DEX" && p.percHP >= 99.0 ? 3 : 1; }
+ },
+ 360: {
+ atk: function(p) { return p.unit.type == "INT" && p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 361: {
+ atk: function(p) { return p.unit.type == "INT" && p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 362: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 363: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 364: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 365: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 366: {
+ chainModifier: function(p) { return 4; }
+ },
+ 367: {
+ chainModifier: function(p) { return 4; }
+ },
+ 373: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 374: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 375: {
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 376: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 377: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 378: {
+ rcv: function(p) { return 1.5; }
+ },
+ 380: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 383: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 384: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 385: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 386: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 387: {
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 388: {
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 389: {
+ damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['DEX', 'INT', 'QCK']); },
+ hitAtk: function(p) {
+ return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
+ type: 'DEX',
+ minModifier: 'Good'
+ }, {
+ type: 'INT',
+ minModifier: 'Good'
+ }, {
+ type: 'QCK',
+ minModifier: 'Good'
+ }]) ? 2 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 390: {
+ damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['DEX', 'INT', 'QCK']); },
+ hitAtk: function(p) {
+ return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
+ type: 'DEX',
+ minModifier: 'Good'
+ }, {
+ type: 'INT',
+ minModifier: 'Good'
+ }, {
+ type: 'QCK',
+ minModifier: 'Good'
+ }]) ? 2.75 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 391: {
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 392: {
+ rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 395: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; }
+ },
+ 396: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 397: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition)
+ .subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 3 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 398: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition)
+ .subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 4 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 399: {
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 400: {
+ hp: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 401: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 402: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 403: {
+ rcv: function(p) { return p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 404: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 405: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 408: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 409: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 410: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2.5 : 1; }
+ },
+ 411: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 412: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 413: {
+ atk: function(p) { return p.unit.type == "INT" && p.percHP >= 99.0 ? 2.5 : 1; }
+ },
+ 414: {
+ atk: function(p) { return p.unit.type == "INT" && p.percHP >= 99.0 ? 3 : 1; }
+ },
+ 415: {
+ atk: function(p) {
+ return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 2.75 : 1;
+ },
+ rcv: function(p) {
+ return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 1.5 : 1;
+ }
+ },
+ 416: {
+ atk: function(p) {
+ return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 2.75 : 1;
+ },
+ rcv: function(p) {
+ return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 1.5 : 1;
+ }
+ },
+ 417: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 418: {
+ hp: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; },
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 419: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 420: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 421: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 422: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 424: {
+ atk: function(p) { return 1.5; }
+ },
+ 425: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 426: {
+ hp: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 427: {
+ hp: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 428: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 430: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 431: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 433: {
+ damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['QCK', 'STR', 'DEX']); },
+ hitAtk: function(p) {
+ return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
+ type: 'QCK',
+ minModifier: 'Good'
+ }, {
+ type: 'STR',
+ minModifier: 'Good'
+ }, {
+ type: 'DEX',
+ minModifier: 'Good'
+ }]) ? 2 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 434: {
+ damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['PSY', 'INT', 'INT']); },
+ hitAtk: function(p) {
+ return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
+ type: 'PSY',
+ minModifier: 'Good'
+ }, {
+ type: 'INT',
+ minModifier: 'Good'
+ }, {
+ type: 'INT',
+ minModifier: 'Good'
+ }]) ? 2 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 435: {
+ damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['INT', 'PSY', 'QCK']); },
+ hitAtk: function(p) {
+ return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
+ type: 'INT',
+ minModifier: 'Good'
+ }, {
+ type: 'PSY',
+ minModifier: 'Good'
+ }, {
+ type: 'QCK',
+ minModifier: 'Good'
+ }]) ? 2 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 437: {
+ rcv: function(p) { return p.unit.type == "DEX" && p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 438: {
+ rcv: function(p) { return p.unit.type == "DEX" && p.percHP <= 30.0 ? 5 : 1; }
+ },
+ 444: {
+ atk: function(p) {
+ return p.percHP >= 50.0 && (p.unit.class.has("Booster") || p.unit.class.has("Evolver")) ? 2 : 1;
+ }
+ },
+ 445: {
+ atk: function(p) {
+ return p.percHP >= 50.0 && (p.unit.class.has("Booster") || p.unit.class.has("Evolver")) ? 2.5 : 1;
+ }
+ },
+ 446: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 447: {
+ atk: function(p) { return p.unit.type == "STR" ? 2.5 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 2.25 : 1; }
+ },
+ 448: {
+ atk: function(p) { return p.unit.type == "QCK" && p.percHP >= 99.0 ? 3 : 1; }
+ },
+ 449: {
+ atk: function(p) { return p.unit.type == "QCK" && p.percHP >= 99.0 ? 3 : 1; }
+ },
+ 450: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 451: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 452: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 453: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 454: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 455: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 456: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 457: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 458: {
+ atk: function(p) { return p.unit.cost <= 20 ? 3 : 1; }
+ },
+ 459: {
+ atk: function(p) { return p.unit.number == 458 || p.unit.cost <= 20 ? 3 : 1; }
+ },
+ 461: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 462: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 463: {
+ hp: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 464: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 465: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Below Good", "Below Good", "Below Good", "Below Good"]) ? 3 : 1;
+ },
+ hitModifiers: ["Below Good", "Below Good", "Below Good", "Below Good", "Perfect", "Perfect"]
+ },
+ 466: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 467: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 470: {
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 471: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.2 : 1; },
+ hp: function(p) { return p.unit.type == "INT" ? 1.2 : 1; }
+ },
+ 482: {
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; }
+ },
+ 483: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; }
+ },
+ 485: {
+ hp: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
+ },
+ 486: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; }
+ },
+ 490: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; }
+ },
+ 491: {
+ rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 492: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 496: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 497: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 498: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 499: {
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 500: {
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 501: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
+ hp: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
+ },
+ 502: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 503: {
+ hp: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 504: {
+ hp: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 507: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.2 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 1.2 : 1; }
+ },
+ 508: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 509: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 510: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 511: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 513: {
+ atk: function(p) { return p.unit.type == "PSY" && p.percHP >= 50.0 ? 1.5 : 1; }
+ },
+ 514: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 515: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 516: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 517: {
+ hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 518: {
+ hp: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 519: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 520: {
+ atk: function(p) { return p.unit.type == "STR" ? 2.5 : 1; }
+ },
+ 523: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 524: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 525: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 526: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 527: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 528: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 529: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 + 0.75 * p.percHP / 100 : 1; }
+ },
+ 530: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 + 0.75 * p.percHP / 100 : 1; }
+ },
+ 533: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 534: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 535: {
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 536: {
+ rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 537: {
+ chainModifier: function(p) { return 2; }
+ },
+ 538: {
+ chainModifier: function(p) { return 2; }
+ },
+ 541: {
+ atk: function(p) { return p.unit.type == "STR" && p.percHP <= 50.0 ? 2.5 : 1; }
+ },
+ 542: {
+ hp: function(p) { return 1.5; }
+ },
+ 543: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 0 : 1; }
+ },
+ 544: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 0 : 1; }
+ },
+ 545: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 546: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 548: {
+ atk: function(p) { return 1.2; }
+ },
+ 549: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 550: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 553: {
+ atk: function(p) { return p.unit.type == "DEX" && p.percHP <= 30.0 ? 2.75 : 1; }
+ },
+ 554: {
+ atk: function(p) { return p.unit.type == "DEX" && p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 555: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 556: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 557: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 558: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 559: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 560: {
+ atk: function(p) { return p.unit.type == "STR" ? 2.25 : 1; }
+ },
+ 561: {
+ atk: function(p) { return !p.unit.class.has("Shooter") ? 1 : (p.orb == 2.0 ? 3 : 2); },
+ hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 562: {
+ atk: function(p) { return !p.unit.class.has("Shooter") ? 1 : (p.orb == 2.0 ? 3 : 2); },
+ hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 568: {
+ atk: function(p) { return 1.25; },
+ hp: function(p) { return 1.25; },
+ rcv: function(p) { return 1.25; }
+ },
+ 569: {
+ atk: function(p) { return 1.5; },
+ hp: function(p) { return 1.5; },
+ rcv: function(p) { return 1.5; }
+ },
+ 570: {
+ atk: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.type == "STR" ? 2.25 :
+ p.unit.type == "STR" || p.unit.class.has("Fighter") ? 1.5 :
+ 1;
+ }
+ },
+ 571: {
+ atk: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.type == "STR" ? 2.25 :
+ p.unit.type == "STR" || p.unit.class.has("Fighter") ? 1.5 :
+ 1;
+ }
+ },
+ 572: {
+ atk: function(p) { return p.unit.class.has("Fighter") && p.percHP >= 99.0 ? 2.5 : 1; }
+ },
+ 573: {
+ rcv: function(p) { return 1.2; }
+ },
+ 574: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 575: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 576: {
+ atk: function(p) { return 1.5; },
+ rcv: function(p) { return 1.2; }
+ },
+ 577: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 4 : 1;
+ },
+ hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 578: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 4 : 1;
+ },
+ hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 579: {
+ atk: function(p) { return (p.unit.type == "QCK" || p.unit.type == "DEX") ? 1.5 : 1; }
+ },
+ 580: {
+ atk: function(p) { return (p.unit.type == "QCK" || p.unit.type == "DEX") ? 2 : 1; }
+ },
+ 581: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 582: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 583: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 584: {
+ atk: function(p) { return 0.1; },
+ hp: function(p) { return 0.1; },
+ rcv: function(p) { return 0.1; }
+ },
+ 585: {
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 586: {
+ hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 589: {
+ atk: function(p) { return 1.5; },
+ hp: function(p) { return 0.2; },
+ rcv: function(p) { return 0.2; }
+ },
+ 590: {
+ atk: function(p) { return 1.5; },
+ hp: function(p) { return 0.2; },
+ rcv: function(p) { return 0.2; }
+ },
+ 596: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 597: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.75 : 1; }
+ },
+ 598: {
+ atk: function(p) { return p.unit.stars < 3 ? 2.5 : 1; }
+ },
+ 599: {
+ atk: function(p) { return p.unit.stars < 3 ? 3 : 1; }
+ },
+ 600: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 601: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 602: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 603: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2.25 : 1; }
+ },
+ 604: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 605: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 606: {
+ atk: function(p) { return p.percHP >= 50.0 && p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 607: {
+ atk: function(p) { return p.percHP >= 50.0 && p.unit.class.has("Fighter") ? 2.5 : 1; }
+ },
+ 612: {
+ hp: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 613: {
+ hp: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 614: {
+ atk: function(p) { return p.unit.cost <= 20 && p.percHP <= 30.0 ? 2.25 : 1; }
+ },
+ 629: {
+ atk: function(p) { return p.unit.stars <= 3 ? 2 : 1; }
+ },
+ 630: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 631: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 632: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 633: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 634: {
+ atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.25 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.25 : 1; }
+ },
+ 635: {
+ atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 636: {
+ atk: function(p) { return p.unit.cost <= 2 ? 3 : 1; }
+ },
+ 637: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 638: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 639: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 640: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 641: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2.25 : 1; }
+ },
+ 642: {
+ atk: function(p) { return p.unit.type == "PSY" && p.percHP <= 30.0 ? 2.5 : 1; }
+ },
+ 643: {
+ atk: function(p) { return p.unit.type == "PSY" && p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 644: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 645: {
+ atk: function(p) { return p.unit.type == "INT" ? 2.5 : 1; }
+ },
+ 646: {
+ atk: function(p) { return p.unit.class.has("Shooter") && p.percHP <= 30.0 ? 2.5 : 1; }
+ },
+ 647: {
+ atk: function(p) { return p.unit.class.has("Shooter") && p.percHP <= 30.0 ? 2.75 : 1; }
+ },
+ 648: {
+ atk: function(p) {
+ return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 2.75 : 1;
+ }
+ },
+ 649: {
+ atk: function(p) {
+ return (p.unit.type == "QCK" || p.unit.type == "PSY") && p.percHP >= 70.0 ? 2.75 : 1;
+ }
+ },
+ 650: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 651: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 652: {
+ atk: function(p) { return p.unit.type != "DEX" ? 1 : (p.orb == 2.0 ? 2 : 1); }
+ },
+ 653: {
+ atk: function(p) { return p.unit.type != "DEX" ? 1 : (p.orb == 2.0 ? 2.25 : 1); }
+ },
+ 654: {
+ atk: function(p) { return p.unit.type != "DEX" ? 1 : (p.orb == 2.0 ? 2.75 : 1); }
+ },
+ 655: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 656: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 657: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 658: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 659: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 660: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 661: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 662: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 665: {
+ atk: function(p) { return 1.2; },
+ hp: function(p) { return 0.2; },
+ rcv: function(p) { return 0.2; }
+ },
+ 666: {
+ atk: function(p) { return 1.75; },
+ hp: function(p) { return 0.2; },
+ rcv: function(p) { return 0.2; }
+ },
+ 667: {
+ atk: function(p) { return 1.75; }
+ },
+ 668: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 + 0.75 * p.percHP / 100 : 1; },
+ hp: function(p) { return 1.2; },
+ rcv: function(p) { return 1.2; }
+ },
+ 669: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 + 0.75 * p.percHP / 100 : 1; },
+ hp: function(p) { return 1.2; },
+ rcv: function(p) { return 1.2; }
+ },
+ 670: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 671: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2.25 : 1; },
+ rcv: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 672: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 673: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 674: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 675: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2.5 : 1; }
+ },
+ 676: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 677: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 678: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
+ },
+ 679: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 681: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 683: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 684: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 686: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 687: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 688: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 689: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") ? 1.2 : 1; }
+ },
+ 690: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 696: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; }
+ },
+ 697: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; }
+ },
+ 698: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.75 : 1; }
+ },
+ 699: {
+ atkStatic: function(p) { return p.unit.class.has("Shooter") ? 500 : 0; }
+ },
+ 700: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; }
+ },
+ 701: {
+ hp: function(p) { return p.unit.type == "PSY" ? 2.25 : 1; }
+ },
+ 702: {
+ hp: function(p) { return p.unit.type == "INT" ? 2.25 : 1; }
+ },
+ 705: {
+ atk: function(p) {
+ return p.unit.type == "STR" || p.unit.type == "DEX" || p.unit.type == "QCK" ? 1.25 : 1;
+ },
+ hp: function(p) {
+ return p.unit.type == "STR" || p.unit.type == "DEX" || p.unit.type == "QCK" ? 1.25 : 1;
+ }
+ },
+ 706: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 707: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 708: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
+ },
+ 709: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 710: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 711: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 712: {
+ atk: function(p) { return p.unit.class.has("Striker") && p.percHP >= 50 ? 2 : 1; }
+ },
+ 713: {
+ atk: function(p) { return p.unit.class.has("Striker") && p.percHP >= 50 ? 2.5 : 1; }
+ },
+ 715: {
+ rcv: function(p) { return p.percHP <= 30 ? 3 : 1; }
+ },
+ 716: {
+ rcv: function(p) { return p.percHP <= 30 ? 5 : 1; }
+ },
+ 717: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 2.75, [ "Slasher" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has('Slasher')) return 1;
+ var prev = p.modifiers.slice(p.chainPosition - 1, p.chainPosition)[0];
+ return p.chainPosition === 0 ? 2 : (prev == 'Good' ? 2.25 : (prev == 'Great' ? 2.5 : (prev == 'Perfect' ? 2.75 : 2)));
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 718: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 2.75, [ "Slasher" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has('Slasher')) return 1;
+ var prev = p.modifiers.slice(p.chainPosition - 1, p.chainPosition)[0];
+ return p.chainPosition === 0 ? 2 : (prev == 'Good' ? 2.25 : (prev == 'Great' ? 2.5 : (prev == 'Perfect' ? 2.75 : 2)));
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 719: {
+ atk: function(p) {
+ return p.unit.class.has("Cerebral") ? 1.5 + 1.75 * ((100 - p.percHP) / 100) : 1;
+ }
+ },
+ 720: {
+ atk: function(p) {
+ return p.unit.class.has("Cerebral") ? 1.5 + 1.75 * ((100 - p.percHP) / 100) : 1;
+ }
+ },
+ 721: {
+ atk: function(p) { return p.unit.class.has("Fighter") && p.percHP >= 99.0 ? 1.5 : 1; }
+ },
+ 722: {
+ atk: function(p) { return p.unit.class.has("Fighter") && p.percHP >= 99.0 ? 2 : 1; }
+ },
+ 723: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 724: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.75 : 1; }
+ },
+ 727: {
+ atk: function(p) {
+ return p.unit.class.has("Free Spirit") || p.unit.class.has("Fighter") ? 1.75 : 1;
+ }
+ },
+ 728: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; }
+ },
+ 730: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.2 : 1; },
+ hp: function(p) { return p.unit.type == "INT" ? 1.2 : 1; }
+ },
+ 731: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 732: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 733: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 734: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.2 : 1; }
+ },
+ 735: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 736: {
+ atk: function(p) { return p.unit.class.has("Slasher") && p.percHP >= 50.0 ? 2.5 : 1; }
+ },
+ 737: {
+ atk: function(p) { return p.unit.class.has("Fighter") && p.percHP <= 30.0 ? 2.75 : 1; }
+ },
+ 738: {
+ atk: function(p) { return p.unit.cost >= 21 ? 2 : 1; }
+ },
+ 739: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 742: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Free Spirit") ? 1.2 : 1; }
+ },
+ 743: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 744: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 745: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2.5 : 1; }
+ },
+ 747: {
+ atk: function(p) { return !p.unit.class.has("Powerhouse") ? 1 : (p.orb == 2.0 ? 3 : 2.5); },
+ rcv: function(p) { return 0; }
+ },
+ 748: {
+ atk: function(p) { return !p.unit.class.has("Powerhouse") ? 1 : (p.orb == 2.0 ? 3 : 2.5); },
+ rcv: function(p) { return 0; }
+ },
+ 749: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 750: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 751: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 752: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2.25 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 753: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2 : 1; }
+ },
+ 754: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.5 : 1; }
+ },
+ 755: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 756: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 757: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 758: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 759: {
+ atk: function(p) { return p.unit.type == "STR" && p.percHP <= 30.0 ? 2.5 : 1; }
+ },
+ 760: {
+ atk: function(p) { return p.unit.type == "STR" && p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 761: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 762: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 763: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 764: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 766: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 767: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 768: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 769: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 770: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 771: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2.5 : 1; }
+ },
+ 772: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 774: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 775: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 776: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.25 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.25 : 1; }
+ },
+ 777: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; }
+ },
+ 780: {
+ atk: function(p) { return p.percHP <= 30.0 ? 2 : 1; }
+ },
+ 781: {
+ atk: function(p) { return p.percHP <= 30.0 ? 2.5 : 1; }
+ },
+ 782: {
+ rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 783: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 789: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 791: {
+ atk: function(p) { return /STR|DEX|QCK/.test(p.unit.type) ? 1.25 : 1; },
+ hp: function(p) { return /STR|DEX|QCK/.test(p.unit.type) ? 1.25 : 1; },
+ rcv: function(p) { return /STR|DEX|QCK/.test(p.unit.type) ? 1.25 : 1; }
+ },
+ 793: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 794: {
+ atk: function(p) {
+ return p.unit.class.has("Powerhouse") ? Math.max(1.0, 3.0 - 0.1 * p.turnCounter) : 1;
+ }
+ },
+ 795: {
+ atk: function(p) {
+ return p.unit.class.has("Powerhouse") ? Math.max(1.0, 3.5 - 0.1 * p.turnCounter) : 1;
+ }
+ },
+ 796: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2 : 1; }
+ },
+ 797: {
+ atk: function(p) { return p.unit.class.has("Cerebral") || p.unit.class.has("Powerhouse") ? 2 : 1; }
+ },
+ 798: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 801: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 802: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2.5 : 1; }
+ },
+ 803: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; }
+ },
+ 804: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 805: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 806: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 807: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 808: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 809: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 810: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 815: {
+ damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['STR', 'INT', 'DEX']); },
+ hitAtk: function(p) {
+ return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
+ type: 'STR',
+ minModifier: 'Good'
+ }, {
+ type: 'INT',
+ minModifier: 'Good'
+ }, {
+ type: 'DEX',
+ minModifier: 'Good'
+ }]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 816: {
+ damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['STR', 'INT', 'DEX']); },
+ hitAtk: function(p) {
+ return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
+ type: 'STR',
+ minModifier: 'Good'
+ }, {
+ type: 'INT',
+ minModifier: 'Good'
+ }, {
+ type: 'DEX',
+ minModifier: 'Good'
+ }]) ? 2.75 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 825: {
+ atk: function(p) { return p.unit.type == 'STR' ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == 'STR' ? 1.5 : 1; }
+ },
+ 826: {
+ atk: function(p) { return p.unit.type == 'DEX' ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == 'DEX' ? 1.5 : 1; }
+ },
+ 827: {
+ atk: function(p) { return p.unit.type == 'QCK' ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == 'QCK' ? 1.5 : 1; }
+ },
+ 830: {
+ atk: function(p) {
+ return p.unit.class.has("Striker") || p.unit.class.has("Cerebral") ? 1.75 : 1;
+ }
+ },
+ 831: {
+ atk: function(p) {
+ return p.unit.class.has("Striker") || p.unit.class.has("Cerebral") ? 2 : 1;
+ }
+ },
+ 832: {
+ atk: function(p) {
+ return p.unit.class.has("Free Spirit") ? 1 + 1.5 * ((100 - p.percHP) / 100) : 1;
+ }
+ },
+ 833: {
+ atk: function(p) {
+ return p.unit.class.has("Free Spirit") ? 1 + 1.75 * ((100 - p.percHP) / 100) : 1;
+ }
+ },
+ 834: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 835: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Cerebral") ? 2 : 1; }
+ },
+ 836: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Cerebral") ? 2 : 1; }
+ },
+ 837: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; }
+ },
+ 838: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2.5 : 1; }
+ },
+ 839: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 840: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2.5 : 1; }
+ },
+ 843: {
+ atk: function(p) {
+ return p.unit.class.has("Shooter") || p.unit.class.has("Slasher") || p.unit.class.has("Striker") ? 1.5 : 1;
+ }
+ },
+ 844: {
+ atk: function(p) {
+ return p.unit.class.has("Shooter") || p.unit.class.has("Slasher") || p.unit.class.has("Striker") ? 2 : 1;
+ }
+ },
+ 845: {
+ hit: function(n) {
+ return n > 22 ? 2.5 :
+ n > 11 ? 1.5 : 1;
+ }
+ },
+ 846: {
+ hit: function(n) {
+ return n > 40 ? 3.5 :
+ n > 30 ? 2.75 :
+ n > 22 ? 2.5 :
+ n > 11 ? 1.5 : 1;
+ }
+ },
+ 847: {
+ atk: function(p) { return p.percHP <= 30.0 ? 1.5 : 1; }
+ },
+ 848: {
+ atk: function(p) { return p.percHP <= 30.0 ? 1.5 : 1; }
+ },
+ 849: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; }
+ },
+ 850: {
+ atk: function(p) {
+ return p.unit.class.has("Striker") || p.unit.class.has("Cerebral") ? 1.5 : 1;
+ }
+ },
+ 851: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; }
+ },
+ 852: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; }
+ },
+ 854: {
+ atk: function(p) { return p.unit.type == 'DEX' ? 1.5 : 1; }
+ },
+ 855: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 856: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2.5 : 1; }
+ },
+ 857: {
+ atk: function(p) { return p.unit.type == 'PSY' ? 2 : 1; }
+ },
+ 858: {
+ atk: function(p) { return p.unit.type == 'PSY' ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == 'PSY' ? 2 : 1; }
+ },
+ 859: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; }
+ },
+ 860: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; }
+ },
+ 862: {
+ atk: function(p) { return p.unit.type == 'QCK' ? 2 : 1; }
+ },
+ 863: {
+ atk: function(p) { return p.unit.type == 'QCK' ? 1.75 : 1; }
+ },
+ 864: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 865: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 866: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2 : 1; }
+ },
+ 867: {
+ hit: function(n) { return n > 11 ? 1.5 : 1; }
+ },
+ 868: {
+ atk: function(p) { return 1.2; }
+ },
+ 869: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3, [ "Driven" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Driven")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).count("Perfect") == p.chainPosition ? 3 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 870: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3, [ "Driven" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Driven")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).count("Perfect") == p.chainPosition ? 3 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 871: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 872: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 873: {
+ atk: function(p) { return p.unit.class.has("Fighter") && p.percHP <= 30.0 ? 2.5 : 1; }
+ },
+ 874: {
+ atk: function(p) { return p.unit.class.has("Fighter") && p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 875: {
+ atk: function(p) {
+ return p.unit.class.has("Cerebral") || p.unit.class.has("Driven") ? 2 : 1;
+ }
+ },
+ 876: {
+ atk: function(p) {
+ return p.unit.class.has("Cerebral") || p.unit.class.has("Driven") ? 2.25 : 1;
+ }
+ },
+ 878: {
+ atk: function(p) { return 1.5; }
+ },
+ 879: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; }
+ },
+ 880: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 881: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 2, [ "Shooter", "Free Spirit" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Shooter") && !p.unit.class.has("Free Spirit")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 2 : 1;
+ },
+ hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 882: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3, [ "Shooter", "Free Spirit" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Shooter") && !p.unit.class.has("Free Spirit")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 3 : 1;
+ },
+ hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 883: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.25 : 1; }
+ },
+ 884: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 885: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 886: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 887: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; }
+ },
+ 889: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; }
+ },
+ 890: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 891: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 892: {
+ chainModifier: function(p) { return 2; }
+ },
+ 893: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3, [ "Powerhouse" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Powerhouse")) return 1;
+ return p.modifiers.slice(0, p.chainPosition)
+ .subcontains(["Perfect", "Perfect", "Perfect"]) ? 3 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 894: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3, [ "Driven" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Driven")) return 1;
+ return p.modifiers.slice(0, p.chainPosition)
+ .subcontains(["Good", "Great", "Perfect"]) ? 3 : 1;
+ },
+ hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 895: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 896: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 897: {
+ atk: function(p) {
+ return p.unit.class.has("Cerebral") || p.unit.class.has("Driven") ? 2 : 1;
+ }
+ },
+ 898: {
+ atk: function(p) {
+ return p.unit.class.has("Striker") || p.unit.class.has("Cerebral") ? 1.5 : 1;
+ },
+ hp: function(p) {
+ return p.unit.class.has("Striker") || p.unit.class.has("Cerebral") ? 1.5 : 1;
+ }
+ },
+ 899: {
+ atk: function(p) {
+ return p.unit.class.has("Fighter") || p.unit.class.has("Free Spirit") ? 1.75 : 1;
+ },
+ hp: function(p) {
+ return p.unit.class.has("Fighter") || p.unit.class.has("Free Spirit") ? 1.25 : 1;
+ }
+ },
+ 900: {
+ atk: function(p) { return p.unit.class.has("Shooter") && p.percHP >= 99.0 ? 2 : 1; }
+ },
+ 901: {
+ atk: function(p) { return p.unit.class.has("Shooter") && p.percHP >= 99.0 ? 2.75 : 1; }
+ },
+ 902: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.25 : 1; }
+ },
+ 903: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.25 : 1; }
+ },
+ 905: {
+ atk: function(p) { return p.unit.class.has("Slasher") && p.percHP <= 30 ? 2.5 : 1; }
+ },
+ 906: {
+ atk: function(p) { return p.unit.class.has("Slasher") && p.percHP <= 30 ? 2.75 : 1; }
+ },
+ 907: {
+ atk: function(p) { return p.unit.class.has("Cerebral") && p.percHP <= 30 ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") && p.percHP <= 30 ? 1.5 : 1; }
+ },
+ 908: {
+ atk: function(p) { return p.unit.class.has("Cerebral") && p.percHP <= 30 ? 2.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") && p.percHP <= 30 ? 1.75 : 1; }
+ },
+ 909: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 910: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 911: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 912: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 913: {
+ atk: function(p) { return p.unit.type != "QCK" ? 1 : (p.orb == 2.0 ? 3 : 1); }
+ },
+ 914: {
+ atk: function(p) { return p.unit.type != "QCK" ? 1 : (p.orb == 2.0 ? 3 : 1.2); }
+ },
+ 915: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.2 : 1; }
+ },
+ 916: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.75 : 1; }
+ },
+ 917: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 918: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; }
+ },
+ 921: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Free Spirit") ? 1.2 : 1; }
+ },
+ 922: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.class.has("Free Spirit") ? 1.75 : 1; }
+ },
+ 923: {
+ atk: function(p) {
+ if(p.percHP<30){
+ return p.unit.class.has("Driven") ? 2.5 : 1;
+ } else {
+ return p.unit.class.has("Driven") ? 2 : 1;
+ }
+ }
+ },
+ 924: {
+ atk: function(p) {
+ if(p.percHP<30){
+ return p.unit.class.has("Driven") ? 2.75 : 1;
+ } else {
+ return p.unit.class.has("Driven") ? 2 : 1;
+ }
+ }
+ },
+ 925: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2 : 1; }
+ },
+ 926: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.5 : 1; }
+ },
+ 927: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; }
+ },
+ 928: {
+ atk: function(p) {
+ if(p.percHP<30){
+ return p.unit.class.has("Driven") ? 1.75 : 1;
+ } else {
+ return p.unit.class.has("Striker") ? 1.75 : 1;
+ }
+ }
+ },
+ 929: {
+ atk: function(p) {
+ if(p.percHP<30){
+ return p.unit.class.has("Driven") ? 2.25 : 1;
+ } else {
+ return p.unit.class.has("Striker") ? 2.25 : 1;
+ }
+ }
+ },
+ 930: {
+ chainModifier: function(p) { return 2; }
+ },
+ 932: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 933: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 934: {
+ atk: function(p) {
+ if(p.percHP<30 || p.percHP>70){
+ return p.unit.class.has("Fighter") ? 2.75 : 1;
+ } else {
+ return p.unit.class.has("Fighter") ? 2 : 1;
+ }
+ },
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 935: {
+ atk: function(p) {
+ if(p.percHP<30 || p.percHP>70){
+ return p.unit.class.has("Fighter") ? 2.75 : 1;
+ } else {
+ return p.unit.class.has("Fighter") ? 2 : 1;
+ }
+ },
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 936: {
+ chainModifier: function(p) { return 3; }
+ },
+ 937: {
+ chainModifier: function(p) { return 3.5; },
+ hp: function(p) { return 1.25; }
+ },
+ 938: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 939: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2 : 1; }
+ },
+ 940: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 941: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "DEX" ? 2.25 : 1; }
+ },
+ 942: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 943: {
+ atk: function(p) { return p.unit.type == "STR" ? 2.25 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 1.75 : 1; }
+ },
+ 944: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Driven") ? 1.2 : 1; }
+ },
+ 945: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.class.has("Driven") ? 1.75 : 1; }
+ },
+ 946: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; }
+ },
+ 947: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 948: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.2 : 1; }
+ },
+ 949: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 950: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 2.5, [ "Free Spirit" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Fighter") && !p.unit.class.has("Free Spirit")) return 1;
+ return p.modifiers.slice(0, p.chainPosition)
+ .subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 951: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 2.75, [ "Free Spirit" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Fighter") && !p.unit.class.has("Free Spirit")) return 1;
+ return p.modifiers.slice(0, p.chainPosition)
+ .subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.75 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 952: {
+ atk: function(p) {
+ return p.unit.class.has("Shooter") || p.unit.class.has("Striker") ? 1.2 : 1;
+ },
+ hp: function(p) {
+ return p.unit.class.has("Shooter") || p.unit.class.has("Striker") ? 1.2 : 1;
+ }
+ },
+ 953: {
+ atk: function(p) {
+ return p.unit.class.has("Shooter") || p.unit.class.has("Striker") ? 1.5 : 1;
+ },
+ hp: function(p) {
+ return p.unit.class.has("Shooter") || p.unit.class.has("Striker") ? 1.5 : 1;
+ }
+ },
+ 954: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 955: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 956: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 963: {
+ atk: function(p) {
+ if(p.unit.cost >= 50 && p.unit.cost <= 55) return 2;
+ return 1;
+ }
+ },
+ 964: {
+ atk: function(p) {
+ if(p.unit.cost >= 50 && p.unit.cost <= 55) return 1.5;
+ return 1;
+ },
+ hp: function(p) {
+ if(p.unit.cost >= 50 && p.unit.cost <= 55) return 1.5;
+ return 1;
+ },
+ rcv: function(p) {
+ if(p.unit.cost >= 50 && p.unit.cost <= 55) return 1.5;
+ return 1;
+ }
+ },
+ 965: {
+ atk: function(p) {
+ if(p.unit.cost >= 50 && p.unit.cost <= 55) return 1.5;
+ return 1;
+ }
+ },
+ 966: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2.25 : 1; }
+ },
+ 967: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2.25 : 1; }
+ },
+ 973: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") && p.percHP >= 99.0 ? 2 : 1; }
+ },
+ 974: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") && p.percHP >= 99.0 ? 2.5 : 1; }
+ },
+ 976: {
+ atk: function(p) {
+ return p.unit.class.has("Striker") || p.unit.class.has("Driven") ? 2 : 1;
+ }
+ },
+ 977: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 978: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 979: {
+ atk: function(p) { return p.unit.type == "PSY" || p.unit.type == "DEX" ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" || p.unit.type == "DEX" ? 1.2 : 1; }
+ },
+ 980: {
+ atk: function(p) { return p.unit.type == "STR" || p.unit.type == "DEX" ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.type == "STR" || p.unit.type == "DEX" ? 1.2 : 1; }
+ },
+ 981: {
+ atk: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Powerhouse") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Powerhouse") ? 0.1 : 1; }
+ },
+ 982: {
+ atk: function(p) {return p.unit.class.has("Slasher") ? 2 : 1}
+ },
+ 983: {
+ atk: function(p) {return p.unit.class.has("Slasher") ? 2.25 : 1}
+ },
+ 984: {
+ atk: function(p) {return p.unit.class.has("Striker") ? 2.25 : 1}
+ },
+ 989: {
+ atk: function(p) { return p.unit.cost < 30 && p.unit.cost >20 ? 2.5 : 1; },
+ hp: function(p) { return 0.1 ; }
+ },
+ 990: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") && p.percHP >= 99.0 ? 2.5 : 1; }
+ },
+ 991: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") && p.percHP >= 99.0 ? 2.75 : 1; }
+ },
+ 992: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1 ; }
+ },
+ 993: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2.5 : 1 ; }
+ },
+ 996: {
+ atk: function(p) {return p.unit.class.has("Powerhouse") ? 2 : 1; }
+ },
+ 997: {
+ atk: function(p) {return p.unit.class.has("Powerhouse") ? 2.25 : 1; }
+ },
+ 998: {
+ atk: function(p) {return p.unit.class.has("Driven") ? 2 : 1; }
+ },
+ 999: {
+ atk: function(p) {return p.unit.class.has("Driven") ? 2.25 : 1; }
+ },
+ 1000: {
+ atk: function(p) { return 1 + p.percHP / 100; }
+ },
+ 1001: {
+ atk: function(p) { return 1 + p.percHP / 100; }
+ },
+ 1002: {
+ atk: function(p) {return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 1003: {
+ atk: function(p) {return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 1004: {
+ rcv: function(p) { return 1.5; }
+ },
+ 1005: {
+ atk: function(p) {return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 1006: {
+ atk: function(p) {return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ hp: function(p) {return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 1007: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") || p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 1008: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") || p.unit.class.has("Cerebral") ? 2 : 1; }
+ },
+ 1009: {
+ atk: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.type == "STR" ? 2.25 :
+ p.unit.type == "STR" || p.unit.class.has("Fighter") ? 1.5 :
+ 1;
+ }
+ },
+ 1010:{
+ atk: function(p) {return p.unit.class.has("Driven") ? 1.5 : 1; }
+ },
+ 1011:{
+ atk: function(p) {
+ if (p.unit.class.has("Driven") && p.unit.class.has("Powerhouse")){
+ return 2.625;
+ } else if (p.unit.class.has("Driven")){
+ return 1.75;
+ } else if (p.unit.class.has("Powerhouse")){
+ return 1.5;
+ } return 1;
+ }
+ },
+ 1014:{
+ atk: function(p) {return p.unit.class.has("Powerhouse") ? 2 : 1; }
+ },
+ 1015: {
+ atk: function(p) { return p.unit.type == "INT" ? (p.orb == 2.0 ? 2.75 : 1) : 1; },
+ },
+ 1016: {
+ atk: function(p) { return p.unit.type == "INT" ? (p.orb == 2.0 ? 3 : 1.5) : 1; },
+ },
+ 1017: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 1018: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 1020: {
+ atk: function(p) { return p.unit.class.has("Shooter") || p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") || p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 1021: {
+ atk: function(p) { return p.unit.class.has("Shooter") || p.unit.class.has("Cerebral") ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") || p.unit.class.has("Cerebral") ? 1.75 : 1; }
+ },
+ 1022: {
+ atk: function(p) { return 2; }
+ },
+ 1023: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2.25 : 1; }
+ },
+ 1024: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2 : 1; }
+ },
+ 1025: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 1026: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 1027: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; }
+ },
+ 1028: {
+ hit: function(n) { return n > 21 ? 2.5 : 1; }
+ },
+ 1029: {
+ hit: function(n) {
+ return n > 36 ? 3.5 :
+ n > 21 ? 2.5 : 1;
+ }
+ },
+ 1030: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") && p.percHP >= 99.0 ? 2.5 : 1; }
+ },
+ 1031: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") && p.percHP >= 99.0 ? 2.75 : 1; }
+ },
+ 1032: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 1033: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Slasher") ? 2.25 : 1; }
+ },
+ 1034: {
+ atk: function(p) {
+ return p.unit.class.has("Striker") ? p.classCount.Striker==6 ? 2.75 : p.classCount.Striker==5 ? 2.5 : p.classCount.Striker==4 ? 2 : p.classCount.Striker==3 ? 1.75 : p.classCount.Striker==2 ? 1.5 : p.classCount.Striker==1 ? 1.25 : 1 : 1; }
+ },
+ 1035: {
+ atk: function(p) { return p.unit.class.has("Striker") ? p.classCount.Striker==6 ? 2.75 : p.classCount.Striker==5 ? 2.5 : p.classCount.Striker==4 ? 2 : p.classCount.Striker==3 ? 1.75 : p.classCount.Striker==2 ? 1.5 : p.classCount.Striker==1 ? 1.25 : 1 : 1; }
+ },
+ 1036: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 2, [ "Free Spirit" ]); },
+ hitAtk: function(p) {
+ return !p.unit.class.has("Free Spirit")? 1 : p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1037: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 2.5, [ "Free Spirit" ]); },
+ hitAtk: function(p) {
+ return !p.unit.class.has("Free Spirit")? 1 : p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1038: {
+ atk: function(p) { return p.unit.type == "DEX" || p.unit.type == "QCK" ? 1.2 : 1; }
+ },
+ 1039: {
+ atk: function(p) { return p.unit.type == "DEX" || p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 1040: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 1.5 : 1; }
+ },
+ 1041: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
+ hp: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 1042: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Slasher") ? 2 : 1;},
+ rcv: function(p) { return 0; }
+ },
+ 1043: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Slasher") ? (p.orb == 2.0 ? 2.75 : 2) : 1;},
+ rcv: function(p) { return 0; }
+ },
+ 1044: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 4, [ "Slasher", "Free Spirit" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Slasher") && !p.unit.class.has("Free Spirit")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 4 : p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 3 : 2;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1045: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 4, [ "Slasher", "Free Spirit" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Slasher") && !p.unit.class.has("Free Spirit")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 4 : p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 3 : 2;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1046: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3.5, [ "Free Spirit" ]); },
+ hitAtk: function(p) {
+ return !p.unit.class.has("Free Spirit") ? 1 : p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 2.75 : 1;
+ },
+ hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1047: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3.5, [ "Free Spirit" ]); },
+ hitAtk: function(p) {
+ return !p.unit.class.has("Free Spirit") ? 1 : p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 3.5 : 1;
+ },
+ hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1048: {
+ atk: function(p) { return p.unit.type == 'PSY' ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == 'PSY' ? 1.2 : 1; }
+ },
+ 1049: {
+ atk: function(p) { return p.unit.type == 'PSY' ? (p.percHP >= 30.0 ? 1.5 : 2.25) : 1; },
+ rcv: function(p) { return p.unit.type == 'PSY' ? 1.5 : 1; }
+ },
+ 1050: {
+ atk: function(p) { return p.unit.type == 'PSY' ? 1.5 : 1; }
+ },
+ 1051: {
+ atk: function(p) { return p.unit.type == 'PSY' ? 2 : 1; }
+ },
+ 1056:{
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2 : 1;},
+ rcv: function(p) { return 1.25; }
+ },
+ 1058:{
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2 : 1;},
+ hp: function(p) { return 1.25; }
+ },
+ 1059:{
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.2 : 1;},
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.2 : 1;}
+ },
+ 1060:{
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1;},
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1;}
+ },
+ 1061:{
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1;}
+ },
+ 1062:{
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2 : 1;}
+ },
+ 1063:{
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.2 : 1;},
+ hp: function(p) { return p.unit.class.has("Shooter") ? 1.2 : 1;}
+ },
+ 1064: {
+ atk: function(p) { return p.unit.type == 'INT' ? 1.2 : 1; },
+ hp: function(p) { return p.unit.type == 'INT' ? 1.2 : 1; }
+ },
+ 1065:{
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1;}
+ },
+ 1066: {
+ atk: function(p) { return p.unit.type == 'PSY' ? 1.2 : 1; },
+ hp: function(p) { return p.unit.type == 'PSY' ? 1.2 : 1; }
+ },
+ 1067:{
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1;}
+ },
+ 1068: {
+ chainModifier: function(p) { return 1.5; }
+ },
+ 1069:{
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1;}
+ },
+ 1070:{
+ atk: function(p) { return p.unit.class.has("Driven") ? 2.25 : 1;}
+ },
+ 1071: {
+ atk: function(p) { return p.unit.cost <= 20 ? 1.5 : 1; }
+ },
+ 1072: {
+ atk: function(p) { return p.unit.cost <= 30 ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.2 : 1;}
+ },
+ 1073:{
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1;}
+ },
+ 1074: {
+ atk: function(p) { return p.unit.type == 'INT' ? 2 : 1; }
+ },
+ 1075: {
+ atk: function(p) { return p.unit.type == 'INT' ? 2 : 1; },
+ hp: function(p) { return p.unit.type == 'INT' ? 2 : 1; }
+ },
+ 1076: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Free Spirit") ? 1.75 : 1; }
+ },
+ 1077: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Free Spirit") ? 2.25 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1080: {
+ atk: function(p) { return p.unit.cost <= 20 ? 2.5 : 1; }
+ },
+ 1081: {
+ atk: function(p) { return p.unit.cost <= 30 ? 2.5 : 1; }
+ },
+ 1082: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Fighter") ? 1.2 : 1; }
+ },
+ 1083: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3, [ "Striker", "Fighter" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Striker") && !p.unit.class.has("Fighter")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 3 : 1.5;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1084: {
+ atk: function(p) { return !p.unit.class.has("Driven") ? 1 : (p.orb == 2.0 ? 3 : 1.5); },
+ hp: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; }
+ },
+ 1085: {
+ atk: function(p) { return !p.unit.class.has("Driven") ? 1 : (p.orb == 2.0 ? 3 : 1.5); },
+ hp: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; }
+ },
+ 1086:{
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1;},
+ rcv: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1;}
+ },
+ 1087:{
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1;},
+ rcv: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1;}
+ },
+ 1088:{
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1;}
+ },
+ 1089:{
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1;},
+ hp: function(p) { return p.unit.class.has("Driven") ? 1.75 : 1;}
+ },
+ 1090: {
+ atk: function(p) { return p.percHP <= 30.0 ? 2 : 1; }
+ },
+ 1091: {
+ atk: function(p) { return p.percHP <= 30.0 ? 2.5 : 1; }
+ },
+ 1092: {
+ rcv: function(p) { return 1 + .5 * ((100 - p.percHP) / 100); }
+ },
+ 1093: {
+ rcv: function(p) { return 1 + 1 * ((100 - p.percHP) / 100); }
+ },
+ 1094: {
+ atk: function(p) { return p.unit.class.has('Cerebral') ? 2.0 : 1.0; }
+ },
+ 1095: {
+ atk: function(p) { return p.unit.class.has('Cerebral') ? 2.0 : 1.0; }
+ },
+ 1096: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3, [ "Powerhouse" ]); },
+ hitAtk: function(p) {
+ return !(p.unit.class.has('Powerhouse')) ? 1.0 : p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 3 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1097: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3.5, [ "Powerhouse" ]); },
+ hitAtk: function(p) {
+ return !(p.unit.class.has('Powerhouse')) ? 1.0 : p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 3.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1098: {
+ chainModifier: function(p) { return 2; }
+ },
+ 1099: {
+ atk: function(p) { return p.unit.class.has('Fighter') ? 2.0 : 1.0; }
+ },
+ 1100: {
+ atk: function(p) { return p.unit.class.has('Fighter') ? 2.25 : 1.0; },
+ rcv: function(p) { return p.unit.class.has('Fighter') ? 1.2 : 1.0; }
+ },
+ 1101: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).count("Perfect") == p.chainPosition ? 2.25 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1102: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).count("Perfect") == p.chainPosition ? 2.75 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1103: {
+ atk: function(p) { return p.unit.class.has('Cerebral') ? 1.5 : 1.0; },
+ rcv: function(p) { return p.unit.class.has('Cerebral') ? 1.5 : 1.0; }
+ },
+ 1104: {
+ atk: function(p) { return p.unit.class.has('Cerebral') ? 1.75 : 1.0; },
+ rcv: function(p) { return p.unit.class.has('Cerebral') ? 1.75 : 1.0; }
+ },
+ 1105: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1106: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 1107: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; }
+ },
+ 1108: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Driven") ? 2 : 1; }
+ },
+ 1110: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.25 : 1; }
+ },
+ 1111: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.25 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.25 : 1; }
+ },
+ 1112: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 1113: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 1114: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 1115: {
+ atk: function(p) { return p.unit.type == "STR" ? 2.5 : 1; }
+ },
+ 1118: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 1119: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 1120: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 4 : 1;
+ },
+ hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1121: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Good", "Great", "Perfect"]) ? 4 : 1;
+ },
+ hitModifiers: ["Good", "Great", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1122: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 4 : p.unit.type == "STR" || p.unit.type == "QCK" || p.unit.type == "DEX" ? 2.5 : 1;
+ }
+ },
+ 1123: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 4 : p.unit.type == "STR" || p.unit.type == "QCK" || p.unit.type == "DEX" ? 2.5 : 1; }
+ },
+ 1124: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") ? Math.max(1.0, 3.0 - 0.1 * p.turnCounter) : 1;
+ }
+ },
+ 1125: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") ? Math.max(1.0, 3.5 - 0.1 * p.turnCounter) : 1;
+ }
+ },
+ 1126: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 1127: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2.25 : 1; },
+ hp: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 1128: {
+ atk: function(p) { return 1.75; }
+ },
+ 1129: {
+ atk: function(p) { return 2; }
+ },
+ 1130: {
+ atk: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 1131: {
+ atk: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Powerhouse") ? 2 : 1; }
+ },
+ 1132: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 1133: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; }
+ },
+ 1134: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Slasher") ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Slasher") ? 1.2 : 1; }
+ },
+ 1135: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Slasher") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Slasher") ? 1.5 : 1; }
+ },
+ 1136: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 1137: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.25 : 1; }
+ },
+ 1139: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 1140: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; }
+ },
+ 1141: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2.25 : 1; }
+ },
+ 1142: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1143: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 1144: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; }
+ },
+ 1145: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; }
+ },
+ 1154: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.3 : 1; }
+ },
+ 1156: {
+ atk: function(p) { return ( p.unit.class.has("Driven") || p.unit.class.has("Striker") ) && p.percHP >= 50.0 ? 1.2 : 1; }
+ },
+ 1157: {
+ atk: function(p) { return ( p.unit.class.has("Driven") || p.unit.class.has("Striker") ) && p.percHP >= 50.0 ? 1.75 : 1; }
+ },
+ 1158: {
+ atk: function(p) { return p.unit.class.has("Shooter") || p.unit.class.has("Striker") || p.unit.class.has("Powerhouse") ? 1.75 : 1; }
+ },
+ 1159: {
+ atk: function(p) { return p.unit.class.has("Shooter") || p.unit.class.has("Striker") || p.unit.class.has("Powerhouse") ? 2.25 : 1; }
+ },
+ 1160: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1161: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1162: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; }
+ },
+ 1163: {
+ atk: function(p) { return (p.unit.type == "PSY" && (p.unit.class.has("Driven") || p.unit.class.has("Cerebral"))) ? 2.625 : (p.unit.type == "PSY" && !(p.unit.class.has("Driven") || p.unit.class.has("Cerebral"))) ? 1.75 : (!(p.unit.type == "PSY") && (p.unit.class.has("Driven") || p.unit.class.has("Cerebral"))) ? 1.5 : 1; }
+ },
+ 1164: {
+ rcv: function(p) { return 1.2; }
+ },
+ 1165: {
+ rcv: function(p) { return 1.5; }
+ },
+ 1167: {
+ atk: function(p) { return 1.2; }
+ },
+ 1168: {
+ atk: function(p) { return p.unit.type == "STR" && p.percHP <= 30.0 ? 2 : 1; }
+ },
+ 1169: {
+ atk: function(p) {
+ return p.unit.type == "STR" ? 1 + 1.5 * ((100 - p.percHP) / 100) : 1;
+ }
+ },
+ 1170: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 1171: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; }
+ },
+ 1172: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 1173: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 1174: {
+ atk: function(p) { return p.unit.type == "DEX" && p.percHP <= 30.0 ? 2.75 : 1; }
+ },
+ 1175: {
+ atk: function(p) { return p.unit.type == "DEX" && p.percHP <= 30.0 ? 3 : 1; }
+ },
+ 1176: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; }
+ },
+ 1177: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 2 : 1; }
+ },
+ 1178: {
+ atk: function(p) { return p.unit.type == "STR" && p.percHP >= 99.0 ? 2 : 1; }
+ },
+ 1179: {
+ atk: function(p) { return p.unit.type == "STR" && p.percHP >= 99.0 ? 2.75 : 1; }
+ },
+ 1181: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2.5 : 1; }
+ },
+ 1182: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2.5 : 1; }
+ },
+ 1183: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2.5 : 1; }
+ },
+ 1184: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2.5 : 1; }
+ },
+ 1185: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.75 : 1; }
+ },
+ 1186: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.75 : 1; }
+ },
+ 1187: {
+ atk: function(p) { return p.unit.type == "STR" ? 2.5 : 1; }
+ },
+ 1188: {
+ atk: function(p) { return p.unit.type == "STR" ? 2.5 : 1; }
+ },
+ 1189: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2.25 : 1; }
+ },
+ 1190: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2.25 : 1; }
+ },
+ 1191: {
+ atk: function(p) {
+ return Math.min(3.5, 2.0 + 0.1875 * p.turnCounter);
+ },
+ hp: function(p) { return 1.25; }
+ },
+ 1192: {
+ atk: function(p) {
+ return Math.min(3.5, 2.0 + 0.1875 * p.turnCounter);
+ },
+ hp: function(p) { return 1.25; }
+ },
+ 1193: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 1194: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2.5 : 1; }
+ },
+ 1195: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; }
+ },
+ 1196: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; }
+ },
+ 1197: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") || p.unit.class.has("Cerebral") ? (p.orb == 2.0 ? 2.5 : 1) : 1; }
+ },
+ 1198: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1199: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1202: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1203: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2.25 : 1; }
+ },
+ 1204: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Free Spirit") ? 1.2 : 1; }
+ },
+ 1205: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1206: {
+ hp: function(p) { return 1.3; }
+ },
+ 1207: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; }
+ },
+ 1208: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 1209: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; }
+ },
+ 1210: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; }
+ },
+ 1211: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 1212: {
+ atk: function(p) { return p.unit.type == "STR" ? 2.25 : 1; }
+ },
+ 1213: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.2 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; },
+ },
+ 1214: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.25 : 1; },
+ },
+ 1215: {
+ damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['QCK', 'PSY', 'DEX']); },
+ hitAtk: function(p) {
+ return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
+ type: 'QCK',
+ minModifier: 'Good'
+ }, {
+ type: 'PSY',
+ minModifier: 'Good'
+ }, {
+ type: 'DEX',
+ minModifier: 'Good'
+ }]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1216: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2 : 1; }
+ },
+ 1217: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 1218: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1219: {
+ atk: function(p) {
+ return p.unit.class.has("Shooter") ? Math.min(3, 1 + 0.125 * p.turnCounter) : 1;
+ }
+ },
+ 1220: {
+ atk: function(p) {
+ return p.unit.class.has("Shooter") ? Math.min(3.25, 1 + 0.225 * p.turnCounter) : 1;
+ }
+ },
+ 1221: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.75 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.2 : 1; },
+ },
+ 1222: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.75 : 1; },
+ },
+ 1223: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; }
+ },
+ 1224: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; }
+ },
+ 1225: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ },
+ 1226: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; }
+ },
+ 1227: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2.25 : 1; }
+ },
+ 1228: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2.5 : 1; }
+ },
+ 1229: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2 : p.unit.class.has("Powerhouse") ? 2 : 1; }
+ },
+ 1230: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2.75 : p.unit.class.has("Powerhouse") ? 2.5 : 1; }
+ },
+ 1231: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Driven") ? (window.specials[1231].turnedOn || window.specials[1232].turnedOn ? 2.1875 : 1.75) : 1; },
+ rcv: function(p) { return .5 }
+ },
+ 1232: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Driven") ? (window.specials[1231].turnedOn || window.specials[1232].turnedOn ? 2.925 : 2.25) : 1; },
+ rcv: function(p) { return .5 }
+ },
+ 1233: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") && p.unit.class.has("Cerebral") ? 2.25 :
+ p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.5 :
+ 1;
+ },
+ rcv: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.2 : 1; }
+ },
+ 1234: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") && p.unit.class.has("Cerebral") ? 2.56 :
+ p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.6 :
+ 1;
+ },
+ rcv: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.3 : 1; }
+ },
+ 1235: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; },
+ },
+ 1236: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
+ },
+ 1237: {
+ hit: function(n) {
+ return n > 15 ? 2 : 1;
+ }
+ },
+ 1238: {
+ hit: function(n) {
+ return n > 30 ? 3 :
+ n > 15 ? 2 : 1;
+ }
+ },
+ 1239: {
+ atk: function(p){
+ return window.specials[1239].turnedOn || window.specials[1240].turnedOn ? 3 : 2; },
+ rcv: function(p) { return 1.3 }
+ },
+ 1240: {
+ atk: function(p){
+ return window.specials[1239].turnedOn || window.specials[1240].turnedOn ? 3 : 2; },
+ rcv: function(p) { return 1.3 }
+ },
+ 1241: {
+ chainModifier: function(p) { return 1.5; }
+ },
+ 1242: {
+ chainModifier: function(p) { return 2; }
+ },
+ 1243: {
+ atk: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 1.69 :
+ p.unit.class.has("Fighter") || p.unit.class.has("Powerhouse") ? 1.3 :
+ 1;
+ },
+ },
+ 1244: {
+ atk: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 2.276 :
+ p.unit.class.has("Fighter") && !p.unit.class.has("Powerhouse") ? 1.75 :
+ !p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 1.3 :
+ 1;
+ },
+ },
+ 1245: {
+ atk: function(p) { return !p.unit.class.has("Fighter") ? 1 : p.percHP <= 10.0 && p.unit.class.has("Fighter") ? 3 : 1.75; }
+ },
+ 1246: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.2 : 1; }
+ },
+ 1247: {
+ atk: function(p) { return !p.unit.class.has("Fighter") ? 1 : (p.orb == 2.0 ? 2.75 : 2); },
+ hp: function(p) { return p.unit.class.has("Fighter") ? 1.2 : 1; }
+ },
+ 1248: {
+ atk: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 1.69 :
+ p.unit.class.has("Fighter") || p.unit.class.has("Powerhouse") ? 1.3 :
+ 1;
+ },
+ },
+ 1249: {
+ atk: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 2.56 :
+ p.unit.class.has("Fighter") || p.unit.class.has("Powerhouse") ? 1.6 :
+ 1;
+ },
+ },
+ 1250: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ },
+ 1251: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2 : 1; },
+ },
+ 1252: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
+ },
+ 1253: {
+ atk: function(p) { return p.unit.type == "DEX" && p.percHP >= 99.0 ? 2.25 : 1; }
+ },
+ 1254: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).count("Perfect") == p.chainPosition ? p.unit.class.has("Striker") ? 2.75 : 1 : 1; },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1256: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Driven") ? 2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Driven") ? 0.1 : 1; },
+ },
+ 1257: {
+ atk: function(p) { return p.percHP <= 50.0 ? 2 : 1; }
+ },
+ 1258: {
+ atk: function(p) { return p.percHP <= 50.0 ? 2.5 : 1; }
+ },
+ 1259: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2.5 : 1; },
+ },
+ 1260: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2.5 : 1; },
+ },
+ 1261: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; },
+ },
+ 1262: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.75 : 1; },
+ },
+ 1263: {
+ atk: function(p) { return p.unit.cost <= 20 ? 2.5 : 1; }
+ },
+ 1264: {
+ atk: function(p) { return p.unit.cost <= 30 ? 2.5 : 1; }
+ },
+ 1265: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; },
+ },
+ 1266: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2.5 : 1; },
+ },
+ 1267: {
+ atk: function(p) { if(p.classCount.Striker>=1 && p.classCount.Fighter>=1 && p.classCount.Shooter>=1 && p.classCount.Slasher>=1)
+ return 2.75;
+ else
+ return 1;
+ },
+ hp: function(p) { if(p.classCount.Striker>=1 && p.classCount.Fighter>=1 && p.classCount.Shooter>=1 && p.classCount.Slasher>=1)
+ return 1.5;
+ else
+ return 1;
+ },
+ },
+ 1268: {
+ atk: function(p) { if(p.classCount.Striker>=1 && p.classCount.Fighter>=1 && p.classCount.Shooter>=1 && p.classCount.Slasher>=1)
+ return 2.75;
+ else
+ return 1;
+ },
+ hp: function(p) { if(p.classCount.Striker>=1 && p.classCount.Fighter>=1 && p.classCount.Shooter>=1 && p.classCount.Slasher>=1)
+ return 1.5;
+ else
+ return 1;
+ },
+ },
+ 1271: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2 : 1; },
+ },
+ 1272: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2.5 : 1; },
+ },
+ 1273: {
+ atk: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 2.25 :
+ p.unit.class.has("Fighter") && !p.unit.class.has("Powerhouse") ? 1.5 :
+ !p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 1.5 :
+ 1;
+ },
+ hp: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 1.44 :
+ p.unit.class.has("Fighter") && !p.unit.class.has("Powerhouse") ? 1.2 :
+ !p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 1.2 :
+ 1;
+ },
+ },
+ 1274: {
+ atk: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 2.56 :
+ p.unit.class.has("Fighter") && !p.unit.class.has("Powerhouse") ? 1.6 :
+ !p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 1.6 :
+ 1;
+ },
+ hp: function(p) {
+ return p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 1.44 :
+ p.unit.class.has("Fighter") && !p.unit.class.has("Powerhouse") ? 1.2 :
+ !p.unit.class.has("Fighter") && p.unit.class.has("Powerhouse") ? 1.2 :
+ 1;
+ },
+ },
+ 1275: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ },
+ 1276: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Slasher") ? 2 : 1; },
+ },
+ 1277: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Striker") && p.percHP >= 99.0 ? 2.25 : 1; },
+ rcv: function(p) { return .01; },
+ },
+ 1278: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Striker") && p.percHP >= 99.0 ? 2.75 : 1; },
+ rcv: function(p) { return .01; },
+ },
+ 1279: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ },
+ 1280: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2.5 : 1; },
+ },
+ 1281: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2.25 : 1; },
+ },
+ 1282: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2.5 : 1; },
+ },
+ 1283: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2.5 : 1; },
+ },
+ 1284: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.2 : 1; },
+ },
+ 1285: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3.375, [ "Striker" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Striker")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 3.375 : 1.5;
+ },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.25 : 1; },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1286: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.3 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.3 : 1; },
+ },
+ 1287: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.3 : 1; },
+ rcv: function(p) { return p.unit.type == "PSY" ? 1.3 : 1; },
+ },
+ 1288: {
+ atk: function(p) {
+ return p.unit.class.has("Driven") ? Math.max(1.0, 2.5 - 0.1 * p.turnCounter) : 1;
+ }
+ },
+ 1289: {
+ atk: function(p) {
+ return p.unit.class.has("Driven") ? Math.max(1.0, 2.75 - 0.1 * p.turnCounter) : 1;
+ }
+ },
+ 1291: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.75 : 1; },
+ },
+ 1292: {
+ atk: function(p) { return !p.unit.class.has("Driven") ? 1 : (p.orb == 2.0 ? 2.5 : 2); },
+ },
+ 1293: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; },
+ },
+ 1294: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; },
+ },
+
+ 1297: {
+ damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['STR', 'STR', 'STR']); },
+ hitAtk: function(p) {
+ return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
+ type: 'STR',
+ minModifier: 'Good'
+ }, {
+ type: 'STR',
+ minModifier: 'Good'
+ }, {
+ type: 'STR',
+ minModifier: 'Good'
+ }]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1298: {
+ damageSorter: function(d) { return CrunchUtils.okamaSort(d, ['STR', 'STR', 'STR']); },
+ hitAtk: function(p) {
+ return CrunchUtils.okamaCheck(p.damage.slice(0, p.chainPosition), p.modifiers, [{
+ type: 'STR',
+ minModifier: 'Good'
+ }, {
+ type: 'STR',
+ minModifier: 'Good'
+ }, {
+ type: 'STR',
+ minModifier: 'Good'
+ }]) ? 3 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1299: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.2 : 1; },
+ },
+ 1300: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ },
+ 1301: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.75 : 1; },
+ },
+ 1302: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") && p.unit.class.has("Driven") ? 2.625 :
+ p.unit.class.has("Slasher") && !p.unit.class.has("Driven") ? 1.75 :
+ !p.unit.class.has("Slasher") && p.unit.class.has("Driven") ? 1.5 :
+ 1;
+ },
+ },
+ 1303: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ },
+ 1304: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2 : 1; },
+ },
+ 1305: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.3 : 1; },
+ },
+ 1306: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.75 : 1; },
+ },
+ 1307: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.75 : 1; },
+ },
+ 1308: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; },
+ },
+ 1309: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; },
+ },
+ 1310: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2.5 : 1; },
+ },
+ 1311: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ },
+ 1312: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.75 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.75 : 1; },
+ },
+ 1313: {
+ //Akainu NEEDS TO BE CHANGED
+ //[This works for STR and DEX units, just need a custom orb for QCK, INT, PSY units. Orb matchers like Oars and Onigumo are still a pain] atk: function(p) { return p.unit.type == "STR" ? (p.orb == 2.0 ? 3.9375 : 2.25) : p.unit.type == "DEX" ? (p.orb == 0.5 ? 3.9375 : 2.25) : 2.25; },
+ atk: function(p) { return p.unit.type == "STR" ? (p.orb == 2.0 ? 3.9375 : 2.25) : 2.25; },
+ },
+ 1314: {
+ //Akainu NEEDS TO BE CHANGED
+ atk: function(p) { return p.unit.type == "STR" ? (p.orb == 2.0 ? 3.9375 : 2.25) : 2.25; },
+ },
+ 1315: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 3.5 :
+ //p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect"]) ? 3 :
+ //p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.75 :
+ p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect"]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1316: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 3.5 :
+ p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect"]) ? 3 :
+ p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.75 :
+ p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect"]) ? 2.5 : 1;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1317: {
+ atk: function(p) { return p.unit.type == "PSY" || p.unit.type == "STR" ? 2 : 1; },
+ },
+ 1318: {
+ atk: function(p) { return p.unit.type == "PSY" || p.unit.type == "STR" ? 2.5 : 1; },
+ },
+ 1321: {
+ atk: function(p) { if((p.colorCount.INT>=1 && p.colorCount.PSY>=1 && p.colorCount.STR>=1 && p.colorCount.DEX>=1 && p.colorCount.QCK>=1) && (p.unit.class.has("Cerebral") || p.unit.class.has("Slasher")))
+ return 2.25;
+ else
+ return 1;
+ },
+ },
+ 1322: {
+ atk: function(p) { if((p.colorCount.INT>=1 && p.colorCount.PSY>=1 && p.colorCount.STR>=1 && p.colorCount.DEX>=1 && p.colorCount.QCK>=1) && (p.unit.class.has("Cerebral") || p.unit.class.has("Slasher")))
+ return 2.5;
+ else
+ return 1;
+ },
+ },
+ 1323: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") && p.unit.class.has("Driven") ? 1.69 :
+ p.unit.class.has("Driven") || p.unit.class.has("Slasher") ? 1.3 :
+ 1;
+ }
+ },
+ 1324: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") && p.unit.class.has("Driven") ? 2.56 :
+ p.unit.class.has("Driven") || p.unit.class.has("Slasher") ? 1.6 :
+ 1;
+ }
+ },
+ 1326: {
+ atk: function(p) { return 1.3; },
+ },
+ 1327: {
+ atk: function(p) { return p.unit.cost <= 20 ? 2 : 1; },
+ },
+ 1328: {
+ atk: function(p) { return p.unit.cost <= 20 ? 2.5 : 1; },
+ },
+ 1330: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 1333: {
+ atk: function(p) {
+ return p.unit.class.has("Powerhouse") && p.unit.type == "STR" ? 1.96 :
+ p.unit.class.has("Powerhouse") || p.unit.type == "STR" ? 1.4 :
+ 1;
+ }
+ },
+ 1334: {
+ atk: function(p) {
+ return p.unit.class.has("Free Spirit") && p.unit.type == "DEX" ? 1.96 :
+ p.unit.class.has("Free Spirit") || p.unit.type == "DEX" ? 1.4 :
+ 1;
+ }
+ },
+ 1335: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1336: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 1337: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Free Spirit") ? 2 : 1; }
+ },
+ 1338: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Free Spirit") ? 2.25 : 1; }
+ },
+ 1339: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2.25 : 1; }
+ },
+ 1340: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; }
+ },
+ 1341: {
+ //damageSorter: function(d) { return CrunchUtils.classSort(d, 2.625, "QCK"); }, //Boosts work, but the sorter doesn't
+ hitAtk: function(p) {
+ if (!(p.unit.type == "QCK")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Below Good", "Below Good", "Below Good"]) ? 2.625 : 1.75;
+ },
+ hitModifiers: ["Below Good", "Below Good", "Below Good", "Perfect", "Perfect", "Perfect"]
+ },
+ 1342: {
+ hp: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; }
+ },
+ 1343: {
+ hp: function(p) { return 0.5; },
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; },
+ },
+ 1344: {
+ hp: function(p) { return 0.5; },
+ atk: function(p) { return p.unit.class.has("Driven") ? 2.25 : 1; },
+ },
+ 1345: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2.5 : 1; },
+ },
+ 1346: {
+ hp: function(p) { return p.unit.class.has("Shooter") || p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ atk: function(p) { return p.unit.class.has("Shooter") || p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") || p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ },
+ 1349: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.75 : 1; },
+ },
+ 1352: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 3.5, ["Fighter"]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Fighter")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 3.5 : 2;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1353: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2.5 : 1; },
+ },
+ 1354: {
+ chainModifier: function(p) { return 2; }
+ },
+ 1355: {
+ chainModifier: function(p) { return 3; }
+ },
+ 1356:{
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ },
+ 1357:{
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; }
+ },
+ 1358: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; }
+ },
+ 1359: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.75 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; }
+ },
+ 1360: {
+ atk: function(p) { return p.unit.cost <= 30 ? 2 : 1; },
+ hp: function(p) { return p.unit.cost <= 30 ? 1.2 : 1; }
+ },
+ 1361: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? p.classCount.Slasher>=5 ? Math.max(2.5, 2.5 + .5 * Math.min(p.turnCounter,1)) : 1 : 1; },
+ hp: function(p) { return p.unit.class.has("Slasher") ?
+ p.classCount.Slasher>=5 ? 1.5 : 1 : 1; },
+ },
+ 1362: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? p.classCount.Slasher>=5 ? Math.max(2.5, 2.5 + .5 * Math.min(p.turnCounter,1)) : 1 : 1; },
+ hp: function(p) { return p.unit.class.has("Slasher") ?
+ p.classCount.Slasher>=5 ? 1.5 : 1 : 1; },
+ },
+ 1363: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; }
+ },
+ 1364: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2.5 : 1; }
+ },
+ 1365: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 1366: {
+ atk: function(p) { return !p.unit.class.has("Cerebral") ? 1 : (p.orb == 2.0 ? 2.75 : 1.5); },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 1367: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; }
+ },
+ 1368: {
+ atk: function(p) { return !(p.unit.type == "STR") ? 1 : p.percHP <= 30.0 ? 3 : 2.5; }
+ },
+ 1369: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; }
+ },
+ 1370: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
+ hp: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; }
+ },
+ 1371: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 4, [ "Slasher", "Powerhouse" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Slasher") && !p.unit.class.has("Powerhouse")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 2.5 : p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.25 : 2;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1372: {
+ damageSorter: function(d) { return CrunchUtils.classSort(d, 4, [ "Slasher", "Powerhouse" ]); },
+ hitAtk: function(p) {
+ if (!p.unit.class.has("Slasher") && !p.unit.class.has("Powerhouse")) return 1;
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]) ? 3 : p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect"]) ? 2.5 : 2;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"]
+ },
+ 1373: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ hp: function(p) { return p.unit.type == "INT" ? 1.2 : 1; },
+ },
+ 1374: {
+ atk: function(p) { return p.unit.type == "INT" ? 2.25 : 1; },
+ hp: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ },
+ 1375: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.5 : 1; },
+ },
+ 1376: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.75 : 1; },
+ },
+ 1377: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Shooter") ? 1.3 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Shooter") ? 1.3 : 1; }
+ },
+ 1378: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Shooter") ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Shooter") ? 1.75 : 1; }
+ },
+ 1379: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2 : 1; },
+ },
+ 1380: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 2.5 : 1; },
+ },
+ 1381: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.2 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.2 : 1; }
+ },
+ 1382: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.75 : 1; }
+ },
+ 1383: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
+ },
+ 1384: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2.5 : 1; },
+ },
+ 1387: {
+ hitAtk: function(p) {
+ return p.modifiers.slice(0, p.chainPosition).subcontains(["Perfect", "Perfect", "Perfect", "Perfect"]) ? 2.8125 : 2.25;
+ },
+ hitModifiers: ["Perfect", "Perfect", "Perfect", "Perfect", "Perfect", "Perfect"],
+ hp: function(p) { return 1.25; },
+ },
+ 1388: {
+ atk: function(p) { return p.unit.type == "DEX" ? 2.5 : 1; },
+ },
+ 1389: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ },
+ 1390: {
+ atk: function(p) { return p.unit.cost <= 40 ? 1.5 : 0.5; },
+ hp: function(p) { return p.unit.cost <= 40 ? 1 : 0.5; }
+ },
+ 1391: {
+ atk: function(p) { return p.unit.cost <= 40 ? 1.5 : 0.5; },
+ hp: function(p) { return p.unit.cost <= 40 ? 1 : 0.5; }
+ },
+ 1392: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 2 : 1; },
+ hp: function(p) { return p.unit.type == "PSY" ? 1.25 : 1; },
+ },
+ 1393: {
+ atk: function(p) { return p.unit.cost <= 30 ? 2 : 1; },
+ },
+ 1394: {
+ atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "STR" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" || p.unit.type == "STR" ? 1.1 : 1; },
+ },
+ 1395: {
+ atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "STR" ? 2.25 : 1; },
+ rcv: function(p) { return p.unit.type == "QCK" || p.unit.type == "STR" ? 1.2 : 1; },
+ },
+ 1396: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.75 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.25 : 1; },
+ },
+ 1397: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ },
+ 1398: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 1399: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 1400: {
+ atk: function(p) {
+ return p.unit.class.has("Shooter") && p.unit.class.has("Driven") ? 2.275 :
+ p.unit.class.has("Shooter") && !p.unit.class.has("Driven") ? 1.75 :
+ !p.unit.class.has("Shooter") && p.unit.class.has("Driven") ? 1.3 :
+ 1;
+ },
+ },
+ 1401: {
+ atk: function(p) {
+ return p.unit.class.has("Shooter") && p.unit.class.has("Driven") ? 2.625 :
+ p.unit.class.has("Shooter") && !p.unit.class.has("Driven") ? 1.75 :
+ !p.unit.class.has("Shooter") && p.unit.class.has("Driven") ? 1.5 :
+ 1;
+ },
+ },
+ 1402: {
+ atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 2 : 1; },
+ },
+ 1403: {
+ atk: function(p){
+ return p.unit.class.has("Free Spirit") ? ((!window.specials[1403].turnedOn || (window.specials[1403].multiplier == null)) ? 2.5 : window.specials[1403].multiplier) : 1;
+
+ },
+ },
+ 1404: {
+ atk: function(p){
+ return p.unit.class.has("Free Spirit") ? ((!window.specials[1404].turnedOn || (window.specials[1404].multiplier == null)) ? 2.5 : window.specials[1404].multiplier) : 1;
+ },
+ },
+ 1405: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.25 : 1; },
+ },
+ 1406: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 2.25 : 1; },
+ rcv: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ },
+ 1407: {
+ atk: function(p) { return p.unit.type == "DEX" || p.unit.type == "PSY" ? 1.75 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" || p.unit.type == "PSY" ? 1.25 : 1; },
+ },
+ 1408: {
+ atk: function(p) { return p.unit.type == "DEX" || p.unit.type == "PSY" ? 2.25 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" || p.unit.type == "PSY" ? 1.5 : 1; },
+ },
+ 1410: {
+ chainModifier: function(p) { return 2.5; }
+ },
+ 1411: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.25 : 1; },
+ rcv: function(p) { return 0; }
+ },
+ 1412: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.75 : 1; },
+ rcv: function(p) { return 0; }
+ },
+ 1413: {
+ atk: function(p) { return p.percHP <= 30.0 ? 3 : 1.75; },
+ hp: function(p) { return 1.2; }
+ },
+ 1414: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.5 : 1; },
+ },
+ 1415: {
+ atk: function(p) { return p.unit.cost <= 30 ? 1.5 : 1; },
+ },
+ 1416: {
+ atk: function(p) { return p.unit.cost <= 30 ? 2.25 : 1; },
+ hp: function(p) { return p.unit.cost <= 30 ? 1.2 : 1; },
+ },
+ 1417: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ },
+ 1418: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ },
+ 1419: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.5 : 1; },
+ },
+ 1420: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 2.5 : 1; },
+ },
+ 1422: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2 : 1; },
+ },
+ 1422: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 2.25 : 1; },
+ hp: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Striker") ? 1.5 : 1; },
+ },
+ 1423: {
+ atk: function(p) { return 1.75; },
+ },
+ 1425: {
+ atk: function(p) { return p.unit.class.has("Striker") || p.unit.class.has("Fighter") ? 1.75 : 1; },
+ },
+ 1426: {
+ atk: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Striker") ? 2 : 1; },
+ hp: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Striker") ? 1.25 : 1; },
+ },
+ 1427: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
+ },
+ 1428: {
+ rcv: function(p) { return p.unit.class.has("Free Spirit") || p.unit.class.has("Striker") ? 1.5 : 1; },
+ },
+ 1429: {
+ rcv: function(p) { return p.unit.class.has("Free Spirit") || p.unit.class.has("Striker") ? 2 : 1; },
+ },
+};
diff --git a/common/data/cooldowns.js b/common/data/cooldowns.js
index 38da79c9c..eb4471d9a 100644
--- a/common/data/cooldowns.js
+++ b/common/data/cooldowns.js
@@ -1,922 +1,1432 @@
window.cooldowns = [
- [ 3, 2 ],
- [ 12, 9 ],
- [ 23, 15 ],
- [ 25, 18 ],
- [ 12, 9 ],
- [ 15, 10 ],
- [ 15, 10 ],
- [ 25, 20 ],
- [ 12, 7 ],
- [ 23, 15 ],
- [ 15, 8 ],
- [ 25, 20 ],
- [ 15, 10 ],
- [ 15, 10 ],
- [ 15, 10 ],
- [ 20, 15 ],
- [ 23, 15 ],
- [ 15, 10 ],
- [ 23, 15 ],
- [ 15, 10 ],
- [ 15, 8 ],
- [ 23, 15 ],
- [ 15, 8 ],
- [ 15, 10 ],
- [ 25, 15 ],
- [ 22, 15 ],
- [ 40, 15 ],
- [ 40, 15 ],
- [ 15, 9 ],
- [ 15, 9 ],
- null,
- [ 13, 7 ],
- null,
- [ 25, 20 ],
- [ 15, 9 ],
- [ 15, 10 ],
- [ 15, 10 ],
- [ 13, 7 ],
- [ 13, 7 ],
- [ 18, 8 ],
- [ 13, 7 ],
- [ 10, 5 ],
- [ 13, 7 ],
- [ 13, 7 ],
- [ 15, 8 ],
- [ 15, 8 ],
- [ 15, 7 ],
- [ 18, 8 ],
- [ 40, 15 ],
- [ 15, 10 ],
- null,
- [ 13, 7 ],
- null,
- [ 15, 9 ],
- null,
- [ 13, 7 ],
- [ 15, 9 ],
- [ 15, 12 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 8 ],
- [ 15, 9 ],
- null,
- [ 15, 10 ],
- [ 15, 9 ],
- [ 23, 15 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 22, 15 ],
- [ 22, 15 ],
- [ 17, 10 ],
- [ 12, 6 ],
- [ 12, 6 ],
- [ 25, 18 ],
- [ 25, 20 ],
- [ 25, 20 ],
- [ 25, 20 ],
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- [ 40, 15 ],
- [ 35, 10 ],
- [ 40, 15 ],
- [ 25, 10 ],
- [ 15, 7 ],
- [ 25, 10 ],
- [ 40, 15 ],
- [ 40, 15 ],
- [ 15, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 40, 15 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 40, 15 ],
- [ 35, 10 ],
- [ 15, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 35, 10 ],
- [ 25, 10 ],
- [ 40, 15 ],
- [ 25, 10 ],
- [ 15, 7 ],
- [ 25, 10 ],
- [ 40, 15 ],
- [ 40, 15 ],
- [ 15, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 40, 15 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 40, 15 ],
- [ 35, 10 ],
- [ 15, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 35, 10 ],
- [ 25, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 12, 8 ],
- [ 12, 8 ],
- [ 12, 8 ],
- [ 12, 8 ],
- [ 12, 8 ],
- [ 25, 10 ],
- [ 25, 10 ],
- [ 25, 10 ],
- [ 25, 10 ],
- [ 25, 10 ],
- [ 40, 15 ],
- [ 40, 15 ],
- [ 40, 15 ],
- [ 35, 10 ],
- [ 15, 7 ],
- [ 12, 8 ],
- [ 15, 7 ],
- [ 12, 8 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 12, 8 ],
- [ 15, 7 ],
- [ 12, 8 ],
- [ 15, 7 ],
- null,
- null,
- null,
- null,
- null,
- [ 15, 7 ],
- [ 12, 8 ],
- [ 15, 7 ],
- [ 12, 8 ],
- [ 15, 7 ],
- [ 15, 11 ],
- [ 20, 14 ],
- null,
- [ 15, 6 ],
- null,
- [ 13, 9 ],
- null,
- [ 15, 10 ],
- null,
- [ 13, 7 ],
- [ 17, 8 ],
- [ 17, 12 ],
- null,
- [ 15, 10 ],
- [ 20, 15 ],
- [ 20, 15 ],
- [ 15, 12 ],
- [ 22, 15 ],
- [ 25, 20 ],
- [ 15, 8 ],
- [ 25, 18 ],
- [ 13, 7 ],
- [ 13, 7 ],
- [ 17, 8 ],
- [ 17, 12 ],
- [ 15, 11 ],
- [ 20, 11 ],
- [ 32, 17 ],
- [ 32, 17 ],
- [ 15, 9 ],
- [ 13, 7 ],
- [ 10, 5 ],
- [ 22, 14 ],
- [ 22, 14 ],
- null,
- [ 15, 8 ],
- null,
- [ 20, 11 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 10, 10 ],
- [ 30, 15 ],
- [ 30, 15 ],
- [ 30, 20 ],
- [ 30, 20 ],
- [ 15, 8 ],
- [ 15, 8 ],
- [ 15, 10 ],
- [ 15, 10 ],
- [ 20, 10 ],
- [ 20, 10 ],
- [ 20, 10 ],
- [ 20, 10 ],
- [ 25, 17 ],
- [ 25, 17 ],
- null,
- [ 17, 10 ],
- null,
- [ 17, 11 ],
- null,
- [ 15, 10 ],
- [ 22, 15 ],
- [ 40, 15 ],
- [ 25, 10 ],
- [ 15, 7 ],
- [ 25, 10 ],
- [ 40, 15 ],
- [ 40, 15 ],
- [ 15, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 40, 15 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 40, 15 ],
- [ 35, 10 ],
- [ 15, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 35, 10 ],
- [ 25, 10 ],
- [ 25, 18 ],
- [ 18, 8 ],
- [ 18, 8 ],
- [ 25, 10 ],
- [ 40, 15 ],
- [ 15, 10 ],
- [ 20, 12 ],
- [ 20, 12 ],
- [ 25, 18 ],
- [ 21, 16 ],
- null,
- null,
- null,
- null,
- null,
- [ 28, 13 ],
- [ 28, 13 ],
- [ 18, 10 ],
- [ 18, 10 ],
- [ 23, 15 ],
- [ 23, 15 ],
- [ 35, 25 ],
- [ 35, 25 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 20, 10 ],
- [ 20, 10 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 20, 15 ],
- [ 20, 15 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 17, 10 ],
- [ 17, 10 ],
- [ 14, 10 ],
- [ 22, 16 ],
- [ 22, 16 ],
- [ 20, 15 ],
- [ 20, 15 ],
- null,
- null,
- [ 16, 10 ],
- [ 20, 15 ],
- [ 12, 8 ],
- [ 12, 8 ],
- [ 14, 6 ],
- [ 14, 6 ],
- [ 14, 6 ],
- [ 14, 6 ],
- [ 25, 18 ],
- [ 25, 18 ],
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- [ 30, 16 ],
- [ 30, 16 ],
- [ 22, 15 ],
- [ 22, 15 ],
- [ 11, 6 ],
- [ 11, 6 ],
- [ 20, 12 ],
- [ 20, 12 ],
- [ 28, 20 ],
- [ 28, 20 ],
- [ 13, 8 ],
- [ 13, 8 ],
- [ 20, 10 ],
- [ 20, 10 ],
- [ 23, 18 ],
- [ 23, 18 ],
- [ 25, 12 ],
- [ 25, 12 ],
- [ 25, 12 ],
- [ 25, 12 ],
- [ 25, 12 ],
- [ 25, 12 ],
- [ 25, 12 ],
- [ 25, 12 ],
- [ 25, 12 ],
- [ 25, 12 ],
- [ 10, 5 ],
- [ 15, 10 ],
- [ 15, 10 ],
- [ 25, 10 ],
- [ 15, 10 ],
- [ 17, 12 ],
- [ 17, 12 ],
- [ 20, 10 ],
- [ 20, 10 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 17, 8 ],
- [ 17, 8 ],
- [ 23, 14 ],
- [ 23, 14 ],
- [ 38, 18 ],
- [ 17, 8 ],
- [ 15, 8 ],
- [ 15, 8 ],
- [ 25, 20 ],
- [ 25, 20 ],
- [ 15, 8 ],
- [ 15, 8 ],
- [ 18, 12 ],
- [ 18, 12 ],
- [ 20, 20 ],
- [ 23, 14 ],
- [ 23, 14 ],
- [ 30, 15 ],
- [ 20, 10 ],
- [ 23, 18 ],
- [ 11, 6 ],
- [ 11, 6 ],
- [ 20, 14 ],
- [ 20, 14 ],
- [ 20, 10 ],
- [ 20, 10 ],
- [ 17, 13 ],
- [ 17, 13 ],
- [ 28, 14 ],
- [ 28, 14 ],
- [ 15, 15 ],
- [ 23, 13 ],
- [ 20, 10 ],
- [ 20, 10 ],
- [ 24, 15 ],
- [ 24, 15 ],
- [ 35, 18 ],
- [ 17, 12 ],
- [ 21, 16 ],
- [ 20, 15 ],
- [ 20, 15 ],
- [ 14, 9 ],
- [ 14, 9 ],
- [ 25, 18 ],
- [ 16, 6 ],
- [ 21, 11 ],
- [ 12, 8 ],
- [ 12, 8 ],
- [ 18, 18 ],
- [ 18, 18 ],
- [ 16, 16 ],
- [ 16, 16 ],
- null,
- null,
- null,
- null,
- [ 26, 17 ],
- [ 30, 15 ],
- [ 30, 15 ],
- [ 16, 10 ],
- [ 16, 10 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 16, 10 ],
- [ 16, 10 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 18, 10 ],
- [ 18, 10 ],
- [ 28, 19 ],
- [ 28, 19 ],
- [ 14, 10 ],
- [ 25, 15 ],
- [ 25, 15 ],
- [ 25, 20 ],
- [ 20, 15 ],
- [ 25, 18 ],
- [ 15, 10 ],
- [ 15, 10 ],
- [ 25, 16 ],
- [ 18, 10 ],
- [ 25, 16 ],
- [ 18, 10 ],
- [ 20, 15 ],
- [ 20, 15 ],
- [ 25, 15 ],
- [ 25, 15 ],
- [ 20, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 25, 15 ],
- [ 25, 15 ],
- [ 25, 15 ],
- [ 25, 15 ],
- [ 25, 15 ],
- [ 25, 15 ],
- [ 20, 15 ],
- [ 20, 15 ],
- [ 20, 15 ],
- [ 20, 15 ],
- [ 11, 11 ],
- [ 11, 11 ],
- [ 13, 9 ],
- [ 13, 9 ],
- [ 21, 16 ],
- [ 21, 16 ],
- [ 20, 15 ],
- [ 20, 15 ],
- [ 21, 15 ],
- [ 21, 15 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 24, 14 ],
- [ 24, 14 ],
- [ 22, 17 ],
- [ 15, 15 ],
- [ 15, 15 ],
- [ 14, 14 ],
- [ 24, 11 ],
- [ 24, 11 ],
- [ 10, 5 ],
- [ 10, 5 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 23, 17 ],
- [ 23, 17 ],
- [ 23, 16 ],
- [ 23, 16 ],
- [ 23, 16 ],
- [ 23, 16 ],
- [ 23, 17 ],
- [ 23, 17 ],
- [ 25, 20 ],
- [ 25, 20 ],
- [ 16, 16 ],
- [ 16, 16 ],
- [ 18, 18 ],
- [ 18, 18 ],
- [ 16, 16 ],
- [ 16, 16 ],
- [ 25, 16 ],
- [ 25, 16 ],
- [ 50, 20 ],
- [ 16, 12 ],
- [ 15, 10 ],
- [ 18, 12 ],
- [ 25, 20 ],
- [ 25, 20 ],
- [ 20, 15 ],
- [ 20, 15 ],
- [ 18, 18 ],
- [ 18, 18 ],
- [ 20, 10 ],
- [ 20, 10 ],
- [ 45, 15 ],
- [ 33, 18 ],
- [ 20, 14 ],
- [ 20, 14 ],
- [ 21, 14 ],
- [ 21, 14 ],
- [ 16, 10 ],
- [ 16, 10 ],
- [ 17, 11 ],
- [ 17, 11 ],
- [ 22, 17 ],
- [ 22, 17 ],
- [ 15, 9 ],
- [ 16, 10 ],
- [ 18, 10 ],
- [ 14, 6 ],
- [ 23, 18 ],
- [ 25, 20 ],
- [ 25, 20 ],
- [ 25, 14 ],
- [ 25, 14 ],
- [ 30, 15 ],
- [ 20, 15 ],
- [ 33, 18 ],
- [ 33, 18 ],
- [ 12, 12 ],
- [ 23, 17 ],
- [ 23, 17 ],
- [ 20, 17 ],
- [ 20, 17 ],
- [ 20, 11 ],
- [ 26, 17 ],
- [ 21, 10 ],
- [ 22, 8 ],
- [ 20, 13 ],
- [ 20, 13 ],
- [ 21, 14 ],
- [ 21, 14 ],
- [ 20, 10 ],
- [ 20, 10 ],
- null,
- null,
- null,
- null,
- null,
- [ 20, 17 ],
- [ 20, 17 ],
- [ 16, 6 ],
- [ 16, 6 ],
- [ 18, 10 ],
- [ 18, 10 ],
- [ 32, 17 ],
- [ 32, 17 ],
- [ 18, 15 ],
- [ 18, 15 ],
- [ 23, 13 ],
- [ 23, 13 ],
- [ 14, 7 ],
- [ 15, 8 ],
- [ 15, 7 ],
- [ 18, 8 ],
- [ 13, 10 ],
- [ 13, 10 ],
- [ 23, 17 ],
- [ 20, 15 ],
- [ 13, 7 ],
- [ 18, 12 ],
- [ 33, 18 ],
- [ 25, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 20, 10 ],
- [ 28, 18 ],
- [ 25, 15 ],
- [ 25, 15 ],
- [ 35, 18 ],
- [ 18, 8 ],
- [ 20, 14 ],
- [ 23, 17 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 25, 16 ],
- [ 25, 16 ],
- [ 23, 15 ],
- [ 25, 12 ],
- [ 20, 11 ],
- [ 20, 11 ],
- [ 23, 17 ],
- [ 23, 17 ],
- [ 21, 14 ],
- [ 21, 14 ],
- [ 18, 12 ],
- [ 18, 12 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 25, 18 ],
- [ 15, 12 ],
- [ 15, 12 ],
- [ 28, 14 ],
- [ 28, 14 ],
- [ 28, 14 ],
- [ 24, 15 ],
- [ 24, 15 ],
- [ 20, 10 ],
- [ 30, 17 ],
- [ 20, 15 ],
- [ 13, 10 ],
- [ 13, 10 ],
- [ 15, 15 ],
- [ 25, 16 ],
- [ 25, 16 ],
- [ 19, 10 ],
- [ 19, 10 ],
- [ 28, 15 ],
- [ 20, 14 ],
- [ 20, 14 ],
- [ 15, 11 ],
- [ 15, 11 ],
- [ 20, 15 ],
- [ 20, 15 ],
- [ 21, 15 ],
- [ 21, 15 ],
- [ 18, 14 ],
- [ 18, 14 ],
- [ 19, 16 ],
- [ 19, 16 ],
- [ 20, 13 ],
- [ 20, 13 ],
- [ 22, 15 ],
- [ 22, 15 ],
- [ 23, 16 ],
- [ 23, 16 ],
- [ 13, 13 ],
- [ 19, 14 ],
- [ 19, 14 ],
- [ 18, 10 ],
- [ 18, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 35, 18 ],
- [ 25, 10 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 15, 7 ],
- [ 35, 18 ],
- [ 25, 10 ],
- [ 25, 20 ],
- [ 25, 20 ],
- [ 12, 5 ],
- [ 25, 18 ],
- 20,
- [ 18, 10 ],
- [ 18, 10 ],
- [ 21, 15 ],
- [ 21, 15 ],
- [ 23, 20 ],
- [ 23, 20 ],
- [ 22, 14 ],
- [ 22, 14 ],
- [ 22, 14 ],
- [ 27, 14 ],
- [ 27, 14 ],
- 25,
- 25,
- [ 21, 14 ],
- [ 21, 14 ],
- [ 16, 7 ],
- [ 16, 7 ],
- [ 25, 16 ],
- [ 25, 16 ],
- [ 11, 8 ],
- [ 11, 8 ],
- [ 15, 15 ],
- 20,
- 20,
- 25,
- 25,
- 18,
- 18,
- 14,
- 14,
- 25,
- 18,
- 35,
- 20,
- [ 23, 15 ],
- [ 23, 15 ],
- [ 20, 12 ],
- [ 20, 12 ],
- [ 18, 15 ],
- [ 18, 15 ],
- [ 20, 20 ],
- 25,
- 25,
- [ 23, 16 ],
- [ 23, 16 ],
- 21,
- 21,
- [ 22, 15 ],
- [ 22, 15 ],
- [ 20, 14 ],
- [ 20, 14 ],
- 18,
- 18,
- 21,
- 21,
- [ 23, 15 ],
- [ 14, 10 ],
- [ 15, 7 ],
- [ 16, 8 ],
- [ 17, 9 ],
- [ 18, 10 ],
- [ 19, 11 ],
- [ 21, 13 ],
- [ 23, 15 ],
- [ 23, 13 ],
- [ 25, 15 ],
- [ 25, 15 ],
- [ 20, 8 ],
- [ 20, 11 ],
- [ 27, 17 ],
- [ 20, 10 ],
- [ 20, 10 ],
- [ 26, 16 ],
- [ 26, 16 ],
- [ 19, 7 ],
- [ 19, 7 ],
- [ 11, 11 ],
- [ 11, 11 ],
- 15,
- 15,
- [ 23, 17 ],
- [ 23, 17 ],
- [ 15, 8 ],
- [ 15, 8 ],
- [ 17, 10 ],
- [ 17, 10 ],
- [ 22, 16 ],
- [ 22, 16 ],
- [ 30, 16 ],
- [ 30, 16 ],
- [ 22, 14 ],
- [ 22, 14 ],
- [ 20, 12 ],
- [ 20, 12 ],
- [ 27, 12 ],
- [ 15, 12 ],
- [ 15, 12 ],
- [ 27, 17 ],
- [ 27, 17 ],
- [ 27, 15 ],
- [ 27, 15 ],
- [ 23, 14 ],
- [ 23, 14 ],
- [ 25, 13 ],
- [ 25, 13 ],
- [ 20, 6 ],
- 20,
- 17,
- 18,
- [ 22, 16 ],
- [ 22, 16 ],
- [ 15, 7 ],
- [ 18, 10 ],
- [ 35, 18 ],
- [ 15, 7 ],
- [ 18, 8 ],
- [ 20, 10 ],
- [ 25, 15 ],
- [ 28, 18 ],
- [ 20, 12 ],
- [ 16, 9 ],
- [ 25, 18 ],
- null,
- null,
- [ 24, 12 ],
- [ 24, 12 ],
- [ 28, 18 ],
- [ 28, 18 ],
- [ 20, 10 ],
- [ 28, 14 ],
- [ 28, 14 ],
- 25,
- 25,
- [ 18, 12 ],
- [ 18, 12 ],
- [ 16, 10 ],
- [ 16, 10 ],
- [ 25, 19 ],
- [ 25, 19 ],
- [ 13, 7 ],
- [ 13, 7 ],
- [ 25, 16 ],
- [ 25, 16 ],
- [ 25, 12 ],
- [ 19, 10 ],
- [ 25, 16 ],
- [ 25, 16 ],
- [ 25, 15 ],
- [ 30, 17 ],
- [ 15, 15 ],
- [ 15, 15 ],
- [ 15, 15 ],
- [ 15, 15 ],
- [ 25, 15 ],
- [ 25, 15 ],
- [ 23, 14 ],
- [ 23, 14 ],
- [ 13, 13 ],
- [ 28, 14 ],
- [ 28, 14 ],
- [ 24, 14 ],
- [ 24, 14 ],
- [ 24, 14 ],
- 20,
- 20,
- 16,
- 16,
- [ 19, 14 ],
- [ 19, 14 ],
- 21,
- 21,
- [ 21, 15 ],
- [ 21, 15 ],
- 25,
- 25,
- [ 22, 10 ],
- [ 22, 10 ],
- [ 29, 19 ],
- [ 29, 19 ],
- [ 27, 18 ],
- [ 28, 19 ],
- [ 32, 18 ],
- [ 25, 15 ],
- 20,
- 20,
- 18,
- 14,
- [ 28, 22 ],
- [ 25, 18 ],
- 21,
- 21,
- [ 27, 18 ],
- [ 24, 15 ],
- [ 24, 14 ],
- [ 28, 16 ],
- [ 28, 16 ],
- [ 29, 19 ],
- [ 29, 19 ],
- [ 23, 14 ],
- 24,
- 24,
- 15,
- 15,
- 20,
- 20,
- 25,
- 25,
- 16,
- 16,
- [ 13, 13 ],
- [ 13, 13 ],
- [ 18, 9 ],
- [ 18, 9 ],
- [ 22, 10 ],
- [ 19, 14 ]
+ [ 3, 2 ],
+ [ 12, 9 ],
+ [ 23, 15 ],
+ [ 25, 18 ],
+ [ 12, 9 ],
+ [ 15, 10 ],
+ [ 15, 10 ],
+ [ 25, 20 ],
+ [ 12, 7 ],
+ [ 23, 15 ],
+ [ 15, 8 ],
+ [ 25, 20 ],
+ [ 15, 10 ],
+ [ 15, 10 ],
+ [ 15, 10 ],
+ [ 20, 15 ],
+ [ 23, 15 ],
+ [ 15, 10 ],
+ [ 23, 15 ],
+ [ 15, 10 ],
+ [ 15, 8 ],
+ [ 23, 15 ],
+ [ 15, 8 ],
+ [ 15, 10 ],
+ [ 25, 15 ],
+ [ 22, 15 ],
+ [ 40, 15 ],
+ [ 40, 15 ],
+ [ 15, 9 ],
+ [ 15, 9 ],
+ null,
+ [ 13, 7 ],
+ null,
+ [ 25, 20 ],
+ [ 15, 9 ],
+ [ 15, 10 ],
+ [ 15, 10 ],
+ [ 13, 7 ],
+ [ 13, 7 ],
+ [ 18, 8 ],
+ [ 13, 7 ],
+ [ 10, 5 ],
+ [ 13, 7 ],
+ [ 13, 7 ],
+ [ 15, 8 ],
+ [ 15, 8 ],
+ [ 15, 7 ],
+ [ 18, 8 ],
+ [ 40, 15 ],
+ [ 15, 10 ],
+ null,
+ [ 13, 7 ],
+ null,
+ [ 15, 9 ],
+ null,
+ [ 13, 7 ],
+ [ 15, 9 ],
+ [ 15, 12 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 8 ],
+ [ 15, 9 ],
+ null,
+ [ 15, 10 ],
+ [ 15, 9 ],
+ [ 23, 15 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 22, 15 ],
+ [ 22, 15 ],
+ [ 17, 10 ],
+ [ 12, 6 ],
+ [ 12, 6 ],
+ [ 25, 18 ],
+ [ 25, 20 ],
+ [ 25, 20 ],
+ [ 25, 20 ],
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ [ 40, 15 ],
+ [ 35, 10 ],
+ [ 40, 15 ],
+ [ 25, 10 ],
+ [ 15, 7 ],
+ [ 25, 10 ],
+ [ 40, 15 ],
+ [ 40, 15 ],
+ [ 15, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 40, 15 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 40, 15 ],
+ [ 35, 10 ],
+ [ 15, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 35, 10 ],
+ [ 25, 10 ],
+ [ 40, 15 ],
+ [ 25, 10 ],
+ [ 15, 7 ],
+ [ 25, 10 ],
+ [ 40, 15 ],
+ [ 40, 15 ],
+ [ 15, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 40, 15 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 40, 15 ],
+ [ 35, 10 ],
+ [ 15, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 35, 10 ],
+ [ 25, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 12, 8 ],
+ [ 12, 8 ],
+ [ 12, 8 ],
+ [ 12, 8 ],
+ [ 12, 8 ],
+ [ 25, 10 ],
+ [ 25, 10 ],
+ [ 25, 10 ],
+ [ 25, 10 ],
+ [ 25, 10 ],
+ [ 40, 15 ],
+ [ 40, 15 ],
+ [ 40, 15 ],
+ [ 35, 10 ],
+ [ 15, 7 ],
+ [ 12, 8 ],
+ [ 15, 7 ],
+ [ 12, 8 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 12, 8 ],
+ [ 15, 7 ],
+ [ 12, 8 ],
+ [ 15, 7 ],
+ null,
+ null,
+ null,
+ null,
+ null,
+ [ 15, 7 ],
+ [ 12, 8 ],
+ [ 15, 7 ],
+ [ 12, 8 ],
+ [ 15, 7 ],
+ [ 15, 11 ],
+ [ 20, 14 ],
+ null,
+ [ 15, 6 ],
+ null,
+ [ 13, 9 ],
+ null,
+ [ 15, 10 ],
+ null,
+ [ 13, 7 ],
+ [ 17, 8 ],
+ [ 17, 12 ],
+ null,
+ [ 15, 10 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 15, 12 ],
+ [ 22, 15 ],
+ [ 25, 20 ],
+ [ 15, 8 ],
+ [ 25, 18 ],
+ [ 13, 7 ],
+ [ 13, 7 ],
+ [ 17, 8 ],
+ [ 17, 12 ],
+ [ 15, 11 ],
+ [ 20, 11 ],
+ [ 32, 17 ],
+ [ 32, 17 ],
+ [ 15, 9 ],
+ [ 13, 7 ],
+ [ 10, 5 ],
+ [ 22, 14 ],
+ [ 22, 14 ],
+ null,
+ [ 15, 8 ],
+ null,
+ [ 20, 11 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 10, 10 ],
+ [ 30, 15 ],
+ [ 30, 15 ],
+ [ 30, 20 ],
+ [ 30, 20 ],
+ [ 15, 8 ],
+ [ 15, 8 ],
+ [ 15, 10 ],
+ [ 15, 10 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 25, 17 ],
+ [ 25, 17 ],
+ null,
+ [ 17, 10 ],
+ null,
+ [ 17, 11 ],
+ null,
+ [ 15, 10 ],
+ [ 22, 15 ],
+ [ 40, 15 ],
+ [ 25, 10 ],
+ [ 15, 7 ],
+ [ 25, 10 ],
+ [ 40, 15 ],
+ [ 40, 15 ],
+ [ 15, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 40, 15 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 40, 15 ],
+ [ 35, 10 ],
+ [ 15, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 35, 10 ],
+ [ 25, 10 ],
+ [ 25, 18 ],
+ [ 18, 8 ],
+ [ 18, 8 ],
+ [ 25, 10 ],
+ [ 40, 15 ],
+ [ 15, 10 ],
+ [ 20, 12 ],
+ [ 20, 12 ],
+ [ 25, 18 ],
+ [ 21, 16 ],
+ null,
+ null,
+ null,
+ null,
+ null,
+ [ 28, 13 ],
+ [ 28, 13 ],
+ [ 18, 10 ],
+ [ 18, 10 ],
+ [ 23, 15 ],
+ [ 23, 15 ],
+ [ 35, 25 ],
+ [ 35, 25 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 17, 10 ],
+ [ 17, 10 ],
+ [ 14, 10 ],
+ [ 22, 16 ],
+ [ 22, 16 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ null,
+ null,
+ [ 16, 10 ],
+ [ 20, 15 ],
+ [ 12, 8 ],
+ [ 12, 8 ],
+ [ 14, 6 ],
+ [ 14, 6 ],
+ [ 14, 6 ],
+ [ 14, 6 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ [ 30, 16 ],
+ [ 30, 16 ],
+ [ 22, 15 ],
+ [ 22, 15 ],
+ [ 11, 6 ],
+ [ 11, 6 ],
+ [ 20, 12 ],
+ [ 20, 12 ],
+ [ 28, 20 ],
+ [ 28, 20 ],
+ [ 13, 8 ],
+ [ 13, 8 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 23, 18 ],
+ [ 23, 18 ],
+ [ 25, 12 ],
+ [ 25, 12 ],
+ [ 25, 12 ],
+ [ 25, 12 ],
+ [ 25, 12 ],
+ [ 25, 12 ],
+ [ 25, 12 ],
+ [ 25, 12 ],
+ [ 25, 12 ],
+ [ 25, 12 ],
+ [ 10, 5 ],
+ [ 15, 10 ],
+ [ 15, 10 ],
+ [ 25, 10 ],
+ [ 15, 10 ],
+ [ 17, 12 ],
+ [ 17, 12 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 17, 8 ],
+ [ 17, 8 ],
+ [ 23, 14 ],
+ [ 23, 14 ],
+ [ 38, 18 ],
+ [ 17, 8 ],
+ [ 15, 8 ],
+ [ 15, 8 ],
+ [ 25, 20 ],
+ [ 25, 20 ],
+ [ 15, 8 ],
+ [ 15, 8 ],
+ [ 18, 12 ],
+ [ 18, 12 ],
+ [ 20, 20 ],
+ [ 23, 14 ],
+ [ 23, 14 ],
+ [ 30, 15 ],
+ [ 20, 10 ],
+ [ 23, 18 ],
+ [ 11, 6 ],
+ [ 11, 6 ],
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 17, 13 ],
+ [ 17, 13 ],
+ [ 28, 14 ],
+ [ 28, 14 ],
+ [ 15, 15 ],
+ [ 23, 13 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 24, 15 ],
+ [ 24, 15 ],
+ [ 35, 18 ],
+ [ 17, 12 ],
+ [ 21, 16 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 14, 9 ],
+ [ 14, 9 ],
+ [ 25, 18 ],
+ [ 16, 6 ],
+ [ 21, 11 ],
+ [ 12, 8 ],
+ [ 12, 8 ],
+ [ 18, 18 ],
+ [ 18, 18 ],
+ [ 16, 16 ],
+ [ 16, 16 ],
+ null,
+ null,
+ null,
+ null,
+ [ 26, 17 ],
+ [ 30, 15 ],
+ [ 30, 15 ],
+ [ 16, 10 ],
+ [ 16, 10 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 16, 10 ],
+ [ 16, 10 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 18, 10 ],
+ [ 18, 10 ],
+ [ 28, 19 ],
+ [ 28, 19 ],
+ [ 14, 10 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 25, 20 ],
+ [ 20, 15 ],
+ [ 25, 18 ],
+ [ 15, 10 ],
+ [ 15, 10 ],
+ [ 25, 16 ],
+ [ 18, 10 ],
+ [ 25, 16 ],
+ [ 18, 10 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 20, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 11, 11 ],
+ [ 11, 11 ],
+ [ 13, 9 ],
+ [ 13, 9 ],
+ [ 21, 16 ],
+ [ 21, 16 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 21, 15 ],
+ [ 21, 15 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 24, 14 ],
+ [ 24, 14 ],
+ [ 22, 17 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ [ 14, 14 ],
+ [ 24, 11 ],
+ [ 24, 11 ],
+ [ 10, 5 ],
+ [ 10, 5 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 23, 16 ],
+ [ 23, 16 ],
+ [ 23, 16 ],
+ [ 23, 16 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 25, 20 ],
+ [ 25, 20 ],
+ [ 16, 16 ],
+ [ 16, 16 ],
+ [ 18, 18 ],
+ [ 18, 18 ],
+ [ 16, 16 ],
+ [ 16, 16 ],
+ [ 25, 16 ],
+ [ 25, 16 ],
+ [ 50, 20 ],
+ [ 16, 12 ],
+ [ 15, 10 ],
+ [ 18, 12 ],
+ [ 25, 20 ],
+ [ 25, 20 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 18, 18 ],
+ [ 18, 18 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 45, 15 ],
+ [ 33, 18 ],
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 21, 14 ],
+ [ 21, 14 ],
+ [ 16, 10 ],
+ [ 16, 10 ],
+ [ 17, 11 ],
+ [ 17, 11 ],
+ [ 22, 17 ],
+ [ 22, 17 ],
+ [ 15, 9 ],
+ [ 16, 10 ],
+ [ 18, 10 ],
+ [ 14, 6 ],
+ [ 23, 18 ],
+ [ 25, 20 ],
+ [ 25, 20 ],
+ [ 25, 14 ],
+ [ 25, 14 ],
+ [ 30, 15 ],
+ [ 20, 15 ],
+ [ 33, 18 ],
+ [ 33, 18 ],
+ [ 12, 12 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 20, 17 ],
+ [ 20, 17 ],
+ [ 20, 11 ],
+ [ 26, 17 ],
+ [ 21, 10 ],
+ [ 22, 8 ],
+ [ 20, 13 ],
+ [ 20, 13 ],
+ [ 21, 14 ],
+ [ 21, 14 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ null,
+ null,
+ null,
+ null,
+ null,
+ [ 20, 17 ],
+ [ 20, 17 ],
+ [ 16, 6 ],
+ [ 16, 6 ],
+ [ 18, 10 ],
+ [ 18, 10 ],
+ [ 32, 17 ],
+ [ 32, 17 ],
+ [ 18, 15 ],
+ [ 18, 15 ],
+ [ 23, 13 ],
+ [ 23, 13 ],
+ [ 14, 7 ],
+ [ 15, 8 ],
+ [ 15, 7 ],
+ [ 18, 8 ],
+ [ 13, 10 ],
+ [ 13, 10 ],
+ [ 23, 17 ],
+ [ 20, 15 ],
+ [ 13, 7 ],
+ [ 18, 12 ],
+ [ 33, 18 ],
+ [ 25, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 20, 10 ],
+ [ 28, 18 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 35, 18 ],
+ [ 18, 8 ],
+ [ 20, 14 ],
+ [ 23, 17 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 25, 16 ],
+ [ 25, 16 ],
+ [ 23, 15 ],
+ [ 25, 12 ],
+ [ 20, 11 ],
+ [ 20, 11 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 21, 14 ],
+ [ 21, 14 ],
+ [ 18, 12 ],
+ [ 18, 12 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 15, 12 ],
+ [ 15, 12 ],
+ [ 28, 14 ],
+ [ 28, 14 ],
+ [ 28, 14 ],
+ [ 24, 15 ],
+ [ 24, 15 ],
+ [ 20, 10 ],
+ [ 30, 17 ],
+ [ 20, 15 ],
+ [ 13, 10 ],
+ [ 13, 10 ],
+ [ 15, 15 ],
+ [ 25, 16 ],
+ [ 25, 16 ],
+ [ 19, 10 ],
+ [ 19, 10 ],
+ [ 28, 15 ],
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 15, 11 ],
+ [ 15, 11 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 21, 15 ],
+ [ 21, 15 ],
+ [ 18, 14 ],
+ [ 18, 14 ],
+ [ 19, 16 ],
+ [ 19, 16 ],
+ [ 20, 13 ],
+ [ 20, 13 ],
+ [ 22, 15 ],
+ [ 22, 15 ],
+ [ 23, 16 ],
+ [ 23, 16 ],
+ [ 13, 13 ],
+ [ 19, 14 ],
+ [ 19, 14 ],
+ [ 18, 10 ],
+ [ 18, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 35, 18 ],
+ [ 25, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 35, 18 ],
+ [ 25, 10 ],
+ [ 25, 20 ],
+ [ 25, 20 ],
+ [ 12, 5 ],
+ [ 25, 18 ],
+ [ 20, 14 ],
+ [ 18, 10 ],
+ [ 18, 10 ],
+ [ 21, 15 ],
+ [ 21, 15 ],
+ [ 23, 20 ],
+ [ 23, 20 ],
+ [ 22, 14 ],
+ [ 22, 14 ],
+ [ 22, 14 ],
+ [ 27, 14 ],
+ [ 27, 14 ],
+ [ 25, 19 ],
+ [ 25, 19 ],
+ [ 21, 14 ],
+ [ 21, 14 ],
+ [ 16, 7 ],
+ [ 16, 7 ],
+ [ 25, 16 ],
+ [ 25, 16 ],
+ [ 11, 8 ],
+ [ 11, 8 ],
+ [ 15, 15 ],
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 18, 12 ],
+ [ 18, 12 ],
+ [ 14, 7 ],
+ [ 14, 7 ],
+ [ 25, 18 ],
+ [ 18, 12 ],
+ [ 35, 20 ],
+ [ 20, 14 ],
+ [ 23, 15 ],
+ [ 23, 15 ],
+ [ 20, 12 ],
+ [ 20, 12 ],
+ [ 18, 15 ],
+ [ 18, 15 ],
+ [ 20, 20 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 23, 16 ],
+ [ 23, 16 ],
+ [ 21, 14 ],
+ [ 21, 14 ],
+ [ 22, 15 ],
+ [ 22, 15 ],
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 18, 10 ],
+ [ 18, 10 ],
+ [ 21, 15 ],
+ [ 21, 15 ],
+ [ 23, 15 ],
+ [ 14, 10 ],
+ [ 15, 7 ],
+ [ 16, 8 ],
+ [ 17, 9 ],
+ [ 18, 10 ],
+ [ 19, 11 ],
+ [ 21, 13 ],
+ [ 23, 15 ],
+ [ 23, 13 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 17, 8 ],
+ [ 20, 11 ],
+ [ 27, 17 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 26, 16 ],
+ [ 26, 16 ],
+ [ 19, 7 ],
+ [ 19, 7 ],
+ [ 11, 11 ],
+ [ 11, 11 ],
+ [ 15, 8 ],
+ [ 15, 8 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 15, 8 ],
+ [ 15, 8 ],
+ [ 17, 10 ],
+ [ 17, 10 ],
+ [ 22, 16 ],
+ [ 22, 16 ],
+ [ 30, 16 ],
+ [ 30, 16 ],
+ [ 22, 14 ],
+ [ 22, 14 ],
+ [ 20, 12 ],
+ [ 20, 12 ],
+ [ 27, 12 ],
+ [ 15, 12 ],
+ [ 15, 12 ],
+ [ 27, 17 ],
+ [ 27, 17 ],
+ [ 27, 15 ],
+ [ 27, 15 ],
+ [ 23, 14 ],
+ [ 23, 14 ],
+ [ 25, 13 ],
+ [ 25, 13 ],
+ [ 20, 6 ],
+ [ 20, 13 ],
+ [ 17, 10 ],
+ [ 18, 11 ],
+ [ 22, 16 ],
+ [ 22, 16 ],
+ [ 15, 7 ],
+ [ 18, 10 ],
+ [ 35, 18 ],
+ [ 15, 7 ],
+ [ 18, 8 ],
+ [ 20, 10 ],
+ [ 25, 15 ],
+ [ 28, 18 ],
+ [ 20, 12 ],
+ [ 16, 9 ],
+ [ 25, 18 ],
+ [ 10, 10 ],
+ [ 10, 10 ],
+ [ 24, 12 ],
+ [ 24, 12 ],
+ [ 28, 18 ],
+ [ 28, 18 ],
+ [ 20, 10 ],
+ [ 28, 14 ],
+ [ 28, 14 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 18, 12 ],
+ [ 18, 12 ],
+ [ 16, 10 ],
+ [ 16, 10 ],
+ [ 25, 19 ],
+ [ 25, 19 ],
+ [ 13, 7 ],
+ [ 13, 7 ],
+ [ 25, 16 ],
+ [ 25, 16 ],
+ [ 25, 12 ],
+ [ 19, 10 ],
+ [ 25, 16 ],
+ [ 25, 16 ],
+ [ 25, 15 ],
+ [ 30, 17 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 23, 14 ],
+ [ 23, 14 ],
+ [ 13, 13 ],
+ [ 28, 14 ],
+ [ 28, 14 ],
+ [ 24, 14 ],
+ [ 24, 14 ],
+ [ 24, 14 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 16, 10 ],
+ [ 16, 10 ],
+ [ 19, 14 ],
+ [ 19, 14 ],
+ [ 21, 15 ],
+ [ 21, 15 ],
+ [ 21, 15 ],
+ [ 21, 15 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 22, 10 ],
+ [ 22, 10 ],
+ [ 29, 19 ],
+ [ 29, 19 ],
+ [ 27, 18 ],
+ [ 28, 19 ],
+ [ 32, 18 ],
+ [ 25, 15 ],
+ [ 20, 12 ],
+ [ 20, 12 ],
+ [ 18, 10 ],
+ [ 14, 8 ],
+ [ 28, 22 ],
+ [ 25, 18 ],
+ 21,
+ 21,
+ [ 27, 18 ],
+ [ 24, 15 ],
+ [ 24, 14 ],
+ [ 28, 16 ],
+ [ 28, 16 ],
+ [ 29, 19 ],
+ [ 29, 19 ],
+ [ 23, 14 ],
+ [ 24, 18 ],
+ [ 24, 18 ],
+ [ 15, 9 ],
+ [ 15, 9 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 25, 18 ], // 3d2y Sanji
+ [ 25, 18 ], // 3d2y Sanji
+ [ 16, 10 ],
+ [ 16, 10 ],
+ [ 13, 13 ],
+ [ 13, 13 ],
+ [ 18, 9 ],
+ [ 18, 9 ],
+ [ 22, 10 ],
+ [ 19, 14 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ [ 28, 16 ],
+ [ 28, 16 ],
+ [ 22, 12 ],
+ [ 22, 12 ],
+ [ 18, 8 ],
+ [ 21, 12 ],
+ [ 21, 12 ],
+ [ 16, 11 ],
+ [ 30, 17 ],
+ [ 31, 17 ],
+ [ 31, 17 ],
+ [ 19, 14 ],
+ [ 19, 14 ],
+ [ 19, 14 ],
+ [ 19, 14 ],
+ [ 24, 17 ],
+ [ 24, 17 ],
+ [ 21, 15 ],
+ [ 21, 15 ],
+ [ 15, 8 ],
+ [ 15, 8 ],
+ [ 13, 13 ],
+ [ 13, 13 ],
+ [ 20, 12 ],
+ [ 25, 17 ],
+ [ 25, 18 ],
+ [ 20, 15 ],
+ [ 21, 9 ],
+ [ 21, 9 ],
+ [ 18, 10 ],
+ [ 18, 10 ],
+ 20,
+ [ 16, 10 ],
+ [ 20, 14 ],
+ 20,
+ [ 18, 10 ],
+ [ 18, 10 ],
+ [ 22, 14 ],
+ [ 16, 8 ],
+ [ 16, 8 ],
+ [ 23, 16 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 25, 18 ],
+ [ 21, 15 ],
+ [ 28, 20 ],
+ [ 28, 20 ],
+ [ 28, 20 ],
+ [ 28, 20 ],
+ [ 28, 20 ],
+ [ 22, 15 ],
+ [ 22, 15 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ [ 25, 11 ],
+ [ 25, 11 ],
+ [ 25, 18 ],
+ [ 15, 7 ],
+ [ 16, 8 ],
+ [ 22, 12 ],
+ [ 22, 12 ],
+ [ 22, 14 ],
+ null,
+ null,
+ null,
+ null,
+ [ 19, 12 ],
+ [ 15, 9 ],
+ [ 15, 9 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ null, //Violet
+ null, //Violet
+ null, //Dellinger
+ null, //Dellinger
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 20, 12 ],
+ [ 20, 12 ],
+ [ 20, 10 ],
+ [ 15, 7 ],
+ [ 15, 7 ],
+ [ 13, 13 ],
+ [ 13, 13 ],
+ [ 25, 14 ],
+ [ 23, 14 ],
+ [ 23, 14 ],
+ [ 19, 10 ],
+ [ 19, 10 ],
+ [ 16, 6 ],
+ [ 24, 12 ],
+ [ 24, 12 ],
+ [ 26, 14 ],
+ [ 26, 14 ],
+ [ 16, 6],
+ [ 13, 13],
+ [ 13, 13],
+ [ 15, 15 ],
+ [ 17, 17 ],
+ [ 19, 13 ],
+ [ 19, 13 ],
+ [ 11, 5 ],
+ [ 11, 5 ],
+ [ 18, 12 ],
+ [ 18, 12 ],
+ [ 23, 15 ],
+ [ 23, 15 ],
+ [ 11, 5 ],
+ [ 11, 5 ],
+ [ 23, 18 ],
+ [ 23, 18 ],
+ [ 23, 15 ],
+ [ 23, 15 ],
+ [ 11, 3 ],
+ [ 11, 3 ],
+ [ 29, 18 ],
+ [ 29, 18 ],
+ [ 18, 8 ],
+ [ 18, 8 ],
+ null,
+ null,
+ [ 30, 14 ],
+ [ 30, 14 ],
+ [ 22, 15 ],
+ [ 22, 15 ],
+ [ 23, 15 ],
+ [ 23, 15 ],
+ [ 14, 8 ],
+ [ 13, 13 ],
+ [ 13, 13 ],
+ 21,
+ 21,
+ [ 17, 12 ],
+ [ 17, 12 ],
+ 15,
+ 15,
+ 10,
+ [ 21, 15 ],
+ 20,
+ 28,
+ 16,
+ 13,
+ 16,
+ 16,
+ [ 13, 6 ],
+ [ 13, 6 ],
+ [ 26, 18 ],
+ [ 26, 18 ],
+ [ 15, 6 ],
+ [ 17, 10],
+ [ 17, 10],
+ [ 20, 16 ], //Leo
+ [ 20, 16 ], //Leo
+ [ 24, 18 ], //Mansherry
+ [ 24, 18 ], //Mansherry
+ [ 18, 12 ],
+ [ 18, 12 ],
+ [ 23, 16 ],
+ [ 23, 16 ],
+ [ 24, 17 ],
+ [ 24, 17 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 20, 10 ],
+ [ 25, 12 ],
+ [ 25, 12 ],
+ [ 13, 13 ],
+ [ 13, 13 ],
+ [ 24, 15 ],
+ [ 24, 15 ],
+ [ 20, 11 ],
+ [ 20, 11 ],
+ [ 13, 8 ],
+ [ 11, 11 ],
+ [ 11, 11 ],
+ [ 30, 15 ],
+ [ 30, 15 ],
+ [ 27, 17 ],//Ain
+ [ 27, 17 ],//Ain
+ [ 23, 12 ],
+ [ 23, 12 ],
+ [ 30, 15 ],
+ [ 30, 15 ],
+ [ 13, 6 ],
+ [ 13, 6 ],
+ [ 22, 15 ],
+ [ 22, 15 ],
+ [ 12, 7 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 23, 16 ],
+ [ 23, 16 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ null,//Elizabello
+ null,//Elizabello
+ null,//Ideo
+ null,//Ideo
+ [ 6, 6 ],
+ [ 6, 6 ],
+ [ 16, 12],
+ [ 18 , 11 ],
+ [ 19, 12 ],
+ [ 15, 8 ],
+ [ 30, 16 ],
+ [ 30, 16 ],
+ [ 24, 12 ],
+ [ 24, 12 ],
+ [ 22, 12 ],
+ [ 22, 12 ],
+ 18,
+ 15,
+ 20,
+ 20,
+ 15,
+ [ 25, 18 ],
+ 19,
+ [ 25, 18 ],
+ 21,
+ [ 10, 4 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 21, 15 ],
+ [ 21, 15 ],
+ [ 13, 13 ],
+ [ 13, 13 ],
+ [ 25, 14 ],
+ [ 25, 14 ],
+ [ 17, 10 ],
+ [ 17, 10 ],
+ [ 14, 8 ],
+ [ 14, 8 ],
+ [ 24, 18 ],
+ [ 24, 18 ],
+ [ 19, 9 ],
+ [ 19, 9 ],
+ [ 23, 16 ],
+ [ 23, 16 ],
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ [ 17, 17 ],
+ [ 17, 17 ],
+ null,//Rainbow Armored Crab
+ [ 19, 13 ],
+ [ 19, 13 ],
+ [ 23, 17 ],
+ [ 23, 17 ],
+ null,// Haruta
+ null,// Haruta
+ [ 23, 16 ],
+ [ 23, 16 ],
+ [ 11, 5 ],
+ [ 11, 5 ],
+ [ 19, 13 ],
+ [ 19, 13 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ [ 29, 15 ],
+ [ 29, 15 ],
+ [ 17, 7 ],
+ [ 18, 10 ],
+ [ 18, 10 ],
+ [ 22, 14 ],
+ [ 22, 14 ],
+ [ 14, 6 ],
+ [ 14, 6 ],
+ [ 17, 9 ],
+ [ 17, 9 ],
+ [ 25, 15 ],
+ [ 16, 10 ],
+ [ 16, 10 ],
+ [ 21, 14 ],
+ [ 21, 14 ],
+ [ 17, 11 ],
+ [ 17, 11 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ [ 18, 12 ],
+ [ 17, 10 ],
+ [ 17, 11 ],
+ [ 25, 14 ],
+ null, //byrnndi world
+ null,//byrnndi world
+ [ 29, 16 ],
+ [ 29, 16 ],
+ [ 20, 10 ],
+ 15,
+ 16,
+ 17,
+ 23,
+ 22,
+ [ 22, 15 ],//Sentomaru
+ [ 22, 15 ],//Sentomaru
+ [ 19, 12 ],
+ [ 19, 12 ],
+ [ 23, 15 ],
+ [ 23, 15 ],
+ [ 20, 13 ],
+ [ 20, 13 ],
+ [ 22, 14 ],
+ [ 22, 14 ],
+ null,//Kizaru
+ null,//Kizaru
+ [ 19, 11 ],
+ [ 19, 11 ],
+ [ 20, 15 ],
+ [ 20, 15 ],
+ [ 23, 17 ],
+ [ 17, 17 ],
+ [ 17, 17 ],
+ [ 13, 13 ],
+ [ 13, 13 ],
+ null,//Colo Marco
+ null,//Colo Marco
+ [ 24, 14 ],
+ [ 14, 6 ],
+ [ 21, 14 ],
+ [ 19, 12 ],
+ [ 18, 12 ],
+ null,//Young Whitebeard
+ null,//Young Whitebeard
+ [ 17, 15 ],
+ [ 17, 15 ],
+ [ 12, 10 ],
+ [ 12, 10 ],
+ [ 13, 11 ],
+ [ 13, 11 ],
+ [ 14, 14 ],
+ [ 14, 14 ],
+ [ 25, 19 ],
+ [ 25, 19 ],
+ [ 14, 8 ],
+ [ 14, 8 ],
+ [ 19, 15 ],
+ [ 19, 15 ],
+ [ 25, 17 ],
+ [ 25, 17 ],
+ [ 25, 19 ],
+ [ 25, 19 ],
+ [ 10, 4 ],
+ [ 10, 4 ],
+ 14,
+ 21,
+ 25,
+ 19,
+ [ 25, 18 ],
+ [ 12, 12 ],
+ [ 12, 12 ],
+ [ 18, 10 ],
+ [ 18, 10 ],
+ [ 13, 9 ],
+ [ 13, 9 ],
+ [ 20, 10 ],
+ [ 29, 17 ],
+ [ 29, 17 ],
+ null,//Coliseumn Sandersonia
+ null,//Coliseumn Sandersonia
+ [ 16, 16 ],
+ [ 16, 16 ],
+ [ 32, 17 ],
+ [ 32, 17 ],
+ [ 19, 12 ],
+ [ 19, 12 ],
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 20, 12 ],
+ [ 20, 12 ],
+ [ 12, 5 ],
+ [ 12, 5 ],
+ [ 14, 14 ],
+ [ 14, 14 ],
+ [ 16, 5 ],
+ [ 16, 5 ],
+ [ 25, 15 ],
+ [ 25, 15 ],
+ [ 25, 18 ],
+ [ 25, 18 ],
+ null,//Coby
+ null,//Coby
+ 22,
+ 22,
+ [ 21, 17 ],
+ [ 21, 17 ],
+ [ 18, 12 ],
+ [ 18, 12 ],
+ [ 15, 9 ],
+ [ 15, 9 ],
+ [ 13, 6 ],
+ [ 13, 6 ],
+ null,//Leo
+ null,//Leo
+ null,//Wicca
+ [ 20, 12 ],
+ null,//Mansherry
+ null,//Mansherry
+ [ 20, 12 ],
+ [ 19, 12 ],
+ [ 6, 6 ],
+ [ 6, 6 ],
+ [ 27, 15 ],
+ [ 27, 15 ],
+ null,//Jump Point Chopper
+ [ 23, 13 ],
+ [ 23, 13 ],
+ 15,
+ 16,
+ 20,
+ 18,
+ 15,
+ 25,
+ [ 17, 10 ],
+ 13,
+ 14,
+ 20,
+ 15,
+ [ 16, 12 ],
+ [ 14, 14 ],
+ [ 14, 14 ],
+ [ 18, 10 ],
+ [ 18, 10 ],
+ [ 20, 13 ],
+ [ 20, 13 ],
+ [ 15, 15 ],
+ [ 20, 16 ],
+ [ 20, 16 ],
+ [ 21, 15 ],
+ [ 21, 15 ],
+ null,//New World Nami
+ null,//New World Nami
+ null,//New World Sanji
+ null,//New World Sanji
+ [ 12, 6 ],
+ [ 12, 6 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ null,//Magellan
+ null,//Magellan
+ [ 26, 12 ],
+ [ 26, 12 ],
+ [ 26, 14 ],
+ [ 26, 14 ],
+ [ 27, 15 ],
+ [ 27, 15 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ [ 14, 6 ],
+ [ 14, 6 ],
+ [ 12, 8 ],
+ [ 12, 8 ],
+ [ 23, 16 ],
+ [ 12, 7 ],
+ [ 21, 16 ],
+ [ 17, 12 ],
+ [ 17, 12 ],
+ 22,
+ 19,
+ [ 10, 10 ],
+ [ 10, 10 ],
+ [ 21, 14 ],
+ [ 21, 14 ],
+ [ 19, 14 ],
+ [ 19, 14 ],
+ null,//Colo Gladius
+ null,//Colo Gladius
+ null,//Colo Dalton
+ null,//New World Luffy
+ null,//New World Luffy
+ [ 20, 14 ],
+ [ 20, 14 ],
+ [ 22, 16 ],
+ [ 22, 16 ],
+ [ 16, 10 ],
+ [ 16, 10 ],
+ 25,
+ 25,
+ [ 25, 17 ],
+ [ 6, 6 ],
+ [ 20, 12 ],
+ [ 20, 12 ],
+ [ 21, 13 ],
+ [ 22, 15 ],
+ [ 15, 15 ],
+ [ 15, 15 ],
+ [ 33, 17 ],
+ [ 33, 17 ],
+ [ 26, 14 ],
+ [ 16, 7 ],
+ 20,
+ 20,
+ 18,
+ 12,
+ [ 14, 14 ],
+ [ 14, 14 ],
];
diff --git a/common/data/defenses.js b/common/data/defenses.js
index aea0396c1..1f261952d 100644
--- a/common/data/defenses.js
+++ b/common/data/defenses.js
@@ -45,10 +45,10 @@ window.defenses = [
[ 'Kuma (def up)' , 'Kuma Raid' , 'Master', 835, 1500 ],
[ 'Kuma' , 'Kuma Raid' , 'Ultimate', 836, 1000 ],
[ 'Kuma (def up)' , 'Kuma Raid' , 'Ultimate', 836, 2000 ],
- //[ 'Hancock' , 'Hancock Raid' , 'Expert', 835, 750 ],
- //[ 'Hancock (def up)' , 'Hancock Raid' , 'Expert', 835, 750 ],
- //[ 'Hancock' , 'Hancock Raid' , 'Master', 835, 1500 ],
- //[ 'Hancock (def up)' , 'Hancock Raid' , 'Master', 835, 1500 ],
+ //[ 'Hancock' , 'Hancock Raid' , 'Expert', 835, 750 ],
+ //[ 'Hancock (def up)' , 'Hancock Raid' , 'Expert', 835, 750 ],
+ //[ 'Hancock' , 'Hancock Raid' , 'Master', 835, 1500 ],
+ //[ 'Hancock (def up)' , 'Hancock Raid' , 'Master', 835, 1500 ],
[ 'Giantess' , 'Hancock Raid' , 'Ultimate', 375, 250 ],
[ 'Hancock' , 'Hancock Raid' , 'Ultimate', 865, 260 ],
[ 'Hancock (def up)' , 'Hancock Raid' , 'Ultimate', 865, 38850 ],
@@ -113,15 +113,15 @@ window.defenses = [
[ 'Manticore' , 'Sadi-chan Fortnight' , 'Expert', 552, 100 ],
[ 'Sadi-chan' , 'Sadi-chan Fortnight' , 'Expert', 550, 750 ],
[ 'DBF Usopp' , 'Afro Luffy Fortnight, mid round' , 'Expert', 572, 150 ],
- [ 'DBF Chopper' , 'Afro Luffy Fortnight' , 'Expert', 572, 70 ],
+ [ 'DBF Chopper' , 'Afro Luffy Fortnight' , 'Expert', 573, 70 ],
[ 'DBF Usopp' , 'Afro Luffy Fortnight, last round' , 'Expert', 572, 78 ],
[ 'Afro Luffy' , 'Afro Luffy Fortnight' , 'Expert', 571, 85 ],
[ 'Genbou' , 'Skypiea Warriors Fortnight' , 'Expert', 581, 100 ],
[ 'Kamakiri' , 'Skypiea Warriors Fortnight' , 'Expert', 582, 90 ],
[ 'Laki' , 'Skypiea Warriors Fortnight' , 'Expert', 583, 65 ],
- [ 'Young Buggy' , 'Young Pirates Fortnight' , 'Expert', 599, 80 ],
+ [ 'Young Buggy' , 'Young Pirates Fortnight' , 'Expert', 598, 80 ],
[ 'Young Shanks' , 'Young Pirates Fortnight' , 'Expert', 601, 100 ],
- [ 'Young Buggy' , 'Young Pirates Fortnight, last round' , 'Expert', 600, 100 ],
+ [ 'Young Buggy' , 'Young Pirates Fortnight, last round' , 'Expert', 599, 100 ],
[ 'Young Zeff' , 'Young Zeff Fortnight, 1st round' , 'Expert', 606, 250 ],
[ 'Young Patty' , 'Young Zeff Fortnight' , 'Expert', 608, 50 ],
[ 'Young Carne' , 'Young Zeff Fortnight' , 'Expert', 609, 50 ],
@@ -130,12 +130,12 @@ window.defenses = [
[ 'Keimi' , 'Keimi Fortnight' , 'Expert', 635, 100 ],
[ 'Keimi (def up)' , 'Keimi Fortnight' , 'Expert', 635, 1000 ],
[ 'Young Kuroobi' , 'Young Arlong Fortnight' , 'Expert', 657, 500 ],
- // [ 'Young Choo' , 'Expert', 657, ? ],
+ // [ 'Young Choo' , 'Expert', 657, ? ],
[ 'Young Arlong' , 'Young Arlong Fortnight' , 'Expert', 656, 400 ],
[ 'Young Kohza' , 'Suna Suna Clan Fortnight' , 'Expert', 665, 50 ],
[ 'Young Vivi' , 'Suna Suna Clan Fortnight, last round' , 'Expert', 664, 1100 ],
[ 'Young Kohza' , 'Suna Suna Clan Fortnight, last round' , 'Expert', 665, 50 ],
- // [ 'Cobra' , 'Fortnight' , 'Expert', 666, ? ],
+ // [ 'Cobra' , 'Fortnight' , 'Expert', 666, ? ],
[ 'Noland' , 'Noland Fortnight, mid round' , 'Expert', 689, 300 ],
[ 'Calgara' , 'Noland Fortnight, mid round' , 'Expert', 688, 300 ],
[ 'Noland (last round)' , 'Nolad Fortnight, last round' , 'Expert', 690, 350 ],
@@ -184,15 +184,15 @@ window.defenses = [
[ 'Mr. 3' , 'Mountaintop Banquet Fortnight' , 'Expert', 898, 150 ] ,
[ 'Crocodile' , 'Mountaintop Banquet Fortnight' , 'Expert', 897, 1000 ] ,
[ 'Crocodile (def up)' , 'Mountaintop Banquet Fortnight' , 'Expert', 897, 30000 ] ,
- /* * * * * Colosseum * * * * */
- [ 'Dr. Kureha' , 'Colosseum, 1st Hina Round' , 'Chaos' , 333, 20 ],
- [ 'Hotori and Kotori' , 'Colosseum, 2nd Hina Round' , 'Chaos' , 504, 250 ],
- [ 'Hamburg' , 'Colosseum, 3rd Hina Round' , 'Chaos' , 565, 200 ],
- [ 'Pickles' , 'Colosseum, 3rd Hina Round' , 'Chaos' , 566, 250 ],
- [ 'Big Pan' , 'Colosseum, 3rd Hina Round' , 'Chaos' , 567, 250 ],
- [ 'Pell' , 'Colosseum, 4th Hina Round' , 'Chaos' , 505, 150 ],
- [ 'Pell' , 'Colosseum, 5th Hina Round' , 'Chaos' , 505, 150 ],
- [ 'Hina' , 'Colosseum, 5th Hina Round' , 'Chaos' , 804, 150 ],
+ /* * * * * Coliseum * * * * */
+ [ 'Dr. Kureha' , 'Coliseum, 1st Hina Round' , 'Chaos' , 333, 20 ],
+ [ 'Hotori and Kotori' , 'Coliseum, 2nd Hina Round' , 'Chaos' , 504, 250 ],
+ [ 'Hamburg' , 'Coliseum, 3rd Hina Round' , 'Chaos' , 565, 200 ],
+ [ 'Pickles' , 'Coliseum, 3rd Hina Round' , 'Chaos' , 566, 250 ],
+ [ 'Big Pan' , 'Coliseum, 3rd Hina Round' , 'Chaos' , 567, 250 ],
+ [ 'Pell' , 'Coliseum, 4th Hina Round' , 'Chaos' , 505, 150 ],
+ [ 'Pell' , 'Coliseum, 5th Hina Round' , 'Chaos' , 505, 150 ],
+ [ 'Hina' , 'Coliseum, 5th Hina Round' , 'Chaos' , 804, 150 ],
/* * * * * Others * * * * */
[ 'Thatch' , 'Whitebeard\'s island, 11th round' , '', 448, 50 ],
[ 'Namur' , 'Whitebeard\'s island, 12th round' , '', 450, 500 ],
@@ -237,12 +237,12 @@ window.defenses = [
[ 'Garp' , 'Aokiji\'s island, 19th round' , '', 306, 500 ],
[ 'Sengoku' , 'Aokiji\'s island, 19th round' , '', 458, 1000 ],
[ 'Aokiji' , 'Aokiji\'s island, 20th round' , '', 575, 500 ],
- // Turtles
+ /* * * * * Turtles * * * * */
[ 'Baby Turtle' , '' , '', 109, 10000 ],
[ 'Adult Turtle' , '' , '', 114, 20000 ],
[ 'Elder Turtle' , '' , '', 193, 100000 ],
[ 'Princess Turtle' , '' , '', 595, 500000 ],
- // Evolvers
+ /* * * * * Evolvers * * * * */
[ 'Hermit Crab' , '' , '', 93, 2000 ],
[ 'Armored Crab' , '' , '', 99, 10000 ],
[ 'Plated Lobster' , '' , '', 304, 100000 ]
diff --git a/common/data/details.js b/common/data/details.js
index 2be75457f..97d8bc823 100644
--- a/common/data/details.js
+++ b/common/data/details.js
@@ -1,4260 +1,7727 @@
window.details = {
- 1: {
- special: "Deals 5x character's ATK in STR damage to one enemy",
- specialName: "Spinning Gum Punch"
- },
- 2: {
- special: "Deals 7x character's ATK in STR damage to one enemy",
- specialName: "Gum-Gum Pistol",
- captain: "Boosts ATK of STR characters by 1.5x"
- },
- 3: {
- special: "Deals 15x character's ATK in STR damage to one enemy",
- specialName: "Gum-Gum Bazooka",
- captain: "Boosts ATK of STR characters by 1.5x"
- },
- 4: {
- special: "Deals 25x character's ATK in STR damage to one enemy",
- specialName: "Gum-Gum Twin Jet Pistol",
- captain: "Boosts ATK of STR characters by 2x"
- },
- 5: {
- special: "Deals 7x character's ATK in DEX damage to one enemy",
- specialName: "Oni Giri",
- captain: "Boosts ATK of DEX characters by 1.5x"
- },
- 6: {
- special: "Deals 10x character's ATK in DEX damage to all enemies",
- specialName: "Three Thousand Worlds",
- captain: "Boosts ATK of DEX characters by 1.5x"
- },
- 7: {
- special: "Deals 10x character's ATK in DEX damage to all enemies",
- specialName: "108 Pound Phoenix",
- captain: "Boosts ATK of DEX characters by 1.5x"
- },
- 8: {
- special: "Deals 15x character's ATK in DEX damage to all enemies",
- specialName: "Ashura Ichibugin",
- captain: "Boosts ATK and HP of DEX characters by 2x"
- },
- 9: {
- special: "Recovers 1,000 HP",
- specialName: "Cat Burglar",
- captain: "Reduces damage received from INT enemies by 20%"
- },
- 10: {
- special: "Deals 15x character's ATK in INT damage to one enemy",
- specialName: "Tornado Tempo",
- captain: "Boosts ATK of INT characters by 1.5x"
- },
- 11: {
- special: "Reduces damage received from INT enemies by 100% for 1 turn",
- specialName: "Mirage Tempo",
- captain: "Boosts ATK of INT characters by 1.5x"
- },
- 12: {
- special: "Deals 15x character's ATK in INT damage to all enemies",
- specialName: "Thunderbolt Tempo",
- captain: "Boosts ATK and HP of INT characters by 1.5x"
- },
- 13: {
- special: "Delays all enemies for 1 turn",
- specialName: "Liar",
- captain: "Boosts ATK of Shooter characters by 1.2x"
- },
- 14: {
- special: "Delays all enemies for 2 turns",
- specialName: "Tabasco Star",
- captain: "Boosts ATK of PSY characters by 1.5x"
- },
- 15: {
- special: "Delays all enemies for 3 turns",
- specialName: "Usopp Golden Pound",
- captain: "Boosts ATK of PSY characters by 1.5x"
- },
- 16: {
- special: "Delays all enemies for 3 turns, deals 15x character's ATK in PSY damage to all enemies",
- specialName: "Fire Bird Star",
- captain: "Boosts ATK and HP of PSY characters by 1.5x"
- },
- 17: {
- special: "Recovers 10x character's RCV in HP",
- specialName: "Special Fried Rice",
- captain: "Boosts ATK of QCK characters by 1.5x"
- },
- 18: {
- special: "Reduces the defense of all enemies by 50% for 2 turns",
- specialName: "Plastic Surgery Shot",
- captain: "Boosts HP of QCK characters by 1.5x"
- },
- 19: {
- special: "Recovers 10x character's RCV in HP",
- specialName: "Hot Rock Stew",
- captain: "Boosts ATK of QCK characters by 1.5x"
- },
- 20: {
- special: "Deals 5,000 fixed damage to all enemies",
- specialName: "Diable Jambe",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK and HP of QCK characters by 1.5x"
- },
- 21: {
- special: "Changes adjacent orbs into [RCV] orbs",
- specialName: "Hearty Yell",
- captain: "Boosts RCV of PSY characters by 1.2x"
- },
- 22: {
- special: "Deals 15x character's ATK in PSY damage to one enemy",
- specialName: "Heavy Gong",
- captain: "Boosts RCV of PSY characters by 1.5x"
- },
- 23: {
- special: "Changes adjacent orbs into [RCV] orbs",
- specialName: "Scope",
- captain: "Boosts RCV of INT characters by 1.5x"
- },
- 24: {
- special: "Reduces the defense of all enemies by 50% for 2 turns",
- specialName: "Hoofprint Roseo",
- captain: "Boosts RCV of STR characters by 1.5x"
- },
- 25: {
- special: "Deals 7x character's ATK in QCK damage to all enemies",
- specialName: "Horn Point Roseo Colonnade",
- captain: "Boosts RCV of QCK characters by 1.5x"
- },
- 26: {
- special: "Reduces damage received by 50% for 3 turns",
- specialName: "Guard Point",
- captain: "Boosts RCV of DEX characters by 1.5x"
- },
- 27: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Slash",
- captain: "Boosts HP of QCK characters by 1.2x"
- },
- 28: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Straight",
- captain: "Boosts ATK of Fighter characters by 1.2x"
- },
- 29: {
- special: "Deals 7x character's ATK in STR damage to one enemy",
- specialName: "Iron Mace Beauty",
- captain: "Reduces damage received from STR enemies by 30%"
- },
- 30: {
- special: "Reduces damage received by 80% for 1 turn",
- specialName: "Slip-Slip Tracks",
- captain: "Reduces damage received from STR enemies by 50%"
- },
- 31: {
- captain: "Recovers 2x character's RCV in HP at the end of each turn"
- },
- 32: {
- special: "Changes [RCV] orbs into [TND] orbs",
- specialName: "Shooting Spree",
- captain: "Recovers 2x character's RCV in HP at the end of each turn"
- },
- 33: {
- captain: "Reduces damage received from INT enemies by 30%"
- },
- 34: {
- special: "Reduces the defense of all enemies by 100% for 1 turn",
- specialName: "Straw Doll Of Resentment",
- captain: "Reduces damage received from INT enemies by 30%"
- },
- 35: {
- special: "Deals 5x character's ATK in STR damage to one enemy",
- specialName: "Execution Axe-Hand",
- captain: "Boosts HP of Slasher characters by 1.2x"
- },
- 36: {
- special: "Deals 5x character's ATK in PSY damage to one enemy",
- specialName: "Fierce Bite",
- captain: "Boosts ATK of PSY characters by 1.5x"
- },
- 37: {
- special: "Deals 5x character's ATK in DEX damage to one enemy",
- specialName: "The Dance Of A Hundred Kamikaze Tops",
- captain: "Boosts ATK of DEX characters by 1.5x"
- },
- 38: {
- special: "Changes [RCV] orbs into [INT] orbs",
- specialName: "Chop-Chop Festival",
- captain: "Boosts ATK of INT characters by 1.5x"
- },
- 39: {
- special: "Changes [RCV] orbs into [INT] orbs",
- specialName: "Chop-Chop Festival",
- captain: "Boosts ATK of INT characters by 2x"
- },
- 40: {
- special: "Changes adjacent orbs into [RCV] orbs",
- specialName: "[RCV] Slot Storm",
- captain: "Reduces damage received from Shooter enemies by 30%"
- },
- 41: {
- special: "Changes [RCV] orbs into [INT] orbs",
- specialName: "Cat Snatch",
- captain: "Boosts RCV of INT characters by 1.2x"
- },
- 42: {
- special: "Deals 3x character's ATK in STR damage to all enemies",
- specialName: "Cat-A-Pult Cat-Astrophe",
- captain: "Boosts ATK of STR characters by 1.2x"
- },
- 43: {
- special: "Changes [RCV] orbs into [DEX] orbs",
- specialName: "One, Two, Django",
- captain: "Reduces damage received by 10%"
- },
- 44: {
- special: "Changes [RCV] orbs into [DEX] orbs",
- specialName: "Dance Heaven",
- captain: "Reduces damage received by 10%"
- },
- 45: {
- special: "Deals 5x character's ATK in QCK damage to all enemies",
- specialName: "Death Scoop",
- captain: "Boosts ATK of QCK characters by 1.2x"
- },
- 46: {
- special: "Deals 5x character's ATK in QCK damage to all enemies",
- specialName: "Death Scoop",
- captain: "Boosts ATK of QCK characters by 1.5x"
- },
- 47: {
- special: "Changes [TND] orbs into [RCV] orbs",
- specialName: "[TND] Slot Change [RCV]"
- },
- 48: {
- special: "Changes adjacent orbs into [RCV] orbs",
- specialName: "[RCV] Slot Storm"
- },
- 49: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Straight",
- captain: "Boosts ATK of STR characters by 1.5x"
- },
- 50: {
- special: "Deals 5x character's ATK in STR damage to one enemy",
- specialName: "The Meatball Of Doom",
- captain: "Recovers 4x character's RCV in HP at the end of each turn"
- },
- 51: {
- captain: "Recovers 3x character's RCV in HP at the end of each turn"
- },
- 52: {
- special: "Changes [STR] orbs into [DEX] orbs",
- specialName: "Chef Drop",
- captain: "Boosts ATK of Fighter characters by 2.5x"
- },
- 53: {
- captain: "Reduces damage received from QCK enemies by 30%"
- },
- 54: {
- special: "Deals 7x character's ATK in QCK damage to one enemy",
- specialName: "Demonic Dance",
- captain: "Reduces damage received from QCK enemies by 50%"
- },
- 55: {
- captain: "Reduces damage received from STR enemies by 30%"
- },
- 56: {
- special: "Changes [RCV] orbs into [STR] orbs",
- specialName: "Fire Pearl Privilege",
- captain: "Reduces damage received from STR enemies by 50%"
- },
- 57: {
- special: "Deals 7x character's ATK in INT damage to one enemy",
- specialName: "Chain Hammer",
- captain: "Reduces damage received by 10%"
- },
- 58: {
- special: "Poisons all enemies",
- specialNotes: "#{poison}",
- specialName: "MH5",
- captain: "Reduces damage received by 20%"
- },
- 59: {
- special: "Changes [PSY] orbs into [INT] orbs",
- specialName: "[PSY] Slot Change [INT]",
- captain: "Boosts ATK of INT characters by 1.2x"
- },
- 60: {
- special: "Changes [TND] orbs into [STR] orbs",
- specialName: "[TND] Slot Change [STR]",
- captain: "Boosts ATK of STR characters by 1.5x"
- },
- 61: {
- special: "Deals 5x character's ATK in INT damage to all enemies",
- specialName: "Lip-O-Cannon",
- captain: "Boosts HP of Shooter characters by 1.5x"
- },
- 62: {
- special: "Deals 7x character's ATK in STR damage to one enemy",
- specialName: "Guffaw Palm Bomb",
- captain: "Boosts HP of Fighter characters by 1.5x"
- },
- 63: {
- captain: "Reduces damage received from DEX enemies by 30%"
- },
- 64: {
- special: "Deals 10x character's ATK in DEX damage to all enemies",
- specialName: "New Year's Open Body Slam",
- captain: "Reduces damage received from DEX enemies by 50%"
- },
- 65: {
- special: "Deals 7x character's ATK in STR damage to one enemy",
- specialName: "Shark On Darts",
- captain: "Boosts ATK of Slasher characters by 2x"
- },
- 66: {
- special: "Deals 15x character's ATK in STR damage to one enemy",
- specialName: "Shark On Tooth",
- captain: "Boosts ATK of Slasher characters by 2x"
- },
- 67: {
- special: "Deals 25x character's ATK in QCK damage to one enemy",
- specialName: "Quick Draw",
- captain: "Boosts RCV of Slasher characters by 1.5x"
- },
- 68: {
- special: "Deals 25x character's ATK in QCK damage to one enemy",
- specialName: "Quick Draw",
- captain: "Boosts RCV of Slasher characters by 2x"
- },
- 69: {
- special: "Reduces damage received by 50% for 3 turns",
- specialName: "White Out",
- captain: "Reduces damage received by 20%"
- },
- 70: {
- special: "Reduces damage received by 50% for 3 turns",
- specialName: "White Out",
- captain: "Reduces damage received by 20%"
- },
- 71: {
- special: "Reduces damage received by 50% for 1 turn",
- specialName: "Enchanting Vertigo Dance",
- captain: "Recovers 2x character's RCV in HP at the end of each turn"
- },
- 72: {
- special: "Randomizes all orbs",
- specialName: "Charge! Supersonic Duck Squadron!",
- captain: "Recovers 3x character's RCV in HP at the end of each turn"
- },
- 73: {
- special: "Randomizes all orbs",
- specialName: "Charge! Supersonic Duck Squadron!",
- captain: "Recovers 5x character's RCV in HP at the end of each turn"
- },
- 74: {
- special: "Deals 25x character's ATK in QCK damage to one enemy",
- specialName: "Flame Fist",
- captain: "Boosts ATK of QCK characters by 2x"
- },
- 75: {
- special: "Deals 15x character's ATK in QCK to all enemies",
- specialName: "Flame Mirror",
- captain: "Boosts ATK of QCK characters by 2.5x"
- },
- 76: {
- special: "Deals 15x character's ATK in PSY damage to all enemies",
- specialName: "Conqueror's Haki",
- captain: "Boosts ATK of PSY characters by 2x"
- },
- 77: {
- special: "Deals 15x character's ATK in PSY damage to all enemies",
- specialName: "Conqueror's Haki",
- captain: "Boosts ATK of PSY characters by 2.5x"
- },
- 119: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Slash"
- },
- 120: {
- special: "Deals 5x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Shot"
- },
- 121: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Straight"
- },
- 122: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 123: {
- special: "Changes [STR] orbs into [DEX] orbs",
- specialName: "[STR] Slot Change [DEX]"
- },
- 124: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 125: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Straight"
- },
- 126: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Slash"
- },
- 127: {
- special: "Reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Shield Crusher"
- },
- 128: {
- special: "Changes [QCK] orbs into [DEX] orbs",
- specialName: "[QCK] Slot Change [DEX]"
- },
- 129: {
- special: "Changes [INT] orbs into [PSY] orbs",
- specialName: "[INT] Slot Change [PSY]"
- },
- 130: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Slash"
- },
- 131: {
- special: "Changes [RCV] orbs into [STR] orbs",
- specialName: "[RCV] Slot Change [STR]"
- },
- 132: {
- special: "Changes [DEX] orbs into [QCK] orbs",
- specialName: "[DEX] Slot Change [QCK]"
- },
- 133: {
- special: "Changes [QCK] orbs into [DEX] orbs",
- specialName: "[QCK] Slot Change [DEX]"
- },
- 134: {
- special: "Changes [QCK] orbs into [RCV] orbs",
- specialName: "[QCK] Slot Change [RCV]"
- },
- 135: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Spiral"
- },
- 136: {
- special: "Deals 5x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Shot"
- },
- 137: {
- special: "Reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Shield Crusher"
- },
- 138: {
- special: "Changes [DEX] orbs into [RCV] orbs",
- specialName: "[DEX] Slot Change [RCV]"
- },
- 139: {
- special: "Changes [PSY] orbs into [RCV] orbs",
- specialName: "[PSY] Slot Change [RCV]"
- },
- 140: {
- special: "Deals 5x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Shot"
- },
- 141: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 142: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Straight"
- },
- 143: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 144: {
- special: "Changes [STR] orbs into [DEX] orbs",
- specialName: "[STR] Slot Change [DEX]"
- },
- 145: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 146: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Straight"
- },
- 147: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Slash"
- },
- 148: {
- special: "Reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Shield Crusher"
- },
- 149: {
- special: "Changes [QCK] orbs into [DEX] orbs",
- specialName: "[QCK] Slot Change [DEX]"
- },
- 150: {
- special: "Changes [INT] orbs into [PSY] orbs",
- specialName: "[INT] Slot Change [PSY]"
- },
- 151: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Slash"
- },
- 152: {
- special: "Changes [RCV] orbs into [STR] orbs",
- specialName: "[RCV] Slot Change [STR]"
- },
- 153: {
- special: "Changes [DEX] orbs into [QCK] orbs",
- specialName: "[DEX] Slot Change [QCK]"
- },
- 154: {
- special: "Changes [QCK] orbs into [DEX] orbs",
- specialName: "[QCK] Slot Change [DEX]"
- },
- 155: {
- special: "Changes [QCK] orbs into [RCV] orbs",
- specialName: "[QCK] Slot Change [RCV]"
- },
- 156: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Spiral"
- },
- 157: {
- special: "Deals 5x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Shot"
- },
- 158: {
- special: "Reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Shield Crusher"
- },
- 159: {
- special: "Changes [DEX] orbs into [RCV] orbs",
- specialName: "[DEX] Slot Change [RCV]"
- },
- 160: {
- special: "Changes [PSY] orbs into [RCV] orbs",
- specialName: "[PSY] Slot Change [RCV]"
- },
- 161: {
- special: "Deals 5x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Shot"
- },
- 162: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 163: {
- special: "Changes [DEX] orbs into [TND] orbs",
- specialName: "[DEX] Slot Change [TND]"
- },
- 164: {
- special: "Changes [QCK] orbs into [TND] orbs",
- specialName: "[QCK] Slot Change [TND]"
- },
- 165: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 166: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 167: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 168: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 169: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 170: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 171: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 172: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 173: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 174: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 175: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Straight"
- },
- 176: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Slash"
- },
- 177: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Spiral"
- },
- 178: {
- special: "Deals 5x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Shot"
- },
- 179: {
- special: "Changes [QCK] orbs into [STR] orbs",
- specialName: "[QCK] Slot Change [STR]"
- },
- 180: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 181: {
- special: "Changes [STR] orbs into [QCK] orbs",
- specialName: "[STR] Slot Change [QCK]"
- },
- 182: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 183: {
- special: "Changes [RCV] orbs into [INT] orbs",
- specialName: "[RCV] Slot Change [INT]"
- },
- 184: {
- special: "Changes [QCK] orbs into [STR] orbs",
- specialName: "[QCK] Slot Change [STR]"
- },
- 185: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 186: {
- special: "Changes [STR] orbs into [QCK] orbs",
- specialName: "[STR] Slot Change [QCK]"
- },
- 187: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 188: {
- special: "Changes [RCV] orbs into [INT] orbs",
- specialName: "[RCV] Slot Change [INT]"
- },
- 194: {
- special: "Changes [QCK] orbs into [STR] orbs",
- specialName: "[QCK] Slot Change [STR]",
- captain: "Boosts ATK of STR characters by 1.5x"
- },
- 195: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing",
- captain: "Boosts RCV of DEX characters by 1.5x"
- },
- 196: {
- special: "Changes [STR] orbs into [QCK] orbs",
- specialName: "[STR] Slot Change [QCK]",
- captain: "Boosts ATK of QCK characters by 1.5x"
- },
- 197: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing",
- captain: "Reduces damage received from PSY enemies by 20%"
- },
- 198: {
- special: "Changes [RCV] orbs into [INT] orbs",
- specialName: "[RCV] Slot Change [INT]",
- captain: "Boosts ATK of Shooter characters by 1.5x"
- },
- 199: {
- special: "Deals 15x character's ATK in STR damage to one enemy",
- specialName: "Nez-Palm Cannon",
- captain: "Boosts ATK of STR characters by 1.5x"
- },
- 200: {
- special: "Deals 20x character's ATK in STR damage to one enemy",
- specialName: "Breeze Breath Bomb",
- captain: "Boosts ATK of STR characters by 2x"
- },
- 201: {
- captain: "Boosts HP of Fighter characters by 1.5x"
- },
- 202: {
- special: "Changes [RCV] orbs into [QCK] orbs",
- specialName: "10,000 Kill-O-Guillotine",
- captain: "Boosts HP of Fighter characters by 2x"
- },
- 203: {
- captain: "Reduces damage received from INT enemies by 10%"
- },
- 204: {
- special: "Delays all enemies for 1 turn",
- specialName: "Extra Special Candelabra",
- captain: "Reduces damage received from INT enemies by 10%"
- },
- 205: {
- captain: "Boosts HP and RCV of DEX characters by 1.2x"
- },
- 206: {
- special: "Reduces the defense of all enemies by 50% for 2 turns",
- specialName: "Colors Trap: Calming Green",
- captain: "Boosts HP and RCV of DEX characters by 1.2x"
- },
- 207: {
- captain: "Reduces damage received from PSY enemies by 10%"
- },
- 208: {
- special: "Changes [RCV] orbs into [PSY] orbs",
- specialName: "Bombardier Arabesque",
- captain: "Reduces damage received from PSY enemies by 20%"
- },
- 209: {
- special: "Boosts ATK of INT characters by 1.5x for 1 turn",
- specialName: "Dieciseis Fleur",
- captain: "Boosts RCV of INT characters by 1.5x"
- },
- 210: {
- special: "Boosts ATK of INT characters by 2x for 1 turn",
- specialName: "Cien Fleur",
- captain: "Boosts RCV of INT characters by 2x"
- },
- 211: {
- captain: "Boosts ATK of Striker characters by 1.2x"
- },
- 212: {
- special: "Deals 5x character's ATK in QCK damage to one enemy",
- specialName: "Hot Blooded Bat",
- captain: "Boosts ATK of Striker characters by 1.5x"
- },
- 213: {
- special: "Deals 20x character's ATK in STR damage to all enemies",
- specialName: "Sorrowful Charge",
- captain: "Protects from defeat as long as HP is above 50%",
- captainNotes: "#{zombie}"
- },
- 214: {
- special: "Deals 20x character's ATK in STR damage to all enemies",
- specialName: "Sorrowful Charge",
- captain: "Protects from defeat as long as HP is above 50%",
- captainNotes: "#{zombie}"
- },
- 215: {
- special: "Poisons all enemies",
- specialNotes: "#{poison}",
- specialName: "Poison Ink",
- captain: "Boosts HP of Striker characters by 1.5x"
- },
- 216: {
- special: "Reduces damage received by 50% for 3 turns",
- specialName: "Gum-Gum Balloon",
- captain: "Reduces damage received by 20%"
- },
- 217: {
- special: "Deals 15x character's ATK in STR damage to all enemies",
- specialName: "Gum-Gum Giant Rifle",
- captain: "Boosts ATK by 3.5x after scoring 3 Perfects in a row"
- },
- 218: {
- special: "Reduces damage received from STR enemies by 100% for 1 turn",
- specialName: "Streaming Wolf Swords",
- captain: "Reduces damage received by 80% if HP is above 99% at the start of the turn"
- },
- 219: {
- special: "Deals 25x character's ATK in DEX damage to one enemy",
- specialName: "Lion's Song",
- captain: "Reduces damage received by 80% if HP is above 99% at the start of the turn"
- },
- 220: {
- special: "Changes [PSY] orbs into [INT] orbs",
- specialName: "Fine Tempo",
- captain: "Boosts ATK of INT characters by 2x"
- },
- 221: {
- special: "Changes [PSY] orbs into [INT] orbs",
- specialName: "Happiness Punch",
- captain: "Boosts ATK of INT characters by 2.5x"
- },
- 222: {
- special: "Boosts ATK of PSY characters by 1.5x for 1 turn",
- specialName: "Usopp Hammer",
- captain: "Boosts ATK of PSY characters by 1.2x"
- },
- 223: {
- special: "Boosts ATK of PSY characters by 2x for 1 turn",
- specialName: "Impact",
- captain: "Boosts ATK of PSY characters by 1.5x"
- },
- 224: {
- special: "Deals 15x character's ATK in QCK damage to one enemy",
- specialName: "Mutton Shot",
- captain: "Boosts ATK by 2x after scoring 2 Perfects in a row"
- },
- 225: {
- special: "Deals 20x character's ATK in QCK damage to one enemy",
- specialName: "Veau Shot",
- captain: "Boosts ATK by 2.5x after scoring 2 Perfects in a row"
- },
- 226: {
- special: "Cuts the current HP of each enemy by 30%",
- specialName: "Black Blade Ship Cutter",
- captain: "Boosts ATK of Slasher characters by 2x"
- },
- 227: {
- special: "Cuts the current HP of each enemy by 30%",
- specialName: "Black Blade Ship Cutter",
- captain: "Boosts ATK of Slasher characters by 2.5x"
- },
- 228: {
- special: "Reduces Bind duration by 2 turns",
- specialName: "Escapee Axe-Hand",
- captain: "Boosts HP of Slasher characters by 1.5x"
- },
- 229: {
- special: "Changes [INT] orbs into [PSY] orbs",
- specialName: "Double Cross Dance",
- captain: "Reduces damage received by 10%"
- },
- 230: {
- special: "Deals 200 fixed damage to one enemy",
- specialName: "Double Hyper Straight",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK of STR characters by 1.5x"
- },
- 231: {
- special: "Locks all orbs for 1 turn",
- specialName: "Kimono Sleeve Cage",
- captain: "Boosts ATK of QCK characters by 2x"
- },
- 232: {
- special: "Locks all orbs for 1 turn",
- specialName: "Kimono Sleeve Cage",
- captain: "Boosts ATK of QCK characters by 2x"
- },
- 233: {
- captain: "Boosts HP of PSY characters by 1.5x"
- },
- 234: {
- special: "Deals 5x character's ATK in PSY damage to all enemies",
- specialName: "Igarappapa",
- captain: "Boosts HP of PSY characters by 2x"
- },
- 235: {
- captain: "Boosts ATK of Fighter characters by 1.2x"
- },
- 236: {
- special: "Deals 20x character's ATK in STR damage to one enemy",
- specialName: "Superhuman Brass Knuckles",
- captain: "Boosts ATK of Fighter characters by 1.5x"
- },
- 237: {
- special: "Changes [DEX] orbs into [STR] orbs",
- specialName: "[DEX] Slot Change [STR]"
- },
- 238: {
- special: "Changes [TND] orbs into [DEX] orbs",
- specialName: "[TND] Slot Change [DEX]"
- },
- 239: {
- special: "Changes [TND] orbs into [QCK] orbs",
- specialName: "[TND] Slot Change [QCK]"
- },
- 240: {
- special: "Changes [STR] orbs into [PSY] orbs",
- specialName: "[STR] Slot Change [PSY]"
- },
- 241: {
- special: "Changes [QCK] orbs into [INT] orbs",
- specialName: "[QCK] Slot Change [INT]"
- },
- 242: {
- special: "Changes [DEX] orbs into [STR] orbs",
- specialName: "[DEX] Slot Change [STR]"
- },
- 243: {
- special: "Changes [TND] orbs into [DEX] orbs",
- specialName: "[TND] Slot Change [DEX]"
- },
- 244: {
- special: "Changes [TND] orbs into [QCK] orbs",
- specialName: "[TND] Slot Change [QCK]"
- },
- 245: {
- special: "Changes [STR] orbs into [PSY] orbs",
- specialName: "[STR] Slot Change [PSY]"
- },
- 246: {
- special: "Changes [QCK] orbs into [INT] orbs",
- specialName: "[QCK] Slot Change [INT]"
- },
- 247: {
- special: "Recovers 1,224 HP",
- specialName: "Kyuun Spark",
- captain: "Reduces damage received by 10%"
- },
- 248: {
- special: "Deals random STR damage to one enemy",
- specialName: "Rampage",
- specialNotes: "#{random : 2,000 : 200,000}",
- captain: "Boosts ATK of STR characters by 2.5x and reduces their HP by 60%"
- },
- 249: {
- special: "Deals random STR damage to one enemy",
- specialName: "Rampage",
- specialNotes: "#{random : 2,000 : 200,000}",
- captain: "Boosts ATK of STR characters by 3x and reduces their HP by 60%"
- },
- 250: {
- special: "Recovers all HP",
- specialName: "Blue Flame Rebirth",
- captain: "Boosts ATK of PSY characters by 3x if HP is above 99% at the start of the turn"
- },
- 251: {
- special: "Recovers all HP",
- specialName: "Blue Flame Rebirth",
- captain: "Boosts ATK of PSY characters by 3x if HP is above 99% at the start of the turn"
- },
- 252: {
- special: "Reduces damage received from DEX enemies by 100% for 1 turn",
- specialName: "Brilliant Punk",
- captain: "Boosts ATK and HP of QCK characters by 2x"
- },
- 253: {
- special: "Reduces damage received from DEX enemies by 100% for 1 turn",
- specialName: "Brilliant Punk",
- captain: "Boosts ATK and HP of QCK characters by 2x"
- },
- 254: {
- special: "Deals 5,000 fixed damage to all enemies",
- specialName: "Rose Rondo",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK and HP of INT characters by 2x"
- },
- 255: {
- special: "Deals 5,000 fixed damage to all enemies",
- specialName: "Rose Rondo",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK and HP of INT characters by 2x"
- },
- 256: {
- special: "Changes [STR] and [QCK] orbs into [DEX] orbs",
- specialName: "Beautiful Dual Flintlocks",
- captain: "Boosts ATK and RCV of DEX characters by 2x"
- },
- 257: {
- special: "Changes [STR] and [QCK] orbs into [DEX] orbs",
- specialName: "Beautiful Dual Flintlocks",
- captain: "Boosts ATK and RCV of DEX characters by 2x"
- },
- 258: {
- special: "Changes [DEX] and [QCK] orbs into [STR] orbs",
- specialName: "Pocket Mallet",
- captain: "Boosts ATK and RCV of STR characters by 2x"
- },
- 259: {
- special: "Changes [DEX] and [QCK] orbs into [STR] orbs",
- specialName: "Pocket Mallet",
- captain: "Boosts ATK and RCV of STR characters by 2x"
- },
- 260: {
- special: "Cuts the current HP of each enemy by 30%",
- specialName: "Seaquake",
- captain: "Boosts ATK of all characters by 3x if HP is below 30% at the start of the turn"
- },
- 261: {
- special: "Cuts the current HP of each enemy by 30%",
- specialName: "Seaquake",
- captain: "Boosts ATK of all characters by 3x if HP is below 30% at the start of the turn"
- },
- 262: {
- captain: "Recovers 2x character's RCV in HP at the end of each turn"
- },
- 263: {
- special: "Amplifies the effect of orbs by 1.5x for 2 turns",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Shave",
- captain: "Boosts ATK of Fighter characters by 2x"
- },
- 264: {
- captain: "Reduces damage received from INT enemies by 30%"
- },
- 265: {
- special: "Reduces Bind duration by 3 turns",
- specialName: "Tempered Kukris",
- captain: "Boosts ATK and HP of Slasher characters by 1.5x"
- },
- 267: {
- special: "Reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Shield Crusher",
- captain: "Boosts ATK of all characters by 1.5x"
- },
- 268: {
- special: "Reduces damage received by 50% for 3 turns",
- specialName: "White Out",
- captain: "Reduces damage received by 25%"
- },
- 269: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Straight"
- },
- 270: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 271: {
- special: "Changes [STR] orbs into [DEX] orbs",
- specialName: "[STR] Slot Change [DEX]"
- },
- 272: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 273: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Straight"
- },
- 274: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Slash"
- },
- 275: {
- special: "Reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Shield Crusher"
- },
- 276: {
- special: "Changes [QCK] orbs into [DEX] orbs",
- specialName: "[QCK] Slot Change [DEX]"
- },
- 277: {
- special: "Changes [INT] orbs into [PSY] orbs",
- specialName: "[INT] Slot Change [PSY]"
- },
- 278: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Slash"
- },
- 279: {
- special: "Changes [RCV] orbs into [STR] orbs",
- specialName: "[RCV] Slot Change [STR]"
- },
- 280: {
- special: "Changes [DEX] orbs into [QCK] orbs",
- specialName: "[DEX] Slot Change [QCK]"
- },
- 281: {
- special: "Changes [QCK] orbs into [DEX] orbs",
- specialName: "[QCK] Slot Change [DEX]"
- },
- 282: {
- special: "Changes [QCK] orbs into [RCV] orbs",
- specialName: "[QCK] Slot Change [RCV]"
- },
- 283: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Spiral"
- },
- 284: {
- special: "Deals 5x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Shot"
- },
- 285: {
- special: "Reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Shield Crusher"
- },
- 286: {
- special: "Changes [DEX] orbs into [RCV] orbs",
- specialName: "[DEX] Slot Change [RCV]"
- },
- 287: {
- special: "Changes [PSY] orbs into [RCV] orbs",
- specialName: "[PSY] Slot Change [RCV]"
- },
- 288: {
- special: "Deals 5x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Shot"
- },
- 289: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 290: {
- special: "Deals 25x character's ATK in INT damage to one enemy",
- specialName: "Judgment Bomb",
- captain: "Boosts ATK of Shooter characters by 1.5x"
- },
- 291: {
- special: "Changes adjacent orbs into [RCV] orbs",
- specialName: "[RCV] Slot Storm",
- captain: "Reduces damage received from INT enemies by 50%"
- },
- 292: {
- special: "Changes adjacent orbs into [RCV] orbs",
- specialName: "[RCV] Slot Storm",
- captain: "Reduces damage received from PSY enemies by 50%"
- },
- 293: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield",
- captain: "Boosts HP of QCK characters by 2x"
- },
- 294: {
- special: "Deals 10x character's ATK in character's type damage to one enemy",
- specialName: "Hyper Straight",
- captain: "Boosts HP of STR characters by 2x"
- },
- 295: {
- special: "Reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Shield Crusher",
- captain: "Boosts HP of DEX characters by 2x"
- },
- 296: {
- special: "Recovers 2,000 HP, randomizes all orbs",
- specialName: "Cleansing Wash",
- captain: "Boosts ATK of Shooter characters by 2x"
- },
- 297: {
- special: "Recovers 2,000 HP, randomizes all orbs",
- specialName: "Cleansing Wash",
- captain: "Boosts ATK of Shooter characters by 2x"
- },
- 298: {
- special: "Deals 25x character's ATK in PSY damage to one enemy",
- specialName: "Moonwalk",
- captain: "Boosts HP of PSY characters by 2x"
- },
- 299: {
- special: "Cuts the current HP of each enemy by 10%",
- specialName: "8-Sword Style Onigumo",
- captain: "Boosts ATK of DEX characters by 2x"
- },
- 305: {
- special: "Randomly changes all orbs into either [PSY] or [RCV] orbs",
- specialName: "Meteor Fist Shower",
- captain: "Boosts ATK and HP of PSY characters by 1.5x"
- },
- 306: {
- special: "Randomly changes all orbs into either [PSY] or [RCV] orbs",
- specialName: "Meteor Fist Shower",
- captain: "Boosts ATK and HP of PSY characters by 2x"
- },
- 307: {
- special: "Randomly changes all orbs other than [DEX] into either [DEX], [RCV] or [TND] orbs",
- specialName: "ROOM – Chambres",
- captain: "Boosts ATK of DEX characters by 2.5x"
- },
- 308: {
- special: "Randomly changes all orbs other than [DEX] into either [DEX], [RCV] or [TND] orbs",
- specialName: "ROOM – Chambres",
- captain: "Boosts ATK of DEX characters by 2.5x"
- },
- 309: {
- special: "Cuts the current HP of each enemy by 10%, reduces the defense of all enemies by 50% for 3 turns",
- specialName: "Demon Face",
- captain: "Reduces RCV of all characters by 90%, reduces damage received by 40%"
- },
- 310: {
- special: "Cuts the current HP of each enemy by 10%, reduces the defense of all enemies by 50% for 3 turns",
- specialName: "Demon Face",
- captain: "Reduces RCV of all characters by 90%, reduces damage received by 40%"
- },
- 311: {
- special: "Deals 100x character's ATK in fixed damage to one enemy, reduces crew's HP to 1",
- specialName: "Massacre Soldier",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK by 3.5x after scoring 3 hits below Good in a row"
- },
- 312: {
- special: "Deals 100x character's ATK in fixed damage to one enemy, reduces crew's HP to 1",
- specialName: "Massacre Soldier",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK by 3.5x after scoring 3 hits below Good in a row"
- },
- 313: {
- special: "Boosts ATK of Striker characters by 1.5x for 1 turn, deals 25x character's ATK in PSY damage to one enemy",
- specialName: "Karmic Punishment",
- captain: "Boosts ATK of Striker characters by 2x and their HP by 1.5x"
- },
- 314: {
- special: "Boosts ATK of Striker characters by 1.5x for 1 turn, deals 25x character's ATK in PSY damage to one enemy",
- specialName: "Karmic Punishment",
- captain: "Boosts ATK of Striker characters by 2x and their HP by 1.5x"
- },
- 315: {
- special: "Changes [PSY] and [INT] orbs into [STR] orbs, empties slots with [DEX] and [QCK] orbs",
- specialName: "Aye Aye, Captain!",
- captain: "Boosts ATK, HP and RCV of Fighter characters by 1.5x"
- },
- 316: {
- special: "Changes [PSY] and [INT] orbs into [STR] orbs, empties slots with [DEX] and [QCK] orbs",
- specialName: "Aye Aye, Captain!",
- captain: "Boosts ATK, HP and RCV of Fighter characters by 1.5x"
- },
- 317: {
- special: "Randomly changes all orbs into either [DEX] or [STR] orbs, deals random DEX damage to all enemies",
- specialName: "Beautiful Secretary's Job",
- specialNotes: "#{random : 1 : 15,000}",
- captain: "Recovers 500 HP at end of turn, reduces damage received by 10%"
- },
- 318: {
- special: "Randomly changes all orbs into either [DEX] or [STR] orbs, deals random DEX damage to all enemies",
- specialName: "Beautiful Secretary's Job",
- specialNotes: "#{random : 1 : 15,000}",
- captain: "Recovers 1,000 HP at end of turn, reduces damage received by 15%"
- },
- 319: {
- special: "Locks all orbs for 1 turn",
- specialName: "Hook, Line, and Sinker",
- captain: "Boosts ATK of Striker characters by 1.5x"
- },
- 320: {
- special: "Locks all orbs for 1 turn",
- specialName: "Hook, Line, and Sinker",
- captain: "Boosts ATK of Striker characters by 2x"
- },
- 321: {
- special: "Deals 25x character's ATK in QCK damage to one enemy",
- specialName: "Taciturn Combo",
- captain: "Boosts ATK of QCK type characters by 2x"
- },
- 322: {
- special: "Deals 25x character's ATK in QCK damage to one enemy",
- specialName: "Taciturn Combo",
- captain: "Boosts ATK of QCK type characters by 2x"
- },
- 323: {
- special: "Amplifies the effect of orbs by 1.5x for 2 turns",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Mountain Wind",
- captain: "Boosts HP and RCV of QCK characters by 1.5x"
- },
- 324: {
- special: "Amplifies the effect of orbs by 1.5x for 2 turns",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Mountain Wind",
- captain: "Boosts HP and RCV of QCK characters by 1.5x"
- },
- 325: {
- special: "Changes [TND] orbs into [RCV] orbs, changes [RCV] orbs into [QCK] orbs",
- specialName: "Red-Hot Shipwright Soul"
- },
- 326: {
- special: "Empties all slots, deals 25x character's ATK in STR damage to one enemy",
- specialName: "Munch-Munch Tongue Cannon",
- captain: "Recovers 10x character's RCV in HP at the end of each turn"
- },
- 327: {
- special: "Empties all slots, deals 25x character's ATK in STR damage to one enemy",
- specialName: "Munch-Munch Tongue Cannon",
- captain: "Recovers 10x character's RCV in HP at the end of each turn"
- },
- 328: {
- special: "Deals 20x character's ATK in QCK damage to all enemies",
- specialName: "Fiddle Banff",
- captain: "Boosts RCV of all characters by 5x if HP is below 30% at the start of the turn"
- },
- 329: {
- special: "Deals 20x character's ATK in QCK damage to all enemies",
- specialName: "Fiddle Banff",
- captain: "Boosts RCV of all characters by 5x if HP is below 30% at the start of the turn"
- },
- 332: {
- special: "Changes [STR] orbs into [RCV] orbs, changes [RCV] orbs into [DEX] orbs",
- specialName: "Snow-Slicing Blade",
- captain: "Boosts ATK, HP and RCV of Striker characters by 1.2x"
- },
- 333: {
- special: "Recovers a random amount of HP",
- specialName: "Doctor Stop",
- captain: "Boosts ATK and RCV of PSY and INT characters by 1.5x"
- },
- 334: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 335: {
- special: "Recovers 5x character's RCV in HP",
- specialName: "Light Healing"
- },
- 336: {
- special: "Switches orbs between slots twice",
- specialName: "Franky Centaur",
- captain: "Reduces damage received by 10% if HP is above 50% at the start of the turn, boosts ATK of PSY characters by 2x and reduces ATK of every other character by 20% if HP is above 50% at the start of the turn"
- },
- 337: {
- special: "Switches orbs between slots twice",
- specialName: "Franky Centaur",
- captain: "Reduces damage received by 10% if HP is above 50% at the start of the turn, boosts ATK of PSY characters by 2.5x and reduces ATK of every other character by 20% if HP is above 50% at the start of the turn"
- },
- 338: {
- special: "Changes [QCK] orbs into [PSY] orbs",
- specialName: "Wavy Square Hair"
- },
- 339: {
- special: "Changes [INT] orbs into [TND] orbs",
- specialName: "Straight Square Hair"
- },
- 340: {
- special: "Randomly changes all orbs into either [STR] or [QCK] orbs, deals random STR damage to all enemies",
- specialName: "Kraken Tentacle Crush",
- specialNotes: "#{random : 1 : 15,000}",
- captain: "Boosts ATK of Striker characters by 2x"
- },
- 341: {
- special: "Randomly changes all orbs into either [STR] or [QCK] orbs, deals random STR damage to all enemies",
- specialName: "Kraken Tentacle Crush",
- specialNotes: "#{random : 1 : 15,000}",
- captain: "Boosts ATK of Striker characters by 2x"
- },
- 352: {
- special: "Boosts ATK of Shooter characters by 1.75x for 2 turns",
- specialName: "Smash Buster",
- captain: "Boosts ATK of Shooter characters by 2x"
- },
- 353: {
- special: "Boosts ATK of Shooter characters by 1.75x for 2 turns",
- specialName: "Smash Buster",
- captain: "Boosts ATK of Shooter characters by 2.5x"
- },
- 354: {
- special: "Reduces Bind and Silence duration by 3 turns",
- specialName: "Two-Sword Dance"
- },
- 355: {
- special: "Reduces Bind and Silence duration by 3 turns",
- specialName: "Two-Sword Dance"
- },
- 356: {
- special: "Changes own orb into [STR], deals 9x character's ATK in STR damage to all enemies",
- specialNotes: "The in-game description is wrong, the special does not deal 7x damage",
- specialName: "Steel Magnetic Arm",
- captain: "Boosts ATK of Striker characters by 2x"
- },
- 357: {
- special: "Changes own orb into [STR], deals 9x character's ATK in STR damage to all enemies",
- specialNotes: "The in-game description is wrong, the special does not deal 7x damage",
- specialName: "Steel Magnetic Arm",
- captain: "Boosts ATK of Striker characters by 2.5x"
- },
- 358: {
- special: "Changes [TND] and [RCV] orbs into [DEX] orbs, deals random DEX damage to all enemies",
- specialName: "Scratch Body",
- captain: "Boosts ATK of DEX characters by 2.5x if HP is above 99% at the start of the turn",
- specialNotes: "#{random : 5,000 : 20,000}"
- },
- 359: {
- special: "Changes [TND] and [RCV] orbs into [DEX] orbs, deals random DEX damage to all enemies",
- specialName: "Scratch Body",
- specialNotes: "#{random : 5,000 : 20,000}",
- captain: "Boosts ATK of DEX characters by 3x if HP is above 99% at the start of the turn"
- },
- 360: {
- special: "Deals 10x character's ATK in INT damage to all enemies, protects from defeat as long as HP is above 50% for 1 turn",
- specialName: "Prehistoric Power",
- specialNotes: "#{zombie}",
- captain: "Boosts ATK of INT characters by 3x if HP is below 30% at the start of the turn"
- },
- 361: {
- special: "Deals 10x character's ATK in INT damage to all enemies, protects from defeat as long as HP is above 50% for 1 turn",
- specialName: "Prehistoric Power",
- specialNotes: "#{zombie}",
- captain: "Boosts ATK of INT characters by 3x if HP is below 30% at the start of the turn"
- },
- 362: {
- special: "For 2 turns, boosts the amount healed by RCV orbs by 1.5x, then 2x, then 2.5x from the third crew member onward",
- specialName: "Big Eater",
- captain: "Boosts ATK and RCV of PSY characters by 2x"
- },
- 363: {
- special: "For 2 turns, boosts the amount healed by RCV orbs by 1.5x, then 2x, then 2.5x from the third crew member onward",
- specialName: "Big Eater",
- captain: "Boosts ATK and RCV of PSY characters by 2x"
- },
- 364: {
- special: "Changes [STR] and [DEX] orbs into [QCK] orbs",
- specialName: "Gang Fortress",
- captain: "Boosts ATK and RCV of QCK characters by 2x"
- },
- 365: {
- special: "Changes [STR] and [DEX] orbs into [QCK] orbs",
- specialName: "Gang Fortress",
- captain: "Boosts ATK and RCV of QCK characters by 2x"
- },
- 366: {
- special: "Deals 20x character's ATK in INT damage to all enemies, reduces Bind duration by 5 turns",
- specialName: "Dark King's Aura",
- captain: "Boosts chain multiplier by 4x"
- },
- 367: {
- special: "Deals 20x character's ATK in INT damage to all enemies, reduces Bind duration by 5 turns",
- specialName: "Dark King's Aura",
- captain: "Boosts chain multiplier by 4x"
- },
- 368: {
- special: "Reduces damage received from DEX enemies by 50% for 1 turn",
- specialName: "Crystal Shield DEX"
- },
- 369: {
- special: "Reduces damage received from STR enemies by 50% for 1 turn",
- specialName: "Crystal Shield STR"
- },
- 370: {
- special: "Reduces damage received from QCK enemies by 50% for 1 turn",
- specialName: "Crystal Shield QCK"
- },
- 371: {
- special: "Reduces damage received from INT enemies by 50% for 1 turn",
- specialName: "Crystal Shield INT"
- },
- 372: {
- special: "Reduces damage received from PSY enemies by 50% for 1 turn",
- specialName: "Crystal Shield PSY"
- },
- 373: {
- special: "Reduces damage received from DEX enemies by 50% for 1 turn",
- specialName: "Crystal Shield DEX",
- captain: "Boosts ATK of Slasher characters by 1.5x"
- },
- 374: {
- special: "Reduces damage received from STR enemies by 50% for 1 turn",
- specialName: "Crystal Shield STR",
- captain: "Boosts ATK of Shooter characters by 1.5x"
- },
- 375: {
- special: "Reduces damage received from QCK enemies by 50% for 1 turn",
- specialName: "Crystal Shield QCK",
- captain: "Boosts HP of Striker characters by 1.5x"
- },
- 376: {
- special: "Reduces damage received from INT enemies by 50% for 1 turn",
- specialName: "Crystal Shield INT",
- captain: "Boosts ATK of Fighter characters by 1.5x"
- },
- 377: {
- special: "Reduces damage received from PSY enemies by 50% for 1 turn",
- specialName: "Crystal Shield PSY",
- captain: "Boosts ATK of Striker characters by 1.5x"
- },
- 378: {
- special: "Recovers 3x character's RCV in HP",
- specialName: "Quick Healing",
- captain: "Boosts RCV of all characters by 1.5x"
- },
- 379: {
- special: "Removes poison",
- specialName: "Dugong Kung Fu Fist of Healing"
- },
- 380: {
- special: "Removes poison",
- specialName: "Dugong Kung Fu Fist of Healing",
- captain: "Boosts ATK and RCV of STR characters by 1.5x"
- },
- 381: {
- special: "Reduces damage received by 20% for 1 turn",
- specialName: "Iron Shield"
- },
- 382: {
- special: "Reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Shield Crusher"
- },
- 383: {
- special: "Strongly poisons one enemy",
- specialNotes: "Strong poison deals 5x character's ATK in fixed damage at the end of each turn",
- specialName: "Poison Needle",
- captain: "Reduces damage received by 10%, boosts ATK of INT characters by 2x"
- },
- 384: {
- special: "Strongly poisons one enemy",
- specialNotes: "Strong poison deals 5x character's ATK in fixed damage at the end of each turn",
- specialName: "Poison Needle",
- captain: "Reduces damage received by 20%, boosts ATK of INT characters by 2x"
- },
- 385: {
- special: "Reduces damage received by 50% for 1 turn, boosts ATK of Fighter characters by 1.25x for 1 turn",
- specialName: "Zombie Marionette Operation",
- captain: "Boosts ATK of INT characters by 2x"
- },
- 386: {
- special: "Reduces damage received by 50% for 1 turn, boosts ATK of Fighter characters by 1.25x for 1 turn",
- specialName: "Zombie Marionette Operation",
- captain: "Boosts ATK of INT characters by 2x"
- },
- 387: {
- special: "Randomly changes all orbs into either [PSY] or [INT] orbs, deals random PSY damage to all enemies",
- specialName: "Square Plate Sword",
- specialNotes: "#{random : 1 : 10,000}",
- captain: "Boosts RCV of PSY characters by 1.5x"
- },
- 388: {
- special: "Randomly changes all orbs into either [PSY] or [INT] orbs, deals random PSY damage to all enemies",
- specialName: "Square Plate Sword",
- specialNotes: "#{random : 1 : 10,000}",
- captain: "Boosts RCV of PSY characters by 1.5x"
- },
- 389: {
- special: "Changes own orb into [QCK] and every other orb into either [RCV], [STR], [DEX] or [QCK] orbs",
- specialName: "Hell Wink",
- captain: "Boosts ATK by 2.25x following a chain of DEX > INT > QCK attacks no lower than Good"
- },
- 390: {
- special: "Changes own orb into [QCK] and every other orb into either [RCV], [STR], [DEX] or [QCK] orbs",
- specialName: "Hell Wink",
- captain: "Boosts ATK by 2.75x following a chain of DEX > INT > QCK attacks no lower than Good"
- },
- 391: {
- special: "Reduces damage received by 90% for 1 turn, reduces the defense of all enemies by 80% for 1 turn, deals 1,000 fixed damage to all enemies at the end of the following turn",
- specialName: "Negative Hollow",
- specialNotes: "#{fixed}",
- captain: "Boosts RCV of DEX characters by 1.5x"
- },
- 392: {
- special: "Reduces damage received by 90% for 1 turn, reduces the defense of all enemies by 80% for 1 turn, deals 1,000 fixed damage to all enemies at the end of the following turn",
- specialName: "Negative Hollow",
- specialNotes: "#{fixed}",
- captain: "Boosts RCV of DEX characters by 2x"
- },
- 393: {
- special: "Deals 35x character's ATK in STR damage to one enemy",
- specialName: "Kumacy Knuckle"
- },
- 394: {
- special: "Deals 500 fixed damage to all enemies",
- specialName: "The Tempest Called Love",
- specialNotes: "#{fixed}"
- },
- 395: {
- special: "Empties adjacent slots, amplifies the effect of orbs by 1.25x for 1 turn",
- specialNotes: "#{orb : 1.25x}",
- specialName: "Mole Banana",
- captain: "Boosts ATK and RCV of QCK characters by 1.2x"
- },
- 396: {
- special: "Empties adjacent slots, amplifies the effect of orbs by 1.25x for 1 turn",
- specialNotes: "#{orb : 1.25x}",
- specialName: "Mole Banana",
- captain: "Boosts ATK and RCV of QCK characters by 1.2x"
- },
- 397: {
- special: "Fills [EMPTY] orbs with [STR] orbs with a 50% probability, deals 15x character's ATK in damage to all enemies",
- specialName: "Four Hundred Base Hits",
- captain: "Boosts ATK by 3x after scoring 5 Perfects in a row"
- },
- 398: {
- special: "Fills [EMPTY] orbs with [STR] orbs with a 50% probability, deals 15x character's ATK in damage to all enemies",
- specialName: "Four Hundred Base Hits",
- captain: "Boosts ATK by 4x after scoring 5 Perfects in a row"
- },
- 399: {
- special: "Boosts ATK of DEX characters by 1.5x for 1 turn",
- specialName: "Spike-U-Puncture",
- captain: "Boosts HP of Striker characters by 1.5x"
- },
- 400: {
- special: "Boosts ATK of DEX characters by 1.5x for 1 turn",
- specialName: "Spike-U-Puncture",
- captain: "Boosts HP of Striker characters by 2x"
- },
- 401: {
- special: "Reduces damage received by 50% for 1 turn, boosts ATK of Slasher characters by 1.25x for 1 turn",
- specialName: "Iron Guard",
- captain: "Reduces damage received by 10%, boosts ATK of Slasher characters by 1.5x"
- },
- 402: {
- special: "Reduces damage received by 50% for 1 turn, boosts ATK of Slasher characters by 1.25x for 1 turn",
- specialName: "Iron Guard",
- captain: "Reduces damage received by 10%, boosts ATK of Slasher characters by 2x"
- },
- 403: {
- special: "Deals several times the character's ATK in QCK damage to all enemies",
- specialNotes: "#{specialProportional : lower : 150 * ( 1 - (remaining HP) / (total HP) )}",
- specialName: "Backwater Sword Dance",
- captain: "Reduces damage received by 50% if HP is low, boosts RCV of all characters by 3x if HP is low"
- },
- 404: {
- special: "Reduces damage received by 50% for 2 turns, boosts RCV of all characters by 2x for 2 turns",
- specialName: "Clear-Clear Fruit",
- captain: "Boosts ATK of Shooter characters by 1.5x"
- },
- 405: {
- special: "Reduces damage received by 50% for 2 turns, boosts RCV of all characters by 2x for 2 turns",
- specialName: "Clear-Clear Fruit",
- captain: "Boosts ATK of Shooter characters by 2x"
- },
- 406: {
- special: "Reduces crew's HP to 1, deals 1,000 fixed damage to all enemies, boosts ATK of all characters by 1.2x for 1 turn",
- specialName: "Skills of the Ancient Warriors",
- specialNotes: "#{fixed}"
- },
- 407: {
- special: "Randomizes all orbs, deals 7x character's ATK in DEX damage to all enemies",
- specialName: "Zombie-Style 36-Pound Phoenix"
- },
- 408: {
- special: "Changes own orb into [INT] and randomizes every other orb, deals 15x character's ATK in INT damage to all enemies",
- specialName: "Ground Death",
- captain: "Reduces damage received by 20%, boosts ATK of Slasher characters by 2x"
- },
- 409: {
- special: "Changes own orb into [QCK], deals 13x character's ATK in QCK damage to one enemy",
- specialName: "Ocean Current Shoulder Throw",
- captain: "Boosts ATK of Fighter characters by 2x"
- },
- 410: {
- special: "Changes own orb into [QCK], deals 13x character's ATK in QCK damage to one enemy",
- specialName: "Ocean Current Shoulder Throw",
- captain: "Boosts ATK of Fighter characters by 2.5x"
- },
- 411: {
- special: "Changes adjacent orbs into [STR] orbs, deals 1,000 fixed damage to all enemies",
- specialName: "Ursa Shock",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK and HP of STR characters by 2x"
- },
- 412: {
- special: "Changes adjacent orbs into [STR] orbs, deals 1,000 fixed damage to all enemies",
- specialName: "Ursa Shock",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK and HP of STR characters by 2x"
- },
- 413: {
- special: "Changes [STR] and [DEX] orbs into [INT] orbs",
- specialName: "Doppelman",
- captain: "Boosts ATK of INT characters by 2.5x if HP is above 99% at the start of the turn"
- },
- 414: {
- special: "Changes [STR] and [DEX] orbs into [INT] orbs",
- specialName: "Doppelman",
- captain: "Boosts ATK of INT characters by 3x if HP is above 99% at the start of the turn"
- },
- 415: {
- special: "Recovers 15x character's RCV in HP, delays all enemies for 1 turn",
- specialName: "Love-Love Mellow",
- captain: "Boosts ATK of QCK and PSY characters by 2.75x and their RCV by 1.5x if HP is above 70% at the start of the turn"
- },
- 416: {
- special: "Recovers 15x character's RCV in HP, delays all enemies for 1 turn",
- specialName: "Love-Love Mellow",
- captain: "Boosts ATK of QCK and PSY characters by 2.75x and their RCV by 1.5x if HP is above 70% at the start of the turn"
- },
- 417: {
- special: "Switches orbs between slots twice, amplifies the effect of orbs by 2x for 1 turn",
- specialNotes: "#{orb : 2x}",
- specialName: "Overheat",
- captain: "Boosts ATK of Slasher characters by 2x"
- },
- 418: {
- special: "Switches orbs between slots twice, amplifies the effect of orbs by 2x for 1 turn",
- specialNotes: "#{orb : 2x}",
- specialName: "Overheat",
- captain: "Boosts ATK and HP of Slasher characters by 2x"
- },
- 419: {
- special: "Reduces the defense of all enemies by 50% for 2 turns, randomizes all orbs",
- specialName: "Parage Shot: The Storm",
- captain: "Boosts ATK of QCK characters by 2x"
- },
- 420: {
- special: "Reduces Silence duration by 3 turns, deals 15x character's ATK in STR damage to one enemy",
- specialName: "Gum-Gum Bazooka: Supremacy",
- captain: "Boosts ATK, HP and RCV of STR characters by 1.5x"
- },
- 421: {
- special: "Reduces Bind duration by 2 turns, deals 10x character's ATK in DEX damage to all enemies",
- specialName: "Three Thousand Worlds: The Final Stroke",
- captain: "Boosts ATK, HP and RCV of DEX characters by 1.5x"
- },
- 422: {
- special: "Reduces damage received from INT enemies by 100% for 1 turn, recovers a random amount of HP",
- specialName: "Mirage Tempo: The Heavens",
- specialNotes: "Estimated healing range: between 1,000 HP and 3,000 HP.",
- captain: "Boosts ATK, HP and RCV of INT characters by 1.5x"
- },
- 423: {
- special: "Recovers 4,343 HP, reduces the defense of all enemies by 50% for 2 turns",
- specialName: "Lullaby Parry",
- captain: "Protects from defeat as long as HP is above 70%",
- captainNotes: "#{zombie}"
- },
- 424: {
- special: "Recovers 4,343 HP, reduces the defense of all enemies by 50% for 2 turns",
- specialName: "Lullaby Parry",
- captain: "Protects from defeat as long as HP is above 70%",
- captainNotes: "#{zombie}"
- },
- 425: {
- special: "Deals random PSY damage to all enemies",
- specialName: "Shusui: Three Verse Arrow Notch Slash",
- specialNotes: "#{random : 1 : 100,000}",
- captain: "Boosts ATK and HP of Slasher characters by 1.5x"
- },
- 426: {
- special: "Boosts ATK of STR characters by 1.05x for 5 turns",
- specialName: "Barco Grabber Breath",
- captain: "Boosts HP of STR characters by 2x"
- },
- 427: {
- special: "Reduces Bind and Silence duration by 2 turns",
- specialName: "Havoc Sonar",
- captain: "Boosts HP of DEX characters by 2x"
- },
- 428: {
- special: "Reduces damage received by 50% for 2 turns",
- specialName: "Last Boss – Deep Dive of Dreams",
- captain: "Boosts ATK of PSY characters by 2x"
- },
- 429: {
- special: "Deals 7x character's ATK in DEX damage to all enemies, reduces the defense of all enemies by 50% for 1 turn",
- specialName: "South Bird's Fearless Smile"
- },
- 430: {
- special: "Amplifies the effect of orbs by 1.5x for 1 turn",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Spring Hopper",
- captain: "Boosts ATK of DEX characters by 1.5x"
- },
- 431: {
- special: "Amplifies the effect of orbs by 1.5x for 1 turn",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Spring Hopper",
- captain: "Boosts ATK and HP of DEX characters by 1.5x"
- },
- 432: {
- special: "Deals 20x character's ATK in QCK damage to one enemy",
- specialName: "Big Chop"
- },
- 433: {
- special: "Reduces Bind and Silence duration by 1 turn",
- specialName: "New Kama Seduction",
- captain: "Boosts ATK by 2x following a chain of QCK > STR > DEX attacks no lower than Good"
- },
- 434: {
- special: "Amplifies the effect of orbs by 1.25x for 3 turns",
- specialNotes: "#{orb : 1.25x}",
- specialName: "New Kama Karate Maiden's Awakening",
- captain: "Boosts ATK by 2x following a chain of PSY > INT > INT attacks no lower than Good"
- },
- 435: {
- special: "Randomly changes [RCV], [STR] and [DEX] orbs into either [STR] or [QCK] orbs",
- specialName: "Maiden's Bloom",
- captain: "Boosts ATK by 2x following a chain of INT > PSY > QCK attacks no lower than Good"
- },
- 436: {
- special: "Randomly changes [RCV], [STR] and [DEX] orbs into either [STR] or [QCK] orbs",
- specialName: "Maiden's Bloom",
- captain: "Boosts ATK by 2.25x following a chain of INT > PSY > QCK attacks no lower than Good"
- },
- 437: {
- special: "Recovers 3x character's RCV in HP, reduces damage received by 80% for 1 turn, deals 1,000 fixed damage to all enemies at the end of the following turn",
- specialName: "Negative Horo \"Sweet\"",
- specialNotes: "#{fixed}",
- captain: "Boosts RCV of all characters by 3x if HP is below 30% at the start of the turn"
- },
- 438: {
- special: "Recovers 3x character's RCV in HP, reduces damage received by 80% for 1 turn, deals 1,000 fixed damage to all enemies at the end of the following turn",
- specialName: "Negative Horo \"Sweet\"",
- specialNotes: "#{fixed}",
- captain: "Boosts RCV of all characters by 5x if HP is below 30% at the start of the turn"
- },
- 439: {
- special: "Changes adjacent orbs into [RCV] and randomizes every other orb",
- specialName: "Charge! Supersonic Duck Squadron! \"Love\"",
- captain: "Recovers 5x character's RCV in HP at the end of each turn"
- },
- 440: {
- special: "Changes adjacent orbs into [RCV] and randomizes every other orb",
- specialName: "Charge! Supersonic Duck Squadron! \"Love\"",
- captain: "Recovers 7x character's RCV in HP at the end of each turn"
- },
- 444: {
- captain: "Boosts ATK of Evolver and Booster characters by 2x if HP is above 50% at the start of the turn"
- },
- 445: {
- special: "Randomly changes all orbs into either [STR], [DEX], [QCK], [PSY] or [INT] orbs, switches orbs between slots 3 times",
- specialName: "Support Incoming! Supersonic Duck Squadron!",
- captain: "Boosts ATK of Evolver and Booster characters by 2.5x if HP is above 50% at the start of the turn"
- },
- 446: {
- special: "Deals 10 times the damage received in the previous turn in typeless damage to all enemies",
- specialName: "Black Hole",
- captain: "Doubles damage received, boosts ATK of STR characters by 2x and their HP by 1.5x"
- },
- 447: {
- special: "Deals 10 times the damage received in the previous turn in typeless damage to all enemies",
- specialName: "Black Hole",
- captain: "Doubles damage received, boosts ATK of STR characters by 2.5x and their HP by 2.25x"
- },
- 448: {
- special: "Boosts chances of getting [QCK] orbs for 3 turns",
- specialName: "Pirate King's Sword",
- captain: "Boosts ATK of QCK characters by 3x if HP is above 99% at the start of the turn"
- },
- 449: {
- special: "Boosts chances of getting [QCK] orbs for 3 turns",
- specialName: "Pirate King's Sword",
- captain: "Boosts ATK of QCK characters by 3x if HP is above 99% at the start of the turn"
- },
- 450: {
- special: "Boosts ATK of Fighter characters by 1.5x for 1 turn, deals 25x character's ATK in DEX damage to one enemy",
- specialName: "Number Eight's One Hit",
- captain: "Boosts ATK of Fighter characters by 2x and their HP by 1.5x"
- },
- 451: {
- special: "Boosts ATK of Fighter characters by 1.5x for 1 turn, deals 25x character's ATK in DEX damage to one enemy",
- specialName: "Number Eight's One Hit",
- captain: "Boosts ATK of Fighter characters by 2x and their HP by 1.5x"
- },
- 452: {
- special: "Changes own orb and the captain's orb into [PSY]",
- specialName: "Dread Morning Star",
- captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Striker characters by 2x"
- },
- 453: {
- special: "Changes own orb and the captain's orb into [PSY]",
- specialName: "Dread Morning Star",
- captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Striker characters by 2x"
- },
- 454: {
- special: "Boosts ATK of STR characters by 1.5x for 1 turn, deals 15x character's ATK in STR damage to all enemies",
- specialName: "Manly Flaming Sword",
- captain: "Boosts ATK of STR characters by 2x, boosts damage of STR specials by 2x",
- captainNotes: "#{noFixedPerc}"
- },
- 455: {
- special: "Boosts ATK of STR characters by 1.5x for 1 turn, deals 15x character's ATK in STR damage to all enemies",
- specialName: "Manly Flaming Sword",
- captain: "Boosts ATK of STR characters by 2x, boosts damage of STR specials by 2x",
- captainNotes: "#{noFixedPerc}"
- },
- 456: {
- special: "Randomly changes the orbs in the middle row into either [STR] or [DEX] orbs, the orbs in the lower row into either [PSY] or [INT] orbs, switches orbs between slots once",
- specialName: "Double Cannon",
- captain: "Boosts ATK of Shooter characters by 2x and their RCV by 1.5x"
- },
- 457: {
- special: "Randomly changes the orbs in the middle row into either [STR] or [DEX] orbs, the orbs in the lower row into either [PSY] or [INT] orbs, switches orbs between slots once",
- specialName: "Double Cannon",
- captain: "Boosts ATK of Shooter characters by 2x and their RCV by 1.5x"
- },
- 458: {
- special: "Deals random PSY damage to all enemies, boosts ATK of all characters by 1.5x for 1 turn",
- specialName: "Zen Shockwave",
- specialNotes: "#{random : 30,000 : 150,000}",
- captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of characters with cost 20 or less by 3x"
- },
- 459: {
- special: "Deals random PSY damage to all enemies, boosts ATK of all characters by 1.5x for 1 turn",
- specialName: "Zen Shockwave",
- specialNotes: "#{random : 30,000 : 150,000}",
- captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts own ATK and ATK of characters with cost 20 or less by 3x",
- captainNotes: "His captain ability only affects his evolved form, his base form will NOT receive the boost. All evolved Sengoku units in the team are included in the bonus."
- },
- 460: {
- special: "Recovers 33 HP after the end of each turn for 999 turns, delays all enemies for 1 turn",
- specialName: "Extra Large Candle Service Set",
- captain: "Reduces damage received by 10%"
- },
- 461: {
- special: "Changes own orb into [DEX] and randomizes every other orb, boosts ATK of Fighter characters by 1.25x for 2 turns",
- specialName: "Swan Arabesque",
- captain: "Boosts ATK of Fighter characters by 2x"
- },
- 462: {
- special: "Changes own orb into [DEX] and randomizes every other orb, boosts ATK of Fighter characters by 1.25x for 2 turns",
- specialName: "Swan Arabesque",
- captain: "Boosts ATK of Fighter characters by 2x"
- },
- 463: {
- special: "Empties all slots, deals 25x character's ATK in PSY damage to one enemy",
- specialName: "Surprise Ball Dragon",
- captain: "Boosts HP of PSY characters by 2x"
- },
- 464: {
- special: "Deals 20x character's ATK in INT damage to all enemies",
- specialName: "Roc Rider Fuza's Flame",
- captain: "Boosts ATK and HP of Striker characters by 1.5x"
- },
- 465: {
- special: "Deals 20x character's ATK in QCK damage to one enemy, amplifies the effect of orbs by 1.25x for 2 turns",
- specialNotes: "#{orb : 1.25x}",
- specialName: "Jet Punch",
- captain: "Boosts ATK by 3x after scoring 4 hits below Good in a row"
- },
- 466: {
- special: "Delays all enemies for 1 turn",
- specialName: "Double Flash Gun",
- captain: "Boosts ATK and HP of Shooter characters by 1.5x"
- },
- 467: {
- special: "Changes [RCV] orbs into [STR] orbs",
- specialName: "Mountain Belly",
- captain: "Boosts ATK and RCV of STR characters by 1.5x"
- },
- 468: {
- special: "Boosts RCV of all characters by 1.5x for 1 turn",
- specialName: "Healing Power"
- },
- 469: {
- special: "Switches orbs between slots once",
- specialName: "Quick Change"
- },
- 470: {
- special: "Boosts RCV of all characters by 1.5x for 1 turn",
- specialName: "Healing Power",
- captain: "Boosts RCV of PSY characters by 1.5x"
- },
- 471: {
- special: "Switches orbs between slots once",
- specialName: "Quick Change"
- },
- 472: {
- special: "Deals 20x character's ATK in STR damage to one enemy",
- specialName: "Milky Power Axe"
- },
- 473: {
- special: "Deals 10x character's ATK in QCK damage to one enemy",
- specialName: "Milky Quick Axe"
- },
- 474: {
- special: "Deals 5x character's ATK in DEX damage to all enemies, reduces Bind duration by 1 turn",
- specialName: "Milky Technique Axe"
- },
- 475: {
- special: "Deals 5x character's ATK in STR damage to all enemies, recovers 500 HP",
- specialName: "Milky Mind Axe"
- },
- 476: {
- special: "Deals 1,000 fixed damage to one enemy",
- specialName: "Milky Intelligence Axe",
- specialNotes: "#{fixed}"
- },
- 477: {
- special: "Changes [DEX] orbs into [STR] orbs",
- specialName: "[DEX] Slot Change [STR]"
- },
- 478: {
- special: "Changes [PSY] orbs into [QCK] orbs",
- specialName: "[PSY] Slot Change [QCK]"
- },
- 479: {
- special: "Changes [INT] orbs into [DEX] orbs",
- specialName: "[INT] Slot Change [DEX]"
- },
- 480: {
- special: "Changes [TND] orbs into [PSY] orbs",
- specialName: "[TND] Slot Change [PSY]"
- },
- 481: {
- special: "Changes [DEX] orbs into [INT] orbs",
- specialName: "[DEX] Slot Change [INT]"
- },
- 482: {
- special: "Changes [DEX] orbs into [STR] orbs",
- specialName: "[DEX] Slot Change [STR]",
- captain: "Boosts HP of Striker characters by 1.5x"
- },
- 483: {
- special: "Changes [PSY] orbs into [QCK] orbs",
- specialName: "[PSY] Slot Change [QCK]",
- captain: "Boosts ATK and RCV of QCK characters by 1.2x"
- },
- 484: {
- special: "Changes [INT] orbs into [DEX] orbs",
- specialName: "[INT] Slot Change [DEX]",
- captain: "Reduces damage received by 10%"
- },
- 485: {
- special: "Changes [TND] orbs into [PSY] orbs",
- specialName: "[TND] Slot Change [PSY]",
- captain: "Boosts HP and RCV of PSY characters by 1.2x"
- },
- 486: {
- special: "Changes [DEX] orbs into [INT] orbs",
- specialName: "[DEX] Slot Change [INT]",
- captain: "Boosts ATK of Striker characters by 1.5x"
- },
- 487: {
- special: "Boosts ATK of STR characters by 1.2x for 1 turn",
- specialName: "Attack Boost STR"
- },
- 488: {
- special: "Boosts ATK of QCK characters by 1.2x for 1 turn",
- specialName: "Attack Boost QCK"
- },
- 489: {
- special: "Boosts ATK of DEX characters by 1.2x for 1 turn",
- specialName: "Attack Boost DEX"
- },
- 490: {
- special: "Boosts ATK of STR characters by 1.2x for 1 turn",
- specialName: "Attack Boost STR",
- captain: "Boosts ATK and HP of Striker characters by 1.2x"
- },
- 491: {
- special: "Boosts ATK of QCK characters by 1.2x for 1 turn",
- specialName: "Attack Boost QCK",
- captain: "Boosts RCV of Striker characters by 1.5x"
- },
- 492: {
- special: "Boosts ATK of DEX characters by 1.2x for 1 turn",
- specialName: "Attack Boost DEX",
- captain: "Boosts ATK of DEX characters by 1.2x"
- },
- 493: {
- special: "Recovers 7x character's RCV in HP",
- specialName: "Moderate Healing"
- },
- 494: {
- special: "Deals 3x character's ATK in INT damage to all enemies, poisons all enemies",
- specialNotes: "#{poison}",
- specialName: "Poison Attack"
- },
- 495: {
- special: "Recovers 7x character's RCV in HP",
- specialName: "Moderate Healing",
- captain: "Recovers 500 HP at the end of each turn"
- },
- 496: {
- special: "Deals 3x character's ATK in INT damage to all enemies, poisons all enemies",
- specialNotes: "#{poison}",
- specialName: "Poison Attack",
- captain: "Boosts ATK of Shooter characters by 1.5x"
- },
- 497: {
- special: "Reduces Bind duration by 4 turns, deals 3x character's ATK in QCK damage to one enemy",
- specialName: "Cheeky Punk Kid Kick",
- captain: "Boosts ATK of QCK characters by 1.5x"
- },
- 498: {
- special: "Reduces Bind duration by 4 turns, deals 3x character's ATK in QCK damage to one enemy",
- specialName: "Cheeky Punk Kid Kick",
- captain: "Boosts ATK of QCK characters by 1.5x"
- },
- 499: {
- special: "Delays all enemies by 1 turn",
- specialName: "Women Are Courageous!",
- captain: "Boosts RCV of Shooter characters by 1.5x"
- },
- 500: {
- special: "Delays all enemies by 1 turn",
- specialName: "Women Are Courageous!",
- captain: "Boosts RCV of Shooter characters by 2x"
- },
- 501: {
- special: "Recovers 5x character's RCV in HP at the end of each turn for 4 turns",
- specialName: "Studying Medicine",
- captain: "Boosts ATK, HP and RCV of PSY characters by 1.2x"
- },
- 502: {
- special: "Recovers 5x character's RCV in HP at the end of each turn for 4 turns",
- specialName: "Studying Medicine",
- captain: "Boosts ATK, HP and RCV of PSY characters by 1.5x"
- },
- 503: {
- special: "Deals 5x character's ATK in INT damage to all enemies, boosts ATK of all characters by 5% for 1 turn, reduces the defense of all enemies by 50% for 1 turn, randomizes all orbs",
- specialName: "Surprise Dial Illusion",
- captain: "Boosts HP of INT characters by 1.5x"
- },
- 504: {
- special: "Deals 5x character's ATK in INT damage to all enemies, boosts ATK of all characters by 5% for 1 turn, reduces the defense of all enemies by 50% for 1 turn, randomizes all orbs",
- specialName: "Surprise Dial Illusion",
- captain: "Boosts HP of INT characters by 2x"
- },
- 505: {
- special: "Boosts ATK of QCK characters by 1.25x for 3 turns",
- specialName: "Flying Claw",
- captain: "Protects from defeat as long as HP is above 50%",
- captainNotes: "#{zombie}"
- },
- 506: {
- special: "Boosts ATK of QCK characters by 1.25x for 3 turns",
- specialName: "Flying Claw",
- captain: "Protects from defeat as long as HP is above 30%",
- captainNotes: "#{zombie}"
- },
- 507: {
- special: "Deals 25x character's ATK in STR damage to one enemy",
- specialName: "Ringing Fang",
- captain: "Boosts ATK and HP of STR characters by 1.2x"
- },
- 508: {
- special: "Deals 25x character's ATK in STR damage to one enemy",
- specialName: "Ringing Fang",
- captain: "Boosts ATK and HP of STR characters by 1.5x"
- },
- 509: {
- special: "Poisons all enemies, boosts ATK of Striker characters by 1.5x for 1 turn",
- specialNotes: "#{poison}",
- specialName: "Merciless Ploy: Poison Needle",
- captain: "Boosts ATK of Striker characters by 1.5x"
- },
- 510: {
- special: "Poisons all enemies, boosts ATK of Striker characters by 1.5x for 1 turn",
- specialNotes: "#{poison}",
- specialName: "Merciless Ploy: Poison Needle",
- captain: "Reduces damage received by 10%, boosts ATK of Striker characters by 2x"
- },
- 511: {
- special: "Reduces damage received by 30% for 2 turns, boosts ATK of Slasher characters by 1.25x for 2 turns",
- specialName: "Cruel Blade: Iron Guard",
- captain: "Boosts ATK of Slasher characters by 2x"
- },
- 512: {
- special: "Boosts chances of getting [PSY] orbs and reduces chances of getting [INT] orbs for 3 turns",
- specialName: "Sneaky Punk Kid Strike",
- captain: "Protects from defeat as long as HP is above 50%",
- captainNotes: "#{zombie}"
- },
- 513: {
- special: "Boosts chances of getting [PSY] orbs and reduces chances of getting [INT] orbs for 3 turns",
- specialName: "Sneaky Punk Kid Strike",
- captain: "Protects from defeat as long as HP is above 50%, boosts ATK of PSY characters by 1.5x if HP is above 50% at the start of the turn",
- captainNotes: "#{zombie}"
- },
- 514: {
- special: "Boosts ATK of INT characters by 1.5x for 1 turn, reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Blooming Flower of Everlasting Summer",
- captain: "Boosts ATK of INT characters by 2x"
- },
- 515: {
- special: "Changes the orbs in the left column into [INT], [PSY] and [RCV], the orbs in the right column into [STR], [DEX] and [QCK], switches orbs between slots 3 times",
- specialNotes: "The special is not based on chance, the orbs are always changed with the same pattern. Starting from the top left orb and proceeding clockwise, after the special is used the orbs will be: [INT], [STR], [DEX], [QCK], [RCV] and [PSY]",
- specialName: "Pop Green",
- captain: "Boosts ATK, HP and RCV of Shooter characters by 1.5x"
- },
- 516: {
- special: "Changes the orbs in the left column into [INT], [PSY] and [RCV], the orbs in the right column into [STR], [DEX] and [QCK], switches orbs between slots 3 times",
- specialNotes: "The special is not based on chance, the orbs are always changed with the same pattern. Starting from the top left orb and proceeding clockwise, after the special is used the orbs will be: [INT], [STR], [DEX], [QCK], [RCV] and [PSY]",
- specialName: "Pop Green",
- captain: "Boosts ATK, HP and RCV of Shooter characters by 1.5x, recovers 1x character's RCV in HP at the end of each turn"
- },
- 517: {
- special: "Empties all slots with [RCV] orbs, boosts ATK of all characters by 5% for 2 turns",
- specialName: "Overeat! Energy Change",
- captain: "Boosts HP of PSY characters by 1.5x"
- },
- 518: {
- special: "Empties all slots with [RCV] orbs, boosts ATK of all characters by 5% for 2 turns",
- specialName: "Overeat! Energy Change",
- captain: "Boosts HP of PSY characters by 2x, boosts chances of getting [RCV] orbs"
- },
- 519: {
- special: "Reduces crew's current HP by 99%, deals 25x character's ATK in fixed damage to all enemies, boosts ATK of STR characters by 2x for 1 turn",
- specialName: "Gum-Gum Gigant Thunder Axe",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK of STR characters by 2x"
- },
- 520: {
- special: "Reduces crew's current HP by 99%, deals 25x character's ATK in fixed damage to all enemies, boosts ATK of STR characters by 2x for 1 turn",
- specialName: "Gum-Gum Gigant Thunder Axe",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK of STR characters by 2.5x"
- },
- 521: {
- special: "Deals several times the character's ATK in INT damage to all enemies",
- specialNotes: "#{specialProportional : lower : 100 * ( 1 - (remaining HP) / (total HP) )}",
- specialName: "Diable Jambe - Venaison Shot",
- captain: "Reduces damage received by 80% if HP is above 99% at the start of the turn"
- },
- 522: {
- special: "Deals several times the character's ATK in INT damage to all enemies",
- specialNotes: "#{specialProportional : lower : 100 * ( 1 - (remaining HP) / (total HP) )}",
- specialName: "Diable Jambe - Venaison Shot",
- captain: "Reduces damage received by 80% if HP is above 99% at the start of the turn"
- },
- 523: {
- special: "Randomizes all orbs, protects from defeat as long as HP is above 50% for 1 turn",
- specialName: "Billy's Electrical Discharge",
- specialNotes: "#{zombie}",
- captain: "Boosts ATK and RCV of Striker characters by 1.5x"
- },
- 524: {
- special: "Randomizes all orbs, protects from defeat as long as HP is above 50% for 1 turn",
- specialName: "Billy's Electrical Discharge",
- specialNotes: "#{zombie}",
- captain: "Boosts ATK of Striker characters by 2x and their RCV by 1.5x"
- },
- 525: {
- special: "Deals random PSY damage to all enemies, randomizes all orbs",
- specialName: "Three-Verse Humming: Arrow-Notch Slash",
- captain: "Boosts ATK of PSY characters by 2x"
- },
- 526: {
- special: "Deals random PSY damage to all enemies, randomizes all orbs",
- specialName: "Three-Verse Humming: Arrow-Notch Slash",
- captain: "Boosts ATK of PSY characters by 2x, reduces damage received from INT enemies by 30%"
- },
- 527: {
- special: "Removes poison, recovers 15x character's RCV in HP",
- specialName: "Devoted Healing - \"I'm Glad You are Safe\"",
- captain: "Boosts ATK and RCV of DEX characters by 1.5x"
- },
- 528: {
- special: "Removes poison, recovers 15x character's RCV in HP",
- specialName: "Devoted Healing - \"I'm Glad You are Safe\"",
- captain: "Boosts ATK and RCV of DEX characters by 2x"
- },
- 529: {
- special: "Deals 35x character's ATK in PSY damage to all enemies, reduces the defense of all enemies by 100% for 2 turns",
- specialName: "Conqueror's Haki: Emperor",
- captain: "Boosts chances of getting [PSY] orbs, boosts ATK of PSY characters proportionally to the crew's current HP",
- captainNotes: "#{captainProportional : higher : 2 + 0.75 * (remaining HP) / (total HP) : 2.75 : 2}"
- },
- 530: {
- special: "Deals 35x character's ATK in PSY damage to all enemies, reduces the defense of all enemies by 100% for 2 turns",
- specialName: "Conqueror's Haki: Emperor",
- captain: "Boosts chances of getting [PSY] orbs, boosts ATK of PSY characters proportionally to the crew's current HP",
- captainNotes: "#{captainProportional : higher : 2 + 0.75 * (remaining HP) / (total HP) : 2.75 : 2}"
- },
- 531: {
- special: "Reduces damage received by 30% for 4 turns",
- specialName: "Veinte Fleur Calendula: Blossom",
- captain: "Reduces damage received from STR, DEX and QCK enemies by 30%"
- },
- 532: {
- special: "Reduces damage received by 30% for 4 turns",
- specialName: "Veinte Fleur Calendula: Blossom",
- captain: "Reduces damage received from STR, DEX and QCK enemies by 30%"
- },
- 533: {
- special: "Amplifies the effect of orbs by 1.5x for 1 turn, deals 20x character's ATK in QCK damage to one enemy",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Swallow Bond En Avant: Blossom",
- captain: "Boosts ATK of QCK characters by 2x"
- },
- 534: {
- special: "Amplifies the effect of orbs by 1.5x for 1 turn, deals 20x character's ATK in QCK damage to one enemy",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Swallow Bond En Avant: Blossom",
- captain: "Boosts ATK of QCK characters by 2x"
- },
- 535: {
- special: "Reduces damage received by 50% for 2 turns, boosts RCV of all characters by 2x for 2 turns",
- specialName: "Mirage Tempo Fata Morgana: Blossom",
- captain: "Boosts RCV of DEX characters by 1.5x"
- },
- 536: {
- special: "Reduces damage received by 50% for 2 turns, boosts RCV of all characters by 2x for 2 turns",
- specialName: "Mirage Tempo Fata Morgana: Blossom",
- captain: "Boosts RCV of DEX characters by 2x"
- },
- 537: {
- special: "Reduces Bind and Silence duration by 1 turn, locks all orbs for 1 turn",
- specialName: "Sea Stone Handcuffs",
- captain: "Boosts chain multiplier by 2x"
- },
- 538: {
- special: "Reduces Bind and Silence duration by 1 turn, locks all orbs for 1 turn",
- specialName: "Sea Stone Handcuffs",
- captain: "Boosts chain multiplier by 2x, recovers 2x character's RCV in HP at the end of each turn"
- },
- 539: {
- special: "Changes own orb into [STR], deals 25x character's ATK in STR damage to one enemy",
- specialName: "Bashful Prison Beast's Metal Rod"
- },
- 540: {
- special: "Boosts chances of getting [DEX] orbs for 2 turns",
- specialName: "Deadly Glare"
- },
- 541: {
- special: "Greatly reduces chances of getting [PSY], [INT], [TND] and [RCV] slots for 5 turns",
- specialName: "White Thorn Deathmatch",
- captain: "Boosts ATK of STR characters by 2.5x if HP is below 50% at the start of the turn"
- },
- 542: {
- special: "Boosts RCV of all characters by 2x for 1 turn",
- specialName: "Roar of the Ruler of the Sky",
- captain: "Boosts HP of all characters by 1.5x"
- },
- 543: {
- special: "Reduces crew's current HP by 50%, deals 50x character's ATK in DEX damage to one enemy",
- specialName: "Reject",
- captain: "Boosts ATK and HP of Shooter characters by 1.5x, reduces crew's RCV to 0"
- },
- 544: {
- special: "Reduces crew's current HP by 50%, deals 50x character's ATK in DEX damage to one enemy",
- specialName: "Reject",
- captain: "Boosts ATK of Shooter characters by 2.25x and their HP by 1.5x, reduces crew's RCV to 0"
- },
- 545: {
- special: "Deals 6,000 fixed damage to all enemies, boosts ATK of PSY characters by 1.5x for 1 turn",
- specialName: "60,000,000 Volt Jamboule",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK of PSY characters by 2x"
- },
- 546: {
- special: "Deals 6,000 fixed damage to all enemies, boosts ATK of PSY characters by 1.5x for 1 turn",
- specialName: "60,000,000 Volt Jamboule",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK of PSY characters by 2x, reduces damage received by 20%"
- },
- 547: {
- special: "Reduces crew's current HP by 10%, deals 1x character's ATK in STR damage to one enemy, protects from defeat as long as HP is above 50% for 1 turn",
- specialName: "Crazy Punk Kid Punch",
- specialNotes: "#{zombie}",
- captain: "Boosts chances of getting [RCV] orbs"
- },
- 548: {
- special: "Reduces crew's current HP by 10%, deals 1x character's ATK in STR damage to one enemy, protects from defeat as long as HP is above 50% for 1 turn",
- specialName: "Crazy Punk Kid Punch",
- specialNotes: "#{zombie}",
- captain: "Boosts chances of getting [RCV] orbs, boosts ATK of all characters by 1.2x"
- },
- 549: {
- special: "Boosts ATK against enemies with reduced defense by 1.3x for 3 turns",
- specialName: "Arousal Manifesto - Red Demon Whip",
- captain: "Boosts ATK by 2x after scoring 3 Perfects in a row"
- },
- 550: {
- special: "Boosts ATK against enemies with reduced defense by 1.3x for 3 turns",
- specialName: "Arousal Manifesto - Red Demon Whip",
- captain: "Boosts ATK by 2.5x after scoring 3 Perfects in a row"
- },
- 551: {
- special: "Reduces damage received by 50% for 1 turn, deals 15x character's ATK in STR damage to one enemy",
- specialName: "Uncompromising Prison Beast's Morning Star"
- },
- 552: {
- special: "Reduces the defense of all enemies by 100% for 1 turn",
- specialName: "Cursed Shout"
- },
- 553: {
- special: "Changes adjacent orbs into [DEX], deals 1,000 fixed damage to all enemies",
- specialName: "Ashura Ugui",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK of DEX characters by 2.75x if HP is below 30% at the start of the turn"
- },
- 554: {
- special: "Changes adjacent orbs into [DEX], deals 1,000 fixed damage to all enemies",
- specialName: "Ashura Ugui",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK of DEX characters by 3x if HP is below 30% at the start of the turn"
- },
- 555: {
- special: "Delays all enemies for 3 turns, cuts the current HP of each enemy by 10%",
- specialName: "Heavenly Dragon Star",
- captain: "Boosts ATK of Shooter characters by 2x"
- },
- 556: {
- special: "Delays all enemies for 3 turns, cuts the current HP of each enemy by 10%",
- specialName: "Heavenly Dragon Star",
- captain: "Boosts ATK of Shooter characters by 2x and their RCV by 1.5x"
- },
- 557: {
- special: "Boosts chances of getting [INT] orbs for 3 turns",
- specialName: "Ochenta Fleur - Cuatro Manus Shock",
- captain: "Boosts ATK and RCV of INT characters by 1.5x"
- },
- 558: {
- special: "Boosts chances of getting [INT] orbs for 3 turns",
- specialName: "Ochenta Fleur - Cuatro Manus Shock",
- captain: "Boosts ATK and RCV of INT characters by 2x"
- },
- 559: {
- special: "Changes own orb into [STR], amplifies the effect of orbs by 1.5x for 2 turns",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Roar! Zarley Davison",
- captain: "Boosts ATK of STR characters by 2x, deals 2x character's ATK in STR damage to all enemies at the end of each turn"
- },
- 560: {
- special: "Changes own orb into [STR], amplifies the effect of orbs by 1.5x for 2 turns",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Roar! Zarley Davison",
- captain: "Boosts ATK of STR characters by 2.25x, deals 2x character's ATK in STR damage to all enemies at the end of each turn"
- },
- 561: {
- special: "Reduces crew's current HP by 40%, deals 15x the amount of HP subtracted in typeless damage to all enemies, locks all orbs for 1 turn",
- specialName: "Great Flame Commandment: Flame Emperor",
- captain: "Boosts HP of Shooter characters by 1.5x and their ATK by 3x if they have a matching orb, by 2x otherwise"
- },
- 562: {
- special: "Reduces crew's current HP by 40%, deals 15x the amount of HP subtracted in typeless damage to all enemies, locks all orbs for 1 turn",
- specialName: "Great Flame Commandment: Flame Emperor",
- captain: "Boosts HP of Shooter characters by 1.5x and their ATK by 3x if they have a matching orb, by 2x otherwise"
- },
- 563: {
- special: "Deal 3x character's ATK in PSY damage to one enemy, changes [INT] orbs into [RCV] orbs",
- specialName: "Cutie Baton"
- },
- 564: {
- special: "Reduces Bind duration by 2 turns",
- specialName: "Sea Surface Split"
- },
- 565: {
- special: "Deals 5,000 fixed damage to one enemy",
- specialName: "Hamburger Hammer",
- specialNotes: "#{fixed}"
- },
- 566: {
- special: "Empties all slots with [BLOCK] orbs",
- specialName: "Wipeout Tackle"
- },
- 567: {
- special: "Reduces Bind and Silence duration by 1 turn, deals STR damage to all enemies",
- specialName: "Mudfish Coaster"
- },
- 568: {
- special: "Delays all enemies for 2 turns, reduces the defense of all enemies by 50% for 2 turns, switches orbs between slots twice",
- specialName: "Slow Slow Beam",
- captain: "Boosts ATK, HP and RCV of all characters by 1.25x"
- },
- 569: {
- special: "Delays all enemies for 2 turns, reduces the defense of all enemies by 50% for 2 turns, switches orbs between slots twice",
- specialName: "Slow Slow Beam",
- captain: "Boosts ATK, HP and RCV of all characters by 1.5x, reduces cooldown of all specials by 1 turn at the start of the fight"
- },
- 570: {
- special: "Changes [BLOCK] orbs into [STR], deals 20x character's ATK in STR damage to one enemy",
- specialName: "Gum-Gum Flail",
- captain: "Boosts ATK of STR and Fighter characters by 1.5x",
- captainNotes: "The bonus is cumulative. STR Fighter characters get a 2.25x bonus."
- },
- 571: {
- special: "Changes [BLOCK] orbs into [STR], deals 20x character's ATK in STR damage to one enemy",
- specialName: "Gum-Gum Flail",
- captain: "Boosts ATK of STR and Fighter characters by 1.5x, reduces cooldown of all specials by 1 turn at the start of the fight",
- captainNotes: "The bonus is cumulative. STR Fighter characters get a 2.25x bonus."
- },
- 572: {
- special: "Boosts ATK of Fighter characters by 2x for 1 turn, binds himself for 15 turns",
- specialName: "Roar of Mettle",
- captain: "Boosts ATK of Fighter characters by 2.5x if HP is above 99% at the start of the turn"
- },
- 573: {
- special: "Reduces Silence duration by 2 turns, recovers 10x character's RCV in HP",
- specialName: "Manly Support",
- captain: "Boosts RCV of all characters by 1.2x"
- },
- 574: {
- special: "Boosts ATK of Striker characters by 1.75x for 2 turns, locks all orbs for 2 turns",
- specialName: "Ice Block - Pheasant Beak",
- captain: "Boosts ATK of Striker characters by 2x"
- },
- 575: {
- special: "Boosts ATK of Striker characters by 1.75x for 2 turns, locks all orbs for 2 turns",
- specialName: "Ice Block - Pheasant Beak",
- captain: "Boosts ATK and HP of Striker characters by 2x"
- },
- 576: {
- special: "Changes [PSY] orbs into [INT] orbs, boosts RCV of all characters by 1.5x for 1 turn",
- specialName: "Fine Tempo - Tea Time Show",
- captain: "Boosts ATK of all characters by 1.5x, boosts RCV of all characters by 1.2x"
- },
- 577: {
- special: "Deals random typeless damage to all enemies, changes own orb into [STR]",
- specialName: "Gum-Gum Jet Gatling",
- specialNotes: "#{random : 70,000 : 200,000}",
- captain: "Boosts ATK by 4x following a chain of Good > Great > Perfect hits"
- },
- 578: {
- special: "Deals random typeless damage to all enemies, changes own orb into [STR]",
- specialName: "Gum-Gum Jet Gatling",
- specialNotes: "#{random : 70,000 : 200,000}",
- captain: "Boosts ATK by 4x following a chain of Good > Great > Perfect hits"
- },
- 579: {
- special: "Randomly changes [BLOCK] orbs into either [QCK] or [DEX] orbs, deals 15x character's ATK in QCK damage to all enemies",
- specialName: "Dragon Twister",
- captain: "Boosts ATK of QCK and DEX characters by 1.5x"
- },
- 580: {
- special: "Randomly changes [BLOCK] orbs into either [QCK] or [DEX] orbs, deals 15x character's ATK in QCK damage to all enemies",
- specialName: "Dragon Twister",
- captain: "Boosts ATK of QCK and DEX characters by 2x"
- },
- 581: {
- special: "Cuts the current HP of each enemy by 7%",
- specialName: "High-Caliber Bazooka",
- captain: "Boosts ATK of STR characters by 1.5x"
- },
- 582: {
- special: "Deals 10x character's ATK in QCK damage to one enemy, boosts ATK of QCK characters by 1.5x for 1 turn",
- specialName: "Burn Blade",
- captain: "Boosts ATK and HP of Striker characters by 1.5x"
- },
- 583: {
- special: "Changes own orb into [INT] and the captain's orb into [DEX], boosts RCV of Shooter characters by 300 units for 3 turns",
- specialName: "Disrupting Fire",
- captain: "Boosts ATK and RCV of Shooter characters by 1.5x"
- },
- 584: {
- special: "Reduces damage received from PSY enemies by 100% for 1 turn",
- specialName: "Mantra",
- captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, reduces ATK, HP and RCV of all characters by 90%"
- },
- 585: {
- special: "Changes the captain's orb into [PSY], recovers 9x character's RCV in HP",
- specialName: "The Bond Bellmere Left Us",
- captain: "Boosts RCV of PSY characters by 1.5x"
- },
- 586: {
- special: "Changes the captain's orb into [PSY], recovers 9x character's RCV in HP",
- specialName: "The Bond Bellmere Left Us",
- captain: "Boosts HP and RCV of PSY characters by 1.5x"
- },
- 587: {
- special: "Removes poison, reduces Bind and Seal duration by 2 turns",
- specialName: "Merciful Painkiller",
- captain: "Recovers 3x character's RCV in HP at the end of each turn"
- },
- 588: {
- special: "Removes poison, reduces Bind and Seal duration by 2 turns",
- specialName: "Merciful Painkiller",
- captain: "Recovers 5x character's RCV in HP at the end of each turn"
- },
- 589: {
- special: "Boosts ATK of Slasher characters by 1.5x for 1 turn",
- specialName: "Flag of the Rebellion",
- captain: "Boosts ATK of all characters by 1.5x, reduces HP and RCV of all characters by 80%"
- },
- 590: {
- special: "Boosts ATK of Slasher characters by 1.5x for 1 turn",
- specialName: "Flag of the Rebellion",
- captain: "Boosts ATK of all characters by 2x, reduces HP and RCV of all characters by 80%"
- },
- 596: {
- special: "Deals 20x character's ATK in STR damage to one enemy, reduces the defense of all enemies by 50% for 3 turns",
- specialName: "Rozeo Michelli",
- captain: "Boosts ATK of STR characters by 1.5x, recovers 500 HP at the end of each turn"
- },
- 597: {
- special: "Deals 20x character's ATK in STR damage to one enemy, reduces the defense of all enemies by 50% for 3 turns",
- specialName: "Rozeo Michelli",
- captain: "Boosts ATK of STR characters by 1.75x, recovers 750 HP at the end of each turn"
- },
- 598: {
- special: "Changes own orb into [INT], switches orbs between slots once",
- specialName: "Split Split Cannon",
- captain: "Boosts ATK of characters with fewer than 3 stars by 2.5x"
- },
- 599: {
- special: "Changes own orb into [INT], switches orbs between slots once",
- specialName: "Split Split Cannon",
- captain: "Boosts ATK of characters with fewer than 3 stars by 3x"
- },
- 600: {
- special: "Deals 15x character's ATK in PSY damage to one enemy, boosts ATK of PSY characters by 1.3x for 2 turns",
- specialName: "Sword Draw - Single Flash",
- captain: "Boosts ATK of PSY characters by 1.5x"
- },
- 601: {
- special: "Deals 15x character's ATK in PSY damage to one enemy, boosts ATK of PSY characters by 1.3x for 2 turns",
- specialName: "Sword Draw - Single Flash",
- captain: "Boosts ATK of PSY characters by 2x"
- },
- 602: {
- special: "Reduces crew's current HP by 90%, deals 20,000 fixed damage to all enemies, boosts ATK of QCK characters by 2x for 1 turn",
- specialName: "200,000,000 Volt Amaru",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK of QCK characters by 2x"
- },
- 603: {
- special: "Reduces crew's current HP by 90%, deals 20,000 fixed damage to all enemies, boosts ATK of QCK characters by 2x for 1 turn",
- specialName: "200,000,000 Volt Amaru",
- specialNotes: "#{fixed}",
- captain: "Boosts ATK of QCK characters by 2.25x, recovers 5x character's RCV in HP at the end of each turn"
- },
- 604: {
- special: "Cuts the current HP of each enemy by 10%, changes [QCK] orbs into [DEX] orbs",
- specialName: "Diable Jambe: Extra Hachis Hash",
- captain: "Boosts ATK of Fighter characters by 2x"
- },
- 605: {
- special: "Cuts the current HP of each enemy by 10%, changes [QCK] orbs into [DEX] orbs",
- specialName: "Diable Jambe: Extra Hachis Hash",
- captain: "Boosts ATK of Fighter characters by 2x, reduces damage received by 20%"
- },
- 606: {
- special: "Deals 20x character's ATK in DEX damage to one enemy, changes adjacent orbs into [RCV] orbs",
- specialName: "Red Leg Kick",
- captain: "Boosts ATK of Fighter characters by 2x if HP is above 50% at the start of the turn"
- },
- 607: {
- special: "Deals 20x character's ATK in DEX damage to one enemy, changes adjacent orbs into [RCV] orbs",
- specialName: "Red Leg Kick",
- captain: "Boosts ATK of Fighter characters by 2.5x if HP is above 50% at the start of the turn"
- },
- 608: {
- special: "For 1 turn, boosts the amount healed by RCV orbs by 1.5x, then 2x, then 2.5x from the third crew member onward",
- specialName: "Wicked Strength"
- },
- 609: {
- special: "Changes the captain's orb into [RCV] and randomizes every other orb",
- specialName: "Wicked Spirit"
- },
- 610: {
- special: "Changes [TND] orbs into [RCV] orbs",
- specialName: "[TND] Slot Change [RCV]"
- },
- 611: {
- special: "Changes adjacent orbs into [RCV] orbs",
- specialName: "[RCV] Slot Storm"
- },
- 612: {
- special: "Boosts ATK and RCV of all characters by 45 units for 1 turn, reduces damage received by 45% for 1 turn",
- specialName: "45-Degree Joy",
- captain: "Boosts ATK of Slasher characters by 1.5x"
- },
- 613: {
- special: "Boosts ATK and RCV of all characters by 45 units for 1 turn, reduces damage received by 45% for 1 turn",
- specialName: "45-Degree Joy",
- captain: "Boosts ATK, HP and RCV of Slasher characters by 1.5x"
- },
- 614: {
- special: "Reduces the defense of all enemies by 50% for 1 turn, deals 10x character's ATK in PSY damage to all enemies",
- specialName: "Demolisher Chop",
- captain: "Boosts ATK of characters with cost 20 or less by 2.25x if HP is below 30% at the start of the turn"
- },
- 615: {
- special: "Deals random STR damage to one enemy",
- specialName: "Demolisher Axe"
- },
- 616: {
- special: "Changes the captain's orb into STR",
- specialName: "Demolisher Spear"
- },
- 617: {
- special: "Boosts ATK of Shooter characters by 1.2x for 1 turn",
- specialName: "Demolisher Cannon"
- },
- 618: {
- special: "Deals 20x character's ATK in STR damage to one enemy",
- specialName: "Mach Punch"
- },
- 619: {
- special: "Cuts the current HP of each enemy by 5%",
- specialName: "Slight Break"
- },
- 620: {
- special: "Changes [INT] orbs into [QCK] orbs",
- specialName: "[INT] Slot Change [QCK]"
- },
- 621: {
- special: "Changes [INT] orbs into [STR] orbs",
- specialName: "[INT] Slot Change [STR]"
- },
- 622: {
- special: "Boosts RCV of all characters by 100 units for 3 turns",
- specialName: "Patch Job"
- },
- 623: {
- special: "Recovers 3x character's RCV in HP at the end of each turn for 5 turns",
- specialName: "Auto Repair"
- },
- 624: {
- special: "Slightly boosts chances of getting [PSY] orbs for 3 turns",
- specialName: "Slot Rate Up [PSY]"
- },
- 625: {
- special: "Slightly boosts chances of getting [INT] orbs for 3 turns",
- specialName: "Slot Rate Up [INT]"
- },
- 626: {
- special: "Deals 13x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Burst"
- },
- 627: {
- special: "Randomizes all orbs",
- specialName: "Slot Shuffle"
- },
- 628: {
- special: "Deals 15,000 fixed damage to one enemy",
- specialName: "Keel Crusher",
- specialNotes: "#{fixed}"
- },
- 629: {
- special: "Empties all slots including those with [BLOCK] orbs, deals random INT damage to all enemies",
- specialName: "Master Nail",
- captain: "Boosts ATK of characters with 3 or fewer stars by 2x"
- },
- 630: {
- special: "Randomly changes all orbs into either [QCK] or [DEX] orbs, deals random QCK damage to all enemies",
- specialName: "Tempest Kick: Slaughter",
- captain: "Boosts ATK of Slasher characters by 1.5x"
- },
- 631: {
- special: "Randomly changes all orbs into either [QCK] or [DEX] orbs, deals random QCK damage to all enemies",
- specialName: "Tempest Kick: Slaughter",
- captain: "Boosts ATK of Slasher characters by 2x"
- },
- 632: {
- special: "Randomly changes all orbs into either [STR], [PSY] or [INT] orbs, deals random STR damage to all enemies, reduces the defense of all enemies by 50% for 2 turns",
- specialName: "Finger Pistol: Yellow Lotus",
- captain: "Boosts ATK of Fighter characters by 1.5x"
- },
- 633: {
- special: "Randomly changes all orbs into either [STR], [PSY] or [INT] orbs, deals random STR damage to all enemies, reduces the defense of all enemies by 50% for 2 turns",
- specialName: "Finger Pistol: Yellow Lotus",
- captain: "Boosts ATK of Fighter characters by 2x"
- },
- 634: {
- special: "Boosts chances of getting [QCK] and [PSY] orbs for 3 turns, boosts ATK of QCK and PSY characters by 1.2x for 3 turns",
- specialName: "Guiding Mermaid Voice",
- captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK and RCV of QCK and PSY characters by 1.25x"
- },
- 635: {
- special: "Boosts chances of getting [QCK] and [PSY] orbs for 3 turns, boosts ATK of QCK and PSY characters by 1.2x for 3 turns",
- specialName: "Guiding Mermaid Voice",
- captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK and RCV of QCK and PSY characters by 1.5x"
- },
- 636: {
- special: "Binds himself for 3 turns, reduces damage received by 50% for 3 turns, recovers 3.5x character's RCV in HP at the end of each turn for 3 turns",
- specialName: "Wretched Ballade",
- captain: "Boosts ATK of characters with cost 2 or less by 3x"
- },
- 637: {
- special: "Cuts the current HP of each enemy by 8%, boosts ATK against enemies with increased defense by 1.3x for 1 turn",
- specialName: "Hachi Ink Jet",
- captain: "Recovers 618 HP at the end of each turn, boosts ATK of Slasher characters by 1.5x"
- },
- 638: {
- special: "Changes [PSY] and [INT] orbs into [QCK] orbs, reduces Bind duration by 1 turn",
- specialName: "Bohemian Reverse Slash",
- captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of Slasher characters by 2x"
- },
- 639: {
- special: "Changes [PSY] and [INT] orbs into [QCK] orbs, reduces Bind duration by 1 turn",
- specialName: "Bohemian Reverse Slash",
- captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Slasher characters by 2x"
- },
- 640: {
- special: "Changes own orb into [DEX], deals several times the character's ATK in DEX damage to one enemy",
- specialNotes: "#{specialProportional : lower : 50 * ( 1 - (remaining HP) / (total HP) )}",
- specialName: "Pirate Brothers: Twin Strike",
- captain: "Boosts ATK of Fighter characters by 2x, deals 2x character's ATK in DEX damage to all enemies at the end of each turn"
- },
- 641: {
- special: "Changes own orb into [DEX], deals several times the character's ATK in DEX damage to one enemy",
- specialNotes: "#{specialProportional : lower : 50 * ( 1 - (remaining HP) / (total HP) )}",
- specialName: "Pirate Brothers: Twin Strike",
- captain: "Boosts ATK of Fighter characters by 2.25x, deals 2x character's ATK in DEX damage to all enemies at the end of each turn"
- },
- 642: {
- special: "Reduces crew's current HP by 30%, deals 10x character's ATK in fixed damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
- specialNotes: "#{fixed} #{orb : 1.75x}",
- specialName: "Raging Greatsword",
- captain: "Boosts ATK of PSY characters by 2.5x if HP is below 30% at the start of the turn"
- },
- 643: {
- special: "Reduces crew's current HP by 30%, deals 10x character's ATK in fixed damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
- specialNotes: "#{fixed} #{orb : 1.75x}",
- specialName: "Raging Greatsword",
- captain: "Boosts ATK of PSY characters by 3x if HP is below 30% at the start of the turn"
- },
- 644: {
- special: "Reduces Bind and Silence duration by 2 turns, boosts ATK against delayed enemies by 1.2x for 3 turns",
- specialName: "Witch's Icebreaker",
- captain: "Boosts ATK of INT characters by 2x"
- },
- 645: {
- special: "Reduces Bind and Silence duration by 2 turns, boosts ATK against delayed enemies by 1.2x for 3 turns",
- specialName: "Witch's Icebreaker",
- captain: "Boosts ATK of INT characters by 2.5x"
- },
- 646: {
- special: "Deals 20x character's ATK in STR damage to all enemies, boosts chances of getting [STR] orbs for 3 turns",
- specialName: "Vanguard Breaker",
- captain: "Boosts ATK of Shooter characters by 2.5x if HP is below 30% at the start of the turn"
- },
- 647: {
- special: "Deals 20x character's ATK in STR damage to all enemies, boosts chances of getting [STR] orbs for 3 turns",
- specialName: "Vanguard Breaker",
- captain: "Boosts ATK of Shooter characters by 2.75x if HP is below 30% at the start of the turn"
- },
- 648: {
- special: "Recovers 100x character's RCV in HP, amplifies the effect of orbs by 1.5x for 2 turns",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Blue Flame Kick",
- captain: "Reduces damage received by 30% if HP is above 70% at the start of the turn, boosts ATK of QCK and PSY characters by 2.75x if HP is above 70% at the start the turn"
- },
- 649: {
- special: "Recovers 100x character's RCV in HP, amplifies the effect of orbs by 1.5x for 2 turns",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Blue Flame Kick",
- captain: "Reduces damage received by 30% if HP is above 70% at the start of the turn, boosts ATK of QCK and PSY characters by 2.75x if HP is above 70% at the start the turn"
- },
- 650: {
- special: "Deals 5,000 fixed damage to one enemy, amplifies the effect of orbs by 1.5x for 1 turn",
- specialNotes: "#{fixed} #{orb : 1.5x}",
- specialName: "Thunder Lance Tempo",
- captain: "Boosts ATK of INT characters by 2x and their RCV by 1.5x"
- },
- 651: {
- special: "Deals 5,000 fixed damage to one enemy, amplifies the effect of orbs by 1.5x for 1 turn",
- specialNotes: "#{fixed} #{orb : 1.5x}",
- specialName: "Thunder Lance Tempo",
- captain: "Boosts ATK of INT characters by 2x and their RCV by 1.5x"
- },
- 652: {
- special: "Cuts the current HP of each enemy by 20%, reduces damage received by 50% for 1 turn",
- specialName: "Heart-Smashing Horn",
- captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of DEX characters by 2x if they have matching orbs"
- },
- 653: {
- special: "Cuts the current HP of each enemy by 20%, reduces damage received by 50% for 1 turn",
- specialName: "Heart-Smashing Horn",
- captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of DEX characters by 2.25x if they have matching orbs"
- },
- 654: {
- special: "Cuts the current HP of each enemy by 20%, reduces damage received by 50% for 1 turn",
- specialName: "Heart-Smashing Horn",
- captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of DEX characters by 2.75x if they have matching orbs"
- },
- 655: {
- special: "Changes [EMPTY] and [TND] orbs into [STR] orbs, deals 10x character's ATK in STR damage to one enemy, amplifies the effect of orbs by 1.25x for 2 turns",
- specialNotes: "#{orb : 1.25x}",
- specialName: "Tooth Gum",
- captain: "Boosts ATK of STR characters by 1.5x"
- },
- 656: {
- special: "Changes [EMPTY] and [TND] orbs into [STR] orbs, deals 10x character's ATK in STR damage to one enemy, amplifies the effect of orbs by 1.25x for 2 turns",
- specialNotes: "#{orb : 1.25x}",
- specialName: "Tooth Gum",
- captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of STR characters by 2x"
- },
- 657: {
- special: "Randomly changes [INT] and [PSY] orbs into either [STR] or [EMPTY] orbs",
- specialName: "Forearm Sledge",
- captain: "Boosts ATK of Fighter characters by 1.5x"
- },
- 658: {
- special: "Randomly changes all orbs into either [INT] or [PSY] orbs",
- specialName: "Lipowertzer",
- captain: "Boosts ATK of Shooter characters by 1.5x"
- },
- 659: {
- special: "Reduces Bind and Silence duration by 2 turns, reduces damage received by 50% for 2 turns",
- specialName: "Gum-Gum Balloon Swim",
- captain: "Boosts ATK by 2.5x after scoring 3 Perfects in a row"
- },
- 660: {
- special: "Delays all enemies for 2 turns, reduces the defense of all enemies by 50% for 2 turns",
- specialName: "Atlas Comet",
- captain: "Boosts ATK of Shooter characters by 2x"
- },
- 661: {
- special: "Delays all enemies for 2 turns, reduces the defense of all enemies by 50% for 2 turns",
- specialName: "Atlas Comet",
- captain: "Boosts ATK of Shooter characters by 2x, reduces cooldown of all specials by 1 turn at the start of the fight"
- },
- 662: {
- special: "Deals 13x character's ATK in PSY damage to one enemy, randomizes all orbs other than [PSY]",
- specialName: "Tornado Tempo - Beach Side",
- captain: "Boosts ATK of PSY characters by 2x"
- },
- 663: {
- special: "Deals several times the character's ATK in PSY damage to one enemy, recovers 5x character's RCV in HP at the end of each turn for 5 turns",
- specialNotes: "The exact damage is proportional to the crew's remaining HP and is higher the lower the HP is. The formula used is 80000 * (1 - (current HP) / (total HP))",
- specialName: "Vivi's Important Security Guard",
- captain: "Recovers 2x character's RCV in HP at the end of each turn"
- },
- 664: {
- special: "Deals several times the character's ATK in PSY damage to one enemy, recovers 5x character's RCV in HP at the end of each turn for 5 turns",
- specialNotes: "The exact damage is proportional to the crew's remaining HP and is higher the lower the HP is. The formula used is 80000 * (1 - (current HP) / (total HP))",
- specialName: "Vivi's Important Security Guard",
- captain: "Recovers 3x character's RCV in HP at the end of each turn"
- },
- 665: {
- special: "Changes own orb into [QCK], boosts ATK against enemies with reduced defense by 1.3x for 2 turns",
- specialName: "Let's Go! Suna Suna Clan!!",
- captain: "Boosts ATK of all characters by 1.2x, reduces HP and RCV of all characters by 80%"
- },
- 666: {
- special: "Changes own orb into [QCK], boosts ATK against enemies with reduced defense by 1.3x for 2 turns",
- specialName: "Let's Go! Suna Suna Clan!!",
- captain: "Boosts ATK of all characters by 1.75x, reduces HP and RCV of all characters by 80%"
- },
- 667: {
- special: "Protects from defeat as long as HP is above 50% for 1 turn",
- specialName: "King's Chopper",
- specialNotes: "#{zombie}",
- captain: "Reduces damage received by 10%, boosts ATK of all characters by 1.5x"
- },
- 668: {
- special: "Boosts ATK of Freedom characters by 1.5x for 1 turn. If during that turn every unit scores a Perfect hit, boosts ATK of Freedom characters by 2x in the following turn.",
- specialName: "Dragon's Claw",
- captain: "Boosts HP and RCV of all characters by 1.2x, boosts ATK of Freedom characters proportionally to the crew's current HP",
- captainNotes: "#{captainProportional : higher : 2 + 0.75 * (remaining HP) / (total HP) : 2.75 : 2}"
- },
- 669: {
- special: "Boosts ATK of Freedom characters by 1.5x for 1 turn. If during that turn every unit scores a Perfect hit, boosts ATK of Freedom characters by 2x in the following turn.",
- specialName: "Dragon's Claw",
- captain: "Boosts HP and RCV of all characters by 1.2x, boosts ATK of Freedom characters proportionally to the crew's current HP",
- captainNotes: "#{captainProportional : higher : 2 + 0.75 * (remaining HP) / (total HP) : 2.75 : 2}"
- },
- 670: {
- special: "Boosts ATK of Fighter characters by 1.75x for 1 turn",
- specialName: "Fishman Karate! True Fist Thrust of the Revolutionaries",
- captain: "Boosts ATK of Fighter characters by 2x"
- },
- 671: {
- special: "Boosts ATK of Fighter characters by 1.75x for 1 turn",
- specialName: "Fishman Karate! True Fist Thrust of the Revolutionaries",
- captain: "Boosts ATK of Fighter characters by 2.25x and their RCV by 1.5x"
- },
- 672: {
- special: "Cuts the current HP of each enemy by 20%, changes own orb into [STR]",
- specialName: "Four Thousand Tile True Punch",
- captain: "Boosts ATK of Fighter characters by 2x"
- },
- 673: {
- special: "Cuts the current HP of each enemy by 20%, changes own orb into [STR]",
- specialName: "Four Thousand Tile True Punch",
- captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Fighter characters by 2x"
- },
- 674: {
- special: "Removes poison, reduces damage received by 50% for 2 turns, recovers 13x character's RCV in HP at the end of each turn for 2 turns",
- specialName: "Emporio Healing Hormone",
- captain: "Boosts ATK of Freedom characters by 2x"
- },
- 675: {
- special: "Removes poison, reduces damage received by 50% for 2 turns, recovers 13x character's RCV in HP at the end of each turn for 2 turns",
- specialName: "Emporio Healing Hormone",
- captain: "Boosts ATK of Freedom characters by 2.5x"
- },
- 676: {
- special: "Reduces any damage received above 5,000 HP by 97% for 3 turns",
- specialNotes: "The exact formula for the damage received is: 5000 + ((total damage) - 5000) * 0.03",
- specialName: "KEEP OUT",
- captain: "Boosts ATK of Slasher characters by 1.5x, deals 5x character's ATK in QCK damage to all enemies at the end of each turn"
- },
- 677: {
- special: "Reduces any damage received above 5,000 HP by 97% for 3 turns",
- specialNotes: "The exact formula for the damage received is: 5000 + ((total damage) - 5000) * 0.03",
- specialName: "KEEP OUT",
- captain: "Boosts ATK of Slasher characters by 1.5x, deals 5x character's ATK in QCK damage to all enemies at the end of each turn"
- },
- 678: {
- special: "Reduces damage received by 50% for 1 turn, locks all orbs for 1 turn",
- specialName: "Cien Fleur Spider Net",
- captain: "Boosts ATK and RCV of PSY characters by 1.2x, boosts chances of getting [PSY] orbs"
- },
- 679: {
- special: "Reduces damage received by 50% for 1 turn, locks all orbs for 1 turn",
- specialName: "Cien Fleur Spider Net",
- captain: "Boosts ATK and RCV of PSY characters by 1.5x, boosts chances of getting [PSY] orbs"
- },
- 680: {
- special: "Recovers 5x character's RCV in HP, boosts ATK and RCV of DEX characters by 1.25x for 2 turns",
- specialName: "Midsummer Relax Time"
- },
- 681: {
- special: "Recovers 5x character's RCV in HP, boosts ATK and RCV of DEX characters by 1.25x for 2 turns",
- specialName: "Midsummer Relax Time",
- captain: "Boosts ATK and RCV of Striker characters by 1.5x"
- },
- 682: {
- special: "Recovers 2,561 HP, reduces damage received by 50% for 2 turns",
- specialName: "Transcendental Serenity Healing"
- },
- 683: {
- special: "Recovers 2,561 HP, reduces damage received by 50% for 2 turns",
- specialName: "Transcendental Serenity Healing",
- captain: "Boosts ATK and RCV of Fighter characters by 1.5x"
- },
- 684: {
- special: "Recovers 3x character's RCV in HP, reduces damage received by 80% for 1 turn",
- specialName: "Romantic Ghost"
- },
- 685: {
- special: "Recovers 3x character's RCV in HP, reduces damage received by 80% for 1 turn",
- specialName: "Romantic Ghost",
- captain: "Boosts ATK and RCV of Shooter characters by 1.5x"
- },
- 686: {
- special: "Delays all enemies for 1 turn, recovers 3x character's RCV in HP at the end of each turn for 3 turns",
- specialName: "Captivating Perfume Dance - Relaxation",
- captain: "Boosts ATK and RCV of Slasher characters by 1.5x"
- },
- 687: {
- special: "Deals 13x character's ATK in STR damage to all enemies, boosts ATK of Freedom characters by 1.3x for 1 turn",
- specialName: "First Spear of the Battle",
- captain: "Boosts ATK of Freedom characters by 1.5x"
- },
- 688: {
- special: "Deals 13x character's ATK in STR damage to all enemies, boosts ATK of Freedom characters by 1.3x for 1 turn",
- specialName: "First Spear of the Battle",
- captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of Freedom characters by 2x"
- },
- 689: {
- special: "Amplifies the effect of orbs by 1.5x for 2 turns",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Botanist's Great Discovery",
- captain: "Boosts ATK and RCV of Slasher characters by 1.2x"
- },
- 690: {
- special: "Amplifies the effect of orbs by 1.5x for 2 turns",
- specialNotes: "#{orb : 1.5x}",
- specialName: "Botanist's Great Discovery",
- captain: "Boosts ATK and RCV of Slasher characters by 1.5x"
- },
- 691: {
- special: "Changes [PSY] orbs into [DEX] orbs",
- specialName: "[PSY] Slot Change [DEX]"
- },
- 692: {
- special: "Changes [PSY] orbs into [QCK] orbs",
- specialName: "[PSY] Slot Change [QCK]"
- },
- 693: {
- special: "Changes [DEX] orbs into [PSY] orbs",
- specialName: "[DEX] Slot Change [PSY]"
- },
- 694: {
- special: "Deals 13x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Burst"
- },
- 695: {
- special: "Cuts the current HP of each enemy by 5%",
- specialName: "Slight Break"
- },
- 696: {
- special: "Changes [PSY] orbs into [DEX] orbs",
- specialName: "[PSY] Slot Change [DEX]",
- captain: "Boosts ATK of Striker characters by 1.75x"
- },
- 697: {
- special: "Changes [PSY] orbs into [QCK] orbs",
- specialName: "[PSY] Slot Change [QCK]",
- captain: "Boosts ATK of Shooter characters by 1.75x"
- },
- 698: {
- special: "Changes [DEX] orbs into [PSY] orbs",
- specialName: "[DEX] Slot Change [PSY]",
- captain: "Boosts ATK of Slasher characters by 1.75x"
- },
- 699: {
- special: "Deals 13x character's ATK in character's type damage to all enemies",
- specialName: "Hyper Burst",
- captain: "Boosts ATK of Shooter characters by 500 units, reduces damage received by 10%"
- },
- 700: {
- special: "Cuts the current HP of each enemy by 5%",
- specialName: "Slight Break",
- captain: "Boosts ATK of Fighter characters by 1.75x"
- },
- 701: {
- special: "Deals 15x character's ATK in PSY damage to all enemies, changes own orb into [PSY]",
- specialName: "Oimo Press",
- captain: "Boosts HP of PSY characters by 2.25x"
- },
- 702: {
- special: "Seals himself for 5 turns, reduces damage received by 30% for 5 turns",
- specialName: "Kashi Swing",
- captain: "Boosts HP of INT characters by 2.25x"
- },
- 703: {
- special: "Deals 5x character's ATK in QCK damage to all enemies",
- specialName: "Arm Claw of the Watchdog"
- },
- 704: {
- special: "Deals 9x character's ATK in STR damage to all enemies, reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Companion's Guilt"
- },
- 705: {
- special: "Randomly changes [PSY], [INT], [TND], [RCV] and [EMPTY] orbs into [STR], [DEX] or [QCK] orbs",
- specialName: "Guilty Verdict - \"Slow Death Penalty\"",
- captain: "Boosts ATK and HP of STR characters, DEX characters and QCK characters by 1.25x"
- },
- 706: {
- special: "Changes own orb and the captain's orb into [STR]",
- specialName: "Air Door",
- captain: "Boosts ATK of STR characters by 1.5x"
- },
- 707: {
- special: "Changes own orb and the captain's orb into [STR]",
- specialName: "Air Door",
- captain: "Boosts ATK and HP of STR characters by 1.5x"
- },
- 708: {
- special: "Reduces Bind and Silence duration by 3 turns",
- specialName: "Cien Fleur - Wing",
- captain: "Boosts ATK and RCV of PSY characters by 1.2x"
- },
- 709: {
- special: "Reduces Bind and Silence duration by 3 turns",
- specialName: "Cien Fleur - Wing",
- captain: "Boosts ATK and RCV of PSY characters by 1.5x"
- },
- 710: {
- special: "Empties all slots with [BLOCK] orbs, boosts ATK of Shooter characters by 1.25x for 3 turns, deals 15x character's ATK in PSY damage to all enemies",
- specialName: "Coup de Vent",
- captain: "Boosts ATK of Shooter characters by 1.5x"
- },
- 711: {
- special: "Empties all slots with [BLOCK] orbs, boosts ATK of Shooter characters by 1.25x for 3 turns, deals 15x character's ATK in PSY damage to all enemies",
- specialName: "Coup de Vent",
- captain: "Boosts ATK of Shooter characters by 2x"
- },
- 712: {
- special: "Deals 15x character's ATK in QCK damage to one enemy, boosts ATK of the characters in the top row by 1.5x for 2 turns",
- specialNotes: "The special boosts the attack of only the crew's captain and the currently selected friend captain.",
- specialName: "Sky Knight's Javelin",
- captain: "Boosts ATK of Striker characters by 2x if HP is above 50% at the start of the turn"
- },
- 713: {
- special: "Deals 15x character's ATK in QCK damage to one enemy, boosts ATK of the characters in the top row by 1.5x for 2 turns",
- specialNotes: "The special boosts the attack of only the crew's captain and the currently selected friend captain.",
- specialName: "Sky Knight's Javelin",
- captain: "Boosts ATK of Striker characters by 2.5x if HP is above 50% at the start of the turn"
- },
- 714: {
- special: "Randomizes slots with [STR], [QCK], [INT] or [PSY] orbs",
- specialName: "Pegasus' Neigh"
- },
- 715: {
- special: "Boosts ATK and RCV of Freedom characters by 1.5x for 2 turns, seals herself for 3 turns",
- specialName: "Angel's Harp - Healing",
- captain: "Boosts RCV of all characters by 2x if HP is below 30% at the start of the turn"
- },
- 716: {
- special: "Boosts ATK and RCV of Freedom characters by 1.5x for 2 turns, seals herself for 3 turns",
- specialName: "Angel's Harp - Healing",
- captain: "Boosts RCV of all characters by 5x if HP is below 30% at the start of the turn"
- },
- 717: {
- special: "Deals 50% of the damage dealt in the previous turn as typeless damage to all enemies",
- specialNotes: "The special only includes the damage inflicted through normal attacks.",
- specialName: "Black Sword - Lightning Slash",
- captain: "Boosts ATK of Slasher characters by a variable factor between 2x and 2.75x based on the timing of the attack of the previous unit in the chain",
- captainNotes: "A hit below Good or a Miss will boost the ATK of the next unit by 2x, a Good hit by 2.25x, a Great hit by 2.5x and a Perfect hit by 2.75x. This bonus is applied only to Slasher characters."
- },
- 718: {
- special: "Deals 50% of the damage dealt in the previous turn as typeless damage to all enemies",
- specialNotes: "The special only includes the damage inflicted through normal attacks.",
- specialName: "Black Sword - Lightning Slash",
- captain: "Boosts ATK of Slasher characters by a variable factor between 2x and 2.75x based on the timing of the attack of the previous unit in the chain",
- captainNotes: "A hit below Good or a Miss will boost the ATK of the next unit by 2x, a Good hit by 2.25x, a Great hit by 2.5x and a Perfect hit by 2.75x. This bonus is applied only to Slasher characters."
- },
- 719: {
- special: "Boosts ATK of Knowledge characters by a variable factor for 1 turn, deals 20x character's ATK in DEX damage to all enemies",
- specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 30% HP, the multiplier used is 1.5x; below 30% HP, it's 2x.",
- specialName: "Sables: Pesado",
- captain: "Boosts ATK of Knowledge characters proportionally to the crew's current HP",
- captainNotes: "#{captainProportional : lower : 1.5 + 1.75 * (1 - (remaining HP) / (total HP)) : 1.5 : 3.25}"
- },
- 720: {
- special: "Boosts ATK of Knowledge characters by a variable factor for 1 turn, deals 20x character's ATK in DEX damage to all enemies",
- specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 30% HP, the multiplier used is 1.5x; below 30% HP, it's 2x.",
- specialName: "Sables: Pesado",
- captain: "Boosts ATK of Knowledge characters proportionally to the crew's current HP",
- captainNotes: "#{captainProportional : lower : 1.5 + 1.75 * (1 - (remaining HP) / (total HP)) : 1.5 : 3.25}"
- },
- 721: {
- special: "Randomizes all orbs, including [BLOCK] orbs",
- specialName: "Screw Drop Kick",
- captain: "Boosts ATK of Fighter characters by 1.5x if HP is is above 99% at the start of the turn"
- },
- 722: {
- special: "Randomizes all orbs, including [BLOCK] orbs",
- specialName: "Screw Drop Kick",
- captain: "Boosts ATK of Fighter characters by 2x if HP is is above 99% at the start of the turn"
- },
- 723: {
- special: "Reduces crew's current HP by 80%, deals 5x the amount of HP subtracted in typeless damage to all enemies, reduces damage received by 90% for 1 turn",
- specialName: "Right Angle Flying Bird: Bone Phoenix",
- captain: "Boosts ATK of Slasher characters by 1.5x, recovers 1.2x character's RCV in HP at the end of each turn"
- },
- 724: {
- special: "Reduces crew's current HP by 80%, deals 5x the amount of HP subtracted in typeless damage to all enemies, reduces damage received by 90% for 1 turn",
- specialName: "Right Angle Flying Bird: Bone Phoenix",
- captain: "Boosts ATK of Slasher characters by 1.75x, recovers 1.5x character's RCV in HP at the end of each turn"
- },
- 725: {
- special: "Changes [TND] orbs into [QCK] orbs, switches orbs between slots twice",
- specialName: "Peacock String Slasher",
- captain: "Recovers 1,000 HP at the end of each turn"
- },
- 726: {
- special: "Changes [TND] orbs into [QCK] orbs, switches orbs between slots twice",
- specialName: "Peacock String Slasher",
- captain: "Recovers 2,000 HP at the end of each turn"
- },
- 727: {
- special: "Deals 10x character's ATK in DEX damage to all enemies, reduces the defense of all enemies by 50% for 1 turn",
- specialName: "Gum-Gum Gatling",
- captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of Freedom and Fighter characters by 1.75x"
- },
- 728: {
- special: "Randomizes all orbs, recovers 6x character's RCV in HP at the end of each turn for 3 turns",
- specialName: "Sheep Cloud Relaxing Bubbles",
- captain: "Boosts ATK and RCV of DEX characters by 1.2x, slightly boosts chances of getting [DEX] orbs"
- },
- 729: {
- special: "Randomizes all orbs, recovers 6x character's RCV in HP at the end of each turn for 3 turns",
- specialName: "Sheep Cloud Relaxing Bubbles",
- captain: "Boosts ATK and RCV of DEX characters by 1.2x, boosts chances of getting [DEX] orbs"
- },
- 730: {
- special: "Reduces crew's current HP by 99%, deals 2x the amount of HP subtracted in INT damage to all enemies, boosts ATK of INT characters by 1.5x for 1 turn",
- specialName: "Rankyaku - Lupus Fall",
- captain: "Boosts ATK and HP of INT characters by 1.2x, deals 9 HP as fixed damage to all enemies at the end of each turn",
- captainNotes: "#{fixed}"
- },
- 731: {
- special: "Reduces crew's current HP by 99%, deals 2x the amount of HP subtracted in INT damage to all enemies, boosts ATK of INT characters by 1.5x for 1 turn",
- specialName: "Rankyaku - Lupus Fall",
- captain: "Boosts ATK and HP of INT characters by 1.5x, deals 9 HP as fixed damage to all enemies at the end of each turn",
- captainNotes: "#{fixed}"
- },
- 732: {
- special: "Deals 13x character's ATK in STR damage to one enemy, reduces damage received by 50% for 1 turn",
- specialName: "Tekkai Dama",
- captain: "Boosts ATK of STR characters by 1.5x, reduces damage received by 10%"
- },
- 733: {
- special: "Deals 13x character's ATK in STR damage to one enemy, reduces damage received by 50% for 1 turn",
- specialName: "Tekkai Dama",
- captain: "Boosts ATK of STR characters by 1.5x, reduces damage received by 20%"
- },
- 734: {
- special: "For 1 turn, boosts the amount healed by RCV orbs by 1.5x, then 2x, then 2.5x from the third crew member onward",
- specialName: "Life Return - Digestion, Absorption",
- captain: "Boosts ATK and RCV of PSY characters by 1.2x"
- },
- 735: {
- special: "For 1 turn, boosts the amount healed by RCV orbs by 1.5x, then 2x, then 2.5x from the third crew member onward",
- specialName: "Life Return - Digestion, Absorption",
- captain: "Boosts ATK and RCV of PSY characters by 1.5x"
- },
- 736: {
- special: "Deals 20x character's ATK in STR damage to all enemies, changes [QCK] orbs into [STR] orbs",
- specialName: "Fierce Smash",
- captain: "Boosts ATK of Slasher characters by 2.5x if HP is above 50% at the start of the turn"
- },
- 737: {
- special: "Changes [RCV] orbs into [QCK] orbs, changes adjacent orbs into [QCK] orbs",
- specialName: "Shigan - Bachi",
- captain: "Boosts ATK of Fighter characters by 2.75x if HP is below 30% at the start of the turn"
- },
- 738: {
- special: "Deals 200x character's ATK in INT damage to one enemy",
- specialName: "Ivory Rush",
- captain: "Boosts ATK of characters with cost 21 or more by 2x"
- },
- 739: {
- special: "Reduces Bind duration by 5 turns, randomizes all orbs",
- specialName: "Coup de Boo",
- captain: "Boosts ATK of Freedom characters by 2x"
- },
- 740: {
- special: "Deals 10x character's ATK in QCK damage to all enemies, boosts ATK against enemies with increased defense by 1.3x for 2 turns",
- specialName: "Rankyaku - Sen",
- captain: "Reduces cooldown of all specials by 2 turns at the start of the fight"
- },
- 741: {
- special: "Deals 10x character's ATK in QCK damage to all enemies, boosts ATK against enemies with increased defense by 1.3x for 2 turns",
- specialName: "Rankyaku - Sen",
- captain: "Reduces cooldown of all specials by 3 turns at the start of the fight"
- },
- 742: {
- special: "Amplifies the effect of orbs by 1.25x for 2 turns, reduces the defense of all enemies by 80% for 2 turns",
- specialNotes: "#{orb : 1.25x}",
- specialName: "Ramen Beam",
- captain: "Boosts ATK and RCV of Freedom characters by 1.2x"
- },
- 743: {
- special: "Amplifies the effect of orbs by 1.25x for 2 turns, reduces the defense of all enemies by 80% for 2 turns",
- specialNotes: "#{orb : 1.25x}",
- specialName: "Ramen Beam",
- captain: "Boosts ATK and RCV of Freedom characters by 1.5x"
- },
- 744: {
- special: "Reduces damage received by 50% for 3 turns",
- specialName: "Flame Fence",
- captain: "Boosts ATK of Freedom characters by 2x"
- },
- 745: {
- special: "Reduces damage received by 50% for 3 turns",
- specialName: "Flame Fence",
- captain: "Boosts ATK of Freedom characters by 2.5x"
- },
- 746: {
- special: "Deals 10x character's ATK in QCK damage to all enemies, protects from defeat as long as HP is above 50% for 1 turn",
- specialName: "Megalo Assault!",
- specialNotes: "#{zombie}",
- captain: "Protects from defeat as long as HP is above 30%",
- captainNotes: "#{zombie}"
- },
- 747: {
- special: "Deals 35x character's ATK in STR damage to one enemy, boosts chances of getting matching orbs for 3 turns",
- specialName: "Rokuougan",
- captain: "Boosts ATK of Tough characters by 3x if they have a matching orb, by 2.5x otherwise, reduces crew's RCV to 0"
- },
- 748: {
- special: "Deals 35x character's ATK in STR damage to one enemy, boosts chances of getting matching orbs for 3 turns",
- specialName: "Rokuougan",
- captain: "Boosts ATK of Tough characters by 3x if they have a matching orb, by 2.5x otherwise, reduces crew's RCV to 0"
- },
- 749: {
- special: "Deals random DEX damage to all enemies, randomizes all orbs",
- specialName: "Rankyaku - Amane Dachi",
- captain: "Boosts ATK of DEX characters by 1.5x, boosts damage of DEX specials by 1.5x",
- captainNotes: "#{noFixedPerc}"
- },
- 750: {
- special: "Deals random DEX damage to all enemies, randomizes all orbs",
- specialName: "Rankyaku - Amane Dachi",
- captain: "Boosts ATK of DEX characters by 2x, boosts damage of DEX specials by 2x",
- captainNotes: "#{noFixedPerc}"
- },
- 751: {
- special: "Reduces damage received in the next turn by 50% if the special is activated with more than 50% health remaining, by 80% if activated with less than 50% but more than 10% health remaining, by 100% if activated with less than 10% health remaining",
- specialName: "Sheep Cloud Tidal Wave",
- captain: "Boosts ATK and RCV of Knowledge characters by 1.5x"
- },
- 752: {
- special: "Reduces damage received in the next turn by 50% if the special is activated with more than 50% health remaining, by 80% if activated with less than 50% but more than 10% health remaining, by 100% if activated with less than 10% health remaining",
- specialName: "Sheep Cloud Tidal Wave",
- captain: "Boosts ATK of Knowledge characters by 2.25x and their RCV by 1.5x"
- },
- 753: {
- special: "Deals 15x character's ATK in QCK damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
- specialNotes: "#{orb : 1.75x}",
- specialName: "Moonlight Ten Finger Pistol",
- captain: "Boosts ATK of Tough characters by 2x"
- },
- 754: {
- special: "Deals 15x character's ATK in QCK damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
- specialNotes: "#{orb : 1.75x}",
- specialName: "Moonlight Ten Finger Pistol",
- captain: "Boosts ATK of Tough characters by 2.5x"
- },
- 755: {
- special: "Reduces damage received by 50% for 1 turn, boosts ATK of Tough characters by 1.75x for 1 turn",
- specialName: "Tekkai - Rin",
- captain: "Boosts ATK of INT characters by 1.5x, reduces damage received from PSY enemies by 20%"
- },
- 756: {
- special: "Reduces damage received by 50% for 1 turn, boosts ATK of Tough characters by 1.75x for 1 turn",
- specialName: "Tekkai - Rin",
- captain: "Boosts ATK of INT characters by 2x, reduces damage received from PSY enemies by 30%"
- },
- 757: {
- special: "Changes [DEX] and [QCK] orbs into [PSY] orbs",
- specialName: "Solid Beast Supreme Technique: Owl Strike",
- captain: "Boosts ATK of PSY characters by 2x"
- },
- 758: {
- special: "Changes [DEX] and [QCK] orbs into [PSY] orbs",
- specialName: "Solid Beast Supreme Technique: Owl Strike",
- captain: "Boosts ATK of PSY characters by 2x, recovers 3x character's RCV in HP at the end of each turn"
- },
- 759: {
- special: "Switches orbs between slots 3 times, locks all orbs for 1 turn",
- specialName: "Life Return: Shishi Finger Pistol",
- captain: "Boosts ATK of STR characters by 2.5x if HP is below 30% at the start of the turn"
- },
- 760: {
- special: "Switches orbs between slots 3 times, locks all orbs for 1 turn",
- specialName: "Life Return: Shishi Finger Pistol",
- captain: "Boosts ATK of STR characters by 3x if HP is below 30% at the start of the turn"
- },
- 761: {
- special: "Deals 15x character's ATK in DEX damage to one enemy, boosts ATK of all characters by 1.2x for 1 turn",
- specialName: "Gum-Gum Monster Pistol",
- captain: "Boosts ATK of Fighter characters by 2x"
- },
- 762: {
- special: "Boosts ATK of PSY characters by 1.75x for 1 turn",
- specialName: "Impact Beast",
- captain: "Boosts ATK and RCV of PSY characters by 1.5x"
- },
- 763: {
- special: "Changes own orb into [STR], switches orbs between slots once",
- specialName: "Franken-Franky Centaur",
- captain: "Boosts ATK of STR characters by 2x"
- },
- 764: {
- special: "Recovers 3,000 HP",
- specialName: "Cat Burglar Trick",
- captain: "Boosts ATK and RCV of Striker characters by 1.5x"
- },
- 765: {
- special: "Reduces Silence duration by 3 turns",
- specialName: "Scope Magic",
- captain: "Recovers 2x character's RCV in HP at the end of each turn"
- },
- 766: {
- special: "Deals 7x character's ATK in QCK damage to all enemies, delays all enemies for 1 turn",
- specialName: "108 Pound Phoenix: Reaper",
- captain: "Boosts ATK of QCK characters by 2x"
- },
- 767: {
- special: {
- "japan": "Changes the orbs in the top row into [DEX] orbs, removes blindness",
- "global": "Changes the orbs in the top row into [DEX] orbs, reduces Silence duration by 1 turn"
- },
- specialName: "Ojos Fleur: Thriller",
- captain: "Boosts ATK and RCV of DEX characters by 1.5x"
- },
- 768: {
- special: "Recovers 15x character's RCV in HP, changes [TND] orbs into [RCV] orbs",
- specialName: "Hot Rock Stew: Party",
- captain: "Boosts ATK of PSY characters by 2x"
- },
- 769: {
- special: "Recovers 4,343 HP, poisons all enemies",
- specialNotes: "#{poison}",
- specialName: "Lullaby Parry: Horror",
- captain: "Boosts ATK and RCV of INT characters by 1.5x"
- },
- 770: {
- special: "Deals 15x character's ATK in STR damage to one enemy, boosts ATK against delayed enemies by 1.3x for 2 turns",
- specialName: "Shigan: Convergence",
- captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of STR characters by 2x"
- },
- 771: {
- special: "Deals 15x character's ATK in PSY damage to one enemy, boosts ATK of Knowledge characters by 1.75x for 1 turn",
- specialName: "Moonwalk: Air Walking",
- captain: "Boosts ATK of Knowledge characters by 2.5x"
- },
- 772: {
- special: "Cuts the current HP of each enemy by 10%, changes [PSY] and [INT] orbs into [DEX] orbs",
- specialName: "Eight-Sword Style: Brave Warrior's Continuous Attack",
- captain: "Boosts ATK of Slasher characters by 2x, reduces damage received from QCK enemies by 20%"
- },
- 773: {
- special: "Reduces any damage received above 3,000 HP by 80% for 1 turn",
- specialNotes: "The exact formula for the damage received is: 3000 + ((total damage) - 3000) * 0.2",
- specialName: "Rust-Rust Fruit",
- captain: "Reduces damage received by 20%"
- },
- 774: {
- special: "Randomly changes [TND], [RCV], [EMPTY], [BLOCK] and [BOMB] orbs into either [STR], [DEX], [QCK], [PSY] or [INT] orbs, switches orbs between slots 3 times",
- specialName: "Berry-Berry Fruit",
- captain: "Boosts ATK of Freedom characters by 2x"
- },
- 775: {
- special: "Deals several times the character's ATK in PSY damage to one enemy",
- specialNotes: "#{specialProportional : lower : 125 * ( 1 - (remaining HP) / (total HP) )}",
- specialName: "Angry Headbutt",
- captain: "Boosts ATK and HP of Knowledge characters by 1.5x"
- },
- 776: {
- specialName: "Boisterous Lucky Shot!!",
- special: "Recovers 5,000 HP, deals 15x character's ATK in PSY damage to one enemy, seals himself for 3 turns",
- captain: "Boosts ATK and RCV of PSY characters by 1.25x"
- },
- 777: {
- special: "Recovers 5,000 HP, deals 15x character's ATK in PSY damage to one enemy, seals himself for 3 turns",
- specialName: "Boisterous Lucky Shot!!",
- captain: "Boosts ATK and RCV of PSY characters by 1.75x"
- },
- 778: {
- special: "Deals several times the character's ATK in QCK damage to one enemy, changes own orb into [QCK]",
- specialNotes: "#{specialProportional : lower : 125 * ( 1 - (remaining HP) / (total HP) )}",
- specialName: "Undefeated Sword Technique",
- captain: "Reduces damage received by 20%"
- },
- 779: {
- special: "Deals several times the character's ATK in QCK damage to one enemy, changes own orb into [QCK]",
- specialNotes: "#{specialProportional : lower : 125 * ( 1 - (remaining HP) / (total HP) )}",
- specialName: "Undefeated Sword Technique",
- captain: "Reduces damage received by 25%"
- },
- 780: {
- special: "Boosts own ATK by a variable factor for 1 turn",
- specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 50% HP, the multiplier used is 1.5x; between 20% HP and 50% HP, it's 1.75x; below 20% HP, it's 2x.",
- specialName: "Precept Deification",
- captain: "Boosts ATK of all characters by 2x if HP is below 30% at the start of the turn"
- },
- 781: {
- special: "Boosts own ATK by a variable factor for 1 turn",
- specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 50% HP, the multiplier used is 1.5x; between 20% HP and 50% HP, it's 1.75x; below 20% HP, it's 2x.",
- specialName: "Precept Deification",
- captain: "Boosts ATK of all characters by 2.5x if HP is below 30% at the start of the turn"
- },
- 782: {
- special: "Delays all enemies for 1 turn, recovers a small random amount of HP",
- specialName: "Smile of a Natural Beauty",
- captain: "Boosts RCV of Slasher characters by 1.5x"
- },
- 783: {
- special: "Delays all enemies for 1 turn, recovers a small random amount of HP",
- specialName: "Smile of a Natural Beauty",
- captain: "Boosts ATK of Slasher characters by 2x and their RCV by 1.5x"
- },
- 784: {
- special: "Reduces Silence duration by 2 turns, removes blindness",
- specialName: "Yelling at Lascivious Young Women"
- },
- 785: {
- special: "Reduces Silence duration by 2 turns, removes blindness",
- specialName: "Yelling at Lascivious Young Women",
- captain: "Reduces damage received by 20%"
- },
- 786: {
- special: "Seals himself for 10 turns, delays all enemies for 1 turn, reduces damage received by 50% for 4 turns",
- specialName: "The Resolve to Face Death! \"Open Mind\""
- },
- 787: {
- special: "Seals himself for 10 turns, delays all enemies for 1 turn, reduces damage received by 50% for 4 turns",
- specialName: "The Resolve to Face Death! \"Open Mind\"",
- captain: "Reduces damage received by 50%, reduces crew's current HP by 10% at the end of each turn"
- },
- 788: {
- special: "Following the activation of the special, if every unit scores a Perfect hit, boosts ATK of Slasher characters by 1.75x in the following turn",
- specialName: "Real Sword Fight with a Girl Swordsman"
- },
- 789: {
- special: "Following the activation of the special, if every unit scores a Perfect hit, boosts ATK of Slasher characters by 1.75x in the following turn",
- specialName: "Real Sword Fight with a Girl Swordsman",
- captain: "Boosts ATK of Slasher characters by 1.5x"
- },
- 790: {
- special: "Deals 3x character's ATK in QCK damage to one enemy, boosts ATK of STR, DEX and QCK characters by 1.2x for 3 turns",
- specialName: "March!! Usopp Pirates"
- },
- 791: {
- special: "Deals 3x character's ATK in QCK damage to one enemy, boosts ATK of STR, DEX and QCK characters by 1.2x for 3 turns",
- specialName: "March!! Usopp Pirates",
- captain: "Boosts ATK, HP and RCV of STR, DEX and QCK characters by 1.25x"
- },
- 792: {
- special: "Randomly changes all orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs, switches orbs between slots twice, locks all orbs for 1 turn",
- specialName: "The Entushiasm to Keep Skilled Workers in Line"
- },
- 793: {
- special: "Randomly changes all orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs, switches orbs between slots twice, locks all orbs for 1 turn",
- specialName: "The Entushiasm to Keep Skilled Workers in Line",
- captain: "Boosts ATK and RCV of Knowledge characters by 1.5x"
- },
- 794: {
- special: "Deals 10 hits of random INT damage to random enemies, delays all enemies for 1 turn",
- specialNotes: "#{randomHits : 10}",
- specialName: "Gum-Gum Storm",
- captain: "Boosts ATK of Tough characters by 3x, reduces crew's current HP by 10% at the end of each turn, reduces his own ATK multiplier by 0.1x at the end of each turn",
- captainNotes: "His ATK multiplier will be 3.0x on the first turn, 2.9x on the second, 2.8x on the third and so on. The reduction stops once the multiplier is 1.0x. The multiplier affects all Tough units."
- },
- 795: {
- special: "Deals 10 hits of random INT damage to random enemies, delays all enemies for 1 turn",
- specialNotes: "#{randomHits : 10}",
- specialName: "Gum-Gum Storm",
- captain: "Boosts ATK of Tough characters by 3.5x, reduces crew's current HP by 10% at the end of each turn, reduces his own ATK multiplier by 0.1x at the end of each turn",
- captainNotes: "His ATK multiplier will be 3.5x on the first turn, 3.4x on the second, 3.3x on the third and so on. The reduction stops once the multiplier is 1.0x. The multiplier affects all Tough units."
- },
- 796: {
- special: "Slightly boosts chances of getting matching orbs for 3 turns, boosts own ATK by 1.75x for 1 turn",
- specialName: "Peto-Peto Fruit, The Greatest Power",
- captain: "Boosts ATK of Knowledge characters by 2x"
- },
- 797: {
- special: "Slightly boosts chances of getting matching orbs for 3 turns, boosts own ATK by 1.75x for 1 turn",
- specialName: "Peto-Peto Fruit, The Greatest Power",
- captain: "Boosts ATK of Knowledge and Tough characters by 2x"
- },
- 798: {
- special: "Removes poison, following the activation of the special, if every unit scores a Perfect hit, boosts ATK of Fighter characters by 1.75x in the following turn",
- specialName: "Dugong Secret! Fist of the Black Fin",
- captain: "Boosts ATK by 2.5x after scoring 3 Perfects in a row"
- },
- 799: {
- special: "Randomizes all orbs, recovers 9x character's RCV in HP",
- specialName: "Sea Animal Healing"
- },
- 800: {
- special: "Randomly changes all orbs into either [STR], [DEX] or [QCK] orbs",
- specialName: "Octopus Tentacle Blow"
- },
- 801: {
- special: "Randomly changes [STR], [QCK], [DEX], [INT], [BOMB] and [BLOCK] orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs, changes [TND] and [RCV] orbs into [PSY] orbs",
- specialName: "Clone-Clone Montage",
- captain: "Boosts ATK of PSY characters by 2x"
- },
- 802: {
- special: "Randomly changes [STR], [QCK], [DEX], [INT], [BOMB] and [BLOCK] orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs, changes [TND] and [RCV] orbs into [PSY] orbs",
- specialName: "Clone-Clone Montage",
- captain: "Boosts ATK of PSY characters by 2.5x"
- },
- 803: {
- special: "Deals 8 hits of random DEX damage to random enemies, boosts ATK of all characters by 1.1x for 3 turns",
- specialNotes: "#{randomHits : 8}",
- specialName: "Black Spear Formation: All-Out Attack!",
- captain: "Boosts ATK and RCV of DEX characters by 1.2x"
- },
- 804: {
- special: "Deals 8 hits of random DEX damage to random enemies, boosts ATK of all characters by 1.1x for 3 turns",
- specialNotes: "#{randomHits : 8}",
- specialName: "Black Spear Formation: All-Out Attack!",
- captain: "Boosts ATK and RCV of DEX characters by 1.5x, deals 1x character's ATK in DEX damage to all enemies at the end of each turn"
- },
- 805: {
- special: "Reduces crew's current HP by 20%, deals 10x the amount of HP subtracted in INT damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
- specialName: "White Vine",
- captain: "Boosts ATK of Striker characters by 2x",
- specialNotes: "#{orb : 1.75x}"
- },
- 806: {
- special: "Reduces crew's current HP by 20%, deals 10x the amount of HP subtracted in INT damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
- specialName: "White Vine",
- captain: "Boosts ATK of Striker characters by 2x, reduces damage received up to 30% depending on the crew's current HP",
- specialNotes: "#{orb : 1.75x}"
- },
- 807: {
- captain: "Boosts ATK and RCV of Knowledge characters by 1.5x",
- specialName: "Thunder Charge: Swing Arm",
- special: "Deals 15x character's ATK in PSY damage to one enemy, boosts ATK against enemies with reduced defense by 1.3x for 3 turns"
- },
- 808: {
- captain: "Boosts ATK and RCV of Knowledge characters by 1.5x, recovers 2x character's RCV in HP at the end of each turn",
- specialName: "Thunder Charge: Swing Arm",
- special: "Deals 15x character's ATK in PSY damage to one enemy, boosts ATK against enemies with reduced defense by 1.3x for 3 turns"
- },
- 809: {
- captain: "Boosts ATK and RCV of Tough characters by 1.5x",
- specialName: "Lola's Attack Chance",
- special: "Reduces the defense of all enemies by 80% for 1 turn, amplifies the effect of orbs by 1.5x for 1 turn",
- specialNotes: "#{orb : 1.5x}"
- },
- 810: {
- captain: "Boosts ATK of Tough characters by 2x and their RCV by 1.5x, reduces crew's current HP by 10% at the end of each turn",
- specialName: "Lola's Attack Chance",
- special: "Reduces the defense of all enemies by 80% for 1 turn, amplifies the effect of orbs by 1.5x for 1 turn",
- specialNotes: "#{orb : 1.5x}"
- },
- 811: {
- specialName: "Birdbrain Present",
- special: "Changes own orb into DEX, switches orbs between slots once"
- },
- 812: {
- specialName: "Hell Howl",
- special: "Sharply decreases the defense of all enemies for 1 turn"
- },
- 813: {
- specialName: "Sticky Spider Net",
- special: "Delays all enemies for 1 turn, amplifies the effect of orbs by 1.25x for 1 turn",
- specialNotes: "#{orb : 1.25x}"
- },
- 814: {
- specialName: "Carpet Scratch",
- special: "Deals 13x character's ATK in DEX damage to a single enemy, changes captain's orb into [TND]"
- },
- 815: {
- captain: "Boosts ATK by 2.5x following a chain of STR > INT > DEX attacks no lower than Good",
- specialName: "Brick Bat",
- special: "Deals 10 hits of 5,000 fixed damage to random enemies",
- specialNotes: "#{fixed} #{randomHits : 10}"
- },
- 816: {
- captain: "Boosts ATK by 2.75x following a chain of STR > INT > DEX attacks no lower than Good",
- specialName: "Brick Bat",
- special: "Deals 10 hits of 5,000 fixed damage to random enemies",
- specialNotes: "#{fixed} #{randomHits : 10}"
- },
- 817: {
- specialName: "[PSY] Slot Change [STR]",
- special: "Changes [PSY] orbs into [STR] orbs"
- },
- 818: {
- specialName: "Quick Change",
- special: "Switches orbs between slots once"
- },
- 819: {
- specialName: "Hyper Burst",
- special: "Deals 13x character's ATK in character's type damage to all enemies"
- },
- 820: {
- specialName: "[TND] Slot Change [INT]",
- special: "Changes [TND] orbs into [INT] orbs"
- },
- 821: {
- specialName: "Slot Shuffle",
- special: "Randomizes all orbs"
- },
- 822: {
- specialName: "Patch Job",
- special: "Boosts RCV of all characters by 100 units for 3 turns"
- },
- 823: {
- specialName: "Slot Rate Up [INT]",
- special: "Slightly boosts chances of getting [INT] orbs for 3 turns"
- },
- 824: {
- specialName: "Auto Repair",
- special: "Recovers 3x character's RCV in HP at the end of each turn for 5 turns"
- },
- 825: {
- captain: "Boosts ATK and HP of STR characters by 1.5x",
- specialName: "Energy of the Ancient Knight",
- special: "Boosts ATK of STR characters by 200 units for 1 turn"
- },
- 826: {
- captain: "Boosts ATK and HP of DEX characters by 1.5x",
- specialName: "Weakness of the Ancient Knight",
- special: "Delays all enemies for 1 turn, reduces the ATK of all characters by 80% for 2 turns"
- },
- 827: {
- captain: "Boosts ATK and HP of QCK characters by 1.5x",
- specialName: "Poison of the Ancient Knight",
- special: "Boosts ATK against poisoned enemies by 1.05x for 999 turns"
- },
- 830: {
- captain: "Boosts ATK of Knowledge and Striker characters by 1.75x, deals 2 times the damage received in the previous turn in DEX damage to all enemies at the end of each turn",
- specialName: "Karma Conviction",
- special: "Changes the orbs in the top row into [STR] orbs, changes the orbs in the middle row into [DEX] orbs, changes the orbs in the bottom row into [QCK] orbs"
- },
- 831: {
- captain: "Boosts ATK of Knowledge and Striker characters by 2x, deals 5 times the damage received in the previous turn in DEX damage to all enemies at the end of each turn",
- specialName: "Karma Conviction",
- special: "Changes the orbs in the top row into [STR] orbs, changes the orbs in the middle row into [DEX] orbs, changes the orbs in the bottom row into [QCK] orbs"
- },
- 832: {
- captain: "Boosts ATK of Freedom characters proportionally to the crew's current HP, reduces crew's current HP by 10% at the end of each turn",
- specialName: "Burn Bazooka",
- special: "Boosts ATK of Freedom characters by 1.5x for 1 turn, deals 15x character's ATK in STR damage to all enemies",
- captainNotes: "#{captainProportional : lower : 1 + 1.5 * (1 - (remaining HP) / (total HP)) : 1 : 2.5}"
- },
- 833: {
- captain: "Boosts ATK of Freedom characters proportionally to the crew's current HP, reduces crew's current HP by 10% at the end of each turn",
- specialName: "Burn Bazooka",
- special: "Boosts ATK of Freedom characters by 1.5x for 1 turn, deals 15x character's ATK in STR damage to all enemies",
- captainNotes: "#{captainProportional : lower : 1 + 1.75 * (1 - (remaining HP) / (total HP)) : 1 : 2.75}"
- },
- 834: {
- captain: "Boosts ATK and RCV of Shooter characters by 1.5x",
- specialName: "Yellow Gun & Gero Gero Gun",
- special: "Changes own orb into [QCK] and the captain's orb into [PSY]"
- },
- 835: {
- captain: "Boosts ATK and HP of Knowledge characters by 2x",
- specialName: "Thrust Pad Cannon",
- special: "Changes [RCV], [TND], [EMPTY], [BLOCK] and [BOMB] orbs into matching orbs, amplifies the effect of orbs by 1.75x for 1 turn",
- specialNotes: "#{orb : 1.75x}"
- },
- 836: {
- captain: "Boosts ATK and HP of Knowledge characters by 2x, deals 5 times the damage received in the previous turn in STR damage to all enemies at the end of each turn",
- specialName: "Thrust Pad Cannon",
- special: "Changes [RCV], [TND], [EMPTY], [BLOCK] and [BOMB] orbs into matching orbs, amplifies the effect of orbs by 1.75x for 1 turn",
- specialNotes: "#{orb : 1.75x}"
- },
- 837: {
- captain: "Boosts ATK of Ambition characters by 2x",
- specialName: "Gas Robe",
- special: "Poisons all enemies, boosts ATK of Ambition characters by 1.75x for 2 turns",
- specialNotes: "#{poison}"
- },
- 838: {
- captain: "Boosts ATK of Ambition characters by 2.5x",
- specialName: "Gas Robe",
- special: "Poisons all enemies, boosts ATK of Ambition characters by 1.75x for 2 turns"
- },
- 839: {
- captain: "Boosts ATK of Striker characters by 2x",
- specialName: "Demon Bamboo",
- special: "Changes own orb into [INT], boosts own ATK by 2x for 1 turn, deals 15x character's ATK in INT damage to one enemy"
- },
- 840: {
- captain: "Boosts ATK of Striker characters by 2.5x",
- specialName: "Demon Bamboo",
- special: "Changes own orb into [INT], boosts own ATK by 2x for 1 turn, deals 15x character's ATK in INT damage to one enemy"
- },
- 841: {
- captain: "Recovers 3x character's RCV in HP at the end of each turns, deals 3x character's ATK in PSY damage to all enemies at the end of each turn",
- specialName: "Snow Rabbit",
- special: "Delays all enemies for 1 turn, boosts ATK against delayed enemies by 1.25x for 2 turns"
- },
- 842: {
- captain: "Recovers 5x character's RCV in HP at the end of each turns, deals 5x character's ATK in PSY damage to all enemies at the end of each turn",
- specialName: "Snow Rabbit",
- special: "Delays all enemies for 1 turn, boosts ATK against delayed enemies by 1.25x for 2 turns"
- },
- 843: {
- captain: "Boosts ATK of Slasher, Striker and Shooter characters by 1.5x",
- specialName: "Arms-Morphosis: Missile Girl",
- special: "Deals 15x character's ATK in STR damage to all enemies, boosts ATK of Shooter characters by 1.5x for 1 turn. If during that turn every unit scores a Perfect hit, boosts ATK of Shooter, Striker and Slasher characters by 1.5x in the following turn."
- },
- 844: {
- captain: "Boosts ATK of Slasher, Striker and Shooter characters by 2x",
- specialName: "Arms-Morphosis: Missile Girl",
- special: "Deals 15x character's ATK in STR damage to all enemies, boosts ATK of Shooter characters by 1.5x for 1 turn. If during that turn every unit scores a Perfect hit, boosts ATK of Shooter, Striker and Slasher characters by 1.5x in the following turn."
- },
- 845: {
- captain: "Boosts ATK of all characters by 1.5x after the 11th hit in the chain, by 2.5x after the 22nd hit",
- specialName: "Gust: Matasaburo",
- special: "Changes own orb into [QCK], randomizes every other orb"
- },
- 846: {
- captain: "Boosts ATK of all characters by 1.5x after the 11th hit in the chain, by 2.5x after the 22nd hit, by 2.75x after the 30th hit, by 3.5x after the 40th hit",
- specialName: "Gust: Matasaburo",
- special: "Changes own orb into [QCK], randomizes every other orb"
- },
- 847: {
- captain: "Boosts ATK of all characters by 1.5x if HP is below 30% at the start of the turn",
- specialName: "Sturdy Boat: Launch",
- special: "Reduces Silence duration by 5 turns, boosts ATK of all characters by 5% for 3 turns, reduces damage received by 10% for 3 turns, amplifies the effect of orbs by 1.15x for 3 turns, recovers 2x character's RCV in HP at the end of each turn for 3 turns",
- specialNotes: "#{orb : 1.15x}"
- },
- 848: {
- captain: "Boosts ATK of all characters by 2x if HP is below 30% at the start of the turn",
- specialName: "Sturdy Boat: Launch",
- special: "Reduces Silence duration by 5 turns, boosts ATK of all characters by 5% for 3 turns, reduces damage received by 10% for 3 turns, amplifies the effect of orbs by 1.15x for 3 turns, recovers 2x character's RCV in HP at the end of each turn for 3 turns",
- specialNotes: "#{orb : 1.15x}"
- },
- 849: {
- captain: "Boosts ATK of Shooter characters by 1.75x",
- specialName: "Battle Franky 9",
- special: "Deals 5 hits of random STR damage to random enemies, reduces the defense of all enemies by 50% for 2 turns"
- },
- 850: {
- captain: "Boosts ATK of Striker and Knowledge characters by 1.5x",
- specialName: "First-class Assistant of the Passionate Worker",
- special: "Changes the top right orb into [DEX], the middle right orb into [STR] and the bottom right orb into [QCK], seals himself for 3 turns"
- },
- 851: {
- captain: "Boosts ATK of Ambition characters by 1.5x",
- specialName: "Snow Country Speciality: Snow Powder Makeup",
- special: "Deals 20x character's ATK in character's type damage to one enemy, locks all orbs for 1 turn"
- },
- 852: {
- captain: "Boosts ATK of Ambition characters by 2x",
- specialName: "Snow Country Speciality: Snow Powder Makeup",
- special: "Deals 20x character's ATK in character's type damage to one enemy, locks all orbs for 1 turn"
- },
- 853: {
- specialName: "Robson: Serious Mode",
- special: "Following the activation of the special, if every unit scores a Perfect hit, boosts ATK of Tough and Fighters characters by 1.2x for 3 turns"
- },
- 854: {
- captain: "Boosts ATK of DEX chracters by 1.5x, reduces damage received by 10%",
- specialName: "Guard Point: Winter Coat",
- special: "Redues damage received by 50% for 3 turns, slightly boosts chances of getting [DEX] orbs for 3 turns"
- },
- 855: {
- captain: "Boosts ATK of Slasher characters by 2x",
- specialName: "Shambles: Holiday Toast",
- special: "Changes captain's orb into [RCV], recovers 15x character's RCV in HP"
- },
- 856: {
- captain: "Boosts ATK of Slasher characters by 2.5x",
- specialName: "Shambles: Holiday Toast",
- special: "Changes captain's orb into [RCV], recovers 15x character's RCV in HP"
- },
- 857: {
- captain: "Boosts ATK of PSY characters by 2x",
- specialName: "Bonney's Holiday Feast",
- special: "Changes adjacent orbs into [RCV] orbs, boosts RCV of PSY characters by 1.5x for 1 turn"
- },
- 858: {
- captain: "Boosts ATK and RCV of PSY characters by 2x",
- specialName: "Bonney's Holiday Feast",
- special: "Changes adjacent orbs into [RCV] orbs, boosts RCV of PSY characters by 1.5x for 1 turn"
- },
- 859: {
- captain: "Boosts ATK of Ambition characters by 1.5x, reduces damage received up to 10% depending on the crew's current HP",
- specialName: "Pleading at the Risk of One's Life",
- special: "Changes adjacent orbs into [RCV] orbs; if the special is activated with more than 50% health remaining, protects from defeat for 1 turn",
- specialNotes: "#{zombie}"
- },
- 860: {
- captain: "Boosts ATK of Ambition characters by 2x, reduces damage received up to 30% depending on the crew's current HP",
- specialName: "Pleading at the Risk of One's Life",
- special: "Changes adjacent orbs into [RCV] orbs; if the special is activated with more than 50% health remaining, protects from defeat for 1 turn",
- specialNotes: "#{zombie}"
- },
- 861: {
- specialName: "Bewitching Lovely Iron Mace",
- special: "Deals 13x character's ATK in QCK damage to one enemy, reduces damage received by 75% for 1 turn, amplifies the effect of orbs by 1.5x for 1 turn",
- specialNotes: "#{orb : 1.5x}",
- captain: "Reduces damage received by 10%"
- },
- 862: {
- captain: "Boosts ATK of QCK characters by 2x, reduces damage received by 10%",
- specialName: "Bewitching Lovely Iron Mace",
- special: "Deals 13x character's ATK in QCK damage to one enemy, reduces damage received by 75% for 1 turn, amplifies the effect of orbs by 1.5x for 1 turn",
- specialNotes: "#{orb : 1.5x}"
- },
- 863: {
- captain: "Boosts ATK of QCK characters by 1.75x, recovers 2x character's RCV in HP at the end of each turn",
- specialName: "Snow Crystal Clima-Tact",
- special: "Reduces the defense of all enemies by 50% for 2 turns, reduces the ATK of all enemies by 10% for 2 turns"
- },
- 864: {
- captain: "Boosts ATK of Freedom characters by 2x",
- specialName: "Slave Arrow",
- special: "Locks the chain multiplier at 2.5x for 2 turns, delays all enemies for 1 turn"
- },
- 865: {
- captain: "Boosts ATK and HP of Freedom characters by 2x",
- specialName: "Slave Arrow",
- special: "Locks the chain multiplier at 2.5x for 2 turns, delays all enemies for 1 turn"
- },
- 866: {
- captain: "Boosts ATK of Knowledge characters by 2x",
- specialName: "Cien Fleur Wing: The Storm",
- special: "Boosts ATK of Slasher and Knowledge characters by 1.3x for 2 turns, reduces Bind duration by 2 turns"
- },
- 867: {
- captain: "Boosts ATK of all characters by 1.5x after the 12th hit in the chain",
- specialName: "Tabasco Star: The Storm",
- special: "Delays all enemies for 2 turns, deals 9x character's ATK in DEX damage to all enemies"
- },
- 868: {
- captain: "Boosts ATK of all characters by 1.2x, recovers 1,000 HP at the end of the turn",
- specialName: "Heavy Gong: The Storm",
- special: "Deals 15x character's ATK in STR damage to one enemy, reduces Bind duration by 3 turns"
- },
- 869: {
- captain: "Boosts ATK of Ambition characters by 3x until the first hit other than Perfect",
- specialName: "Black Knight",
- special: "Changes adjacent orbs into matching orbs, amplifies the effect of orbs by 2x for 1 turn",
- specialNotes: "#{orb : 2x}"
- },
- 870: {
- captain: "Boosts ATK of Ambition characters by 3x until the first hit other than Perfect",
- specialName: "Black Knight",
- special: "Changes adjacent orbs into matching orbs, amplifies the effect of orbs by 2x for 1 turn",
- specialNotes: "#{orb : 2x}"
- },
- 871: {
- captain: "Boosts ATK and RCV of QCK characters by 1.5x",
- specialName: "Hobby-Hobby Fruit",
- special: "Removes all enemies with HP below 20%",
- specialNotes: "The special bypasses all known protective buffs. If the enemy can revive after being defeated, however, the special will only reduce the enemy's HP to 0 and trigger their revive effect."
- },
- 872: {
- captain: "Boosts ATK and RCV of QCK characters by 2x",
- specialName: "Hobby-Hobby Fruit",
- special: "Removes all enemies with HP below 20%",
- specialNotes: "The special bypasses all known protective buffs. If the enemy can revive after being defeated, however, the special will only reduce the enemy's HP to 0 and trigger their revive effect."
- },
- 873: {
- captain: "Boosts ATK of Fighter characters by 2.5x if HP is below 30% at the start of the turn",
- specialName: "Nyan Nyan Swim",
- special: [
- {
- "description": "Changes own orb into [PSY], amplifies the effect of orbs by 1.5x for 1 turn",
- "cooldown": [
- 13,
- 8
- ]
- },
- {
- "description": "Changes own orb into [psy], amplifies the effect of orbs by 1.75x for 1 turn",
- "cooldown": [
- 19,
- 14
- ]
- }
- ],
- specialNotes: "#{orb: 1.5x or 1.75x} #{stages}"
- },
- 874: {
- captain: "Boosts ATK of Fighter characters by 3x if HP is below 30% at the start of the turn",
- specialName: "Nyan Nyan Swim",
- special: [
- {
- "description": "Changes own orb into [PSY], amplifies the effect of orbs by 1.5x for 1 turn",
- "cooldown": [
- 13,
- 8
- ]
- },
- {
- "description": "Changes own orb into [psy], amplifies the effect of orbs by 1.75x for 1 turn",
- "cooldown": [
- 19,
- 14
- ]
- }
- ],
- specialNotes: "#{orb: 1.5x or 1.75x} #{stages}"
- },
- 875: {
- captain: "Boosts ATK of Knowledge and Ambition characters by 2x",
- specialName: "Beto Launcher",
- special: "Changes the captain's orb into a matching orb, locks all orbs for 1 turn, deals 13x character's ATK in INT damage to all enemies"
- },
- 876: {
- captain: "Boosts ATK of Knowledge and Ambition characters by 2.25x, makes [TND] and [RCV] orbs \"beneficial\" to Knowledge and Ambition characters",
- captainNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs while retaining their original function.",
- specialName: "Beto Launcher",
- special: "Changes the captain's orb into a matching orb, locks all orbs for 1 turn, deals 13x character's ATK in INT damage to all enemies"
- },
- 877: {
- captain: "Boosts amount of beli received by 2x",
- specialName: "Heaven's Do Art",
- special: "Reduces any damage received above 2,000 HP by 88% for 1 turn",
- specialNotes: "The exact formula for the damage received is: 2000 + ((total damage) - 2000) * 0.12"
- },
- 878: {
- captain: "Boosts ATK of all characters by 1.5x, boosts amount of beli received by 2x",
- specialName: "Heaven's Do Art",
- special: "Reduces any damage received above 2,000 HP by 88% for 1 turn",
- specialNotes: "The exact formula for the damage received is: 2000 + ((total damage) - 2000) * 0.12"
- },
- 879: {
- captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of Fighter characters by 1.75x",
- specialName: "Battle Preservation Fist: Manki Kayaku",
- special: "Changes all orbs including [BLOCK] orbs into [G] orbs, deals random typeless damage to all enemies",
- specialNotes: "#{gOrbs}"
- },
- 880: {
- captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Fighter characters by 2x",
- specialName: "Battle Preservation Fist: Manki Kayaku",
- special: "Changes all orbs including [BLOCK] orbs into [G] orbs, deals random typeless damage to all enemies",
- specialNotes: "#{gOrbs}"
- },
- 881: {
- captain: "Boosts ATK of Shooter and Freedom characters by 2x following a chain of Good > Great > Perfect hits",
- specialName: "Fighting Music: Conflict Chekera",
- special: "Doubles damage received for 2 turns, reduces RCV by 90% for 2 turns, boosts ATK of Shooter and Freedom characters by 1.75x for 1 turn"
- },
- 882: {
- captain: "Boosts ATK of Shooter and Freedom characters by 3x following a chain of Good > Great > Perfect hits",
- specialName: "Fighting Music: Conflict Chekera",
- special: "Doubles damage received for 2 turns, reduces RCV by 90% for 2 turns, boosts ATK of Shooter and Freedom characters by 1.75x for 1 turn"
- },
- 883: {
- captain: "Boosts ATK and HP of Tough characters by 1.25x",
- specialName: "Hakoku Sovereignity",
- special: "Deals 20x character's ATK in character's type damage to all enemies, boosts ATK of Tough characters by 1.5x for 1 turn. If \"Hakoku Sovereignity\" is used again in the same turn the special is activated in, boosts ATK of Tough characters by 2x instead."
- },
- 884: {
- captain: "Boosts ATK and HP of Tough characters by 1.5x",
- specialName: "Hakoku Sovereignity",
- special: "Deals 20x character's ATK in character's type damage to all enemies, boosts ATK of Tough characters by 1.5x for 1 turn. If \"Hakoku Sovereignity\" is used again in the same turn the special is activated in, boosts ATK of Tough characters by 2x instead."
- },
- 885: {
- captain: "Boosts ATK of Fighter characters by 2x, reduces damage received by 10%",
- specialName: "Arabesque Brick Fist: Sun",
- special: "Cuts the current HP of each enemy by 10%, boosts ATK of Fighter characters by 1.5x for 1 turn if HP is below 30% when the special is activated"
- },
- 886: {
- captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of Slasher characters by 2x",
- specialName: "Daisy Blade: First",
- special: "Deals 15x character's ATK in STR damage to all enemies, boosts ATK of Slasher characters by 1.5x for 1 turn if HP is below 30% when the special is activated"
- },
- 887: {
- captain: "Boosts ATK of Ambition characters by 1.5x, boosts amount of beli received by 1.2x",
- specialName: "Special Muggy Ball: Flashy",
- special: "Reduces the defense of all enemies by 80% for 1 turn, deals 15x character's ATK in QCK damage to all enemies"
- },
- 888: {
- specialName: "Negative Ghost",
- special: "Slightly reduces the ATK of all enemies for 3 turns",
- specialNotes: "The reduction does not apply to damage from specials"
- },
- 889: {
- captain: "Boosts ATK and RCV of DEX characters by 1.2x",
- specialName: "Ghost Rap",
- special: "Changes [STR] orbs into [DEX] orbs, deals 10x character's ATK in DEX damage to all enemies"
- },
- 890: {
- captain: "Boosts ATK and RCV of DEX characters by 1.5x",
- specialName: "Ghost Rap",
- special: "Changes [STR] orbs into [DEX] orbs, deals 10x character's ATK in DEX damage to all enemies"
- },
- 891: {
- captain: "Boosts ATK and RCV of Tough characters by 1.75x",
- specialName: "Resurrection of the Dead",
- special: "Reduces damage received by 50% for 1 turn, boosts ATK of Tough characters by 1.25x for 1 turn",
- specialNotes: "SPECIALNOTES"
- },
- 892: {
- captain: "Boosts chain multiplier by 2x",
- specialName: "Hands of the Dead",
- special: "Switches orbs between slots three times"
- },
- 893: {
- captain: "Boosts ATK of Tough characters by 3x after scoring 3 Perfects in a row",
- specialName: "Oars Ball",
- special: "Reduces damage received by 50% for 1 turn, deals 30x character's ATK in STR damage to all enemies"
- },
- 894: {
- captain: "Boosts ATK of Ambition characters by 3x following a chain of Good > Great > Perfect hits",
- specialName: "Brick Bat: Black Box",
- special: "Empties all slots with [INT] orbs, deals several times the character's ATK in INT damage to one enemy",
- specialNotes: "The exact multiplier used is chosen based on the number of [INT] orbs consumed: 1 orb will give a 10x multiplier, 2 orbs 15x, 3 orbs 20x, 4 orbs 50x, 5 orbs 100x, 6 orbs 200x. It's not possible to activate the special without consuming at least one [INT] orb."
- },
- 895: {
- captain: "Boosts ATK of Slasher characters by 1.5x",
- specialName: "Dying Chorus: Binks' Sake",
- special: "Recovers 6x character's RCV in HP at the end of each turn for 3 turns"
- },
- 896: {
- captain: "Boosts ATK of Slasher characters by 2x",
- specialName: "Dying Chorus: Binks' Sake",
- special: "Recovers 6x character's RCV in HP at the end of each turn for 3 turns"
- },
- 897: {
- captain: "Boosts ATK of Knowledge and Ambition characters by 2x",
- specialName: "Ground Death: Thirst",
- special: "Changes own orb into [STR], randomizes all other orbs, cuts the current HP of all enemies by 10%"
- },
- 898: {
- captain: "Boosts ATK and HP of Striker and Knowledge characters by 1.5x",
- specialName: "Championship Fight: Little Garden Three",
- special: "Deals 10x character's ATK in QCK damage to all enemies, changes adjacent orbs into [G] orbs",
- specialNotes: "#{gOrbs}"
- },
- 899: {
- captain: "Boosts ATK of Fighter and Freedom characters by 1.75x and their RCV by 1.25x",
- specialName: "Hymn to Friendship: \"Okama Way\" Two",
- special: "Reduces Silence duration by 5 turns, recovers 10x character's RCV in HP"
- },
- 900: {
- captain: "Boosts ATK of Shooter characters by 2x if HP is above 99% at the start of the turn",
- specialName: "Franky Destroy Gun",
- special: "Deals 6 hits of 2,000 fixed damage to random enemies, randomly changes opposite orbs on Shooter and Freedom characters into either [G] orbs or matching orbs",
- specialNotes: "The orb shuffle only applies to Shooter and Freedom characters, other classes are unaffected. #{gOrbs}"
- },
- 901: {
- captain: "Boosts ATK of Shooter characters by 2.75x if HP is above 99% at the start of the turn",
- specialName: "Franky Destroy Gun",
- special: "Deals 6 hits of 2,000 fixed damage to random enemies, randomly changes opposite orbs on Shooter and Freedom characters into either [G] orbs or matching orbs",
- specialNotes: "The orb shuffle only applies to Shooter and Freedom characters, other classes are unaffected. #{gOrbs}"
- },
- 902: {
- captain: "Boosts ATK and HP of Tough characters by 1.25x",
- specialName: "Hakoku Sovereignity",
- special: "Deals 20x character's ATK in character's type damage to all enemies, boosts ATK of Tough characters by 1.5x for 1 turn. If \"Hakoku Sovereignity\" is used again in the same turn the special is activated in, boosts ATK of Tough characters by 2x instead."
- },
- 903: {
- captain: "Boosts ATK and HP of Tough characters by 1.5x",
- specialName: "Hakoku Sovereignity",
- special: "Deals 20x character's ATK in character's type damage to all enemies, boosts ATK of Tough characters by 1.5x for 1 turn. If \"Hakoku Sovereignity\" is used again in the same turn the special is activated in, boosts ATK of Tough characters by 2x instead."
- },
- 904: {
- captain: "Protects from defeat as long as HP is above 50%",
- captainNotes: "#{zombie}",
- specialName: "Yokozuna Slap!",
- special: "Deals 20x character's ATK in STR damage to one enemy, delays all enemies for 1 turn"
- },
- 905: {
- captain: "Boosts ATK of Slasher characters by 2.5x if HP is below 30% at the start of the turn",
- specialName: "Two Gorilla Cut",
- special: [
- {
- "description": "Changes own orb into [STR], boosts his own ATK by 1.5x for 2 turns",
- "cooldown": 17
- },
- {
- "description": "Changes own orb into [STR], boosts ATK of Slasher characters by 1.5x for 2 turns",
- "cooldown": 21
- },
- {
- "description": "Changes own orb into [STR], boosts ATK of Slasher characters by 1.75x for 2 turns",
- "cooldown": 24
- }
- ],
- specialNotes: "#{stages}"
- },
- 906: {
- captain: "Boosts ATK of Slasher characters by 2.75x if HP is below 30% at the start of the turn",
- specialName: "Two Gorilla Cut",
- special: [
- {
- "description": "Changes own orb into [STR], boosts his own ATK by 1.5x for 2 turns",
- "cooldown": 17
- },
- {
- "description": "Changes own orb into [STR], boosts ATK of Slasher characters by 1.5x for 2 turns",
- "cooldown": 21
- },
- {
- "description": "Changes own orb into [STR], boosts ATK of Slasher characters by 1.75x for 2 turns",
- "cooldown": 24
- }
- ],
- specialNotes: "#{stages}"
- },
- 907: {
- specialName: "Cien Fleur: Big Tree",
- special: "Delays all enemies for 1 turn, locks all orbs for 1 turn, deals 5,000 fixed damage to all enemies, reduces crew's HP to 1",
- captain: "Boosts ATK and RCV of Knowledge characters by 1.5x if HP is below 30% at the start of the turn"
- },
- 908: {
- specialName: "Cien Fleur: Big Tree",
- special: "Delays all enemies for 1 turn, locks all orbs for 1 turn, deals 5,000 fixed damage to all enemies, reduces crew's HP to 1",
- captain: "Boosts ATK of Knowledge characters by 2.5x and their RCV by 1.75x if HP is below 30% at the start of the turn"
- },
- 909: {
- captain: "Boosts ATK and RCV of PSY characters by 1.5x",
- specialName: "Hero of Justice! Chopper Mask!!",
- special: "Recovers 5,000 HP, boosts ATK of PSY characters by 1.5x for 2 turns"
- },
- 910: {
- specialName: "Hero of Justice! Chopper Mask!!",
- special: "Recovers 5,000 HP, boosts ATK of PSY characters by 1.5x for 2 turns",
- captain: "Boosts ATK of PSY characters by 2x, their RCV by 1.5x, makes [INT] orbs \"beneficial\" to PSY characters",
- captainNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs."
- },
- 911: {
- specialName: "Diable Jambe: Premier Hachis",
- special: [
- {
- "description": "Deals 13x character's ATK in DEX damage to one enemy, boosts ATK of Tough characters by 1.2x for 1 turn",
- "cooldown": 15
- },
- {
- "description": "Deals 20x character's ATK in DEX damage to one enemy, boosts ATK of Tough characters by 2x for 1 turn",
- "cooldown": 25
- }
- ],
- captain: "Boosts ATK and HP of Tough characters by 1.5x",
- specialNotes: "#{stages}"
- },
- 912: {
- specialName: "Diable Jambe: Premier Hachis",
- special: [
- {
- "description": "Deals 13x character's ATK in DEX damage to one enemy, boosts ATK of Tough characters by 1.2x for 1 turn",
- "cooldown": 15
- },
- {
- "description": "Deals 20x character's ATK in DEX damage to one enemy, boosts ATK of Tough characters by 2x for 1 turn",
- "cooldown": 25
- }
- ],
- captain: "Boosts ATK of Tough characters by 2.25x, their HP by 1.5x, recovers 4x character's RCV in HP at the end of each turn",
- specialNotes: "#{stages}"
- },
- 913: {
- captain: "Boosts ATK of QCK characters by 2.5x if they have a matching orb",
- specialName: "Black Magic Summoning: Advent of the Demon Lord Satan",
- special: "Seals himself for 1 turn, changes [BLOCK] orbs into matching orbs, randomly changes opposite orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs"
- },
- 914: {
- captain: "Boosts ATK of QCK characters by 3x if they have a matching orb, by 1.2x otherwise",
- specialName: "Black Magic Summoning: Advent of the Demon Lord Satan",
- special: "Seals himself for 1 turn, changes [BLOCK] orbs into matching orbs, randomly changes opposite orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs"
- },
- 915: {
- captain: "Boosts ATK and RCV of Knowledge characters by 1.2x",
- specialName: "Feeling of Mutual Love",
- special: "Boosts ATK and RCV of Knowledge characters by 1.5x for 1 turn"
- },
- 916: {
- captain: "Boosts ATK and RCV of Knowledge characters by 1.75x",
- specialName: "Feeling of Mutual Love",
- special: "Boosts ATK and RCV of Knowledge characters by 1.5x for 1 turn"
- },
- 917: {
- captain: "Boosts ATK of Shooter characters by 1.5x",
- specialName: "Kuja's Haki Arrow",
- special: "Deals 5,000 fixed damage to one enemy, delays all enemies for 1 turn, changes [RCV] orbs on Shooter characters into matching orbs",
- specialNotes: "The orb shuffle only applies to Shooter characters, other classes are unaffected."
- },
- 918: {
- captain: "Boosts ATK of Shooter characters by 1.75x, recovers a small amount of health at the end of each turn",
- specialName: "Kuja's Haki Arrow",
- special: "Deals 5,000 fixed damage to one enemy, delays all enemies for 1 turn, changes [RCV] orbs on Shooter characters into matching orbs",
- specialNotes: "The orb shuffle only applies to Shooter characters, other classes are unaffected."
- },
- 919: {
- specialName: "Spike of the Warrior Defending Her Country",
- special: "Reduces damage received from STR enemies by 50% for 2 turns"
- },
- 920: {
- specialName: "Snake Bow of the Warrior Defending Her Country",
- special: "Changes the orbs in the middle row into [RCV] orbs, changes the orbs in the bottom row into [TND] orbs"
- }
-};
\ No newline at end of file
+ 1: {
+ special: "Deals 5x character's ATK in STR damage to one enemy",
+ specialName: "Spinning Gum Punch"
+ },
+ 2: {
+ special: "Deals 7x character's ATK in STR damage to one enemy",
+ specialName: "Gum-Gum Pistol",
+ captain: "Boosts ATK of STR characters by 1.5x"
+ },
+ 3: {
+ special: "Deals 15x character's ATK in STR damage to one enemy",
+ specialName: "Gum-Gum Bazooka",
+ captain: "Boosts ATK of STR characters by 1.5x"
+ },
+ 4: {
+ captain: "Boosts ATK of STR characters by 2x, and ATK of all others by 1.5x",
+ special: "Deals 25x character's ATK in STR damage to one enemy",
+ specialName: "Gum-Gum Twin Jet Pistol"
+ },
+ 5: {
+ special: "Deals 7x character's ATK in DEX damage to one enemy",
+ specialName: "Oni Giri",
+ captain: "Boosts ATK of DEX characters by 1.5x"
+ },
+ 6: {
+ special: "Deals 10x character's ATK in DEX damage to all enemies",
+ specialName: "Three Thousand Worlds",
+ captain: "Boosts ATK of DEX characters by 1.5x"
+ },
+ 7: {
+ special: "Deals 10x character's ATK in DEX damage to all enemies",
+ specialName: "108 Pound Phoenix",
+ captain: "Boosts ATK of DEX characters by 1.5x"
+ },
+ 8: {
+ special: "Deals 15x character's ATK in DEX damage to all enemies",
+ specialName: "Ashura Ichibugin",
+ captain: "Boosts ATK and HP of DEX characters by 2x"
+ },
+ 9: {
+ special: "Recovers 1,000 HP",
+ specialName: "Cat Burglar",
+ captain: "Reduces damage received from INT enemies by 20%"
+ },
+ 10: {
+ special: "Deals 15x character's ATK in INT damage to one enemy",
+ specialName: "Tornado Tempo",
+ captain: "Boosts ATK of INT characters by 1.5x"
+ },
+ 11: {
+ special: "Reduces damage received from INT enemies by 100% for 1 turn",
+ specialName: "Mirage Tempo",
+ captain: "Boosts ATK of INT characters by 1.5x"
+ },
+ 12: {
+ special: "Deals 15x character's ATK in INT damage to all enemies",
+ specialName: "Thunderbolt Tempo",
+ captain: "Boosts ATK and HP of INT characters by 1.5x"
+ },
+ 13: {
+ special: "Delays all enemies for 1 turn",
+ specialName: "Liar",
+ captain: "Boosts ATK of Shooter characters by 1.2x"
+ },
+ 14: {
+ special: "Delays all enemies for 2 turns",
+ specialName: "Tabasco Star",
+ captain: "Boosts ATK of PSY characters by 1.5x"
+ },
+ 15: {
+ special: "Delays all enemies for 3 turns",
+ specialName: "Usopp Golden Pound",
+ captain: "Boosts ATK of PSY characters by 1.5x"
+ },
+ 16: {
+ special: "Delays all enemies for 3 turns, deals 15x character's ATK in PSY damage to all enemies",
+ specialName: "Fire Bird Star",
+ captain: "Boosts ATK and HP of PSY characters by 1.5x"
+ },
+ 17: {
+ special: "Recovers 10x character's RCV in HP",
+ specialName: "Special Fried Rice",
+ captain: "Boosts ATK of QCK characters by 1.5x"
+ },
+ 18: {
+ special: "Reduces the defense of all enemies by 50% for 2 turns",
+ specialName: "Plastic Surgery Shot",
+ captain: "Boosts HP of QCK characters by 1.5x"
+ },
+ 19: {
+ special: "Recovers 10x character's RCV in HP",
+ specialName: "Hot Rock Stew",
+ captain: "Boosts ATK of QCK characters by 1.5x"
+ },
+ 20: {
+ special: "Deals 5,000 fixed damage to all enemies",
+ specialName: "Diable Jambe",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK and HP of QCK characters by 1.5x"
+ },
+ 21: {
+ special: "Changes adjacent orbs into [RCV] orbs",
+ specialName: "Hearty Yell",
+ captain: "Boosts RCV of PSY characters by 1.2x"
+ },
+ 22: {
+ special: "Deals 15x character's ATK in PSY damage to one enemy",
+ specialName: "Heavy Gong",
+ captain: "Boosts RCV of PSY characters by 1.5x"
+ },
+ 23: {
+ special: "Changes adjacent orbs into [RCV] orbs",
+ specialName: "Scope",
+ captain: "Boosts RCV of INT characters by 1.5x"
+ },
+ 24: {
+ special: "Reduces the defense of all enemies by 50% for 2 turns",
+ specialName: "Hoofprint Roseo",
+ captain: "Boosts RCV of STR characters by 1.5x"
+ },
+ 25: {
+ special: "Deals 7x character's ATK in QCK damage to all enemies",
+ specialName: "Horn Point Roseo Colonnade",
+ captain: "Boosts RCV of QCK characters by 1.5x"
+ },
+ 26: {
+ special: "Reduces damage received by 50% for 3 turns",
+ specialName: "Guard Point",
+ captain: "Boosts RCV of DEX characters by 1.5x"
+ },
+ 27: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Slash",
+ captain: "Boosts HP of QCK characters by 1.2x"
+ },
+ 28: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Straight",
+ captain: "Boosts ATK of Fighter characters by 1.2x"
+ },
+ 29: {
+ special: "Deals 7x character's ATK in STR damage to one enemy",
+ specialName: "Iron Mace Beauty",
+ captain: "Reduces damage received from STR enemies by 30%"
+ },
+ 30: {
+ special: "Reduces damage received by 80% for 1 turn",
+ specialName: "Slip-Slip Tracks",
+ captain: "Reduces damage received from STR enemies by 50%"
+ },
+ 31: {
+ captain: "Recovers 2x character's RCV in HP at the end of each turn"
+ },
+ 32: {
+ special: "Changes [RCV] orbs into [TND] orbs",
+ specialName: "Shooting Spree",
+ captain: "Recovers 2x character's RCV in HP at the end of each turn"
+ },
+ 33: {
+ captain: "Reduces damage received from INT enemies by 30%"
+ },
+ 34: {
+ special: "Reduces the defense of all enemies by 100% for 1 turn",
+ specialName: "Straw Doll Of Resentment",
+ captain: "Reduces damage received from INT enemies by 30%"
+ },
+ 35: {
+ special: "Deals 5x character's ATK in STR damage to one enemy",
+ specialName: "Execution Axe-Hand",
+ captain: "Boosts HP of Slasher characters by 1.2x"
+ },
+ 36: {
+ special: "Deals 5x character's ATK in PSY damage to one enemy",
+ specialName: "Fierce Bite",
+ captain: "Boosts ATK of PSY characters by 1.5x"
+ },
+ 37: {
+ special: "Deals 5x character's ATK in DEX damage to one enemy",
+ specialName: "The Dance Of A Hundred Kamikaze Tops",
+ captain: "Boosts ATK of DEX characters by 1.5x"
+ },
+ 38: {
+ special: "Changes [RCV] orbs into [INT] orbs",
+ specialName: "Chop-Chop Festival",
+ captain: "Boosts ATK of INT characters by 1.5x"
+ },
+ 39: {
+ special: "Changes [RCV] orbs into [INT] orbs",
+ specialName: "Chop-Chop Festival",
+ captain: "Boosts ATK of INT characters by 2x"
+ },
+ 40: {
+ special: "Changes adjacent orbs into [RCV] orbs",
+ specialName: "[RCV] Slot Storm",
+ captain: "Reduces damage received from Shooter enemies by 30%"
+ },
+ 41: {
+ special: "Changes [RCV] orbs into [INT] orbs",
+ specialName: "Cat Snatch",
+ captain: "Boosts RCV of INT characters by 1.2x"
+ },
+ 42: {
+ special: "Deals 3x character's ATK in STR damage to all enemies",
+ specialName: "Cat-A-Pult Cat-Astrophe",
+ captain: "Boosts ATK of STR characters by 1.2x"
+ },
+ 43: {
+ special: "Changes [RCV] orbs into [DEX] orbs",
+ specialName: "One, Two, Django",
+ captain: "Reduces damage received by 10%"
+ },
+ 44: {
+ special: "Changes [RCV] orbs into [DEX] orbs",
+ specialName: "Dance Heaven",
+ captain: "Reduces damage received by 10%"
+ },
+ 45: {
+ special: "Deals 5x character's ATK in QCK damage to all enemies",
+ specialName: "Death Scoop",
+ captain: "Boosts ATK of QCK characters by 1.2x"
+ },
+ 46: {
+ special: "Deals 5x character's ATK in QCK damage to all enemies",
+ specialName: "Death Scoop",
+ captain: "Boosts ATK of QCK characters by 1.5x"
+ },
+ 47: {
+ special: "Changes [TND] orbs into [RCV] orbs",
+ specialName: "[TND] Slot Change [RCV]"
+ },
+ 48: {
+ special: "Changes adjacent orbs into [RCV] orbs",
+ specialName: "[RCV] Slot Storm"
+ },
+ 49: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Straight",
+ captain: "Boosts ATK of STR characters by 1.5x"
+ },
+ 50: {
+ special: "Deals 5x character's ATK in STR damage to one enemy",
+ specialName: "The Meatball Of Doom",
+ captain: "Recovers 3x character's RCV in HP at the end of each turn"
+ },
+ 51: {
+ captain: "Recovers 3x character's RCV in HP at the end of each turn"
+ },
+ 52: {
+ special: "Changes [STR] orbs into [DEX] orbs",
+ specialName: "Chef Drop",
+ captain: "Boosts ATK of Fighter characters by 2.5x"
+ },
+ 53: {
+ captain: "Reduces damage received from QCK enemies by 30%"
+ },
+ 54: {
+ special: "Deals 7x character's ATK in QCK damage to one enemy",
+ specialName: "Demonic Dance",
+ captain: "Reduces damage received from QCK enemies by 50%"
+ },
+ 55: {
+ captain: "Reduces damage received from STR enemies by 30%"
+ },
+ 56: {
+ special: "Changes [RCV] orbs into [STR] orbs",
+ specialName: "Fire Pearl Privilege",
+ captain: "Reduces damage received from STR enemies by 50%"
+ },
+ 57: {
+ special: "Deals 7x character's ATK in INT damage to one enemy",
+ specialName: "Chain Hammer",
+ captain: "Reduces damage received by 10%"
+ },
+ 58: {
+ special: "Poisons all enemies",
+ specialNotes: "#{poison}",
+ specialName: "MH5",
+ captain: "Reduces damage received by 20%"
+ },
+ 59: {
+ special: "Changes [PSY] orbs into [INT] orbs",
+ specialName: "[PSY] Slot Change [INT]",
+ captain: "Boosts ATK of INT characters by 1.2x"
+ },
+ 60: {
+ special: "Changes [TND] orbs into [STR] orbs",
+ specialName: "[TND] Slot Change [STR]",
+ captain: "Boosts ATK of STR characters by 1.5x"
+ },
+ 61: {
+ special: "Deals 5x character's ATK in INT damage to all enemies",
+ specialName: "Lip-O-Cannon",
+ captain: "Boosts HP of Shooter characters by 1.5x"
+ },
+ 62: {
+ special: "Deals 7x character's ATK in STR damage to one enemy",
+ specialName: "Guffaw Palm Bomb",
+ captain: "Boosts HP of Fighter characters by 1.5x"
+ },
+ 63: {
+ captain: "Reduces damage received from DEX enemies by 30%"
+ },
+ 64: {
+ special: "Deals 10x character's ATK in DEX damage to all enemies",
+ specialName: "New Year's Open Body Slam",
+ captain: "Reduces damage received from DEX enemies by 50%"
+ },
+ 65: {
+ special: "Deals 7x character's ATK in STR damage to one enemy",
+ specialName: "Shark On Darts",
+ captain: "Boosts ATK of Slasher characters by 2x"
+ },
+ 66: {
+ special: "Deals 15x character's ATK in STR damage to one enemy",
+ specialName: "Shark On Tooth",
+ captain: "Boosts ATK of Slasher characters by 2x"
+ },
+ 67: {
+ special: "Deals 25x character's ATK in QCK damage to one enemy",
+ specialName: "Quick Draw",
+ captain: "Boosts RCV of Slasher characters by 1.5x"
+ },
+ 68: {
+ special: "Deals 25x character's ATK in QCK damage to one enemy",
+ specialName: "Quick Draw",
+ captain: "Boosts RCV of Slasher characters by 2x"
+ },
+ 69: {
+ special: "Reduces damage received by 50% for 3 turns",
+ specialName: "White Out",
+ captain: "Reduces damage received by 20%"
+ },
+ 70: {
+ special: "Reduces damage received by 50% for 3 turns",
+ specialName: "White Out",
+ captain: "Reduces damage received by 20%"
+ },
+ 71: {
+ special: "Reduces damage received by 50% for 1 turn",
+ specialName: "Enchanting Vertigo Dance",
+ captain: "Recovers 2x character's RCV in HP at the end of each turn"
+ },
+ 72: {
+ special: "Randomizes all orbs",
+ specialName: "Charge! Supersonic Duck Squadron!",
+ captain: "Recovers 3x character's RCV in HP at the end of each turn"
+ },
+ 73: {
+ special: "Randomizes all orbs",
+ specialName: "Charge! Supersonic Duck Squadron!",
+ captain: "Recovers 5x character's RCV in HP at the end of each turn"
+ },
+ 74: {
+ special: "Deals 25x character's ATK in QCK damage to one enemy",
+ specialName: "Flame Fist",
+ captain: "Boosts ATK of QCK characters by 2x"
+ },
+ 75: {
+ special: "Deals 15x character's ATK in QCK to all enemies",
+ specialName: "Flame Mirror",
+ captain: "Boosts ATK of QCK characters by 2.5x"
+ },
+ 76: {
+ special: "Deals 15x character's ATK in PSY damage to all enemies",
+ specialName: "Conqueror's Haki",
+ captain: "Boosts ATK of PSY characters by 2x"
+ },
+ 77: {
+ special: "Deals 15x character's ATK in PSY damage to all enemies",
+ specialName: "Conqueror's Haki",
+ captain: "Boosts ATK of PSY characters by 2.5x"
+ },
+ 119: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Slash"
+ },
+ 120: {
+ special: "Deals 5x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Shot"
+ },
+ 121: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Straight"
+ },
+ 122: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 123: {
+ special: "Changes [STR] orbs into [DEX] orbs",
+ specialName: "[STR] Slot Change [DEX]"
+ },
+ 124: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 125: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Straight"
+ },
+ 126: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Slash"
+ },
+ 127: {
+ special: "Reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Shield Crusher"
+ },
+ 128: {
+ special: "Changes [QCK] orbs into [DEX] orbs",
+ specialName: "[QCK] Slot Change [DEX]"
+ },
+ 129: {
+ special: "Changes [INT] orbs into [PSY] orbs",
+ specialName: "[INT] Slot Change [PSY]"
+ },
+ 130: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Slash"
+ },
+ 131: {
+ special: "Changes [RCV] orbs into [STR] orbs",
+ specialName: "[RCV] Slot Change [STR]"
+ },
+ 132: {
+ special: "Changes [DEX] orbs into [QCK] orbs",
+ specialName: "[DEX] Slot Change [QCK]"
+ },
+ 133: {
+ special: "Changes [QCK] orbs into [DEX] orbs",
+ specialName: "[QCK] Slot Change [DEX]"
+ },
+ 134: {
+ special: "Changes [QCK] orbs into [RCV] orbs",
+ specialName: "[QCK] Slot Change [RCV]"
+ },
+ 135: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Spiral"
+ },
+ 136: {
+ special: "Deals 5x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Shot"
+ },
+ 137: {
+ special: "Reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Shield Crusher"
+ },
+ 138: {
+ special: "Changes [DEX] orbs into [RCV] orbs",
+ specialName: "[DEX] Slot Change [RCV]"
+ },
+ 139: {
+ special: "Changes [PSY] orbs into [RCV] orbs",
+ specialName: "[PSY] Slot Change [RCV]"
+ },
+ 140: {
+ special: "Deals 5x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Shot"
+ },
+ 141: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 142: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Straight"
+ },
+ 143: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 144: {
+ special: "Changes [STR] orbs into [DEX] orbs",
+ specialName: "[STR] Slot Change [DEX]"
+ },
+ 145: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 146: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Straight"
+ },
+ 147: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Slash"
+ },
+ 148: {
+ special: "Reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Shield Crusher"
+ },
+ 149: {
+ special: "Changes [QCK] orbs into [DEX] orbs",
+ specialName: "[QCK] Slot Change [DEX]"
+ },
+ 150: {
+ special: "Changes [INT] orbs into [PSY] orbs",
+ specialName: "[INT] Slot Change [PSY]"
+ },
+ 151: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Slash"
+ },
+ 152: {
+ special: "Changes [RCV] orbs into [STR] orbs",
+ specialName: "[RCV] Slot Change [STR]"
+ },
+ 153: {
+ special: "Changes [DEX] orbs into [QCK] orbs",
+ specialName: "[DEX] Slot Change [QCK]"
+ },
+ 154: {
+ special: "Changes [QCK] orbs into [DEX] orbs",
+ specialName: "[QCK] Slot Change [DEX]"
+ },
+ 155: {
+ special: "Changes [QCK] orbs into [RCV] orbs",
+ specialName: "[QCK] Slot Change [RCV]"
+ },
+ 156: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Spiral"
+ },
+ 157: {
+ special: "Deals 5x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Shot"
+ },
+ 158: {
+ special: "Reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Shield Crusher"
+ },
+ 159: {
+ special: "Changes [DEX] orbs into [RCV] orbs",
+ specialName: "[DEX] Slot Change [RCV]"
+ },
+ 160: {
+ special: "Changes [PSY] orbs into [RCV] orbs",
+ specialName: "[PSY] Slot Change [RCV]"
+ },
+ 161: {
+ special: "Deals 5x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Shot"
+ },
+ 162: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 163: {
+ special: "Changes [DEX] orbs into [TND] orbs",
+ specialName: "[DEX] Slot Change [TND]"
+ },
+ 164: {
+ special: "Changes [QCK] orbs into [TND] orbs",
+ specialName: "[QCK] Slot Change [TND]"
+ },
+ 165: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 166: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 167: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 168: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 169: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 170: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 171: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 172: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 173: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 174: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 175: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Straight"
+ },
+ 176: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Slash"
+ },
+ 177: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Spiral"
+ },
+ 178: {
+ special: "Deals 5x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Shot"
+ },
+ 179: {
+ special: "Changes [QCK] orbs into [STR] orbs",
+ specialName: "[QCK] Slot Change [STR]"
+ },
+ 180: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 181: {
+ special: "Changes [STR] orbs into [QCK] orbs",
+ specialName: "[STR] Slot Change [QCK]"
+ },
+ 182: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 183: {
+ special: "Changes [RCV] orbs into [INT] orbs",
+ specialName: "[RCV] Slot Change [INT]"
+ },
+ 184: {
+ special: "Changes [QCK] orbs into [STR] orbs",
+ specialName: "[QCK] Slot Change [STR]"
+ },
+ 185: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 186: {
+ special: "Changes [STR] orbs into [QCK] orbs",
+ specialName: "[STR] Slot Change [QCK]"
+ },
+ 187: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 188: {
+ special: "Changes [RCV] orbs into [INT] orbs",
+ specialName: "[RCV] Slot Change [INT]"
+ },
+ 194: {
+ special: "Changes [QCK] orbs into [STR] orbs",
+ specialName: "[QCK] Slot Change [STR]",
+ captain: "Boosts ATK of STR characters by 1.5x"
+ },
+ 195: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing",
+ captain: "Boosts RCV of DEX characters by 1.5x"
+ },
+ 196: {
+ special: "Changes [STR] orbs into [QCK] orbs",
+ specialName: "[STR] Slot Change [QCK]",
+ captain: "Boosts ATK of QCK characters by 1.5x"
+ },
+ 197: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing",
+ captain: "Reduces damage received from PSY enemies by 20%"
+ },
+ 198: {
+ special: "Changes [RCV] orbs into [INT] orbs",
+ specialName: "[RCV] Slot Change [INT]",
+ captain: "Boosts ATK of Shooter characters by 1.5x"
+ },
+ 199: {
+ special: "Deals 15x character's ATK in STR damage to one enemy",
+ specialName: "Nez-Palm Cannon",
+ captain: "Boosts ATK of STR characters by 1.5x"
+ },
+ 200: {
+ special: "Deals 20x character's ATK in STR damage to one enemy",
+ specialName: "Breeze Breath Bomb",
+ captain: "Boosts ATK of STR characters by 2x"
+ },
+ 201: {
+ captain: "Boosts HP of Fighter characters by 1.5x"
+ },
+ 202: {
+ special: "Changes [RCV] orbs into [QCK] orbs",
+ specialName: "10,000 Kill-O-Guillotine",
+ captain: "Boosts HP of Fighter characters by 2x"
+ },
+ 203: {
+ captain: "Reduces damage received from INT enemies by 10%"
+ },
+ 204: {
+ special: "Delays all enemies for 1 turn",
+ specialName: "Extra Special Candelabra",
+ captain: "Reduces damage received from INT enemies by 10%"
+ },
+ 205: {
+ captain: "Boosts HP and RCV of DEX characters by 1.2x"
+ },
+ 206: {
+ special: "Reduces the defense of all enemies by 50% for 2 turns",
+ specialName: "Colors Trap: Calming Green",
+ captain: "Boosts HP and RCV of DEX characters by 1.2x"
+ },
+ 207: {
+ captain: "Reduces damage received from PSY enemies by 10%"
+ },
+ 208: {
+ special: "Changes [RCV] orbs into [PSY] orbs",
+ specialName: "Bombardier Arabesque",
+ captain: "Reduces damage received from PSY enemies by 20%"
+ },
+ 209: {
+ special: "Boosts ATK of INT characters by 1.5x for 1 turn",
+ specialName: "Dieciseis Fleur",
+ captain: "Boosts RCV of INT characters by 1.5x"
+ },
+ 210: {
+ special: "Boosts ATK of INT characters by 2x for 1 turn",
+ specialName: "Cien Fleur",
+ captain: "Boosts RCV of INT characters by 2x"
+ },
+ 211: {
+ captain: "Boosts ATK of Striker characters by 1.2x"
+ },
+ 212: {
+ special: "Deals 5x character's ATK in QCK damage to one enemy",
+ specialName: "Hot Blooded Bat",
+ captain: "Boosts ATK of Striker characters by 1.5x"
+ },
+ 213: {
+ special: "Deals 20x character's ATK in STR damage to all enemies",
+ specialName: "Sorrowful Charge",
+ captain: "Protects from defeat as long as HP is above 50%",
+ captainNotes: "#{zombie}"
+ },
+ 214: {
+ special: "Deals 20x character's ATK in STR damage to all enemies",
+ specialName: "Sorrowful Charge",
+ captain: "Protects from defeat as long as HP is above 50%",
+ captainNotes: "#{zombie}"
+ },
+ 215: {
+ special: "Poisons all enemies",
+ specialNotes: "#{poison}",
+ specialName: "Poison Ink",
+ captain: "Boosts HP of Striker characters by 1.5x"
+ },
+ 216: {
+ special: "Reduces damage received by 50% for 3 turns",
+ specialName: "Gum-Gum Balloon",
+ captain: "Reduces damage received by 20%"
+ },
+ 217: {
+ special: "Deals 15x character's ATK in STR damage to all enemies",
+ specialName: "Gum-Gum Giant Rifle",
+ captain: "Boosts ATK by 3.5x after scoring 3 Perfects in a row"
+ },
+ 218: {
+ special: "Reduces damage received from STR enemies by 100% for 1 turn",
+ specialName: "Streaming Wolf Swords",
+ captain: "Reduces damage received by 80% if HP is above 99% at the start of the turn"
+ },
+ 219: {
+ special: "Deals 25x character's ATK in DEX damage to one enemy",
+ specialName: "Lion's Song",
+ captain: "Reduces damage received by 80% if HP is above 99% at the start of the turn"
+ },
+ 220: {
+ special: "Changes [PSY] orbs into [INT] orbs",
+ specialName: "Fine Tempo",
+ captain: "Boosts ATK of INT characters by 2x"
+ },
+ 221: {
+ special: "Changes [PSY] orbs into [INT] orbs",
+ specialName: "Happiness Punch",
+ captain: "Boosts ATK of INT characters by 2.5x"
+ },
+ 222: {
+ special: "Boosts ATK of PSY characters by 1.5x for 1 turn",
+ specialName: "Usopp Hammer",
+ captain: "Boosts ATK of PSY characters by 1.2x"
+ },
+ 223: {
+ special: "Boosts ATK of PSY characters by 2x for 1 turn",
+ specialName: "Impact",
+ captain: "Boosts ATK of PSY characters by 1.5x"
+ },
+ 224: {
+ special: "Deals 15x character's ATK in QCK damage to one enemy",
+ specialName: "Mutton Shot",
+ captain: "Boosts ATK by 2x after scoring 2 Perfects in a row"
+ },
+ 225: {
+ special: "Deals 20x character's ATK in QCK damage to one enemy",
+ specialName: "Veau Shot",
+ captain: "Boosts ATK by 2.5x after scoring 2 Perfects in a row"
+ },
+ 226: {
+ special: "Cuts the current HP of each enemy by 30%",
+ specialName: "Black Blade Ship Cutter",
+ captain: "Boosts ATK of Slasher characters by 2x"
+ },
+ 227: {
+ special: "Cuts the current HP of each enemy by 30%",
+ specialName: "Black Blade Ship Cutter",
+ captain: "Boosts ATK of Slasher characters by 2.5x"
+ },
+ 228: {
+ special: "Reduces Bind duration by 2 turns",
+ specialName: "Escapee Axe-Hand",
+ captain: "Boosts HP of Slasher characters by 1.5x"
+ },
+ 229: {
+ special: "Changes [INT] orbs into [PSY] orbs",
+ specialName: "Double Cross Dance",
+ captain: "Reduces damage received by 10%"
+ },
+ 230: {
+ special: "Deals 200 fixed damage to one enemy",
+ specialName: "Double Hyper Straight",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of STR characters by 1.5x"
+ },
+ 231: {
+ special: "Locks all orbs for 1 turn",
+ specialName: "Kimono Sleeve Cage",
+ captain: "Boosts ATK of QCK characters by 2x"
+ },
+ 232: {
+ special: "Locks all orbs for 1 turn",
+ specialName: "Kimono Sleeve Cage",
+ captain: "Boosts ATK of QCK characters by 2x"
+ },
+ 233: {
+ captain: "Boosts HP of PSY characters by 1.5x"
+ },
+ 234: {
+ special: "Deals 5x character's ATK in PSY damage to all enemies",
+ specialName: "Igarappapa",
+ captain: "Boosts HP of PSY characters by 2x"
+ },
+ 235: {
+ captain: "Boosts ATK of Fighter characters by 1.2x"
+ },
+ 236: {
+ special: "Deals 20x character's ATK in STR damage to one enemy",
+ specialName: "Superhuman Brass Knuckles",
+ captain: "Boosts ATK of Fighter characters by 1.5x"
+ },
+ 237: {
+ special: "Changes [DEX] orbs into [STR] orbs",
+ specialName: "[DEX] Slot Change [STR]"
+ },
+ 238: {
+ special: "Changes [TND] orbs into [DEX] orbs",
+ specialName: "[TND] Slot Change [DEX]"
+ },
+ 239: {
+ special: "Changes [TND] orbs into [QCK] orbs",
+ specialName: "[TND] Slot Change [QCK]"
+ },
+ 240: {
+ special: "Changes [STR] orbs into [PSY] orbs",
+ specialName: "[STR] Slot Change [PSY]"
+ },
+ 241: {
+ special: "Changes [QCK] orbs into [INT] orbs",
+ specialName: "[QCK] Slot Change [INT]"
+ },
+ 242: {
+ special: "Changes [DEX] orbs into [STR] orbs",
+ specialName: "[DEX] Slot Change [STR]"
+ },
+ 243: {
+ special: "Changes [TND] orbs into [DEX] orbs",
+ specialName: "[TND] Slot Change [DEX]"
+ },
+ 244: {
+ special: "Changes [TND] orbs into [QCK] orbs",
+ specialName: "[TND] Slot Change [QCK]"
+ },
+ 245: {
+ special: "Changes [STR] orbs into [PSY] orbs",
+ specialName: "[STR] Slot Change [PSY]"
+ },
+ 246: {
+ special: "Changes [QCK] orbs into [INT] orbs",
+ specialName: "[QCK] Slot Change [INT]"
+ },
+ 247: {
+ special: "Recovers 1,224 HP",
+ specialName: "Kyuun Spark",
+ captain: "Reduces damage received by 10%"
+ },
+ 248: {
+ special: "Deals random STR damage to one enemy",
+ specialName: "Rampage",
+ specialNotes: "#{random : 2,000 : 200,000}",
+ captain: "Boosts ATK of STR characters by 2.5x and reduces their HP by 60%"
+ },
+ 249: {
+ special: "Deals random STR damage to one enemy",
+ specialName: "Rampage",
+ specialNotes: "#{random : 2,000 : 200,000}",
+ captain: "Boosts ATK of STR characters by 3x and reduces their HP by 60%"
+ },
+ 250: {
+ special: "Recovers all HP",
+ specialName: "Blue Flame Rebirth",
+ captain: "Boosts ATK of PSY characters by 3x if HP is above 99% at the start of the turn"
+ },
+ 251: {
+ special: "Recovers all HP",
+ specialName: "Blue Flame Rebirth",
+ captain: "Boosts ATK of PSY characters by 3x if HP is above 99% at the start of the turn"
+ },
+ 252: {
+ special: "Reduces damage received from DEX enemies by 100% for 1 turn",
+ specialName: "Brilliant Punk",
+ captain: "Boosts ATK and HP of QCK characters by 2x"
+ },
+ 253: {
+ special: "Reduces damage received from DEX enemies by 100% for 1 turn",
+ specialName: "Brilliant Punk",
+ captain: "Boosts ATK and HP of QCK characters by 2x"
+ },
+ 254: {
+ special: "Deals 5,000 fixed damage to all enemies",
+ specialName: "Rose Rondo",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK and HP of INT characters by 2x"
+ },
+ 255: {
+ special: "Deals 5,000 fixed damage to all enemies",
+ specialName: "Rose Rondo",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK and HP of INT characters by 2x"
+ },
+ 256: {
+ special: "Changes [STR] and [QCK] orbs into [DEX] orbs",
+ specialName: "Beautiful Dual Flintlocks",
+ captain: "Boosts ATK and RCV of DEX characters by 2x"
+ },
+ 257: {
+ special: "Changes [STR] and [QCK] orbs into [DEX] orbs",
+ specialName: "Beautiful Dual Flintlocks",
+ captain: "Boosts ATK and RCV of DEX characters by 2x"
+ },
+ 258: {
+ special: "Changes [DEX] and [QCK] orbs into [STR] orbs",
+ specialName: "Pocket Mallet",
+ captain: "Boosts ATK and RCV of STR characters by 2x"
+ },
+ 259: {
+ special: "Changes [DEX] and [QCK] orbs into [STR] orbs",
+ specialName: "Pocket Mallet",
+ captain: "Boosts ATK and RCV of STR characters by 2x"
+ },
+ 260: {
+ special: "Cuts the current HP of each enemy by 30%",
+ specialName: "Seaquake",
+ captain: "Boosts ATK of all characters by 3x if HP is below 30% at the start of the turn"
+ },
+ 261: {
+ special: "Cuts the current HP of each enemy by 30%",
+ specialName: "Seaquake",
+ captain: "Boosts ATK of all characters by 3x if HP is below 30% at the start of the turn"
+ },
+ 262: {
+ captain: "Recovers 2x character's RCV in HP at the end of each turn"
+ },
+ 263: {
+ special: "Amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Shave",
+ captain: "Boosts ATK of Fighter characters by 2x"
+ },
+ 264: {
+ captain: "Reduces damage received from INT enemies by 30%"
+ },
+ 265: {
+ special: "Reduces Bind duration by 3 turns",
+ specialName: "Tempered Kukris",
+ captain: "Boosts ATK and HP of Slasher characters by 1.5x"
+ },
+ 267: {
+ special: "Reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Shield Crusher",
+ captain: "Boosts ATK of all characters by 1.5x"
+ },
+ 268: {
+ special: "Reduces damage received by 50% for 3 turns",
+ specialName: "White Out",
+ captain: "Reduces damage received by 25%"
+ },
+ 269: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Straight"
+ },
+ 270: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 271: {
+ special: "Changes [STR] orbs into [DEX] orbs",
+ specialName: "[STR] Slot Change [DEX]"
+ },
+ 272: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 273: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Straight"
+ },
+ 274: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Slash"
+ },
+ 275: {
+ special: "Reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Shield Crusher"
+ },
+ 276: {
+ special: "Changes [QCK] orbs into [DEX] orbs",
+ specialName: "[QCK] Slot Change [DEX]"
+ },
+ 277: {
+ special: "Changes [INT] orbs into [PSY] orbs",
+ specialName: "[INT] Slot Change [PSY]"
+ },
+ 278: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Slash"
+ },
+ 279: {
+ special: "Changes [RCV] orbs into [STR] orbs",
+ specialName: "[RCV] Slot Change [STR]"
+ },
+ 280: {
+ special: "Changes [DEX] orbs into [QCK] orbs",
+ specialName: "[DEX] Slot Change [QCK]"
+ },
+ 281: {
+ special: "Changes [QCK] orbs into [DEX] orbs",
+ specialName: "[QCK] Slot Change [DEX]"
+ },
+ 282: {
+ special: "Changes [QCK] orbs into [RCV] orbs",
+ specialName: "[QCK] Slot Change [RCV]"
+ },
+ 283: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Spiral"
+ },
+ 284: {
+ special: "Deals 5x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Shot"
+ },
+ 285: {
+ special: "Reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Shield Crusher"
+ },
+ 286: {
+ special: "Changes [DEX] orbs into [RCV] orbs",
+ specialName: "[DEX] Slot Change [RCV]"
+ },
+ 287: {
+ special: "Changes [PSY] orbs into [RCV] orbs",
+ specialName: "[PSY] Slot Change [RCV]"
+ },
+ 288: {
+ special: "Deals 5x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Shot"
+ },
+ 289: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 290: {
+ special: "Deals 25x character's ATK in INT damage to one enemy",
+ specialName: "Judgment Bomb",
+ captain: "Boosts ATK of Shooter characters by 1.5x"
+ },
+ 291: {
+ special: "Changes adjacent orbs into [RCV] orbs",
+ specialName: "[RCV] Slot Storm",
+ captain: "Reduces damage received from INT enemies by 50%"
+ },
+ 292: {
+ special: "Changes adjacent orbs into [RCV] orbs",
+ specialName: "[RCV] Slot Storm",
+ captain: "Reduces damage received from PSY enemies by 50%"
+ },
+ 293: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield",
+ captain: "Boosts HP of QCK characters by 2x"
+ },
+ 294: {
+ special: "Deals 10x character's ATK in character's type damage to one enemy",
+ specialName: "Hyper Straight",
+ captain: "Boosts HP of STR characters by 2x"
+ },
+ 295: {
+ special: "Reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Shield Crusher",
+ captain: "Boosts HP of DEX characters by 2x"
+ },
+ 296: {
+ special: "Recovers 2,000 HP, randomizes all orbs",
+ specialName: "Cleansing Wash",
+ captain: "Boosts ATK of Shooter characters by 2x"
+ },
+ 297: {
+ special: "Recovers 2,000 HP, randomizes all orbs",
+ specialName: "Cleansing Wash",
+ captain: "Boosts ATK of Shooter characters by 2x"
+ },
+ 298: {
+ special: "Deals 25x character's ATK in PSY damage to one enemy",
+ specialName: "Moonwalk",
+ captain: "Boosts HP of PSY characters by 2x"
+ },
+ 299: {
+ special: "Cuts the current HP of each enemy by 10%",
+ specialName: "8-Sword Style Onigumo",
+ captain: "Boosts ATK of DEX characters by 2x"
+ },
+ 305: {
+ special: "Randomly changes all orbs into either [PSY] or [RCV] orbs",
+ specialName: "Meteor Fist Shower",
+ captain: "Boosts ATK and HP of PSY characters by 1.5x"
+ },
+ 306: {
+ special: "Randomly changes all orbs into either [PSY] or [RCV] orbs",
+ specialName: "Meteor Fist Shower",
+ captain: "Boosts ATK and HP of PSY characters by 2x"
+ },
+ 307: {
+ special: "Randomly changes all orbs other than [DEX] into either [DEX], [RCV] or [TND] orbs",
+ specialName: "ROOM – Chambres",
+ captain: "Boosts ATK of DEX characters by 2.5x"
+ },
+ 308: {
+ special: "Randomly changes all orbs other than [DEX] into either [DEX], [RCV] or [TND] orbs",
+ specialName: "ROOM – Chambres",
+ captain: "Boosts ATK of DEX characters by 2.5x"
+ },
+ 309: {
+ special: "Cuts the current HP of each enemy by 10%, reduces the defense of all enemies by 50% for 3 turns",
+ specialName: "Demon Face",
+ captain: "Reduces RCV of all characters by 90%, reduces damage received by 40%"
+ },
+ 310: {
+ special: "Cuts the current HP of each enemy by 10%, reduces the defense of all enemies by 50% for 3 turns",
+ specialName: "Demon Face",
+ captain: "Reduces RCV of all characters by 90%, reduces damage received by 40%"
+ },
+ 311: {
+ special: "Deals 100x character's ATK in fixed damage to one enemy, reduces crew's HP to 1",
+ specialName: "Massacre Soldier",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK by 3.5x after scoring 3 hits below Good in a row",
+ sailor: "When HP is below 30% at the start of the turn, boosts ATK of Cerebral characters by 50"
+ },
+ 312: {
+ special: "Deals 100x character's ATK in fixed damage to one enemy, reduces crew's HP to 1",
+ specialName: "Massacre Soldier",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK by 3.5x after scoring 3 hits below Good in a row",
+ sailor: "When HP is below 30% at the start of the turn, boosts ATK of Cerebral characters by 50"
+ },
+ 313: {
+ special: "Boosts ATK of Striker characters by 1.5x for 1 turn, deals 25x character's ATK in PSY damage to one enemy",
+ specialName: "Karmic Punishment",
+ captain: "Boosts ATK of Striker characters by 2x and their HP by 1.5x"
+ },
+ 314: {
+ special: "Boosts ATK of Striker characters by 1.5x for 1 turn, deals 25x character's ATK in PSY damage to one enemy",
+ specialName: "Karmic Punishment",
+ captain: "Boosts ATK of Striker characters by 2x and their HP by 1.5x"
+ },
+ 315: {
+ special: "Changes [PSY] and [INT] orbs into [STR] orbs, empties slots with [DEX] and [QCK] orbs",
+ specialName: "Aye Aye, Captain!",
+ captain: "Boosts ATK, HP and RCV of Fighter characters by 1.5x",
+ sailor: "Reduces Paralysis for 2 turns for himself"
+ },
+ 316: {
+ special: "Changes [PSY] and [INT] orbs into [STR] orbs, empties slots with [DEX] and [QCK] orbs",
+ specialName: "Aye Aye, Captain!",
+ captain: "Boosts ATK, HP and RCV of Fighter characters by 1.5x",
+ sailor: "Reduces Paralysis for 2 turns for himself"
+ },
+ 317: {
+ special: "Randomly changes all orbs into either [DEX] or [STR] orbs, deals random DEX damage to all enemies",
+ specialName: "Beautiful Secretary's Job",
+ specialNotes: "#{random : 1 : 15,000}",
+ captain: "Recovers 500 HP at end of each turn, reduces damage received by 10%"
+ },
+ 318: {
+ special: "Randomly changes all orbs into either [DEX] or [STR] orbs, deals random DEX damage to all enemies",
+ specialName: "Beautiful Secretary's Job",
+ specialNotes: "#{random : 1 : 15,000}",
+ captain: "Recovers 1,000 HP at end of each turn, reduces damage received by 15%"
+ },
+ 319: {
+ special: "Locks all orbs for 1 turn",
+ specialName: "Hook, Line, and Sinker",
+ captain: "Boosts ATK of Striker characters by 1.5x"
+ },
+ 320: {
+ special: "Locks all orbs for 1 turn",
+ specialName: "Hook, Line, and Sinker",
+ captain: "Boosts ATK of Striker characters by 2x"
+ },
+ 321: {
+ special: "Deals 25x character's ATK in QCK damage to one enemy",
+ specialName: "Taciturn Combo",
+ captain: "Boosts ATK of QCK type characters by 2x"
+ },
+ 322: {
+ special: "Deals 25x character's ATK in QCK damage to one enemy",
+ specialName: "Taciturn Combo",
+ captain: "Boosts ATK of QCK type characters by 2x"
+ },
+ 323: {
+ special: "Amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Mountain Wind",
+ captain: "Boosts HP and RCV of QCK characters by 1.5x"
+ },
+ 324: {
+ special: "Amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Mountain Wind",
+ captain: "Boosts HP and RCV of QCK characters by 1.5x"
+ },
+ 325: {
+ special: "Changes [TND] orbs into [RCV] orbs, changes [RCV] orbs into [QCK] orbs",
+ specialName: "Red-Hot Shipwright Soul"
+ },
+ 326: {
+ special: "Empties all slots, deals 25x character's ATK in STR damage to one enemy",
+ specialName: "Munch-Munch Tongue Cannon",
+ captain: "Recovers 10x character's RCV in HP at the end of each turn"
+ },
+ 327: {
+ special: "Empties all slots, deals 25x character's ATK in STR damage to one enemy",
+ specialName: "Munch-Munch Tongue Cannon",
+ captain: "Recovers 10x character's RCV in HP at the end of each turn"
+ },
+ 328: {
+ special: "Deals 20x character's ATK in QCK damage to all enemies",
+ specialName: "Fiddle Banff",
+ captain: "Boosts RCV of all characters by 5x if HP is below 30% at the start of the turn"
+ },
+ 329: {
+ special: "Deals 20x character's ATK in QCK damage to all enemies",
+ specialName: "Fiddle Banff",
+ captain: "Boosts RCV of all characters by 5x if HP is below 30% at the start of the turn"
+ },
+ 332: {
+ special: "Changes [STR] orbs into [RCV] orbs, changes [RCV] orbs into [DEX] orbs",
+ specialName: "Snow-Slicing Blade",
+ captain: "Boosts ATK, HP and RCV of Striker characters by 1.2x"
+ },
+ 333: {
+ special: "Recovers a random amount of HP",
+ specialName: "Doctor Stop",
+ captain: "Boosts ATK and RCV of PSY and INT characters by 1.5x"
+ },
+ 334: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 335: {
+ special: "Recovers 5x character's RCV in HP",
+ specialName: "Light Healing"
+ },
+ 336: {
+ special: "Switches orbs between slots twice",
+ specialName: "Franky Centaur",
+ captain: "Reduces damage received by 10% if HP is above 50% at the start of the turn, boosts ATK of PSY characters by 2x and reduces ATK of every other character by 20% if HP is above 50% at the start of the turn"
+ },
+ 337: {
+ special: "Switches orbs between slots twice",
+ specialName: "Franky Centaur",
+ captain: "Reduces damage received by 10% if HP is above 50% at the start of the turn, boosts ATK of PSY characters by 2.5x and reduces ATK of every other character by 20% if HP is above 50% at the start of the turn"
+ },
+ 338: {
+ special: "Changes [QCK] orbs into [PSY] orbs",
+ specialName: "Wavy Square Hair"
+ },
+ 339: {
+ special: "Changes [INT] orbs into [TND] orbs",
+ specialName: "Straight Square Hair"
+ },
+ 340: {
+ special: "Randomly changes all orbs into either [STR] or [QCK] orbs, deals random STR damage to all enemies",
+ specialName: "Kraken Tentacle Crush",
+ specialNotes: "#{random : 1 : 15,000}",
+ captain: "Boosts ATK of Striker characters by 2x"
+ },
+ 341: {
+ special: "Randomly changes all orbs into either [STR] or [QCK] orbs, deals random STR damage to all enemies",
+ specialName: "Kraken Tentacle Crush",
+ specialNotes: "#{random : 1 : 15,000}",
+ captain: "Boosts ATK of Striker characters by 2x"
+ },
+ 352: {
+ special: "Boosts ATK of Shooter characters by 1.75x for 2 turns",
+ specialName: "Smash Buster",
+ captain: "Boosts ATK of Shooter characters by 2x"
+ },
+ 353: {
+ special: "Boosts ATK of Shooter characters by 1.75x for 2 turns",
+ specialName: "Smash Buster",
+ captain: "Boosts ATK of Shooter characters by 2.5x"
+ },
+ 354: {
+ special: "Reduces Bind and Despair duration by 3 turns",
+ specialName: "Two-Sword Dance"
+ },
+ 355: {
+ special: "Reduces Bind and Despair duration by 3 turns",
+ specialName: "Two-Sword Dance"
+ },
+ 356: {
+ special: "Changes own orb into [STR], deals 9x character's ATK in STR damage to all enemies",
+ specialNotes: "The in-game description is wrong, the special does not deal 7x damage",
+ specialName: "Steel Magnetic Arm",
+ captain: "Boosts ATK of Striker characters by 2x"
+ },
+ 357: {
+ special: "Changes own orb into [STR], deals 9x character's ATK in STR damage to all enemies",
+ specialNotes: "The in-game description is wrong, the special does not deal 7x damage",
+ specialName: "Steel Magnetic Arm",
+ captain: "Boosts ATK of Striker characters by 2.5x"
+ },
+ 358: {
+ special: "Changes [TND] and [RCV] orbs into [DEX] orbs, deals random DEX damage to all enemies",
+ specialName: "Scratch Body",
+ captain: "Boosts ATK of DEX characters by 2.5x if HP is above 99% at the start of the turn",
+ specialNotes: "#{random : 5,000 : 20,000}"
+ },
+ 359: {
+ special: "Changes [TND] and [RCV] orbs into [DEX] orbs, deals random DEX damage to all enemies",
+ specialName: "Scratch Body",
+ specialNotes: "#{random : 5,000 : 20,000}",
+ captain: "Boosts ATK of DEX characters by 3x if HP is above 99% at the start of the turn"
+ },
+ 360: {
+ special: "Deals 10x character's ATK in INT damage to all enemies, protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "Prehistoric Power",
+ specialNotes: "#{zombie}",
+ captain: "Boosts ATK of INT characters by 3x if HP is below 30% at the start of the turn",
+ sailor: "Boosts HP of Powerhouse characters by 100"
+ },
+ 361: {
+ special: "Deals 10x character's ATK in INT damage to all enemies, protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "Prehistoric Power",
+ specialNotes: "#{zombie}",
+ captain: "Boosts ATK of INT characters by 3x if HP is below 30% at the start of the turn",
+ sailor: "Boosts HP of Powerhouse characters by 100"
+ },
+ 362: {
+ special: "For 2 turns, boosts the amount healed by RCV orbs by 1.5x, then 2x, then 2.5x from the third crew member onward",
+ specialName: "Big Eater",
+ captain: "Boosts ATK and RCV of PSY characters by 2x"
+ },
+ 363: {
+ special: "For 2 turns, boosts the amount healed by RCV orbs by 1.5x, then 2x, then 2.5x from the third crew member onward",
+ specialName: "Big Eater",
+ captain: "Boosts ATK and RCV of PSY characters by 2x"
+ },
+ 364: {
+ special: "Changes [STR] and [DEX] orbs into [QCK] orbs",
+ specialName: "Gang Fortress",
+ captain: "Boosts ATK and RCV of QCK characters by 2x",
+ sailor: "Boosts RCV of all characters by 10"
+ },
+ 365: {
+ special: "Changes [STR] and [DEX] orbs into [QCK] orbs",
+ specialName: "Gang Fortress",
+ captain: "Boosts ATK and RCV of QCK characters by 2x",
+ sailor: "Boosts RCV of all characters by 10"
+ },
+ 366: {
+ special: "Deals 20x character's ATK in INT damage to all enemies, reduces Bind duration by 5 turns",
+ specialName: "Dark King's Aura",
+ captain: "Boosts chain multiplier by 4x"
+ },
+ 367: {
+ special: "Deals 20x character's ATK in INT damage to all enemies, reduces Bind duration by 5 turns",
+ specialName: "Dark King's Aura",
+ captain: "Boosts chain multiplier by 4x"
+ },
+ 368: {
+ special: "Reduces damage received from DEX enemies by 50% for 1 turn",
+ specialName: "Crystal Shield DEX"
+ },
+ 369: {
+ special: "Reduces damage received from STR enemies by 50% for 1 turn",
+ specialName: "Crystal Shield STR"
+ },
+ 370: {
+ special: "Reduces damage received from QCK enemies by 50% for 1 turn",
+ specialName: "Crystal Shield QCK"
+ },
+ 371: {
+ special: "Reduces damage received from INT enemies by 50% for 1 turn",
+ specialName: "Crystal Shield INT"
+ },
+ 372: {
+ special: "Reduces damage received from PSY enemies by 50% for 1 turn",
+ specialName: "Crystal Shield PSY"
+ },
+ 373: {
+ special: "Reduces damage received from DEX enemies by 50% for 1 turn",
+ specialName: "Crystal Shield DEX",
+ captain: "Boosts ATK of Slasher characters by 1.5x"
+ },
+ 374: {
+ special: "Reduces damage received from STR enemies by 50% for 1 turn",
+ specialName: "Crystal Shield STR",
+ captain: "Boosts ATK of Shooter characters by 1.5x"
+ },
+ 375: {
+ special: "Reduces damage received from QCK enemies by 50% for 1 turn",
+ specialName: "Crystal Shield QCK",
+ captain: "Boosts HP of Striker characters by 1.5x"
+ },
+ 376: {
+ special: "Reduces damage received from INT enemies by 50% for 1 turn",
+ specialName: "Crystal Shield INT",
+ captain: "Boosts ATK of Fighter characters by 1.5x"
+ },
+ 377: {
+ special: "Reduces damage received from PSY enemies by 50% for 1 turn",
+ specialName: "Crystal Shield PSY",
+ captain: "Boosts ATK of Striker characters by 1.5x"
+ },
+ 378: {
+ special: "Recovers 3x character's RCV in HP",
+ specialName: "Quick Healing",
+ captain: "Boosts RCV of all characters by 1.5x"
+ },
+ 379: {
+ special: "Removes poison",
+ specialName: "Dugong Kung Fu Fist of Healing"
+ },
+ 380: {
+ special: "Removes poison",
+ specialName: "Dugong Kung Fu Fist of Healing",
+ captain: "Boosts ATK and RCV of STR characters by 1.5x"
+ },
+ 381: {
+ special: "Reduces damage received by 20% for 1 turn",
+ specialName: "Iron Shield"
+ },
+ 382: {
+ special: "Reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Shield Crusher"
+ },
+ 383: {
+ special: "Strongly poisons one enemy",
+ specialNotes: "Strong poison deals 5x character's ATK in fixed damage at the end of each turn",
+ specialName: "Poison Needle",
+ captain: "Reduces damage received by 10%, boosts ATK of INT characters by 2x"
+ },
+ 384: {
+ special: "Strongly poisons one enemy",
+ specialNotes: "Strong poison deals 5x character's ATK in fixed damage at the end of each turn",
+ specialName: "Poison Needle",
+ captain: "Reduces damage received by 20%, boosts ATK of INT characters by 2x"
+ },
+ 385: {
+ special: "Reduces damage received by 50% for 1 turn, boosts ATK of Fighter characters by 1.25x for 1 turn",
+ specialName: "Zombie Marionette Operation",
+ captain: "Boosts ATK of INT characters by 2x"
+ },
+ 386: {
+ special: "Reduces damage received by 50% for 1 turn, boosts ATK of Fighter characters by 1.25x for 1 turn",
+ specialName: "Zombie Marionette Operation",
+ captain: "Boosts ATK of INT characters by 2x"
+ },
+ 387: {
+ special: "Randomly changes all orbs into either [PSY] or [INT] orbs, deals random PSY damage to all enemies",
+ specialName: "Square Plate Sword",
+ specialNotes: "#{random : 1 : 10,000}",
+ captain: "Boosts RCV of PSY characters by 1.5x"
+ },
+ 388: {
+ special: "Randomly changes all orbs into either [PSY] or [INT] orbs, deals random PSY damage to all enemies",
+ specialName: "Square Plate Sword",
+ specialNotes: "#{random : 1 : 10,000}",
+ captain: "Boosts RCV of PSY characters by 1.5x"
+ },
+ 389: {
+ special: "Changes own orb into [QCK] and every other orb into either [RCV], [STR], [DEX] or [QCK] orbs",
+ specialName: "Hell Wink",
+ captain: "Boosts ATK by 2.25x following a chain of DEX > INT > QCK attacks no lower than Good"
+ },
+ 390: {
+ special: "Changes own orb into [QCK] and every other orb into either [RCV], [STR], [DEX] or [QCK] orbs",
+ specialName: "Hell Wink",
+ captain: "Boosts ATK by 2.75x following a chain of DEX > INT > QCK attacks no lower than Good"
+ },
+ 391: {
+ special: "Reduces damage received by 90% for 1 turn, reduces the defense of all enemies by 80% for 1 turn, poisons enemies for 1,000 damage for a single turn",
+ specialName: "Negative Hollow",
+ specialNotes: "Poison damage deals 1,000 damage exactly and will ignore enemy armor at the end of your turn",
+ captain: "Boosts RCV of DEX characters by 1.5x"
+ },
+ 392: {
+ special: "Reduces damage received by 90% for 1 turn, reduces the defense of all enemies by 80% for 1 turn, poisons enemies for 1,000 damage for a single turn",
+ specialName: "Negative Hollow",
+ specialNotes: "Poison damage deals 1,000 damage exactly and will ignore enemy armor at the end of your turn",
+ captain: "Boosts RCV of DEX characters by 2x"
+ },
+ 393: {
+ special: "Deals 35x character's ATK in STR damage to one enemy",
+ specialName: "Kumacy Knuckle"
+ },
+ 394: {
+ special: "Deals 500 fixed damage to all enemies",
+ specialName: "The Tempest Called Love",
+ specialNotes: "#{fixed}"
+ },
+ 395: {
+ special: "Empties adjacent slots, amplifies the effect of orbs by 1.25x for 1 turn",
+ specialNotes: "#{orb : 1.25x}",
+ specialName: "Mole Banana",
+ captain: "Boosts ATK and RCV of QCK characters by 1.2x"
+ },
+ 396: {
+ special: "Empties adjacent slots, amplifies the effect of orbs by 1.25x for 1 turn",
+ specialNotes: "#{orb : 1.25x}",
+ specialName: "Mole Banana",
+ captain: "Boosts ATK and RCV of QCK characters by 1.2x"
+ },
+ 397: {
+ special: "Fills [EMPTY] orbs with [STR] orbs with a 50% probability, deals 15x character's ATK in damage to all enemies",
+ specialName: "Four Hundred Base Hits",
+ captain: "Boosts ATK by 3x after scoring 5 Perfects in a row"
+ },
+ 398: {
+ special: "Fills [EMPTY] orbs with [STR] orbs with a 50% probability, deals 15x character's ATK in damage to all enemies",
+ specialName: "Four Hundred Base Hits",
+ captain: "Boosts ATK by 4x after scoring 5 Perfects in a row"
+ },
+ 399: {
+ special: "Boosts ATK of DEX characters by 1.5x for 1 turn",
+ specialName: "Spike-U-Puncture",
+ captain: "Boosts HP of Striker characters by 1.5x"
+ },
+ 400: {
+ special: "Boosts ATK of DEX characters by 1.5x for 1 turn",
+ specialName: "Spike-U-Puncture",
+ captain: "Boosts HP of Striker characters by 2x"
+ },
+ 401: {
+ special: "Reduces damage received by 50% for 1 turn, boosts ATK of Slasher characters by 1.25x for 1 turn",
+ specialName: "Iron Guard",
+ captain: "Reduces damage received by 10%, boosts ATK of Slasher characters by 1.5x"
+ },
+ 402: {
+ special: "Reduces damage received by 50% for 1 turn, boosts ATK of Slasher characters by 1.25x for 1 turn",
+ specialName: "Iron Guard",
+ captain: "Reduces damage received by 10%, boosts ATK of Slasher characters by 2x"
+ },
+ 403: {
+ special: "Deals several times the character's ATK in QCK damage to all enemies",
+ specialNotes: "#{specialProportional : lower : 150 * ( 1 - (remaining HP) / (total HP) )}",
+ specialName: "Backwater Sword Dance",
+ captain: "Reduces damage received by 50% if HP is low, boosts RCV of all characters by 3x if HP is low"
+ },
+ 404: {
+ special: "Reduces damage received by 50% for 2 turns, boosts RCV of all characters by 2x for 2 turns",
+ specialName: "Clear-Clear Fruit",
+ captain: "Boosts ATK of Shooter characters by 1.5x"
+ },
+ 405: {
+ special: "Reduces damage received by 50% for 2 turns, boosts RCV of all characters by 2x for 2 turns",
+ specialName: "Clear-Clear Fruit",
+ captain: "Boosts ATK of Shooter characters by 2x"
+ },
+ 406: {
+ special: "Reduces crew's HP to 1, deals 1,000 fixed damage to all enemies, boosts ATK of all characters by 1.2x for 1 turn",
+ specialName: "Skills of the Ancient Warriors",
+ specialNotes: "#{fixed}"
+ },
+ 407: {
+ special: "Randomizes all orbs, deals 7x character's ATK in DEX damage to all enemies",
+ specialName: "Zombie-Style 36-Pound Phoenix"
+ },
+ 408: {
+ special: "Changes own orb into [INT] and randomizes every other orb, deals 15x character's ATK in INT damage to all enemies",
+ specialName: "Ground Death",
+ captain: "Reduces damage received by 20%, boosts ATK of Slasher characters by 2x"
+ },
+ 409: {
+ special: "Changes own orb into [QCK], deals 13x character's ATK in QCK damage to one enemy",
+ specialName: "Ocean Current Shoulder Throw",
+ captain: "Boosts ATK of Fighter characters by 2x"
+ },
+ 410: {
+ special: "Changes own orb into [QCK], deals 13x character's ATK in QCK damage to one enemy",
+ specialName: "Ocean Current Shoulder Throw",
+ captain: "Boosts ATK of Fighter characters by 2.5x"
+ },
+ 411: {
+ special: "Changes adjacent orbs into [STR] orbs, deals 1,000 fixed damage to all enemies",
+ specialName: "Ursa Shock",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK and HP of STR characters by 2x"
+ },
+ 412: {
+ special: "Changes adjacent orbs into [STR] orbs, deals 1,000 fixed damage to all enemies",
+ specialName: "Ursa Shock",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK and HP of STR characters by 2x"
+ },
+ 413: {
+ special: "Changes [STR] and [DEX] orbs into [INT] orbs",
+ specialName: "Doppelman",
+ captain: "Boosts ATK of INT characters by 2.5x if HP is above 99% at the start of the turn"
+ },
+ 414: {
+ special: "Changes [STR] and [DEX] orbs into [INT] orbs",
+ specialName: "Doppelman",
+ captain: "Boosts ATK of INT characters by 3x if HP is above 99% at the start of the turn"
+ },
+ 415: {
+ special: "Recovers 15x character's RCV in HP, delays all enemies for 1 turn",
+ specialName: "Love-Love Mellow",
+ captain: "Boosts ATK of QCK and PSY characters by 2.75x and their RCV by 1.5x if HP is above 70% at the start of the turn"
+ },
+ 416: {
+ special: "Recovers 15x character's RCV in HP, delays all enemies for 1 turn",
+ specialName: "Love-Love Mellow",
+ captain: "Boosts ATK of QCK and PSY characters by 2.75x and their RCV by 1.5x if HP is above 70% at the start of the turn"
+ },
+ 417: {
+ special: "Switches orbs between slots twice, amplifies the effect of orbs by 2x for 1 turn",
+ specialNotes: "#{orb : 2x}",
+ specialName: "Overheat",
+ captain: "Boosts ATK of Slasher characters by 2x"
+ },
+ 418: {
+ special: "Switches orbs between slots twice, amplifies the effect of orbs by 2x for 1 turn",
+ specialNotes: "#{orb : 2x}",
+ specialName: "Overheat",
+ captain: "Boosts ATK and HP of Slasher characters by 2x"
+ },
+ 419: {
+ special: "Reduces the defense of all enemies by 50% for 2 turns, randomizes all orbs",
+ specialName: "Parage Shot: The Storm",
+ captain: "Boosts ATK of QCK characters by 2x"
+ },
+ 420: {
+ special: "Reduces Despair duration by 3 turns, deals 15x character's ATK in STR damage to one enemy",
+ specialName: "Gum-Gum Bazooka: Supremacy",
+ captain: "Boosts ATK, HP and RCV of STR characters by 1.5x"
+ },
+ 421: {
+ special: "Reduces Bind duration by 2 turns, deals 10x character's ATK in DEX damage to all enemies",
+ specialName: "Three Thousand Worlds: The Final Stroke",
+ captain: "Boosts ATK, HP and RCV of DEX characters by 1.5x"
+ },
+ 422: {
+ special: "Reduces damage received from INT enemies by 100% for 1 turn, recovers a random amount of HP",
+ specialName: "Mirage Tempo: The Heavens",
+ specialNotes: "Estimated healing range: between 1,000 HP and 3,000 HP.",
+ captain: "Boosts ATK, HP and RCV of INT characters by 1.5x"
+ },
+ 423: {
+ special: "Recovers 4,343 HP, reduces the defense of all enemies by 50% for 2 turns",
+ specialName: "Lullaby Parry",
+ captain: "Protects from defeat as long as HP is above 70%",
+ captainNotes: "#{zombie}"
+ },
+ 424: {
+ special: "Recovers 4,343 HP, reduces the defense of all enemies by 50% for 2 turns",
+ specialName: "Lullaby Parry",
+ captain: "Boosts ATK of the whole crew by 1.5x and protects from defeat as long as HP is above 70%",
+ captainNotes: "#{zombie}"
+ },
+ 425: {
+ special: "Deals random PSY damage to all enemies",
+ specialName: "Shusui: Three Verse Arrow Notch Slash",
+ specialNotes: "#{random : 1 : 100,000}",
+ captain: "Boosts ATK and HP of Slasher characters by 1.5x"
+ },
+ 426: {
+ special: "Boosts ATK of STR characters by 1.05x for 5 turns",
+ specialName: "Barco Grabber Breath",
+ captain: "Boosts HP of STR characters by 2x"
+ },
+ 427: {
+ special: "Reduces Bind and Despair duration by 2 turns",
+ specialName: "Havoc Sonar",
+ captain: "Boosts HP of DEX characters by 2x"
+ },
+ 428: {
+ special: "Reduces damage received by 50% for 2 turns",
+ specialName: "Last Boss – Deep Dive of Dreams",
+ captain: "Boosts ATK of PSY characters by 2x"
+ },
+ 429: {
+ special: "Deals 7x character's ATK in DEX damage to all enemies, reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "South Bird's Fearless Smile"
+ },
+ 430: {
+ special: "Amplifies the effect of orbs by 1.5x for 1 turn",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Spring Hopper",
+ captain: "Boosts ATK of DEX characters by 1.5x"
+ },
+ 431: {
+ special: "Amplifies the effect of orbs by 1.5x for 1 turn",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Spring Hopper",
+ captain: "Boosts ATK and HP of DEX characters by 1.5x"
+ },
+ 432: {
+ special: "Deals 20x character's ATK in QCK damage to one enemy",
+ specialName: "Big Chop"
+ },
+ 433: {
+ special: "Reduces Bind and Despair duration by 1 turn",
+ specialName: "New Kama Seduction",
+ captain: "Boosts ATK by 2x following a chain of QCK > STR > DEX attacks no lower than Good"
+ },
+ 434: {
+ special: "Amplifies the effect of orbs by 1.25x for 3 turns",
+ specialNotes: "#{orb : 1.25x}",
+ specialName: "New Kama Karate Maiden's Awakening",
+ captain: "Boosts ATK by 2x following a chain of PSY > INT > INT attacks no lower than Good"
+ },
+ 435: {
+ special: "Randomly changes [RCV], [STR] and [DEX] orbs into either [STR] or [QCK] orbs",
+ specialName: "Maiden's Bloom",
+ captain: "Boosts ATK by 2x following a chain of INT > PSY > QCK attacks no lower than Good"
+ },
+ 436: {
+ special: "Randomly changes [RCV], [STR] and [DEX] orbs into either [STR] or [QCK] orbs",
+ specialName: "Maiden's Bloom",
+ captain: "Boosts ATK by 2.25x following a chain of INT > PSY > QCK attacks no lower than Good"
+ },
+ 437: {
+ special: "Recovers 3x character's RCV in HP, reduces damage received by 80% for 1 turn, poisons enemies for 1,000 for a single turn",
+ specialName: "Negative Horo \"Sweet\"",
+ specialNotes: "Poison damage deals 1,000 damage exactly and will ignore enemy armor at the end of your turn",
+ captain: "Boosts RCV of [DEX] characters by 3x if HP is below 30% at the start of the turn"
+ },
+ 438: {
+ special: "Recovers 3x character's RCV in HP, reduces damage received by 80% for 1 turn, poisons enemies for 1,000 for a single turn",
+ specialName: "Negative Horo \"Sweet\"",
+ specialNotes: "Poison damage deals 1,000 damage exactly and will ignore enemy armor at the end of your turn",
+ captain: "Boosts RCV of [DEX] characters by 5x if HP is below 30% at the start of the turn"
+ },
+ 439: {
+ special: "Changes adjacent orbs into [RCV] and randomizes every other orb",
+ specialName: "Charge! Supersonic Duck Squadron! \"Love\"",
+ captain: "Recovers 5x character's RCV in HP at the end of each turn"
+ },
+ 440: {
+ special: "Changes adjacent orbs into [RCV] and randomizes every other orb",
+ specialName: "Charge! Supersonic Duck Squadron! \"Love\"",
+ captain: "Recovers 7x character's RCV in HP at the end of each turn"
+ },
+ 444: {
+ captain: "Boosts ATK of Evolver and Booster characters by 2x if HP is above 50% at the start of the turn"
+ },
+ 445: {
+ special: "Randomly changes all orbs into either [STR], [DEX], [QCK], [PSY] or [INT] orbs, switches orbs between slots 3 times",
+ specialName: "Support Incoming! Supersonic Duck Squadron!",
+ captain: "Boosts ATK of Evolver and Booster characters by 2.5x if HP is above 50% at the start of the turn"
+ },
+ 446: {
+ special: "Deals 10 times the damage received in the previous turn in typeless damage to all enemies",
+ specialName: "Black Hole",
+ captain: "Increases damage recieved by 2x, boosts ATK of STR characters by 2x and their HP by 1.5x"
+ },
+ 447: {
+ special: "Deals 10 times the damage received in the previous turn in typeless damage to all enemies",
+ specialName: "Black Hole",
+ captain: "Increases damage recieved by 2x, boosts ATK of STR characters by 2.5x and their HP by 2.25x"
+ },
+ 448: {
+ special: "Boosts chances of getting [QCK] orbs for 3 turns",
+ specialName: "Pirate King's Sword",
+ captain: "Boosts ATK of QCK characters by 3x if HP is above 99% at the start of the turn"
+ },
+ 449: {
+ special: "Boosts chances of getting [QCK] orbs for 3 turns",
+ specialName: "Pirate King's Sword",
+ captain: "Boosts ATK of QCK characters by 3x if HP is above 99% at the start of the turn"
+ },
+ 450: {
+ special: "Boosts ATK of Fighter characters by 1.5x for 1 turn, deals 25x character's ATK in DEX damage to one enemy",
+ specialName: "Number Eight's One Hit",
+ captain: "Boosts ATK of Fighter characters by 2x and their HP by 1.5x",
+ sailor: "Boosts ATK of Fighter characters by 20"
+ },
+ 451: {
+ special: "Boosts ATK of Fighter characters by 1.5x for 1 turn, deals 25x character's ATK in DEX damage to one enemy",
+ specialName: "Number Eight's One Hit",
+ captain: "Boosts ATK of Fighter characters by 2x and their HP by 1.5x",
+ sailor: "Boosts ATK of Fighter characters by 20"
+ },
+ 452: {
+ special: "Changes own orb and the captain's orb into [PSY]",
+ specialName: "Dread Morning Star",
+ captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Striker characters by 2x"
+ },
+ 453: {
+ special: "Changes own orb and the captain's orb into [PSY]",
+ specialName: "Dread Morning Star",
+ captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Striker characters by 2x"
+ },
+ 454: {
+ special: "Boosts ATK of STR characters by 1.5x for 1 turn, deals 15x character's ATK in STR damage to all enemies",
+ specialName: "Manly Flaming Sword",
+ captain: "Boosts ATK of STR characters by 2x, boosts damage of STR specials by 2x",
+ captainNotes: "#{noFixedPerc}"
+ },
+ 455: {
+ special: "Boosts ATK of STR characters by 1.5x for 1 turn, deals 15x character's ATK in STR damage to all enemies",
+ specialName: "Manly Flaming Sword",
+ captain: "Boosts ATK of STR characters by 2x, boosts damage of STR specials by 2x",
+ captainNotes: "#{noFixedPerc}"
+ },
+ 456: {
+ special: "Randomly changes the orbs in the middle row into either [STR] or [DEX] orbs, the orbs in the lower row into either [PSY] or [INT] orbs, switches orbs between slots once",
+ specialName: "Double Cannon",
+ captain: "Boosts ATK of Shooter characters by 2x and their RCV by 1.5x",
+ sailor: "Makes [PSY] orbs \"beneficial\" for this unit"
+ },
+ 457: {
+ special: "Randomly changes the orbs in the middle row into either [STR] or [DEX] orbs, the orbs in the lower row into either [PSY] or [INT] orbs, switches orbs between slots once",
+ specialName: "Double Cannon",
+ captain: "Boosts ATK of Shooter characters by 2x and their RCV by 1.5x",
+ sailor: "Makes [PSY] orbs \"beneficial\" for this unit"
+ },
+ 458: {
+ special: "Deals random PSY damage to all enemies, boosts ATK of all characters by 1.5x for 1 turn",
+ specialName: "Zen Shockwave",
+ specialNotes: "#{random : 30,000 : 150,000}",
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of characters with cost 20 or less by 3x"
+ },
+ 459: {
+ special: "Deals random PSY damage to all enemies, boosts ATK of all characters by 1.5x for 1 turn",
+ specialName: "Zen Shockwave",
+ specialNotes: "#{random : 30,000 : 150,000}",
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of characters with cost 20 or less by 3x as well as himself",
+ captainNotes: "His captain ability only affects his evolved form, his base form will NOT receive the boost. All evolved Sengoku characters in the team are included in the bonus."
+ },
+ 460: {
+ special: "Recovers 33 HP after the end of each turn for 999 turns, delays all enemies for 1 turn",
+ specialName: "Extra Large Candle Service Set",
+ captain: "Reduces damage received by 10%"
+ },
+ 461: {
+ special: "Changes own orb into [DEX] and randomizes every other orb, boosts ATK of Fighter characters by 1.25x for 2 turns",
+ specialName: "Escape Dance: White Swan Arabesque",
+ captain: "Boosts ATK of Fighter characters by 2x"
+ },
+ 462: {
+ special: "Changes own orb into [DEX] and randomizes every other orb, boosts ATK of Fighter characters by 1.25x for 2 turns",
+ specialName: "Escape Dance: White Swan Arabesque",
+ captain: "Boosts ATK of Fighter characters by 2x"
+ },
+ 463: {
+ special: "Empties all slots, deals 25x character's ATK in PSY damage to one enemy",
+ specialName: "Surprise Ball Dragon",
+ captain: "Boosts HP of PSY characters by 2x"
+ },
+ 464: {
+ special: "Deals 20x character's ATK in INT damage to all enemies",
+ specialName: "Roc Rider Fuza's Flame",
+ captain: "Boosts ATK and HP of Striker characters by 1.5x"
+ },
+ 465: {
+ special: "Deals 20x character's ATK in QCK damage to one enemy, amplifies the effect of orbs by 1.25x for 2 turns",
+ specialNotes: "#{orb : 1.25x}",
+ specialName: "Jet Punch",
+ captain: "Boosts ATK by 3x after scoring 4 hits below Good in a row"
+ },
+ 466: {
+ special: "Delays all enemies for 1 turn",
+ specialName: "Double Flash Gun",
+ captain: "Boosts ATK and HP of Shooter characters by 1.5x"
+ },
+ 467: {
+ special: "Changes [RCV] orbs into [STR] orbs",
+ specialName: "Mountain Belly",
+ captain: "Boosts ATK and RCV of STR characters by 1.5x"
+ },
+ 468: {
+ special: "Boosts RCV of all characters by 1.5x for 1 turn",
+ specialName: "Healing Power"
+ },
+ 469: {
+ special: "Switches orbs between slots once",
+ specialName: "Quick Change"
+ },
+ 470: {
+ special: "Boosts RCV of all characters by 1.5x for 1 turn",
+ specialName: "Healing Power",
+ captain: "Boosts RCV of PSY characters by 1.5x"
+ },
+ 471: {
+ special: "Switches orbs between slots once",
+ specialName: "Quick Change"
+ },
+ 472: {
+ special: "Deals 20x character's ATK in STR damage to one enemy",
+ specialName: "Milky Power Axe"
+ },
+ 473: {
+ special: "Deals 10x character's ATK in QCK damage to one enemy",
+ specialName: "Milky Quick Axe"
+ },
+ 474: {
+ special: "Deals 5x character's ATK in DEX damage to all enemies, reduces Bind duration by 1 turn",
+ specialName: "Milky Technique Axe"
+ },
+ 475: {
+ special: "Deals 5x character's ATK in STR damage to all enemies, recovers 500 HP",
+ specialName: "Milky Mind Axe"
+ },
+ 476: {
+ special: "Deals 1,000 fixed damage to one enemy",
+ specialName: "Milky Intelligence Axe",
+ specialNotes: "#{fixed}"
+ },
+ 477: {
+ special: "Changes [DEX] orbs into [STR] orbs",
+ specialName: "[DEX] Slot Change [STR]"
+ },
+ 478: {
+ special: "Changes [PSY] orbs into [QCK] orbs",
+ specialName: "[PSY] Slot Change [QCK]"
+ },
+ 479: {
+ special: "Changes [INT] orbs into [DEX] orbs",
+ specialName: "[INT] Slot Change [DEX]"
+ },
+ 480: {
+ special: "Changes [TND] orbs into [PSY] orbs",
+ specialName: "[TND] Slot Change [PSY]"
+ },
+ 481: {
+ special: "Changes [DEX] orbs into [INT] orbs",
+ specialName: "[DEX] Slot Change [INT]"
+ },
+ 482: {
+ special: "Changes [DEX] orbs into [STR] orbs",
+ specialName: "[DEX] Slot Change [STR]",
+ captain: "Boosts HP of Striker characters by 1.5x"
+ },
+ 483: {
+ special: "Changes [PSY] orbs into [QCK] orbs",
+ specialName: "[PSY] Slot Change [QCK]",
+ captain: "Boosts ATK and RCV of QCK characters by 1.2x"
+ },
+ 484: {
+ special: "Changes [INT] orbs into [DEX] orbs",
+ specialName: "[INT] Slot Change [DEX]",
+ captain: "Reduces damage received by 10%"
+ },
+ 485: {
+ special: "Changes [TND] orbs into [PSY] orbs",
+ specialName: "[TND] Slot Change [PSY]",
+ captain: "Boosts HP and RCV of PSY characters by 1.2x"
+ },
+ 486: {
+ special: "Changes [DEX] orbs into [INT] orbs",
+ specialName: "[DEX] Slot Change [INT]",
+ captain: "Boosts ATK of Striker characters by 1.5x"
+ },
+ 487: {
+ special: "Boosts ATK of STR characters by 1.2x for 1 turn",
+ specialName: "Attack Boost STR"
+ },
+ 488: {
+ special: "Boosts ATK of QCK characters by 1.2x for 1 turn",
+ specialName: "Attack Boost QCK"
+ },
+ 489: {
+ special: "Boosts ATK of DEX characters by 1.2x for 1 turn",
+ specialName: "Attack Boost DEX"
+ },
+ 490: {
+ special: "Boosts ATK of STR characters by 1.2x for 1 turn",
+ specialName: "Attack Boost STR",
+ captain: "Boosts ATK and HP of Striker characters by 1.2x"
+ },
+ 491: {
+ special: "Boosts ATK of QCK characters by 1.2x for 1 turn",
+ specialName: "Attack Boost QCK",
+ captain: "Boosts RCV of Striker characters by 1.5x"
+ },
+ 492: {
+ special: "Boosts ATK of DEX characters by 1.2x for 1 turn",
+ specialName: "Attack Boost DEX",
+ captain: "Boosts ATK of DEX characters by 1.2x"
+ },
+ 493: {
+ special: "Recovers 7x character's RCV in HP",
+ specialName: "Moderate Healing"
+ },
+ 494: {
+ special: "Deals 3x character's ATK in INT damage to all enemies, poisons all enemies",
+ specialNotes: "#{poison}",
+ specialName: "Poison Attack"
+ },
+ 495: {
+ special: "Recovers 7x character's RCV in HP",
+ specialName: "Moderate Healing",
+ captain: "Recovers 500 HP at the end of each turn"
+ },
+ 496: {
+ special: "Deals 3x character's ATK in INT damage to all enemies, poisons all enemies",
+ specialNotes: "#{poison}",
+ specialName: "Poison Attack",
+ captain: "Boosts ATK of Shooter characters by 1.5x"
+ },
+ 497: {
+ special: "Reduces Bind duration by 4 turns, deals 3x character's ATK in QCK damage to one enemy",
+ specialName: "Cheeky Punk Kid Kick",
+ captain: "Boosts ATK of QCK characters by 1.5x"
+ },
+ 498: {
+ special: "Reduces Bind duration by 4 turns, deals 3x character's ATK in QCK damage to one enemy",
+ specialName: "Cheeky Punk Kid Kick",
+ captain: "Boosts ATK of QCK characters by 1.5x"
+ },
+ 499: {
+ special: "Delays all enemies by 1 turn",
+ specialName: "Women Are Courageous!",
+ captain: "Boosts RCV of Shooter characters by 1.5x"
+ },
+ 500: {
+ special: "Delays all enemies by 1 turn",
+ specialName: "Women Are Courageous!",
+ captain: "Boosts RCV of Shooter characters by 2x"
+ },
+ 501: {
+ special: "Recovers 5x character's RCV in HP at the end of each turn for 4 turns",
+ specialName: "Studying Medicine",
+ captain: "Boosts ATK, HP and RCV of PSY characters by 1.2x"
+ },
+ 502: {
+ special: "Recovers 5x character's RCV in HP at the end of each turn for 4 turns",
+ specialName: "Studying Medicine",
+ captain: "Boosts ATK, HP and RCV of PSY characters by 1.5x"
+ },
+ 503: {
+ special: "Deals 5x character's ATK in INT damage to all enemies, boosts ATK of all characters by 5% for 1 turn, reduces the defense of all enemies by 50% for 1 turn, randomizes all orbs",
+ specialName: "Surprise Dial Illusion",
+ captain: "Boosts HP of INT characters by 1.5x"
+ },
+ 504: {
+ special: "Deals 5x character's ATK in INT damage to all enemies, boosts ATK of all characters by 5% for 1 turn, reduces the defense of all enemies by 50% for 1 turn, randomizes all orbs",
+ specialName: "Surprise Dial Illusion",
+ captain: "Boosts HP of INT characters by 2x"
+ },
+ 505: {
+ special: "Boosts ATK of QCK characters by 1.25x for 3 turns",
+ specialName: "Flying Claw",
+ captain: "Protects from defeat as long as HP is above 50%",
+ captainNotes: "#{zombie}"
+ },
+ 506: {
+ special: "Boosts ATK of QCK characters by 1.25x for 3 turns",
+ specialName: "Flying Claw",
+ captain: "Protects from defeat as long as HP is above 30%",
+ captainNotes: "#{zombie}"
+ },
+ 507: {
+ special: "Deals 25x character's ATK in STR damage to one enemy",
+ specialName: "Ringing Fang",
+ captain: "Boosts ATK and HP of STR characters by 1.2x"
+ },
+ 508: {
+ special: "Deals 25x character's ATK in STR damage to one enemy",
+ specialName: "Ringing Fang",
+ captain: "Boosts ATK and HP of STR characters by 1.5x"
+ },
+ 509: {
+ special: "Poisons all enemies, boosts ATK of Striker characters by 1.5x for 1 turn",
+ specialNotes: "#{poison}",
+ specialName: "Merciless Ploy: Poison Needle",
+ captain: "Boosts ATK of Striker characters by 2x"
+ },
+ 510: {
+ special: "Poisons all enemies, boosts ATK of Striker characters by 1.5x for 1 turn",
+ specialNotes: "#{poison}",
+ specialName: "Merciless Ploy: Poison Needle",
+ captain: "Reduces damage received by 10%, boosts ATK of Striker characters by 2x"
+ },
+ 511: {
+ special: "Reduces damage received by 30% for 2 turns, boosts ATK of Slasher characters by 1.25x for 2 turns",
+ specialName: "Cruel Blade: Iron Guard",
+ captain: "Boosts ATK of Slasher characters by 2x"
+ },
+ 512: {
+ special: "Boosts chances of getting [PSY] orbs and reduces chances of getting [INT] orbs for 3 turns",
+ specialName: "Sneaky Punk Kid Strike",
+ captain: "Protects from defeat as long as HP is above 50%",
+ captainNotes: "#{zombie}"
+ },
+ 513: {
+ special: "Boosts chances of getting [PSY] orbs and reduces chances of getting [INT] orbs for 3 turns",
+ specialName: "Sneaky Punk Kid Strike",
+ captain: "Protects from defeat as long as HP is above 50%, boosts ATK of PSY characters by 1.5x if HP is above 50% at the start of the turn",
+ captainNotes: "#{zombie}"
+ },
+ 514: {
+ special: "Boosts ATK of INT characters by 1.5x for 1 turn, reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Blooming Flower of Everlasting Summer",
+ captain: "Boosts ATK of INT characters by 2x"
+ },
+ 515: {
+ special: "Changes the orbs in the left column into [INT], [PSY] and [RCV], the orbs in the right column into [STR], [DEX] and [QCK], switches orbs between slots 3 times",
+ specialNotes: "The special is not based on chance, the orbs are always changed with the same pattern. Starting from the top left orb and proceeding clockwise, after the special is used the orbs will be: [INT], [STR], [DEX], [QCK], [RCV] and [PSY]",
+ specialName: "Pop Green",
+ captain: "Boosts ATK, HP and RCV of Shooter characters by 1.5x"
+ },
+ 516: {
+ special: "Changes the orbs in the left column into [INT], [PSY] and [RCV], the orbs in the right column into [STR], [DEX] and [QCK], switches orbs between slots 3 times",
+ specialNotes: "The special is not based on chance, the orbs are always changed with the same pattern. Starting from the top left orb and proceeding clockwise, after the special is used the orbs will be: [INT], [STR], [DEX], [QCK], [RCV] and [PSY]",
+ specialName: "Pop Green",
+ captain: "Boosts ATK, HP and RCV of Shooter characters by 1.5x, recovers 1x character's RCV in HP at the end of each turn"
+ },
+ 517: {
+ special: "Empties all slots with [RCV] orbs, boosts ATK of all characters by 5% for 2 turns",
+ specialName: "Overeat! Energy Change",
+ captain: "Boosts HP of PSY characters by 1.5x"
+ },
+ 518: {
+ special: "Empties all slots with [RCV] orbs, boosts ATK of all characters by 5% for 2 turns",
+ specialName: "Overeat! Energy Change",
+ captain: "Boosts HP of PSY characters by 2x, boosts chances of getting [RCV] orbs"
+ },
+ 519: {
+ special: "Reduces crew's current HP by 99%, deals 25x character's ATK in fixed damage to all enemies, boosts ATK of STR characters by 2x for 1 turn",
+ specialName: "Gum-Gum Gigant Thor Axe",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of STR characters by 2x"
+ },
+ 520: {
+ special: "Reduces crew's current HP by 99%, deals 25x character's ATK in fixed damage to all enemies, boosts ATK of STR characters by 2x for 1 turn",
+ specialName: "Gum-Gum Gigant Thor Axe",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of STR characters by 2.5x"
+ },
+ 521: {
+ special: "Deals several times the character's ATK in INT damage to all enemies",
+ specialNotes: "#{specialProportional : lower : 100 * ( 1 - (remaining HP) / (total HP) )}",
+ specialName: "Diable Jambe - Venaison Shot",
+ captain: "Reduces damage received by 80% if HP is above 99% at the start of the turn",
+ sailor: "Reduces Paralysis by 3 turns for self"
+ },
+ 522: {
+ special: "Deals several times the character's ATK in INT damage to all enemies",
+ specialNotes: "#{specialProportional : lower : 100 * ( 1 - (remaining HP) / (total HP) )}",
+ specialName: "Diable Jambe - Venaison Shot",
+ captain: "Reduces damage received by 80% if HP is above 99% at the start of the turn",
+ sailor: "Reduces Paralysis by 3 turns for self"
+ },
+ 523: {
+ special: "Randomizes all orbs, protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "Billy's Electrical Discharge",
+ specialNotes: "#{zombie}",
+ captain: "Boosts ATK and RCV of Striker characters by 1.5x",
+ sailor: "Makes [DEX] orbs \"beneficial\" for this unit"
+ },
+ 524: {
+ special: "Randomizes all orbs, protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "Billy's Electrical Discharge",
+ specialNotes: "#{zombie}",
+ captain: "Boosts ATK of Striker characters by 2x and their RCV by 1.5x",
+ sailor: "Makes [DEX] orbs \"beneficial\" for this unit"
+ },
+ 525: {
+ special: "Deals random PSY damage to all enemies, randomizes all orbs",
+ specialName: "Three-Verse Humming: Arrow-Notch Slash",
+ captain: "Boosts ATK of PSY characters by 2x",
+ sailor: "Boosts RCV of PSY characters by 15"
+ },
+ 526: {
+ special: "Deals random PSY damage to all enemies, randomizes all orbs",
+ specialName: "Three-Verse Humming: Arrow-Notch Slash",
+ captain: "Boosts ATK of PSY characters by 2x, reduces damage received from INT enemies by 30%",
+ sailor: "Boosts RCV of PSY characters by 15"
+ },
+ 527: {
+ special: "Removes poison, recovers 15x character's RCV in HP",
+ specialName: "Devoted Healing - \"I'm Glad You are Safe\"",
+ captain: "Boosts ATK and RCV of DEX characters by 1.5x",
+ sailor: "When HP is below 30% at the start of the turn, boosts own RCV by 50"
+ },
+ 528: {
+ special: "Removes poison, recovers 15x character's RCV in HP",
+ specialName: "Devoted Healing - \"I'm Glad You are Safe\"",
+ captain: "Boosts ATK and RCV of DEX characters by 2x",
+ sailor: "When HP is below 30% at the start of the turn, boosts own RCV by 50"
+ },
+ 529: {
+ special: "Deals 35x character's ATK in PSY damage to all enemies, reduces the defense of all enemies by 100% for 2 turns",
+ specialName: "Conqueror's Haki: Emperor",
+ captain: "Boosts chances of getting [PSY] orbs, boosts ATK of PSY characters proportionally to the crew's current HP",
+ captainNotes: "#{captainProportional : higher : 2 + 0.75 * (remaining HP) / (total HP) : 2.75 : 2}"
+ },
+ 530: {
+ special: "Deals 35x character's ATK in PSY damage to all enemies, reduces the defense of all enemies by 100% for 2 turns",
+ specialName: "Conqueror's Haki: Emperor",
+ captain: "Boosts chances of getting [PSY] orbs, boosts ATK of PSY characters proportionally to the crew's current HP",
+ captainNotes: "#{captainProportional : higher : 2 + 0.75 * (remaining HP) / (total HP) : 2.75 : 2}"
+ },
+ 531: {
+ special: "Reduces damage received by 30% for 4 turns",
+ specialName: "Veinte Fleur Calendula: Blossom",
+ captain: "Reduces damage received from STR, DEX and QCK enemies by 30%"
+ },
+ 532: {
+ special: "Reduces damage received by 30% for 4 turns",
+ specialName: "Veinte Fleur Calendula: Blossom",
+ captain: "Reduces damage received from STR, DEX and QCK enemies by 30%"
+ },
+ 533: {
+ special: "Amplifies the effect of orbs by 1.5x for 1 turn, deals 20x character's ATK in QCK damage to one enemy",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Swallow Bond En Avant: Blossom",
+ captain: "Boosts ATK of QCK characters by 2x"
+ },
+ 534: {
+ special: "Amplifies the effect of orbs by 1.5x for 1 turn, deals 20x character's ATK in QCK damage to one enemy",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Swallow Bond En Avant: Blossom",
+ captain: "Boosts ATK of QCK characters by 2x"
+ },
+ 535: {
+ special: "Reduces damage received by 50% for 2 turns, boosts RCV of all characters by 2x for 2 turns",
+ specialName: "Mirage Tempo Fata Morgana: Blossom",
+ captain: "Boosts RCV of DEX characters by 1.5x"
+ },
+ 536: {
+ special: "Reduces damage received by 50% for 2 turns, boosts RCV of all characters by 2x for 2 turns",
+ specialName: "Mirage Tempo Fata Morgana: Blossom",
+ captain: "Boosts RCV of DEX characters by 2x"
+ },
+ 537: {
+ special: "Reduces Bind and Despair duration by 1 turn, locks all orbs for 1 turn",
+ specialName: "Sea Stone Handcuffs",
+ captain: "Boosts chain multiplier by 2x"
+ },
+ 538: {
+ special: "Reduces Bind and Despair duration by 1 turn, locks all orbs for 1 turn",
+ specialName: "Sea Stone Handcuffs",
+ captain: "Boosts chain multiplier by 2x, recovers 2x character's RCV in HP at the end of each turn"
+ },
+ 539: {
+ special: "Changes own orb into [STR], deals 25x character's ATK in STR damage to one enemy",
+ specialName: "Bashful Prison Beast's Metal Rod"
+ },
+ 540: {
+ special: "Boosts chances of getting [DEX] orbs for 2 turns",
+ specialName: "Deadly Glare"
+ },
+ 541: {
+ special: "Greatly reduces chances of getting [PSY], [INT], [TND] and [RCV] slots for 5 turns",
+ specialName: "White Thorn Deathmatch",
+ captain: "Boosts ATK of STR characters by 2.5x if HP is below 50% at the start of the turn"
+ },
+ 542: {
+ special: "Boosts RCV of all characters by 2x for 1 turn",
+ specialName: "Roar of the Ruler of the Sky",
+ captain: "Boosts HP of all characters by 1.5x"
+ },
+ 543: {
+ special: "Reduces crew's current HP by 50%, deals 50x character's ATK in DEX damage to one enemy",
+ specialName: "Reject",
+ captain: "Boosts ATK and HP of Shooter characters by 1.5x, reduces crew's RCV to 0"
+ },
+ 544: {
+ special: "Reduces crew's current HP by 50%, deals 50x character's ATK in DEX damage to one enemy",
+ specialName: "Reject",
+ captain: "Boosts ATK of Shooter characters by 2.25x and their HP by 1.5x, reduces crew's RCV to 0"
+ },
+ 545: {
+ special: "Deals 6,000 fixed damage to all enemies, boosts ATK of PSY characters by 1.5x for 1 turn",
+ specialName: "60,000,000 Volt Jamboule",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of PSY characters by 2x"
+ },
+ 546: {
+ special: "Deals 6,000 fixed damage to all enemies, boosts ATK of PSY characters by 1.5x for 1 turn",
+ specialName: "60,000,000 Volt Jamboule",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of PSY characters by 2x, reduces damage received by 20%"
+ },
+ 547: {
+ special: "Reduces crew's current HP by 10%, deals 1x character's ATK in STR damage to one enemy, protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "Crazy Punk Kid Punch",
+ specialNotes: "#{zombie}",
+ captain: "Boosts chances of getting [RCV] orbs"
+ },
+ 548: {
+ special: "Reduces crew's current HP by 10%, deals 1x character's ATK in STR damage to one enemy, protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "Crazy Punk Kid Punch",
+ specialNotes: "#{zombie}",
+ captain: "Boosts chances of getting [RCV] orbs, boosts ATK of all characters by 1.2x"
+ },
+ 549: {
+ special: "Boosts ATK against enemies with reduced defense by 1.3x for 3 turns",
+ specialName: "Arousal Manifesto - Red Demon Whip",
+ captain: "Boosts ATK by 2x after scoring 3 Perfects in a row"
+ },
+ 550: {
+ special: "Boosts ATK against enemies with reduced defense by 1.3x for 3 turns",
+ specialName: "Arousal Manifesto - Red Demon Whip",
+ captain: "Boosts ATK by 2.5x after scoring 3 Perfects in a row"
+ },
+ 551: {
+ special: "Reduces damage received by 50% for 1 turn, deals 15x character's ATK in STR damage to one enemy",
+ specialName: "Uncompromising Prison Beast's Morning Star"
+ },
+ 552: {
+ special: "Reduces the defense of all enemies by 100% for 1 turn",
+ specialName: "Cursed Shout"
+ },
+ 553: {
+ special: "Changes adjacent orbs into [DEX], deals 1,000 fixed damage to all enemies",
+ specialName: "Ashura Ugui",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of DEX characters by 2.75x if HP is below 30% at the start of the turn",
+ sailor: "Boosts ATK of Slasher characters by 20"
+ },
+ 554: {
+ special: "Changes adjacent orbs into [DEX], deals 1,000 fixed damage to all enemies",
+ specialName: "Ashura Ugui",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of DEX characters by 3x if HP is below 30% at the start of the turn",
+ sailor: "Boosts ATK of Slasher characters by 20"
+ },
+ 555: {
+ special: "Delays all enemies for 3 turns, cuts the current HP of each enemy by 10%",
+ specialName: "Heavenly Dragon Star",
+ captain: "Boosts ATK of Shooter characters by 2x",
+ sailor: "Boosts RCV of Shooter characters by 10"
+ },
+ 556: {
+ special: "Delays all enemies for 3 turns, cuts the current HP of each enemy by 10%",
+ specialName: "Heavenly Dragon Star",
+ captain: "Boosts ATK of Shooter characters by 2x and their RCV by 1.5x",
+ sailor: "Boosts RCV of Shooter characters by 10"
+ },
+ 557: {
+ special: "Boosts chances of getting [INT] orbs for 3 turns",
+ specialName: "Ochenta Fleur - Cuatro Manus Shock",
+ captain: "Boosts ATK and RCV of INT characters by 1.5x",
+ sailor: "Reduces duration of Blindness by 3 turns"
+ },
+ 558: {
+ special: "Boosts chances of getting [INT] orbs for 3 turns",
+ specialName: "Ochenta Fleur - Cuatro Manus Shock",
+ captain: "Boosts ATK and RCV of INT characters by 2x",
+ sailor: "Reduces duration of Blindness by 3 turns"
+ },
+ 559: {
+ special: "Changes own orb into [STR], amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Roar! Zarley Davison",
+ captain: "Boosts ATK of STR characters by 2x, deals 2x character's ATK in STR damage to all enemies at the end of each turn",
+ sailor: "Boosts ATK of Shooter characters by 20"
+ },
+ 560: {
+ special: "Changes own orb into [STR], amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Roar! Zarley Davison",
+ captain: "Boosts ATK of STR characters by 2.25x, deals 2x character's ATK in STR damage to all enemies at the end of each turn",
+ sailor: "Boosts ATK of Shooter characters by 20"
+ },
+ 561: {
+ special: "Reduces crew's current HP by 40%, deals 15x the amount of HP subtracted in typeless damage to all enemies, locks all orbs for 1 turn",
+ specialName: "Great Flame Commandment: Flame Emperor",
+ captain: "Boosts HP of Shooter characters by 1.5x and their ATK by 3x if they have a matching orb, by 2x otherwise"
+ },
+ 562: {
+ special: "Reduces crew's current HP by 40%, deals 15x the amount of HP subtracted in typeless damage to all enemies, locks all orbs for 1 turn",
+ specialName: "Great Flame Commandment: Flame Emperor",
+ captain: "Boosts HP of Shooter characters by 1.5x and their ATK by 3x if they have a matching orb, by 2x otherwise"
+ },
+ 563: {
+ special: "Deal 3x character's ATK in PSY damage to one enemy, changes [INT] orbs into [RCV] orbs",
+ specialName: "Cutie Baton"
+ },
+ 564: {
+ special: "Reduces Bind duration by 2 turns",
+ specialName: "Sea Surface Split"
+ },
+ 565: {
+ special: "Deals 5,000 fixed damage to one enemy",
+ specialName: "Hamburger Hammer",
+ specialNotes: "#{fixed}"
+ },
+ 566: {
+ special: "Empties all slots with [BLOCK] orbs",
+ specialName: "Wipeout Tackle"
+ },
+ 567: {
+ special: "Reduces Bind and Despair duration by 1 turn, deals 15x the character's ATK as STR damage to all enemies",
+ specialName: "Mudfish Coaster"
+ },
+ 568: {
+ special: "Delays all enemies for 2 turns, reduces the defense of all enemies by 50% for 2 turns, switches orbs between slots twice",
+ specialName: "Slow Slow Beam",
+ captain: "Boosts ATK, HP and RCV of all characters by 1.25x"
+ },
+ 569: {
+ special: "Delays all enemies for 2 turns, reduces the defense of all enemies by 50% for 2 turns, switches orbs between slots twice",
+ specialName: "Slow Slow Beam",
+ captain: "Boosts ATK, HP and RCV of all characters by 1.5x, reduces cooldown of all specials by 1 turn at the start of the fight"
+ },
+ 570: {
+ special: "Changes [BLOCK] orbs into [STR], deals 20x character's ATK in STR damage to one enemy",
+ specialName: "Gum-Gum Flail",
+ captain: "Boosts ATK of STR and Fighter characters by 1.5x",
+ captainNotes: "The bonus is cumulative. STR Fighter characters get a 2.25x bonus."
+ },
+ 571: {
+ special: "Changes [BLOCK] orbs into [STR], deals 20x character's ATK in STR damage to one enemy",
+ specialName: "Gum-Gum Flail",
+ captain: "Boosts ATK of STR and Fighter characters by 1.5x, reduces cooldown of all specials by 1 turn at the start of the fight",
+ captainNotes: "The bonus is cumulative. STR Fighter characters get a 2.25x bonus."
+ },
+ 572: {
+ special: "Boosts ATK of Fighter characters by 2x for 1 turn, binds himself for 15 turns",
+ specialName: "Roar of Mettle",
+ captain: "Boosts ATK of Fighter characters by 2.5x if HP is above 99% at the start of the turn"
+ },
+ 573: {
+ special: "Reduces Despair duration by 2 turns, recovers 10x character's RCV in HP",
+ specialName: "Manly Support",
+ captain: "Boosts RCV of all characters by 1.2x"
+ },
+ 574: {
+ special: "Boosts ATK of Striker characters by 1.75x for 2 turns, locks all orbs for 2 turns",
+ specialName: "Ice Block - Pheasant Beak",
+ captain: "Boosts ATK of Striker characters by 2x"
+ },
+ 575: {
+ special: "Boosts ATK of Striker characters by 1.75x for 2 turns, locks all orbs for 2 turns",
+ specialName: "Ice Block - Pheasant Beak",
+ captain: "Boosts ATK and HP of Striker characters by 2x"
+ },
+ 576: {
+ special: "Changes [PSY] orbs into [INT] orbs, boosts RCV of all characters by 1.5x for 1 turn",
+ specialName: "Fine Tempo - Tea Time Show",
+ captain: "Boosts ATK of all characters by 1.5x, boosts RCV of all characters by 1.2x"
+ },
+ 577: {
+ special: "Deals random typeless damage to all enemies, changes own orb into [STR]",
+ specialName: "Gum-Gum Jet Gatling",
+ specialNotes: "#{random : 70,000 : 200,000}",
+ captain: "Boosts ATK by 4x following a chain of Good > Great > Perfect hits"
+ },
+ 578: {
+ special: "Deals random typeless damage to all enemies, changes own orb into [STR]",
+ specialName: "Gum-Gum Jet Gatling",
+ specialNotes: "#{random : 70,000 : 200,000}",
+ captain: "Boosts ATK by 4x following a chain of Good > Great > Perfect hits"
+ },
+ 579: {
+ special: "Randomly changes [BLOCK] orbs into either [QCK] or [DEX] orbs, deals 15x character's ATK in QCK damage to all enemies",
+ specialName: "Dragon Twister",
+ captain: "Boosts ATK of QCK and DEX characters by 1.5x"
+ },
+ 580: {
+ special: "Randomly changes [BLOCK] orbs into either [QCK] or [DEX] orbs, deals 15x character's ATK in QCK damage to all enemies",
+ specialName: "Dragon Twister",
+ captain: "Boosts ATK of QCK and DEX characters by 2x"
+ },
+ 581: {
+ special: "Cuts the current HP of each enemy by 7%",
+ specialName: "High-Caliber Bazooka",
+ captain: "Boosts ATK of STR characters by 1.5x"
+ },
+ 582: {
+ special: "Deals 10x character's ATK in QCK damage to one enemy, boosts ATK of QCK characters by 1.5x for 1 turn",
+ specialName: "Burn Blade",
+ captain: "Boosts ATK and HP of Striker characters by 1.5x"
+ },
+ 583: {
+ special: "Changes own orb into [INT] and the captain's orb into [DEX], boosts RCV of Shooter characters by 300 for 3 turns",
+ specialName: "Disrupting Fire",
+ captain: "Boosts ATK and RCV of Shooter characters by 1.5x"
+ },
+ 584: {
+ special: "Reduces damage received from PSY enemies by 100% for 1 turn",
+ specialName: "Mantra",
+ captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, reduces ATK, HP and RCV of all characters by 90%"
+ },
+ 585: {
+ special: "Changes the captain's orb into [PSY], recovers 9x character's RCV in HP",
+ specialName: "The Bond Bellmere Left Us",
+ captain: "Boosts RCV of PSY characters by 1.5x"
+ },
+ 586: {
+ special: "Changes the captain's orb into [PSY], recovers 9x character's RCV in HP",
+ specialName: "The Bond Bellmere Left Us",
+ captain: "Boosts HP and RCV of PSY characters by 1.5x"
+ },
+ 587: {
+ special: "Removes poison, reduces Bind and Despair duration by 2 turns",
+ specialName: "Merciful Painkiller",
+ captain: "Recovers 3x character's RCV in HP at the end of each turn"
+ },
+ 588: {
+ special: "Removes poison, reduces Bind and Despair duration by 2 turns",
+ specialName: "Merciful Painkiller",
+ captain: "Recovers 5x character's RCV in HP at the end of each turn"
+ },
+ 589: {
+ special: "Boosts ATK of Slasher characters by 1.5x for 1 turn",
+ specialName: "Flag of the Rebellion",
+ captain: "Boosts ATK of all characters by 1.5x, reduces HP and RCV of all characters by 80%"
+ },
+ 590: {
+ special: "Boosts ATK of Slasher characters by 1.5x for 1 turn",
+ specialName: "Flag of the Rebellion",
+ captain: "Boosts ATK of all characters by 2x, reduces HP and RCV of all characters by 80%"
+ },
+ 596: {
+ special: "Deals 20x character's ATK in STR damage to one enemy, reduces the defense of all enemies by 50% for 3 turns",
+ specialName: "Rozeo Michelli",
+ captain: "Boosts ATK of STR characters by 1.5x, recovers 500 HP at the end of each turn"
+ },
+ 597: {
+ special: "Deals 20x character's ATK in STR damage to one enemy, reduces the defense of all enemies by 50% for 3 turns",
+ specialName: "Rozeo Michelli",
+ captain: "Boosts ATK of STR characters by 1.75x, recovers 750 HP at the end of each turn"
+ },
+ 598: {
+ special: "Changes own orb into [INT], switches orbs between slots once",
+ specialName: "Split Split Cannon",
+ captain: "Boosts ATK of characters with fewer than 3 stars by 2.5x"
+ },
+ 599: {
+ special: "Changes own orb into [INT], switches orbs between slots once",
+ specialName: "Split Split Cannon",
+ captain: "Boosts ATK of characters with fewer than 3 stars by 3x"
+ },
+ 600: {
+ special: "Deals 15x character's ATK in PSY damage to one enemy, boosts ATK of PSY characters by 1.3x for 2 turns",
+ specialName: "Sword Draw - Single Flash",
+ captain: "Boosts ATK of PSY characters by 1.5x"
+ },
+ 601: {
+ special: "Deals 15x character's ATK in PSY damage to one enemy, boosts ATK of PSY characters by 1.3x for 2 turns",
+ specialName: "Sword Draw - Single Flash",
+ captain: "Boosts ATK of PSY characters by 2x"
+ },
+ 602: {
+ special: "Reduces crew's current HP by 90%, deals 20,000 fixed damage to all enemies, boosts ATK of QCK characters by 2x for 1 turn",
+ specialName: "200,000,000 Volt Amaru",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of QCK characters by 2x"
+ },
+ 603: {
+ special: "Reduces crew's current HP by 90%, deals 20,000 fixed damage to all enemies, boosts ATK of QCK characters by 2x for 1 turn",
+ specialName: "200,000,000 Volt Amaru",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of QCK characters by 2.25x, recovers 5x character's RCV in HP at the end of each turn"
+ },
+ 604: {
+ special: "Cuts the current HP of each enemy by 10%, changes [QCK] orbs into [DEX] orbs",
+ specialName: "Diable Jambe: Extra Hachis Hash",
+ captain: "Boosts ATK of Fighter characters by 2x"
+ },
+ 605: {
+ special: "Cuts the current HP of each enemy by 10%, changes [QCK] orbs into [DEX] orbs",
+ specialName: "Diable Jambe: Extra Hachis Hash",
+ captain: "Boosts ATK of Fighter characters by 2x, reduces damage received by 20%"
+ },
+ 606: {
+ special: "Deals 20x character's ATK in DEX damage to one enemy, changes adjacent orbs into [RCV] orbs",
+ specialName: "Red Leg Kick",
+ captain: "Boosts ATK of Fighter characters by 2x if HP is above 50% at the start of the turn"
+ },
+ 607: {
+ special: "Deals 20x character's ATK in DEX damage to one enemy, changes adjacent orbs into [RCV] orbs",
+ specialName: "Red Leg Kick",
+ captain: "Boosts ATK of Fighter characters by 2.5x if HP is above 50% at the start of the turn"
+ },
+ 608: {
+ special: "For 1 turn, boosts the amount healed by RCV orbs by 1.5x, then 2x, then 2.5x from the third crew member onward",
+ specialName: "Wicked Strength"
+ },
+ 609: {
+ special: "Changes the captain's orb into [RCV] and randomizes every other orb",
+ specialName: "Wicked Spirit"
+ },
+ 610: {
+ special: "Changes [TND] orbs into [RCV] orbs",
+ specialName: "[TND] Slot Change [RCV]"
+ },
+ 611: {
+ special: "Changes adjacent orbs into [RCV] orbs",
+ specialName: "[RCV] Slot Storm"
+ },
+ 612: {
+ special: "Boosts ATK and RCV of all characters by 45 for 1 turn, reduces damage received by 45% for 1 turn",
+ specialName: "45-Degree Joy",
+ captain: "Boosts ATK of Slasher characters by 1.5x"
+ },
+ 613: {
+ special: "Boosts ATK and RCV of all characters by 45 for 1 turn, reduces damage received by 45% for 1 turn",
+ specialName: "45-Degree Joy",
+ captain: "Boosts ATK, HP and RCV of Slasher characters by 1.5x"
+ },
+ 614: {
+ special: "Reduces the defense of all enemies by 50% for 1 turn, deals 10x character's ATK in PSY damage to all enemies",
+ specialName: "Demolisher Chop",
+ captain: "Boosts ATK of characters with cost 20 or less by 2.25x if HP is below 30% at the start of the turn"
+ },
+ 615: {
+ special: "Deals random STR damage to one enemy",
+ specialName: "Demolisher Axe"
+ },
+ 616: {
+ special: "Changes the captain's orb into STR",
+ specialName: "Demolisher Spear"
+ },
+ 617: {
+ special: "Boosts ATK of Shooter characters by 1.2x for 1 turn",
+ specialName: "Demolisher Cannon"
+ },
+ 618: {
+ special: "Deals 20x character's ATK in STR damage to one enemy",
+ specialName: "Mach Punch"
+ },
+ 619: {
+ special: "Cuts the current HP of each enemy by 5%",
+ specialName: "Slight Break"
+ },
+ 620: {
+ special: "Changes [INT] orbs into [QCK] orbs",
+ specialName: "[INT] Slot Change [QCK]"
+ },
+ 621: {
+ special: "Changes [INT] orbs into [STR] orbs",
+ specialName: "[INT] Slot Change [STR]"
+ },
+ 622: {
+ special: "Boosts RCV of all characters by 100 for 3 turns",
+ specialName: "Patch Job"
+ },
+ 623: {
+ special: "Recovers 3x character's RCV in HP at the end of each turn for 5 turns",
+ specialName: "Auto Repair"
+ },
+ 624: {
+ special: "Slightly boosts chances of getting [PSY] orbs for 3 turns",
+ specialName: "Slot Rate Up [PSY]"
+ },
+ 625: {
+ special: "Slightly boosts chances of getting [INT] orbs for 3 turns",
+ specialName: "Slot Rate Up [INT]"
+ },
+ 626: {
+ special: "Deals 13x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Burst"
+ },
+ 627: {
+ special: "Randomizes all orbs",
+ specialName: "Slot Shuffle"
+ },
+ 628: {
+ special: "Deals 15,000 fixed damage to one enemy",
+ specialName: "Keel Crusher",
+ specialNotes: "#{fixed}"
+ },
+ 629: {
+ special: "Empties all slots including those with [BLOCK] orbs, deals random INT damage to all enemies",
+ specialName: "Master Nail",
+ captain: "Boosts ATK of characters with 3 or fewer stars by 2x"
+ },
+ 630: {
+ special: "Randomly changes all orbs into either [QCK] or [DEX] orbs, deals random QCK damage to all enemies",
+ specialName: "Tempest Kick: Slaughter",
+ captain: "Boosts ATK of Slasher characters by 1.5x"
+ },
+ 631: {
+ special: "Randomly changes all orbs into either [QCK] or [DEX] orbs, deals random QCK damage to all enemies",
+ specialName: "Tempest Kick: Slaughter",
+ captain: "Boosts ATK of Slasher characters by 2x"
+ },
+ 632: {
+ special: "Randomly changes all orbs into either [STR], [PSY] or [INT] orbs, deals random STR damage to all enemies, reduces the defense of all enemies by 50% for 2 turns",
+ specialName: "Finger Pistol: Yellow Lotus",
+ captain: "Boosts ATK of Fighter characters by 1.5x",
+ specialNotes: "#{random : 2,000 : 20,000}"
+ },
+ 633: {
+ special: "Randomly changes all orbs into either [STR], [PSY] or [INT] orbs, deals random STR damage to all enemies, reduces the defense of all enemies by 50% for 2 turns",
+ specialName: "Finger Pistol: Yellow Lotus",
+ captain: "Boosts ATK of Fighter characters by 2x",
+ specialNotes: "#{random : 2,000 : 20,000}"
+ },
+ 634: {
+ special: "Boosts chances of getting [QCK] and [PSY] orbs for 3 turns, boosts ATK of QCK and PSY characters by 1.2x for 3 turns",
+ specialName: "Guiding Mermaid Voice",
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK and RCV of QCK and PSY characters by 1.25x"
+ },
+ 635: {
+ special: "Boosts chances of getting [QCK] and [PSY] orbs for 3 turns, boosts ATK of QCK and PSY characters by 1.2x for 3 turns",
+ specialName: "Guiding Mermaid Voice",
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK and RCV of QCK and PSY characters by 1.5x"
+ },
+ 636: {
+ special: "Binds himself for 3 turns, reduces damage received by 50% for 3 turns, recovers 3.5x character's RCV in HP at the end of each turn for 3 turns",
+ specialName: "Wretched Ballade",
+ captain: "Boosts ATK of characters with cost 2 or less by 3x"
+ },
+ 637: {
+ special: "Cuts the current HP of each enemy by 8%, boosts ATK against enemies with increased defense by 1.3x for 1 turn",
+ specialName: "Hachi Ink Jet",
+ captain: "Recovers 618 HP at the end of each turn, boosts ATK of Slasher characters by 1.5x"
+ },
+ 638: {
+ special: "Changes [PSY] and [INT] orbs into [QCK] orbs, reduces Bind duration by 1 turn",
+ specialName: "Bohemian Reverse Slash",
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of Slasher characters by 2x",
+ sailor: "Restores his own special by 1 turn when it is rewinded",
+ sailorNotes: "Some enemies can increase your cooldown by 1/2 Turns, this Sailor Ability decreases that by 1 Turn"
+ },
+ 639: {
+ special: "Changes [PSY] and [INT] orbs into [QCK] orbs, reduces Bind duration by 1 turn",
+ specialName: "Bohemian Reverse Slash",
+ captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Slasher characters by 2x",
+ sailor: "Restores his own special by 1 turn when it is rewinded",
+ sailorNotes: "Some enemies can increase your cooldown by 1/2 Turns, this Sailor Ability decreases that by 1 Turn"
+ },
+ 640: {
+ special: "Changes own orb into [DEX], deals several times the character's ATK in DEX damage to one enemy",
+ specialNotes: "#{specialProportional : lower : 50 * ( 1 - (remaining HP) / (total HP) )}",
+ specialName: "Pirate Brothers: Twin Strike",
+ captain: "Boosts ATK of Fighter characters by 2x, deals 2x character's ATK in DEX damage to all enemies at the end of each turn",
+ sailor: "When HP is below 30% at the start of the turn, boosts ATK of Fighter characters by 100"
+ },
+ 641: {
+ special: "Changes own orb into [DEX], deals several times the character's ATK in DEX damage to one enemy",
+ specialNotes: "#{specialProportional : lower : 50 * ( 1 - (remaining HP) / (total HP) )}",
+ specialName: "Pirate Brothers: Twin Strike",
+ captain: "Boosts ATK of Fighter characters by 2.25x, deals 2x character's ATK in DEX damage to all enemies at the end of each turn",
+ sailor: "When HP is below 30% at the start of the turn, boosts ATK of Fighter characters by 100"
+ },
+ 642: {
+ special: "Reduces crew's current HP by 30%, deals 10x character's ATK in fixed damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
+ specialNotes: "#{fixed} #{orb : 1.75x}",
+ specialName: "Raging Greatsword",
+ captain: "Boosts ATK of PSY characters by 2.5x if HP is below 30% at the start of the turn",
+ sailor: "Recovers 2 turns of Paralysis on self"
+ },
+ 643: {
+ special: "Reduces crew's current HP by 30%, deals 10x character's ATK in fixed damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
+ specialNotes: "#{fixed} #{orb : 1.75x}",
+ specialName: "Raging Greatsword",
+ captain: "Boosts ATK of PSY characters by 3x if HP is below 30% at the start of the turn",
+ sailor: "Recovers 2 turns of Paralysis on self"
+ },
+ 644: {
+ special: "Reduces Bind and Despair duration by 2 turns, boosts ATK against delayed enemies by 1.2x for 3 turns",
+ specialName: "Witch's Icebreaker",
+ captain: "Boosts ATK of INT characters by 2x",
+ sailor: "Boosts ATK and RCV of INT characters by 20"
+ },
+ 645: {
+ special: "Reduces Bind and Despair duration by 2 turns, boosts ATK against delayed enemies by 1.2x for 3 turns",
+ specialName: "Witch's Icebreaker",
+ captain: "Boosts ATK of INT characters by 2.5x",
+ sailor: "Boosts ATK and RCV of INT characters by 20"
+ },
+ 646: {
+ special: "Deals 20x character's ATK in STR damage to all enemies, boosts chances of getting [STR] orbs for 3 turns",
+ specialName: "Vanguard Breaker",
+ captain: "Boosts ATK of Shooter characters by 2.5x if HP is below 30% at the start of the turn",
+ sailor: "Boosts ATK of STR characters by 30"
+ },
+ 647: {
+ special: "Deals 20x character's ATK in STR damage to all enemies, boosts chances of getting [STR] orbs for 3 turns",
+ specialName: "Vanguard Breaker",
+ captain: "Boosts ATK of Shooter characters by 2.75x if HP is below 30% at the start of the turn",
+ sailor: "Boosts ATK of STR characters by 30"
+ },
+ 648: {
+ special: "Recovers 100x character's RCV in HP, amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Blue Flame Kick",
+ captain: "Reduces damage received by 30% if HP is above 70% at the start of the turn, boosts ATK of QCK and PSY characters by 2.75x if HP is above 70% at the start the turn"
+ },
+ 649: {
+ special: "Recovers 100x character's RCV in HP, amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Blue Flame Kick",
+ captain: "Reduces damage received by 30% if HP is above 70% at the start of the turn, boosts ATK of QCK and PSY characters by 2.75x if HP is above 70% at the start the turn"
+ },
+ 650: {
+ special: "Deals 5,000 fixed damage to one enemy, amplifies the effect of orbs by 1.5x for 1 turn",
+ specialNotes: "#{fixed} #{orb : 1.5x}",
+ specialName: "Thunder Lance Tempo",
+ captain: "Boosts ATK of INT characters by 2x and their RCV by 1.5x"
+ },
+ 651: {
+ special: "Deals 5,000 fixed damage to one enemy, amplifies the effect of orbs by 1.5x for 1 turn",
+ specialNotes: "#{fixed} #{orb : 1.5x}",
+ specialName: "Thunder Lance Tempo",
+ captain: "Boosts ATK of INT characters by 2x and their RCV by 1.5x"
+ },
+ 652: {
+ special: "Cuts the current HP of each enemy by 20%, reduces damage received by 50% for 1 turn",
+ specialName: "Heart-Smashing Horn",
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of DEX characters by 2x if they have matching orbs"
+ },
+ 653: {
+ special: "Cuts the current HP of each enemy by 20%, reduces damage received by 50% for 1 turn",
+ specialName: "Heart-Smashing Horn",
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of DEX characters by 2.25x if they have matching orbs"
+ },
+ 654: {
+ special: "Cuts the current HP of each enemy by 20%, reduces damage received by 50% for 1 turn",
+ specialName: "Heart-Smashing Horn",
+ captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of DEX characters by 2.75x if they have matching orbs"
+ },
+ 655: {
+ special: "Changes [EMPTY] and [TND] orbs into [STR] orbs, deals 10x character's ATK in STR damage to one enemy, amplifies the effect of orbs by 1.25x for 2 turns",
+ specialNotes: "#{orb : 1.25x}",
+ specialName: "Tooth Gum",
+ captain: "Boosts ATK of STR characters by 1.5x"
+ },
+ 656: {
+ special: "Changes [EMPTY] and [TND] orbs into [STR] orbs, deals 10x character's ATK in STR damage to one enemy, amplifies the effect of orbs by 1.25x for 2 turns",
+ specialNotes: "#{orb : 1.25x}",
+ specialName: "Tooth Gum",
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of STR characters by 2x"
+ },
+ 657: {
+ special: "Randomly changes [INT] and [PSY] orbs into either [STR] or [EMPTY] orbs",
+ specialName: "Forearm Sledge",
+ captain: "Boosts ATK of Fighter characters by 1.5x"
+ },
+ 658: {
+ special: "Randomly changes all orbs into either [INT] or [PSY] orbs",
+ specialName: "Lipowertzer",
+ captain: "Boosts ATK of Shooter characters by 1.5x"
+ },
+ 659: {
+ special: "Reduces Bind and Despair duration by 2 turns, reduces damage received by 50% for 2 turns",
+ specialName: "Gum-Gum Balloon Swim",
+ captain: "Boosts ATK by 2.5x after scoring 3 Perfects in a row"
+ },
+ 660: {
+ special: "Delays all enemies for 2 turns, reduces the defense of all enemies by 50% for 2 turns",
+ specialName: "Atlas Comet",
+ captain: "Boosts ATK of Shooter characters by 2x"
+ },
+ 661: {
+ special: "Delays all enemies for 2 turns, reduces the defense of all enemies by 50% for 2 turns",
+ specialName: "Atlas Comet",
+ captain: "Boosts ATK of Shooter characters by 2x, reduces cooldown of all specials by 1 turn at the start of the fight"
+ },
+ 662: {
+ special: "Deals 13x character's ATK in PSY damage to one enemy, randomizes all orbs other than [PSY]",
+ specialName: "Tornado Tempo - Beach Side",
+ captain: "Boosts ATK of PSY characters by 2x"
+ },
+ 663: {
+ special: "Deals PSY damage to one enemy according to HP, recovers 5x character's RCV in HP at the end of each turn for 5 turns",
+ specialNotes: "The exact damage is proportional to the crew's remaining HP and is higher the lower the HP is. The formula used is 80000 * (1 - (current HP) / (total HP))",
+ specialName: "Vivi's Important Security Guard",
+ captain: "Recovers 2x character's RCV in HP at the end of each turn"
+ },
+ 664: {
+ special: "Deals PSY damage to one enemy according to HP, recovers 5x character's RCV in HP at the end of each turn for 5 turns",
+ specialNotes: "The exact damage is proportional to the crew's remaining HP and is higher the lower the HP is. The formula used is 80000 * (1 - (current HP) / (total HP))",
+ specialName: "Vivi's Important Security Guard",
+ captain: "Recovers 3x character's RCV in HP at the end of each turn"
+ },
+ 665: {
+ special: "Changes own orb into [QCK], boosts ATK against enemies with reduced defense by 1.3x for 2 turns",
+ specialName: "Let's Go! Suna Suna Clan!!",
+ captain: "Boosts ATK of all characters by 1.2x, reduces HP and RCV of all characters by 80%"
+ },
+ 666: {
+ special: "Changes own orb into [QCK], boosts ATK against enemies with reduced defense by 1.3x for 2 turns",
+ specialName: "Let's Go! Suna Suna Clan!!",
+ captain: "Boosts ATK of all characters by 1.75x, reduces HP and RCV of all characters by 80%"
+ },
+ 667: {
+ special: "Protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "King's Chopper",
+ specialNotes: "#{zombie}",
+ captain: "Reduces damage received by 10%, boosts ATK of all characters by 1.5x"
+ },
+ 668: {
+ special: "Boosts ATK of Free Spirit characters by 1.5x for 1 turn. If during that turn every unit scores a Perfect hit, boosts ATK of Free Spirit characters by 2x in the following turn.",
+ specialName: "Dragon's Claw",
+ captain: "Boosts HP and RCV of all characters by 1.2x, boosts ATK of Free Spirit characters proportionally to the crew's current HP",
+ captainNotes: "#{captainProportional : higher : 2 + 0.75 * (remaining HP) / (total HP) : 2.75 : 2}"
+ },
+ 669: {
+ special: "Boosts ATK of Free Spirit characters by 1.5x for 1 turn. If during that turn every unit scores a Perfect hit, boosts ATK of Free Spirit characters by 2x in the following turn.",
+ specialName: "Dragon's Claw",
+ captain: "Boosts HP and RCV of all characters by 1.2x, boosts ATK of Free Spirit characters proportionally to the crew's current HP",
+ captainNotes: "#{captainProportional : higher : 2 + 0.75 * (remaining HP) / (total HP) : 2.75 : 2}"
+ },
+ 670: {
+ special: "Boosts ATK of Fighter characters by 1.75x for 1 turn",
+ specialName: "Fishman Karate! True Fist Thrust of the Revolutionaries",
+ captain: "Boosts ATK of Fighter characters by 2x"
+ },
+ 671: {
+ special: "Boosts ATK of Fighter characters by 1.75x for 1 turn",
+ specialName: "Fishman Karate! True Fist Thrust of the Revolutionaries",
+ captain: "Boosts ATK of Fighter characters by 2.25x and their RCV by 1.5x"
+ },
+ 672: {
+ special: "Cuts the current HP of each enemy by 20%, changes own orb into [STR]",
+ specialName: "Four Thousand Tile True Punch",
+ captain: "Boosts ATK of Fighter characters by 2x"
+ },
+ 673: {
+ special: "Cuts the current HP of each enemy by 20%, changes own orb into [STR]",
+ specialName: "Four Thousand Tile True Punch",
+ captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Fighter characters by 2x"
+ },
+ 674: {
+ special: "Removes poison, reduces damage received by 50% for 2 turns, recovers 13x character's RCV in HP at the end of each turn for 2 turns",
+ specialName: "Emporio Healing Hormone",
+ captain: "Boosts ATK of Free Spirit characters by 2x"
+ },
+ 675: {
+ special: "Removes poison, reduces damage received by 50% for 2 turns, recovers 13x character's RCV in HP at the end of each turn for 2 turns",
+ specialName: "Emporio Healing Hormone",
+ captain: "Boosts ATK of Free Spirit characters by 2.5x"
+ },
+ 676: {
+ special: "Reduces any damage received above 5,000 HP by 97% for 3 turns",
+ specialNotes: "The exact formula for the damage received is: 5000 + ((total damage) - 5000) * 0.03",
+ specialName: "KEEP OUT",
+ captain: "Boosts ATK of Slasher characters by 1.5x, deals 5x character's ATK in QCK damage to all enemies at the end of each turn"
+ },
+ 677: {
+ special: "Reduces any damage received above 5,000 HP by 97% for 3 turns",
+ specialNotes: "The exact formula for the damage received is: 5000 + ((total damage) - 5000) * 0.03",
+ specialName: "KEEP OUT",
+ captain: "Boosts ATK of Slasher characters by 1.5x, deals 5x character's ATK in QCK damage to all enemies at the end of each turn"
+ },
+ 678: {
+ special: "Reduces damage received by 50% for 1 turn, locks all orbs for 1 turn",
+ specialName: "Cien Fleur Spider Net",
+ captain: "Boosts ATK and RCV of PSY characters by 1.2x, boosts chances of getting [PSY] orbs"
+ },
+ 679: {
+ special: "Reduces damage received by 50% for 1 turn, locks all orbs for 1 turn",
+ specialName: "Cien Fleur Spider Net",
+ captain: "Boosts ATK and RCV of PSY characters by 1.5x, boosts chances of getting [PSY] orbs"
+ },
+ 680: {
+ special: "Recovers 5x character's RCV in HP, boosts ATK and RCV of DEX characters by 1.25x for 2 turns",
+ specialName: "Midsummer Relax Time"
+ },
+ 681: {
+ special: "Recovers 5x character's RCV in HP, boosts ATK and RCV of DEX characters by 1.25x for 2 turns",
+ specialName: "Midsummer Relax Time",
+ captain: "Boosts ATK and RCV of Striker characters by 1.5x"
+ },
+ 682: {
+ special: "Recovers 2,561 HP, reduces damage received by 50% for 2 turns",
+ specialName: "Transcendental Serenity Healing"
+ },
+ 683: {
+ special: "Recovers 2,561 HP, reduces damage received by 50% for 2 turns",
+ specialName: "Transcendental Serenity Healing",
+ captain: "Boosts ATK and RCV of Fighter characters by 1.5x"
+ },
+ 684: {
+ special: "Recovers 3x character's RCV in HP, reduces damage received by 80% for 1 turn",
+ specialName: "Romantic Ghost"
+ },
+ 685: {
+ special: "Recovers 3x character's RCV in HP, reduces damage received by 80% for 1 turn",
+ specialName: "Romantic Ghost",
+ captain: "Boosts ATK and RCV of Shooter characters by 1.5x"
+ },
+ 686: {
+ special: "Delays all enemies for 1 turn, recovers 3x character's RCV in HP at the end of each turn for 3 turns",
+ specialName: "Captivating Perfume Dance - Relaxation",
+ captain: "Boosts ATK and RCV of Slasher characters by 1.5x"
+ },
+ 687: {
+ special: "Deals 13x character's ATK in STR damage to all enemies, boosts ATK of Free Spirit characters by 1.3x for 1 turn",
+ specialName: "First Spear of the Battle",
+ captain: "Boosts ATK of Free Spirit characters by 1.5x"
+ },
+ 688: {
+ special: "Deals 13x character's ATK in STR damage to all enemies, boosts ATK of Free Spirit characters by 1.3x for 1 turn",
+ specialName: "First Spear of the Battle",
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of Free Spirit characters by 2x"
+ },
+ 689: {
+ special: "Amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Botanist's Great Discovery",
+ captain: "Boosts ATK and RCV of Slasher characters by 1.2x"
+ },
+ 690: {
+ special: "Amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Botanist's Great Discovery",
+ captain: "Boosts ATK and RCV of Slasher characters by 1.5x"
+ },
+ 691: {
+ special: "Changes [PSY] orbs into [DEX] orbs",
+ specialName: "[PSY] Slot Change [DEX]"
+ },
+ 692: {
+ special: "Changes [PSY] orbs into [QCK] orbs",
+ specialName: "[PSY] Slot Change [QCK]"
+ },
+ 693: {
+ special: "Changes [DEX] orbs into [PSY] orbs",
+ specialName: "[DEX] Slot Change [PSY]"
+ },
+ 694: {
+ special: "Deals 13x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Burst"
+ },
+ 695: {
+ special: "Cuts the current HP of each enemy by 5%",
+ specialName: "Slight Break"
+ },
+ 696: {
+ special: "Changes [PSY] orbs into [DEX] orbs",
+ specialName: "[PSY] Slot Change [DEX]",
+ captain: "Boosts ATK of Striker characters by 1.75x"
+ },
+ 697: {
+ special: "Changes [PSY] orbs into [QCK] orbs",
+ specialName: "[PSY] Slot Change [QCK]",
+ captain: "Boosts ATK of Shooter characters by 1.75x"
+ },
+ 698: {
+ special: "Changes [DEX] orbs into [PSY] orbs",
+ specialName: "[DEX] Slot Change [PSY]",
+ captain: "Boosts ATK of Slasher characters by 1.75x"
+ },
+ 699: {
+ special: "Deals 13x character's ATK in character's type damage to all enemies",
+ specialName: "Hyper Burst",
+ captain: "Boosts ATK of Shooter characters by 500, reduces damage received by 10%"
+ },
+ 700: {
+ special: "Cuts the current HP of each enemy by 5%",
+ specialName: "Slight Break",
+ captain: "Boosts ATK of Fighter characters by 1.75x"
+ },
+ 701: {
+ special: "Deals 15x character's ATK in PSY damage to all enemies, changes own orb into [PSY]",
+ specialName: "Oimo Press",
+ captain: "Boosts HP of PSY characters by 2.25x"
+ },
+ 702: {
+ special: "Seals himself for 5 turns, reduces damage received by 30% for 5 turns",
+ specialName: "Kashi Swing",
+ captain: "Boosts HP of INT characters by 2.25x"
+ },
+ 703: {
+ special: "Deals 5x character's ATK in QCK damage to all enemies",
+ specialName: "Arm Claw of the Watchdog"
+ },
+ 704: {
+ special: "Deals 9x character's ATK in STR damage to all enemies, reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Companion's Guilt"
+ },
+ 705: {
+ special: "Randomly changes [PSY], [INT], [TND], [RCV] and [EMPTY] orbs into [STR], [DEX] or [QCK] orbs",
+ specialName: "Guilty Verdict - \"Slow Death Penalty\"",
+ captain: "Boosts ATK and HP of STR characters, DEX characters and QCK characters by 1.25x"
+ },
+ 706: {
+ special: "Changes own orb and the captain's orb into [STR]",
+ specialName: "Air Door",
+ captain: "Boosts ATK of STR characters by 1.5x"
+ },
+ 707: {
+ special: "Changes own orb and the captain's orb into [STR]",
+ specialName: "Air Door",
+ captain: "Boosts ATK and HP of STR characters by 1.5x"
+ },
+ 708: {
+ special: "Reduces Bind and Despair duration by 3 turns",
+ specialName: "Cien Fleur - Wing",
+ captain: "Boosts ATK and RCV of PSY characters by 1.2x"
+ },
+ 709: {
+ special: "Reduces Bind and Despair duration by 3 turns",
+ specialName: "Cien Fleur - Wing",
+ captain: "Boosts ATK and RCV of PSY characters by 1.5x"
+ },
+ 710: {
+ special: "Empties all slots with [BLOCK] orbs, boosts ATK of Shooter characters by 1.25x for 3 turns, deals 15x character's ATK in PSY damage to all enemies",
+ specialName: "Coup de Vent",
+ captain: "Boosts ATK of Shooter characters by 1.5x"
+ },
+ 711: {
+ special: "Empties all slots with [BLOCK] orbs, boosts ATK of Shooter characters by 1.25x for 3 turns, deals 15x character's ATK in PSY damage to all enemies",
+ specialName: "Coup de Vent",
+ captain: "Boosts ATK of Shooter characters by 2x"
+ },
+ 712: {
+ special: "Deals 15x character's ATK in QCK damage to one enemy, boosts ATK of the characters in the top row by 1.5x for 2 turns",
+ specialNotes: "The special boosts the attack of only the crew's captain and the currently selected friend captain.",
+ specialName: "Sky Knight's Javelin",
+ captain: "Boosts ATK of Striker characters by 2x if HP is above 50% at the start of the turn"
+ },
+ 713: {
+ special: "Deals 15x character's ATK in QCK damage to one enemy, boosts ATK of the characters in the top row by 1.5x for 2 turns",
+ specialNotes: "The special boosts the attack of only the crew's captain and the currently selected friend captain.",
+ specialName: "Sky Knight's Javelin",
+ captain: "Boosts ATK of Striker characters by 2.5x if HP is above 50% at the start of the turn"
+ },
+ 714: {
+ special: "Randomizes slots with [STR], [QCK], [INT] or [PSY] orbs",
+ specialName: "Pegasus' Neigh"
+ },
+ 715: {
+ special: "Boosts ATK and RCV of Free Spirit characters by 1.5x for 2 turns, seals herself for 3 turns",
+ specialName: "Angel's Harp - Healing",
+ captain: "Boosts RCV of all characters by 2x if HP is below 30% at the start of the turn"
+ },
+ 716: {
+ special: "Boosts ATK and RCV of Free Spirit characters by 1.5x for 2 turns, seals herself for 3 turns",
+ specialName: "Angel's Harp - Healing",
+ captain: "Boosts RCV of all characters by 5x if HP is below 30% at the start of the turn"
+ },
+ 717: {
+ special: "Deals 50% of the damage dealt in the previous turn as typeless damage to all enemies",
+ specialNotes: "The special only includes the damage inflicted through normal attacks.",
+ specialName: "Black Sword - Lightning Slash",
+ captain: "Boosts ATK of Slasher characters by a variable factor between 2x and 2.75x based on the timing of the attack of the previous unit in the chain",
+ captainNotes: "A hit below Good or a Miss will boost the ATK of the next unit by 2x, a Good hit by 2.25x, a Great hit by 2.5x and a Perfect hit by 2.75x. This bonus is applied only to Slasher characters."
+ },
+ 718: {
+ special: "Deals 50% of the damage dealt in the previous turn as typeless damage to all enemies",
+ specialNotes: "The special only includes the damage inflicted through normal attacks.",
+ specialName: "Black Sword - Lightning Slash",
+ captain: "Boosts ATK of Slasher characters by a variable factor between 2x and 2.75x based on the timing of the attack of the previous unit in the chain",
+ captainNotes: "A hit below Good or a Miss will boost the ATK of the next unit by 2x, a Good hit by 2.25x, a Great hit by 2.5x and a Perfect hit by 2.75x. This bonus is applied only to Slasher characters."
+ },
+ 719: {
+ special: "Boosts ATK of Cerebral characters by a variable factor for 1 turn, deals 20x character's ATK in DEX damage to all enemies",
+ specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 30% HP, the multiplier used is 1.5x; below 30% HP, it's 2x.",
+ specialName: "Sables: Pesado",
+ captain: "Boosts ATK of Cerebral characters proportionally to the crew's current HP",
+ captainNotes: "#{captainProportional : lower : 1.5 + 1.75 * (1 - (remaining HP) / (total HP)) : 1.5 : 3.25}"
+ },
+ 720: {
+ special: "Boosts ATK of Cerebral characters by a variable factor for 1 turn, deals 20x character's ATK in DEX damage to all enemies",
+ specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 30% HP, the multiplier used is 1.5x; below 30% HP, it's 2x.",
+ specialName: "Sables: Pesado",
+ captain: "Boosts ATK of Cerebral characters proportionally to the crew's current HP",
+ captainNotes: "#{captainProportional : lower : 1.5 + 1.75 * (1 - (remaining HP) / (total HP)) : 1.5 : 3.25}"
+ },
+ 721: {
+ special: "Randomizes all orbs, including [BLOCK] orbs",
+ specialName: "Screw Drop Kick",
+ captain: "Boosts ATK of Fighter characters by 1.5x if HP is is above 99% at the start of the turn"
+ },
+ 722: {
+ special: "Randomizes all orbs, including [BLOCK] orbs",
+ specialName: "Screw Drop Kick",
+ captain: "Boosts ATK of Fighter characters by 2x if HP is is above 99% at the start of the turn"
+ },
+ 723: {
+ special: "Reduces crew's current HP by 80%, deals 5x the amount of HP subtracted in typeless damage to all enemies, reduces damage received by 90% for 1 turn",
+ specialName: "Right Angle Flying Bird: Bone Phoenix",
+ captain: "Boosts ATK of Slasher characters by 1.5x, recovers 1.2x character's RCV in HP at the end of each turn"
+ },
+ 724: {
+ special: "Reduces crew's current HP by 80%, deals 5x the amount of HP subtracted in typeless damage to all enemies, reduces damage received by 90% for 1 turn",
+ specialName: "Right Angle Flying Bird: Bone Phoenix",
+ captain: "Boosts ATK of Slasher characters by 1.75x, recovers 1.5x character's RCV in HP at the end of each turn"
+ },
+ 725: {
+ special: "Changes [TND] orbs into [QCK] orbs, switches orbs between slots twice",
+ specialName: "Peacock String Slasher",
+ captain: "Recovers 1,000 HP at the end of each turn"
+ },
+ 726: {
+ special: "Changes [TND] orbs into [QCK] orbs, switches orbs between slots twice",
+ specialName: "Peacock String Slasher",
+ captain: "Recovers 2,000 HP at the end of each turn"
+ },
+ 727: {
+ special: "Deals 10x character's ATK in DEX damage to all enemies, reduces the defense of all enemies by 50% for 1 turn",
+ specialName: "Gum-Gum Gatling",
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of Free Spirit and Fighter characters by 1.75x"
+ },
+ 728: {
+ special: "Randomizes all orbs, recovers 6x character's RCV in HP at the end of each turn for 3 turns",
+ specialName: "Sheep Cloud Relaxing Bubbles",
+ captain: "Boosts ATK and RCV of DEX characters by 1.2x, slightly boosts chances of getting [DEX] orbs"
+ },
+ 729: {
+ special: "Randomizes all orbs, recovers 6x character's RCV in HP at the end of each turn for 3 turns",
+ specialName: "Sheep Cloud Relaxing Bubbles",
+ captain: "Boosts ATK and RCV of DEX characters by 1.2x, boosts chances of getting [DEX] orbs"
+ },
+ 730: {
+ special: "Reduces crew's current HP by 99%, deals 2x the amount of HP subtracted in INT damage to all enemies, boosts ATK of INT characters by 1.5x for 1 turn",
+ specialName: "Rankyaku - Lupus Fall",
+ captain: "Boosts ATK and HP of INT characters by 1.2x, deals 9 HP as fixed damage to all enemies at the end of each turn",
+ captainNotes: "#{fixed}"
+ },
+ 731: {
+ special: "Reduces crew's current HP by 99%, deals 2x the amount of HP subtracted in INT damage to all enemies, boosts ATK of INT characters by 1.5x for 1 turn",
+ specialName: "Rankyaku - Lupus Fall",
+ captain: "Boosts ATK and HP of INT characters by 1.5x, deals 9 HP as fixed damage to all enemies at the end of each turn",
+ captainNotes: "#{fixed}"
+ },
+ 732: {
+ special: "Deals 13x character's ATK in STR damage to one enemy, reduces damage received by 50% for 1 turn",
+ specialName: "Tekkai Dama",
+ captain: "Boosts ATK of STR characters by 1.5x, reduces damage received by 10%"
+ },
+ 733: {
+ special: "Deals 13x character's ATK in STR damage to one enemy, reduces damage received by 50% for 1 turn",
+ specialName: "Tekkai Dama",
+ captain: "Boosts ATK of STR characters by 1.5x, reduces damage received by 20%"
+ },
+ 734: {
+ special: "For 1 turn, boosts the amount healed by RCV orbs by 1.5x, then 2x, then 2.5x from the third crew member onward",
+ specialName: "Life Return - Digestion, Absorption",
+ captain: "Boosts ATK and RCV of PSY characters by 1.2x"
+ },
+ 735: {
+ special: "For 1 turn, boosts the amount healed by RCV orbs by 1.5x, then 2x, then 2.5x from the third crew member onward",
+ specialName: "Life Return - Digestion, Absorption",
+ captain: "Boosts ATK and RCV of PSY characters by 1.5x"
+ },
+ 736: {
+ special: "Deals 20x character's ATK in STR damage to all enemies, changes [QCK] orbs into [STR] orbs",
+ specialName: "Fierce Smash",
+ captain: "Boosts ATK of Slasher characters by 2.5x if HP is above 50% at the start of the turn"
+ },
+ 737: {
+ special: "Changes [RCV] orbs into [QCK] orbs, changes adjacent orbs into [QCK] orbs",
+ specialName: "Shigan - Bachi",
+ captain: "Boosts ATK of Fighter characters by 2.75x if HP is below 30% at the start of the turn"
+ },
+ 738: {
+ special: "Deals 200x character's ATK in INT damage to one enemy",
+ specialName: "Ivory Rush",
+ captain: "Boosts ATK of characters with cost 21 or more by 2x"
+ },
+ 739: {
+ special: "Reduces Bind duration by 5 turns, randomizes all orbs",
+ specialName: "Coup de Boo",
+ captain: "Boosts ATK of Free Spirit characters by 2x"
+ },
+ 740: {
+ special: "Deals 10x character's ATK in QCK damage to all enemies, boosts ATK against enemies with increased defense by 1.3x for 2 turns",
+ specialName: "Rankyaku - Sen",
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight"
+ },
+ 741: {
+ special: "Deals 10x character's ATK in QCK damage to all enemies, boosts ATK against enemies with increased defense by 1.3x for 2 turns",
+ specialName: "Rankyaku - Sen",
+ captain: "Reduces cooldown of all specials by 3 turns at the start of the fight"
+ },
+ 742: {
+ special: "Amplifies the effect of orbs by 1.25x for 2 turns, reduces the defense of all enemies by 80% for 2 turns",
+ specialNotes: "#{orb : 1.25x}",
+ specialName: "Ramen Beam",
+ captain: "Boosts ATK and RCV of Free Spirit characters by 1.2x"
+ },
+ 743: {
+ special: "Amplifies the effect of orbs by 1.25x for 2 turns, reduces the defense of all enemies by 80% for 2 turns",
+ specialNotes: "#{orb : 1.25x}",
+ specialName: "Ramen Beam",
+ captain: "Boosts ATK and RCV of Free Spirit characters by 1.5x"
+ },
+ 744: {
+ special: "Reduces damage received by 50% for 3 turns",
+ specialName: "Flame Fence",
+ captain: "Boosts ATK of Free Spirit characters by 2x"
+ },
+ 745: {
+ special: "Reduces damage received by 50% for 3 turns",
+ specialName: "Flame Fence",
+ captain: "Boosts ATK of Free Spirit characters by 2.5x"
+ },
+ 746: {
+ special: "Deals 10x character's ATK in QCK damage to all enemies, protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "Megalo Assault!",
+ specialNotes: "#{zombie}",
+ captain: "Protects from defeat as long as HP is above 30%",
+ captainNotes: "#{zombie}"
+ },
+ 747: {
+ special: "Deals 35x character's ATK in STR damage to one enemy, boosts chances of getting matching orbs for 3 turns",
+ specialName: "Rokuougan",
+ captain: "Boosts ATK of Powerhouse characters by 3x if they have a matching orb, by 2.5x otherwise, reduces crew's RCV to 0"
+ },
+ 748: {
+ special: "Deals 35x character's ATK in STR damage to one enemy, boosts chances of getting matching orbs for 3 turns",
+ specialName: "Rokuougan",
+ captain: "Boosts ATK of Powerhouse characters by 3x if they have a matching orb, by 2.5x otherwise, reduces crew's RCV to 0"
+ },
+ 749: {
+ special: "Deals random DEX damage to all enemies, randomizes all orbs",
+ specialName: "Tempest Kick: Sky Slicer",
+ specialNotes: "The random damage is between 10,000 and 90,000",
+ captain: "Boosts ATK of DEX characters by 1.5x, boosts damage of DEX specials by 1.5x",
+ captainNotes: "#{noFixedPerc}"
+ },
+ 750: {
+ special: "Deals random DEX damage to all enemies, randomizes all orbs",
+ specialName: "Tempest Kick: Sky Slicer",
+ specialNotes: "The random damage is between 10,000 and 90,000",
+ captain: "Boosts ATK of DEX characters by 2x, boosts damage of DEX specials by 2x",
+ captainNotes: "#{noFixedPerc}"
+ },
+ 751: {
+ special: "Reduces damage received in the next turn by 50% if the special is activated with more than 50% health remaining, by 80% if activated with less than 50% but more than 10% health remaining, by 100% if activated with less than 10% health remaining",
+ specialName: "Sheep Cloud Tidal Wave",
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x"
+ },
+ 752: {
+ special: "Reduces damage received in the next turn by 50% if the special is activated with more than 50% health remaining, by 80% if activated with less than 50% but more than 10% health remaining, by 100% if activated with less than 10% health remaining",
+ specialName: "Sheep Cloud Tidal Wave",
+ captain: "Boosts ATK of Cerebral characters by 2.25x and their RCV by 1.5x"
+ },
+ 753: {
+ special: "Deals 15x character's ATK in QCK damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
+ specialNotes: "#{orb : 1.75x}",
+ specialName: "Moonlight Ten Finger Pistol",
+ captain: "Boosts ATK of Powerhouse characters by 2x"
+ },
+ 754: {
+ special: "Deals 15x character's ATK in QCK damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
+ specialNotes: "#{orb : 1.75x}",
+ specialName: "Moonlight Ten Finger Pistol",
+ captain: "Boosts ATK of Powerhouse characters by 2.5x"
+ },
+ 755: {
+ special: "Reduces damage received by 50% for 1 turn, boosts ATK of Powerhouse characters by 1.75x for 1 turn",
+ specialName: "Tekkai - Rin",
+ captain: "Boosts ATK of INT characters by 1.5x, reduces damage received from PSY enemies by 20%"
+ },
+ 756: {
+ special: "Reduces damage received by 50% for 1 turn, boosts ATK of Powerhouse characters by 1.75x for 1 turn",
+ specialName: "Tekkai - Rin",
+ captain: "Boosts ATK of INT characters by 2x, reduces damage received from PSY enemies by 30%"
+ },
+ 757: {
+ special: "Changes [DEX] and [QCK] orbs into [PSY] orbs",
+ specialName: "Solid Beast Supreme Technique: Owl Strike",
+ captain: "Boosts ATK of PSY characters by 2x"
+ },
+ 758: {
+ special: "Changes [DEX] and [QCK] orbs into [PSY] orbs",
+ specialName: "Solid Beast Supreme Technique: Owl Strike",
+ captain: "Boosts ATK of PSY characters by 2x, recovers 3x character's RCV in HP at the end of each turn"
+ },
+ 759: {
+ special: "Switches orbs between slots 3 times, locks all orbs for 1 turn",
+ specialName: "Life Return: Shishi Finger Pistol",
+ captain: "Boosts ATK of STR characters by 2.5x if HP is below 30% at the start of the turn"
+ },
+ 760: {
+ special: "Switches orbs between slots 3 times, locks all orbs for 1 turn",
+ specialName: "Life Return: Shishi Finger Pistol",
+ captain: "Boosts ATK of STR characters by 3x if HP is below 30% at the start of the turn"
+ },
+ 761: {
+ special: "Deals 15x character's ATK in DEX damage to one enemy, boosts ATK of all characters by 1.2x for 1 turn",
+ specialName: "Gum-Gum Monster Pistol",
+ captain: "Boosts ATK of Fighter characters by 2x"
+ },
+ 762: {
+ special: "Boosts ATK of PSY characters by 1.75x for 1 turn",
+ specialName: "Impact Beast",
+ captain: "Boosts ATK and RCV of PSY characters by 1.5x"
+ },
+ 763: {
+ special: "Changes own orb into [STR], switches orbs between slots once",
+ specialName: "Franken-Franky Centaur",
+ captain: "Boosts ATK of STR characters by 2x"
+ },
+ 764: {
+ special: "Recovers 3,000 HP",
+ specialName: "Cat Burglar Trick",
+ captain: "Boosts ATK and RCV of Striker characters by 1.5x"
+ },
+ 765: {
+ special: "Reduces Despair duration by 3 turns",
+ specialName: "Scope Magic",
+ captain: "Recovers 2x character's RCV in HP at the end of each turn"
+ },
+ 766: {
+ special: "Deals 7x character's ATK in QCK damage to all enemies, delays all enemies for 1 turn",
+ specialName: "108 Pound Phoenix: Reaper",
+ captain: "Boosts ATK of QCK characters by 2x"
+ },
+ 767: {
+ special: {
+ "japan": "Changes the orbs in the top row into [DEX] orbs, removes blindness",
+ "global": "Changes the orbs in the top row into [DEX] orbs, reduces Despair duration by 1 turn"
+ },
+ specialName: "Ojos Fleur: Thriller",
+ captain: "Boosts ATK and RCV of DEX characters by 1.5x"
+ },
+ 768: {
+ special: "Recovers 15x character's RCV in HP, changes [TND] orbs into [RCV] orbs",
+ specialName: "Hot Rock Stew: Party",
+ captain: "Boosts ATK of PSY characters by 2x"
+ },
+ 769: {
+ special: "Recovers 4,343 HP, poisons all enemies",
+ specialNotes: "#{poison}",
+ specialName: "Lullaby Parry: Horror",
+ captain: "Boosts ATK and RCV of INT characters by 1.5x"
+ },
+ 770: {
+ special: "Deals 15x character's ATK in STR damage to one enemy, boosts ATK against delayed enemies by 1.3x for 2 turns",
+ specialName: "Shigan: Convergence",
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of STR characters by 2x"
+ },
+ 771: {
+ special: "Deals 15x character's ATK in PSY damage to one enemy, boosts ATK of Cerebral characters by 1.75x for 1 turn",
+ specialName: "Moonwalk: Air Walking",
+ captain: "Boosts ATK of Cerebral characters by 2.5x"
+ },
+ 772: {
+ special: "Cuts the current HP of each enemy by 10%, changes [PSY] and [INT] orbs into [DEX] orbs",
+ specialName: "Eight-Sword Style: Brave Warrior's Continuous Attack",
+ captain: "Boosts ATK of Slasher characters by 2x, reduces damage received from QCK enemies by 20%"
+ },
+ 773: {
+ special: "Reduces any damage received above 3,000 HP by 80% for 1 turn",
+ specialNotes: "The exact formula for the damage received is: 3000 + ((total damage) - 3000) * 0.2",
+ specialName: "Rust-Rust Fruit",
+ captain: "Reduces damage received by 20%"
+ },
+ 774: {
+ special: "Randomly changes [TND], [RCV], [EMPTY], [BLOCK] and [BOMB] orbs into either [STR], [DEX], [QCK], [PSY] or [INT] orbs, switches orbs between slots 3 times",
+ specialName: "Berry-Berry Fruit",
+ captain: "Boosts ATK of Free Spirit characters by 2x"
+ },
+ 775: {
+ special: "Deals several times the character's ATK in PSY damage to one enemy",
+ specialNotes: "#{specialProportional : lower : 125 * ( 1 - (remaining HP) / (total HP) )}",
+ specialName: "Angry Headbutt",
+ captain: "Boosts ATK and HP of Cerebral characters by 1.5x"
+ },
+ 776: {
+ specialName: "Boisterous Lucky Shot!!",
+ special: "Recovers 5,000 HP, deals 15x character's ATK in PSY damage to one enemy, seals himself for 3 turns",
+ captain: "Boosts ATK and RCV of PSY characters by 1.25x"
+ },
+ 777: {
+ special: "Recovers 5,000 HP, deals 15x character's ATK in PSY damage to one enemy, seals himself for 3 turns",
+ specialName: "Boisterous Lucky Shot!!",
+ captain: "Boosts ATK and RCV of PSY characters by 1.75x"
+ },
+ 778: {
+ special: "Deals several times the character's ATK in QCK damage to one enemy, changes own orb into [QCK]",
+ specialNotes: "#{specialProportional : lower : 125 * ( 1 - (remaining HP) / (total HP) )}",
+ specialName: "Undefeated Sword Technique",
+ captain: "Reduces damage received by 20%"
+ },
+ 779: {
+ special: "Deals several times the character's ATK in QCK damage to one enemy, changes own orb into [QCK]",
+ specialNotes: "#{specialProportional : lower : 125 * ( 1 - (remaining HP) / (total HP) )}",
+ specialName: "Undefeated Sword Technique",
+ captain: "Reduces damage received by 25%"
+ },
+ 780: {
+ special: "Boosts own ATK by a variable factor for 1 turn",
+ specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 50% HP, the multiplier used is 1.5x; between 20% HP and 50% HP, it's 1.75x; below 20% HP, it's 2x.",
+ specialName: "Precept Deification",
+ captain: "Boosts ATK of all characters by 2x if HP is below 30% at the start of the turn"
+ },
+ 781: {
+ special: "Boosts own ATK by a variable factor for 1 turn",
+ specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 50% HP, the multiplier used is 1.5x; between 20% HP and 50% HP, it's 1.75x; below 20% HP, it's 2x.",
+ specialName: "Precept Deification",
+ captain: "Boosts ATK of all characters by 2.5x if HP is below 30% at the start of the turn"
+ },
+ 782: {
+ special: "Delays all enemies for 1 turn, recovers a small random amount of HP",
+ specialName: "Smile of a Natural Beauty",
+ captain: "Boosts RCV of Slasher characters by 1.5x"
+ },
+ 783: {
+ special: "Delays all enemies for 1 turn, recovers a small random amount of HP",
+ specialName: "Smile of a Natural Beauty",
+ captain: "Boosts ATK of Slasher characters by 2x and their RCV by 1.5x"
+ },
+ 784: {
+ special: "Reduces Despair duration by 2 turns, removes blindness",
+ specialName: "Yelling at Lascivious Young Women"
+ },
+ 785: {
+ special: "Reduces Despair duration by 2 turns, removes blindness",
+ specialName: "Yelling at Lascivious Young Women",
+ captain: "Reduces damage received by 20%"
+ },
+ 786: {
+ special: "Seals himself for 10 turns, delays all enemies for 1 turn, reduces damage received by 50% for 4 turns",
+ specialName: "The Resolve to Face Death! \"Open Mind\""
+ },
+ 787: {
+ special: "Seals himself for 10 turns, delays all enemies for 1 turn, reduces damage received by 50% for 4 turns",
+ specialName: "The Resolve to Face Death! \"Open Mind\"",
+ captain: "Reduces damage received by 50%, reduces crew's current HP by 10% at the end of each turn"
+ },
+ 788: {
+ special: "Following the activation of the special, if every unit scores a Perfect hit, boosts ATK of Slasher characters by 1.75x in the following turn",
+ specialName: "Real Sword Fight with a Girl Swordsman"
+ },
+ 789: {
+ special: "Following the activation of the special, if every unit scores a Perfect hit, boosts ATK of Slasher characters by 1.75x in the following turn",
+ specialName: "Real Sword Fight with a Girl Swordsman",
+ captain: "Boosts ATK of Slasher characters by 1.5x"
+ },
+ 790: {
+ special: "Deals 3x character's ATK in QCK damage to one enemy, boosts ATK of STR, DEX and QCK characters by 1.2x for 3 turns",
+ specialName: "March!! Usopp Pirates"
+ },
+ 791: {
+ special: "Deals 3x character's ATK in QCK damage to one enemy, boosts ATK of STR, DEX and QCK characters by 1.2x for 3 turns",
+ specialName: "March!! Usopp Pirates",
+ captain: "Boosts ATK, HP and RCV of STR, DEX and QCK characters by 1.25x"
+ },
+ 792: {
+ special: "Randomly changes all orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs, switches orbs between slots twice, locks all orbs for 1 turn",
+ specialName: "The Entushiasm to Keep Skilled Workers in Line"
+ },
+ 793: {
+ special: "Randomly changes all orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs, switches orbs between slots twice, locks all orbs for 1 turn",
+ specialName: "The Entushiasm to Keep Skilled Workers in Line",
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x"
+ },
+ 794: {
+ special: "Deals 10 hits of random INT damage to random enemies, delays all enemies for 1 turn",
+ specialNotes: "#{randomHits : 10} #{random : 1,000 : 30,000 : for each hit}",
+ specialName: "Gum-Gum Storm",
+ captain: "Boosts ATK of Powerhouse characters by 3x, reduces crew's current HP by 10% at the end of each turn, reduces his own ATK multiplier by 0.1x at the end of each turn",
+ captainNotes: "His ATK multiplier will be 3.0x on the first turn, 2.9x on the second, 2.8x on the third and so on. The reduction stops once the multiplier is 1.0x. The multiplier affects all Powerhouse characters. You will not die to the HP reduction"
+ },
+ 795: {
+ special: "Deals 10 hits of random INT damage to random enemies, delays all enemies for 1 turn",
+ specialNotes: "#{randomHits : 10} #{random : 1,000 : 30,000 : for each hit}",
+ specialName: "Gum-Gum Storm",
+ captain: "Boosts ATK of Powerhouse characters by 3.5x, reduces crew's current HP by 10% at the end of each turn, reduces his own ATK multiplier by 0.1x at the end of each turn",
+ captainNotes: "His ATK multiplier will be 3.5x on the first turn, 3.4x on the second, 3.3x on the third and so on. The reduction stops once the multiplier is 1.0x. The multiplier affects all Powerhouse characters. You will not die to the HP reduction"
+ },
+ 796: {
+ special: "Slightly boosts chances of getting matching orbs for 3 turns, boosts own ATK by 1.75x for 1 turn",
+ specialName: "Peto-Peto Fruit, The Greatest Power",
+ captain: "Boosts ATK of Cerebral characters by 2x"
+ },
+ 797: {
+ special: "Slightly boosts chances of getting matching orbs for 3 turns, boosts own ATK by 1.75x for 1 turn",
+ specialName: "Peto-Peto Fruit, The Greatest Power",
+ captain: "Boosts ATK of Cerebral and Powerhouse characters by 2x"
+ },
+ 798: {
+ special: "Removes poison, following the activation of the special, if every unit scores a Perfect hit, boosts ATK of Fighter characters by 1.75x in the following turn",
+ specialName: "Dugong Secret! Fist of the Black Fin",
+ captain: "Boosts ATK by 2.5x after scoring 3 Perfects in a row"
+ },
+ 799: {
+ special: "Randomizes all orbs, recovers 9x character's RCV in HP",
+ specialName: "Sea Animal Healing"
+ },
+ 800: {
+ special: "Randomly changes all orbs into either [STR], [DEX] or [QCK] orbs",
+ specialName: "Octopus Tentacle Blow"
+ },
+ 801: {
+ special: "Randomly changes [STR], [QCK], [DEX], [INT], [BOMB] and [BLOCK] orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs, changes [TND] and [RCV] orbs into [PSY] orbs",
+ specialName: "Clone-Clone Montage",
+ captain: "Boosts ATK of PSY characters by 2x"
+ },
+ 802: {
+ special: "Randomly changes [STR], [QCK], [DEX], [INT], [BOMB] and [BLOCK] orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs, changes [TND] and [RCV] orbs into [PSY] orbs",
+ specialName: "Clone-Clone Montage",
+ captain: "Boosts ATK of PSY characters by 2.5x"
+ },
+ 803: {
+ special: "Deals 8 hits of random DEX damage to random enemies, boosts ATK of all characters by 1.1x for 3 turns",
+ specialNotes: "#{randomHits : 8}",
+ specialName: "Black Spear Formation: All-Out Attack!",
+ captain: "Boosts ATK and RCV of DEX characters by 1.2x"
+ },
+ 804: {
+ special: "Deals 8 hits of random DEX damage to random enemies, boosts ATK of all characters by 1.1x for 3 turns",
+ specialNotes: "#{randomHits : 8}",
+ specialName: "Black Spear Formation: All-Out Attack!",
+ captain: "Boosts ATK and RCV of DEX characters by 1.5x, deals 1x character's ATK in DEX damage to all enemies at the end of each turn"
+ },
+ 805: {
+ special: "Reduces crew's current HP by 20%, deals 10x the amount of HP subtracted in INT damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
+ specialName: "White Vine",
+ captain: "Boosts ATK of Striker characters by 2x",
+ specialNotes: "#{orb : 1.75x}"
+ },
+ 806: {
+ special: "Reduces crew's current HP by 20%, deals 10x the amount of HP subtracted in INT damage to one enemy, amplifies the effect of orbs by 1.75x for 1 turn",
+ specialName: "White Vine",
+ captain: "Boosts ATK of Striker characters by 2x, reduces damage received up to 30% depending on the crew's current HP",
+ specialNotes: "#{orb : 1.75x}"
+ },
+ 807: {
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x",
+ specialName: "Thunder Charge: Swing Arm",
+ special: "Deals 15x character's ATK in PSY damage to one enemy, boosts ATK against enemies with reduced defense by 1.3x for 3 turns"
+ },
+ 808: {
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x, recovers 2x character's RCV in HP at the end of each turn",
+ specialName: "Thunder Charge: Swing Arm",
+ special: "Deals 15x character's ATK in PSY damage to one enemy, boosts ATK against enemies with reduced defense by 1.3x for 3 turns"
+ },
+ 809: {
+ captain: "Boosts ATK and RCV of Powerhouse characters by 1.5x",
+ specialName: "Lola's Attack Chance",
+ special: "Reduces the defense of all enemies by 80% for 1 turn, amplifies the effect of orbs by 1.5x for 1 turn",
+ specialNotes: "#{orb : 1.5x}"
+ },
+ 810: {
+ captain: "Boosts ATK of Powerhouse characters by 2x and their RCV by 1.5x, reduces crew's current HP by 10% at the end of each turn",
+ specialName: "Lola's Attack Chance",
+ special: "Reduces the defense of all enemies by 80% for 1 turn, amplifies the effect of orbs by 1.5x for 1 turn",
+ specialNotes: "#{orb : 1.5x}"
+ },
+ 811: {
+ specialName: "Birdbrain Present",
+ special: "Changes own orb into DEX, switches orbs between slots once"
+ },
+ 812: {
+ specialName: "Hell Howl",
+ special: "Sharply reduces the defense of all enemies for 1 turn"
+ },
+ 813: {
+ specialName: "Sticky Spider Net",
+ special: "Delays all enemies for 1 turn, amplifies the effect of orbs by 1.25x for 1 turn",
+ specialNotes: "#{orb : 1.25x}"
+ },
+ 814: {
+ specialName: "Carpet Scratch",
+ special: "Deals 13x character's ATK in DEX damage to a single enemy, changes captain's orb into [TND]"
+ },
+ 815: {
+ captain: "Boosts ATK by 2.5x following a chain of STR > INT > DEX attacks no lower than Good",
+ specialName: "Brick Bat",
+ special: "Deals 10 hits of 5,000 fixed damage to random enemies",
+ specialNotes: "#{fixed} #{randomHits : 10}"
+ },
+ 816: {
+ captain: "Boosts ATK by 2.75x following a chain of STR > INT > DEX attacks no lower than Good",
+ specialName: "Brick Bat",
+ special: "Deals 10 hits of 5,000 fixed damage to random enemies",
+ specialNotes: "#{fixed} #{randomHits : 10}"
+ },
+ 817: {
+ specialName: "[PSY] Slot Change [STR]",
+ special: "Changes [PSY] orbs into [STR] orbs"
+ },
+ 818: {
+ specialName: "Quick Change",
+ special: "Switches orbs between slots once"
+ },
+ 819: {
+ specialName: "Hyper Burst",
+ special: "Deals 13x character's ATK in character's type damage to all enemies"
+ },
+ 820: {
+ specialName: "[TND] Slot Change [INT]",
+ special: "Changes [TND] orbs into [INT] orbs"
+ },
+ 821: {
+ specialName: "Slot Shuffle",
+ special: "Randomizes all orbs"
+ },
+ 822: {
+ specialName: "Patch Job",
+ special: "Boosts RCV of all characters by 100 for 3 turns"
+ },
+ 823: {
+ specialName: "Slot Rate Up [INT]",
+ special: "Slightly boosts chances of getting [INT] orbs for 3 turns"
+ },
+ 824: {
+ specialName: "Auto Repair",
+ special: "Recovers 3x character's RCV in HP at the end of each turn for 5 turns"
+ },
+ 825: {
+ captain: "Boosts ATK and HP of STR characters by 1.5x",
+ specialName: "Energy of the Ancient Knight",
+ special: "Boosts ATK of STR characters by 200 for 1 turn"
+ },
+ 826: {
+ captain: "Boosts ATK and HP of DEX characters by 1.5x",
+ specialName: "Weakness of the Ancient Knight",
+ special: "Delays all enemies for 1 turn, reduces the ATK of all characters by 80% for 2 turns"
+ },
+ 827: {
+ captain: "Boosts ATK and HP of QCK characters by 1.5x",
+ specialName: "Poison of the Ancient Knight",
+ special: "Boosts ATK against poisoned enemies by 1.05x for 999 turns"
+ },
+ 828: {
+ specialName: "Surprise Stab",
+ special: "Deals 3x character's ATK in [PSY] damage to one enemy, Boosts ATK of Slasher and Driven characters by 1.75x for 1 turns if used below 20% HP",
+ captain: "Protects from defeat as long as HP is above 50%",
+ captainNotes: "#{zombie}"
+ },
+ 829: {
+ specialName: "Surprise Stab",
+ special: "Deals 3x character's ATK in [PSY] damage to one enemy, Boosts ATK of Slasher and Driven characters by 1.75x for 1 turns if used below 20% HP",
+ captain: "Protects from defeat as long as HP is above 30%",
+ captainNotes: "#{zombie}"
+ },
+ 830: {
+ captain: "Boosts ATK of Cerebral and Striker characters by 1.75x, deals 2 times the damage received in the previous turn in DEX damage to all enemies at the end of each turn",
+ specialName: "Karma Conviction",
+ special: "Changes the orbs in the top row into [STR] orbs, changes the orbs in the middle row into [DEX] orbs, changes the orbs in the bottom row into [QCK] orbs"
+ },
+ 831: {
+ captain: "Boosts ATK of Cerebral and Striker characters by 2x, deals 5 times the damage received in the previous turn in DEX damage to all enemies at the end of each turn",
+ specialName: "Karma Conviction",
+ special: "Changes the orbs in the top row into [STR] orbs, changes the orbs in the middle row into [DEX] orbs, changes the orbs in the bottom row into [QCK] orbs"
+ },
+ 832: {
+ captain: "Boosts ATK of Free Spirit characters proportionally to the crew's current HP, reduces crew's current HP by 10% at the end of each turn",
+ specialName: "Burn Bazooka",
+ special: "Boosts ATK of Free Spirit characters by 1.5x for 1 turn, deals 15x character's ATK in STR damage to all enemies",
+ captainNotes: "#{captainProportional : lower : 1 + 1.5 * (1 - (remaining HP) / (total HP)) : 1 : 2.5}"
+ },
+ 833: {
+ captain: "Boosts ATK of Free Spirit characters proportionally to the crew's current HP, reduces crew's current HP by 10% at the end of each turn",
+ specialName: "Burn Bazooka",
+ special: "Boosts ATK of Free Spirit characters by 1.5x for 1 turn, deals 15x character's ATK in STR damage to all enemies",
+ captainNotes: "#{captainProportional : lower : 1 + 1.75 * (1 - (remaining HP) / (total HP)) : 1 : 2.75}"
+ },
+ 834: {
+ captain: "Boosts ATK and RCV of Shooter characters by 1.5x",
+ specialName: "Yellow Gun & Gero Gero Gun",
+ special: "Changes own orb into [QCK] and the captain's orb into [PSY]"
+ },
+ 835: {
+ captain: "Boosts ATK and HP of Cerebral characters by 2x",
+ specialName: "Thrust Pad Cannon",
+ special: "Changes [RCV], [TND], [EMPTY], [BLOCK] and [BOMB] orbs into Matching orbs, amplifies the effect of orbs by 1.75x for 1 turn",
+ specialNotes: "#{orb : 1.75x}"
+ },
+ 836: {
+ captain: "Boosts ATK and HP of Cerebral characters by 2x, deals 5 times the damage received in the previous turn in STR damage to all enemies at the end of each turn",
+ specialName: "Thrust Pad Cannon",
+ special: "Changes [RCV], [TND], [EMPTY], [BLOCK] and [BOMB] orbs into Matching orbs, amplifies the effect of orbs by 1.75x for 1 turn",
+ specialNotes: "#{orb : 1.75x}"
+ },
+ 837: {
+ captain: "Boosts ATK of Driven characters by 2x",
+ specialName: "Gas Robe",
+ special: "Poisons all enemies, boosts ATK of Driven characters by 1.75x for 2 turns",
+ specialNotes: "#{poison}"
+ },
+ 838: {
+ captain: "Boosts ATK of Driven characters by 2.5x",
+ specialName: "Gas Robe",
+ special: "Poisons all enemies, boosts ATK of Driven characters by 1.75x for 2 turns"
+ },
+ 839: {
+ captain: "Boosts ATK of Striker characters by 2x",
+ specialName: "Demon Bamboo",
+ special: "Changes own orb into [INT], boosts own ATK by 2x for 1 turn, deals 15x character's ATK in INT damage to one enemy"
+ },
+ 840: {
+ captain: "Boosts ATK of Striker characters by 2.5x",
+ specialName: "Demon Bamboo",
+ special: "Changes own orb into [INT], boosts own ATK by 2x for 1 turn, deals 15x character's ATK in INT damage to one enemy"
+ },
+ 841: {
+ captain: "Recovers 3x character's RCV in HP at the end of each turn, deals 3x character's ATK in PSY damage to all enemies at the end of each turn",
+ specialName: "Snow Rabbit",
+ special: "Delays all enemies for 1 turn, boosts ATK against delayed enemies by 1.25x for 2 turns"
+ },
+ 842: {
+ captain: "Recovers 5x character's RCV in HP at the end of each turn, deals 5x character's ATK in PSY damage to all enemies at the end of each turn",
+ specialName: "Snow Rabbit",
+ special: "Delays all enemies for 1 turn, boosts ATK against delayed enemies by 1.25x for 2 turns"
+ },
+ 843: {
+ captain: "Boosts ATK of Slasher, Striker and Shooter characters by 1.5x",
+ specialName: "Arms-Morphosis: Missile Girl",
+ special: "Deals 15x character's ATK in STR damage to all enemies, boosts ATK of Shooter characters by 1.5x for 1 turn. If during that turn every unit scores a Perfect hit, boosts ATK of Shooter, Striker and Slasher characters by 1.5x in the following turn."
+ },
+ 844: {
+ captain: "Boosts ATK of Slasher, Striker and Shooter characters by 2x",
+ specialName: "Arms-Morphosis: Missile Girl",
+ special: "Deals 15x character's ATK in STR damage to all enemies, boosts ATK of Shooter characters by 1.5x for 1 turn. If during that turn every unit scores a Perfect hit, boosts ATK of Shooter, Striker and Slasher characters by 1.5x in the following turn."
+ },
+ 845: {
+ captain: "Boosts ATK of all characters by 1.5x after the 11th hit in the chain, by 2.5x after the 22nd hit",
+ specialName: "Gust: Matasaburo",
+ special: "Changes own orb into [QCK], randomizes every other orb"
+ },
+ 846: {
+ captain: "Boosts ATK of all characters by 1.5x after the 11th hit in the chain, by 2.5x after the 22nd hit, by 2.75x after the 30th hit, by 3.5x after the 40th hit",
+ specialName: "Gust: Matasaburo",
+ special: "Changes own orb into [QCK], randomizes every other orb"
+ },
+ 847: {
+ captain: "Boosts ATK of all characters by 1.5x if HP is below 30% at the start of the turn",
+ specialName: "Sturdy Boat: Launch",
+ special: "Reduces Despair duration by 5 turns, boosts ATK of all characters by 5% for 3 turns, reduces damage received by 10% for 3 turns, amplifies the effect of orbs by 1.15x for 3 turns, recovers 2x character's RCV in HP at the end of each turn for 3 turns",
+ specialNotes: "#{orb : 1.15x}"
+ },
+ 848: {
+ captain: "Boosts ATK of all characters by 2x if HP is below 30% at the start of the turn",
+ specialName: "Sturdy Boat: Launch",
+ special: "Reduces Despair duration by 5 turns, boosts ATK of all characters by 5% for 3 turns, reduces damage received by 10% for 3 turns, amplifies the effect of orbs by 1.15x for 3 turns, recovers 2x character's RCV in HP at the end of each turn for 3 turns",
+ specialNotes: "#{orb : 1.15x}"
+ },
+ 849: {
+ captain: "Boosts ATK of Shooter characters by 1.75x",
+ specialName: "Battle Franky 9",
+ special: "Deals 5 hits of random STR damage to random enemies, reduces the defense of all enemies by 50% for 2 turns"
+ },
+ 850: {
+ captain: "Boosts ATK of Striker and Cerebral characters by 1.5x",
+ specialName: "First-class Assistant of the Passionate Worker",
+ special: "Changes the top right orb into [DEX], the middle right orb into [STR] and the bottom right orb into [QCK], seals himself for 3 turns"
+ },
+ 851: {
+ captain: "Boosts ATK of Driven characters by 1.5x",
+ specialName: "Snow Country Speciality: Snow Powder Makeup",
+ special: "Deals 20x character's ATK in character's type damage to one enemy, locks all orbs for 1 turn"
+ },
+ 852: {
+ captain: "Boosts ATK of Driven characters by 2x",
+ specialName: "Snow Country Speciality: Snow Powder Makeup",
+ special: "Deals 20x character's ATK in character's type damage to one enemy, locks all orbs for 1 turn"
+ },
+ 853: {
+ specialName: "Robson: Serious Mode",
+ special: "Following the activation of the special, if every unit scores a Perfect hit, boosts ATK of Powerhouse and Fighters characters by 1.2x for 3 turns"
+ },
+ 854: {
+ captain: "Boosts ATK of DEX chracters by 1.5x, reduces damage received by 10%",
+ specialName: "Guard Point: Winter Coat",
+ special: "Reduces damage received by 50% for 3 turns, slightly boosts chances of getting [DEX] orbs for 3 turns"
+ },
+ 855: {
+ captain: "Boosts ATK of Slasher characters by 2x",
+ specialName: "Shambles: Holiday Toast",
+ special: "Changes captain's orb into [RCV], recovers 15x character's RCV in HP"
+ },
+ 856: {
+ captain: "Boosts ATK of Slasher characters by 2.5x",
+ specialName: "Shambles: Holiday Toast",
+ special: "Changes captain's orb into [RCV], recovers 15x character's RCV in HP"
+ },
+ 857: {
+ captain: "Boosts ATK of PSY characters by 2x",
+ specialName: "Bonney's Holiday Feast",
+ special: "Changes adjacent orbs into [RCV] orbs, boosts RCV of PSY characters by 1.5x for 1 turn"
+ },
+ 858: {
+ captain: "Boosts ATK and RCV of PSY characters by 2x",
+ specialName: "Bonney's Holiday Feast",
+ special: "Changes adjacent orbs into [RCV] orbs, boosts RCV of PSY characters by 1.5x for 1 turn"
+ },
+ 859: {
+ captain: "Boosts ATK of Driven characters by 1.5x, reduces damage received up to 10% depending on the crew's current HP",
+ specialName: "Pleading at the Risk of One's Life",
+ special: "Changes adjacent orbs into [RCV] orbs; if the special is activated with more than 50% health remaining, protects from defeat for 1 turn",
+ specialNotes: "#{zombie}"
+ },
+ 860: {
+ captain: "Boosts ATK of Driven characters by 2x, reduces damage received up to 30% depending on the crew's current HP",
+ specialName: "Pleading at the Risk of One's Life",
+ special: "Changes adjacent orbs into [RCV] orbs; if the special is activated with more than 50% health remaining, protects from defeat for 1 turn",
+ specialNotes: "#{zombie}"
+ },
+ 861: {
+ specialName: "Bewitching Lovely Iron Mace",
+ special: "Deals 13x character's ATK in QCK damage to one enemy, reduces damage received by 75% for 1 turn, amplifies the effect of orbs by 1.5x for 1 turn",
+ specialNotes: "#{orb : 1.5x}",
+ captain: "Reduces damage received by 10%"
+ },
+ 862: {
+ captain: "Boosts ATK of QCK characters by 2x, reduces damage received by 10%",
+ specialName: "Bewitching Lovely Iron Mace",
+ special: "Deals 13x character's ATK in QCK damage to one enemy, reduces damage received by 75% for 1 turn, amplifies the effect of orbs by 1.5x for 1 turn",
+ specialNotes: "#{orb : 1.5x}"
+ },
+ 863: {
+ captain: "Boosts ATK of QCK characters by 1.75x, recovers 2x character's RCV in HP at the end of each turn",
+ specialName: "Snow Crystal Clima-Tact",
+ special: "Reduces the defense of all enemies by 50% for 2 turns, reduces the ATK of all enemies by 10% for 2 turns"
+ },
+ 864: {
+ captain: "Boosts ATK of Free Spirit characters by 2x",
+ specialName: "Slave Arrow",
+ special: "Locks the chain multiplier at 2.5x for 2 turns, delays all enemies for 1 turn"
+ },
+ 865: {
+ captain: "Boosts ATK and HP of Free Spirit characters by 2x",
+ specialName: "Slave Arrow",
+ special: "Locks the chain multiplier at 2.5x for 2 turns, delays all enemies for 1 turn"
+ },
+ 866: {
+ captain: "Boosts ATK of Cerebral characters by 2x",
+ specialName: "Cien Fleur Wing: The Storm",
+ special: "Boosts ATK of Slasher and Cerebral characters by 1.3x for 2 turns, reduces Bind duration by 2 turns"
+ },
+ 867: {
+ captain: "Boosts ATK of all characters by 1.5x after the 12th hit in the chain",
+ specialName: "Tabasco Star: The Storm",
+ special: "Delays all enemies for 2 turns, deals 9x character's ATK in DEX damage to all enemies"
+ },
+ 868: {
+ captain: "Boosts ATK of all characters by 1.2x, recovers 1,000 HP at the end of the turn",
+ specialName: "Heavy Gong: The Storm",
+ special: "Deals 15x character's ATK in STR damage to one enemy, reduces Bind duration by 3 turns"
+ },
+ 869: {
+ captain: "Boosts ATK of Driven characters by 3x until the first hit other than Perfect",
+ specialName: "Black Knight",
+ special: "Changes adjacent orbs into matching orbs, amplifies the effect of orbs by 2x for 1 turn",
+ specialNotes: "#{orb : 2x}"
+ },
+ 870: {
+ captain: "Boosts ATK of Driven characters by 3x until the first hit other than Perfect",
+ specialName: "Black Knight",
+ special: "Changes adjacent orbs into matching orbs, amplifies the effect of orbs by 2x for 1 turn",
+ specialNotes: "#{orb : 2x}"
+ },
+ 871: {
+ captain: "Boosts ATK and RCV of QCK characters by 1.5x",
+ specialName: "Hobby-Hobby Fruit",
+ special: "Removes all enemies with HP below 20%",
+ specialNotes: "The special bypasses all known protective buffs. If the enemy can revive after being defeated, however, the special will only reduce the enemy's HP to 0 and trigger their revive effect."
+ },
+ 872: {
+ captain: "Boosts ATK and RCV of QCK characters by 2x",
+ specialName: "Hobby-Hobby Fruit",
+ special: "Removes all enemies with HP below 20%",
+ specialNotes: "The special bypasses all known protective buffs. If the enemy can revive after being defeated, however, the special will only reduce the enemy's HP to 0 and trigger their revive effect."
+ },
+ 873: {
+ captain: "Boosts ATK of Fighter characters by 2.5x if HP is below 30% at the start of the turn",
+ specialName: "Nyan Nyan Swim",
+ special: [
+ {
+ "description": "Changes own orb into [PSY], amplifies the effect of orbs by 1.5x for 1 turn",
+ "cooldown": [
+ 13,
+ 8
+ ]
+ },
+ {
+ "description": "Changes own orb into [PSY], amplifies the effect of orbs by 1.75x for 1 turn",
+ "cooldown": [
+ 19,
+ 14
+ ]
+ }
+ ],
+ specialNotes: "#{orb: 1.5x or 1.75x} #{stages}"
+ },
+ 874: {
+ captain: "Boosts ATK of Fighter characters by 3x if HP is below 30% at the start of the turn",
+ specialName: "Nyan Nyan Swim",
+ special: [
+ {
+ "description": "Changes own orb into [PSY], amplifies the effect of orbs by 1.5x for 1 turn",
+ "cooldown": [
+ 13,
+ 8
+ ]
+ },
+ {
+ "description": "Changes own orb into [PSY], amplifies the effect of orbs by 1.75x for 1 turn",
+ "cooldown": [
+ 19,
+ 14
+ ]
+ }
+ ],
+ specialNotes: "#{orb: 1.5x or 1.75x} #{stages}"
+ },
+ 875: {
+ captain: "Boosts ATK of Cerebral and Driven characters by 2x",
+ specialName: "Beto Launcher",
+ special: "Changes the captain's orb into a matching orb, locks all orbs for 1 turn, deals 13x character's ATK in INT damage to all enemies"
+ },
+ 876: {
+ captain: "Boosts ATK of Cerebral and Driven characters by 2.25x, makes [TND] and [RCV] orbs \"beneficial\" to Cerebral and Driven characters",
+ captainNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs while retaining their original function.",
+ specialName: "Beto Launcher",
+ special: "Changes the captain's orb into a matching orb, locks all orbs for 1 turn, deals 13x character's ATK in INT damage to all enemies"
+ },
+ 877: {
+ captain: "Boosts amount of beli received by 2x",
+ specialName: "Heaven's Do Art",
+ special: "Reduces any damage received above 2,000 HP by 88% for 2 turns",
+ specialNotes: "The exact formula for the damage received is: 2000 + ((total damage) - 2000) * 0.12"
+ },
+ 878: {
+ captain: "Boosts ATK of all characters by 1.5x, boosts amount of beli received by 2x",
+ specialName: "Heaven's Do Art",
+ special: "Reduces any damage received above 2,000 HP by 88% for 2 turns",
+ specialNotes: "The exact formula for the damage received is: 2000 + ((total damage) - 2000) * 0.12"
+ },
+ 879: {
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of Fighter characters by 1.75x",
+ specialName: "Battle Preservation Fist: Manki Kayaku",
+ special: "Changes all orbs including [BLOCK] orbs into [G] orbs, deals random typeless damage to all enemies",
+ specialNotes: "#{gOrbs}"
+ },
+ 880: {
+ captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Fighter characters by 2x",
+ specialName: "Battle Preservation Fist: Manki Kayaku",
+ special: "Changes all orbs including [BLOCK] orbs into [G] orbs, deals random typeless damage to all enemies",
+ specialNotes: "#{gOrbs}"
+ },
+ 881: {
+ captain: "Boosts ATK of Shooter and Free Spirit characters by 2x following a chain of Good > Great > Perfect hits",
+ specialName: "Fighting Music: Conflict Chekera",
+ special: "Increases damage recieved by 2x for 2 turns, reduces RCV by 90% for 2 turns, boosts ATK of Shooter and Free Spirit characters by 1.75x for 1 turn"
+ },
+ 882: {
+ captain: "Boosts ATK of Shooter and Free Spirit characters by 3x following a chain of Good > Great > Perfect hits",
+ specialName: "Fighting Music: Conflict Chekera",
+ special: "Increases damage recieved by 2x for 2 turns, reduces RCV by 90% for 2 turns, boosts ATK of Shooter and Free Spirit characters by 1.75x for 1 turn"
+ },
+ 883: {
+ captain: "Boosts ATK and HP of Powerhouse characters by 1.25x",
+ specialName: "Hakoku Sovereignity",
+ special: "Deals 20x character's ATK in character's type damage to all enemies, boosts ATK of Powerhouse characters by 1.5x for 1 turn. If \"Hakoku Sovereignity\" is used again in the same turn the special is activated in, boosts ATK of Powerhouse characters by 2x instead."
+ },
+ 884: {
+ captain: "Boosts ATK and HP of Powerhouse characters by 1.5x",
+ specialName: "Hakoku Sovereignity",
+ special: "Deals 20x character's ATK in character's type damage to all enemies, boosts ATK of Powerhouse characters by 1.5x for 1 turn. If \"Hakoku Sovereignity\" is used again in the same turn the special is activated in, boosts ATK of Powerhouse characters by 2x instead."
+ },
+ 885: {
+ captain: "Boosts ATK of Fighter characters by 2x, reduces damage received by 10%",
+ specialName: "Arabesque Brick Fist: Sun",
+ special: "Cuts the current HP of each enemy by 10%, boosts ATK of Fighter characters by 1.5x for 1 turn if HP is below 30% when the special is activated"
+ },
+ 886: {
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of Slasher characters by 2x",
+ specialName: "Daisy Blade: First",
+ special: "Deals 15x character's ATK in STR damage to all enemies, boosts ATK of Slasher characters by 1.5x for 1 turn if HP is below 30% when the special is activated"
+ },
+ 887: {
+ captain: "Boosts ATK of Driven characters by 1.5x, boosts amount of beli received by 1.2x",
+ specialName: "Special Muggy Ball: Flashy",
+ special: "Reduces the defense of all enemies by 80% for 1 turn, deals 15x character's ATK in QCK damage to all enemies"
+ },
+ 888: {
+ specialName: "Negative Ghost",
+ special: "Slightly reduces the ATK of all enemies by 10% for 3 turns",
+ specialNotes: "The reduction does not apply to damage from specials"
+ },
+ 889: {
+ captain: "Boosts ATK and RCV of DEX characters by 1.2x",
+ specialName: "Ghost Rap",
+ special: "Changes [STR] orbs into [DEX] orbs, deals 10x character's ATK in DEX damage to all enemies"
+ },
+ 890: {
+ captain: "Boosts ATK and RCV of DEX characters by 1.5x",
+ specialName: "Ghost Rap",
+ special: "Changes [STR] orbs into [DEX] orbs, deals 10x character's ATK in DEX damage to all enemies"
+ },
+ 891: {
+ captain: "Boosts ATK and RCV of Powerhouse characters by 1.75x",
+ specialName: "Resurrection of the Dead",
+ special: "Reduces damage received by 50% for 1 turn, boosts ATK of Powerhouse characters by 1.25x for 1 turn"
+ },
+ 892: {
+ captain: "Boosts chain multiplier by 2x",
+ specialName: "Hands of the Dead",
+ special: "Switches orbs between slots three times"
+ },
+ 893: {
+ captain: "Boosts ATK of Powerhouse characters by 3x after scoring 3 Perfects in a row",
+ specialName: "Oars Ball",
+ special: "Reduces damage received by 50% for 1 turn, deals 30x character's ATK in STR damage to all enemies"
+ },
+ 894: {
+ captain: "Boosts ATK of Driven characters by 3x following a chain of Good > Great > Perfect hits",
+ specialName: "Brick Bat: Black Box",
+ special: "Empties all slots with [INT] orbs, deals several times the character's ATK in INT damage to one enemy",
+ specialNotes: "The exact multiplier used is chosen based on the number of [INT] orbs consumed: 1 orb will give a 10x multiplier, 2 orbs 15x, 3 orbs 20x, 4 orbs 50x, 5 orbs 100x, 6 orbs 200x. It's not possible to activate the special without consuming at least one [INT] orb."
+ },
+ 895: {
+ captain: "Boosts ATK of Slasher characters by 1.5x",
+ specialName: "Dying Chorus: Binks' Sake",
+ special: "Recovers 6x character's RCV in HP at the end of each turn for 3 turns"
+ },
+ 896: {
+ captain: "Boosts ATK of Slasher characters by 2x",
+ specialName: "Dying Chorus: Binks' Sake",
+ special: "Recovers 6x character's RCV in HP at the end of each turn for 3 turns"
+ },
+ 897: {
+ captain: "Boosts ATK of Cerebral and Driven characters by 2x",
+ specialName: "Ground Death: Thirst",
+ special: "Changes own orb into [STR], randomizes all other orbs, cuts the current HP of all enemies by 10%"
+ },
+ 898: {
+ captain: "Boosts ATK and HP of Striker and Cerebral characters by 1.5x",
+ specialName: "Championship Fight: Little Garden Three",
+ special: "Deals 10x character's ATK in QCK damage to all enemies, changes adjacent orbs into [G] orbs",
+ specialNotes: "#{gOrbs}"
+ },
+ 899: {
+ captain: "Boosts ATK of Fighter and Free Spirit characters by 1.75x and their RCV by 1.25x",
+ specialName: "Hymn to Friendship: \"Okama Way\" Two",
+ special: "Reduces Despair duration by 5 turns, recovers 10x character's RCV in HP"
+ },
+ 900: {
+ captain: "Boosts ATK of Shooter characters by 2x if HP is above 99% at the start of the turn",
+ specialName: "Franky Destroy Gun",
+ special: "Deals 6 hits of 2,000 fixed damage to random enemies, randomly changes opposite orbs on Shooter and Free Spirit characters into either [G] orbs or matching orbs",
+ specialNotes: "The orb shuffle only applies to Shooter and Free Spirit characters, other classes are unaffected. #{gOrbs}"
+ },
+ 901: {
+ captain: "Boosts ATK of Shooter characters by 2.75x if HP is above 99% at the start of the turn",
+ specialName: "Franky Destroy Gun",
+ special: "Deals 6 hits of 2,000 fixed damage to random enemies, randomly changes opposite orbs on Shooter and Free Spirit characters into either [G] orbs or matching orbs",
+ specialNotes: "The orb shuffle only applies to Shooter and Free Spirit characters, other classes are unaffected. #{gOrbs}"
+ },
+ 902: {
+ captain: "Boosts ATK and HP of Powerhouse characters by 1.25x",
+ specialName: "Hakoku Sovereignity",
+ special: "Deals 20x character's ATK in character's type damage to all enemies, boosts ATK of Powerhouse characters by 1.5x for 1 turn. If \"Hakoku Sovereignity\" is used again in the same turn the special is activated in, boosts ATK of Powerhouse characters by 2x instead."
+ },
+ 903: {
+ captain: "Boosts ATK and HP of Powerhouse characters by 1.5x",
+ specialName: "Hakoku Sovereignity",
+ special: "Deals 20x character's ATK in character's type damage to all enemies, boosts ATK of Powerhouse characters by 1.5x for 1 turn. If \"Hakoku Sovereignity\" is used again in the same turn the special is activated in, boosts ATK of Powerhouse characters by 2x instead."
+ },
+ 904: {
+ captain: "Protects from defeat as long as HP is above 50%",
+ captainNotes: "#{zombie}",
+ specialName: "Yokozuna Slap!",
+ special: "Deals 20x character's ATK in STR damage to one enemy, delays all enemies for 1 turn"
+ },
+ 905: {
+ captain: "Boosts ATK of Slasher characters by 2.5x if HP is below 30% at the start of the turn",
+ specialName: "Two Gorilla Cut",
+ special: [
+ {
+ "description": "Changes own orb into [STR], boosts his own ATK by 1.5x for 2 turns",
+ "cooldown": [ 17, 11 ]
+ },
+ {
+ "description": "Changes own orb into [STR], boosts ATK of Slasher characters by 1.5x for 2 turns",
+ "cooldown": [ 21, 15 ]
+ },
+ {
+ "description": "Changes own orb into [STR], boosts ATK of Slasher characters by 1.75x for 2 turns",
+ "cooldown": [ 24, 18 ]
+ }
+ ],
+ specialNotes: "#{stages}"
+ },
+ 906: {
+ captain: "Boosts ATK of Slasher characters by 2.75x if HP is below 30% at the start of the turn",
+ specialName: "Two Gorilla Cut",
+ special: [
+ {
+ "description": "Changes own orb into [STR], boosts his own ATK by 1.5x for 2 turns",
+ "cooldown": [ 17, 11 ]
+ },
+ {
+ "description": "Changes own orb into [STR], boosts ATK of Slasher characters by 1.5x for 2 turns",
+ "cooldown": [ 21, 15 ]
+ },
+ {
+ "description": "Changes own orb into [STR], boosts ATK of Slasher characters by 1.75x for 2 turns",
+ "cooldown": [ 24, 18 ]
+ }
+ ],
+ specialNotes: "#{stages}"
+ },
+ 907: {
+ specialName: "Cien Fleur: Big Tree",
+ special: "Delays all enemies for 1 turn, locks all orbs for 1 turn, deals 5,000 fixed damage to all enemies, reduces crew's HP to 1",
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x if HP is below 30% at the start of the turn"
+ },
+ 908: {
+ specialName: "Cien Fleur: Big Tree",
+ special: "Delays all enemies for 1 turn, locks all orbs for 1 turn, deals 5,000 fixed damage to all enemies, reduces crew's HP to 1",
+ captain: "Boosts ATK of Cerebral characters by 2.5x and their RCV by 1.75x if HP is below 30% at the start of the turn"
+ },
+ 909: {
+ captain: "Boosts ATK and RCV of PSY characters by 1.5x",
+ specialName: "Hero of Justice! Chopper Mask!!",
+ special: "Recovers 5,000 HP, boosts ATK of PSY characters by 1.5x for 2 turns"
+ },
+ 910: {
+ specialName: "Hero of Justice! Chopper Mask!!",
+ special: "Recovers 5,000 HP, boosts ATK of PSY characters by 1.5x for 2 turns",
+ captain: "Boosts ATK of PSY characters by 2x, their RCV by 1.5x, makes INT orbs \"beneficial\" to PSY characters",
+ captainNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs."
+ },
+ 911: {
+ specialName: "Diable Jambe: Premier Hachis",
+ special: [
+ {
+ "description": "Deals 13x character's ATK in DEX damage to one enemy, boosts ATK of Powerhouse characters by 1.2x for 1 turn",
+ "cooldown": [ 15, 8 ]
+ },
+ {
+ "description": "Deals 20x character's ATK in DEX damage to one enemy, boosts ATK of Powerhouse characters by 2x for 1 turn",
+ "cooldown": [ 25, 18 ]
+ }
+ ],
+ captain: "Boosts ATK and HP of Powerhouse characters by 1.5x",
+ specialNotes: "#{stages}"
+ },
+ 912: {
+ specialName: "Diable Jambe: Premier Hachis",
+ special: [
+ {
+ "description": "Deals 13x character's ATK in DEX damage to one enemy, boosts ATK of Powerhouse characters by 1.2x for 1 turn",
+ "cooldown": [ 15, 8 ]
+ },
+ {
+ "description": "Deals 20x character's ATK in DEX damage to one enemy, boosts ATK of Powerhouse characters by 2x for 1 turn",
+ "cooldown": [ 25, 18 ]
+ }
+ ],
+ captain: "Boosts ATK of Powerhouse characters by 2.25x, and their HP by 1.5x. Recovers 2x character's RCV in HP at the end of each turn",
+ specialNotes: "#{stages}"
+ },
+ 913: {
+ captain: "Boosts ATK of QCK characters by 2.5x if they have a matching orb",
+ specialName: "Black Magic Summoning: Advent of the Demon Lord Satan",
+ special: "Seals himself for 1 turn, changes [BLOCK] orbs into matching orbs, randomly changes opposite orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs"
+ },
+ 914: {
+ captain: "Boosts ATK of QCK characters by 3x if they have a matching orb, by 1.2x otherwise",
+ specialName: "Black Magic Summoning: Advent of the Demon Lord Satan",
+ special: "Seals himself for 1 turn, changes [BLOCK] orbs into matching orbs, randomly changes opposite orbs into either [STR], [QCK], [DEX], [PSY] or [INT] orbs"
+ },
+ 915: {
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.2x",
+ specialName: "Feeling of Mutual Love",
+ special: "Boosts ATK and RCV of Cerebral characters by 1.5x for 1 turn"
+ },
+ 916: {
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.75x",
+ specialName: "Feeling of Mutual Love",
+ special: "Boosts ATK and RCV of Cerebral characters by 1.5x for 1 turn"
+ },
+ 917: {
+ captain: "Boosts ATK of Shooter characters by 1.5x",
+ specialName: "Kuja's Haki Arrow",
+ special: "Deals 5,000 fixed damage to one enemy, delays all enemies for 1 turn, changes [RCV] orbs on Shooter characters into matching orbs",
+ specialNotes: "The orb shuffle only applies to Shooter characters, other classes are unaffected."
+ },
+ 918: {
+ captain: "Boosts ATK of Shooter characters by 1.75x, recovers a small amount of health at the end of each turn",
+ specialName: "Kuja's Haki Arrow",
+ special: "Deals 5,000 fixed damage to one enemy, delays all enemies for 1 turn, changes [RCV] orbs on Shooter characters into matching orbs",
+ specialNotes: "The orb shuffle only applies to Shooter characters, other classes are unaffected."
+ },
+ 919: {
+ specialName: "Spike of the Warrior Defending Her Country",
+ special: "Reduces damage received from STR enemies by 50% for 2 turns"
+ },
+ 920: {
+ specialName: "Snake Bow of the Warrior Defending Her Country",
+ special: "Changes the orbs in the middle row into [RCV] orbs, changes the orbs in the bottom row into [TND] orbs"
+ },
+ 921: {
+ captain: "Boosts ATK and RCV of Free Spirit characters by 1.2x",
+ specialName: "Pure and Beautiful Shyness",
+ special: "Recovers 5000 HP and amplifies the effect of orbs by 1.5x for 2 turns"
+ },
+ 922: {
+ captain: "Boosts ATK and RCV of Free Spirit characters by 1.75x",
+ specialName: "Pure and Beautiful Shyness",
+ special: "Recovers 5000 HP and amplifies the effect of orbs by 1.5x for 2 turns"
+ },
+ 923: {
+ captain: "Boosts ATK of Driven characters by 2x or by 2.5x",
+ captainNotes: "#{captainFixed : 2x : HP<30% : 2.5x}",
+ specialName: "Repel: Weapons Reflect",
+ special: "Empties all slots, deals [STR] damage based on number of [STR] slots emptied to all enemies",
+ specialNotes: "The exact multiplier used is chosen based on the number of [STR] orbs consumed: 0 orbs - 3.5x ATK; 1 orb - 7x ATK; 2 orbs - 14x ATK; 3 orbs - 21x ATK; 4 orbs - 35x ATK; 5 orbs - 91x ATK; 6 orbs - 140x ATK."
+ },
+ 924: {
+ captain: "Boosts ATK of Driven characters by 2x or by 2.75x",
+ captainNotes: "#{captainFixed : 2x : HP<30% : 2.75x}",
+ specialName: "Repel: Weapons Reflect",
+ special: "Empties all slots, deals [STR] damage based on number of [STR] slots emptied to all enemies",
+ specialNotes: "The exact multiplier used is chosen based on the number of [STR] orbs consumed: 0 orbs - 3.5x ATK; 1 orb - 7x ATK; 2 orbs - 14x ATK; 3 orbs - 21x ATK; 4 orbs - 35x ATK; 5 orbs - 91x ATK; 6 orbs - 140x ATK."
+ },
+ 925: {
+ captain: "Boosts ATK of Powerhouse characters by 2x",
+ specialName: "Let's go, Jailer Beasts!",
+ special: "Deals 15x ATK to 1 enemy in [QCK] damage, boosts ATK against enemies with reduced defense by 1.3x for 3 turns"
+ },
+ 926: {
+ captain: "Boosts ATK of Powerhouse characters by 2.5x",
+ specialName: "Let's go, Jailer Beasts!",
+ special: "Deals 15x ATK to 1 enemy in [QCK] damage, boosts ATK against enemies with reduced defense by 1.3x for 3 turns"
+ },
+ 927: {
+ captain: "Boosts ATK and HP of Driven characters by 1.5x",
+ specialName: "Unwavering Hammer of Justice",
+ special: "Take 1.5x Additional damage; Boosts ATK of Slasher and Driven characters by 1.2x for 3 turns"
+ },
+ 928: {
+ captain: "Boosts ATK of Driven characters by 1.75x while above 30% HP and boosts ATK of Striker characters by 1.75x while below 30% HP",
+ special: "Deals 7x his ATK in [DEX] damage to all enemies, and boosts ATK against Poisoned enemies by 1.3x for 3 turns",
+ specialName: "Hell Wisdom Rush"
+ },
+ 929: {
+ captain: "Boosts ATK of Driven characters by 2.25x while above 30% HP and boosts ATK of Striker characters by 2.25x while below 30% HP",
+ special: "Deals 7x his ATK in [DEX] damage to all enemies, and boosts ATK against Poisoned enemies by 1.3x for 3 turns",
+ specialName: "Hell Wisdom Rush"
+ },
+ 930: {
+ captain: "Boosts chain multiplier by 2x",
+ specialName: "Blugori Manipulation Song",
+ special: "Changes orbs in left column to [DEX], then [QCK], then [INT]. Locks himself for 3 turns."
+ },
+ 931: {
+ specialName: "Large Axe of Punishment",
+ special: "Deals 13x ATK to 1 enemy in [DEX] Damage. Turns [BLOCK] orbs into [RCV] orbs"
+ },
+ 932: {
+ captain: "Boosts ATK of Powerhouse characters by 1.5x, and their HP by 1.5x",
+ specialName: "Rock Domination Wall",
+ special: [
+ {
+ "description": "Changes [EMPTY] and Badly Matching orbs into Matching orbs for Driven and Powerhouse characters. Cuts the current HP of all enemies by 10%",
+ "cooldown": [ 25, 11 ]
+ },
+ {
+ "description": "Changes [EMPTY] and Badly Matching orbs into Matching orbs. Cuts the current HP of all enemies by 20%",
+ "cooldown": [ 31, 17 ]
+ }
+ ],
+ specialNotes: "#{stages}"
+ },
+ 933: {
+ captain: "Boosts ATK of Powerhouse characters by 2.25x, and their HP by 1.5x",
+ specialName: "Rock Domination Wall",
+ special: [
+ {
+ "description": "For Driven and Powerhouse characters, changes [EMPTY] and Bad orbs into Matching. Cuts the current HP of all enemies by 10%",
+ "cooldown": [ 25, 11 ]
+ },
+ {
+ "description": "For all characters, changes [EMPTY] and Bad orbs into Matching. Cuts the current HP of all enemies by 20%",
+ "cooldown": [ 31, 17 ]
+ }
+ ],
+ specialNotes: "#{stages}"
+ },
+ 934: {
+ captain: "Boosts ATK of Fighter characters by 2x, and their HP by 1.5x. If HP is above 70% or below 30%, boosts ATK of Fighter characters by 2.75 instead",
+ specialName: "Fishman Karate!! Shark Fist Tile Breaker",
+ special: "For 1 turn, Perfects become harder to hit. Deals 20x character's ATK in [INT] damage to all enemies. Changes all Fighter Character orbs into Matching",
+ specialNotes: "Decreases timing window to hit a Perfect. (Animation remains the same)"
+ },
+ 935: {
+ captain: "Boosts ATK of Fighter characters by 2x, and their HP by 1.5x. If HP is above 70% or below 30%, boosts ATK of Fighter characters by 2.75 instead",
+ specialName: "Fishman Karate!! Shark Fist Tile Breaker",
+ special: "For 1 turn, Perfects become harder to hit. Deals 20x character's ATK in [INT] damage to all enemies. Changes all Fighter Character orbs into matching",
+ specialNotes: "Decreases timing window to hit a Perfect. (Animation remains the same)"
+ },
+ 936: {
+ captain: "Boosts Chain Multiplier by 3x",
+ specialName: "Gum-Gum Giant Jet Shell",
+ special: "Deals 20x ATK as [QCK] damage, and makes Perfects easier to hit for 3 turns",
+ specialNotes: "Increases timing window to hit a Perfect. (Animation remains the same)"
+ },
+ 937: {
+ captain: "Boosts Chain Multiplier by 3.5x and boosts HP by 1.25x",
+ specialName: "Gum-Gum Giant Jet Shell",
+ special: "Deals 20x ATK as [QCK] damage, and makes Perfects easier to hit for 3 turns",
+ specialNotes: "Increases timing window to hit a Perfect. (Animation remains the same)"
+ },
+ 938: {
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of Cerebral characters by 1.5x",
+ specialName: "Cyclone Burst",
+ special: "Reduces Bind duration for one character completely. For Striker and Cerebral characters, changes Bad orbs into matching"
+ },
+ 939: {
+ captain: "Reduces cooldown of all specials by 3 turns at the start of the fight, boosts ATK of Cerebral characters by 2x",
+ specialName: "Cyclone Burst",
+ special: "Reduces Bind duration for one character completely. For Striker and Cerebral characters, changes Bad orbs into matching"
+ },
+ 940: {
+ captain: "Boosts ATK and HP of [DEX] characters by 1.5x",
+ specialName: "Sure Kill! Exploding Star!!",
+ special: "Deals 13x ATK as [DEX] damage to all enemies, and boosts ATK of [DEX] characters by 1.75x for 1 turn"
+ },
+ 941: {
+ captain: "Boosts ATK of [DEX] characters by 1.75x and their HP by 2.25x",
+ specialName: "Sure Kill! Exploding Star!!",
+ special: "Deals 13x ATK as [DEX] damage to all enemies, and boosts ATK of [DEX] characters by 1.75x for 1 turn"
+ },
+ 942: {
+ captain: "Boosts ATK and HP of [STR] characters by 1.5x",
+ specialName: "Future Country's Big Incident: The Nightmare of Baldimore",
+ special: "Reduces damage received from [QCK] enemies by 100% for 1 turn"
+ },
+ 943: {
+ captain: "Boosts ATK of [STR] characters by 2.25x and their HP by 1.75x",
+ specialName: "Future Country's Big Incident: The Nightmare of Baldimore",
+ special: "Reduces damage received from [QCK] enemies by 100% for 1 turn"
+ },
+ 944: {
+ captain: "Boosts ATK and RCV of Driven characters by 1.2x",
+ specialName: "Spiritual Bouquet",
+ special: "Boosts ATK and RCV of Driven characters by 1.5x for 1 turn"
+ },
+ 945: {
+ captain: "Boosts ATK and RCV of Driven characters by 1.75x",
+ specialName: "Spiritual Bouquet",
+ special: "Boosts ATK and RCV of Driven characters by 1.5x for 1 turn"
+ },
+ 946: {
+ specialName: "Lock-on Iron Ball",
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of Striker characters by 1.75x",
+ special: "Change Friend Captain and changes own orb into [INT]"
+ },
+ 947: {
+ captain: "Boosts ATK of [INT] characters by 1.5x, Boosts damage of [INT] specials by 1.5x",
+ specialName: "Flame Flash",
+ special: "[STR] and [INT] characters gain 1.3x ATK for 1 turn. Deals 10x character's ATK in [INT] damage to all enemies",
+ captainNotes: "#{noFixedPerc}"
+ },
+ 948: {
+ captain: "Boosts ATK of Shooter characters by 1.5x and their RCV by 1.2x",
+ specialName: "Twin Cannons",
+ special: "Randomly changes all orbs to either [STR] or [INT]. Deals random [STR] damage"
+ },
+ 949: {
+ captain: "Boosts ATK of Slasher characters by 2x, recovers 2x character's RCV in HP at the end of each turn",
+ specialName: "Ties with Ace",
+ special: "Reduces Silence duration by 3 turns, and recovers 4,000 HP",
+ specialNotes: "Silence will refer to effects that prevent you from activating Special Abilities"
+ },
+ 950: {
+ captain: "Boosts ATK of Fighter and Free Spirit characters by 2.5x after scoring 3 Perfects in a row",
+ specialName: "Flame Commandment: Fire Pillar",
+ special: "Reduces Special Cooldown of Fighter and Free Spirit characters by 1 turn. Reduces damage received by 50% for 1 turn.",
+ specialNotes: "Reducing Special Cooldown works as if you took an extra turn"
+ },
+ 951: {
+ captain: "Boosts ATK of Fighter and Free Spirit characters by 2.75x after scoring 3 Perfects in a row",
+ specialName: "Flame Commandment: Fire Pillar",
+ special: "Reduces Special Cooldown of Fighter and Free Spirit characters by 1 turn. Reduces damage received by 50% for 1 turn.",
+ specialNotes: "Reducing Special Cooldown works as if you took an extra turn"
+ },
+ 952: {
+ captain: "Boosts ATK and HP of Shooter and Striker characters by 1.2x",
+ specialName: "Life-saving Gunstock Blow",
+ special: "Deals 13x ATK in [DEX] Damage to one enemy. Changes Captain's orb into matching."
+ },
+ 953: {
+ captain: "Boosts ATK and HP of Shooter and Striker characters by 1.5x",
+ specialName: "Life-saving Gunstock Blow",
+ special: "Deals 13x ATK in [DEX] Damage to one enemy. Changes Captain's orb into matching."
+ },
+ 954:{
+ captain: "Boosts ATK and HP of [QCK] characters by 1.5x",
+ specialName: "Goldfish Fencing! I'll Dye the Sea Red with Your Blood",
+ special: "Reduces the defense of all enemies by 80% for 2 turns"
+ },
+ 955:{
+ captain: "Boosts ATK and HP of [PSY] characters by 1.5x",
+ specialName: "Get Rich Quick Scheme! We're All Gonna Be Rich",
+ special: "Boosts ATK against enemies with reduced defense by 1.2x for 2 turns"
+ },
+ 956:{
+ captain: "Boosts ATK and HP of [INT] characters by 1.5x",
+ specialName: "Fishman karate! I'll Finish You",
+ special: "Boosts ATK of Powerhouse characters by 1.2x for 2 turns"
+ },
+ 957:{
+ specialName: "First Aid",
+ special: "Recover 2,000 HP"
+ },
+ 958:{
+ specialName: "Bind Purge",
+ special: "Reduces Bind duration by 2 turns"
+ },
+ 959:{
+ specialName: "Captain Soul Recovery",
+ special: "Reduces Despair duration by 2 turns"
+ },
+ 960:{
+ specialName: "Slot Color Shuffle",
+ special: "Randomly changes all orbs into either [STR], [DEX], [QCK], [PSY] or [INT] orbs"
+ },
+ 961:{
+ specialName: "Slot Power Light",
+ special: "Amplifies the effect of orbs by 1.25x for 1 turn"
+ },
+ 962:{
+ specialName: "Captain Slot Change RCV",
+ special: "Changes captain's orb into [RCV]"
+ },
+ 963:{
+ captain: "Boosts ATK of characters with cost between 50 and 55 by 2x",
+ specialName: "Saint Charloss' Stroll",
+ special: "Reduces the defense of all enemies by 100% for 1 turn and randomizes all orbs"
+ },
+ 964:{
+ captain: "Boosts ATK, HP, and RCV of characters with cost between 50 and 55 by 1.5x",
+ specialName: "Wrath of the Creator Bloodline",
+ special: "Boosts ATK of all characters by 1.1x for 1 turn. If \"Wrath of the Creator Bloodline\" is used again in the same turn the special is activated in, boosts ATK of all characters by 1.5x instead."
+ },
+ 965:{
+ captain: "Boosts ATK of characters with cost between 50 and 55 by 1.5x, recovers 500 HP at the end of each turn",
+ specialName: "Wrath of the Creator Bloodline",
+ special: "Boosts ATK of all characters by 1.1x for 1 turn. If \"Wrath of the Creator Bloodline\" is used again in the same turn the special is activated in, boosts ATK of all characters by 1.5x instead."
+ },
+ 966:{
+ captain: "Boosts ATK of Driven characters by 2.25x",
+ specialName: "Repel",
+ special: "Empties slots with [QCK] orbs, deals [QCK] damage based on number of [QCK] slots emptied to all enemies",
+ specialNotes: "The exact multiplier used is chosen based on the number of [QCK] orbs consumed: 0 orbs - Can't activate; 1 orb - 14x ATK; 2 orbs - 21x ATK; 3 orbs - 35x ATK; 4 orbs - 49x ATK; 5 orbs - 91x ATK; 6 orbs - 140x ATK."
+ },
+ 967:{
+ captain: "Boosts ATK of Free Spirit characters by 2.25x",
+ specialName: "Surgeon of Death's First Aid Surgery",
+ special: "Recovers 20x character's RCV in HP. Switches orbs between slots twice"
+ },
+ 968:{
+ specialName: "High Heat Ray Laser",
+ special: "Deals 25x ATK to one enemy. Changes own orb into matching orb"
+ },
+ 969:{
+ specialName: "High Heat Ray Laser",
+ special: "Deals 25x ATK to one enemy. Changes own orb into matching orb"
+ },
+ 970:{
+ specialName: "High Heat Ray Laser",
+ special: "Deals 25x ATK to one enemy. Changes own orb into matching orb"
+ },
+ 971:{
+ specialName: "High Heat Ray Laser",
+ special: "Deals 25x ATK to one enemy. Changes own orb into matching orb"
+ },
+ 972:{
+ specialName: "High Heat Ray Laser",
+ special: "Deals 25x ATK to one enemy. Changes own orb into matching orb"
+ },
+ 973:{
+ captain: "Boosts ATK of Powerhouse characters by 2x if HP is above 99% at the start of the turn",
+ specialName: "Ironclad Thrust: Dwarf Guard of the World",
+ special: "Deals 20,000 fixed damage to one enemy. Changes friend captain's orb into Matching orb"
+ },
+ 974:{
+ captain: "Boosts ATK of Powerhouse characters by 2.5x if HP is above 99% at the start of the turn",
+ specialName: "Ironclad Thrust: Dwarf Guard of the World",
+ special: "Deals 20,000 fixed damage to one enemy. Changes friend captain's orb into Matching orb"
+ },
+ 975:{
+ captain: "Reduces damage received by 10%",
+ specialName: "A Threat That Puts Adults to Shame",
+ special: "Boosts the ATK of Striker and Driven characters by 1.3x for 1 turn. Protects from defeat as long as HP is above 50% for 1 turn",
+ specialNotes: "#{zombie}"
+ },
+ 976:{
+ captain: "Boosts ATK of Driven characters by 2x. Reduces damage received by 10%",
+ specialName: "A Threat That Puts Adults to Shame",
+ special: "Boosts the ATK of Striker and Driven characters by 1.3x for 1 turn. Protects from defeat as long as HP is above 50% for 1 turn",
+ specialNotes: "#{zombie}"
+ },
+ 977:{
+ captain: "Boosts ATK of Shooter characters by 2x",
+ specialName: "Yata no Kagami (Sacred Mirror)",
+ special: [
+ {
+ "description": "Changes own orb into [QCK]. Reduces Special Cooldown of Shooters and Fighters by 1 turn",
+ "cooldown": [ 19, 5 ]
+ },
+ {
+ "description": "Changes own orb into [QCK]. Reduces Special Cooldown of Shooters and Fighters by 1 turn. Adds .5x to Chain multiplier for 2 turns",
+ "cooldown": [ 25, 11 ]
+ }
+ ],
+ specialNotes: "#{stages}"
+ },
+ 978:{
+ captain: "Reduces cooldown of Shooter specials by 2 turns at the start of the fight, boosts ATK of Shooter characters by 2.25x and boosts HP of Shooter characters by 1.5x",
+ specialName: "Yata no Kagami (Sacred Mirror)",
+ special: [
+ {
+ "description": "Changes own orb into [QCK]. Reduces Special Cooldown of Shooters and Fighters by 1 turn",
+ "cooldown": [19,5]
+ },
+ {
+ "description": "Changes own orb into [QCK]. Reduces Special Cooldown of Shooters and Fighters by 1 turn. Adds .5x to Chain multiplier for 2 turns",
+ "cooldown": [25,11]
+ }
+ ],
+ specialNotes: "#{stages}"
+ },
+ 979: {
+ captain: "Boosts ATK of [PSY] and [DEX] characters by 1.75x and their RCV by 1.2x",
+ specialName: "Flintlock Barrage",
+ special: "Randomly changes all orbs into either [PSY] or [DEX] orbs, deals random PSY damage to all enemies",
+ specialNotes: "Random Damage is currently unknown"
+ },
+ 980: {
+ captain: "Boosts ATK of [DEX] and [STR] characters by 1.75x and their RCV by 1.2x",
+ specialName: "Hidden King Mallet",
+ special: "Changes own orb into [DEX] and randomizes every other orb"
+ },
+ 981: {
+ captain: "Boosts ATK of Fighters and Powerhouse characters by 2x and sharply reduces their RCV",
+ captainNotes: "The RCV Reduction is around 90%",
+ specialName: "Martial Art Diving Fist",
+ special: "Boosts own ATK by 1.75x for 1 turn and deals 800 fixed damage to one enemy",
+ specialNotes: "#{fixed}"
+ },
+ 982: {
+ captain: "Boosts ATK of Slasher characters by 2x",
+ specialName: "Flower Sword Straight Cut",
+ special: "Deals 25x character's ATK to one enemy, changes bottom row orbs into matching orbs"
+ },
+ 983: {
+ captain: "Boosts ATK of Slasher characters by 2.25x, makes [RCV] and [TND] orbs \"beneficial\" to Slasher characters",
+ captainNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs.",
+ specialName: "Flower Sword Straight Cut",
+ special: "Deals 25x character's ATK to one enemy, changes bottom row orbs into matching orbs"
+ },
+ 984: {
+ captain: "Boosts ATK of Striker characters by 2.25x",
+ specialName: "Shrouds and Rattling Knot",
+ special: "Delays all enemies for 1 turn, Locks all orbs for 1 turn"
+ },
+ 985:{
+ captainNotes: "Acts as a Daimyo Turtle and thus gives 15k EXP"
+ },
+ 986:{
+ captainNotes: "Acts as a Daimyo Turtle and thus gives 15k EXP"
+ },
+ 987:{
+ captainNotes: "Acts as a Daimyo Turtle and thus gives 15k EXP"
+ },
+ 988:{
+ captainNotes: "Acts as a Daimyo Turtle and thus gives 15k EXP"
+ },
+ 989:{
+ captain: "Boosts ATK of characters with cost above 20 and below 30 by 2.5x, but reduces the HP of every character by 90%",
+ special: "Changes the orbs in the left column into [G], [QCK] and [DEX], the orbs in the right column into [STR], [PSY] and [INT]",
+ specialName: "Bluff Piracy"
+ },
+ 990: {
+ captain: "Boosts ATK of Free Spirit characters by 2.5x if HP is above 99% at the start of the turn",
+ specialName: "10,000 Ton Vise of Hell",
+ special: "Changes [RCV] orbs into matching orbs"
+ },
+ 991: {
+ captain: "Boosts ATK of Free Spirit characters by 2.75x if HP is above 99% at the start of the turn",
+ specialName: "10,000 Ton Vise of Hell",
+ special: "Changes [RCV] orbs into matching orbs"
+ },
+ 992: {
+ captain: "Boosts ATK of [QCK] characters by 2x",
+ special: "Cuts the current HP of each enemy by 20% and changes own orb into [QCK]",
+ specialName: "Punc Rock Fest"
+ },
+ 993: {
+ captain: "Boosts ATK of [QCK] characters by 2.5x",
+ special: "Cuts the current HP of each enemy by 20% and changes own orb into [QCK]",
+ specialName: "Punc Rock Fest"
+ },
+ 994: {
+ captain: "Boosts amount of beli received by 2x",
+ special: "Reduces Special Cooldown of Cerebral and Fighter characters, and shows the stats of enemies",
+ specialName: "Peeping Mind",
+ special: [
+ {
+ "description": "Reduces Special Cooldown of Cerebral and Fighters by 1 turn. Shows Enemy Attack, Defense, Combo Hits, Current / Total HP, Attack Interval, 'Specials based on turns', and 'Effect after Death'",
+ "cooldown": [ 13, 7 ]
+ },
+ {
+ "description": "Reduces Special Cooldown of Cerebral and Fighters by 2 turn. Shows Enemy Attack, Defense, Combo Hits, Current / Total HP, Attack Interval, 'Specials based on turns', and 'Effect after Death'",
+ "cooldown": [ 20, 14 ]
+ }
+ ],
+ specialNotes: "#{stages}",
+ sailor: "Restores her own special by 1 turn when it is rewinded",
+ sailorNotes: "Some enemies can increase your cooldown by 1/2 Turns, this Sailor Ability decreases that by 1 Turn"
+ },
+ 995:{
+ captain: "Boosts amount of beli received by 3x",
+ special: "Reduces Special Cooldown of Cerebral and Fighter characters, and shows the stats of enemies",
+ specialName: "Peeping Mind",
+ special: [
+ {
+ "description": "Reduces Special Cooldown of Cerebral and Fighters by 1 turn. Shows Enemy Attack, Defense, Combo Hits, Current / Total HP, Attack Interval, 'Specials based on turns', and 'Effect after Death'",
+ "cooldown": [ 13, 7 ]
+ },
+ {
+ "description": "Reduces Special Cooldown of Cerebral and Fighters by 2 turn. Shows Enemy Attack, Defense, Combo Hits, Current / Total HP, Attack Interval, 'Specials based on turns', and 'Effect after Death'",
+ "cooldown": [ 20, 14 ]
+ }
+ ],
+ specialNotes: "#{stages}",
+ sailor: "Restores her own special by 1 turn when it is rewinded",
+ sailorNotes: "Some enemies can increase your cooldown by 1/2 Turns, this Sailor Ability decreases that by 1 Turn"
+ },
+ 996: {
+ captain: "Boosts ATK of Powerhouse characters by 2x",
+ special: [
+ {
+ "description": "For Powerhouse characters, changes Bad orbs into matching orbs.",
+ "cooldown": [ 11, 5 ]
+ },
+ {
+ "description": "For all characters, changes Bad orbs into matching orbs.",
+ "cooldown": [ 20, 14 ]
+ }
+ ],
+ specialName: "Decapitation High Heel",
+ specialNotes: "#{stages}"
+ },
+ 997: {
+ captain: "Boosts ATK of Powerhouse characters by 2.25x, makes [TND] and [RCV] orbs \"beneficial\" to Powerhouse characters",
+ captainNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs while retaining their original function.",
+ special: [
+ {
+ "description": "For Powerhouse characters, changes Bad orbs into matching orbs.",
+ "cooldown": [ 11, 5 ]
+ },
+ {
+ "description": "For all characters, changes Bad orbs into matching orbs.",
+ "cooldown": [ 20, 14 ]
+ }
+ ],
+ specialName: "Decapitation High Heel",
+ specialNotes: "#{stages}"
+ },
+ 998: {
+ captain: "Boosts ATK of Driven characters by 2x and reduces cooldown of all specials by 1 turns at the start of the fight",
+ specialName: "Hira Release: Death Enjambre",
+ special: "Delays all enemies for 2 turns, deals 50x character's ATK as typeless damage to all enemies at the end of the turn for 5 turns"
+ },
+ 999: {
+ captain: "Boosts ATK of Driven characters by 2.25x and reduces cooldown of all specials by 2 turns at the start of the fight",
+ specialName: "Hira Release: Death Enjambre",
+ special: "Delays all enemies for 2 turns, deals 50x character's ATK as typeless damage to all enemies at the end of the turn for 5 turns"
+ },
+ 1000: {
+ captain: "Boosts ATK of all characters proportionally to the crew's current HP. Heals for 1.5x his RCV at the end of the turn each time you hit a Good. Heals for .5x his RCV at the end of the turn each time you hit a Great",
+ captainNotes: "#{captainProportional : higher : 1 + 1 * (remaining HP) / (total HP) : 2 : 1 }",
+ special: "Recovers 25x character's RCV in HP. Reduces Bind and Despair duration by 3 turns",
+ specialName: "Love Sacrifice"
+ },
+ 1001: {
+ captain: "Boosts ATK of all characters proportionally to the crew's current HP. Heals for 1.5x his RCV at the end of the turn each time you hit a Good. Heals for .5x his RCV at the end of the turn each time you hit a Great",
+ captainNotes: "#{captainProportional : higher : 1 + 1 * (remaining HP) / (total HP) : 2 : 1 }",
+ special: "Recovers 25x character's RCV in HP. Reduces Bind and Despair duration by 3 turns",
+ specialName: "Love Sacrifice"
+ },
+ 1002: {
+ captain: "Boosts ATK of Fighter characters by 1.5x",
+ special: "Reduces Paralysis duration by 3 turns and deals 7x ATK as [STR] damage to one enemy",
+ specialName: "Bepo's Ultimate Fist!!",
+ specialNotes: "Paralysis causes that unit to have a chance of not attacking and breaking chain"
+ },
+ 1003: {
+ captain: "Boosts ATK of Fighter characters by 2x",
+ special: "Reduces Paralysis duration by 3 turns and deals 7x ATK as [STR] damage to one enemy",
+ specialName: "Bepo's Ultimate Fist!!",
+ specialNotes: "Paralysis causes that unit to have a chance of not attacking and breaking chain"
+ },
+ 1004: {
+ captain: "Boosts RCV of all characters by 1.5x",
+ specialName: "Hilarious Combination",
+ special: "Changes the orbs in the left column into [RCV] orbs"
+ },
+ 1005: {
+ captain: "Boosts ATK of Powerhouse characters by 1.5x",
+ specialName: "Rush to Freedom",
+ special: "Boosts own ATK by 1.75x for 1 turn"
+ },
+ 1006: {
+ captain: "Boosts ATK and HP of Powerhouse characters by 1.5x",
+ specialName: "Rush to Freedom",
+ special: "Boosts own ATK by 1.75x for 1 turn"
+ },
+ 1007: {
+ captain: "Boosts ATK of Cerebral and Free Spirit characters by 1.5x",
+ specialName: "Cherry Blossom Storm: Spring Pattern",
+ special: "Changes adjacent orbs into [RCV] and recovers 3,000 HP"
+ },
+ 1008: {
+ captain: "Boosts ATK of Cerebral and Free Spirit characters by 2x. Recovers 3x character's RCV in HP at the end of each turn",
+ specialName: "Cherry Blossom Storm: Spring Pattern",
+ special: "Changes adjacent orbs into [RCV] and recovers 3,000 HP"
+ },
+ 1009: {
+ special: "Changes [BLOCK] orbs into [STR], deals 20x character's ATK in STR damage to one enemy",
+ specialName: "Gum-Gum Flail",
+ captain: "Boosts ATK of [STR] and Fighter characters by 1.5x, reduces cooldown of all specials by 1 turn at the start of the fight",
+ captainNotes: "The bonus is cumulative. STR Fighter characters get a 2.25x bonus."
+ },
+ 1010:{
+ captain: "Boosts ATK of Driven characters by 1.5x",
+ special: "Boosts own ATK by 1.3x for 5 turns, reduces damage received by 20% for 5 turns, deals 13x character's ATK as [INT] damage to one enemy",
+ specialName: "Evil Beast's Horn Pierce"
+ },
+ 1011:{
+ captain: "Boosts ATK of Driven characters by 1.75x, and boosts ATK of Powerhouse characters by 1.5x",
+ captainNotes: "The bonus is cumulative. Driven Powerhouse characters get a 2.625x bonus.",
+ special: "Boosts own ATK by 1.3x for 5 turns, reduces damage received by 20% for 5 turns, deals 13x character's ATK as [INT] damage to one enemy",
+ specialName: "Evil Beast's Horn Pierce"
+ },
+ 1012: {
+ specialName: "Phantom Snake Sword",
+ special: "Changes the orbs in the left column into [RCV], [QCK] and [DEX], binds himself for 2 turns"
+ },
+ 1013: {
+ specialName: "Binding Iron Chain",
+ special: "Boosts ATK against delayed enemies by 1.2x for 1 turns"
+ },
+ 1014: {
+ special: "Binds himself for 1 turn and makes Perfects easier to hit for 2 turns",
+ specialName: "Scapegoat Substitute",
+ captain: "Boosts ATK of Powerhouse characters by 2x, and Recovers 2x character's RCV in HP at the end of each turn"
+ },
+ 1015: {
+ captain: "Boosts ATK of [INT] characters by 2.75x if they have a matching orb",
+ special: "Randomizes all orbs. Boosts ATK of [INT] characters by 1.5x for 1 turn. If during that turn every unit scores a Perfect hit, boosts ATK of [INT] characters by 1.5x for the next 2 turns",
+ specialName: "Hollow Eye Killing Shot"
+ },
+ 1016: {
+ captain: "Boosts ATK of [INT] characters by 3x if they have a matching orb, by 1.5x otherwise",
+ special: "Randomizes all orbs. Boosts ATK of [INT] characters by 1.5x for 1 turn. If during that turn every unit scores a Perfect hit, boosts ATK of [INT] characters by 1.5x for the next 2 turns",
+ specialName: "Hollow Eye Killing Shot"
+ },
+ 1017: {
+ captain: "Boosts HP of Slasher characters by 1.5x",
+ special: "Changes own orb into [PSY]. Deals several times the character's ATK in [PSY] damage to one enemy. Boosts ATK of Slasher characters by 1.5x for 1 turn",
+ specialName: "Ravaging Cutlass Dance",
+ specialNotes: "#{specialProportional : lower : 75 * ( 1 - (remaining HP) / (total HP) )}",
+ },
+ 1018: {
+ captain: "Boosts ATK of Slasher characters by 1.5x and their HP by 2x",
+ special: "Changes own orb into [PSY]. Deals several times the character's ATK in [PSY] damage to one enemy. Boosts ATK of Slasher characters by 1.5x for 1 turn",
+ specialName: "Ravaging Cutlass Dance",
+ specialNotes: "#{specialProportional : lower : 75 * ( 1 - (remaining HP) / (total HP) )}",
+ },
+ 1019: {
+ captain: "Reduces damage received from [QCK] enemies by 50%",
+ special: "Switches orbs between slots 2 times and deals 2000 fixed damage to one enemy",
+ specialName: "Blacksmithing Measurement: Double Slash",
+ specialNotes: "#{fixed}"
+ },
+ 1020: {
+ captain: "Boosts ATK and RCV of Shooter and Cerebral characters by 1.5x.",
+ captainNotes: "This effect does not stack for characters that have both classes.",
+ specialName: "Sweet Fruit Trap",
+ special: "Recovers 9x characters RCV in HP. Changes captain's orb into Matching orb"
+ },
+ 1021: {
+ captain: "Boosts ATK and RCV of Shooter and Cerebral characters by 1.75x.",
+ captainNotes: "This effect does not stack for characters that have both classes.",
+ specialName: "Sweet Fruit Trap",
+ special: "Recovers 9x characters RCV in HP. Changes captain's orb into Matching orb"
+ },
+ 1022: {
+ captain: "Boosts ATK of all characters by 2x and boosts amount of beli received by 1.2x",
+ special: "Deals 13x character's ATK as [PSY] damage to all enemies. Changes [BOMB], [EMPTY], and [TND] orbs to [PSY]",
+ specialName: "Gum-Gum Gigant Rifle: New Star"
+ },
+ 1023: {
+ captain: "Boosts ATK of Free Spirit characters by 2.25x",
+ special: "Deals 13x characters ATK in INT damage to all enemies, boosts atk of Free Spirit characters by 1.75x for one turn.",
+ specialName: "Flame Mirror: Dawn"
+ },
+ 1024: {
+ captain: "Boosts ATK of Powerhouse characters by 2x",
+ special: "Amplifies the effect of orbs for 2 turns, the exact multiplier changes depending on the current HP at the time the special was activated. ",
+ specialNotes: "Below 30% -> 1.75x orb boost, between 30% and 70% -> 1.5x, above 70% -> 1.25x",
+ specialName: "Eight-Impact Fist! Blow of Resentment"
+ },
+ 1025: {
+ captain: "Boosts ATK of Powerhouse characters by 2x and boosts the HP of Striker characters by 2x",
+ captainNotes: "A character with both classes will get both boosts",
+ special: "Amplifies the effect of orbs for 2 turns, the exact multiplier changes depending on the current HP at the time the special was activated. ",
+ specialNotes: "Below 30% -> 1.75x orb boost, between 30% and 70% -> 1.5x, above 70% -> 1.25x",
+ specialName: "Eight-Impact Fist! Blow of Resentment"
+ },
+ 1026: {
+ captain: "Boosts ATK and RCV of Fighters by 1.5x",
+ specialName: "Shooting Moon",
+ special: "Changes Captain orb into Matching orb, and switches orbs between slots three times"
+ },
+ 1027: {
+ captain: "Boosts ATK and RCV of Fighters by 2x",
+ specialName: "Shooting Moon",
+ special: "Changes Captain orb into Matching orb, and switches orbs between slots three times"
+ },
+ 1028: {
+ captain: "Boosts ATK of all characters by 2.5x after the 21st hit in the chain",
+ specialName: "Rah-Rah-Rah Rampage",
+ special: "Deals random damage to all enemies, boost ATK of all characters by 1.75x after 30th hit in the chain for 3 turns.",
+ specialNotes: "Buffalo's Captain as a Special essentially"
+ },
+ 1029: {
+ captain: "Boosts ATK of all characters by 2.5x after the 21st hit in the chain and by 3.5x after the 36th hit",
+ specialName: "Rah-Rah-Rah Rampage",
+ special: "Deals random damage to all enemies, boost ATK of all characters by 1.75x after 30th hit in the chain for 3 turns.",
+ specialNotes: "Buffalo's Captain as a Special essentially"
+ },
+ 1030: {
+ captain: "Boosts ATK of Powerhouse characters by 2.5x if HP is above 99% at the start of the turn",
+ specialName: "Hero's Gungnir",
+ special: "Reduces crew's HP to 1, deals 10x the removed HP as damage to one enemy. Boosts own ATK by 2.25x for 1 turn."
+ },
+ 1031: {
+ captain: "Boosts ATK of Powerhouse characters by 2.75x if HP is above 99% at the start of the turn",
+ specialName: "Hero's Gungnir",
+ special: "Reduces crew's HP to 1, deals 10x the removed HP as damage to one enemy. Boosts own ATK by 2.25x for 1 turn."
+ },
+ 1032: {
+ captain: "Boosts ATK of Striker and Slasher characters by 1.5x and reduces cooldown of Slasher and Striker characters by 1 turn at the start of the fight",
+ special: "Reduces Special Cooldown of Slasher and Strikers by 1 turn. For Slasher and Strikers, changes Badly Matching orbs into [RCV] orbs.",
+ specialName: "Surprise Pincer Attack"
+ },
+ 1033: {
+ captain: "Boosts ATK of Striker and Slasher characters by 2.25x and reduces cooldown of Slasher and Striker characters by 2 turn at the start of the fight",
+ special: "Reduces Special Cooldown of Slasher and Strikers by 1 turn. For Slasher and Strikers, changes Badly Matching orbs into [RCV] orbs.",
+ specialName: "Surprise Pincer Attack"
+ },
+ 1034: {
+ captain: "Boosts ATK of Striker characters by a variable amount depending on how many Strikers are on your team. If you don't attack with Bartolomeo, reduces damage received by 30% for that turn.",
+ captainNotes: "ATK boost with 1 Striker is 1.25x. With 2 Strikers: 1.5x. With 3 Strikers: 1.75x. With 4 Strikers: 2x. With 5 Stikers: 2.5x. With 6 Strikers: 2.75x",
+ special: "Protects from defeat for 1 turn, and deals several times character's ATK in Typeless damage to one enemy",
+ specialNotes: "#{specialProportional : lower : 150 * ( 1 - (remaining HP) / (total HP) )} #{zombie}",
+ specialName: "Bari Bari No Pistol"
+ },
+ 1035: {
+ captain: "Boosts ATK of Striker characters by a variable amount depending on how many Strikers are on your team. If you don't attack with Bartolomeo, reduces damage received by 30% for that turn.",
+ captainNotes: "ATK boost with 1 Striker is 1.25x. With 2 Strikers: 1.5x. With 3 Strikers: 1.75x. With 4 Strikers: 2x. With 5 Stikers: 2.5x. With 6 Strikers: 2.75x",
+ special: "Protects from defeat for 1 turn, and deals several times character's ATK in Typeless damage to one enemy",
+ specialNotes: "#{specialProportional : lower : 150 * ( 1 - (remaining HP) / (total HP) )} #{zombie}",
+ specialName: "Bari Bari No Pistol"
+ },
+ 1036: {
+ captain: "Boosts ATK of Free Spirit characters by 2x after scoring 3 Perfects in a row",
+ special: "Deals 13x ATK in QCK Damage to one Enemy, Changes Orbs depending on the current HP",
+ specialName: "Kenpo: Kick Thrust Drop",
+ specialNotes: "HP>99%: Middle Left and Bottom Left Orbs into matching 99%>HP>30%: Left Column to [G] orbs HP<30%: Left Column to [RCV]"
+ },
+ 1037: {
+ captain: "Boosts ATK of Free Spirit characters by 2.5x after scoring 3 Perfects in a row",
+ special: "Deals 13x ATK in QCK Damage to one Enemy, Changes Orbs depending on the current HP",
+ specialName: "Kenpo: Kick Thrust Drop",
+ specialNotes: "HP>99%: Middle Left and Bottom Left Orbs into matching 99%>HP>30%: Left Column to [G] orbs HP<30%: Left Column to [RCV]"
+ },
+ 1038: {
+ captain: "Boosts ATK and RCV of [DEX] and [QCK] characters by 1.2x",
+ special: "Switches orbs between slots once, recovers 0.3x character's RCV in HP",
+ specialName: "Great Scissors"
+ },
+ 1039: {
+ captain: "Boosts ATK and RCV of [DEX] and [QCK] characters by 1.5x",
+ special: "Switches orbs between slots once, recovers 0.3x character's RCV in HP",
+ specialName: "Great Scissors"
+ },
+ 1040: {
+ captain: "Boosts ATK and HP of [STR] characters by 1.5x",
+ special: "Deals 30x the character's ATK as STR damage to all enemies. Boosts ATK of everyone by 1.5x if HP is below 30% at the time the special is activated",
+ specialName: "Ice Throw"
+ },
+ 1041: {
+ captain: "Boosts ATK and HP of [STR] characters by 2x",
+ special: "Deals 30x the character's ATK as STR damage to all enemies. Boosts ATK of everyone by 1.5x if HP is below 30% at the time the special is activated",
+ specialName: "Ice Throw"
+ },
+ 1042: {
+ captain: "Boosts ATK of Striker and Slasher characters by 2x, reduces crew's RCV to 0.",
+ special: "Changes [STR] and [QCK] orbs on Strikers and Slashers into matching orbs, cuts the current HP of one enemy by 7%",
+ specialName: "Hitting Size"
+ },
+ 1043: {
+ captain: "Boosts ATK of Striker and Slasher characters by 2.75x if they have a matching Orb, by 2x otherwise, reduces crew's RCV to 0.",
+ special: "Changes [STR] and [QCK] orbs on Strikers and Slashers into matching orbs, cuts the current HP of one enemy by 7%",
+ specialName: "Hitting Size"
+ },
+ 1044: {
+ captain: "Boosts ATK of Slasher and Free Spirit characters by 2x at the start of the chain, by 3x after the 3rd Perfect and by 4x after the 5th Perfect.",
+ specialName: "Gamma Knife",
+ special: [
+ {
+ "description": "Makes Damage and Health Cutting Specials of Slasher and Free Spirit characters bypass all defensive Buffs, deals 20x character's ATK in fixed PSY damage to one enemy.",
+ "cooldown": [ 18, 13 ]
+ },
+ {
+ "description": "Makes Damage and Health Cutting Specials of all characters bypass all defensive Buffs, deals 50x character's ATK in fixed PSY damage to one enemy.",
+ "cooldown": [ 25, 20 ]
+ }
+ ],
+ specialNotes: "#{stages}"
+ },
+ 1045: {
+ captain: "Boosts ATK of Slasher and Free Spirit characters by 2x at the start of the chain, by 3x after the 3rd Perfect and by 4x after the 5th Perfect.",
+ specialName: "Gamma Knife",
+ special: [
+ {
+ "description": "Makes Damage and Health Cutting Specials of Slasher and Free Spirit characters bypass all defensive Buffs, deals 20x character's ATK in fixed PSY damage to one enemy.",
+ "cooldown": [ 18, 13 ]
+ },
+ {
+ "description": "Makes Damage and Health Cutting Specials of all characters bypass all defensive Buffs, deals 50x character's ATK in fixed PSY damage to one enemy.",
+ "cooldown": [ 25, 20 ]
+ }
+ ],
+ specialNotes: "#{stages}"
+ },
+ 1046: {
+ captain: "Boosts ATK of Free Spirit characters by 2.75x following a chain of Good > Great > Perfect hits",
+ specialName: "Dragon Claw Fist: Dragon's Breath",
+ special: "Deals random typeless damage to all enemies. For 2 turns every attacking character gets 55x character's ATK as additional typeless bonus damage if you hit a Good/Great/Perfect",
+ specialNotes: "The Random Damage is between 10k and 30k Extra Damage can only be boosted by conditional Boosters"
+ },
+ 1047: {
+ captain: "Boosts ATK of Free Spirit characters by 3.5x following a chain of Good > Great > Perfect hits",
+ specialName: "Dragon Claw Fist: Dragon's Breath",
+ special: "Deals random typeless damage to all enemies. For 2 turns every attacking character gets 55x character's ATK as additional typeless bonus damage if you hit a Good/Great/Perfect",
+ specialNotes: "The Random Damage is between 10k and 30k Extra Damage can only be boosted by conditional Boosters"
+ },
+ 1048: {
+ captain: "Boosts ATK and RCV of [PSY] characters by 1.2x",
+ special: "Reduces Paralysis duration by 3 turns and Recovers 4x character's RCV in HP at the end of each turn for 3 turns",
+ specialName: "Mother's Wish to Fight The World"
+ },
+ 1049: {
+ captain: "Boosts ATK and RCV of [PSY] characters by 1.5x, when HP is low the ATK multiplier becomes 2.25x",
+ captainNotes: "The low HP threshold is estimated to be 30%",
+ special: "Reduces Paralysis duration by 3 turns and Recovers 4x character's RCV in HP at the end of each turn for 3 turns",
+ specialName: "Mother's Wish to Fight The World"
+ },
+ 1050: {
+ captain: "Boosts ATK of [PSY] characters by 1.5x",
+ special: "Reduces Bind duration by 4 turns, and Reduces damage received by 50% for 2 turns",
+ specialName: "Dereshishishi Towards Hope"
+ },
+ 1051: {
+ captain: "Boosts ATK of [PSY] characters by 2x",
+ special: "Reduces Bind duration by 4 turns, and Reduces damage received by 50% for 2 turns",
+ specialName: "Dereshishishi Towards Hope"
+ },
+ 1052: {
+ captain: "Recovers 1,000 HP at the end of each turn",
+ special: "Reduces Silence duration by 2 turns",
+ specialName: "Knowledge the World is Afraid of",
+ specialNotes: "Silence will refer to effects that prevent you from activating Special Abilities"
+ },
+ 1053: {
+ captain: "Boosts RCV of Cerebral characters by 1.5x",
+ special: "Reduces Paralysis and Despair duration by 3 turns, removes Blindness",
+ specialName: "Precocious Provocation"
+ },
+ 1054: {
+ captain: "Boosts RCV of Cerebral characters by 2x",
+ special: "Reduces Paralysis and Despair duration by 3 turns, removes Blindness",
+ specialName: "Precocious Provocation"
+ },
+ 1055: {
+ special: "Deals 20x character's ATK in [DEX] damage to one enemy. Boosts ATK against Strongly Poisoned enemies by 1.4x for 2 turns ",
+ specialName: "Snake Press"
+ },
+ 1056: {
+ captain: "Boosts ATK of Powerhouse characters by 2x and their RCV by 1.25x",
+ special: "Deals 20x character's ATK in [DEX] damage to one enemy. Boosts ATK against Strongly Poisoned enemies by 1.4x for 2 turns ",
+ specialName: "Snake Press"
+ },
+ 1057: {
+ special: "Strongly poisons one enemy",
+ specialNotes: "Strong poison deals 5x character's ATK in fixed damage at the end of each turn",
+ specialName: "Deadly Poisonous Corrosive Liquid"
+ },
+ 1058: {
+ captain: "Boosts ATK of Powerhouse characters by 2x and their HP by 1.25x",
+ special: "Strongly poisons one enemy",
+ specialNotes: "Strong poison deals 5x character's ATK in fixed damage at the end of each turn",
+ specialName: "Deadly Poisonous Corrosive Liquid"
+ },
+ 1059: {
+ captain: "Boosts ATK and RCV of Shooter characters by 1.2x",
+ special: "Deals 5,000 fixed damage to one enemy. Amplifies the effect of orbs by 1.5x for 1 turn",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Strong Bow of Rejection"
+ },
+ 1060: {
+ captain: "Boosts ATK and RCV of Shooter characters by 1.5x",
+ special: "Deals 5,000 fixed damage to one enemy. Amplifies the effect of orbs by 1.5x for 1 turn",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Strong Bow of Rejection"
+ },
+ 1061: {
+ captain: "Boosts ATK of Shooter characters by 2x",
+ special: "Locks the chain multiplier at 2x for 2 turns",
+ specialName: "Instructions to the Warriors"
+ },
+ 1062: {
+ captain: "Boosts ATK of Cerebral characters by 2x and Recovers 2x character's RCV in HP at the end of each turn",
+ special: "Recovers 13x character's RCV in HP",
+ specialName: "Timeless Art of Self-Defense"
+ },
+ 1063: {
+ captain: "Boosts ATK and HP of Shooter characters by 1.2x",
+ special: "Boosts ATK of Shooter characters by 1.3x for 1 turn",
+ specialName: "Shooting Power Light"
+ },
+ 1064: {
+ captain: "Boosts ATK and HP of [INT] characters by 1.2x",
+ special: "Recovers 3x character's RCV in HP at the end of each turn for 5 turns",
+ specialName: "Auto Repair"
+ },
+ 1065: {
+ captain: "Boosts ATK of Slasher characters by 1.5x",
+ special: "Amplifies the effect of orbs by 1.25x for 1 turn",
+ specialNotes: "#{orb : 1.25x}",
+ specialName: "Slot Power Light"
+ },
+ 1066: {
+ captain: "Boosts ATK and HP of [PSY] characters by 1.2x",
+ special: "Adds .1x to Chain multiplier for 1 turn",
+ specialName: "Chain Plus Light"
+ },
+ 1067: {
+ captain: "Boosts ATK of Fighter characters by 1.5x",
+ special: "Boosts own ATK by 1.5x for 1 turn",
+ specialName: "Attack Boost Light"
+ },
+ 1068: {
+ captain: "Boosts chain multiplier by 1.5x",
+ special: "Changes captain's orb into [QCK]",
+ specialName: "Captain Slot Change QCK"
+ },
+ 1069: {
+ captain: "Boosts ATK of Driven characters by 1.5x",
+ special: "Deals 9x ATK in [DEX] damage to one enemy. Changes own orb into [DEX]",
+ specialName: "Fighting Method of the Pirate Executioner"
+ },
+ 1070: {
+ captain: "Boosts ATK of Driven characters by 2.25x",
+ special: "Deals 9x ATK in [DEX] damage to one enemy. Changes own orb into [DEX]",
+ specialName: "Fighting Method of the Pirate Executioner"
+ },
+ 1071: {
+ captain: "Boosts ATK of characters with cost 20 or less by 1.5x",
+ special: "Deals 20x ATK in [STR] damage to one enemy. Boosts ATK of Powerhouse characters by 1.5x for 1 turn.",
+ specialName: "Emerald Porcupine Robe"
+ },
+ 1072: {
+ captain: "Boosts ATK of characters with cost 20 or less by 2x and boosts the HP of Powerhouse characters by 1.2x",
+ special: "Deals 20x ATK in [STR] damage to one enemy. Boosts ATK of Powerhouse characters by 1.5x for 1 turn.",
+ specialName: "Emerald Porcupine Robe"
+ },
+ 1073: {
+ captain: "Boosts ATK of Slasher characters by 1.5x",
+ special: "Deals 5x ATK in [QCK] damage to all enemies and randomizes all orbs",
+ specialName: "Drilling Hooks"
+ },
+ 1074: {
+ captain: "Boosts ATK of [INT] characters by 2x",
+ special: "Changes [QCK] and [PSY] orbs into [INT] orbs.",
+ specialName: "Tenacious Sword of Destruction"
+ },
+ 1075: {
+ captain: "Boosts ATK and HP of [INT] characters by 2x",
+ special: "Changes [QCK] and [PSY] orbs into [INT] orbs.",
+ specialName: "Tenacious Sword of Destruction"
+ },
+ 1076:{
+ captain: "Boosts ATK of Striker and Free Spirit characters by 1.75x",
+ special: [
+ {
+ "description": "Delays all enemies for 1 turn. Locks all orbs for 1 turn. Cuts the current HP of all enemies by 10%",
+ "cooldown": [ 16, 12 ]
+ },
+ {
+ "description": "Delays all enemies for 1 turn. Locks all orbs for 1 turn. Cuts the current HP of all enemies by 20%",
+ "cooldown": [ 20, 16 ]
+ }
+ ],
+ specialNotes: "#{stages}",
+ specialName: "Haute Couture: Patchwork"
+ },
+ 1077:{
+ captain: "Boosts ATK of Striker and Free Spirit characters by 2.25x and their RCV by 1.5x",
+ special: [
+ {
+ "description": "Delays all enemies for 1 turn. Locks all orbs for 1 turn. Cuts the current HP of all enemies by 10%",
+ "cooldown": [ 16, 12 ]
+ },
+ {
+ "description": "Delays all enemies for 1 turn. Locks all orbs for 1 turn. Cuts the current HP of all enemies by 20%",
+ "cooldown": [ 20, 16 ]
+ }
+ ],
+ specialNotes: "#{stages}",
+ specialName: "Haute Couture: Patchwork"
+ },
+ 1078: {
+ captain: "Recovers 3x character's RCV in HP at the end of each turn",
+ special: [
+ {
+ "description": "Recovers 6x character's RCV in HP. Removes Paralysis",
+ "cooldown": [ 14, 8 ]
+ },
+ {
+ "description": "Recovers 15x character's RCV in HP. Removes Paralysis, Poison, RCV Down, and Blindness",
+ "cooldown": [ 19, 13 ]
+ },
+ {
+ "description": "Recovers 50x character's RCV in HP. Removes Paralysis, Poison, RCV Down, and Blindness",
+ "cooldown": [ 24, 18 ]
+ },
+ ],
+ specialNotes: "#{stages}",
+ specialName: "Chiyupopo"
+ },
+ 1079: {
+ captain: "Recovers 4x character's RCV in HP at the end of each turn",
+ special: [
+ {
+ "description": "Recovers 6x character's RCV in HP. Removes Paralysis",
+ "cooldown": [ 14, 8 ]
+ },
+ {
+ "description": "Recovers 15x character's RCV in HP. Removes Paralysis, Poison, RCV Down, and Blindness",
+ "cooldown": [ 19, 13 ]
+ },
+ {
+ "description": "Recovers 50x character's RCV in HP. Removes Paralysis, Poison, RCV Down, and Blindness",
+ "cooldown": [ 24, 18 ]
+ },
+ ],
+ specialNotes: "#{stages}",
+ specialName: "Chiyupopo"
+ },
+ 1080: {
+ captain: "Boosts ATK of characters with cost 20 or less by 2.5x",
+ special: "Deals [DEX] damage to one enemy, changes own orb to [DEX] and boosts own ATK by 2x for 1 turn",
+ specialName: "Trueno Bastardo"
+ },
+ 1081: {
+ captain: "Boosts ATK of characters with cost 30 or less by 2.5x",
+ special: "Deals [DEX] damage to one enemy, changes own orb to [DEX] and boosts own ATK by 2x for 1 turn",
+ specialName: "Trueno Bastardo"
+ },
+ 1082: {
+ captain: "Boosts ATK of Striker and Fighter characters by 1.2x",
+ special: "Deals 20x ATK in [STR] damage to all enemies. For 2 turns, boosts ATK of Striker and Fighter characters by a variable amount depending on the current HP at the time the special was activated.",
+ specialNotes: "Below 30% -> 1.75 boost, between 30% and 70% -> 1.5, above 70% -> 1.2",
+ specialName: "Drill Dragon: Drill Nail"
+ },
+ 1083: {
+ captain: "Boosts ATK of Striker and Fighter characters by 1.5x at the start of the chain, and by 3x after the 3rd Perfect",
+ special: "Deals 20x ATK in [STR] damage to all enemies. For 2 turns, boosts ATK of Striker and Fighter characters by a variable amount depending on the current HP at the time the special was activated.",
+ specialNotes: "Below 30% -> 1.75 boost, between 30% and 70% -> 1.5, above 70% -> 1.2",
+ specialName: "Drill Dragon: Drill Nail"
+ },
+ 1084: {
+ captain: "Boosts HP of Driven characters by 1.5x and their ATK by 3x if they have a matching orb, by 1.5x otherwise. Makes [TND] and [RCV] orbs \"beneficial\" to Driven characters",
+ special: "Cuts the current HP of each enemy by 20%. At the end of the turn, cuts the current HP of each enemy by 20% for 3 turns",
+ specialNotes: "Does not stack with other 'end of turn damage' abilities",
+ specialName: "Gravito: Heavens Fall"
+ },
+ 1085: {
+ captain: "Boosts HP of Driven characters by 1.5x and their ATK by 3x if they have a matching orb, by 1.5x otherwise. Makes [TND] and [RCV] orbs \"beneficial\" to Driven characters",
+ special: "Cuts the current HP of each enemy by 20%. At the end of the turn, cuts the current HP of each enemy by 20% for 3 turns",
+ specialNotes: "Does not stack with other 'end of turn damage' abilities",
+ specialName: "Gravito: Heavens Fall"
+ },
+ 1086: {
+ captain: "Boosts ATK and RCV of Driven characters by 1.5x",
+ specialNotes: "#{orb : 1.5x}",
+ special: "Randomizes all orbs including [BLOCK] orbs. Amplifies the effect of orbs by 1.5x for 2 turns",
+ specialName: "Lot Stiffen"
+ },
+ 1087: {
+ captain: "Boosts ATK of Driven characters by 2x and their RCV by 1.5x",
+ specialNotes: "#{orb : 1.5x}",
+ special: "Randomizes all orbs including [BLOCK] orbs. Amplifies the effect of orbs by 1.5x for 2 turns",
+ specialName: "Lot Stiffen"
+ },
+ 1088: {
+ captain: "Boosts ATK of Slasher characters by 2x",
+ special: "Reduces crew's HP by 70%, deals 15x ATK in [QCK] damage to all enemies. Boosts ATK of Slasher and Driven characters by 1.5x for 1 turn.",
+ specialName: "Seven Stars Sword of Darkness"
+ },
+ 1089: {
+ captain: "Boosts ATK of Slasher characters by 2x and boosts HP of Driven characters by 1.75x",
+ captainNotes: "Slasher + Driven characters gain ATK AND HP",
+ special: "Reduces crew's HP by 70%, deals 15x ATK in [QCK] damage to all enemies. Boosts ATK of Slasher and Driven characters by 1.5x for 1 turn.",
+ specialName: "Seven Stars Sword of Darkness"
+ },
+ 1090: {
+ captain: "Boosts ATK of all characters by 2x if HP is below 30% at the start of the turn",
+ special: "Deals 25x ATK in [PSY] damage to one enemy. If HP < 30% then changes adjacent orbs into matching orbs",
+ specialName: "Double Edge of Revolt"
+ },
+ 1091: {
+ captain: "Boosts ATK of all characters by 2.5x if HP is below 30% at the start of the turn",
+ special: "Deals 25x ATK in [PSY] damage to one enemy. If HP < 30% then changes adjacent orbs into matching orbs",
+ specialName: "Double Edge of Revolt"
+ },
+ 1092: {
+ captain: "Boosts RCV of all characters depending on the current Health.",
+ captainNotes: "The Lower the Health the Higher the Bonus, at 1HP the multiplier is 1.5x",
+ special: "Changes the Friend Captains orb into a matching Orb, recovers 3.000HP",
+ specialName: "Present After the Rain"
+ },
+ 1093: {
+ captain: "Boosts RCV of all characters depending on the current Health.",
+ captainNotes: "The Lower the Health the Higher the Bonus, at 1HP the multiplier is 2x",
+ special: "Changes the Friend Captains orb into a matching Orb, recovers 3.000HP",
+ specialName: "Present After the Rain"
+ },
+ 1094: {
+ captain: "Boosts ATK of Cerebral characters by 2x.",
+ special: "Reduces crew's current HP by 80%, deals 6x the removed HP as damage to all enemies. Reduces damage received by 80% for 1 turn.",
+ specialName: "Mass Juggling"
+ },
+ 1095: {
+ captain: "Boosts ATK of Cerebral characters by 2x.",
+ special: "Reduces crew's current HP by 80%, deals 6x the removed HP as damage to all enemies. Reduces damage received by 80% for 1 turn.",
+ specialName: "Mass Juggling"
+ },
+ 1096: {
+ captain: "Boosts ATK of Powerhouse characters by 3x after the 5th Perfect.",
+ special: "Deals [INT] damage to one enemy. Boosts own ATK by 1.75x for 1 turn.",
+ specialName: "Crash Drumming"
+ },
+ 1097: {
+ captain: "Boosts ATK of Powerhouse characters by 3.5x after the 5th Perfect.",
+ special: "Deals [INT] damage to one enemy. Boosts own ATK by 1.75x for 1 turn.",
+ specialName: "Crash Drumming"
+ },
+ 1098: {
+ captain: "Boosts chain multiplier by 2x",
+ special: "Randomizes all orbs including [BLOCK] orbs and switches orbs between slots once.",
+ specialName: "Mutation-Induced Thunder"
+ },
+ 1099: {
+ captain: "Boosts ATK of Fighter characters by 2x",
+ special: "Changes Bad orbs into [EMPTY] orbs, amplifies the effect of orbs by 1.5x for 2 turns",
+ specialName: "\"To the End of the Clouds\""
+ },
+ 1100: {
+ captain: "Boosts ATK of Fighter characters by 2.25x and their RCV by 1.2x",
+ special: "Changes Bad orbs into [EMPTY] orbs, amplifies the effect of orbs by 1.5x for 2 turns",
+ specialName: "\"To the End of the Clouds\""
+ },
+ 1101: {
+ captain: "Boosts ATK of all characters by 2.25x until the first hit other than Perfect. Reduces crew's current HP by 10% at the end of each turn",
+ special: "Reduces crew's current HP by 80%, deals 10x the amount of HP subtracted in typeless damage to one enemy. Boosts ATK of [STR] and [INT] characters by 1.75x for 1 turn",
+ specialName: "Black Arm's Last Impact"
+ },
+ 1102: {
+ captain: "Boosts ATK of all characters by 2.75x until the first hit other than Perfect. Reduces crew's current HP by 10% at the end of each turn",
+ special: "Reduces crew's current HP by 80%, deals 10x the amount of HP subtracted in typeless damage to one enemy. Boosts ATK of [STR] and [INT] characters by 1.75x for 1 turn",
+ specialName: "Black Arm's Last Impact"
+ },
+ 1103: {
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x",
+ special: [
+ {
+ "description": "Recovers 12% of crew's MAX HP and randomizes all orbs including [BLOCK] orbs",
+ "cooldown": [ 21, 11 ]
+ },
+ {
+ "description": "Recovers 24% of crew's MAX HP and randomizes all orbs including [BLOCK] orbs",
+ "cooldown": [ 24, 14 ]
+ },
+ {
+ "description": "Recovers 36% of crew's MAX HP and randomizes all orbs including [BLOCK] orbs",
+ "cooldown": [ 27, 17 ]
+ },
+ ],
+ specialNotes: "#{stages}",
+ specialName: "Return Return Fruit"
+ },
+ 1104: {
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.75x",
+ special: [
+ {
+ "description": "Recovers 12% of crew's MAX HP and randomizes all orbs including [BLOCK] orbs",
+ "cooldown": [ 21, 11 ]
+ },
+ {
+ "description": "Recovers 24% of crew's MAX HP and randomizes all orbs including [BLOCK] orbs",
+ "cooldown": [ 24, 14 ]
+ },
+ {
+ "description": "Recovers 36% of crew's MAX HP and randomizes all orbs including [BLOCK] orbs",
+ "cooldown": [ 27, 17 ]
+ },
+ ],
+ specialNotes: "#{stages}",
+ specialName: "Return Return Fruit"
+ },
+ 1105: {
+ captain: "Boosts ATK of Striker and Free Spirit characters by 1.5x, deals 2x character's ATK in typeless damage to all enemies at the end of each turn",
+ special: "Delays all enemies for 1 turn. Adds .2x to Chain multiplier for 2 turns. Makes Perfects easier to hit for 2 turns.",
+ specialName: "Mosa Mosa Dance"
+ },
+ 1106: {
+ captain: "Boosts ATK of Striker and Free Spirit characters by 2x, deals 2x character's ATK in typeless damage to all enemies at the end of each turn",
+ special: "Delays all enemies for 1 turn. Adds .2x to Chain multiplier for 2 turns. Makes Perfects easier to hit for 2 turns.",
+ specialName: "Mosa Mosa Dance"
+ },
+ 1107: {
+ captain: "Boosts ATK and HP of Driven characters by 1.5x",
+ special: "Deals 30x the character's ATK as Typeless damage to all enemies. Changes [BLOCK], [G], and [BOMB] orbs on Driven characters into matching orbs. Boosts ATK of Driven characters by 1.75x for 1 turn.",
+ specialName: "Lion's Threat: Imperial Earth Bind"
+ },
+ 1108: {
+ captain: "Boosts ATK and HP of Driven characters by 2x",
+ special: "Deals 30x the character's ATK as Typeless damage to all enemies. Changes [BLOCK], [G], and [BOMB] orbs on Driven characters into matching orbs. Boosts ATK of Driven characters by 1.75x for 1 turn.",
+ specialName: "Lion's Threat: Imperial Earth Bind"
+ },
+ 1109: {
+ captain: "Boosts amount of Beli received by 1.5x",
+ special: "Changes [BLOCK] orbs into [PSY] orbs for [PSY] characters",
+ specialName: "Cat Burglar's Undercover Investigation"
+ },
+ 1110: {
+ captain: "Boosts ATK and RCV of [PSY] characters by 1.25x and the amount of Beli received by 1.5x",
+ special: "Changes [BLOCK] orbs into [PSY] orbs for [PSY] characters",
+ specialName: "Cat Burglar's Undercover Investigation"
+ },
+ 1111: {
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.25x",
+ special: "Amplifies the effect of orbs by 1.25x for 3 turns, recovers 8x character's RCV at the end of the turn for 3 turns.",
+ specialName: "Impish Sultry Dance"
+ },
+ 1112: {
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x",
+ special: "Amplifies the effect of orbs by 1.25x for 3 turns, recovers 8x character's RCV at the end of the turn for 3 turns.",
+ specialName: "Impish Sultry Dance"
+ },
+ 1113: {
+ captain: "Boosts ATK of [INT] characters by 2x",
+ special: "Boosts ATK of all characters by 1.2x for 1 turn",
+ specialName: "Fury of the Little Monster: \"This is War!!!\""
+ },
+ 1114: {
+ special: "Reduces crew's current HP by 99%, deals 25x character's ATK in fixed damage to all enemies, boosts ATK of STR characters by 2x for 1 turn",
+ specialName: "Gum-Gum Gigant Axe",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of STR characters by 2x"
+ },
+ 1115: {
+ special: "Reduces crew's current HP by 99%, deals 25x character's ATK in fixed damage to all enemies, boosts ATK of STR characters by 2x for 1 turn",
+ specialName: "Gum-Gum Gigant Axe",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of STR characters by 2.5x"
+ },
+ 1116: {
+ special: "Deals several times the character's ATK in INT damage to all enemies",
+ specialNotes: "#{specialProportional : lower : 100 * ( 1 - (remaining HP) / (total HP) )}",
+ specialName: "Diable Jambe: Concassé",
+ captain: "Reduces damage received by 80% if HP is above 99% at the start of the turn",
+ sailor: "Reduces Paralysis by 3 turns for self"
+ },
+ 1117: {
+ special: "Deals several times the character's ATK in INT damage to all enemies",
+ specialNotes: "#{specialProportional : lower : 100 * ( 1 - (remaining HP) / (total HP) )}",
+ specialName: "Diable Jambe: Concassé",
+ captain: "Reduces damage received by 80% if HP is above 99% at the start of the turn",
+ sailor: "Reduces Paralysis by 3 turns for self"
+ },
+ 1118: {
+ special: "Randomizes all orbs, protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "10,000-Carat Smile",
+ specialNotes: "#{zombie}",
+ captain: "Boosts ATK and RCV of Striker characters by 1.5x",
+ sailor: "Makes [DEX] orbs \"beneficial\" for this unit"
+ },
+ 1119: {
+ special: "Randomizes all orbs, protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "10,000-Carat Smile",
+ specialNotes: "#{zombie}",
+ captain: "Boosts ATK of Striker characters by 2x and their RCV by 1.5x",
+ sailor: "Makes [DEX] orbs \"beneficial\" for this unit"
+ },
+ 1120: {
+ special: "Deals random typeless damage to all enemies, changes own orb into [STR]",
+ specialName: "Gum-Gum JET Gatling",
+ specialNotes: "#{random : 70,000 : 200,000}",
+ captain: "Boosts ATK by 4x following a chain of Good > Great > Perfect hits"
+ },
+ 1121: {
+ special: "Deals random typeless damage to all enemies, changes own orb into [STR]",
+ specialName: "Gum-Gum JET Gatling",
+ specialNotes: "#{random : 70,000 : 200,000}",
+ captain: "Boosts ATK by 4x following a chain of Good > Great > Perfect hits"
+ },
+ 1122: {
+ captain: "Boosts ATK of [STR], [DEX], and [QCK] characters by 2.5x, but boosts his OWN attack by 4x",
+ captainNotes: "Cavendish only boosts Friend or Sub Cavendish by 2.5x for a total of 10x boost with two Cavendish captains",
+ special: "Removes all positive buffs on Your team. Deals 15x the character's ATK as Typeless damage to all enemies. Boosts Cavendish's ATK by 2.25x for 2 turns, amplifies the effect of Cavendish's orb by 1.5x for 2 turns, locks his orb for 2 turns, and changes own orb to [QCK].",
+ specialNotes: "Boosted ATK and Orb Effectivess only works for the Cavendish who uses his Special.",
+ specialName: "Slicing Winds of Rommel"
+ },
+ 1123: {
+ captain: "Boosts ATK of [STR], [DEX], and [QCK] characters by 2.5x, but boosts his OWN attack by 4x",
+ captainNotes: "Cavendish only boosts Friend or Sub Cavendish by 2.5x for a total of 10x boost with two Cavendish captains",
+ special: "Removes all positive buffs on Your team. Deals 15x the character's ATK as Typeless damage to all enemies. Boosts Cavendish's ATK by 2.25x for 2 turns, amplifies the effect of Cavendish's orb by 1.5x for 2 turns, locks his orb for 2 turns, and changes own orb to [QCK].",
+ specialNotes: "Boosted ATK and Orb Effectivess only works for the Cavendish who uses his Special.",
+ specialName: "Slicing Winds of Rommel"
+ },
+ 1124: {
+ captain: "Boosts ATK of Slashers characters by 3x, reduces his own ATK multiplier by 0.1x at the end of each turn",
+ captainNotes: "His ATK multiplier will be 3x on the first turn, 2.9x on the second, 2.8x on the third and so on. The reduction stops once the multiplier is 1.0x. The multiplier affects all Slasher characters.",
+ special: "Deals 13x character's ATK in [PSY] damage to all enemies, changes own orb and captain's orb into Matching orbs.",
+ specialName: "Idle Execution"
+ },
+ 1125: {
+ captain: "Boosts ATK of Slashers characters by 3.5x, reduces his own ATK multiplier by 0.1x at the end of each turn",
+ captainNotes: "His ATK multiplier will be 3.5x on the first turn, 3.4x on the second, 3.3x on the third and so on. The reduction stops once the multiplier is 1.0x. The multiplier affects all Slasher characters.",
+ special: "Deals 13x character's ATK in [PSY] damage to all enemies, changes own orb and captain's orb into Matching orbs.",
+ specialName: "Idle Execution"
+ },
+ 1126: {
+ captain: "Boosts ATK and HP of [DEX] characters by 1.5x",
+ special: "Empties all slots with [BLOCK] orbs, deals severe typeless damage based on number of [BLOCK] slots emptied to all enemies. Changes [EMPTY] orbs into Matching orbs",
+ specialNotes: "The exact multiplier used is chosen based on the number of [BLOCK] orbs consumed: 0 orbs - Cannot Activate; 1 orb - 20x ATK; 2 orbs - 40x ATK; 3 orbs - 100x ATK; 4 orbs - 200x ATK; 5 orbs - 300x ATK; 6 orbs - 500x ATK.",
+ specialName: "Admiral Killer Bowling"
+ },
+ 1127: {//orlumbus
+ captain: "Boosts ATK of [DEX] characters by 2.25x and their HP by 1.5x",
+ special: "Empties all slots with [BLOCK] orbs, deals severe typeless damage based on number of [BLOCK] slots emptied to all enemies. Changes [EMPTY] orbs into Matching orbs",
+ specialNotes: "The exact multiplier used is chosen based on the number of [BLOCK] orbs consumed: 0 orbs - Cannot Activate; 1 orb - 20x ATK; 2 orbs - 40x ATK; 3 orbs - 100x ATK; 4 orbs - 200x ATK; 5 orbs - 300x ATK; 6 orbs - 500x ATK.",
+ specialName: "Admiral Killer Bowling"
+ },
+ 1128: {
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of all characters by 1.75x",
+ special: "Reduces Paralysis and Despair duration by 5 turns. Cuts the current HP of one enemy by 10%",
+ specialName: "Tactician's Savage Cut"
+ },
+ 1129: {
+ captain: "Reduces cooldown of all specials by 2 turn at the start of the fight, boosts ATK of all characters by 2x",
+ special: "Reduces Paralysis and Despair duration by 5 turns. Cuts the current HP of one enemy by 10%",
+ specialName: "Tactician's Savage Cut"
+ },
+ 1130: {
+ captain: "Boosts ATK and HP of Fighter and Powerhouse characters by 1.5x",
+ special: [
+ {
+ "description": "Deals 7x character's ATK in typeless damage to all enemies",
+ "cooldown": [ 12, 6 ]
+ },
+ {
+ "description": "Deals 15x character's ATK in typeless damage to all enemies",
+ "cooldown": [ 20, 14 ]
+ },
+ {
+ "description": "Deals 25x character's ATK in typeless damage to all enemies",
+ "cooldown": [ 26, 20 ]
+ },
+ ],
+ specialNotes: "For each turn AFTER Elizabello's special reaches stage 3, damage is boosted by 23.75x per turn for an additional 20 turns, for a max damage of 500x character's ATK to all enemies.",
+ specialName: "King Punch"
+ },
+ 1131: {
+ captain: "Boosts ATK of Fighter and Powerhouse characters by 1.5x and their HP by 2x",
+ special: [
+ {
+ "description": "Deals 7x character's ATK in typeless damage to all enemies",
+ "cooldown": [ 12, 6 ]
+ },
+ {
+ "description": "Deals 15x character's ATK in typeless damage to all enemies",
+ "cooldown": [ 20, 14 ]
+ },
+ {
+ "description": "Deals 25x character's ATK in typeless damage to all enemies",
+ "cooldown": [ 26, 20 ]
+ },
+ ],
+ specialNotes: "For each turn AFTER Elizabello's special reaches stage 3, damage is boosted by 23.75x per turn for an additional 20 turns, for a max damage of 500x character's ATK to all enemies.",
+ specialName: "King Punch"
+ },
+ 1132: {
+ captain: "Boosts ATK and HP of Fighter characters by 1.5x",
+ special: [
+ {
+ "description": "Deals severe [QCK] damage to all enemies, boosts ATK of Fighter characters by 1.5x for 1 turn",
+ "cooldown": [ 18, 12 ]
+ },
+ {
+ "description": "Deals severe [QCK] damage to all enemies, boosts ATK of Fighter characters by 1.75x for 1 turn",
+ "cooldown": [ 23, 17 ]
+ }
+ ],
+ specialNotes: "#{stages}",
+ specialName: "Destruction Cannon"
+ },
+ 1133: {
+ captain: "Boosts ATK of Fighter characters by 2.25x and their HP by 1.5x. Recovers 2x character's RCV in HP at the end of each turn",
+ special: [
+ {
+ "description": "Deals severe [QCK] damage to all enemies, boosts ATK of Fighter characters by 1.5x for 1 turn",
+ "cooldown": [ 18, 12 ]
+ },
+ {
+ "description": "Deals severe [QCK] damage to all enemies, boosts ATK of Fighter and Shooter characters by 1.75x for 1 turn",
+ "cooldown": [ 23, 17 ]
+ }
+ ],
+ specialNotes: "#{stages}",
+ specialName: "Destruction Cannon"
+ },
+ 1134: {
+ captain: "Boosts ATK and RCV for Striker and Slasher characters by 1.2x",
+ special: "Reduces Special Cooldown of [INT] characters by 1 turn.",
+ specialName: "Non-Negotiable Quest",
+ },
+ 1135: {
+ captain: "Boosts ATK and RCV for Striker and Slasher characters by 1.5x",
+ special: "Reduces Special Cooldown of [INT] characters by 1 turn.",
+ specialName: "Non-Negotiable Quest",
+ },
+ 1136: { //Fortnight Fukuro
+ captain: "Boosts ATK and HP of [QCK] characters by 1.5x",
+ special: "For [QCK] characters, changes [TND] and [RCV] orbs into [QCK] orbs",
+ specialName: "Stern Beast: Secret Technique: 'Owl Thrasher' Sneak Attack"
+ },
+ 1137: { //Fortnight Jabra
+ captain: "Boosts ATK of Powerhouse characters by 2.25x",
+ special: "Deals 13x character's ATK in [STR] damage to one enemy. For Free Spirit characters, amplifies the effects of orbs by 1.5x for 2 turns",
+ specialName: "Fatal Sneak Attack",
+ },
+ 1138: {
+ captain: "Reduces damage received by 25%",
+ special: "Reduces damage received by 60%, and boosts ATK of Powerhouse and Fighter characters by 1.3x for 1 turn",
+ specialName: "Iron Mass: Ring Sneak Attack"
+ },
+ 1139: {
+ captain: "Boosts ATK and RCV of Striker characters by 1.5x",
+ special: "Randomly changes all orbs (including [BLOCK] orbs) into either [STR], [DEX], [QCK], [PSY], or [INT] orbs",
+ specialName: "Lack of Pure Chi: Lion Finger Gun Sneak Attack"
+ },
+ 1140: {// Coliseum Moriah
+ captain: "Boosts ATK of Driven characters by 2x",
+ special: "Changes own orb into [DEX] and deals 300,000 Fixed damage to one enemy",
+ specialName: "Horn Blade Shadow"
+ },
+ 1141: {// Coliseum Moriah
+ captain: "Boosts ATK of Driven characters by 2.25x, recovers 3x character's RCV in HP at the end of each turn",
+ special: "Changes own orb into [DEX] and deals 300,000 Fixed damage to one enemy",
+ specialName: "Horn Blade Shadow"
+ },
+ 1142: {// Coliseum Foxy
+ captain: "Boosts ATK of Free Spirit characters by 1.5x",
+ special: "Deals 15 hits of random [STR] damage to random enemies. Delays all enemies for 1 turn",
+ specialNotes: "#{randomHits : 15}",
+ specialName: "Gorilla Punch: Golden Strike"
+ },
+ 1143: {// Coliseum Foxy
+ captain: "Boosts ATK of Free Spirit characters by 2x. Reduces cooldown of Free Spirit characters by 2 turns at the start of the fight",
+ special: "Deals 15 hits of random [STR] damage to random enemies. Delays all enemies for 1 turn",
+ specialNotes: "#{randomHits : 15}",
+ specialName: "Gorilla Punch: Golden Strike"
+ },
+ 1144: {// Coliseum Porche
+ captain: "Boosts ATK of [PSY] characters by 1.75x",
+ special: "Deals 5x character's ATK in [PSY] damage to all enemies. Recovers 15x character's RCV in HP",
+ specialName: "Cutie Baton: Flower Shuriken"
+ },
+ 1145: {// Coliseum Porche
+ captain: "Boosts ATK of [PSY] characters by 1.75x and their RCV by 1.5x",
+ special: "Deals 5x character's ATK in [PSY] damage to all enemies. Recovers 15x character's RCV in HP",
+ specialName: "Cutie Baton: Flower Shuriken"
+ },
+ 1146:{
+ specialName: "Bind Purge",
+ special: "Reduces Bind duration by 2 turns"
+ },
+ 1147:{
+ special: "Recovers 7x character's RCV in HP",
+ specialName: "Moderate Healing",
+ },
+ 1148:{
+ specialName: "Paralysis Recovery - Light",
+ special: "Reduces Paralysis by 1 turn"
+ },
+ 1149:{
+ special: "Deals 3x character's ATK in INT damage to all enemies, poisons all enemies",
+ specialNotes: "#{poison}",
+ specialName: "Poison Attack",
+ },
+ 1150:{
+ special: "Changes Captain orb into Matching orb",
+ specialName: "Captain Orb Change",
+ },
+ 1151: {//Minotaur
+ special: "Cuts the current HP of one enemy by 10%",
+ specialName: "Tough Jailer Beast: Spiked Club"
+ },
+ 1152: {
+ special: "Deals 3 hits of 7x character's ATK in [INT] damage to random enemies.",
+ specialNotes: "#{randomHits : 3}",
+ specialName: "Shy Jailer Beast: Spiked Mace",
+ },
+ 1153: {
+ special: "Reduces the defense of all enemies by 100% and boosts ATK of Powerhouse characters by 1.25x for 1 turn",
+ specialName: "Demon Lord's Roar"
+ },
+ 1154: {
+ captain: "Boosts ATK of Powerhouse characters by 2x and their HP by 1.3x",
+ special: "Reduces crew's current HP by 30%. Boosts ATK of Powerhouse characters by 1.5x",
+ specialName: "Leader of the Jailers",
+ },
+ 1155: {
+ special: "Deals 7x character's ATK in QCK damage to all enemies",
+ specialName: "Monsterous Appetite"
+ },
+ 1156: {
+ captain: "Boosts ATK of Driven characters by 1.2x if HP is above 50% at the start of the turn",
+ special: "Removes poison. Protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "Abyss Road",
+ specialNotes: "#{zombie}",
+ },
+ 1157: {
+ captain: "Boosts ATK of Driven and Striker characters by 1.75x if HP is above 50% at the start of the turn",
+ special: "Removes poison. Protects from defeat as long as HP is above 50% for 1 turn",
+ specialName: "Abyss Road",
+ specialNotes: "#{zombie}",
+ },
+ 1158: {
+ captain: "Boosts ATK of Shooter, Striker, and Powerhouse characters by 1.75x",
+ special: "Cuts the current HP of all enemys by 20%. Strongly poisons one enemy, and poisons all other enemies.",
+ specialNotes: "Strong poison deals 5x character's ATK in fixed damage at the end of each turn. Regular poison deals .5x character's ATK in fixed damage at the end of each turn.",
+ specialName: "Poison Puffer Fish"
+ },
+ 1159: {
+ captain: "Boosts ATK of Shooter, Striker, and Powerhouse characters by 2.25x",
+ special: "Cuts the current HP of all enemys by 20%. Strongly poisons one enemy, and poisons all other enemies.",
+ specialNotes: "Strong poison deals 5x character's ATK in fixed damage at the end of each turn. Regular poison deals .5x character's ATK in fixed damage at the end of each turn.",
+ specialName: "Poison Puffer Fish"
+ },
+ 1160: {
+ captain: "Boosts ATK and RCV of Free Spirit characters by 1.5x",
+ special: "Reduces Bind, Despair, and Silence duration by 3 turns, and recovers 2,000 HP",
+ specialNotes: "Silence will refer to effects that prevent you from activating Special Abilities",
+ specialName: "Summer Koala Special"
+ },
+ 1161: {
+ captain: "Boosts ATK of Free Spirit characters by 2x and their RCV by 1.5x",
+ special: "Reduces Bind, Despair, and Silence duration by 3 turns, and recovers 2,000 HP",
+ specialNotes: "Silence will refer to effects that prevent you from activating Special Abilities",
+ specialName: "Summer Koala Special"
+ },
+ 1162: {//Tesoro
+ captain: "Boosts ATK of [PSY] characters by 1.75x and boosts amount of Beli received by 1.5x",
+ special: "Deals large [PSY] damage to all enemies, and if HP is above 50%, changes all orbs to [PSY] orbs",
+ specialName: "Gold-Gold Fruit",
+ },
+ 1163: {//Tesoro Evolved
+ captain: "Boosts ATK of PSY characters by 1.75x. Also boosts ATK of Driven and Cerebral characters by 1.5x. Boosts amount of Beli received by 2x",
+ captainNotes: "The two Boosts stack with each other so a PSY Driven or a PSY Cerebral Unit will be boosted by 2.625",
+ special: "Deals large [PSY] damage to all enemies, and if HP is above 50%, changes all orbs to [PSY] orbs",
+ specialName: "Gold-Gold Fruit",
+ },
+ 1164: {//Carina
+ captain: "Boosts RCV of all characters by 1.2x",
+ special: "Boosts RCV by 1.5x for 1 turn and amplifies the effects of orbs by 1.5x for 1 turn",
+ specialName: "Sexy Diva",
+ },
+ 1165: {//Carina Evolved
+ captain: "Boosts RCV of all characters by 1.5x",
+ special: "Boosts RCV by 1.5x for 1 turn and amplifies the effects of orbs by 1.5x for 1 turn",
+ specialName: "Sexy Diva",
+ },
+ 1166: {//Baccarat
+ captain: "Gives chance of duplicating a drop upon completion of the island.",
+ captainNotes: "Does not work if she was not your captain upon starting the island. Stacks with other addional drop captains, giving you two chances of getting an extra drop.",
+ special: "Boosts chance of matching orbs and reduces the ATK of enemies for 1 turn",
+ specialName: "Lucky-Lucky Fruit",
+ },
+ 1167: {//Baccarat Evolved
+ captain: "Boosts ATK of all characters by 1.2x. Gives chance of duplicating a drop upon completion of the island.",
+ captainNotes: "Does not work if she was not your captain upon starting the island. Stacks with other addional drop captains, giving you two chances of getting an extra drop.",
+ special: "Boosts chance of matching orbs and reduces the ATK of enemies for 1 turn",
+ specialName: "Lucky-Lucky Fruit",
+ },
+ 1168: {//Dice
+ captain: "Boosts ATK of [STR] characters by 2x if HP is below 30% at the start of the turn",
+ special: "Boosts ATK of [STR] characters by a variable factor for 1 turn",
+ specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 30% HP, the multiplier used is 1.1x; below 30% HP, it's 1.75x.",
+ specialName: "Trump Card Dealer",
+ },
+ 1169: {//Dice Evolved
+ captain: "Boosts ATK of [STR] characters proportionally to the crew's current HP",
+ captainNotes: "#{captainProportional : lower : 1 + 1.5 * (1 - (remaining HP) / (total HP)) : 1 : 2.5}",
+ special: "Boosts ATK of [STR] characters by a variable factor for 1 turn",
+ specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 30% HP, the multiplier used is 1.1x; below 30% HP, it's 1.75x.",
+ specialName: "Trump Card Dealer",
+ },
+ 1170: {//Tanaka
+ captain: "Boosts ATK of [QCK] characters by 1.5x",
+ special: "Reduces Bind duration by 3 turns and swaps Badly Matching, [BLOCK], and [BOMB] orbs to [EMPTY]",
+ specialName: "Escape-Escape Fruit",
+ },
+ 1171: {//Tanaka Evolved
+ captain: "Boosts ATK of [QCK] characters by 2x",
+ special: "Reduces Bind duration by 3 turns and swaps Badly Matching, [BLOCK], and [BOMB] orbs to [EMPTY]",
+ specialName: "Escape-Escape Fruit",
+ },
+ 1172: {
+ special: "Deals random PSY damage to all enemies, randomizes all orbs",
+ specialName: "Three-Verse Humming: Arrow-Notch Slash",
+ captain: "Boosts ATK of PSY characters by 2x",
+ sailor: "Boosts RCV of PSY characters by 15"
+ },
+ 1173: {
+ special: "Deals random PSY damage to all enemies, randomizes all orbs",
+ specialName: "Three-Verse Humming: Arrow-Notch Slash",
+ captain: "Boosts ATK of PSY characters by 2x, reduces damage received from INT enemies by 30%",
+ sailor: "Boosts RCV of PSY characters by 15"
+ },
+ 1174: {
+ special: "Changes adjacent orbs into [DEX], deals 1,000 fixed damage to all enemies",
+ specialName: "Ashura Ugui",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of DEX characters by 2.75x if HP is below 30% at the start of the turn",
+ sailor: "Boosts ATK of Slasher characters by 20"
+ },
+ 1175: {
+ special: "Changes adjacent orbs into [DEX], deals 1,000 fixed damage to all enemies",
+ specialName: "Ashura Ugui",
+ specialNotes: "#{fixed}",
+ captain: "Boosts ATK of DEX characters by 3x if HP is below 30% at the start of the turn",
+ sailor: "Boosts ATK of Slasher characters by 20"
+ },
+ 1176: {
+ special: "Removes poison, recovers 15x character's RCV in HP",
+ specialName: "Devoted Healing - \"I'm Glad You are Safe\"",
+ captain: "Boosts ATK and RCV of DEX characters by 1.5x",
+ sailor: "When HP is below 30% at the start of the turn, boosts own RCV by 50"
+ },
+ 1177: {
+ special: "Removes poison, recovers 15x character's RCV in HP",
+ specialName: "Devoted Healing - \"I'm Glad You are Safe\"",
+ captain: "Boosts ATK and RCV of DEX characters by 2x",
+ sailor: "When HP is below 30% at the start of the turn, boosts own RCV by 50"
+ },
+ 1178: {
+ captain: "Boosts ATK of [STR] characters by 2x if HP is above 99% at the start of the turn. Reduces damage received by 50%",
+ special: "Deals random typeless damage to all enemies. Randomizes all orbs including [BLOCK] orbs.",
+ specialName: "Not Rubber Gum-Gum Jet Gatling",
+ specialNotes: "#{random : 30,000 : 150,000}",
+ },
+ 1179: {
+ captain: "Boosts ATK of [STR] characters by 2.75x if HP is above 99% at the start of the turn. Reduces damage received by 50%",
+ special: "Deals random typeless damage to all enemies. Randomizes all orbs including [BLOCK] orbs.",
+ specialName: "Not Rubber Gum-Gum Jet Gatling",
+ specialNotes: "#{random : 30,000 : 150,000}",
+ },
+ 1181: { //Blenheim
+ captain: "Boosts ATK of [DEX] characters by 2.5x",
+ special: "Deals 15x character's ATK in [DEX] damage to all enemies. Makes [RCV] and [TND] orbs \"beneficial\" to Slasher characters for 3 turns",
+ specialName: "Anger of the Ki Sword",
+ sailor: "Makes [STR] orbs \"beneficial\" for this unit"
+ },
+ 1182: { //Blenheim
+ captain: "Boosts ATK of [DEX] characters by 2.5x",
+ special: "Deals 15x character's ATK in [DEX] damage to all enemies. Makes [RCV] and [TND] orbs \"beneficial\" to Slasher characters for 3 turns",
+ specialName: "Anger of the Ki Sword",
+ sailor: "Makes [STR] orbs \"beneficial\" for this unit"
+ },
+ 1183: {
+ captain: "Boosts ATK of [PSY] characters by 2.5x",
+ special: "Empties all slots with [PSY] orbs, deals several times the character's ATK in [PSY] damage to one enemy",
+ specialNotes: "The exact multiplier used is chosen based on the number of [PSY] orbs consumed: 1 orb will give a 13x multiplier, 2 orbs 19x, 3 orbs 26x, 4 orbs 65x, 5 orbs 130x, 6 orbs 230x. It's not possible to activate the special without consuming at least one [PSY] orb.",
+ specialName: "Brass Knuckle Destruction",
+ sailor: "If HP is above 99% at the start of the turn, boosts ATK of [PSY] characters by 75"
+ },
+ 1184: {
+ captain: "Boosts ATK of [PSY] characters by 2.5x",
+ special: "Empties all slots with [PSY] orbs, deals several times the character's ATK in [PSY] damage to one enemy",
+ specialNotes: "The exact multiplier used is chosen based on the number of [PSY] orbs consumed: 1 orb will give a 13x multiplier, 2 orbs 19x, 3 orbs 26x, 4 orbs 65x, 5 orbs 130x, 6 orbs 230x. It's not possible to activate the special without consuming at least one [PSY] orb.",
+ specialName: "Brass Knuckle Destruction",
+ sailor: "If HP is above 99% at the start of the turn, boosts ATK of [PSY] characters by 75"
+ },
+ 1185: {
+ captain: "Boosts ATK of Slasher and Cerebral characters by 1.75x. Gives chance of duplicating a drop upon completion of the island.",
+ captainNotes: "Does not work if he was not your captain upon starting the island. Stacks with other addional drop captains, giving you two chances of getting an extra drop.",
+ special: [
+ {
+ "description": "Deals 4x character's ATK in [INT] damage to all enemies. Changes own orb into [INT].",
+ "cooldown": [ 8, 3 ],
+ },
+ {
+ "description": "Deals 15x character's ATK in [INT] damage to all enemies. Changes own orb into [INT]. Reduces Special Cooldown of Slasher and Cerebral characters by 1 turn",
+ "cooldown": [ 17, 12 ],
+ }
+ ],
+ specialName: "Extreme Speed - One Sword Style, Ten Slashes",
+ sailor: "Restores his own special by 1 turn when it is rewinded",
+ sailorNotes: "Some enemies can increase your cooldown by 1/2 Turns, this Sailor Ability decreases that by 1 Turn"
+ },
+ 1186: {
+ captain: "Boosts ATK of Slasher and Cerebral characters by 1.75x. Gives chance of duplicating a drop upon completion of the island.",
+ captainNotes: "Does not work if he was not your captain upon starting the island. Stacks with other addional drop captains, giving you two chances of getting an extra drop.",
+ special: [
+ {
+ "description": "Deals 4x character's ATK in [INT] damage to all enemies. Changes own orb into [INT].",
+ "cooldown": [ 8, 3 ],
+ },
+ {
+ "description": "Deals 15x character's ATK in [INT] damage to all enemies. Changes own orb into [INT]. Reduces Special Cooldown of Slasher and Cerebral characters by 1 turn",
+ "cooldown": [ 17, 12 ],
+ }
+ ],
+ specialName: "Extreme Speed - One Sword Style, Ten Slashes",
+ sailor: "Restores his own special by 1 turn when it is rewinded",
+ sailorNotes: "Some enemies can increase your cooldown by 1/2 Turns, this Sailor Ability decreases that by 1 Turn"
+ },
+ 1187: {
+ captain: "Boosts ATK of [STR] characters by 2.5x",
+ special: "Deals 7 hits of random damage to random enemies. Reduces Bind and Despair duration by 3 turns",
+ specialNotes: "#{randomHits : 7} #{random : 5000 : 20000 : for each hit}",
+ specialName: "Advancing Continuous Sword Attack",
+ sailor: "Boosts ATK, HP, and RCV of all characters by 20"
+ },
+ 1188: {
+ captain: "Boosts ATK of [STR] characters by 2.5x",
+ special: "Deals 7 hits of random damage to random enemies. Reduces Bind and Despair duration by 3 turns",
+ specialNotes: "#{randomHits : 7} #{random : 5000 : 20000 : for each hit}",
+ specialName: "Advancing Continuous Sword Attack",
+ sailor: "Boosts ATK, HP, and RCV of all characters by 20"
+ },
+ 1189: {
+ captain: "Boosts ATK of [QCK] characters by 2.25x, makes [DEX] orbs \"beneficial\" to [QCK] characters",
+ captainNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs.",
+ special: "Reduces enemy Barrier timers by 1 turn",
+ specialNotes: "Does not affect DEF Boost or % Damage reduction buffs. Reduces timers for Barriers such as Perfect/Great/Good Barriers, Combo Hit Barriers and Orb Hit Barriers",
+ specialName: "Break Bullet",
+ sailor: "Boosts ATK of [QCK] characters by 40"
+ },
+ 1190: {
+ captain: "Boosts ATK of [QCK] characters by 2.25x, makes [DEX] orbs \"beneficial\" to [QCK] characters",
+ captainNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs.",
+ special: "Reduces enemy Barrier timers by 1 turn",
+ specialNotes: "Does not affect DEF Boost or % Damage reduction buffs. Reduces timers for Barriers such as Perfect/Great/Good Barriers, Combo Hit Barriers and Orb Hit Barriers",
+ specialName: "Break Bullet",
+ sailor: "Boosts ATK of [QCK] characters by 40"
+ },
+ 1191: {
+ captain: "Boosts ATK of all characters by 2x and their HP by 1.25x. If you defeat an enemy, increases ATK boost slighty. Stacks up to 8 times to a maximum of 3.5x If you did not defeat an enemy, lose all ATK boost stacks.",
+ special: "Increases duration of any Class/Type boosting buffs and Orb Amplification buffs by 1 turn",
+ specialName: "Ice Age",
+ },
+ 1192: {
+ captain: "Boosts ATK of all characters by 2x and their HP by 1.25x. If you defeat an enemy, increases ATK boost slighty. Stacks up to 8 times to a maximum of 3.5x If you did not defeat an enemy, lose all ATK boost stacks.",
+ special: "Increases duration of any Class/Type boosting buffs and Orb Amplification buffs by 1 turn",
+ specialName: "Ice Age",
+ },
+ 1193: {
+ captain: "Boosts ATK of Free Spirit characters by 2x",
+ special: "Recovers 13x character's RCV in HP and locks the chain multiplier at 2.5x for 1 turn",
+ specialName: "Sweet Style Petrification",
+ },
+ 1194: {
+ captain: "Boosts ATK of Free Spirit characters by 2.5x",
+ special: "Recovers 13x character's RCV in HP and locks the chain multiplier at 2.5x for 1 turn",
+ specialName: "Sweet Style Petrification",
+ },
+ 1195: {
+ captain: "Boosts ATK of Striker characters by 1.75x. Recovers 2x character's RCV in HP at the end of each turn",
+ special: "Reduces crew's current HP by 60%, deals 8x the amount of HP subtracted in typeless damage to all enemies. Boosts ATK of Striker characters by 1.75x for 1 turn",
+ specialName: "Split Air Hole",
+ },
+ 1196: {
+ captain: "Boosts ATK of Striker characters by 2x. Recovers 5x character's RCV in HP at the end of each turn",
+ special: "Reduces crew's current HP by 60%, deals 8x the amount of HP subtracted in typeless damage to all enemies. Boosts ATK of Striker characters by 1.75x for 1 turn",
+ specialName: "Split Air Hole",
+ },
+ 1197: {
+ captain: "Boosts ATK of Cerebral and Powerhouse characters by 2.5x if they have a matching orb, by 1x otherwise, reduces crew's RCV to 0",
+ special: "For Cerebral and Powerhouse characters, changes all orbs including [BLOCK] orbs to Badly Matching. Deals [INT] damage to all enemies",
+ specialName: "Investigator of Sorrow",
+ },
+ 1198: {
+ captain: "Boosts ATK and RCV of Free Spirit characters by 1.5x",
+ special: "Empties all slots with [RCV] orbs, recover 20% of MAX HP",
+ specialName: "Appetite Or Sex Appeal - Has it Switched Yet!?",
+ },
+ 1199: {
+ captain: "Boosts ATK and RCV of Free Spirit characters by 1.5x",
+ special: "Empties all slots with [RCV] orbs, recover 20% of MAX HP",
+ specialName: "Appetite Or Sex Appeal - Has it Switched Yet!?",
+ },
+ 1200: {
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x",
+ special: "Reduces Silence duration by 2 turns. If your HP is below 30%, changes top row into Matching Orbs",
+ specialName: "Passionate Look, 'I'm a Bad Guy...'",
+ sailor: "Reduces Silence duration against this unit by 2 turns"
+ },
+ 1201: {
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x",
+ special: "Reduces Silence duration by 2 turns. If your HP is below 30%, changes top row into Matching Orbs",
+ specialName: "Passionate Look, 'I'm a Bad Guy...'",
+ sailor: "Reduces Silence duration against this unit by 2 turns"
+ },
+ 1202: {
+ captain: "Boosts ATK of Free Spirit characters by 1.5x",
+ specialName: "Session of Pirates",
+ special: "Changes [PSY] orbs on Free Spirit characters into matching orbs"
+ },
+ 1203: {
+ captain: "Boosts ATK of Free Spirit characters by 2.25x",
+ specialName: "Session of Pirates",
+ special: "Changes [PSY] orbs on Free Spirit characters into matching orbs"
+ },
+ 1204: {
+ captain: "Boosts ATK and RCV of Free Spirit characters by 1.2x",
+ specialName: "Awakening Tune Power",
+ special: "Deals 500 fixed damage to each Enemy, changes [RCV] orbs into [QCK] and [TND] into [PSY] orbs"
+ },
+ 1205: {
+ captain: "Boosts ATK and RCV of Free Spirit characters by 1.5x",
+ specialName: "Awakening Tune Power",
+ special: "Deals 500 fixed damage to each Enemy, changes [RCV] orbs into [QCK] and [TND] into [PSY] orbs"
+ },
+ 1206: {
+ captain: "Boosts HP by 1.3x",
+ specialName: "Chorus echoing in the sea",
+ special: "Protects from defeat as long as HP is above 50%",
+ specialNotes: "#{zombie}"
+ },
+ 1207: {
+ special: "Boosts chances of getting [INT] orbs for 3 turns",
+ specialName: "Ochenta Fleur - Cuatro Manus Shock",
+ captain: "Boosts ATK and RCV of INT characters by 1.5x",
+ sailor: "Reduces duration of Blindness by 3 turn"
+ },
+ 1208: {
+ special: "Boosts chances of getting [INT] orbs for 3 turns",
+ specialName: "Ochenta Fleur - Cuatro Manus Shock",
+ captain: "Boosts ATK and RCV of INT characters by 2x",
+ sailor: "Reduces duration of Blindness by 3 turn"
+ },
+ 1209: {
+ special: "Delays all enemies for 3 turns, cuts the current HP of each enemy by 10%",
+ specialName: "Heavenly Dragon Star",
+ captain: "Boosts ATK of Shooter characters by 2x",
+ sailor: "Boosts RCV of Shooter characters by 10"
+ },
+ 1210: {
+ special: "Delays all enemies for 3 turns, cuts the current HP of each enemy by 10%",
+ specialName: "Heavenly Dragon Star",
+ captain: "Boosts ATK of Shooter characters by 2x and their RCV by 1.5x",
+ sailor: "Boosts RCV of Shooter characters by 10"
+ },
+ 1211: {
+ special: "Changes own orb into [STR], amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Roar! Zarley Davison",
+ captain: "Boosts ATK of STR characters by 2x, deals 2x character's ATK in STR damage to all enemies at the end of each turn",
+ sailor: "Boosts ATK of Shooter characters by 20"
+ },
+ 1212: {
+ special: "Changes own orb into [STR], amplifies the effect of orbs by 1.5x for 2 turns",
+ specialNotes: "#{orb : 1.5x}",
+ specialName: "Roar! Zarley Davison",
+ captain: "Boosts ATK of STR characters by 2.25x, deals 2x character's ATK in STR damage to all enemies at the end of each turn",
+ sailor: "Boosts ATK of Shooter characters by 20"
+ },
+ 1213: {
+ captain: "Boosts ATK of Slasher characters by 1.5x, the HP of Striker characters by 1.2x, and the RCV of Shooter characters by 1.2x",
+ specialName: "Exciting Transfiguration",
+ special: "Recovers 10x character's RCV in HP. For 4 turns, makes [BOMB] orbs \"beneficial\"",
+ specialNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs while retaining their original function."
+ },
+ 1214: {
+ captain: "Boosts ATK of Slasher characters by 2x, the HP of Striker characters by 1.25x, and the RCV of Shooter characters by 1.25x",
+ specialName: "Exciting Transfiguration",
+ special: "Recovers 10x character's RCV in HP. For 4 turns, makes [BOMB] orbs \"beneficial\"",
+ specialNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs while retaining their original function."
+ },
+ 1215: { //Gairam
+ captain: "Boosts ATK by 2.5x following a chain of [QCK] > [PSY] > [DEX] attacks no lower than Good",
+ special: "Deals 5 hits of 2,000 fixed damage to random enemies and reduces any damage received above 5,000 HP by 80% for 1 turn",
+ specialNotes: "#{randomHits : 5}",
+ specialName: "Totem Cube"
+ },
+ 1216: { //sebastian
+ captain: "Boosts ATK of Powerhouse characters by 2x and reduces damage taken based on current HP by up to 20%",
+ captainNotes: "The lower the HP, the larger the damage reduction. At 50% HP you take 10% reduced damage",
+ special: "Reduces damage received by 50% for 1 turn, and changes own orb to [QCK]",
+ specialName: "Camouflage Air",
+ },
+ 1217: { //nightin
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x",
+ special: "Reduces Paralysis and Bind duration by 2 turns. Deal 10x her ATK in [PSY] damage to one enemy",
+ specialName: "Catepillar Soul Shot",
+ },
+ 1218: {//hancock
+ captain: "Boosts ATK by 2.5x after scoring 3 Perfects in a row",
+ special: "Locks all orbs for 1 turn. If HP is below 30%, changes own orb and the captain's orb into matching. ",
+ specialName: "Everybody Confusing Fragrance",
+ },
+ 1219: {//Byrnndi World Coliseum
+ captain: "Boosts ATK of Shooters by 1x. If you defeat an enemy, increases ATK boost slighty. Stacks up to 16 times to a maximum of 3x If you did not defeat an enemy, lose all ATK boost stacks.",
+ special: [
+ {
+ "description": "Deals 7x character's ATK in [INT] damage to one enemy. Reduces crew's current HP by 50%. Boosts ATK of Shooter characters by 1.2x for 1 turn",
+ "cooldown": [ 22, 6 ],
+ },
+ {
+ "description": "Deals 15x character's ATK in [INT] damage to one enemy. Reduces crew's current HP by 50%. Boosts ATK of Shooter characters by 1.5x for 1 turn",
+ "cooldown": [ 28, 12 ],
+ },
+ {
+ "description": "Deals 25x character's ATK in [INT] damage to one enemy. Reduces crew's current HP by 50%. Boosts ATK of Shooter characters by 2x for 1 turn",
+ "cooldown": [ 34, 18 ],
+ },
+ ],
+ specialName: "More More, 10 Times \"Iron Hammer\"",
+ },
+ 1220: {//Byrnndi World Coliseum
+ captain: "Boosts ATK of Shooters by 1x. If you defeat an enemy, increases ATK boost slighty. Stacks up to 10 times to a maximum of 3.25x If you did not defeat an enemy, lose all ATK boost stacks.",
+ special: [
+ {
+ "description": "Deals 7x character's ATK in [INT] damage to one enemy. Reduces crew's current HP by 50%. Boosts ATK of Shooter characters by 1.2x for 1 turn",
+ "cooldown": [ 22, 6 ],
+ },
+ {
+ "description": "Deals 15x character's ATK in [INT] damage to one enemy. Reduces crew's current HP by 50%. Boosts ATK of Shooter characters by 1.5x for 1 turn",
+ "cooldown": [ 28, 12 ],
+ },
+ {
+ "description": "Deals 25x character's ATK in [INT] damage to one enemy. Reduces crew's current HP by 50%. Boosts ATK of Shooter characters by 2x for 1 turn",
+ "cooldown": [ 34, 18 ],
+ },
+ ],
+ specialName: "More More, 10 Times \"Iron Hammer\"",
+ },
+ 1221: {//Coliseum Oars Jr
+ captain: "Boosts ATK of Slasher characters by 1.75x and the HP of Powerhouse characters by 1.2x",
+ special: "Deals 25x character's ATK in [STR] damage to one enemy. For 1 turn, makes [STR] orb \"beneficial\" for all characters",
+ specialNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs.",
+ specialName: "Blood of the Devil Warrior",
+ },
+ 1222: {//Coliseum Oars Jr
+ captain: "Boosts ATK of Slasher characters by 2x and the HP of Powerhouse characters by 1.75x",
+ special: "Deals 25x character's ATK in [STR] damage to one enemy. For 1 turn, makes [STR] orb \"beneficial\" for all characters",
+ specialNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs.",
+ specialName: "Blood of the Devil Warrior",
+ },
+ 1223: { // Story Bastille
+ captain: "Boosts ATK of [INT] characters by 2x",
+ special: "Deals 25x character's ATK in [INT] damage to all enemies",
+ specialName: "Shark Knife - Flash",
+ },
+ 1224: { // Story Yamakaji
+ captain: "Boosts ATK of Slasher characters by 2x",
+ special: "Reduces damage received by 60% for 1 turn",
+ specialName: "Appreciation For The Great Men",
+ },
+ 1225: { // Story Hina
+ captain: "Boosts ATK and RCV of [INT] characters by 1.5x",
+ special: "Delays all enemies for 1 turn, and locks own orb for 1 turn",
+ specialName: "Binding Iron Tablet",
+ },
+ 1226: { // Story Smoker
+ captain: "Boosts ATK of Driven characters by 2x",
+ special: "Cuts the current HP of one enemy by 10% and changes own orb into [PSY]",
+ specialName: "Seastone Truncheon",
+ },
+ 1227: { //Story Mihawk
+ captain: "Reduces cooldown of Slasher specials by 2 turns at the start of the fight. Boosts ATK of Slasher characters by 2.25x",
+ special: "Deals 100,000 fixed damage to one enemy, and boosts own ATK by 1.75x for 1 turn ",
+ specialName: "Black Blade - Slashing Burial Drop",
+ },
+ 1228: { // Story Kizaru
+ captain: "Boosts ATK of Shooter characters by 2.5x",
+ special: "For Shooter characters, changes [BLOCK] orbs into Matching, and deals large [DEX] damage to all enemies",
+ specialName: "The Cave of the Sun Goddess",
+ },
+ 1229: {//Sentomaru
+ captain: "Boosts ATK of Powerhouse characters by 2x, and his OWN ATK by 2x.",
+ special: [
+ {
+ "description": "Deals 500 fixed damage to one enemy. Reduces Special Cooldown of your top row by 1 turn",
+ "cooldown": [ 11, 4 ],
+ },
+ {
+ "description": "Deals 5,000 fixed damage to one enemy. Reduces Special Cooldown of your top row by 1 turn",
+ "cooldown": [ 15, 8 ],
+ },
+ {
+ "description": "Deals 100,000 fixed damage to one enemy. Reduces Special Cooldown of your top row by 2 turns",
+ "cooldown": [ 22, 15 ],
+ },
+ ],
+ sailor: "Cannot be Blown Away (Such as Raid Boss Kuma)",
+ specialName: "Leg-Locked Heave-Ho",
+ },
+ 1230: {//Sentomaru
+ captain: "Boosts ATK of Powerhouse characters by 2.5x, but boost his OWN ATK by 2.75x. Reduces damage received by 10%",
+ special: [
+ {
+ "description": "Deals 500 fixed damage to one enemy. Reduces Special Cooldown of your top row by 1 turn",
+ "cooldown": [ 11, 4 ],
+ },
+ {
+ "description": "Deals 5,000 fixed damage to one enemy. Reduces Special Cooldown of your top row by 1 turn",
+ "cooldown": [ 15, 8 ],
+ },
+ {
+ "description": "Deals 100,000 fixed damage to one enemy. Reduces Special Cooldown of your top row by 2 turns",
+ "cooldown": [ 22, 15 ],
+ },
+ ],
+ sailor: "Cannot be Blown Away (Such as Raid Boss Kuma)",
+ specialName: "Leg-Locked Heave-Ho",
+ },
+ 1231: {//Smoker
+ captain: "Boosts ATK of Striker and Driven characters by 1.75x and reduces RCV of all characters by 50%. If this character becomes your captain in the middle of an island, reduces damage received by 30% and further boosts ATK of Striker and Driven characters by 1.25x",
+ captainNotes: "If Smoker uses his special ability to swap to your captain, his effective captain boost will be 2.1875x",
+ special: "Deals large [DEX] damage to one enemy. Swaps this unit with your captain for 2 turns",
+ specialNotes: "This is the same type of ability as raid boss Shiki's swap.",
+ specialName: "Armed - White Launcher",
+ sailor: "Boosts ATK of Striker characters by 50",
+ },
+ 1232: {//Smoker
+ captain: "Boosts ATK of Striker and Driven characters by 2.25x and reduces RCV of all characters by 50%. If this character becomes your captain in the middle of an island, reduces damage received by 30% and further boosts ATK of Striker and Driven characters by 1.3x",
+ captainNotes: "If Smoker uses his special ability to swap to your captain, his effective captain boost will be 2.925x",
+ special: "Deals large [DEX] damage to one enemy. Swaps this unit with your captain for 2 turns",
+ specialNotes: "This is the same type of ability as raid boss Shiki's swap. You cannot use it if another effect swaps your captain. (Such as if Shiki swaps first)",
+ specialName: "Armed - White Launcher",
+ sailor: "Boosts ATK of Striker characters by 50",
+ },
+ 1233: {//Tashigi
+ captain: "Boosts ATK of Slasher and Cerebral characters by 1.5x, and their RCV by 1.2x",
+ captainNotes: "Attack boost stacks, so a Slasher Cerebral unit has 2.25x ATK",
+ special: "Deals 15x character's ATK in [QCK] damage to all enemies. Boosts the Color Affinity of Slasher and Cerebral characters by 1.5x for 2 turns",
+ specialNotes: "#{colorAffinity : 1.5}",
+ specialName: "Cutting Drizzle",
+ sailor: "Boosts RCV of Slasher characters by 30",
+ },
+ 1234: {//Tashigi
+ captain: "Boosts ATK of Slasher and Cerebral characters by 1.6x, and their RCV by 1.3x",
+ captainNotes: "Attack boost stacks, so a Slasher Cerebral unit has 2.56x ATK",
+ special: "Deals 15x character's ATK in [QCK] damage to all enemies. Boosts the Color Affinity of Slasher and Cerebral characters by 1.5x for 2 turns",
+ specialNotes: "#{colorAffinity : 1.5}",
+ specialName: "Cutting Drizzle",
+ sailor: "Boosts RCV of Slasher characters by 30",
+ },
+ 1235: {//Maynard
+ captain: "Boosts ATK of [PSY] characters by 1.75x, deals 3x character's ATK to all enemies at the end of each turn",
+ special: "Deals several times the character's ATK in [PSY] damage to one enemy. Delays all enemies for 1 turn",
+ specialNotes: "#{specialProportional : higher : ??? * (remaining HP) / (total HP) }",
+ specialName: "Sword of Silence",
+ sailor: "Reduces duration of Blindness for 3 turns",
+ },
+ 1236: {//Maynard
+ captain: "Boosts ATK of [PSY] characters by 2x, deals 5x character's ATK to all enemies at the end of each turn",
+ special: "Deals several times the character's ATK in [PSY] damage to one enemy. Delays all enemies for 1 turn",
+ specialNotes: "#{specialProportional : higher : ??? * (remaining HP) / (total HP) }",
+ specialName: "Sword of Silence",
+ sailor: "Reduces duration of Blindness for 3 turns",
+ },
+ 1237: {//Bastille
+ captain: "Boosts ATK of all characters by 2x after the 15th hit in the chain",
+ special: "Deals 20x character's ATK in [STR] damage to all enemies. Boost ATK of all characters by 2x after 30th hit in the chain for 1 turn.",
+ specialName: "Shark Cutter - Flash",
+ sailor: "Makes [QCK] orbs \"beneficial\" for this unit"
+ },
+ 1238: {//Bastille
+ captain: "Boosts ATK of all characters by 2x after the 15th hit in the chain and by 3x after the 30th hit",
+ special: "Deals 20x character's ATK in [STR] damage to all enemies. Boost ATK of all characters by 2x after 30th hit in the chain for 1 turn.",
+ specialName: "Shark Cutter - Flash",
+ sailor: "Makes [QCK] orbs \"beneficial\" for this unit"
+ },
+ 1239: {//6* Kizaru
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of all characters by 2x, and RCV of all characters by 1.3x. If you use \"Yasakani no Magatama\" boosts ATK of all characters by 3x instead.",
+ specialName: "Yasakani no Magatama",
+ special: [
+ {
+ "description": "For Shooter and Slasher characters, randomizes all non-matching orbs. Deals 10 hits of small random typeless damage to random enemies.",
+ "cooldown": [ 6, 3 ],
+ },
+ {
+ "description": "For Shooter and Slasher characters, randomizes all non-matching orbs. Recovers 5x character's RCV in HP. Deals 10 hits of random typeless damage to random enemies.",
+ "cooldown": [ 12, 9 ],
+ },
+ {
+ "description": "Changes all orbs on Shooter and Slasher characters into Matching orbs. Recovers 10x character's RCV in HP. Deals 10 hits of large random typeless damage to random enemies.",
+ "cooldown": [ 20, 17 ],
+ },
+ ],
+ specialNotes: "#{randomHits : 10}",
+ },
+ 1240: {//6* Kizaru
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, boosts ATK of all characters by 2x, and RCV of all characters by 1.3x. If you use \"Yasakani no Magatama\" boosts ATK of all characters by 3x instead.",
+ specialName: "Yasakani no Magatama",
+ special: [
+ {
+ "description": "For Shooter and Slasher characters,randomizes all non-matching orbs. Deals 10 hits of small random typeless damage to random enemies.",
+ "cooldown": [ 6, 3 ],
+ },
+ {
+ "description": "For Shooter and Slasher characters, randomizes all non-matching orbs. Recovers 5x character's RCV in HP. Deals 10 hits of random typeless damage to random enemies.",
+ "cooldown": [ 12, 9 ],
+ },
+ {
+ "description": "Changes all orbs on Shooter and Slasher characters into Matching orbs. Recovers 10x character's RCV in HP. Deals 10 hits of large random typeless damage to random enemies.",
+ "cooldown": [ 20, 17 ],
+ },
+ ],
+ specialNotes: "#{randomHits : 10}",
+ },
+ 1241: {//Fortnight Koala
+ captain: "Boosts chain multiplier by 1.5x. Recovers 1x character's RCV in HP at the end of each turn",
+ special: "Deals 11x character's ATK in [STR] damage to one enemy. For 1 turn every attacking character gets 15x character's ATK as additional typeless bonus damage if you hit a Good/Great/Perfect",
+ specialName: "Fishman Karate, Midair Upwards Kick",
+ },
+ 1242: {//Fortnight Koala
+ captain: "Boosts chain multiplier by 2x. Recovers 2x character's RCV in HP at the end of each turn",
+ special: "Deals 11x character's ATK in [STR] damage to one enemy. For 1 turn every attacking character gets 15x character's ATK as additional typeless bonus damage if you hit a Good/Great/Perfect",
+ specialName: "Fishman Karate, Midair Upwards Kick",
+ },
+ 1243: {// Fortnight Hack
+ captain: "Boosts ATK of Fighter and Powerhouse characters by 1.3x",
+ captainNotes: "Effect stacks, so Fighter/Powerhouse characters get 1.69x ATK",
+ special: "Deals 15x character's ATK in [INT] damage to all enemies. Changes own orb into [INT] and changes adjacent orbs into [G] orbs",
+ specialName:"Fishman karate, KO blow",
+ specialNotes: "#{gOrbs}"
+ },
+ 1244: {// Fortnight Hack
+ captain: "Boosts ATK of Fighter characters by 1.75x and the ATK of Powerhouse characters by 1.3x",
+ captainNotes: "Effect stacks, so Fighter/Powerhouse characters get 2.275x ATK",
+ special: "Deals 15x character's ATK in [INT] damage to all enemies. Changes own orb into [INT] and changes adjacent orbs into [G] orbs",
+ specialName:"Fishman karate, KO blow",
+ specialNotes: "#{gOrbs}"
+ },
+ 1245: {// Event Luffy
+ captain: "Boosts ATK of Fighter characters by 1.75x. If HP is below 10%, boosts ATK of Fighter characters by 3x instead.",
+ special: "Deals random [QCK] damage to all enemies, and boosts ATK of Fighter characters by 1.3x for 1 turn. If \"Light of a Firefly, Fire Daruma\" is used again in the same turn the special is activated in, boosts ATK of Fighter characters by 2x instead.",
+ specialName:"Gomu Gomu no Stamp Gatling",
+ specialNotes: "Firefly Light, Fiery Doll is Event Ace's special ability.",
+ },
+ 1246: {// Event Ace
+ captain: "Boosts ATK of Fighter characters by 1.2x",
+ special: "Reduces crew's current HP by 90%, deals 55x character's ATK in typeless damage to all enemies, and boosts ATK of Fighter characters by 1.3x for 1 turn. If \"Gomu Gomu no Stamp Gatling\" is used again in the same turn the special is activated in, boosts ATK of Fighter characters by 2x instead.",
+ specialName:"Firefly Light, Fiery Doll",
+ },
+ 1247: {// Event Ace
+ captain: "Boosts HP of Fighter characters by 1.2x and their ATK by 2.75x if they have a matching orb, by 2x otherwise",
+ special: "Reduces crew's current HP by 90%, deals 55x character's ATK in typeless damage to all enemies, and boosts ATK of Fighter characters by 1.3x for 1 turn. If \"Gomu Gomu no Stamp Gatling\" is used again in the same turn the special is activated in, boosts ATK of Fighter characters by 2x instead.",
+ specialName:"Firefly Light, Fiery Doll",
+ },
+ 1248: {// Kimono Marco
+ captain: "Boosts ATK of Fighter and Powerhouse characters by 1.3x",
+ captainNotes: "Ability stacks, so Fighter/Powerhouse characters gets ATK boosted by 1.69x",
+ special: "Recovers 3,000 HP and reduces damage received by 50% for 1 turn",
+ specialName:"Shining Daylight - Dayflower",
+ },
+ 1249: {// Kimono Marco
+ captain: "Boosts ATK of Fighter and Powerhouse characters by 1.6x",
+ captainNotes: "Ability stacks, so Fighter/Powerhouse characters gets ATK boosted by 2.56x",
+ special: "Recovers 3,000 HP and reduces damage received by 50% for 1 turn",
+ specialName:"Shining Daylight - Dayflower",
+ },
+ 1250: {// Coliseum Marco
+ captain: "Boosts ATK of Powerhouse characters by 1.5x and Recovers a variable amount of character's RCV in HP at the end of each turn depending on how many Powerhouse characters are on your team",
+ captainNotes: "1x Powerhouse: .5x RCV | 2x Powerhouse: .75x RCV | 3x Powerhouse: 1x RCV | 4x Powerhouse: 1.5x RCV | 5x Powerhouse: 2x RCV | 6x Powerhouse: 2.5x RCV",
+ special: [
+ {
+ "description": "Randomizes all orbs, and boosts the ATK of Powerhouse characters by 1.5x for 1 turn",
+ "cooldown": [ 21, 6 ],
+ },
+ {
+ "description": "Randomizes non-matching orbs, and boosts ATK of Powerhouse characters by 1.5x for 1 turn",
+ "cooldown": [ 24, 9 ],
+ },
+ ],
+ specialName: "Burning Vanguard",
+ },
+ 1251: {// Coliseum Marco
+ captain: "Boosts ATK of Powerhouse characters by 2x and Recovers a variable amount of character's RCV in HP at the end of each turn depending on how many Powerhouse characters are on your team",
+ captainNotes: "1x Powerhouse: .5x RCV | 2x Powerhouse: .75x RCV | 3x Powerhouse: 1x RCV | 4x Powerhouse: 1.5x RCV | 5x Powerhouse: 2x RCV | 6x Powerhouse: 2.5x RCV",
+ special: [
+ {
+ "description": "Randomizes all orbs, and boosts the ATK of Powerhouse characters by 1.5x for 1 turn",
+ "cooldown": [ 21, 6 ],
+ },
+ {
+ "description": "Randomizes non-matching orbs, and boosts ATK of Powerhouse characters by 1.5x for 1 turn",
+ "cooldown": [ 24, 9 ],
+ },
+ ],
+ specialName: "Burning Vanguard",
+ },
+ 1252: {// Coliseum Doma
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of [INT] characters by 2x",
+ special: "Changes adjacent orbs into [INT] orbs. Deals 20x character's ATK in [INT] damage to all enemies.",
+ specialName: "Reversed Twin Blades - Surprise Thrust",
+ sailor: "Reduces own Silence by 1 Turn"
+ },
+ 1253: {// Coliseum Shura
+ captain: "Boosts ATK of [DEX] characters by 2.25x if HP is above 99% at the start of the turn",
+ special: "For 1 turn, Perfects become harder to hit. If during that turn every unit scores a Perfect hit, boosts ATK of [DEX] characters by 1.75x in the following turn.",
+ specialName: "Angry Instigator",
+ },
+ 1254: {//FN Squard
+ captain: "Boost ATK of Striker characters by 2.5x until the first hit other than Perfect. Reduce crew's current HP by 5% at the end of each turn.",
+ special: "Deals 10x his ATK to one enemy, reduces crews current HP by 30% and reduces enemies defense by a certain amount for one turn",
+ specialName: "Sword Attack Without Hesitation",
+ sailor: "Reduces his own Numbness by 1 turn"
+ },
+ 1255: {//FN DeCalvan
+ captain: "Boosts ATK of all characters by 1.5x after the 11th hit in the chain, by 2x after the 16th hit, by 2.5x after the 22nd hit",
+ special: "For 1 turn, makes Perfects slightly easier to hit and amplifies the effect of orbs by 1.5x",
+ sailor: "When HP is below 30% at the start of the turn, boost base ATK of Fighters by 40",
+ specialName: "Large Fleet Commander",
+ },
+ 1256: {//FN Whitey Bay
+ captain: "Boosts ATK of Slasher and Driven characters by 2x and reduces their RCV by 90%",
+ special: "Shuffle non-matching orbs on Slashers and Driven characters, boost Atk against enemies with increased defense by 1.3x for 1 turn",
+ sailor: "Boosts ATK and RCV of Driven characters by 10",
+ specialName: "Icebreaker Breakthrough Force",
+ },
+ 1257: {//Young Whitebeard
+ captain: "Boosts ATK of all characters by 2x if HP is below 50% at the start of the turn",
+ special: [
+ {
+ "description": "Cuts the current HP of each enemy by 10%",
+ "cooldown": [ 23, 11 ],
+ },
+ {
+ "description": "Cuts the current HP of each enemy by 20%",
+ "cooldown": [ 28, 16 ],
+ },
+ {
+ "description": "Cuts the current HP of each enemy by 40%",
+ "cooldown": [ 36, 24 ],
+ },
+ ],
+ specialName: "Earth Shattering Fist",
+ },
+ 1258: {//Young Whitebeard Evolved
+ captain: "Boosts ATK of all characters by 2.5x if HP is below 50% at the start of the turn",
+ special: [
+ {
+ "description": "Cuts the current HP of each enemy by 10%",
+ "cooldown": [ 23, 11 ],
+ },
+ {
+ "description": "Cuts the current HP of each enemy by 20%",
+ "cooldown": [ 28, 16 ],
+ },
+ {
+ "description": "Cuts the current HP of each enemy by 40%",
+ "cooldown": [ 36, 24 ],
+ },
+ ],
+ specialName: "Earth Shattering Fist",
+ },
+ 1259: {//Young Doflamingo
+ captain: "Boosts ATK of Driven characters by 2.5x",
+ special: "Deals 25x character's ATK in typeless damage to all enemies. For 3 turns, makes [STR], [DEX], [QCK], [PSY], and [INT] orbs \"beneficial\" for Driven characters",
+ specialNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs while retaining their original function.",
+ specialName: "Five Color Strings (Goshikito)",
+ },
+ 1260: {//Young Doflamingo
+ captain: "Reduces cooldown of Driven specials by 1 turn at the start of the fight. Boosts ATK of Driven characters by 2.5x",
+ special: "Deals 25x character's ATK in typeless damage to all enemies. For 3 turns, makes [STR], [DEX], [QCK], [PSY], and [INT] orbs \"beneficial\" for Driven characters",
+ specialNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs while retaining their original function.",
+ specialName: "Five Color Strings (Goshikito)",
+ },
+ 1261: {//Young Senor Pink
+ captain: "Boosts ATK of Free Spirit characters by 1.5x. Heals for .75x his RCV at the end of the turn each time you hit a Perfect.",
+ special: "Randomizes all orbs. Boosts the Color Affinity of Free Spirit and Shooter characters by 1.5x for 1 turn",
+ specialNotes: "#{colorAffinity : 1.5}",
+ specialName: "Blood and Gunpowder of the Underground Family",
+ },
+ 1262: {//Young Senor Pink
+ captain: "Boosts ATK of Free Spirit characters by 1.75x. Heals for .75x his RCV at the end of the turn each time you hit a Perfect.",
+ special: "Randomizes all orbs. Boosts the Color Affinity of Free Spirit and Shooter characters by 1.5x for 1 turn",
+ specialNotes: "#{colorAffinity : 1.5}",
+ specialName: "Blood and Gunpowder of the Underground Family",
+ },
+ 1263: {//Young Vergo
+ captain: "Boosts ATK of characters with cost 20 or less by 2.5x",
+ special: "Deals 20,000 fixed damage to one enemy. Boosts own ATK by 2x for 2 turns",
+ specialName: "Iron Leg Sanctions",
+ },
+ 1264: {//Young Vergo
+ captain: "Boosts ATK of characters with cost 30 or less by 2.5x",
+ special: "Deals 20,000 fixed damage to one enemy. Boosts own ATK by 2x for 2 turns",
+ specialName: "Iron Leg Sanctions",
+ },
+ 1265: {//Kimono Ace
+ captain: "Boosts ATK of Shooter characters by 2x",
+ special: "Recovers 3,000 HP and boosts the ATK of Free Spirit characters by 1.75x for 1 turn",
+ specialName: "Looking to the Full Moon",
+ },
+ 1266: {//Kimono Ace Evo
+ captain: "Boosts ATK of Shooter characters by 2.5x",
+ special: "Recovers 3,000 HP and boosts the ATK of Free Spirit characters by 1.75x for 1 turn",
+ specialName: "Looking to the Full Moon",
+ },
+ 1267: {//Legend Blackbeard
+ captain: "Boosts the ATK of all characters by 2.75x and their HP by 1.5x if you have a Striker, Shooter, Fighter, and Slasher on your crew. Attacks will ignore defensive barriers and buffs.",
+ captainNotes: "Attacks are still affected by DEF value. DEF boost buffs (Blue shield) still reduce your damage, but Damage Negating (Yellow shield) and % Damage Reduction (Rainbow shield) are ignored). Multiple class characters count as a character of each class. Enemy attacks will go through YOUR defensive buffs.",
+ special: "Cuts the current HP of each enemy by 30%. If Blackbeard is a captain, this ability will ignore damage negating abilities and barriers",
+ specialNotes: "If Blackbeard is not a captain, the effect works exactly like Whitebeard special and is affected by barriers.",
+ specialName: "World Shaking Impact",
+ },
+ 1268: {//Legend Blackbeard
+ captain: "Boosts the ATK of all characters by 2.75x and their HP by 1.5x if you have a Striker, Shooter, Fighter, and Slasher on your crew. Attacks will ignore defensive barriers and buffs.",
+ captainNotes: "Attacks are still affected by DEF value. DEF boost buffs (Blue shield) still reduce your damage, but Damage Negating (Yellow shield) and % Damage Reduction (Rainbow shield) are ignored). Multiple class characters count as a character of each class. Enemy attacks will go through YOUR defensive buffs.",
+ special: "Cuts the current HP of each enemy by 30%. If Blackbeard is a captain, this ability will ignore damage negating abilities and barriers",
+ specialNotes: "If Blackbeard is not a captain, the effect works exactly like Whitebeard special and is affected by barriers.",
+ specialName: "World Shaking Impact",
+ },
+ 1269: {//Laffitte
+ captain: "Recovers 3x character's RCV in HP at the end of each turn. Deals 3x character's ATK in [DEX] damage to all enemies at the end of each turn.",
+ special: "Reduces Bind and Despair duration by 2 turns. Makes Badly Matching and [BLOCK] orbs not reduce damage for 4 turns",
+ specialNotes: "Ex. A STR character with a QCK orb will still deal regular damage",
+ sailor: "Boosts ATK of all characters by 100 if your captain is a Driven character",
+ specialName: "Horrifying Suggestion",
+ },
+ 1270: {//Laffitte
+ captain: "Recovers 3x character's RCV in HP at the end of each turn. Deals 7x character's ATK in [DEX] damage to all enemies at the end of each turn.",
+ special: "Reduces Bind and Despair duration by 2 turns. Makes Badly Matching and [BLOCK] orbs not reduce damage for 4 turns",
+ specialNotes: "Ex. A STR character with a QCK orb will still deal regular damage",
+ sailor: "Boosts ATK of all characters by 100 if your captain is a Driven character",
+ specialName: "Horrifying Suggestion",
+ },
+ 1271: {//Van Augur
+ captain: "Boosts ATK of Shooter characters by 2x",
+ special: "Changes orbs in the top row into Matching orbs. For Shooter characters, amplifies the effect of orbs by 1.75x for 1 turn",
+ sailor: "Reduces duration of Blindness by 5 turns",
+ specialName: "Other Side of Fate",
+ },
+ 1272: {//Van Augur Evo
+ captain: "Reduces cooldown of Shooter specials by 1 turn at the start of the fight. Boosts ATK of Shooter characters by 2.5x.",
+ special: "Changes orbs in the top row into Matching orbs. For Shooter characters, amplifies the effect of orbs by 1.75x for 1 turn",
+ sailor: "Reduces duration of Blindness by 5 turns",
+ specialName: "Other Side of Fate",
+ },
+ 1273: {//Jesus Burgess
+ captain: "Boosts ATK of Fighter and Powerhouse characters by 1.5x and their HP by 1.2",
+ captainNotes: "Boosts stack, so a Fighter/Powerhouse character gets 2.25x ATK and 1.44x HP",
+ special: "Deals large [STR] damage to all enemies. Boosts ATK of Fighter characters by 1.5x for 5 turns",
+ sailor: "Boosts HP of all characters by 75",
+ specialName: "Champion of the Wild Roar",
+ },
+ 1274: {//Jesus Burgess Evo
+ captain: "Boosts ATK of Fighter and Powerhouse characters by 1.6x and their HP by 1.2x",
+ captainNotes: "Boosts stack, so a Fighter/Powerhouse character gets 2.56x ATK and 1.44x HP",
+ special: "Deals large [STR] damage to all enemies. Boosts ATK of Fighter characters by 1.5x for 5 turns",
+ sailor: "Boosts HP of all characters by 75",
+ specialName: "Champion of the Wild Roar",
+ },
+ 1275: {//Shiliew
+ captain: "Boosts ATK and HP of Slasher characters by 1.5x",
+ special: "For each enemy, has a small chance to instantly defeat that enemy.",
+ specialNotes: "About 25% chance of killing ANY character. Cannot be reset by exiting, but can try for different kills by continuing attack.",
+ sailor: "Completely resists Silence on this character",
+ specialName: "Handling Hell",
+ },
+ 1276: {//Shiliew Evo
+ captain: "Boosts ATK and HP of Slasher characters by 2x",
+ special: "For each enemy, has a small chance to instantly defeat that enemy.",
+ specialNotes: "About 25% chance of killing ANY character. Cannot be reset by exiting, but can try for different kills by continuing attack.",
+ sailor: "Completely resists Silence on this character",
+ specialName: "Handling Hell",
+ },
+ 1277: {//Doc Q
+ captain: "Reduces RCV of all characters by 99%. Boosts ATK of Slasher and Striker characters by 2.25x if HP is above 99% at the start of the turn",
+ special: "Reduces crew's current HP by 10%. Changes [BLOCK], [TND], and [RCV] orbs on Slasher and Striker characters into Matching Orbs.",
+ sailor: "Boosts amount healed from [RCV] orbs by 150 each",
+ specialName: "Reaping of Desperate Lives",
+ },
+ 1278: {//Doc Q Evo
+ captain: "Reduces RCV of all characters by 99%. Boosts ATK of Slasher and Striker characters by 2.75x if HP is above 99% at the start of the turn",
+ special: "Reduces crew's current HP by 10%. Changes [BLOCK], [TND], and [RCV] orbs on Slasher and Striker characters into Matching Orbs.",
+ sailor: "Boosts amount healed from [RCV] orbs by 150 each",
+ specialName: "Reaping of Desperate Lives",
+ },
+ 1279: {//John Giant
+ captain: "Boosts ATK and HP of Slasher characters by 1.5x",
+ special: "Reduces damage received in the next turn by 50% if the special is activated with less than 50% health remaining",
+ specialName: "Manifesto to the Weak",
+ },
+ 1280: {//Marineford Aokiji
+ captain: "Boosts ATK of [PSY] characters by 2.5x",
+ special: "Deals 10,000 fixed damage to all enemies and locks all orbs for 1 turn",
+ specialName: "Ice Chunks - Trident",
+ },
+ 1281: {//Marineford Garp
+ captain: "Boosts ATK of Fighter characters by 2.25x and reduces damage received by 10%",
+ special: "Deals 25x character's ATK in [STR] damage to one enemy that will ignore damage negating abilities and barriers.",
+ specialNotes: "Damage that ignores damage negating abilities and barriers is similar to 6* Blackbeard's special when he is captain",
+ specialName: "Fist of Love - Falling Fortress",
+ },
+ 1282: {//Marineford Sengoku
+ captain: "Boosts ATK of Cerebral characters by 2.5x",
+ special: "Reduces cooldown of all specials by 1 turn. Boosts the ATK of all characters by 1.2x and amplifies the effect of orbs by 1.2x for 1 turn",
+ specialName: "Encircling Wall around Marineford Bay",
+ },
+ 1283: {//Marineford Akainu
+ captain: "Boosts ATK of Driven characters by 2.5x",
+ special: "Deals 35x character's ATK in [INT] damage to one enemy. Boosts ATK of Driven characters by 1.5x for 1 turn",
+ specialName: "Dark Dog",
+ },
+ 1284: {//Wild Luffy
+ captain: "Boosts ATK of Striker characters by 1.5x and their HP by 1.2x",
+ special: "Reduces Bind and Silence duration by 3 turns. Randomizes own orb. (Including [BLOCK] orb)",
+ sailor: "Reduces Silence duration against this character by 3 turns",
+ specialName: "Wild Hunt",
+ },
+ 1285: {//Wild Luffy Evolved
+ captain: "Boosts ATK of Striker characters by 1.5x and their HP by 1.25x. After scoring 3 Perfects in a row, boosts ATK of Striker characters by 3.375x instead.",
+ special: "Reduces Bind and Silence duration by 3 turns. Randomizes Non-Matching orbs. (Including [BLOCK] orb)",
+ sailor: "Reduces Silence duration against this character by 3 turns",
+ specialName: "Wild Hunt",
+ },
+ 1286: {//Kid Baby 5
+ captain: "Boosts ATK and RCV of [PSY] characters by 1.3x",
+ special: "Cuts the current HP of each enemy by 10%. Boosts ATK of Shooter characters by 1.5x for 1 turn",
+ specialName: "Handgun Legs",
+ },
+ 1287: {//Kid Baby 5
+ captain: "Boosts ATK and RCV of [PSY] characters by 1.5x",
+ special: "Cuts the current HP of each enemy by 10%. Boosts ATK of Shooter characters by 1.5x for 1 turn",
+ specialName: "Handgun Legs",
+ },
+ 1288: {//Kid Law
+ captain: "Boosts ATK of Driven characters by 2.5x, reduces crew's current HP by 10% at the end of each turn, reduces his own ATK multiplier by 0.1x at the end of each turn",
+ captainNotes: "His ATK multiplier will be 2.5x on the first turn, 2.4x on the second, 2.3x on the third and so on. The reduction stops once the multiplier is 1.0x. The multiplier affects all Driven characters. You will not die to the HP reduction",
+ special: "Reduces cooldown of Driven specials by 1 turn. If during that turn every unit scores a Perfect hit, reduces cooldown of Driven specials by 1 turn.",
+ specialName: "Outcome of Sparta",
+ },
+ 1289: {//Kid Law
+ captain: "Boosts ATK of Driven characters by 2.75x, reduces crew's current HP by 10% at the end of each turn, reduces his own ATK multiplier by 0.1x at the end of each turn",
+ captainNotes: "His ATK multiplier will be 2.75x on the first turn, 2.65x on the second, 2.55x on the third and so on. The reduction stops once the multiplier is 1.0x. The multiplier affects all Driven characters. You will not die to the HP reduction",
+ special: "Reduces cooldown of Driven specials by 1 turn. If during that turn every unit scores a Perfect hit, reduces cooldown of Driven specials by 1 turn.",
+ specialName: "Outcome of Sparta",
+ },
+ 1290: {//Kid Buffalo
+ captain: "Recovers 500 HP at the end of each turn",
+ special: "Changes own orb into [INT], and Captain orb into [BOMB]",
+ specialName: "Rude Prank",
+ },
+ 1291: {//Lao G, Coliseum
+ captain: "Boosts ATK of Driven characters by 1.75x",
+ special: "Changes [PSY], [INT], [RCV], and [TND] orbs into [G] orbs. Locks orbs for 1 turn. If during that turn every unit scores a Perfect hit, changes [G] orbs into Matching Orbs",
+ specialName: "Lower Back Pain Stance - The Eyes of Blight Impact",
+ },
+ 1292: {//Lao G, Coliseum
+ captain: "Boosts ATK of Driven characters by 2.5x if they have a matching orb, by 2x otherwise",
+ special: "Changes [PSY], [INT], [RCV], and [TND] orbs into [G] orbs. Locks orbs for 1 turn. If during that turn every unit scores a Perfect hit, changes [G] orbs into Matching Orbs",
+ specialName: "Lower Back Pain Stance - The Eyes of Blight Impact",
+ },
+ 1293: {//Coliseum Sandersonia
+ captain: "Boosts ATK of Fighter characters by 1.75x, deals 2 times the damage received in the previous turn in [PSY] damage to all enemies at the end of each turn",
+ special: [
+ {
+ "description": "Changes Captain orb into Matching, and reduces damage received from [PSY] enemies by 40%",
+ "cooldown": [ 21, 11 ],
+ },
+ {
+ "description": "Changes Captain orb into Matching, and reduces damage received from [PSY] enemies by a variable factor.",
+ "cooldown": [ 26, 16 ],
+ },
+ ],
+ specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 50% HP, the multiplier used is 50%; between 50% and 10%, it's 80%; below 10% HP, it's 100%.",
+ specialName: "Snake Dance",
+ },
+ 1294: {//Coliseum Sandersonia
+ captain: "Boosts ATK of Powerhouse characters by 2x, deals 4 times the damage received in the previous turn in [PSY] damage to all enemies at the end of each turn",
+ special: [
+ {
+ "description": "Changes Captain orb into Matching, and reduces damage received from [PSY] enemies by 40%",
+ "cooldown": [ 21, 11 ],
+ },
+ {
+ "description": "Changes Captain orb into Matching, and reduces damage received from [PSY] enemies by a variable factor.",
+ "cooldown": [ 26, 16 ],
+ },
+ ],
+ specialNotes: "The exact multiplier used is chosen based on the crew's current HP at the time the special is activated: above 50% HP, the multiplier used is 50%; between 50% and 10%, it's 80%; below 10% HP, it's 100%.",
+ specialName: "Snake Dance",
+ },
+ 1295: {//Halloween Kalifa
+ captain: "Boosts ATK and RCV of [STR] characters by 1.5x",
+ special: "Reduces duration of Paralysis by 3 turns, removes poison, and reduces the defense of all enemies by 100% for 1 turn",
+ specialName: "Halloween Kalifa Special",
+ },
+ 1296: {//Halloween Kalifa
+ captain: "Boosts ATK of [STR] characters by 2x and their RCV by 1.5x",
+ special: "Reduces duration of Paralysis by 3 turns, removes poison, and reduces the defense of all enemies by 100% for 1 turn",
+ specialName: "Halloween Kalifa Special",
+ },
+ 1297: {//Akainu
+ captain: "Boosts ATK by 2.5x following a chain of [STR] > [STR] > [STR] attacks no lower than Good",
+ special: "Deals 50x character's ATK in [STR] damage to all enemies. Changes orbs for [STR] characters into [STR] orbs. Boosts the Color Affinity of [STR] characters by 1.75x for 1 turn",
+ specialNotes: "#{colorAffinity : 1.75}",
+ specialName: "Great Eruption",
+ },
+ 1298: {//Akainu
+ captain: "Boosts ATK by 3x following a chain of [STR] > [STR] > [STR] attacks no lower than Good",
+ special: "Deals 50x character's ATK in [STR] damage to all enemies. Changes orbs for [STR] characters into [STR] orbs. Boosts the Color Affinity of [STR] characters by 1.75x for 1 turn",
+ specialNotes: "#{colorAffinity : 1.75}",
+ specialName: "Great Eruption",
+ },
+ 1299: {//Halloween Rebecca
+ captain: "Boosts ATK and RCV of [INT] characters by 1.2x",
+ special: "Recovers 3,000 HP and boosts ATK of [INT] characters by 1.75x for 1 turn",
+ specialName: "Driving Away Evil Spirits of Sin - Cat Pose",
+ },
+ 1300: {//Halloween Rebecca
+ captain: "Boosts ATK and RCV of [INT] characters by 1.5x",
+ special: "Recovers 3,000 HP and boosts ATK of [INT] characters by 1.75x for 1 turn",
+ specialName: "Driving Away Evil Spirits of Sin - Cat Pose",
+ },
+ 1301: {//Jailbreak Buggy
+ captain: "Boosts ATK of Slasher characters by 1.75x",
+ special: "Reduces crew's HP to 1, empties all slots, and deals 30x character's ATK in [QCK] damage to all enemies",
+ specialName: "Special Muggy Ball",
+ },
+ 1302: {//Jailbreak Buggy
+ captain: "Boosts ATK of Slasher characters by 1.75x and boosts ATK of Driven characters by 1.5x",
+ captainNotes: "The bonus is cumulative. Slasher Driven characters get a 2.625x bonus.",
+ special: "Reduces crew's HP to 1, empties all slots, and deals 30x character's ATK in [QCK] damage to all enemies",
+ specialName: "Special Muggy Ball",
+ },
+ 1303: {//Jailbreak Mr. 3
+ captain: "Boosts ATK of Cerebral characters by 1.5x. If you don't attack with Mr. 3, reduces damage received by 10% for that turn.",
+ special: "Reduces damage received by 60% for 2 turns",
+ specialName: "Extra Large Candle Wall",
+ },
+ 1304: {//Jailbreak Mr. 3
+ captain: "Boosts ATK of Cerebral characters by 2x. If you don't attack with Mr. 3, reduces damage received by 10% for that turn.",
+ special: "Reduces damage received by 60% for 2 turns",
+ specialName: "Extra Large Candle Wall",
+ },
+ 1305: {//Halloween Sugar
+ captain: "Boosts ATK of Cerebral characters by 1.3x and recovers 500 HP at the end of each turn",
+ special: "Changes Badly Matching, [BLOCK], and [BOMB] orbs into [G] orbs. Reduces Special Cooldown of 1 character by 1 turn",
+ specialName: "Aggressive 'Trick-Or-Treat'",
+ },
+ 1306: {//Halloween Sugar
+ captain: "Boosts ATK of Cerebral characters by 1.75x and recovers 1,000 HP at the end of each turn",
+ special: "Changes Badly Matching, [BLOCK], and [BOMB] orbs into [G] orbs. Reduces Special Cooldown of 1 character by 1 turn",
+ specialName: "Aggressive 'Trick-Or-Treat'",
+ },
+ 1307: {//Halloween Bartolomeo
+ captain: "Boosts ATK of Driven characters by 1.75x. If you don't attack with Bartolomeo, reduces damage received by 10% for that turn.",
+ special: "Reduces damage received by 50% for 1 turn. If during that turn every unit scores a Perfect hit, reduces damage received by 80% in the following turn",
+ specialName: "Vulgar Provocation",
+ },
+ 1308: {//Halloween Bartolomeo
+ captain: "Boosts ATK of Driven characters by 2x. If you don't attack with Bartolomeo, reduces damage received by 20% for that turn.",
+ special: "Reduces damage received by 50% for 1 turn. If during that turn every unit scores a Perfect hit, reduces damage received by 80% in the following turn",
+ specialName: "Vulgar Provocation",
+ },
+ 1309: {//Coliseum Kinemon
+ captain: "Boosts ATK of Free Spirit characters by 2x, recovers 1x character's RCV in HP at the end of each turn",
+ special: "Reduces Special Cooldown of Slasher and Free Spirit characters by 1 turn and if HP is above 70%, changes adjacent orbs into Matching Orbs",
+ specialName: "Poof",
+ },
+ 1310: {//Coliseum Kinemon
+ captain: "Boosts ATK of Free Spirit characters by 2.5x, recovers 2x character's RCV in HP at the end of each turn",
+ special: "Reduces Special Cooldown of Slasher and Free Spirit characters by 1 turn and if HP is above 70%, changes adjacent orbs into Matching Orbs",
+ specialName: "Poof",
+ },
+ 1311: {//Coliseum Marigold
+ captain: "Boosts ATK and HP of Powerhouse characters by 1.5x",
+ special: "Deals 20x character's ATK in [INT] damage to all enemies. Reduces enemy Damage Threshold timers by 1 turn",
+ specialNotes: "Damage Threshold is the buff enemies gain that grealy reduces damage taken over a certain amount",
+ specialName: "King Cobra Machetes",
+ },
+ 1312: {//Coliseum Marigold
+ captain: "Boosts ATK and HP of Powerhouse characters by 1.75x",
+ special: "Deals 20x character's ATK in [INT] damage to all enemies. Reduces enemy Damage Threshold timers by 1 turn",
+ specialNotes: "Damage Threshold is the buff enemies gain that grealy reduces damage taken over a certain amount",
+ specialName: "King Cobra Machetes",
+ },
+ 1313: {//Akainu
+ captain: "Boosts ATK by 2.25x. If they have a [STR] orb, boosts ATK by an additional 1.75x. Boosts chances of getting [STR] orbs",
+ captainNotes: "If a character has a [STR] orb, regardless of type, they will have a 3.9375x ATK boost",
+ special: "Deals large typeless damage to all enemies and randomizes non-[STR] orbs. Boosts ATK of characters with cost 50 or higher by 1.75x for 2 turns",
+ specialName: "Meteor Volcano",
+ },
+ 1314: {//Akainu
+ captain: "Boosts ATK by 2.25x. If they have a [STR] orb, boosts ATK by an additional 1.75x. Boosts chances of getting [STR] orbs",
+ captainNotes: "If a character has a [STR] orb, regardless of type, they will have a 3.9375x ATK boost",
+ special: "Deals large typeless damage to all enemies and randomizes non-[STR] orbs. Boosts ATK of characters with cost 50 or higher by 1.75x for 2 turns",
+ specialName: "Meteor Volcano",
+ },
+ 1315: {//Coby
+ captain: "Boosts ATK by 2x after the 2nd Perfect and by 3x after the 5th Perfect.",
+ special: [
+ {
+ "description": "If HP is below 3,000, reduces No Healing debuff by 1 turn. Recovers 3x character's RCV in HP",
+ "cooldown": [ 15, 9 ],
+ },
+ {
+ "description": "If HP is below 3,000, reduces No Healing debuff by 3 turns. Recovers 6x character's RCV in HP",
+ "cooldown": [ 20, 14 ],
+ },
+ {
+ "description": "If HP is below 3,000, removes No Healing debuff. Recovers 13x character's RCV in HP",
+ "cooldown": [ 24, 18 ],
+ },
+ ],
+ specialNotes: "No Healing debuff completely stops healing abilities. This is the debuff used in Akainu raid",
+ sailor: "Reduces duration of Blindness by 5 turns",
+ specialName: "Echoing Cry of the Soul",
+ },
+ 1316: {//Coby
+ captain: "Boosts ATK by 2.5x after the 2nd Perfect, 2.75x after the 3rd Perfect, 3x after the 4th Perfect, and by 3.5x after the 5th Perfect.",
+ special: [
+ {
+ "description": "If HP is below 3,000, reduces No Healing debuff by 1 turn. Recovers 3x character's RCV in HP",
+ "cooldown": [ 15, 9 ],
+ },
+ {
+ "description": "If HP is below 3,000, reduces No Healing debuff by 3 turns. Recovers 6x character's RCV in HP",
+ "cooldown": [ 20, 14 ],
+ },
+ {
+ "description": "If HP is below 3,000, removes No Healing debuff. Recovers 13x character's RCV in HP",
+ "cooldown": [ 24, 18 ],
+ },
+ ],
+ specialNotes: "No Healing debuff completely stops healing abilities. This is the debuff used in Akainu raid",
+ sailor: "Reduces duration of Blindness by 5 turns",
+ specialName: "Echoing Cry of the Soul",
+ },
+ 1317: {//Garp
+ captain: "Boosts ATK of [STR] and [PSY] characters by 2x",
+ special: "Deals 30x character's ATK in [STR] damage to all enemies that will ignore damage negating abilities and barriers. Delays all enemies for 1 turn. Reduces the defense of all enemies by 80% for 1 turn.",
+ specialNotes: "Damage that ignores damage negating abilities and barriers is similar to 6* Blackbeard's special when he is captain",
+ sailor: "Boosts ATK of all characters by 75",
+ specialName: "Super Large Iron Ball",
+ },
+ 1318: {//Garp
+ captain: "Boosts ATK of [STR] and [PSY] characters by 2.5x",
+ special: "Deals 30x character's ATK in [STR] damage to all enemies that will ignore damage negating abilities and barriers. Delays all enemies for 1 turn. Reduces the defense of all enemies by 80% for 1 turn.",
+ specialNotes: "Damage that ignores damage negating abilities and barriers is similar to 6* Blackbeard's special when he is captain",
+ sailor: "Boosts ATK of all characters by 75",
+ specialName: "Super Large Iron Ball",
+ },
+ 1319: {//Lady Tsuru
+ captain: "Heals for 1x her RCV at the end of the turn each time you hit a Good. Heals for .1x her RCV at the end of the turn each time you hit a Perfect",
+ special: "Deals 10 hits of random [QCK] damage to random enemies. Boosts ATK of all characters by 1.5x for 1 turn",
+ specialNotes: "#{randomHits : 10} #{random : ??? : ??? : for each hit}",
+ sailor: "Reduces duration of Paralysis by 1 turn",
+ specialName: "A Decree of the Veteran",
+ },
+ 1320: {//Lady Tsuru
+ captain: "Heals for 1.5x her RCV at the end of the turn each time you hit a Good. Heals for .1x her RCV at the end of the turn each time you hit a Perfect",
+ special: "Deals 10 hits of random [QCK] damage to random enemies. Boosts ATK of all characters by 1.5x for 1 turn",
+ specialNotes: "#{randomHits : 10} #{random : ??? : ??? : for each hit}",
+ sailor: "Reduces duration of Paralysis by 1 turn",
+ specialName: "A Decree of the Veteran",
+ },
+ 1321: {//Momonga
+ captain: "Boosts the ATK of Cerebral and Slasher characters by 2.25x and reduces damage taken by 10% if you have a [STR], [DEX], [QCK], [INT], and [PSY] character on your crew.",
+ special: "Deals 15x character's ATK as [DEX] damage to all enemies. Boosts ATK against delayed enemies by 1.5x for 2 turns",
+ specialName: "Front Line Dissection",
+ sailor: "Boosts ATK of Slasher and Cerebral characters by 75 if your captain is a Cerebral character",
+ },
+ 1322: {//Momonga
+ captain: "Boosts the ATK of Cerebral and Slasher characters by 2.5x and reduces damage taken by 10% if you have a [STR], [DEX], [QCK], [INT], and [PSY] character on your crew.",
+ special: "Deals 15x character's ATK as [DEX] damage to all enemies. Boosts ATK against delayed enemies by 1.5x for 2 turns",
+ specialName: "Front Line Dissection",
+ sailor: "Boosts ATK of Slasher and Cerebral characters by 75 if your captain is a Cerebral character",
+ },
+ 1323: {//Onigumo
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of Slasher and Driven characters by 1.3x",
+ captainNotes: "The bonus is cumulative. Slasher + Driven characters get a 1.69x bonus.",
+ special: "Randomize [RCV], [TND], and [BOMB] orbs. Makes [STR], [DEX], and [QCK] orbs \"beneficial\" to Driven and Slasher characters for 2 turns",
+ specialNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs while retaining their original function.",
+ specialName: "Onigumo of Dismantling Swordsmanship",
+ sailor: "Reduces Paralysis for 5 turns for himself"
+ },
+ 1324: {//Onigumo
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight, boosts ATK of Slasher and Driven characters by 1.6x",
+ captainNotes: "The bonus is cumulative. Slasher + Driven characters get a 2.56x bonus.",
+ special: "Randomize [RCV], [TND], and [BOMB] orbs. Makes [STR], [DEX], and [QCK] orbs \"beneficial\" to Driven and Slasher characters for 2 turns",
+ specialNotes: "\"Beneficial\" orbs grant the same ATK boost as matching orbs while retaining their original function.",
+ specialName: "Onigumo of Dismantling Swordsmanship",
+ sailor: "Reduces Paralysis for 5 turns for himself"
+ },
+ 1325: {//Halloween Corazon
+ captain: "Recovers 3x character's RCV in HP at the end of each turn",
+ special: "If HP is above 99%, changes [STR], [DEX], and [QCK] orbs into Matching orbs for Cerebral and Free Spirit characters",
+ specialName: "Amulet Flame",
+ },
+ 1326: {//Halloween Corazon
+ captain: "Boosts ATK by 1.3x and recovers 4x character's RCV in HP at the end of each turn",
+ special: "If HP is above 99%, changes [STR], [DEX], and [QCK] orbs into Matching orbs for Cerebral and Free Spirit characters",
+ specialName: "Amulet Flame",
+ },
+ 1327: {//Fornight Leo
+ captain: "Boost ATK of characters with cost 20 or less by 2x",
+ special: [
+ {
+ "description": "Deals 3x character's ATK as [DEX] damage to one enemy, change own orb into [DEX]",
+ "cooldown": [ 11, 4 ],
+ },
+ {
+ "description": "Deal 15x character's ATK as [DEX] damage to one enemy, changes own and friend's orb into Matching orbs",
+ "cooldown": [ 19, 12 ],
+ }
+ ],
+ specialName: "Tail Hammer",
+ },
+ 1328: {//Fornight Leo
+ captain: "Boost ATK of characters with cost 20 or less by 2.5x",
+ special: [
+ {
+ "description": "Deals 3x character's ATK as [DEX] damage to one enemy, change own orb into [DEX]",
+ "cooldown": [ 11, 4 ],
+ },
+ {
+ "description": "Deal 15x character's ATK as [DEX] damage to one enemy, changes own and friend's orb into Matching orbs",
+ "cooldown": [ 19, 12 ],
+ }
+ ],
+ specialName: "Tail Hammer",
+ },
+ 1329: {//Wicca
+ captain: "Reduces cooldown of Fighter and Free Spirit specials by 1 turn at the start of the fight. Gives chance of duplicating a drop upon completion of the island.",
+ captainNotes: "Does not work if she was not your captain upon starting the island. Stacks with other addional drop captains, giving you two chances of getting an extra drop.",
+ special: [
+ {
+ "description": "Deals 6 fixed damage to all enemies. Randomizes orbs of upper row characters",
+ "cooldown": [ 9, 3 ],
+ },
+ {
+ "description": "Deals 15 fixed damage to all enemies. Recovers 3x character's RCV in HP",
+ "cooldown": [ 11, 5 ],
+ },
+ {
+ "description": "Deals 300 fixed damage to all enemies. Boosts the Color Affinity of Fighters and Free Spirit characters by 1.25x",
+ "cooldown": [ 16, 10 ],
+ },
+ ],
+ specialName: "The Work of Fairies",
+ specialNotes: "#{colorAffinity : 1.25}",
+ },
+ 1330: {//Gancho
+ captain: "Boosts ATK of Striker characters by 1.5x and recovers 2x character's RCV in HP at the end of each turn",
+ special: "Switches orbs between slots twice. Makes Badly Matching and [BLOCK] orbs not reduce damage for 2 turns",
+ specialName: "Tonta Knowledge",
+ },
+ 1331: {//Mansherry
+ captain: "Recovers 2x character's RCV in HP at the end of each turn",
+ special: [
+ {
+ "description": "Reduces Bind duration for one character by 3 turns. Recovers 7x character's RCV in HP.",
+ "cooldown": [ 18, 11 ],
+ },
+ {
+ "description": "Reduces Bind duration for one character by 7 turns. Recovers 15x character's RCV in HP.",
+ "cooldown": [ 24, 17 ],
+ },
+ ],
+ specialName: "Tears of Healing",
+ },
+ 1332: {//Mansherry
+ captain: "Recovers 3x character's RCV in HP at the end of each turn",
+ special: [
+ {
+ "description": "Reduces Bind duration for one character by 3 turns. Recovers 7x character's RCV in HP.",
+ "cooldown": [ 18, 11 ],
+ },
+ {
+ "description": "Reduces Bind duration for one character by 7 turns. Recovers 15x character's RCV in HP.",
+ "cooldown": [ 24, 17 ],
+ },
+ ],
+ specialName: "Tears of Healing",
+ },
+ 1333: {//Kabu
+ captain: "Boosts ATK of [STR] and Powerhouse characters by 1.4x",
+ captainNotes: "The bonus is cumulative. [STR] Powerhouse characters get a 1.96x bonus.",
+ special: "Slightly boosts chances of getting [STR] orbs and boosts own ATK by 1.2x for 2 turns",
+ specialName: "Yellow Kabu Squad",
+ },
+ 1334: {//Bian
+ captain: "Boosts ATK of [DEX] and Free Spirit characters by 1.4x",
+ captainNotes: "The bonus is cumulative. [DEX] Free Spirit characters get a 1.96x bonus.",
+ special: "Poisons all enemies and randomizes all orbs",
+ specialName: "Pink Bee Squad",
+ },
+ 1335: {//Wedding Sabo
+ captain: "Reduces cooldown of all specials by 2 turns at the start of the fight. Boosts ATK of Free Spirit characters by 1.5x.",
+ special: "Changes Friend Captain orb into matching. Adds .5x to Chain multiplier for 1 turn",
+ specialName: "Gentleman's Welcome",
+ },
+ 1336: {//Wedding Sabo
+ captain: "Reduces cooldown of all specials by 3 turns at the start of the fight. Boosts ATK of Free Spirit characters by 2x.",
+ special: "Changes Friend Captain orb into matching. Adds .5x to Chain multiplier for 1 turn",
+ specialName: "Gentleman's Welcome",
+ },
+ 1337: {//Kanjuro
+ captain: "Boosts ATK of Striker and Free Spirit characters by 2x",
+ special: "Changes [RCV], [TND], [EMPTY], [G] and [BOMB] orbs into Badly Matching orbs and [STR], [QCK], [DEX], [PSY] and [INT] orbs into Matching orbs for Free Spirit and Striker characters.",
+ specialName: "Brushman's Brush",
+ },
+ 1338: {//Kanjuro
+ captain: "Boosts ATK of Striker and Free Spirit characters by 2.25x, reduces damage received by 10%",
+ special: "Changes [RCV], [TND], [EMPTY], [G] and [BOMB] orbs into Badly Matching orbs and [STR], [QCK], [DEX], [PSY] and [INT] orbs into Matching orbs for Free Spirit and Striker characters.",
+ specialName: "Brushman's Brush",
+ },
+ 1339: {//Chopper Jump Point
+ captain: "Boosts ATK of [DEX] characters by 2.25x",
+ special: [
+ {
+ "description": "Reduces duration of Paralysis by 1 turn. Adds .2x to Chain multiplier for 1 turn",
+ "cooldown": [ 18, 8 ],
+ },
+ {
+ "description": "Reduces duration of Paralysis by 2 turn. Adds .3x to Chain multiplier for 1 turn",
+ "cooldown": [ 23, 13 ],
+ },
+ {
+ "description": "Reduces duration of Paralysis by 2 turn. Adds .5x to Chain multiplier for 1 turn",
+ "cooldown": [ 25, 15 ],
+ },
+ ],
+ specialName: "Flight Power Strengthening - Jump Point",
+ },
+ 1340: {//Gedatsu
+ captain: "Boosts ATK of [QCK] characters by 1.5x",
+ special: "Delays all enemies for 1 turn. Cuts the current HP of all enemies by 10%",
+ specialName: "Swamp Cloud Burger",
+ },
+ 1341: {//Getdatsu
+ captain: "Boosts ATK of [QCK] characters by 1.75x. After scoring 3 hits below Good in a row, boosts ATK of [QCK] characters by 2.625x instead.",
+ special: "Delays all enemies for 1 turn. Cuts the current HP of all enemies by 10%",
+ specialName: "Swamp Cloud Burger",
+ },
+ 1342: {//Dadan
+ captain: "Boosts HP of [PSY] characters by 1.75x",
+ special: "Reduces Silence duration by 2 turns",
+ specialNotes: "Silence will refer to effects that prevent you from activating Special Abilities",
+ specialName: "Rogue Threat",
+ },
+ 1343: {//Porchemy
+ captain: "Reduces crew's current HP by 50%. Boosts ATK of Driven characters by 2x.",
+ special: "Deals 13x character's Atk in [DEX] damage to one enemy, and boosts ATK against enemies with reduced defense by 1.3x for 1 turn",
+ specialName: "Spiked Glove of Punishment",
+ },
+ 1344: {//Bluejam
+ captain: "Reduces crew's current HP by 50%. Boosts ATK of Driven characters by 2.25x.",
+ special: "Deals large [STR] damage to one enemy, and boosts ATK of Driven characters by 1.3x for 1 turn",
+ specialName: "Bullet Purge",
+ },
+ 1345: {//Jimbe
+ captain: "Boosts ATK of Fighter characters by 2.5x",
+ special: "Reduces Despair duration by 5 turns. Reduces Special Cooldown of your top row by 1 turn",
+ specialName: "Gathering Strength for a Counter Attack",
+ },
+ 1346: {//Heracles'n
+ captain: "Boosts ATK, HP and RCV of Shooter and Cerebral characters by 1.5x",
+ special: "Randomizes all orbs, including [BLOCK] orbs, switches orbs between slots 3 times",
+ specialName: "Survival Techniques of the Hungry Baron",
+ },
+ 1347: {//Torino Kingdom Monsters
+ special: "Change own orb into [PSY], and deals 25x character's attack in [PSY] damage to one enemy",
+ specialName: "Tsubami Behemoth",
+ },
+ 1348: {//Humandrills
+ special: "Boosts ATK of all characters by 1.2x for 1 turn and amplifies the effect of orbs by 1.2x for 1 turn",
+ specialName: "Imitation Tactics",
+ },
+ 1349: {//Haredas
+ captain: "Boost ATK of Cerebral characters by 1.5x and their RCV by 1.75x",
+ special: "Empty all slots including [BLOCK] orbs, and boost ATK of Cerebral characters by 1.2x for 1 turn",
+ specialName: "Gust 'Wind Knot'",
+ },
+ 1350: {//Longarm Tribe Theives
+ special: "Switches orbs between slots 3 times",
+ specialName: "Longarm Tribe of Tehna Gehna",
+ },
+ 1351: {//Tequila Wolf Guard
+ special: "Reduces the defense of all by 50% and delays all enemies for 1 turn",
+ specialName: "Covering Fire",
+ },
+ 1352: {//Ivankov
+ captain: "Boosts ATK of Fighter characters by 2x, boosts Atk of Fighter characters by 3.5x after the 5th Perfect",
+ special: "Following the activation of the special, if every unit scores a Perfect hit, reduces damage received by 90% in the following turn",
+ specialName: "Rolling Beauty",
+ },
+ 1353: {//Rayleigh
+ captain: "Boosts ATK of Cerebral characters by 2.5x",
+ special: "Deals 50,000 Fixed damage to one enemy, adds 0.5 to Chain multiplier for 1 turn",
+ specialName: "Guidence to Control Haki",
+ },
+ 1354: {//Secret Rayleigh
+ captain: "Boosts chain multiplier by 2x, recovers 1.5x character's RCV in HP at the end of each turn",
+ special: "Recovers 15x character's RCV in HP, amplifies the effect of orbs by 1.5x for 1 turn",
+ specialName: "Straight Stimultaion",
+ specialNotes: "#{orb : 1.5x}",
+ },
+ 1355: {//Secret Rayleigh
+ captain: "Boosts chain multiplier by 3x, recovers 1.5x character's RCV in HP at the end of each turn",
+ special: "Recovers 15x character's RCV in HP, amplifies the effect of orbs by 1.5x for 1 turn",
+ specialName: "Straight Stimultaion",
+ specialNotes: "#{orb : 1.5x}",
+ },
+ 1356: {//Pekoms
+ captain: "Boosts ATK of Powerhouse characters by 1.5x",
+ special: "Changes [RCV] and [EMPTY] orbs on Fighter characters into Matching orbs. Makes Perfects easier to hit for 1 turn.",
+ specialName: "Serious Threat",
+ specialNotes: "Increases timing window to hit a Perfect. (Animation remains the same)"
+ },
+ 1357: {//Pekoms
+ captain: "Boosts ATK, HP and RCV of Powerhouse characters by 1.5x",
+ special: "Changes [RCV] and [EMPTY] orbs on Fighter characters into Matching orbs. Makes Perfects easier to hit for 1 turn.",
+ specialName: "Serious Threat",
+ specialNotes: "Increases timing window to hit a Perfect. (Animation remains the same)"
+ },
+ 1358: {//Tamago
+ captain: "Boosts ATK of Cerebral characters by 1.5x and the HP of Striker characters by 1.5x",
+ special: "Boosts RCV of all characters by 1.75x and delays all enemies by 1 turn.",
+ specialName: "The Long Legged Gentleman's Resolution",
+ },
+ 1359: {//Tamago
+ captain: "Boosts ATK of Cerebral characters by 1.75x and the HP of Striker characters by 1.75x",
+ special: "Boosts RCV of all characters by 1.75x and delays all enemies by 1 turn.",
+ specialName: "The Long Legged Gentleman's Resolution",
+ },
+ 1360: {//Winter Luffy
+ captain: "Boosts ATK characters with cost 30 or less by 2x and their HP by 1.2x",
+ special: "Changes own orb into [QCK], deals 15x character's ATK in [QCK] damage to one enemy",
+ specialName: "Gum-Gum Twin Jet Pistol: Snowflake",
+ },
+ 1361: {//6* Zoro
+ captain: "If you have 5 or more Slashers on your crew, boosts ATK of Slasher characters by 2.5x and their HP by 1.5x. If you defeated an enemy last turn, boosts ATK of Slashers by 3x instead",
+ captainNotes: "You only need to kill at least 1 character in the last turn to gain his 3x ATK boost. If a character dies and revives, you will retain the 3x ATK boost",
+ special: "Deals 60x character's ATK as typeless damage to all enemies. If Zoro is your Captain, boosts ATK of Slashers by 2x for 1 turn. If he is a Sailor, boosts ATK by 1.75x for 1 turn",
+ specialName: "Three Blade Style Secret Skill: Crossroad of Six Paths",
+ },
+ 1362: {//6* Zoro
+ captain: "If you have 5 or more Slashers on your crew, boosts ATK of Slasher characters by 2.5x and their HP by 1.5x. If you defeated an enemy last turn, boosts ATK of Slashers by 3x instead",
+ captainNotes: "You only need to kill at least 1 character in the last turn to gain his 3x ATK boost. If a character dies and revives, you will retain the 3x ATK boost",
+ special: "Deals 60x character's ATK as typeless damage to all enemies. If Zoro is your Captain, boosts ATK of Slashers by 2x for 1 turn. If he is a Sailor, boosts ATK by 1.75x for 1 turn",
+ specialName: "Three Blade Style Secret Skill: Crossroad of Six Paths",
+ },
+ 1363: {//Timeskip Franky
+ captain: "Boosts ATK of [PSY] characters by 2x, reduces damage taken by 10%",
+ special: "Deals random [PSY] damage to all enemies, amplifies the effect of orbs for [PSY] characters by 2x for 1 turn",
+ specialNotes: "#{orb : 2x}",
+ sailor: "Boosts HP of [PSY] characters by 100",
+ specialName: "Franky Fireball",
+ },
+ 1364: {//Timeskip Franky
+ captain: "Boosts ATK of [PSY] characters by 2.5x, reduces damage taken by 10%",
+ special: "Deals random [PSY] damage to all enemies, amplifies the effect of orbs for [PSY] characters by 2x for 1 turn",
+ specialNotes: "#{orb : 2x}",
+ sailor: "Boosts HP of [PSY] characters by 100",
+ specialName: "Franky Fireball",
+ },
+ 1365: {//Timeskip Nami
+ captain: "Boosts ATK and RCV of Cerebral characters by 1.5x",
+ special: [
+ {
+ "description": "Reduces duration of Paralysis and Silence by 1 turn. Delays all enemies for 1 turn",
+ "cooldown": [ 13, 8 ],
+ },
+ {
+ "description": "Reduces duration of Paralysis and Silence by 2 turns. Delays all enemies for 1 turn",
+ "cooldown": [ 15, 10 ],
+ },
+ {
+ "description": "Reduces duration of Paralysis and Silence by 5 turns. Delays all enemies for 2 turns",
+ "cooldown": [ 18, 13 ],
+ },
+ ],
+ specialNotes: "Silence will refer to effects that prevent you from activating Special Abilities.",
+ sailor: "Completely resists Silence on this character",
+ specialName: "Black Ball - Thundercloud Rod",
+ },
+ 1366: {//Timeskip Nami
+ captain: "Boosts RCV of Cerebral characters by 1.5x and their ATK by 2.75x if they have a matching orb, by 1.5x otherwise",
+ special: [
+ {
+ "description": "Reduces duration of Paralysis and Silence by 1 turn. Delays all enemies for 1 turn",
+ "cooldown": [ 13, 8 ],
+ },
+ {
+ "description": "Reduces duration of Paralysis and Silence by 2 turns. Delays all enemies for 1 turn",
+ "cooldown": [ 15, 10 ],
+ },
+ {
+ "description": "Reduces duration of Paralysis and Silence by 5 turns. Delays all enemies for 2 turns",
+ "cooldown": [ 18, 13 ],
+ },
+ ],
+ specialNotes: "Silence will refer to effects that prevent you from activating Special Abilities.",
+ sailor: "Completely resists Silence on this character",
+ specialName: "Black Ball - Thundercloud Rod",
+ },
+ 1367: {//Timeskip Sanji
+ captain: "Boosts ATK of [STR] characters by 2x",
+ special: [
+ {
+ "description": "Reduces damage received by 50% and amplifies the effect of orbs by 1.5x for 1 turn.",
+ "cooldown": [ 11, 6 ],
+ },
+ {
+ "description": "Reduces damage received by 70% and amplifies the effect of orbs by 1.75x for 1 turn.",
+ "cooldown": [ 20, 15 ],
+ },
+ ],
+ specialNotes: "#{orb : 1.75x}",
+ sailor: "Boosts HP, RCV, and ATK of all characters by 50",
+ specialName: "Sky Walk",
+ },
+ 1368: {//Timeskip Sanji
+ captain: "Boosts ATK of [STR] characters by 2.5x, by 3x if HP is below 30% at the start of the turn",
+ special: [
+ {
+ "description": "Reduces damage received by 50% and amplifies the effect of orbs by 1.5x for 1 turn.",
+ "cooldown": [ 11, 6 ],
+ },
+ {
+ "description": "Reduces damage received by 70% and amplifies the effect of orbs by 1.75x for 1 turn.",
+ "cooldown": [ 20, 15 ],
+ },
+ ],
+ specialNotes: "#{orb : 1.75x}",
+ sailor: "Boosts HP, RCV, and ATK of all characters by 50",
+ specialName: "Sky Walk",
+ },
+ 1369: {//Timeskip Chopper
+ captain: "Boosts ATK of [QCK] characters by 1.5x and their HP and RCV by 1.2x",
+ special: "Changes [DEX] and [RCV] on [QCK] characters into [QCK], cuts the current HP of one enemy by 15%",
+ sailor: "Makes [STR] orbs \"beneficial\" for this unit",
+ specialName: "Kakuho: Elf",
+ },
+ 1370: {//Timeskip Chopper
+ captain: "Boosts ATK of [QCK] characters by 2x and their HP and RCV by 1.2x",
+ special: "Changes [DEX] and [RCV] on [QCK] characters into [QCK], cuts the current HP of one enemy by 15%",
+ sailor: "Makes [STR] orbs \"beneficial\" for this unit",
+ specialName: "Kakuho: Elf",
+ },
+ 1371: {//Wild Zoro
+ captain: "Boosts ATK of Slasher and Powerhouse characters by 2x at the start of the chain, by 2.25x after the 3rd Perfect and by 2.5x after the 5th Perfect.",
+ special: "Reduces Despair duration by 3 turns. Reduces Special Cooldown of Slasher and Powerhouse characters by 2 turns",
+ sailor: "Restores his own special by 2 turns when it is rewinded",
+ sailorNotes: "Some enemies can increase your cooldown by 1/2 Turns, this Sailor Ability decreases that by 2 turns",
+ specialName: "Wild Plan",
+ },
+ 1372: {//Wild Zoro
+ captain: "Boosts ATK of Slasher and Powerhouse characters by 2x at the start of the chain, by 2.5x after the 3rd Perfect and by 3x after the 5th Perfect.",
+ special: "Reduces Despair duration by 3 turns. Reduces Special Cooldown of Slasher and Powerhouse characters by 2 turns",
+ sailor: "Restores his own special by 2 turns when it is rewinded",
+ sailorNotes: "Some enemies can increase your cooldown by 1/2 Turns, this Sailor Ability decreases that by 2 turns",
+ specialName: "Wild Plan",
+ },
+ 1373: {//Magellan
+ captain: "Boosts ATK of INT characters by 1.5x and their HP by 1.2x, deals 5 times the damage received in the previous turn in [INT] damage to all enemies at the end of each turn",
+ special: [
+ {
+ "description": "Poisons all enemies and delays all enemies for 1 turn.",
+ "cooldown": [ 25, 10 ],
+ },
+ {
+ "description": "Inflicts Toxic to all enemies and delays all enemies for 1 turn.",
+ "cooldown": [ 31, 16 ],
+ },
+ ],
+ specialName: "Poison Dragon",
+ specialNotes: "Toxic starts at 0.5x character's attack and increases by 3x at the end of every turn until 1,500,000 damage per turn.",
+ },
+ 1374: {//Magellan
+ captain: "Boosts ATK of INT characters by 2.25x and their HP by 1.5x, deals 5 times the damage received in the previous turn in [INT] damage to all enemies at the end of each turn",
+ special: [
+ {
+ "description": "Poisons all enemies and delays all enemies for 1 turn.",
+ "cooldown": [ 25, 10 ],
+ },
+ {
+ "description": "Inflicts Toxic to all enemies and delays all enemies for 1 turn.",
+ "cooldown": [ 31, 16 ],
+ },
+ ],
+ specialName: "Poison Dragon",
+ specialNotes: "Toxic starts at 0.5x character's attack and increases by 3x at the end of every turn until 1,500,000 damage per turn.",
+ },
+ 1375: {//Dellinger
+ captain: "Boosts ATK of Powerhouse characters by 2.5x, reduces crew's HP by 50%, Increases damage recieved by 2x",
+ special: "Deals 20x character's ATK in [QCK] damage to one enemy, Boosts Dellinger's ATK by 1.5x for 1 turn, amplifies the effect of Dellinger's orb by 1.5x for 1 turn, and changes own orb to [QCK].",
+ specialNotes: "Boosted ATK and Orb Effectivess only works for the Dellinger who uses his Special.",
+ specialName: "Deadly Fangs of Rage",
+ },
+ 1376: {//Dellinger
+ captain: "Boosts ATK of Powerhouse characters by 2.75x, reduces crew's HP by 20%, Increases damage recieved by 2x",
+ special: "Deals 20x character's ATK in [QCK] damage to one enemy, Boosts Dellinger's ATK by 1.5x for 1 turn, amplifies the effect of Dellinger's orb by 1.5x for 1 turn, and changes own orb to [QCK].",
+ specialNotes: "Boosted ATK and Orb Effectivess only works for the Dellinger who uses his Special.",
+ specialName: "Deadly Fangs of Rage",
+ },
+ 1377: {//Marguerite
+ captain: "Boosts ATK and RCV of Slasher and Shooter characters by 1.3x",
+ special: "Recovers 18x character's RCV in HP. Reduces damage received by 50% for 1 turn",
+ sailor: "Boosts amount healed from [RCV] orbs by 150 each",
+ specialName: "Sincere Devotion",
+ },
+ 1378: {//Marguerite
+ captain: "Boosts ATK and RCV of Slasher and Shooter characters by 1.75x",
+ special: "Recovers 18x character's RCV in HP. Reduces damage received by 50% for 1 turn",
+ sailor: "Boosts amount healed from [RCV] orbs by 150 each",
+ specialName: "Sincere Devotion",
+ },
+ 1379: {//Shanks
+ captain: "Boosts chances of getting Matching orbs, boosts ATK of Cerebral characters by 2x",
+ special: "Reduces Paralysis duration by 3 turns. For Cerebral and Free Spirit characters, amplifies the effects of orbs by 2x for 1 turn. Makes [RCV] and [TND] orbs \"beneficial\" to Cerebral and Free Spirit characters for 1 turns.",
+ specialName: "A Decision Made over Sake",
+ specialNotes: "#{orb : 2x}",
+ },
+ 1380: {//Shanks
+ captain: "Boosts chances of getting Matching orbs, boosts ATK of Cerebral characters by 2.5x",
+ special: "Reduces Paralysis duration by 3 turns. For Cerebral and Free Spirit characters, amplifies the effects of orbs by 2x for 1 turn. Makes [RCV] and [TND] orbs \"beneficial\" to Cerebral and Free Spirit characters for 1 turns.",
+ specialName: "A Decision Made over Sake",
+ specialNotes: "#{orb : 2x}",
+ },
+ 1381: {//Christmas Tashigi
+ captain: "Boosts ATK and RCV of Slasher and Cerebral characters by 1.2x",
+ special: "Reduces Silence duration by 1 turn, and recovers 12,240 HP",
+ specialName: "Tashigi Special",
+ },
+ 1382: {//Christmas Tashigi
+ captain: "Boosts ATK and RCV of Slasher and Cerebral characters by 1.75x",
+ special: "Reduces Silence duration by 1 turn, and recovers 12,240 HP",
+ specialName: "Tashigi Special",
+ },
+ 1383: {//Soldier-San
+ captain: "Boosts ATK of Striker characters by 2x. Increases damage recieved by 1.5x",
+ special: "Reduces Paralysis, Bind, Despair, and Silence duration by 1 turn. Randomizes all Badly Matching, [BLOCK], or [EMPTY] orbs",
+ specialName: "Angry Extermination of Bugs",
+ },
+ 1384: {//Soldier-San
+ captain: "Boosts ATK of Striker characters by 2.5x. Increases damage recieved by 1.5x",
+ special: "Reduces Paralysis, Bind, Despair, and Silence duration by 1 turn. Randomizes all Badly Matching, [BLOCK], or [EMPTY] orbs",
+ specialName: "Angry Extermination of Bugs",
+ },
+ 1385: {//Rebecca
+ captain: "Reduces damage received by 20%",
+ special: "Removes blindness",
+ specialName: "Mother's Promise",
+ },
+ 1386: {//Rebecca
+ captain: "Reduces damage received by 25%",
+ special: "Removes blindness",
+ specialName: "Mother's Promise",
+ },
+ 1387: {//Luffy 5+
+ captain: "Boosts ATK of all characters by 2.25x and their HP by 1.25x. Boosts ATK by an additional 1.25x after scoring 4 Perfects in a row",
+ captainNotes: "After 4 Perfects, your captain boost is 2.8125x",
+ special: "Deals 40x character's ATK in [STR] damage to all enemies, and delays all enemies for 1 turn",
+ specialName: "Gum Gum: Elephant Gun",
+ },
+ 1388: {//Zoro 5+
+ captain: "Boosts ATK of [DEX] characters by 2.5x",
+ special: "Cuts the current HP of each enemy by 10%. Reduces special cooldown of [DEX] specials by 1 turn.",
+ specialName: "Ittoriyu: Unfortunate Port Bird",
+ },
+ 1389: {//Nami 5+
+ captain: "Reduces cooldown of all specials by 1 turn at the start of the fight, Boosts ATK of [INT] characters by 2x and their RCV by 1.5x.",
+ special: "Deals 20x character's ATK in [INT] damage to all enemies. Amplifies the effect of orbs for [INT] characters by 1.75x for 1 turn",
+ specialName: "Weather Egg: Thunder Breed Tempo",
+ specialNotes: "#{orb : 1.75x}",
+ },
+ 1390: {//Buggy Legend
+ captain: "Boosts ATK of characters with cost 40 or less by 1.5x and reduces the HP and ATK of characters with cost 41 and greater by 0.5x. Gurantees duplicating a drop upon completion of the island.",
+ captainNotes: "Does not work if he was not your captain upon starting the island. Stacks with other addional drop captains, giving you two chances of getting an extra drop.",
+ special: "Randomizes all orbs. Boosts ATK of characters with cost 40 or less by 1.75x for 2 turns",
+ specialName: "Chop-Chop Clown Car",
+ },
+ 1391: {//Buggy Legend
+ captain: "Boosts ATK of characters with cost 40 or less by 1.5x and reduces the HP and ATK of characters with cost 41 and greater by 0.5x. Gurantees duplicating a drop upon completion of the island.",
+ captainNotes: "Does not work if he was not your captain upon starting the island. Stacks with other addional drop captains, giving you two chances of getting an extra drop.",
+ special: "Randomizes all orbs. Boosts ATK of characters with cost 40 or less by 1.75x for 2 turns",
+ specialName: "Chop-Chop Clown Car",
+ },
+ 1392: {//Sentomaru
+ captain: "Boosts ATK of Striker characters by 2x and boosts the HP of [PSY] characters by 1.25x",
+ captainNotes: "A character with both classes will get both boosts",
+ special: "Deals 25x character's ATK in [PSY] damage to all enemies. If during that turn every unit scores a Perfect hit, boosts ATK of [PSY] characters by 1.75x in the following turn.",
+ specialName: "Large Cutting Axe",
+ },
+ 1393: {//Demaro Black
+ captain: "Boosts ATK of characters with cost 30 or less by 2x",
+ special: "Boosts the ATK of all characters by 1.1x, slightly boosts chances of getting matching orbs and amplifies the effect of orbs by 1.1x for 7 turns",
+ specialName: "Three Forked Tongue",
+ },
+ 1394: {//Kimono Baby 5
+ captain: "Boosts ATK of [STR] and [QCK] characters by 1.5x an their RCV by 1.1x",
+ special: "Recovers 7x character's RCV in HP. Boosts ATK of Fighter and Striker characters by 1.5x for 1 turn",
+ specialName: "Nation's Ambition",
+ },
+ 1395: {//Kimono Baby 5
+ captain: "Boosts ATK of [STR] and [QCK] characters by 2.25x an their RCV by 1.2x",
+ special: "Recovers 7x character's RCV in HP. Boosts ATK of Fighter and Striker characters by 1.5x for 1 turn",
+ specialName: "Nation's Ambition",
+ },
+ 1396: {//Tashigi Shambles
+ captain: "Boosts ATK of Driven characters by 1.75x and the HP of Striker Characters by 1.25x",
+ special: "Deals 7 hits of random [DEX] damage to random enemies. Reduces the defense of all enemies by 80% and delays all enemies for 1 turn",
+ specialName: "Surprise Jitte Onslaught",
+ },
+ 1397: {//Tashigi Shambles
+ captain: "Boosts ATK of Driven characters by 2x and the HP of Striker Characters by 1.5x",
+ special: "Deals 7 hits of random [DEX] damage to random enemies. Reduces the defense of all enemies by 80% and delays all enemies for 1 turn",
+ specialName: "Surprise Jitte Onslaught",
+ },
+ 1398: {//Smoker Shambles
+ captain: "Boosts ATK of Slasher and Cerebral characters by 1.5x",
+ special: "For Slasher characters, randomizes all non-matching orbs. Swaps this unit with your captain for 2 turns",
+ specialName: "Out-of-Control White Smoke",
+ },
+ 1399: {//Smoker Shambles
+ captain: "Boosts ATK of Slasher and Cerebral characters by 1.5x, reduces damage received by 15%",
+ special: "For Slasher characters, randomizes all non-matching orbs. Swaps this unit with your captain for 2 turns",
+ specialName: "Out-of-Control White Smoke",
+ },
+ 1400: {//Colo Gladius
+ captain: "Boosts ATK of Shooter characters by 1.75x and boosts ATK of Driven characters by 1.3x",
+ captainNotes: "The bonus is cumulative. Shooter Driven characters get a 2.275x bonus.",
+ special: [
+ {
+ "description": "Deals [STR] damage to all enemies, reduces Bind and Despair duration by 1 turn and boosts the Color Affinity of Shooters by 1.5x for 1 turn",
+ "cooldown": [ 26, 11 ],
+ },
+ {
+ "description": "Deals large [STR] damage to all enemies, reduces Bind and Despair duration by 2 turn and boosts the Color Affinity of Shooters by 1.75x for 1 turn",
+ "cooldown": [ 33, 18 ],
+ },
+ ],
+ specialName: "Stonewall Punk",
+ specialNotes: "#{colorAffinity : 1.75}",
+ },
+ 1401: {//Colo Gladius
+ captain: "Boosts ATK of Shooter characters by 1.75x and boosts ATK of Driven characters by 1.5x",
+ captainNotes: "The bonus is cumulative. Shooter Driven characters get a 2.625x bonus.",
+ special: [
+ {
+ "description": "Deals [STR] damage to all enemies, reduces Bind and Despair duration by 1 turn and boosts the Color Affinity of Shooters by 1.5x for 1 turn",
+ "cooldown": [ 26, 11 ],
+ },
+ {
+ "description": "Deals large [STR] damage to all enemies, reduces Bind and Despair duration by 2 turn and boosts the Color Affinity of Shooters by 1.75x for 1 turn",
+ "cooldown": [ 33, 18 ],
+ },
+ ],
+ specialName: "Stonewall Punk",
+ specialNotes: "#{colorAffinity : 1.75}",
+ },
+ 1402: {//Colo Dalton
+ captain: "Boosts ATK of [PSY] and [QCK] characters by 2x",
+ special: [
+ {
+ "description": "Deals 3x character's ATK in [PSY] damage to one enemy, boosts ATK of [PSY] characters by 1.3x for 1 turn",
+ "cooldown": [ 14, 4 ],
+ },
+ {
+ "description": "Deals 13x character's ATK in [PSY] damage to one enemy, boosts ATK of [PSY] characters by 1.5x for 1 turn",
+ "cooldown": [ 18, 8 ],
+ },
+ ],
+ specialName: "Offense Battle Axe",
+ },
+ 1403: {//Timeskip Luffy
+ captain: "Boosts ATK of Free Spirit characters by 2.5x, reduce damage received by 15%. If you use \"Gomu Gomu no Red Hawk\" THIS LUFFY boosts ATK of Free Spirit characters by 4x instead for 3 turns.",
+ captainNotes: "Using Luffy's special will change his own captain boost to 4x. If both Luffy's specials are used, the total ATK boost will be 16x",
+ special: [
+ {
+ "description": "Deals 25x character's ATK in [QCK] damage to one enemy, and makes [QCK], [DEX], and [PSY] orbs \"beneficial\" to Fighter and Free Spirit characters for 1 turn",
+ "cooldown": [ 14, 9 ],
+ },
+ {
+ "description": "Deals 60x character's ATK in [QCK] damage to one enemy, and makes [QCK], [DEX], and [PSY] orbs \"beneficial\" for 3 turns",
+ "cooldown": [ 18, 13 ],
+ },
+ ],
+ specialName: "Gomu Gomu no Red Hawk",
+ },
+ 1404: {//Timeskip Luffy
+ captain: "Boosts ATK of Free Spirit characters by 2.5x, reduce damage received by 15%. If you use \"Gomu Gomu no Red Hawk\" THIS LUFFY boosts ATK of Free Spirit characters by 4x instead for 3 turns.",
+ captainNotes: "Using Luffy's special will change his own captain boost to 4x. If both Luffy's specials are used, the total ATK boost will be 16x",
+ special: [
+ {
+ "description": "Deals 25x character's ATK in [QCK] damage to one enemy, and makes [QCK], [DEX], and [PSY] orbs \"beneficial\" to Fighter and Free Spirit characters for 1 turn",
+ "cooldown": [ 14, 9 ],
+ },
+ {
+ "description": "Deals 60x character's ATK in [QCK] damage to one enemy, and makes [QCK], [DEX], and [PSY] orbs \"beneficial\" for 3 turns",
+ "cooldown": [ 18, 13 ],
+ },
+ ],
+ specialName: "Gomu Gomu no Red Hawk",
+ },
+ 1405: {//Timeskip Usopp
+ captain: "Boost ATK of Shooters by 1.75x, and their RCV by 1.25x",
+ special: "Deals 10 hits of 2,000 fixed damage to random enemies, and if enemies have delay protection at the time the special was activated, boosts ATK of Shooters by 1.75x and amplifies the effect of orbs by 1.75x for 1 turn",
+ specialNotes: "This is a new form of Conditional Boost. The boost does not act like a Monet or Dalmatian boost, but is only activated if conditions are met and does not stack with other Class boosts or Orb boosts.",
+ specialName: "Assault Meteor Shower",
+ sailor: "When HP is below 30% at the start of the turn, boost ATK and RCV of Shooters by 100",
+ },
+ 1406: {//Timeskip Usopp
+ captain: "Boost ATK of Shooters by 2.25x, and their RCV by 1.5x",
+ special: "Deals 10 hits of 2,000 fixed damage to random enemies, and if enemies have delay protection at the time the special was activated, boosts ATK of Shooters by 1.75x and amplifies the effect of orbs by 1.75x for 1 turn",
+ specialNotes: "This is a new form of Conditional Boost. The boost does not act like a Monet or Dalmatian boost, but is only activated if conditions are met and does not stack with other Class boosts or Orb boosts.",
+ specialName: "Assault Meteor Shower",
+ sailor: "When HP is below 30% at the start of the turn, boost ATK and RCV of Shooters by 100",
+ },
+ 1407: {//Timeskip Robin
+ captain: "Boosts ATK of [DEX] and [PSY] characters by 1.75x an their RCV by 1.25x",
+ special: "Reduces Despair duration by 3 turns and boosts ATK of [DEX] and [PSY] characters by 2x for 1 turn",
+ specialName: "Mil Fleur: Gigantesco Mano Stomp",
+ sailor: "Reduces duration of Blindness by 3 turns",
+ },
+ 1408: {//Timeskip Robin
+ captain: "Boosts ATK of [DEX] and [PSY] characters by 2.25x an their RCV by 1.5x",
+ special: "Reduces Despair duration by 3 turns and boosts ATK of [DEX] and [PSY] characters by 2x for 1 turn",
+ specialName: "Mil Fleur: Gigantesco Mano Stomp",
+ sailor: "Reduces duration of Blindness by 3 turns",
+ },
+ 1409: {//Timeskip Brook
+ captain: "Protects from defeat as long as HP is above 50%",
+ captainNotes: "#{zombie}",
+ special: "Delays all enemies by 1 turn, and boosts ATK of Slasher and Free Spirit characters by 1.75x for 1 turn",
+ specialName: "Soul's Murder Soul: Soul Solid",
+ sailor: "Completely resists Paralysis on this character",
+ },
+ 1410: {//Timeskip Brook
+ captain: "Boosts chain multiplier by 2.5x. Protects from defeat as long as HP is above 50%",
+ captainNotes: "#{zombie}",
+ special: "Delays all enemies by 1 turn, and boosts ATK of Slasher and Free Spirit characters by 1.75x for 1 turn",
+ specialName: "Soul's Murder Soul: Soul Solid",
+ sailor: "Completely resists Paralysis on this character",
+ },
+ 1411: {//Timeskip Chopper Again
+ captain: "Boosts ATK of Powerhouse characters by 2.25x, reduces crew's RCV to 0",
+ special: "Reduce enemies Damage Reduction and Increased Defense duration by 3 turns and deals 60x character's ATK in typeless damage to all enemies",
+ specialNotes: "This does not affect threshold damage reduction. Damage Reduction is the rainbow shield buff enemies have, and Increased Defense is the blue shiled buff enemies have",
+ specialName: "Carving Hoof Palm: Coconut",
+ sailor: "If Chopper has a [STR] orb and you hit a Perfect with him, keep his [STR] orb for the next turn",
+ },
+ 1412: {//Timeskip Chopper Again
+ captain: "Boosts ATK of Powerhouse characters by 2.75x, reduces crew's RCV to 0",
+ special: "Reduce enemies Damage Reduction and Increased Defense duration by 3 turns and deals 60x character's ATK in typeless damage to all enemies",
+ specialNotes: "This does not affect threshold damage reduction. Damage Reduction is the rainbow shield buff enemies have, and Increased Defense is the blue shiled buff enemies have",
+ specialName: "Carving Hoof Palm: Coconut",
+ sailor: "If Chopper has a [STR] orb and you hit a Perfect with him, keep his [STR] orb for the next turn",
+ },
+ 1413: {//6+ Whitebeard
+ captain: "Boosts ATK of all characters by 3x if HP is below 30% at the start of the turn, 1.75x otherwise and boosts the HP of all characters by 1.2x",
+ special: "Cuts the current HP of each enemy by 30%, reduces special cooldown of all non-Captain specials by 1 turn, and randomizes non-matching orbs.",
+ specialName: "Seaquake",
+ },
+ 1414: {//Shop Sanji
+ captain: "Boosts ATK of Powerhouse characters by 2.5x",
+ special: "Changes own orb into [INT] and reduces Special Cooldown of Powerhouse characters by 1 turn.",
+ specialName: "Are you ready?",
+ },
+ 1415: {//Fortnight Sengoku
+ captain: "Boost ATK of characters with cost 30 or less by 1.5x",
+ special: "Reduces Special Cooldown of all characters by 1 turn and boosts ATK of characters with cost 30 or less by 1.5x for 1 turn",
+ specialName: "Unshakeable Resolution of the Wise Master",
+ },
+ 1416: {//Fortnight Sengoku
+ captain: "Boost ATK of characters with cost 30 or less by 2.25x and their HP by 1.2x",
+ special: "Reduces Special Cooldown of all characters by 1 turn and boosts ATK of characters with cost 30 or less by 1.5x for 1 turn",
+ specialName: "Unshakeable Resolution of the Wise Master",
+ },
+ 1417: {//Ronse
+ captain: "Boosts ATK and HP of [STR] characters by 1.5x",
+ special: "Cuts the current HP of all enemies by 10%, changes [BLOCK] orbs into [STR] orbs for Slasher characters",
+ specialName: "Raid Battle-Axe: One Flash",
+ },
+ 1418: {//Stainless
+ captain: "Boosts ATK and RCV of INT characters by 1.5x",
+ special: "Reduces any damage received above 5,000 HP by 99% for 1 turn",
+ specialName: "Defence of the Command Line",
+ },
+ 1419: {//Kimono Lucci
+ captain: "Boosts ATK of Powerhouse characters by 2.5x, reduce damage received by 10%",
+ special: "Recovers 5,000 HP and boosts ATK against enemies with reduced defense by 1.5x for 1 turns",
+ specialName: "Lucci Special",
+ },
+ 1420: {//Kimono Lucci
+ captain: "Boosts ATK of Powerhouse characters by 2.5x, reduce damage received by 10%",
+ special: "Recovers 5,000 HP and boosts ATK against enemies with reduced defense by 1.5x for 1 turns",
+ specialName: "Lucci Special",
+ },
+ 1421: {//Coliseum Diamante
+ captain: "Boosts ATK of Driven characters by 2x",
+ special: "Deals large [INT] damage to all enemies. If HP is full at the time the special was activated, boosts ATK of Driven characters by 2x for 1 turn, 1.5x otherwise",
+ specialName: "Diamante Special",
+ },
+ 1422: {//Coliseum Diamante
+ captain: "Boosts ATK of Driven characters by 2.25x and boosts HP of Striker and Slasher characters by 1.5x",
+ special: "Deals large [INT] damage to all enemies. If HP is full at the time the special was activated, boosts ATK of Driven characters by 2x for 1 turn, 1.5x otherwise",
+ specialName: "Diamante Special",
+ },
+ 1423: {//Coliseum T-Bone
+ captain: "Boosts ATK of the whole crew by 1.75x and recovers 918 HP at end of each turn,",
+ special: "If HP is below 500, reduces damage received by 99% for 1 turn",
+ specialName: "For the Sake of Justice",
+ },
+ 1424: {//Coliseum Gin
+ captain: "Boosts ATK of Striker characters proportionally to the crew's current HP",
+ //captainNotes: "#{captainProportional : higher : 1 + 1.25 * (remaining HP) / (total HP) : 2.25 : 2}"
+ special: "Deals 500 fixed damage to all enemies and reduces Special Cooldown of Striker characters by 1 turn.",
+ specialName: "General Commander's Fight",
+ },
+ 1425: {//Don Sai 3*
+ captain: "Boosts ATK of Fighter and Striker characters by 1.75x",
+ special: "Deals 25x character's ATK in QCK damage to one enemy. When this special ativates when a character is locked, amplifies the effect of orbs by 1.5x for 3 turns",
+ specialName: "Military Leg Heel",
+ },
+ 1426: {//Don Sai 4*
+ captain: "Boosts ATK of Fighter and Striker characters by 2x and their HP by 1.25x",
+ special: "Deals 25x character's ATK in QCK damage to one enemy. When this special ativates when a character is locked, amplifies the effect of orbs by 1.5x for 3 turns",
+ specialName: "Military Leg Heel",
+ },
+ 1427: {//Boo 4*
+ captain: "Boosts ATK of QCK characters by 2x",
+ special: "Deals 15x character's ATK in QCK damage to one enemy that will ignore damage negating abilities and barriers.",
+ specialNotes: "Damage that ignores damage negating abilities and barriers is similar to 6* Blackbeard's special when he is captain",
+ specialName: "Unblockable Eight Fists",
+ },
+ 1428: {//Jean Ango 4*
+ captain: "Boosts amount of beli received by 1.5x, and gives small chance of duplicating a drop upon completion of the island",
+ captainNotes: "Does not work if he was not your captain upon starting the island. Stacks with other addional drop captains, giving you two chances of getting an extra drop.",
+ special: "If the enemy is delayed at the time the special is activated, reduces Special Cooldown of all characters by 1 turn and boosts own attack by 1.75x for 1 turn",
+ specialNotes: "This is a new form of Conditional Boost. The boost does not act like a Monet or Dalmatian boost, but is only activated if conditions are met and does not stack with other Class boosts or Orb boosts.",
+ specialName: "Looting the Losers",
+ },
+ 1429: {//Valentines Mansherry
+ captain: "Boost the RCV of Striker and Free Spirit characters by 1.5x",
+ special: "Reduces Bind, Despair, and Parlysis duration by 3 turns and recovers 2000 HP at the end of each turn for 3 turns",
+ specialName: "Boy's Unknown Taste of Hard Work",
+ },
+ 1430: {//Valentines Mansherry, Evolved
+ captain: "Boost the RCV of Striker and Free Spirit characters by 2x",
+ special: "Reduces Bind, Despair, and Parlysis duration by 3 turns and recovers 2000 HP at the end of each turn for 3 turns",
+ specialName: "Boy's Unknown Taste of Hard Work",
+ },
+ 1431: {//Raid Franky
+ captain: "",
+ special: "",
+ specialName: "",
+ },
+ 1432: {//Raid Franky, Evolved
+ captain: "",
+ special: "",
+ specialName: "",
+ },
+ 1445: {
+ captain: "Boosts ATK of [QCK] and [PSY] characters by ???x if HP is above 70% at the start of the turn. If HP is below 70%, Boosts RCV of [QCK] and [PSY] units by 1.5x instead.",
+ captainNotes: "Unclear what the captain boost is yet, but in the damage calculator she is currently set to 3x",
+ special: "Boosts ATK and RCV of [QCK] and [PSY] characters by 1.75x for 1 turn, and delays all enemies for 1 turn. Changes your Captain orb to [RCV]. If HP is above 70%, changes left column into Matching orbs.",
+ specialName: "Boa Hancock Special",
+ },
+};
+
diff --git a/common/data/drops.js b/common/data/drops.js
index 5b0987041..f09edc710 100644
--- a/common/data/drops.js
+++ b/common/data/drops.js
@@ -6,6 +6,7 @@ window.drops = {
name: "Fushia Village",
thumb: 28,
global: true,
+ completion: '5x Rainbow Gems',
"01": [ 119, 120 ],
"02": [ 27, 115, 119, 120 ],
"03": [ 28, 78, 79, 80, 119, 120 ]
@@ -15,6 +16,7 @@ window.drops = {
name: "Alvida's Hideout",
thumb: 29,
global: true,
+ "Completion Units": [31, 105 ],
"01": [ 121, 123, 127, 131, 136 ],
"02": [ 78, 79, 80, 121, 122, 123, 126, 131, 132, 137, 138, 141 ],
"03": [ 29, 115, 121, 122, 123, 126, 127, 128, 131, 132, 133, 136, 137, 138, 141, 171 ]
@@ -24,6 +26,8 @@ window.drops = {
name: "Shells Town",
thumb: 35,
global: true,
+ completion: 'Ship: Navy Ship, Unlocks Extra Islands',
+ "Completion Units": [5, 80, 97, 116 ],
"01": [ 81, 82, 179, 180, 181, 182 ],
"02": [ 78, 79, 80, 179, 180, 181, 183 ],
"03": [ 33, 81, 82, 179, 180, 181, 182, 183 ],
@@ -39,6 +43,7 @@ window.drops = {
name: "Orange Town",
thumb: 38,
global: true,
+ completion: '5x Rainbow Gems',
"01": [ 115, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 134, 135, 174 ],
"02": [ 78, 121, 126, 136, 142, 147, 170 ],
"03": [ 40, 80, 123, 124, 128, 129, 130, 133, 134, 135, 138, 139, 140, 144, 149, 154, 158, 159, 171 ],
@@ -58,6 +63,8 @@ window.drops = {
name: "Syrup Village",
thumb: 45,
global: true,
+ completion: 'Ship: Merry Go - 5x Rainbow Gems',
+ "Completion Units": [13],
"01": [ 13, 78, 79, 80, 81, 82, 89, 90, 91, 95, 96, 97, 105, 106, 107, 115 ],
"02": [ 108, 109, 163, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188 ],
"03": [ 92, 93, 124, 125, 126, 127, 128, 147, 148, 149, 160, 161, 165, 166, 174 ],
@@ -77,6 +84,8 @@ window.drops = {
name: "Baratie",
thumb: 57,
global: true,
+ completion: 'Ship: Baratie - 5x Rainbow Gems',
+ "Completion Units": [17],
"01": [ 48, 131, 132, 133, 136, 137, 138, 140 ],
"02": [ 49, 116, 117, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188 ],
"03": [ 50, 51, 52, 184, 185, 186, 187, 188 ],
@@ -98,6 +107,8 @@ window.drops = {
name: "Arlong Park",
thumb: 65,
global: true,
+ completion: '5x Rainbow Gems',
+ "Completion Units": [9],
"01": [ 89, 121, 126, 131, 136, 141, 142, 147, 152, 156, 157, 158, 159, 160, 162, 170, 173, 175, 178 ],
"02": [ 90, 122, 127, 132, 137, 141, 143, 148, 153, 155, 157, 158, 159, 161, 162, 172, 174, 177 ],
"03": [ 91, 123, 128, 133, 138, 141, 144, 149, 154, 157, 158, 159, 160, 161, 162, 171, 173, 175, 176, 177 ],
@@ -119,6 +130,7 @@ window.drops = {
name: "Logue Town",
thumb: 69,
global: true,
+ completion: '5x Rainbow Gems',
"01": [ 174, 170, 171, 172, 84 ],
"02": [ 29, 85 ],
"03": [ 174, 173, 86 ],
@@ -137,6 +149,7 @@ window.drops = {
name: "Twin Cape",
thumb: 213,
global: true,
+ completion: '5x Rainbow Gems',
"01": [ 215, 83, 95, 110 ],
"02": [ 174, 96, 111, 83 ],
"03": [ 173, 174, 97, 112, 83 ],
@@ -153,6 +166,7 @@ window.drops = {
name: "Whiskey Peak",
thumb: 201,
global: true,
+ completion: '5x Rainbow Gems',
"01": [ 237, 238, 239, 110, 118 ],
"02": [ 111, 118, 240 ],
"03": [ 84, 118, 235 ],
@@ -167,13 +181,14 @@ window.drops = {
"12": [ 95, 96, 118, 201 ],
"13": [ 96, 97, 118, 199 ],
"14": [ 95, 97, 118, 199, 201 ],
- "15": [ 2, 110, 111, 112, 118 ]
+ "15": [ 2, 110, 111, 112, 118, 199, 201 ]
},
{
name: "Little Garden",
thumb: 292,
global: true,
+ completion: '5x Rainbow Gems',
"01": [ 289, 162, 141, 83, 116, 117 ],
"02": [ 83, 85, 90, 293 ],
"03": [ 83, 84, 89, 294 ],
@@ -195,6 +210,8 @@ window.drops = {
name: "Drum Island",
thumb: 326,
global: true,
+ completion: '5x Rainbow Gems',
+ "Completion Units": [21],
"01": [ 328, 94, 117 ],
"02": [ 84, 94, 116, 334 ],
"03": [ 78, 79, 80, 81, 82, 94, 334 ],
@@ -217,6 +234,7 @@ window.drops = {
shortName: "Nanohana",
thumb: 383,
global: true,
+ completion: '5x Rainbow Gems',
"01": [ 116, 300, 301, 302, 303, 304, 378 ],
"02": [ 69, 300, 301, 302, 303, 304 ],
"03": [ 113, 114, 184, 185, 186, 300, 301, 302, 303, 304 ],
@@ -238,6 +256,7 @@ window.drops = {
name: "Alubarna",
thumb: 384,
global: true,
+ completion: '10x Rainbow Gems',
"01": [ 368, 237, 78, 83, 89 ],
"02": [ 369, 239, 79, 90, 83 ],
"03": [ 207, 80, 91, 83 ],
@@ -259,6 +278,7 @@ window.drops = {
name: "Jaya",
thumb: 430,
global: true,
+ completion: 'Ship: Merry Go Flying - 5x Rainbow Gems',
"01": [ 215, 105, 106, 107, 108, 109, 115, 116, 381 ],
"02": [ 171, 91, 97, 96 ],
"03": [ 170, 426, 89, 95 ],
@@ -281,6 +301,7 @@ window.drops = {
shortName: "Angel Island",
thumb: 467,
global: true,
+ completion: '5x Rainbow Gems',
"01": [ 488, 487, 489, 493, 494, 116, 117 ],
"02": [ 468, 469, 92, 93, 98, 99 ],
"03": [ 468, 469, 303, 304 ],
@@ -303,6 +324,7 @@ window.drops = {
shortName: "Ark Maxim",
thumb: 545,
global: true,
+ completion: '10x Rainbow Gems',
"01": [ 94, 300, 541 ],
"02": [ 94, 302, 464, 543 ],
"03": [ 94, 303, 542 ],
@@ -321,6 +343,7 @@ window.drops = {
name: "Long Ring Long Land",
thumb: 568,
global: true,
+ completion: '5x Rainbow Gems',
"01": [ 368, 147, 152, 300 ],
"02": [ 564, 158, 301 ],
"03": [ 171, 144, 149, 302 ],
@@ -338,6 +361,7 @@ window.drops = {
name: "Water Seven",
thumb: 632,
global: true,
+ completion: '5x Rainbow Gems',
"01": [ 614, 87, 88, 266 ],
"02": [ 84, 85, 86, 173, 174, 237, 238, 239, 266 ],
"03": [ 110, 266, 615, 616, 617 ],
@@ -359,6 +383,9 @@ window.drops = {
name: "Enies Lobby: Entrance",
shortName: "Enies Lobby 1",
thumb: 706,
+ global: true,
+ completion: '5x Rainbow Gems',
+ "Completion Units": [708],
"01": [ 78, 79, 80, 81, 82, 185, 186, 188, 694 ],
"02": [ 78, 79, 80, 81, 184, 185, 187, 692 ],
"03": [ 304, 695, 702 ],
@@ -375,6 +402,9 @@ window.drops = {
name: "Enies Lobby: Tower of Justice - Gates of Justice",
shortName: "Enies Lobby 2",
thumb: 737,
+ global: true,
+ completion: 'Ship: Thousand Sunny - 5x Rainbow Gems',
+ "Completion Units": [739],
"01": [ 110 ],
"02": [ 111 ],
"03": [ 112 ],
@@ -395,6 +425,8 @@ window.drops = {
name: "Thriller Bark: Mouth Gate - Hogback's Residence",
shortName: "Thriller Bark 1",
thumb: 816,
+ global: true,
+ completion: '5x Rainbow Gems',
"01": [ 89, 90, 91, 387, 817, 818, 819, 820, 821 ],
"02": [ 89, 90, 91, 92, 93, 812, 817, 818, 819, 820, 821 ],
"03": [ 116, 817, 818, 819, 820, 821 ],
@@ -412,6 +444,9 @@ window.drops = {
name: "Thriller Bark: Moria's Mast Mansion",
shortName: "Thriller Bark 2",
thumb: 894,
+ global: true,
+ completion: '5x Rainbow Gems',
+ "Completion Units": [895],
"01": [ 817, 818, 819, 888 ],
"02": [ 393, 888, 889 ],
"03": [ 425 ],
@@ -424,7 +459,149 @@ window.drops = {
"10": [ 893 ],
"11": [ 893 ],
"12": [ 406, 815 ]
- }
+ },
+
+ {
+ name: "Sabaody Archipelago",
+ shortName: "Sabaody Archipelago",
+ thumb: 974,
+ global: true,
+ completion: '5x Rainbow Gems',
+ "01": [ 620, 111, 623, 113, 625, 114, 954, 955, 956 ],
+ "02": [ ],
+ "03": [ ],
+ "04": [ ],
+ "05": [ ],
+ "06": [ ],
+ "07": [ ],
+ "08": [ 114, 163, 164, 957, 958, 959, 960, 961, 962, 963 ],
+ "09": [ 112, 142, 144, 154, 157, 159, 170, 173, 174, 289, 618, 623, 624, 625, 626, 957, 958, 959, 961, 962, 964, 965, 967 ],
+ "10": [ 95, 97, 142, 150, 151, 154, 155, 162, 170, 172, 173, 174, 237, 241, 620, 622, 623, 626, 966 ],
+ "11": [ ],
+ "12": [ ],
+ "13": [ 111, 181, 184, 185, 186, 691, 692, 693, 694, 695, 971 ],
+ "14": [ 111, 112, 113, 114, 185, 186, 187, 691, 693, 695, 968, 969, 970, 972, 973 ]
+ },
+
+ {
+ name: "Amazon Lily",
+ shortName: "Amazon Lily",
+ thumb: 1056,
+ global: true,
+ completion: '5x Rainbow Gems',
+ "01": [ 919, 301, 300 ],
+ "02": [ 1059, 301, 303 ],
+ "03": [ 1068, 1067, 302 ],
+ "04": [ 1062, 1066, 1065, 88, 87 ],
+ "05": [ 1061, 1062, 86, 84 ],
+ "06": [ 1063, 1064, 1065, 1066, 1067, 1068, 110, 112 ],
+ "07": [ 1067, 1068, 88 ],
+ "08": [ 1055, 1057, 111, 113 ],
+ "09": [ 1055, 1057, 110, 112 ]
+ },
+
+ {
+ name: "Impel Down",
+ shortName: "Impel Down",
+ thumb: 1159,
+ global: true,
+ completion: '5x Rainbow Gems',
+ "01": [ 931 ],
+ "02": [ 540, 931 ],
+ "03": [ 1153, 931 ],
+ "04": [ 1154, 931 ],
+ "05": [ 1151, 931 ],
+ "06": [ 1158 ],
+ "07": [ 1155, 931 ],
+ "08": [ ],
+ "09": [ ],
+ "10": [ ],
+ "11": [ 551, 539, 1151, 1152, 931, 552 ],
+ "12": [ 1156, 549 ],
+ "13": [ ],
+ "14": [ 1152 ],
+ "15": [ ],
+ "16": [ 1158 ],
+ },
+
+ {
+ name: "Marineford",
+ shortName: "Marineford",
+ thumb: 1228,
+ global: true,
+ completion: '5x Rainbow Gems',
+ "01": [ ],
+ "02": [ 1223 ],
+ "03": [ ],
+ "04": [ ],
+ "05": [ 1224 ],
+ "06": [ 1225 ],
+ "07": [ ],
+ "08": [ 815 ],
+ "09": [ 1226 ],
+ "10": [ 1227 ],
+ "11": [ ],
+ "12": [ 1228 ]
+ },
+
+ {
+ name: "Marineford - Oris Plaza",
+ shortName: "Oris Plaza",
+ thumb: 1283,
+ completion: '5x Rainbow Gems',
+ "01": [ 1279 ],
+ "02": [ ],
+ "03": [ 1280 ],
+ "04": [ 1228 ],
+ "05": [ ],
+ "06": [ 262 ],
+ "07": [ ],
+ "08": [ 1281, 1282 ],
+ "09": [ 1280 ],
+ "10": [ 1283 ],
+ "11": [ 1283 ],
+ "12": [ ],
+ "13": [ ],
+ "14": [ 1283 ],
+ "15": [ 1283 ],
+ },
+
+ {
+ name: "3D2Y - Timeskip Training",
+ shortName: "3D2Y",
+ thumb: 1353,
+ completion: '5x Rainbow Gems',
+ "01": [ 1342 ],
+ "02": [ 1343 ],
+ "03": [ ],
+ "04": [ 1344 ],
+ "05": [ 1345 ],
+ "06": [ 1346 ],
+ "07": [ 1347 ],
+ "08": [ 1348 ],
+ "09": [ 1349 ],
+ "10": [ ],
+ "11": [ 1350 ],
+ "12": [ 1351 ],
+ "13": [ 1352 ],
+ "14": [ 1353 ],
+ },
+
+ {
+ name: "Return to Sabaody Archipelago",
+ shortName: "Straw Hat Return",
+ thumb: 1393,
+ completion: '5x Rainbow Gems',
+ "01": [ ],
+ "02": [ ],
+ "03": [ 1393 ],
+ "04": [ ],
+ "05": [ ],
+ "06": [ ],
+ "07": [ ],
+ "08": [ ],
+ "09": [ 1392 ],
+ },
],
@@ -485,11 +662,18 @@ window.drops = {
},
{
- name: 'Scissor Cavern, Intern',
+ name: 'Scissor Cavern, Inner Cave',
day: 4,
thumb: 304,
' ': [ 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 300, 301, 302, 303, 304 ]
},
+
+ {
+ name: 'Scissor Cavern, Deepest Parts',
+ day: 4,
+ thumb: 1180,
+ ' ': [ 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 300, 301, 302, 303, 304, 1180 ]
+ },
{
name: 'Jeweled Porc Sanctuary',
@@ -505,6 +689,7 @@ window.drops = {
name: 'Buggy\'s Counterattack!!',
thumb: 39,
global: true,
+ condition: "None",
Expert: [ 36, 37, 38, 99, 109, 114, -4 ],
Elite: [ 36, 37, 38, 99, 109, 114, -3 ]
},
@@ -513,6 +698,7 @@ window.drops = {
name: 'Alvida\'s Romance',
thumb: 30,
global: true,
+ condition: "None",
Expert: [ 28, 29, 31, 40, 84, 95, 110, 117, -30, -21, -8 ],
Elite: [ 28, 29, 31, 40, 95, 105, 110, -21, -7 ]
},
@@ -521,6 +707,7 @@ window.drops = {
name: 'Kuro\'s Master Plan',
thumb: 46,
global: true,
+ condition: "None",
Expert: [ 41, 42, 43, 45, -16 ],
Elite: [ 41, 42, 43, 45, 96, 106, 111, -15 ]
},
@@ -529,6 +716,7 @@ window.drops = {
name: 'Arlong: Empire Rising',
thumb: 66,
global: true,
+ condition: "None",
Expert: [ 61, 62, 63, 65, 89, 95, 105, 110, -12, -66 ],
Elite: [ 61, 62, 63, 65, 95, 105, 110, -11 ]
},
@@ -537,6 +725,7 @@ window.drops = {
name: 'Krieg\'s Assault!',
thumb: 58,
global: true,
+ condition: "None",
Expert: [ 98, 99, 108, 109, 113, 114, 53, 55, 57, -58, -20 ],
Elite: [ 98, 99, 108, 109, 113, 114, 53, 55, 57, -58, -20, -19 ]
},
@@ -545,14 +734,17 @@ window.drops = {
name: 'Escaped! Morgan',
thumb: 228,
global: true,
- Expert: [ 33, 35, 84, 95, 105, 107, 110, 112, -228, -34, -26, -25, -24, -23, -22 ],
- Elite: [ 33, 35, 84, 95, 105, 107, 110, 112, -228, -34, -26, -25, -24, -23, -22 ]
+ condition: "None",
+ "All Difficulties": [ 33, 35, 84, 95, 105, 107, 110, 112, -228, -34, -26, -25, -24, -23, -22 ]
},
{
name: 'Hina\'s Resort Getaway',
thumb: 232,
global: true,
+ condition: "None",
+ challenge: 'High Score calculated with Crew Cost, Turns Taken and Tap Accuracy',
+ challengeData: [['150,000','1x Blue Elder'],['450,000','1x ATK Cotton Candy'],['750,000','3x Rainbow Gems']],
Expert: [ 43, 49, 79, 85, 96, 106, 231, -230, -229, -221, -208, -62, -54 ],
Elite: [ 43, 49, 96, 111, 117, 231, -230, -229, -221, -208 ]
},
@@ -561,22 +753,27 @@ window.drops = {
name: 'Cobymeppo\'s Proving Ground!',
thumb: 263,
global: true,
- Expert: [ 31, 33, 262, 264, 87, 88, 98, 99, 113, -265, -263, -225, -210, -64, -56, -32 ],
- Elite: [ 31, 33, 262, 264, 87, 88, 98, 99, 113, -265, -263, -225, -210, -64, -56, -32 ]
+ condition: "None",
+ challenge:'Total number of hits above 50,000',
+ challengeData: [['5 Times','1x Yellow Elder'],['15 Times','1x ATK Cotton Candy'],['25 Times','3x Rainbow Gems']],
+ "All Difficulties": [ 31, 33, 262, 264, 87, 88, 98, 99, 113, -265, -263, -225, -210, -64, -56, -32 ]
},
{
name: 'Smoker\'s Great Pursuit',
thumb: 268,
global: true,
- Expert: [ 67, 69, 86, 97, 112, -219, -212, -206, -204, -73, -52, -50 ],
- Elite: [ 67, 69, 86, 97, 112, -219, -212, -206, -204, -73, -52, -50 ]
+ condition: "None",
+ challenge: 'Cumulative Damage dealt to enemies in a single run',
+ challengeData: [['600,000 Damage','1x Green Elder'],['1,400,000 Damage','1y Rainbow Gem & 1x HP Cotton Candy'],['3,000,000 Damage','2x Rainbow Gems, 1x Forbidden Tome']],
+ "All Difficulties": [ 67, 69, 86, 97, 112, -219, -212, -206, -204, -73, -52, -50 ]
},
{
name: 'Tsuru\'s Morning Stroll',
thumb: 297,
global: true,
+ condition: "None",
Expert: [ 99, 88, 114, 296, 298, 299, -236, -234, -223, -217, -202, -200, -199 ],
Elite: [ 99, 88, 114, 296, 298, 299, -236, -234, -223, -202, -200 ]
},
@@ -585,22 +782,25 @@ window.drops = {
name: 'Kalifa\'s Secret Assignment',
thumb: 318,
global: true,
- Expert: [ 86, 97, 110, 112, 317, 319, -259, -253, -216, -215, -62, -56 ],
- Elite: [ 86, 97, 110, 112, 317, 319, -259, -253, -216, -215, -62, -56 ]
+ condition: 'You may only bring STR units into this island',
+ "All Difficulties": [ 86, 97, 110, 112, 317, 319, -259, -253, -216, -215, -62, -56 ]
},
{
name: 'Lucci\'s Artisan Spirit',
thumb: 322,
global: true,
- Expert: [ 85, 96, 111, 112, 321, 323, 325, -251, -218, -75, -74, -54, -21 ],
- Elite: [ 85, 96, 111, 112, 321, 323, 325, -251, -218, -75, -74, -54, -21 ]
+ condition: 'You may only bring DEX units for 15 and 30 Stamina',
+ "All Difficulties": [ 85, 96, 111, 112, 321, 323, 325, -251, -218, -75, -74, -54, -21 ]
},
{
name: 'Franky - Pervert\'s Aesthetic!',
thumb: 337,
global: true,
+ condition: 'You may only bring INT units for 15 and 30 Stamina',
+ challenge: 'Total Damage dealt to enemies in one turn',
+ challengeData: [['150,000 Damage','1x Yellow Elder'],['400,000 Damage','1x ATK Cotton Candy'],['800,000 Damage','3x Rainbow Gems']],
Expert: [ 87, 98, 113, 114, 336, 338, 339, -339, -338, -255, -222, -77, -68 ],
Elite: [ 87, 98, 113, 336, 338, 339, -339, -338, -255, -222, -77, -68 ]
},
@@ -609,114 +809,142 @@ window.drops = {
name: 'Deep Sea Kraken',
thumb: 341,
global: true,
- Expert: [ 28, 40, 60, 213, 215, 340, -292, -291, -290, -261, -257, -214, -71, -44 ],
- Elite: [ 28, 40, 60, 213, 215, 340, -292, -291, -290, -261, -257, -214, -71, -44 ]
+ condition: 'You may only bring QCK units for 15 and 30 Stamina',
+ challenge: 'High Score calculated with Crew Cost, Turns Taken and Tap Accuracy',
+ challengeData: [['200,000 Points','1x Red Elder'],['400,000 Points','1x HP Cotton Candy'],['700,000 Points','3x Rainbow Gems']],
+ "All Difficulties": [ 28, 40, 60, 213, 215, 340, -292, -291, -290, -261, -257, -214, -71, -44, -1413 ]
},
{
name: 'Dr. Hogback\'s Lab of the Dead',
thumb: 386,
global: true,
- Expert: [ 385, 387, -388, -335, -314, -36, -16, -11 ],
- Elite: [ 385, 387, -388, -335, -314, -36, -16, -11 ]
+ condition: 'You may only bring PSY units for 15 and 30 Stamina',
+ challenge: 'High Score calculated with Crew Cost, Turns Taken and Tap Accuracy',
+ challengeData: [['10,000 Points','1x Black Elder'],['40,000 Points','1x Rainbow Gem, 1x ATK Cotton Candy'],['70,000 Points','2x Rainbow Gems, 1x Defence Boost Forbidden Tome']],
+ "All Difficulties": [ 385, 387, -388, -335, -314, -36, -16, -11 ]
},
{
name: 'Perona\'s Worden Garden',
thumb: 392,
global: true,
- Expert: [ 391, 393, 394, -394, -393, -329, -316, -47, -34, -4 ],
- Elite: [ 391, 393, 394, -394, -393, -329, -316, -47, -34, -4 ]
+ condition: 'You can only get STR, QCK, INT and Food Orbs',
+ challenge: 'Total number of hits over 50,000',
+ challengeData: [['3 Times','1x Green Elder'],['12 Times','1x RCV Cotton Candy'],['25 Times','3x Rainbow Gems']],
+ "All Difficulties": [ 391, 393, 394, -394, -393, -329, -316, -47, -34, -4 ]
},
{
name: 'Perv-salom\'s Manly Adventure',
thumb: 405,
global: true,
- Expert: [ 404, 406, 407, -407, -406, -333, -312, -208, -26, -20 ],
- Elite: [ 404, 406, 407, -407, -406, -333, -312, -208, -26, -20 ]
+ condition: 'You can only get QCK, DEX, PSY and Food Orbs',
+ "All Difficulties": [ 404, 406, 407, -407, -406, -333, -312, -208, -26, -20 ]
},
{
name: 'Rising Sun, Rising Fortunes',
thumb: 420,
global: true,
- Expert: [ 36, 37, 47, 48, 49, 50, 51, 59, 63, 211, 233, 420, 421, 422, -422, -332, -308, -225, -206, -204, -8 ],
- Elite: [ 36, 37, 47, 48, 49, 50, 51, 59, 63, 211, 233, 420, 421, 422, -422, -332, -308, -225, -206, -204, -8 ]
+ condition: "None",
+ "All Difficulties": [ 36, 37, 47, 48, 49, 50, 51, 59, 63, 211, 233, 420, 421, 422, -422, -332, -308, -225, -206, -204, -8 ]
},
{
name: 'Adrift!? Humming Brook',
thumb: 424,
global: true,
- Expert: [ 423, 425, -425, -327, -310, -223, -219, -214, -202 ],
- Elite: [ 423, 425, -425, -327, -310, -223, -219, -214, -202 ]
+ condition: 'You can only get STR, DEX, INT and PSY Orbs',
+ challenge: 'Cumulative Damage dealt to enemies in a single run',
+ challengeData: [['500,000 Damage','1x Black Elder'],['1,500,000 Damage','1x ATK Cotton Candy'],['3,000,000 Damage','3x Rainbow Gems']],
+ "All Difficulties": [ 423, 425, -425, -327, -310, -223, -219, -214, -202 ]
},
{
- name: 'Little Ms. Candy the Maiden-Hearted!',
+ name: 'Maiden in Love - First Sight',
thumb: 436,
global: true,
- Expert: [ 433, 434, 435, -384, -372, -371, -359, -217, -210, -19 ],
- Elite: [ 433, 434, 435, -384, -372, -371, -359, -217, -210, -19 ]
+ challenge: 'Damage dealt in a single Round',
+ challengeData: [['350,000','1x Black Elder'], ['900,000','1x HP Cotton Candy'], ['2,000,000','3x Rainbow Gems']],
+ condition: 'Each non-Okama in your Team will take 60 Damage each turn',
+ "All Difficulties": [ 433, 434, 435, -384, -372, -371, -359, -217, -210, -19 ]
},
{
name: 'Supersonic Duck Squadron!',
thumb: 445,
global: true,
- Expert: [ 290, 293, 294, 295, 334, 379, 381, 382, 441, 442, 443, 444, -378, -368, -363, -251, -73, -15 ],
- Elite: [ 290, 293, 294, 295, 334, 379, 381, 382, 441, 442, 443, 444, -378, -368, -363, -251, -73, -15 ]
+ condition: 'Higher Chance of Food orbs',
+ challenge: 'Cumulative Damage dealt to enemies in a single run',
+ challengeData: [['450,000 Damage','1x Yellow Elder'],['1,250,000 Damage','1x RCV Cotton Candy'],['3,000,000 Damage','3x Rainbow Gems']],
+ "All Difficulties": [ 290, 293, 294, 295, 334, 379, 381, 382, 429, 441, 442, 443, 444, -378, -368, -363, -251, -73, -15 ]
},
{
- name: 'Jailbreaking Baroque Works',
+ name: 'Prison Break! Baroque Works',
thumb: 462,
- Expert: [ 460, 461, -398, -396, -370, -361, -253, -236, -234 ],
- Elite: [ 460, 461, -398, -396, -370, -361, -253, -236, -234 ]
+ global: true,
+ condition: '30: Non-Fighter, Evolver, or Booster class characters are weakend; 15: Striker and Slasher class characters are weakened (Note: Multi-class characters such as Fighter / Powerhouse are not affected)',
+ challenge: 'Damage dealt in a single Round',
+ challengeData: [['???','1x ??? Elder'], ['???','1x ?? Cotton Candy'], ['???','3x Rainbow Gems']],
+ "All Difficulties": [ 460, 461, -398, -396, -370, -361, -253, -236, -234 ]
},
{
name: 'Crocodile: Life on the Inside',
thumb: 510,
global: true,
- Expert: [ 509, 511, -402, -400, -374, -357, -259, -212, -209 ],
- Elite: [ 509, 511, -402, -400, -374, -357, -259, -212, -209 ]
+ condition: '30: Non-Striker, Evolver, or Booster class characters are weakend; 15: Fighter and Shooter class characters are weakened (Note: Multi-class characters such as Striker / Slasher are not affected)',
+ challenge: 'Total Damage dealt to enemies in one turn',
+ challengeData: [['120,000 Damage','1x Blue Elder'],['600,000 Damage','1x HP Cotton Candy, 1x Rainbow Gem'],['2,500,000 Damage','1x Cooldown Reduction Forbidden Tome, 2x Rainbow Gems']],
+ "All Difficulties": [ 509, 511, -402, -400, -374, -357, -259, -212, -209 ]
},
{
name: 'Jailer Domino\' Special Guard',
thumb: 538,
- Expert: [ 537, 539, 540, -539, -428, -416, -365, -257, -59 ],
- Elite: [ 537, 539, 540, -539, -428, -416, -365, -257, -59 ]
+ global: true,
+ condition: '30: Non-Shooter, Evolver, or Booster class characters are weakend; 15: Fighter and Slasher class characters are weakened',
+ challenge: 'Cumulative Damage dealt to enemies in a single run',
+ challengeData: [['600,000 Damage','1x Yellow Elder'],['2,000,000 Damage','1x HP Cotton Candy, 1x Rainbow Gem'],['5,000,000 Damage','1x Matching Orb Forbidden Tome, 2x Rainbow Gems']],
+ "All Difficulties": [ 537, 539, 540, -539, -428, -416, -365, -257, -59 ]
},
{
- name: 'Chief Guard Sadi-chan\'s Pun♥ish♥ment',
+ name: 'Chief Jailer Sadie: Cruel and Unusual',
thumb: 550,
- Expert: [ 549, 551, 552, -552, -551, -432, -426, -408, -329, -308, -255 ],
- Elite: [ 549, 551, 552, -552, -551, -432, -426, -408, -329, -308, -255 ]
+ global: true,
+ condition: '30: Non-Slasher, Evolver, or Booster class characters are weakend; 15: Striker and Shooter class characters are weakened',
+ challenge: 'Cumulative Damage dealt to enemies in a single run',
+ challengeData: [['600,000 Damage','1x Black Elder'],['2,000,000 Damage','1x ATK Cotton Candy, 1x Rainbow Gem'],['5,000,000 Damage','1x Defence Boost Forbidden Tome, 2x Rainbow Gems']],
+ "All Difficulties": [ 549, 551, 552, -552, -551, -432, -426, -408, -329, -308, -255 ]
},
{
name: 'Brother Soul! Afro Luffy!',
thumb: 571,
global: true,
- Expert: [ 570, 572, 573, -431, -429, -410, -333, -332, -327, -316, -75 ],
- Elite: [ 570, 572, 573, -431, -429, -410, -333, -332, -327, -316, -75 ]
+ challenge: 'Total number of hits over 50,000',
+ challengeData: [['3 Times','1x Red Elder'],['12 Times','1x RCV Cotton Candy'],['34 Times','3x Rainbow Gems & 1x Forbidden Tome']],
+ "All Difficulties": [ 570, 572, 573, -431, -429, -410, -333, -332, -327, -316, -75 ]
},
{
name: 'Warriors of Shandia! Dreams of a Homeland!',
thumb: 583,
global: true,
- Expert: [ 581, 582, 583, 584, -584, -544, -466, -412, -371, -335, -314, -291 ],
- Elite: [ 581, 582, 583, 584, -584, -544, -466, -412, -371, -335, -314, -291 ]
+ condition: 'All Units considered from the “Sea” will lose 20% to all stats',
+ challenge: 'Total number of hits over 50,000',
+ challengeData: [['4 Times','1x Black Elder'],['16 Times','1x ATK Cotton Candy'],['38 Times','3x Rainbow Gems']],
+ "All Difficulties": [ 581, 582, 583, 584, -584, -544, -466, -412, -371, -335, -314, -291 ]
},
{
name: 'Pirate Apprentices! Shanks and Buggy',
thumb: 599,
+ global: true,
+ condition: 'You cannot use any two units that are the same',
Expert: [ 598, 600, -504, -467, -463, -414, -372, -332, -310, -77 ],
Elite: [ 598, 600, -467, -463, -414, -372, -332, -310, -77 ]
},
@@ -724,145 +952,354 @@ window.drops = {
{
name: 'Raging Cook! Red Leg Zeff',
thumb: 607,
- Expert: [ 606, 608, 609, -502, -457, -449, -312, -52, -50 ],
- Elite: [ 606, 608, 609, -502, -457, -449, -312, -52, -50 ]
+ global: true,
+ condition: 'You cannot use any two units that are the same',
+ "All Difficulties": [ 606, 608, 609, -502, -457, -449, -312, -52, -50 ]
},
{
- name: 'Keimi and Hachi\'s Takoyaki Shop!',
+ name: 'Camie and Hachi\'s Takoyaki Shop!',
thumb: 635,
- Expert: [ 634, 636, 637, -636, -464, -451, -396, -370, -367, -359, -64 ],
- Elite: [ 634, 636, 637, -636, -464, -451, -396, -370, -367, -359, -64 ]
+ global: true,
+ condition: 'No Units above the cost of 49 is allowed',
+ challenge: 'Total number of hits over 50,000',
+ challengeData: [['4 Times','1x Blue Elder'],['8 Times','1x Rainbow Gem, 1x HP Cotton Candy'],['22 Times','2x Rainbow Gems, 1x Orb Matching Forbidden Tome']],
+ "All Difficulties": [ 634, 636, 637, -636, -464, -451, -396, -370, -367, -359, -64 ]
},
{
- name: 'Invasion! Pirate Arlong\'s Crew!!',
+ name: 'Shark Attack! Arlong Pirates',
thumb: 656,
- Expert: [ 655, 657, 658, -658, -500, -465, -455, -453, -398, -357, -60 ],
- Elite: [ 655, 657, 658, -658, -500, -465, -455, -453, -398, -357, -60 ]
+ global: true,
+ condition: 'You can only get STR, QCK, DEX, PSY and INT orbs',
+ "All Difficulties": [ 655, 657, 658, -658, -500, -465, -455, -453, -398, -357, -60 ]
},
{
- name: 'Fight! Suna Suna Clan!!',
+ name: 'Fight! Sand-Sand Band!!',
thumb: 664,
- Expert: [ 663, 665, 667, -667, -522, -508, -506, -459, -378, -221, -73 ],
- Elite: [ 663, 665, 667, -667, -522, -508, -506, -459, -378, -221, -73 ]
+ global: true,
+ condition: 'Heatwave causes damage every 2 turns',
+ "Japan": [ 663, 665, 667, -667, -522, -508, -506, -459, -378, -221, -73, -1117 ],
+ "Global": [ 663, 665, 667, -667, -639, -508, -506, -459, -378, -221, -73 ]
},
{
- name: 'Guidance from the Sound of a Bell! Calgara and Noland!',
+ name: 'Led by the Light of Shandora! Calgara & Noland!',
thumb: 688,
- Expert: [ 687, 689, -542, -524, -528, -429, -428, -401, -365, -218 ],
- Elite: [ 687, 689, -542, -524, -528, -429, -428, -401, -365, -218 ],
+ global: true,
+ condition: 'Bomb orbs appear',
+ "Japan": [ 687, 689, -542, -524, -528, -429, -428, -402, -365, -218, -1119, -1177 ],
+ "Global": [ 687, 689, -542, -645, -647, -429, -428, -402, -365, -218 ]
},
{
- name: "Knight of the Sky Gan Fall",
+ name: "Sky Night Ganfor",
thumb: 713,
- Expert: [ 712, 714, 715, -716, -546, -541, -520 ],
- Elite: [ 712, 714, 715, -716, -546, -541, -520 ]
+ global: true,
+ condition: '30: Non-Free Spirit, Evolver, or Booster class characters are weakend; 15: Striker and Shooter class characters are weakened',
+ challenge: 'Cumulative Damage dealt to enemies in a single run',
+ challengeData: [['600,000','1x Blue Elder'],['2,000,000','1x RCV Cotton Candy, 1x Rainbow Gem'],['5,000,000','1x Lock Resistance Forbidden Tome, 2x Rainbow Gems']],
+ "Japan": [ 712, 714, 715, -716, -546, -541, -520, -1115, -400, -202, -363, -204 ],
+ "Global": [ 712, 714, 715, -716, -643, -546, -541, -400, -202, -363, -204 ]
},
{
name: "T-Bone's Absolute Justice",
thumb: 724,
- Expert: [ 721, 723, -590, -564, -563, -529, -526, -384, -361, -219 ],
- Elite: [ 721, 723, -590, -564, -563, -529, -526, -384, -361, -219 ]
+ global: true,
+ condition: 'You can only bring INT, PSY and QCK units',
+ "Japan": [ 721, 723, -590, -564, -563, -530, -526, -384, -361, -219, -1173 ],
+ "Global": [ 721, 723, -590, -564, -563, -530, -641, -384, -361, -219 ]
},
{
name: "Explosive! Wanze's Ramen Kenpo!!",
thumb: 743,
- Expert: [ 740, 742, -560, -558, -586, -567, -566, -412, -225, -18 ],
- Elite: [ 740, 742, -560, -558, -586, -567, -566, -412, -225, -18 ]
+ global: true,
+ condition: 'You can only bring STR, QCK and DEX units',
+ "Japan": [ 740, 742, -560, -558, -586, -567, -566, -412, -225, -18, -1208, -1212 ],
+ "Global": [ 740, 742, -671, -673, -586, -567, -566, -412, -225, -18 ]
},
{
name: "Twilight Party DEAD or TREAT!!",
thumb: 761,
- Expert: [ 761, 762, 763, 764, 765, -610, -588, -565, -556, -426, -408, -261, -217 ],
- Elite: [ 761, 762, 763, 764, 765, -610, -588, -565, -556, -426, -408, -261, -217 ]
- },
-
- {
- name: "Twilight Party DEAD or TREAT!! (Global)",
- thumb: 763,
global: true,
- Expert: [ 761, 762, 763, 764, 765, -426, -408, -332, -308, -292, -261, -217, -8 ],
- Elite: [ 761, 762, 763, 764, 765, -426, -408, -332, -308, -292, -261, -217, -8 ]
+ condition: "None",
+ "Japan": [ 761, 762, 763, 764, 765, -610, -588, -565, -556, -426, -408, -261, -217, -1210, -1413 ],
+ "Global": [ 761, 762, 763, 764, 765, -426, -408, -332, -308, -292, -261, -217, -8, -1413 ]
},
{
name: "Midnight Party DEAD or TREAT!!",
thumb: 766,
- Expert: [ 762, 766, 767, 768, 769, -629, -611, -569, -554, -431, -410, -367, -223 ],
- Elite: [ 762, 766, 767, 768, 769, -629, -611, -569, -554, -431, -410, -367, -223 ]
- },
-
- {
- name: "Midnight Party DEAD or TREAT!! (Global)",
- thumb: 768,
global: true,
- Expert: [ 762, 766, 767, 768, 769, -431, -367, -291, -253, -251, -223, -212, -75 ],
- Elite: [ 762, 766, 767, 768, 769, -431, -367, -291, -253, -251, -223, -212, -75 ]
+ condition: "None",
+ "Japan": [ 762, 766, 767, 768, 769, -629, -611, -569, -554, -431, -410, -367, -223, -1175 ],
+ "Global": [ 762, 766, 767, 768, 769, -431, -367, -291, -253, -251, -223, -212, -75 ]
},
{
name: "Evil Manager Breed's Marine Circus!",
thumb: 797,
- Expert: [ 796, 798, 799, 800, -800, -639, -628, -562, -414, -432, -380, -75 ],
- Elite: [ 796, 798, 799, 800, -800, -639, -628, -562, -414, -432, -380, -75 ]
+ global: true,
+ condition: 'You can only bring Fighter and Powerhouse units',
+ challenge: 'High Score calculated with Crew Cost, Turns Taken and Tap Accuracy',
+ challengeData: [['100,000','1x Purple Elder'],['400,000','1x RCV Candy, 1x Rainbow Gem'],['750,000','1x Auto-Heal Skullbook, 2x Rainbow Gem']],
+ "Japan": [ 796, 798, 799, 800, -800, -639, -628, -562, -414, -432, -380, -75 ],
+ "Global": [ 796, 798, 799, 800, -800, -677, -628, -562, -414, -432, -380, -75 ]
},
{
name: "Nami and Lola's Great Proposal Plan",
thumb: 808,
- Expert: [ 807, 809, 811, -811, -645, -641, -631, -502, -11, -12, -9 ],
- Elite: [ 807, 809, 811, -811, -645, -641, -631, -502, -11, -12, -9 ]
+ global: true,
+ condition: 'You can only bring Slasher and Cerebral units. (No Evolution/Booster)',
+ "Japan": [ 807, 809, 811, -811, -645, -641, -631, -502, -11, -12, -9 ],
+ "Global": [ 807, 809, 811, -811, -760, -675, -631, -502, -11, -12, -9 ],
},
{
name: "Legendary Shipbuilding Company Tom's Workers",
thumb: 848,
- Expert: [ 847, 849, 850, -849, -647, -617, -616, -615, -578, -508, -455 ],
- Elite: [ 847, 849, 850, -849, -647, -617, -616, -615, -578, -508, -455 ]
+ global: true,
+ condition: 'You can only bring Impact and Free Spirit units. (No Evo/Boosters)',
+ challenge: 'Total Damage dealt to enemies in one turn',
+ challengeData: [['100,000 Damage','1x DEX Elder Turtle'],['500,000 Damage','1x Rainbow Gem, 1x ATK Cotton Candy'],['2,000,000 Damage','2x Rainbow Gems, 1x Auto-Heal Forbidden Tome']],
+ "Japan": [ 847, 849, 850, -849, -647, -617, -616, -615, -578, -508, -455, -1121 ],
+ "Global": [ 847, 849, 850, -849, -750, -617, -616, -615, -578, -508, -455, -1121 ]
},
{
name: "Wapol's Counterattack",
thumb: 852,
- Expert: [ 328, 330, 331, 333, 851, 853, 854, -854, -649, -643, -614, -463, -457, -327, -22 ],
- Elite: [ 328, 330, 331, 333, 851, 853, 854, -854, -649, -643, -614, -463, -457, -327, -22 ]
+ global: true,
+ condition: 'You can only bring Shooter and Driven units. (No Evo/Boosters)',
+ challenge: 'Cumulative Damage dealt to enemies in a single run',
+ challengeData: [['400,000 Damage','1x QCK Elder Turtle'],['1,400,000 Damage','1x ATK Cotton Candy, 1x Rainbow Gem'],['4,000,000 Damage','2x Rainbow Gems, 1x Despair Resistance Forbidden Tome']],
+ "All Difficulties": [ 328, 330, 331, 333, 851, 853, 854, -854, -649, -643, -614, -463, -457, -327, -22 ]
},
{
name: "Lightning Speed! Strawhat Crew's Surprise Visit",
thumb: 866,
- Expert: [ 41, 42, 53, 235, 395, 397, 419, 426, 427, 432, 563, 564, 866, 867, 868, -709, -673, -671, -633, -500, -467, -465, -451, -431 ],
- Elite: [ 41, 42, 53, 235, 395, 397, 419, 426, 427, 432, 563, 564, 866, 867, 868, -709, -673, -671, -633, -500, -467, -465, -451, -431 ]
+ condition: "None",
+ challenge:'Total number of hits above 50,000',
+ challengeData: [['4 Times','1x INT Elder'],['9 Times','1x ATK Cotton Candy, 1x Rainbow Gem'],['22 Times','1x Despair Resistance Forbidden Tome, 2x Rainbow Gems']],
+ "All Difficulties": [ 41, 42, 53, 235, 395, 397, 419, 426, 427, 432, 563, 564, 866, 867, 868, -709, -673, -671, -633, -500, -467, -465, -451, -431 ]
},
{
name: "Riverside Banquet! Enter the Crazy Ones!",
thumb: 885,
- Expert: [ 885, 886, 887, -887, -704, -703, -677, -675, -504, -453, -416 ],
- Elite: [ 885, 886, 887, -887, -704, -703, -677, -675, -504, -453, -416 ]
+ condition: 'Highly increased chance of TND, Bomb, and G orbs',
+ "All Difficulties": [ 885, 886, 887, -887, -704, -703, -677, -675, -504, -453, -416 ]
},
{
name: "Mountaintop Banquet! Enter the Generals!",
thumb: 897,
- Expert: [ 897, 898, 899, -899, -754, -702, -701, -669, -528, -466, -449, -464 ],
- Elite: [ 897, 898, 899, -899, -754, -702, -701, -669, -528, -466, -449, -464 ]
+ condition: 'Only STR/DEX/QCK/PSY/INT orbs will appear',
+ "All Difficulties": [ 897, 898, 899, -899, -754, -702, -701, -669, -528, -466, -449, -464, -1177 ]
},
{
name: "Men are Forbidden!? The Secret Flower Garden",
thumb: 918,
- Expert: [ 917, 919, 920, -920, -791, -756, -720, -706, -705, -542, -541, -522 ],
- Elite: [ 917, 919, 920, -920, -791, -756, -720, -706, -705, -542, -541, -522 ]
- }
-
+ global: true,
+ condition: 'You can only bring DEX units',
+ "All Difficulties": [ 917, 919, 920, -920, -791, -756, -720, -706, -705, -542, -541, -522, -1117 ]
+ },
+
+ {
+ name: "Hannyabal's Great Ambition",
+ thumb: 929,
+ global: true,
+ condition: 'You can only bring STR units',
+ "All Difficulties": [ 928, 930, 931, -752, -758, -520, -729, -733, -787, -930, -544, -506, -1115 ]
+ },
+
+ {
+ name: "Encounter! Whitebeard Pirates",
+ thumb: 946,
+ global: true,
+ condition: "You can only bring PSY units",
+ "Japan": [ 946, 947, 948, 949, -718, -750, -760, -526, -793, -735, -546, -738, -1173 ],
+ "Global": [ 946, 947, 948, 949, -718, -524, -1119, -528, -1177, -526, -793, -735, -546, -738, -1173 ]
+ },
+
+ {
+ name: "Clash! Whitebeard Pirates",
+ thumb: 979,
+ global: true,
+ condition: "You can only bring INT units",
+ challenge: 'High Score calculated with Crew Cost, Turns Taken and Tap Accuracy',
+ challengeData: [['150,000','1x Blue Elder'],['420,000','1x HP Cotton Candy, 1x Rainbow Gem'],['700,000','2x Rainbow Gems, 1x Orb Forbidden Tome']],
+ "Japan": [ 979, 980, 981, 949, -459, -838, -842, -524, -789, -736, -731, -563, -1119 ],
+ "Global": [ 979, 980, 981, 949, -459, -838, -842, -560, -789, -736, -731, -563, -1212 ]
+ },
+
+ {
+ name: "Let's Find Our Captain! Heart Pirates!",
+ condition: "You can only bring QCK units",
+ thumb: 1003,
+ "All Difficulties": [ 1002, 1004, 1005, -748, -844, -558, -846, -737, -1006, -785, -564, -1208 ]
+ },
+
+ {
+ name: "Rare Animal Island's Count Butler",
+ thumb: 1011,
+ condition: "None",
+ global: true,
+ "Global": [ 1010, 1012, 1013, 1014, -1014, -530, -840, -671, -880, -739, -812, -565 ],
+ "Japan": [ 1010, 1012, 1013, 1014, -1014, -530, -840, -560, -880, -739, -812, -565, -1212 ]
+ },
+
+ {
+ name: "Temptation!? The Queen of Kamabakka Queendom!",
+ thumb: 1037,
+ condition: "Only DEX/RCV/TND orbs will appear",
+ "All Dificulties": [ 1036, 1038, -874, -876, -878, -554, -813, -814, -566, -1175 ]
+ },
+
+ {
+ name: "The One Who Seeks the Truth of History: Archaeologist Nico Olvia",
+ thumb: 1049,
+ condition: "Only TND/RCV/INT orbs will appear",
+ "All Difficulties": [ 1048, 1050, 1052, -556, -567, -586, -614, -816, -870, -872, -908, -1210 ]
+ },
+
+ {
+ name: "Pirate Ship Competition! \"Dead End\" Opens!",
+ thumb: 1072,
+ global: true,
+ //OLD condition: "STR/DEX/QCK units get their ATK boosted by 1.6x and their HP reduced by 90%. INT/PSY units get their ATK reduced by 80% and their HP boosted by 2.0x",
+ condition: "STR/DEX/QCK units get their ATK boosted by 1.6x. INT/PSY units get their HP boosted by 2.0x",
+ "All Difficulties": [ 1069, 1071, 1073, -562, -906, -914, -645, -890, -587, -629, -888, -1070]
+ },
+
+ {
+ name: "Dr. Indigo & Scarlet!",
+ thumb: 1095,
+ global: true,
+ //OLD condition: "Boosts ATK of Driven and Powerhouse characters by 2x, other classes get .5x ATK. Boosts HP of Slasher and Fighter characters by 2x, other classes get .5x HP. (This STACKS for characters with multiple classes)",
+ condition: "Boosts ATK of Driven characters by 2x and boosts HP for Powerhouse characters by 2x.",
+ "All Difficulties": [ 1094, 1096, 1098, -649, -910, -647, -891, -590, -611, -893, -1098, -912]
+ },
+
+ {
+ name: "Robin and Nami's Secret Undercover Investigation",
+ thumb: 1112,
+ global: true,
+ condition: "Boosts ATK of Cerebral and Free Spirit characters by 2x, other classes get .5x ATK. Boosts HP of Striker and Shooter characters by 2x, other classes get .5x HP. (This STACKS for characters with multiple classes)",
+ "All Difficulties": [ 1109, 1111, 1113, -23, -628, -639, -641, -892, -937, -939, -941 ]
+ },
+
+ {
+ name: "Behind the Scenes Intelligency Agency, CP9",
+ thumb: 1137,
+ condition: "Only [STR], [QCK], [DEX], [INT], and [PSY] orbs appear",
+ "All Difficulties": [ 1136, 1137, 1138, 1139, -935, -643, -673, -894, -943, -995, -615, -705, -704 ]
+ },
+
+ {
+ name: "Welcome To The Gran Tesoro!",
+ thumb: 1167,
+ global: true,
+ condition: "None",
+ "All Difficulties": [ 1166, 1168, 1170, -578, -999, -991, -993, -675, -508, -616, -703, -1121 ]
+ },
+
+ {
+ name: "Rumbar Pirates!",
+ thumb: 1203,
+ condition: "'Musical' units get their stats boosted by 1.5x (Dancers, Singers, Playing an instrument, etc)",
+ "All Difficulties": [ 1202, 1204, 1206, -1001, -997, -1207, -677, -896, -631, -954, -1206, -617, -1027 ]
+ },
+
+ {
+ name: "World Pirates!",
+ thumb: 1215,
+ condition: "Total Crew Cost must be lower than 180 (Including friend captain)",
+ "All Difficulties": [ 1215, 1216, 1217, 1218, -1025, -1029, -1033, -671, -956, -964, -633, -504, -1218 ]
+ },
+
+ {
+ name: "Revolutionary Armed Forces!",
+ thumb: 1242,
+ condition: "Free Spirit Characters have their cooldowns reduced by 10 turns at the start of the fight",
+ "All Difficulties": [ 1241, 1243, -1035, -965, -1031, -1081, -754, -966, -502, -707, -955 ]
+ },
+
+ {
+ name: "Gather! Whitebeard Alliance",
+ thumb: 1254,
+ condition: "Driven Characters have their cooldowns reduced by 10 turns at the start of the fight",
+ "All Difficulties": [ 1254, 1255, 1256, -669, -1077, -1079, -967, -972, -974, -750, -701, -500 ]
+ },
+
+ {
+ name: "Young Donquixote Pirates - Baby 5 And Buffalo",
+ thumb: 1287,
+ condition: "Child-like characters get their ATK and HP boosted by 3.5x, RCV by 1.5x, and cooldowns reduced by 7 turns at the start of the fight",
+ "All Difficulties": [ 1286, 1288, 1290, -963, -1045, -251, -760, -1083, -1129, -506, -1062, -702 ]
+ },
+
+ {
+ name: "Jailbreak Battle! Mr. 3 and Buggy",
+ thumb: 1304,
+ condition: "Shooter and Fighter characters are Silenced for 99 turns and have their ATK reduced by a variable amount. (75% on 30 stamina)",
+ "All Difficulties": [ 1301, 1303, 1152, 1151, 551, 539, -718, -752, -1125, -1133, -15, -203, -733, -1056, -1060 ]
+ },
+
+ {
+ name: "Tontatta Kingdom Island Part 1: Leo",
+ thumb: 1328,
+ condition: "Slasher characters are Silenced for 99 turns and have their ATK reduced by a variable amount. (75% on 30 stamina)",
+ "All Difficulties": [ 1327, 1329, 1330, -1085, -1127, -1131, -1058, -758, -760, -735, -4, -508 ]
+ },
+
+ {
+ name: "Tontatta Kingdom Island Part 2: Mansherry",
+ thumb: 1332,
+ condition: "Striker characters are Silenced for 99 turns and have their ATK reduced by a variable amount. (70% on 30 stamina)",
+ "All Difficulties": [ 1331, 1333, 1334, -720, -1186, -1190, -756, -1188, -1151, -1153, -738 ]
+ },
+
+ {
+ name: "Big Mom Pirates!",
+ thumb: 1357,
+ "All Difficulties": [ 1356, 1358, -1123, -1184, -1182, -1152, -1157, -8, -840, -736, -610 ]
+ },
+
+ {
+ name: "Soldier-san's Training!",
+ thumb: 1384,
+ "All Difficulties": [ 1383, 1385, -748, -1234, -1075, -1230, -1155, -1154, -846, -842, -739 ]
+ },
+
+ {
+ name: "Shambles! Tashigi and Smoker?!?",
+ thumb: 1397,
+ condition: "Your captain will be switched with your middle right character when you encounter Law.",
+ "All Difficulties": [ 1396, 1398, -1192, -1232, -1238, -844, -838, -1159, -1389, -12, -737, -257 ]
+ },
+
+ {
+ name: "Marines! Sengoku the Fleet Admiral!",
+ thumb: 1416,
+ condition: "You can only bring INT units",
+ "All Difficulties": [ 1415, 1417, 1418, -1418, -870, -1276, -1274, -1236, -874, -253, -1223, -813 ]
+ },
+
+ {
+ name: "Happo Navy! The 13th Leader Appears!",
+ thumb: 1426,
+ condition: "You can only bring DEX units",
+ "All Difficulties": [ 1425, 1427, 1428, -1240, -1272, -1270, -1227, -1224, -872, -878, -255, -812 ]
+ },
+
],
@@ -894,6 +1331,7 @@ window.drops = {
{
name: 'Clash!! Black Arm Zephyr',
thumb: 353,
+ global: true,
Master: [ 88, 114, 118, 352, 354 ],
Expert: [ 99, 114, 117, 352, 354 ]
},
@@ -925,12 +1363,15 @@ window.drops = {
{
name: 'Clash!? Usopp\'n',
thumb: 518,
- 'Ultimate': [ 517 ]
+ showManual: true,
+ global: true,
+ 'Ultimate': [ 517, -15, -16, -223 ]
},
{
name: 'Clash!! Heracles\'n',
thumb: 516,
+ global: true,
Master: [ 87, 97, 113, 117, 118, 294, 295, 303, 429, 515 ],
Expert: [ 87, 98, 113, 117, 293, 295, 429, 379, 515 ]
},
@@ -938,6 +1379,7 @@ window.drops = {
{
name: 'Clash!! Aokiji',
thumb: 575,
+ global: true,
Ultimate: [ 88, 114, 118, 304, 574 ],
Master: [ 114, 118, 574 ]
},
@@ -954,6 +1396,7 @@ window.drops = {
{
name: 'Clash!! Duval',
thumb: 654,
+ global: true,
Master: [ 112, 118, 302, 652 ],
Expert: [ 86, 97, 112, 652 ]
},
@@ -961,6 +1404,7 @@ window.drops = {
{
name: 'Clash!! Buster Call',
thumb: 771,
+ global: true,
Master: [ 110, 111, 112, 113, 114, 770, 771, 772, 773, 774, 775 ],
Expert: [ 110, 111, 112, 113, 114, 770, 771, 772, 773, 774, 775 ]
},
@@ -975,17 +1419,78 @@ window.drops = {
{
name: 'Clash!! Tyrant Kuma',
thumb: 836,
- Master: [ 835 ],
- Expert: [ 835 ]
+ global: true,
+ Ultimate: [ 835 ],
+ Master: [ 835 ]
},
{
name: 'Clash!! Pirate Empress Hancock',
thumb: 865,
+ global: true,
Ultimate: [ 864 ],
Master: [ 864 ],
Expert: [ 864 ]
- }
+ },
+
+ {
+ name: 'Clash!! Pica',
+ thumb: 932,
+ Master: [ 932 ],
+ Expert: [ 932 ]
+ },
+
+ {
+ name: 'Clash!! Kizaru',
+ thumb: 978,
+ Ultimate: [ 977 ],
+ Master: [ 977 ]
+ },
+
+ {
+ name: 'Clash!? Impostor Straw Hat Pirates',
+ showManual: true,
+ thumb: 989,
+ Ultimate: [ 985, 986, 987, 988, -989, -4, -8, -11, -12, -15, -16, -556, -528, -520, -554, -558, -20, -217, -709, -1115, -1177, -1175, -1210, -1208 ]
+ },
+
+ {
+ name: 'Clash!! Sabo',
+ thumb: 1047,
+ Ultimate: [ 1046 ],
+ Master: [ 1046 ],
+ Expert: [ 1046 ]
+ },
+
+ {
+ name: 'Clash!! Shiki',
+ thumb: 1108,
+ global: true,
+ Ultimate: [ 1107 ],
+ Master: [ 1107 ],
+ Expert: [ 1107 ]
+ },
+
+ {
+ name: 'Clash!! Gild Tesoro',
+ thumb: 1163,
+ global: true,
+ Master: [ 1162, 1164 ],
+ Ultimate: [ 1162, 1164, 1180 ]
+ },
+
+ {
+ name: 'Clash!! Akainu',
+ thumb: 1298,
+ Ultimate: [ 1297 ]
+ },
+ {
+ name: 'Clash!! Warden Magellan',
+ thumb: 1374,
+ condition: "Take 7% MAX Health in Environmental Damage",
+ Master: [ 1373 ],
+ Expert: [ 1373 ],
+ },
],
@@ -999,23 +1504,83 @@ window.drops = {
{
name: 'Battle Royal! Oars',
- thumb: 414,
- 'Master': [ -367, -316, -314, -312, -308, -259, -257, -255, -253, -251, -221, -218, -217, -210, -75, -30, -16, -15, -8 ]
+ thumb: 893,
+ challenge:'Total number of hits above 50,000',
+ challengeData: [['6 Times','1x Forbidden Tome + 1x Red Elder'],['14 Times','1x Forbidden Tome, 1x RCV Cotton Candy, 1x Rainbow Gem'],['32 Times','1x Bind Resistance Forbidden Tome, 2x Rainbow Gems']],
+ "All Difficulties": [ -367, -316, -314, -312, -308, -259, -257, -255, -253, -251, -221, -218, -217, -210, -75, -30, -16, -15, -8 ]
},
{
name: 'Girls of Summer Paradise',
thumb: 683,
- Expert: [ 659, 680, 682, 684, 686 ]
+ global: true,
+ challenge: 'Total number of hits over 30,000',
+ challengeData: [['Japan Rewards', ''],['10 Times','#686 Vivi\'s Breather Unit'],['35 Times','1x HP Cotton Candy'],['72 Times','3x Rainbow Gems'], ['Global Rewards', ''],['10 Times','1x Bind Resistance Forbidden Tome, 1x Despair Resistance Forbidden Tome, 1x Auto-Heal Forbidden Tome, 1x Rainbow Gem'],['35 Times','1x Red Elder Turtle, 1x Blue Elder Turtle, 1x Green Elder Turtle, 1x Yellow Elder Turtle, 1x Black Elder Turtle, 2x Rainbow Gems'],['72 Times','5x Rainbow Gems']],
+ "All Difficulties": [ 659, 680, 682, 684, 1200, 1198 ]
+ },
+
+ {
+ name: 'Halloween Event Characters',
+ thumb: 1300,
+ "All Difficulties": [ 1299, 1305, 1325 ],
+ },
+
+ {
+ name: '2nd Anniversary Celebration! Duel! Ace',
+ thumb: 1023,
+ "All Difficulties": [ 1023 ]
},
{
- name: 'Colosseum',
+ name: 'Coliseum',
thumb: 779,
- Exhibition: [ 776, 778, 803, 832, 834, 859, 861, 883, 902, 904 ],
- Underground: [ 776, 778, 803, 832, 834, 859, 861, 883, 902, 904 ],
- Chaos: [ 776, 778, 780, 803, 805, 830, 832, 834, 859, 861, 881, 883, 900, 902 ]
- }
+ Exhibition: [ 776, 778, 803, 832, 834, 859, 861, 883, 902, 904, 925, 927, 952, 984, 1017, 1019, 1197, 1221, 1252, 1253, 1294, 1311, 1339, 1340, 1377, 1402, 1423, 1424 ],
+ Underground: [ 776, 778, 803, 832, 834, 859, 861, 883, 902, 904, 925, 927, 952, 984, 1017, 1019, 1197, 1221, 1252, 1253, 1294, 1311, 1339, 1340, 1377, 1402, 1423, 1424 ],
+ Chaos: [ 776, 778, 780, 803, 805, 830, 832, 834, 859, 861, 881, 883, 900, 902, 923, 925, 950, 982, 984, 1017, 1015, 1040, 1042, 1086, 1088, 1090, 1101, 1103, 1105, 1140, 1142, 1144, 1195, 1219, 1221, 1250, 1252, 1291, 1294, 1309, 1311, 1337, 1339, 1340, 1375, 1377, 1400, 1402, 1421, 1423 ]
+ },
+
+ {
+ name: 'Rescue Ace Event - Akainu',
+ thumb: 1283,
+ condition: "10, 20, 30, 35 stamina difficulty. 30 and 35 Stamina has a chance of dropping the Universal Skill Book.",
+ "All Difficulties": [ -261, -562, -720, -748, -935, -1413 ]
+ },
+
+ {
+ name: 'Rescue Ace Event - Aokiji',
+ thumb: 1280,
+ condition: "10, 20, 30, 35 stamina difficulty. 30 and 35 Stamina has a chance of dropping the Universal Skill Book.",
+ "All Difficulties": [ -416, -459, -530, -669, -578, -1121 ]
+ },
+
+ {
+ name: 'Rescue Ace Event - Kizaru',
+ thumb: 1228,
+ condition: "10, 20, 30, 35 stamina difficulty. 30 and 35 Stamina has a chance of dropping the Universal Skill Book.",
+ "All Difficulties": [ -367, -649, -718, -870, -1001 ]
+ },
+
+ {
+ name: 'Invasion! Young Whitebeard',
+ thumb: 1258,
+ condition: "Has a chance of appearing at the end of ANY Raid boss. You MUST use the same team that you just used to complete the raid boss to fight Young Whitebeard.",
+ "All Difficulties": [ 1257 ]
+ },
+
+ {
+ name: 'Invasion! Red Hair Shanks',
+ thumb: 1380,
+ condition: "Has a chance of appearing at the end of ANY Chaos Coliseum boss. You MUST use the same team that you just used to complete the Coliseum boss to fight Shanks.",
+ "All Difficulties": [ 1379 ]
+ },
+
+ {
+ name: 'The Flashback Before the Reunion! Fight all your Enemies!',
+ thumb: null,
+ condition: "The fight gets more difficult every time you complete it until it gets to 40 stamina.",
+ "Final Stage": [ 37, 38, 53, 55, 43, 36, 45, 57, 65, 203, 205, 383, 395, 397, 399, 401, 464, 465, 541, 545, 630, 632, 728, 730, 815, 889, 893, 973, 1055, 1057, 1158, 1156, 1227, 1228, 1280, 1283, 1353],
+ "Evolvers and Boosters": [ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 115, 116, 117, 118, 266, 300, 301, 302, 303, 304, 1180, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 189, 190, 191, 192, 193, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351 ]
+ },
]
@@ -1025,7 +1590,7 @@ var bonuses = [
{ type: 'stamina' , x: 3 , y: 0 },
{ type: 'stamina' , x: 6 , y: 5 },
{ type: 'stamina' , x: 6 , y: 12 },
- { type: 'stamina' , x: 6 , y: 19, stop: 4 },
+ { type: 'stamina' , x: 6 , y: 19 },
{ type: 'drop' , x: 6 , y: 1 },
{ type: 'drop' , x: 6 , y: 8 },
{ type: 'drop' , x: 6 , y: 15 },
@@ -1034,6 +1599,7 @@ var bonuses = [
{ type: 'beli' , x: 1 , y: 4 },
{ type: 'beli' , x: 6 , y: 10 },
{ type: 'beli' , x: 6 , y: 17 },
+ { type: 'beli' , x: 6 , y: 24 },
{ type: 'exp' , x: 2 , y: 2 },
{ type: 'exp' , x: 6 , y: 2 },
{ type: 'exp' , x: 5 , y: 5, stop: 5 },
diff --git a/common/data/effects.js b/common/data/effects.js
index d5c82c5b9..1bb7bcf39 100644
--- a/common/data/effects.js
+++ b/common/data/effects.js
@@ -2,7 +2,8 @@ window.effects = {
// always use unique IDs, and don't ever change an ID once you've set it
// IDs must always be greater than 0
- // last ID used: 25
+ // last ID used: 41
+ // Use p.type instead of p.unit.type here
'Baroque Works (pre-v4.0)': {
description: 'Stats of non-Fighter units reduced by 90%',
@@ -116,12 +117,12 @@ window.effects = {
},
'Gan Fall': {
- description: 'Stats of non-Freedom, non-Booster, non-Evolver units reduced by 90%',
+ description: 'Stats of non-Free Spirit, non-Booster, non-Evolver units reduced by 90%',
thumb: 713,
id: 11, // don't change this
- atk: function(p) { return p.class.has('Freedom') || p.class.has('Booster') || p.class.has('Evolver') ? 1 : 0.1; },
- hp: function(p) { return p.class.has('Freedom') || p.class.has('Booster') || p.class.has('Evolver') ? 1 : 0.1; },
- rcv: function(p) { return p.class.has('Freedom') || p.class.has('Booster') || p.class.has('Evolver') ? 1 : 0.1; }
+ atk: function(p) { return p.class.has('Free Spirit') || p.class.has('Booster') || p.class.has('Evolver') ? 1 : 0.1; },
+ hp: function(p) { return p.class.has('Free Spirit') || p.class.has('Booster') || p.class.has('Evolver') ? 1 : 0.1; },
+ rcv: function(p) { return p.class.has('Free Spirit') || p.class.has('Booster') || p.class.has('Evolver') ? 1 : 0.1; }
},
'Orb amplification (1.05x)': {
@@ -178,7 +179,7 @@ window.effects = {
description: 'Damage of STR and DEX characters nullified',
thumb: 836,
id: 19, // don't change this
- damage: function(p) { return p.type == 'STR' || p.type == 'DEX' ? 0 : 1; }
+ atk: function(p) { return p.type == 'STR' || p.type == 'DEX' ? 0 : 1; }
},
'Shu (Expert)': {
@@ -209,18 +210,192 @@ window.effects = {
comboShield: 26
},
- 'Hancock chain bug': {
- description: 'Allows higher than usual chain multipliers',
- thumb: 865,
- id: 24, // don't change this
- chainLimiter: function(p) { return Infinity; }
- },
-
'There\'s the G!': {
description: 'Activates [G] orb support even when Lao-G is not in the team',
thumb: 880,
+ id: 24, // don't change this
+ gOrbsEnabled: true
+ },
+
+ 'Coliseum Franky': {
+ description: 'Activates [G] orb Support, boosts Orbs by 1.5x',
+ thumb: 560,
id: 25, // don't change this
+ orb: function(p) { return p.orb == 2.0 ? 1.5 : (p.orb == 0.5 ? 10/15 : 1); },
gOrbsEnabled: true
},
-};
+ 'Coliseum Killer': {
+ description: 'ATK of all units reduced by 95%',
+ thumb: 1043,
+ id: 26, // don't change this
+ atk: function(p) { return 0.05; }
+ },
+
+ 'Coliseum Kid': {
+ description: 'Perfect hit barrier (2 hits)',
+ thumb: 966,
+ id: 27,
+ comboShield: 2,
+ comboType: 'Perfect'
+ },
+
+ 'Coliseum Fukuro': {
+ description: 'Perfect hit barrier (3 hits)',
+ thumb: 758,
+ id: 28,
+ comboShield: 3,
+ comboType: 'Perfect'
+ },
+
+ 'Coliseum Cricket': {
+ description: 'Fixed threshold barrier (200,000)',
+ thumb: 428,
+ id: 29,
+ barrierThreshold: 200000,
+ barrierReduction: 0.99
+ },
+
+ 'Sabo Raid Boss': {
+ description: 'Reduces Chain By Half',
+ thumb: 1047,
+ id: 30,
+ chainModifier: function(p) { return 0.5; }
+ },
+
+ 'Pirate Ship Competition! \"Dead End\" Opens!': {
+ description: 'STR/DEX/QCK ATK 1.6x. INT/PSY HP 2x',
+ thumb: 1072,
+ id: 31,
+ atk: function(p) { return (p.type == "STR" || p.type == "DEX" || p.type == "QCK") ? 1.6 : 1; },
+ hp: function(p) { return (p.type == "STR" || p.type == "DEX" || p.type == "QCK") ? 1 : 2.0; }
+
+ },
+
+ '3-hit Good Barrier': {
+ description: 'You need to hit 3 Goods before you do any Damage',
+ thumb: null,
+ id: 32,
+ comboShield: 3,
+ comboType: 'Good'
+ },
+
+ '3-hit Great Barrier': {
+ description: 'You need to hit 3 Greats before you do any Damage',
+ thumb: null,
+ id: 33,
+ comboShield: 3,
+ comboType: 'Great'
+ },
+
+ '10-Hit Hit Barrier': {
+ description: 'You will only do damage once the combo meter reaches 10 hits',
+ thumb: null,
+ id: 34,
+ comboShield: 10
+ },
+
+ '1.25x Orb Boost': {
+ description: 'Used by Christmas Law in Saga Coliseum',
+ thumb: 856,
+ id: 35,
+ orb: function(p) { return p.orb == 2.0 ? 1.5 : (p.orb == 0.5 ? 10/15 : 1); }
+ },
+
+ '700k Damage Treshold Barrier': {
+ description: 'Used by Saga. You cannot do more that 700k damage in one hit',
+ thumb: 1089,
+ id: 36,
+ barrierThreshold: 700000,
+ barrierReduction: 0.99
+ },
+
+ 'Dr. Indigo & Scarlet! Fortnight': {
+ //OLD description: 'Boosts ATK of Driven and Powerhouse characters by 2x, other classes get .5x ATK. Boosts HP of Slasher and Fighter characters by 2x, other classes get .5x HP.',
+ description: 'Boosts ATK of Driven characters by 2x and boosts HP for Powerhouse characters by 2x.',
+ thumb: 1095,
+ id: 37,
+ atk: function(p) {
+/* var boost1 = 1.0, boost2 = 1.0, boost3 = 1.0, boost4 = 1.0, boost5 = 1.0;
+ if(p.class.has('Driven')) { boost1 = 2.0}
+ if(p.class.has('Powerhouse')) { boost2 = 2.0}
+ if(!(p.class.has('Driven')&&p.class.has('Powerhouse')) && p.class.constructor === Array){
+ if(!p.class.has('Driven')){ boost3 = 0.5}
+ if(!p.class.has('Powerhouse')){ boost4 = 0.5}}
+ if(p.class.constructor === String){
+ if(!(p.class.has('Driven') || p.class.has('Powerhouse'))){ boost5 = 0.5}
+ }
+ return 1*boost1*boost2*boost3*boost4*boost5;*/
+ return p.class.has('Driven') ? 2 : 1;
+ },
+ hp: function(p) {
+/* var boost1 = 1.0, boost2 = 1.0, boost3 = 1.0, boost4 = 1.0, boost5 = 1.0;
+ if(p.class.has('Fighter')) { boost1 = 2.0}
+ if(p.class.has('Slasher')) { boost2 = 2.0}
+ if(!(p.class.has('Fighter')&&p.class.has('Slasher')) && p.class.constructor === Array){
+ if(!p.class.has('Fighter')){ boost3 = 0.5}
+ if(!p.class.has('Slasher')){ boost4 = 0.5}}
+ if(p.class.constructor === String){
+ if(!(p.class.has('Fighter') || p.class.has('Slasher'))){ boost5 = 0.5}
+ }
+ return 1*boost1*boost2*boost3*boost4*boost5;*/
+ return p.class.has('Powerhouse') ? 2 : 1;
+ }
+ },
+
+ 'Coliseum Tashigi': {
+ description: '25 hit barrier and 2x chain limit',
+ thumb: 783,
+ id: 38,
+ comboShield: 25,
+ chainLimiter: function() { return 2.0; }
+ },
+
+ 'Robin and Nami\'s Secret Undercover Investigation': {
+ description: 'Boosts ATK of Cerebral and Free Spirit characters by 2x, other classes get .5x ATK. Boosts HP of Striker and Shooter characters by 2x, other classes get .5x HP.',
+ thumb: 1112,
+ id: 39,
+ atk: function(p) {
+ var boost1 = 1.0, boost2 = 1.0, boost3 = 1.0, boost4 = 1.0, boost5 = 1.0;
+ if(p.class.has('Cerebral')) { boost1 = 2.0}
+ if(p.class.has('Free Spirit')) { boost2 = 2.0}
+ if(!(p.class.has('Cerebral')&&p.class.has('Free Spirit')) && p.class.constructor === Array){
+ if(!p.class.has('Cerebral')){ boost3 = 0.5}
+ if(!p.class.has('Free Spirit')){ boost4 = 0.5}}
+ if(p.class.constructor === String){
+ if(!(p.class.has('Cerebral') || p.class.has('Free Spirit'))){ boost5 = 0.5}
+ }
+ //console.log(boost1+" "+boost2+" "+boost3+" "+boost4+" "+boost5)
+ return 1*boost1*boost2*boost3*boost4*boost5;
+ },
+ hp: function(p) {
+ var boost1 = 1.0, boost2 = 1.0, boost3 = 1.0, boost4 = 1.0, boost5 = 1.0;
+ if(p.class.has('Striker')) { boost1 = 2.0}
+ if(p.class.has('Shooter')) { boost2 = 2.0}
+ if(!(p.class.has('Striker')&&p.class.has('Shooter')) && p.class.constructor === Array){
+ if(!p.class.has('Striker')){ boost3 = 0.5}
+ if(!p.class.has('Shooter')){ boost4 = 0.5}}
+ if(p.class.constructor === String){
+ if(!(p.class.has('Striker') || p.class.has('Shooter'))){ boost5 = 0.5}
+ }
+ return 1*boost1*boost2*boost3*boost4*boost5;
+ }
+ },
+
+ 'Gild Tesoro - 40 Stamina': {
+ description: 'Boosts the Orbs and ATK of all characters by 1.1x',
+ thumb: 1162,
+ id: 40,
+ orb: function(p) { return p.orb == 2.0 ? 1.1 : (p.orb == 0.5 ? 10/11 : 1); },
+ atk: function(p) { return 1.1; }
+ },
+
+ 'Gild Tesoro - 60 Stamina': {
+ description: 'Boosts the Orbs and ATK of all characters by 1.2x',
+ thumb: 1163,
+ id: 41,
+ orb: function(p) { return p.orb == 2.0 ? 1.2 : (p.orb == 0.5 ? 5/6 : 1); },
+ atk: function(p) { return 1.2; }
+ },
+
+};
\ No newline at end of file
diff --git a/common/data/events.js b/common/data/events.js
index 385c048ce..9b26c7294 100644
--- a/common/data/events.js
+++ b/common/data/events.js
@@ -18,5 +18,135 @@ window.events = {
if (--$scope.options.gOrbsEnabled === 0)
$scope.notify({ text: 'Disabling [G] orbs support.' });
}
- }
+ },
+ 900: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 901: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 989: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 1036: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 1037: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 1243: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 1244: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 1291: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 1292: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 1305: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 1306: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Enabling [G] orbs support.' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 1313: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Captain ability still being worked on. Use a [G] orb for now to simulate a STR orb on a character. (Will only have 1.5x boost)' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
+ 1314: {
+ onInsertion: function($scope) {
+ if (++$scope.options.gOrbsEnabled == 1)
+ $scope.notify({ text: 'Captain ability still being worked on. Use a [G] orb for now to simulate a STR orb on a character. (Will only have 1.5x boost)' });
+ },
+ onRemoval: function($scope) {
+ if (--$scope.options.gOrbsEnabled === 0)
+ $scope.notify({ text: 'Disabling [G] orbs support.' });
+ }
+ },
};
diff --git a/common/data/evolutions.js b/common/data/evolutions.js
index 207d06a55..f439d132a 100644
--- a/common/data/evolutions.js
+++ b/common/data/evolutions.js
@@ -1,1398 +1,2190 @@
window.evolutions = {
- 1: {
- evolution: 2,
- evolvers: [ 78 ]
- },
- 2: {
- evolution: 3,
- evolvers: [ 115, 78 ]
- },
- 3: {
- evolution: 4,
- evolvers: [ 117, 84, 95, 100 ]
- },
- 5: {
- evolution: [ 6, 7 ],
- evolvers: [ [ 115, 80 ], [ 116, 80, 97 ] ]
- },
- 6: {
- evolution: 8,
- evolvers: [ 117, 86, 97, 102 ]
- },
- 7: {
- evolution: 8,
- evolvers: [ 117, 80, 102 ]
- },
- 9: {
- evolution: [ 10, 11 ],
- evolvers: [ [ 115, 82 ], [ 116, 82, 99 ] ]
- },
- 10: {
- evolution: 12,
- evolvers: [ 117, 88, 99, 104 ]
- },
- 11: {
- evolution: 12,
- evolvers: [ 117, 82, 104 ]
- },
- 13: {
- evolution: [ 14, 15 ],
- evolvers: [ [ 115, 81 ], [ 115, 81, 98 ] ]
- },
- 14: {
- evolution: [ 15, 16 ],
- evolvers: [ [ 117 ], [ 117, 87, 98, 103 ] ]
- },
- 15: {
- evolution: 16,
- evolvers: [ 117, 81, 103 ]
- },
- 17: {
- evolution: [ 18, 19 ],
- evolvers: [ [ 115, 79 ], [ 116, 79, 96 ] ]
- },
- 18: {
- evolution: 20,
- evolvers: [ 117, 85, 96, 101 ]
- },
- 19: {
- evolution: 20,
- evolvers: [ 117, 79, 101 ]
- },
- 21: {
- evolution: [ 22, 23, 24, 25, 26 ],
- evolvers: [ [ 116, 81, 98 ], [ 116, 82, 99 ], [ 116, 78, 95 ], [ 116, 79, 96 ], [ 116, 80, 97 ] ]
- },
- 29: {
- evolution: 30,
- evolvers: [ 117, 78, 89, 100 ]
- },
- 31: {
- evolution: 32,
- evolvers: [ 115, 81 ]
- },
- 33: {
- evolution: 34,
- evolvers: [ 115, 82 ]
- },
- 35: {
- evolution: 228,
- evolvers: [ 116, 78, 89 ]
- },
- 38: {
- evolution: 39,
- evolvers: [ 116, 82, 93 ]
- },
- 43: {
- evolution: [ 44, 229 ],
- evolvers: [ [ 116, 80, 91 ], [ 116, 81, 92 ] ]
- },
- 45: {
- evolution: 46,
- evolvers: [ 117, 79, 90, 101 ]
- },
- 49: {
- evolution: 230,
- evolvers: [ 116, 78, 89 ]
- },
- 53: {
- evolution: 54,
- evolvers: [ 116, 79, 90 ]
- },
- 55: {
- evolution: 56,
- evolvers: [ 116, 78, 89 ]
- },
- 57: {
- evolution: 58,
- evolvers: [ 117, 82, 93, 104 ]
- },
- 63: {
- evolution: 64,
- evolvers: [ 116, 80, 91 ]
- },
- 65: {
- evolution: 66,
- evolvers: [ 117, 78, 89, 100 ]
- },
- 67: {
- evolution: 68,
- evolvers: [ 117, 83, 79, 85, 96 ]
- },
- 69: {
- evolution: 70,
- evolvers: [ 117, 83, 80, 86, 97 ]
- },
- 70: {
- evolution: 268,
- evolvers: [ 117, 80, 86, 91, 102 ]
- },
- 71: {
- evolution: [ 72, 72 ],
- evolvers: [ [ 117, 81, 98 ], [ 444 ] ]
- },
- 72: {
- evolution: 73,
- evolvers: [ 118, 83, 87, 98, 103 ]
- },
- 74: {
- evolution: 75,
- evolvers: [ 118, 83, 85, 85, 101 ]
- },
- 76: {
- evolution: 77,
- evolvers: [ 118, 83, 87, 98, 103 ]
- },
- 121: {
- evolution: 142,
- evolvers: [ 89 ]
- },
- 122: {
- evolution: 143,
- evolvers: [ 90 ]
- },
- 123: {
- evolution: 144,
- evolvers: [ 91 ]
- },
- 124: {
- evolution: 145,
- evolvers: [ 92 ]
- },
- 125: {
- evolution: 146,
- evolvers: [ 93 ]
- },
- 126: {
- evolution: 147,
- evolvers: [ 89 ]
- },
- 127: {
- evolution: 148,
- evolvers: [ 90 ]
- },
- 128: {
- evolution: 149,
- evolvers: [ 91 ]
- },
- 129: {
- evolution: 150,
- evolvers: [ 92 ]
- },
- 130: {
- evolution: 151,
- evolvers: [ 93 ]
- },
- 131: {
- evolution: 152,
- evolvers: [ 89 ]
- },
- 132: {
- evolution: 153,
- evolvers: [ 90 ]
- },
- 133: {
- evolution: 154,
- evolvers: [ 91 ]
- },
- 134: {
- evolution: 155,
- evolvers: [ 92 ]
- },
- 135: {
- evolution: 156,
- evolvers: [ 93 ]
- },
- 136: {
- evolution: 157,
- evolvers: [ 89 ]
- },
- 137: {
- evolution: 158,
- evolvers: [ 90 ]
- },
- 138: {
- evolution: 159,
- evolvers: [ 91 ]
- },
- 139: {
- evolution: 160,
- evolvers: [ 92 ]
- },
- 140: {
- evolution: 161,
- evolvers: [ 93 ]
- },
- 141: {
- evolution: 162,
- evolvers: [ 115, 93 ]
- },
- 142: {
- evolution: 269,
- evolvers: [ 115, 116, 89 ]
- },
- 143: {
- evolution: 270,
- evolvers: [ 115, 116, 90 ]
- },
- 144: {
- evolution: 271,
- evolvers: [ 115, 116, 91 ]
- },
- 145: {
- evolution: 272,
- evolvers: [ 115, 116, 92 ]
- },
- 146: {
- evolution: 273,
- evolvers: [ 115, 116, 93 ]
- },
- 147: {
- evolution: 274,
- evolvers: [ 116, 95 ]
- },
- 148: {
- evolution: 275,
- evolvers: [ 116, 96 ]
- },
- 149: {
- evolution: 276,
- evolvers: [ 116, 97 ]
- },
- 150: {
- evolution: 277,
- evolvers: [ 116, 98 ]
- },
- 151: {
- evolution: 278,
- evolvers: [ 116, 99 ]
- },
- 152: {
- evolution: 279,
- evolvers: [ 78, 84 ]
- },
- 153: {
- evolution: 280,
- evolvers: [ 79, 85 ]
- },
- 154: {
- evolution: 281,
- evolvers: [ 80, 86 ]
- },
- 155: {
- evolution: 282,
- evolvers: [ 81, 87 ]
- },
- 156: {
- evolution: 283,
- evolvers: [ 82, 88 ]
- },
- 157: {
- evolution: 284,
- evolvers: [ 115, 116, 89 ]
- },
- 158: {
- evolution: 285,
- evolvers: [ 115, 116, 90 ]
- },
- 159: {
- evolution: 286,
- evolvers: [ 115, 116, 91 ]
- },
- 160: {
- evolution: 287,
- evolvers: [ 115, 116, 92 ]
- },
- 161: {
- evolution: 288,
- evolvers: [ 115, 116, 93 ]
- },
- 162: {
- evolution: 289,
- evolvers: [ 104 ]
- },
- 179: {
- evolution: 184,
- evolvers: [ 78 ]
- },
- 180: {
- evolution: 185,
- evolvers: [ 80 ]
- },
- 181: {
- evolution: 186,
- evolvers: [ 79 ]
- },
- 182: {
- evolution: 187,
- evolvers: [ 81 ]
- },
- 183: {
- evolution: 188,
- evolvers: [ 115, 82 ]
- },
- 184: {
- evolution: 194,
- evolvers: [ 116, 78, 84 ]
- },
- 185: {
- evolution: 195,
- evolvers: [ 116, 80, 86 ]
- },
- 186: {
- evolution: 196,
- evolvers: [ 116, 79, 85 ]
- },
- 187: {
- evolution: 197,
- evolvers: [ 116, 81, 87 ]
- },
- 188: {
- evolution: 198,
- evolvers: [ 116, 117, 82, 88 ]
- },
- 199: {
- evolution: 200,
- evolvers: [ 94, 78 ]
- },
- 201: {
- evolution: 202,
- evolvers: [ 94, 79 ]
- },
- 203: {
- evolution: 204,
- evolvers: [ 94, 82 ]
- },
- 205: {
- evolution: 206,
- evolvers: [ 94, 80 ]
- },
- 207: {
- evolution: [ 208, 462 ],
- evolvers: [ [ 94, 81 ], [ 117, 231 ] ]
- },
- 209: {
- evolution: 210,
- evolvers: [ 118, 82, 83, 88, 104 ]
- },
- 211: {
- evolution: 212,
- evolvers: [ 116, 79, 90 ]
- },
- 213: {
- evolution: 214,
- evolvers: [ 117, 78, 95, 100 ]
- },
- 216: {
- evolution: 217,
- evolvers: [ 118, 84, 100, 94, 89 ]
- },
- 218: {
- evolution: 219,
- evolvers: [ 118, 86, 102, 94, 91 ]
- },
- 220: {
- evolution: 221,
- evolvers: [ 118, 88, 104, 94, 93 ]
- },
- 222: {
- evolution: 223,
- evolvers: [ 117, 81, 98, 83 ]
- },
- 224: {
- evolution: 225,
- evolvers: [ 117, 79, 90, 83 ]
- },
- 226: {
- evolution: 227,
- evolvers: [ 118, 83, 86, 86, 102 ]
- },
- 231: {
- evolution: 232,
- evolvers: [ 117, 79, 85, 90, 101 ]
- },
- 233: {
- evolution: 234,
- evolvers: [ 116, 81, 92 ]
- },
- 235: {
- evolution: 236,
- evolvers: [ 116, 78, 89 ]
- },
- 237: {
- evolution: 242,
- evolvers: [ 115, 89, 95 ]
- },
- 238: {
- evolution: 243,
- evolvers: [ 115, 91, 97 ]
- },
- 239: {
- evolution: 244,
- evolvers: [ 115, 90, 96 ]
- },
- 240: {
- evolution: 245,
- evolvers: [ 115, 92, 98 ]
- },
- 241: {
- evolution: 246,
- evolvers: [ 115, 93, 99 ]
- },
- 248: {
- evolution: 249,
- evolvers: [ 118, 84, 84, 95, 100 ]
- },
- 250: {
- evolution: 251,
- evolvers: [ 118, 87, 94, 98, 103 ]
- },
- 252: {
- evolution: 253,
- evolvers: [ 118, 85, 94, 96, 101 ]
- },
- 254: {
- evolution: 255,
- evolvers: [ 118, 88, 94, 99, 104 ]
- },
- 256: {
- evolution: 257,
- evolvers: [ 118, 86, 94, 97, 102 ]
- },
- 258: {
- evolution: 259,
- evolvers: [ 118, 84, 94, 95, 100 ]
- },
- 260: {
- evolution: 261,
- evolvers: [ 118, 84, 266, 95, 267 ]
- },
- 262: {
- evolution: 263,
- evolvers: [ 117, 81, 87, 92, 103 ]
- },
- 264: {
- evolution: 265,
- evolvers: [ 117, 82, 88, 93, 104 ]
- },
- 296: {
- evolution: 297,
- evolvers: [ 117, 82, 88, 93, 104 ]
- },
- 305: {
- evolution: 306,
- evolvers: [ 118, 87, 87, 303, 103 ]
- },
- 307: {
- evolution: 308,
- evolvers: [ 118, 80, 83, 302, 102 ]
- },
- 309: {
- evolution: 310,
- evolvers: [ 118, 82, 83, 304, 104 ]
- },
- 311: {
- evolution: 312,
- evolvers: [ 118, 79, 83, 301, 101 ]
- },
- 313: {
- evolution: 314,
- evolvers: [ 118, 81, 83, 303, 103 ]
- },
- 315: {
- evolution: 316,
- evolvers: [ 118, 78, 83, 300, 100 ]
- },
- 317: {
- evolution: 318,
- evolvers: [ 117, 80, 86, 97, 102 ]
- },
- 319: {
- evolution: 320,
- evolvers: [ 117, 80, 86, 97, 102 ]
- },
- 321: {
- evolution: 322,
- evolvers: [ 117, 79, 85, 96, 101 ]
- },
- 323: {
- evolution: 324,
- evolvers: [ 117, 90, 85, 96, 101 ]
- },
- 326: {
- evolution: 327,
- evolvers: [ 117, 84, 89, 95, 300 ]
- },
- 328: {
- evolution: 329,
- evolvers: [ 117, 79, 85, 96 ]
- },
- 330: {
- evolution: 332,
- evolvers: [ 116, 331, 302 ]
- },
- 331: {
- evolution: 332,
- evolvers: [ 116, 330, 302 ]
- },
- 334: {
- evolution: 335,
- evolvers: [ 116, 82, 304 ]
- },
- 336: {
- evolution: 337,
- evolvers: [ 117, 81, 87, 98, 103 ]
- },
- 340: {
- evolution: 341,
- evolvers: [ 117, 78, 84, 95, 100 ]
- },
- 342: {
- evolution: [ 347, 347, 347 ],
- evolvers: [ [ 115, 105, 105 ], [ 78, 105, 105 ], [ 89, 105, 105 ] ]
- },
- 343: {
- evolution: [ 348, 348, 348 ],
- evolvers: [ [ 115, 106, 106 ], [ 79, 106, 106 ], [ 90, 106, 106 ] ]
- },
- 344: {
- evolution: [ 349, 349, 349 ],
- evolvers: [ [ 115, 107, 107 ], [ 80, 107, 107 ], [ 91, 107, 107 ] ]
- },
- 345: {
- evolution: [ 350, 350, 350 ],
- evolvers: [ [ 115, 108, 108 ], [ 81, 108, 108 ], [ 92, 108, 108 ] ]
- },
- 346: {
- evolution: [ 351, 351, 351 ],
- evolvers: [ [ 115, 109, 109 ], [ 82, 109, 109 ], [ 93, 109, 109 ] ]
- },
- 352: {
- evolution: 353,
- evolvers: [ 118, 83, 88, 304, 104 ]
- },
- 354: {
- evolution: 355,
- evolvers: [ 116, 85, 90, 96 ]
- },
- 356: {
- evolution: 357,
- evolvers: [ 118, 78, 83, 300, 100 ]
- },
- 358: {
- evolution: 359,
- evolvers: [ 118, 80, 83, 302, 102 ]
- },
- 360: {
- evolution: 361,
- evolvers: [ 118, 82, 83, 304, 104 ]
- },
- 362: {
- evolution: 363,
- evolvers: [ 118, 81, 83, 303, 103 ]
- },
- 364: {
- evolution: 365,
- evolvers: [ 118, 79, 83, 301, 101 ]
- },
- 366: {
- evolution: 367,
- evolvers: [ 118, 88, 266, 99, 267 ]
- },
- 368: {
- evolution: 373,
- evolvers: [ 116, 89, 95 ]
- },
- 369: {
- evolution: 374,
- evolvers: [ 116, 90, 96 ]
- },
- 370: {
- evolution: 375,
- evolvers: [ 116, 91, 97 ]
- },
- 371: {
- evolution: 376,
- evolvers: [ 116, 92, 98 ]
- },
- 372: {
- evolution: 377,
- evolvers: [ 116, 93, 99 ]
- },
- 379: {
- evolution: 380,
- evolvers: [ 115, 78, 300 ]
- },
- 383: {
- evolution: [ 384, 408 ],
- evolvers: [ [ 117, 88, 93, 94, 104 ], [ 118, 88, 266, 304, 267 ] ]
- },
- 385: {
- evolution: 386,
- evolvers: [ 117, 82, 88, 93, 99 ]
- },
- 387: {
- evolution: 388,
- evolvers: [ 117, 81, 87, 385 ]
- },
- 389: {
- evolution: 390,
- evolvers: [ 118, 85, 94, 301, 101 ]
- },
- 391: {
- evolution: 392,
- evolvers: [ 117, 86, 91, 97, 102 ]
- },
- 395: {
- evolution: 396,
- evolvers: [ 79, 85, 90, 301 ]
- },
- 397: {
- evolution: 398,
- evolvers: [ 78, 84, 89, 300 ]
- },
- 399: {
- evolution: 400,
- evolvers: [ 80, 86, 91, 302 ]
- },
- 401: {
- evolution: 402,
- evolvers: [ 78, 84, 89, 300 ]
- },
- 404: {
- evolution: 405,
- evolvers: [ 117, 84, 89, 95, 100 ]
- },
- 409: {
- evolution: 410,
- evolvers: [ 118, 85, 94, 301, 101 ]
- },
- 411: {
- evolution: 412,
- evolvers: [ 118, 84, 94, 300, 100 ]
- },
- 413: {
- evolution: 414,
- evolvers: [ 118, 88, 94, 304, 104 ]
- },
- 415: {
- evolution: 416,
- evolvers: [ 118, 266, 94, 96, 267 ]
- },
- 417: {
- evolution: 418,
- evolvers: [ 118, 83, 86, 302, 102 ]
- },
- 423: {
- evolution: 424,
- evolvers: [ 117, 79, 85, 96, 101 ]
- },
- 430: {
- evolution: 431,
- evolvers: [ 116, 86, 91, 97 ]
- },
- 435: {
- evolution: 436,
- evolvers: [ 117, 85, 433, 434, 96 ]
- },
- 437: {
- evolution: 438,
- evolvers: [ 118, 80, 86, 94, 97 ]
- },
- 439: {
- evolution: 440,
- evolvers: [ 118, 81, 87, 94, 98 ]
- },
- 444: {
- evolution: 445,
- evolvers: [ 441, 442, 443 ]
- },
- 446: {
- evolution: 447,
- evolvers: [ 118, 266, 89, 300, 100 ]
- },
- 448: {
- evolution: 449,
- evolvers: [ 118, 83, 85, 301, 101 ]
- },
- 450: {
- evolution: 451,
- evolvers: [ 118, 83, 86, 302, 102 ]
- },
- 452: {
- evolution: 453,
- evolvers: [ 118, 83, 87, 303, 103 ]
- },
- 454: {
- evolution: 455,
- evolvers: [ 118, 83, 84, 300, 100 ]
- },
- 456: {
- evolution: 457,
- evolvers: [ 118, 83, 88, 304, 104 ]
- },
- 458: {
- evolution: 459,
- evolvers: [ 118, 266, 94, 98, 267 ]
- },
- 461: {
- evolution: 462,
- evolvers: [ 117, 80, 86, 97, 102 ]
- },
- 468: {
- evolution: 470,
- evolvers: [ 116, 81, 98 ]
- },
- 469: {
- evolution: 471,
- evolvers: [ 116, 82, 99 ]
- },
- 477: {
- evolution: 482,
- evolvers: [ 116, 84, 89, 95 ]
- },
- 478: {
- evolution: 483,
- evolvers: [ 116, 85, 90, 96 ]
- },
- 479: {
- evolution: 484,
- evolvers: [ 116, 86, 91, 97 ]
- },
- 480: {
- evolution: 485,
- evolvers: [ 116, 87, 92, 98 ]
- },
- 481: {
- evolution: 486,
- evolvers: [ 116, 88, 93, 99 ]
- },
- 487: {
- evolution: 490,
- evolvers: [ 115, 300 ]
- },
- 488: {
- evolution: 491,
- evolvers: [ 116, 301 ]
- },
- 489: {
- evolution: 492,
- evolvers: [ 117, 302 ]
- },
- 493: {
- evolution: 495,
- evolvers: [ 117, 81, 87 ]
- },
- 494: {
- evolution: 496,
- evolvers: [ 117, 82, 88 ]
- },
- 497: {
- evolution: 498,
- evolvers: [ 90, 94, 96, 301, 101 ]
- },
- 499: {
- evolution: 500,
- evolvers: [ 117, 80, 97, 94 ]
- },
- 501: {
- evolution: 502,
- evolvers: [ 117, 87, 92, 94 ]
- },
- 503: {
- evolution: 504,
- evolvers: [ 117, 82, 88, 104 ]
- },
- 505: {
- evolution: 506,
- evolvers: [ 116, 79, 85, 266 ]
- },
- 507: {
- evolution: 508,
- evolvers: [ 116, 89, 95, 300 ]
- },
- 509: {
- evolution: 510,
- evolvers: [ 117, 85, 96, 96, 301 ]
- },
- 512: {
- evolution: 513,
- evolvers: [ 115, 116, 117, 118, 81 ]
- },
- 515: {
- evolution: 516,
- evolvers: [ 118, 87, 266, 303, 103 ]
- },
- 517: {
- evolution: 518,
- evolvers: [ 116, 81, 98 ]
- },
- 519: {
- evolution: 520,
- evolvers: [ 118, 84, 95, 94, 100 ]
- },
- 521: {
- evolution: 522,
- evolvers: [ 118, 83, 88, 94, 104 ]
- },
- 523: {
- evolution: 524,
- evolvers: [ 118, 85, 96, 301, 101 ]
- },
- 525: {
- evolution: 526,
- evolvers: [ 118, 92, 94, 98, 303 ]
- },
- 527: {
- evolution: 528,
- evolvers: [ 118, 86, 266, 97, 302 ]
- },
- 529: {
- evolution: 530,
- evolvers: [ 118, 87, 266, 98, 267 ]
- },
- 531: {
- evolution: 532,
- evolvers: [ 117, 80, 86, 91, 97 ]
- },
- 533: {
- evolution: 534,
- evolvers: [ 118, 79, 85, 96, 101 ]
- },
- 535: {
- evolution: 536,
- evolvers: [ 118, 80, 86, 91, 97 ]
- },
- 537: {
- evolution: 538,
- evolvers: [ 117, 81, 92, 98, 103 ]
- },
- 543: {
- evolution: 544,
- evolvers: [ 117, 86, 97, 102 ]
- },
- 545: {
- evolution: 546,
- evolvers: [ 118, 266, 92, 303, 103 ]
- },
- 547: {
- evolution: 548,
- evolvers: [ 118, 78, 78, 84, 84 ]
- },
- 549: {
- evolution: 550,
- evolvers: [ 117, 82, 88, 99, 104 ]
- },
- 553: {
- evolution: 554,
- evolvers: [ 118, 83, 97, 302, 102 ]
- },
- 555: {
- evolution: 556,
- evolvers: [ 118, 83, 96, 301, 101 ]
- },
- 557: {
- evolution: 558,
- evolvers: [ 118, 88, 94, 304, 104 ]
- },
- 559: {
- evolution: 560,
- evolvers: [ 118, 83, 84, 300, 100 ]
- },
- 561: {
- evolution: 562,
- evolvers: [ 118, 86, 266, 302, 267 ]
- },
- 568: {
- evolution: 569,
- evolvers: [ 117, 83, 88, 93, 99 ]
- },
- 570: {
- evolution: 571,
- evolvers: [ 170, 142, 184, 237, 572 ]
- },
- 574: {
- evolution: 575,
- evolvers: [ 118, 88, 266, 304, 104 ]
- },
- 577: {
- evolution: 578,
- evolvers: [ 118, 266, 95, 300, 267 ]
- },
- 579: {
- evolution: 580,
- evolvers: [ 117, 85, 86, 96, 97 ]
- },
- 585: {
- evolution: 586,
- evolvers: [ 116, 87, 92, 98 ]
- },
- 587: {
- evolution: 588,
- evolvers: [ 117, 304 ]
- },
- 589: {
- evolution: 590,
- evolvers: [ 116, 117, 79, 85 ]
- },
- 596: {
- evolution: 597,
- evolvers: [ 117, 78, 84, 89, 95 ]
- },
- 598: {
- evolution: 599,
- evolvers: [ 117, 82, 82, 88, 88 ]
- },
- 600: {
- evolution: 601,
- evolvers: [ 117, 81, 87, 98, 103 ]
- },
- 602: {
- evolution: 603,
- evolvers: [ 118, 266, 96, 301, 101 ]
- },
- 604: {
- evolution: 605,
- evolvers: [ 117, 86, 97, 97, 302 ]
- },
- 606: {
- evolution: 607,
- evolvers: [ 117, 80, 86, 97, 102 ]
- },
- 612: {
- evolution: 613,
- evolvers: [ 91, 94, 97, 97, 302 ]
- },
- 629: {
- evolution: 739,
- evolvers: [ 117, 82, 83, 99, 104 ]
- },
- 630: {
- evolution: [ 631, 736 ],
- evolvers: [ [ 117, 90, 96, 301, 101 ], [ 118, 78, 94, 95, 100 ] ]
- },
- 632: {
- evolution: [ 633, 737 ],
- evolvers: [ [ 117, 89, 95, 300, 100 ], [ 118, 79, 94, 96, 101 ] ]
- },
- 634: {
- evolution: 635,
- evolvers: [ 117, 79, 85, 96, 101 ]
- },
- 638: {
- evolution: 639,
- evolvers: [ 118, 83, 96, 301, 101 ]
- },
- 640: {
- evolution: 641,
- evolvers: [ 118, 83, 86, 302, 102 ]
- },
- 642: {
- evolution: 643,
- evolvers: [ 118, 92, 94, 303, 103 ]
- },
- 644: {
- evolution: 645,
- evolvers: [ 118, 94, 99, 304, 104 ]
- },
- 646: {
- evolution: 647,
- evolvers: [ 118, 84, 266, 95, 100 ]
- },
- 648: {
- evolution: 649,
- evolvers: [ 118, 85, 266, 301, 267 ]
- },
- 650: {
- evolution: 651,
- evolvers: [ 117, 83, 88, 93, 104 ]
- },
- 652: {
- evolution: 653,
- evolvers: [ 116, 117, 80, 91, 97 ]
- },
- 653: {
- evolution: [ 654, 654 ],
- evolvers: [ [ 118, 86, 266, 97, 102 ], [ 18 ] ]
- },
- 655: {
- evolution: 656,
- evolvers: [ 117, 78, 84, 95, 100 ]
- },
- 660: {
- evolution: 661,
- evolvers: [ 117, 85, 94, 96, 101 ]
- },
- 663: {
- evolution: 664,
- evolvers: [ 117, 81, 87, 98, 103 ]
- },
- 665: {
- evolution: 666,
- evolvers: [ 117, 79, 85, 96, 101 ]
- },
- 668: {
- evolution: 669,
- evolvers: [ 118, 87, 266, 303, 267 ]
- },
- 670: {
- evolution: 671,
- evolvers: [ 118, 83, 86, 302, 102 ]
- },
- 672: {
- evolution: 673,
- evolvers: [ 118, 84, 94, 300, 100 ]
- },
- 674: {
- evolution: 675,
- evolvers: [ 118, 83, 88, 304, 104 ]
- },
- 676: {
- evolution: 677,
- evolvers: [ 94, 96, 96, 301, 301 ]
- },
- 678: {
- evolution: 679,
- evolvers: [ 117, 87, 94, 303, 103 ]
- },
- 680: {
- evolution: 681,
- evolvers: [ 117, 80, 86, 97, 302 ]
- },
- 682: {
- evolution: 683,
- evolvers: [ 117, 81, 87, 98, 303 ]
- },
- 684: {
- evolution: 685,
- evolvers: [ 117, 88, 93, 99, 304 ]
- },
- 687: {
- evolution: 688,
- evolvers: [ 117, 78, 84, 95, 100 ]
- },
- 689: {
- evolution: 690,
- evolvers: [ 117, 82, 88, 99, 104 ]
- },
- 691: {
- evolution: 696,
- evolvers: [ 116, 97, 302 ]
- },
- 692: {
- evolution: 697,
- evolvers: [ 116, 96, 301 ]
- },
- 693: {
- evolution: 698,
- evolvers: [ 116, 98, 303 ]
- },
- 694: {
- evolution: 699,
- evolvers: [ 116, 95, 300 ]
- },
- 695: {
- evolution: 700,
- evolvers: [ 116, 99, 304 ]
- },
- 706: {
- evolution: 707,
- evolvers: [ 117, 84, 89, 95, 100 ]
- },
- 708: {
- evolution: 709,
- evolvers: [ 117, 81, 87, 303, 103 ]
- },
- 710: {
- evolution: 711,
- evolvers: [ 117, 87, 94, 303, 103 ]
- },
- 712: {
- evolution: 713,
- evolvers: [ 117, 90, 96, 301, 101 ]
- },
- 715: {
- evolution: 716,
- evolvers: [ 116, 117, 81, 87 ]
- },
- 717: {
- evolution: 718,
- evolvers: [ 118, 266, 99, 304, 267 ]
- },
- 719: {
- evolution: 720,
- evolvers: [ 118, 86, 266, 102, 267 ]
- },
- 721: {
- evolution: 722,
- evolvers: [ 117, 78, 89, 95 ]
- },
- 723: {
- evolution: 724,
- evolvers: [ 117, 92, 98, 98, 103 ]
- },
- 725: {
- evolution: 726,
- evolvers: [ 117, 79, 85, 96, 101 ]
- },
- 728: {
- evolution: 729,
- evolvers: [ 117, 86, 91, 97, 302 ]
- },
- 730: {
- evolution: 731,
- evolvers: [ 117, 88, 93, 99, 304 ]
- },
- 732: {
- evolution: 733,
- evolvers: [ 116, 84, 95, 300 ]
- },
- 734: {
- evolution: 735,
- evolvers: [ 116, 87, 98, 303 ]
- },
- 740: {
- evolution: 741,
- evolvers: [ 117, 79, 90, 96 ]
- },
- 742: {
- evolution: 743,
- evolvers: [ 117, 80, 86, 91, 97 ]
- },
- 744: {
- evolution: 745,
- evolvers: [ 118, 85, 94, 301, 101 ]
- },
- 747: {
- evolution: 748,
- evolvers: [ 118, 84, 266, 300, 267 ]
- },
- 749: {
- evolution: 750,
- evolvers: [ 118, 83, 86, 302, 102 ]
- },
- 751: {
- evolution: 752,
- evolvers: [ 118, 83, 85, 301, 101 ]
- },
- 753: {
- evolution: 754,
- evolvers: [ 118, 94, 96, 301, 101 ]
- },
- 755: {
- evolution: 756,
- evolvers: [ 118, 83, 88, 304, 104 ]
- },
- 757: {
- evolution: 758,
- evolvers: [ 118, 87, 87, 303, 103 ]
- },
- 759: {
- evolution: 760,
- evolvers: [ 118, 84, 84, 300, 100 ]
- },
- 776: {
- evolution: 777,
- evolvers: [ 116, 117, 81, 87, 103 ]
- },
- 778: {
- evolution: 779,
- evolvers: [ 117, 85, 94, 96, 301 ]
- },
- 780: {
- evolution: 781,
- evolvers: [ 118, 84, 94, 300, 100 ]
- },
- 782: {
- evolution: 783,
- evolvers: [ 117, 93, 94, 304, 104 ]
- },
- 784: {
- evolution: 785,
- evolvers: [ 116, 89, 95 ]
- },
- 786: {
- evolution: 787,
- evolvers: [ 116, 81, 87 ]
- },
- 788: {
- evolution: 789,
- evolvers: [ 116, 80, 86 ]
- },
- 790: {
- evolution: 791,
- evolvers: [ 89, 90, 91 ]
- },
- 792: {
- evolution: 793,
- evolvers: [ 116, 117, 99 ]
- },
- 794: {
- evolution: 795,
- evolvers: [ 118, 88, 266, 304, 104 ]
- },
- 796: {
- evolution: 797,
- evolvers: [ 117, 82, 88, 99, 104 ]
- },
- 801: {
- evolution: 802,
- evolvers: [ 87, 94, 98, 303, 103 ]
- },
- 803: {
- evolution: 804,
- evolvers: [ 117, 80, 86, 302, 102 ]
- },
- 805: {
- evolution: 806,
- evolvers: [ 118, 83, 88, 99, 304 ]
- },
- 807: {
- evolution: 808,
- evolvers: [ 117, 87, 92, 98, 103 ]
- },
- 809: {
- evolution: [ 810, 810 ],
- evolvers: [ [ 116, 78, 84, 89, 95 ], [ 404 ] ]
- },
- 815: {
- evolution: [ 816, 894 ],
- evolvers: [ [ 117, 88, 94, 304, 104 ], [ 117, 88, 94, 99, 104 ] ]
- },
- 830: {
- evolution: 831,
- evolvers: [ 118, 86, 94, 302, 102 ]
- },
- 832: {
- evolution: 833,
- evolvers: [ 117, 89, 95, 300, 100 ]
- },
- 835: {
- evolution: 836,
- evolvers: [ 118, 84, 266, 300, 100 ]
- },
- 837: {
- evolution: 838,
- evolvers: [ 83, 86, 97, 302, 102 ]
- },
- 839: {
- evolution: 840,
- evolvers: [ 118, 88, 266, 304, 104 ]
- },
- 841: {
- evolution: 842,
- evolvers: [ 118, 83, 87, 303, 103 ]
- },
- 843: {
- evolution: 844,
- evolvers: [ 118, 84, 95, 300, 100 ]
- },
- 845: {
- evolution: 846,
- evolvers: [ 118, 85, 94, 301, 101 ]
- },
- 847: {
- evolution: 848,
- evolvers: [ 117, 80, 86, 97, 102 ]
- },
- 851: {
- evolution: 852,
- evolvers: [ 117, 78, 85, 95, 101 ]
- },
- 855: {
- evolution: 856,
- evolvers: [ 117, 86, 94, 97, 102 ]
- },
- 857: {
- evolution: 858,
- evolvers: [ 117, 98, 98, 303, 303 ]
- },
- 859: {
- evolution: 860,
- evolvers: [ 117, 87, 98, 98, 303 ]
- },
- 861: {
- evolution: 862,
- evolvers: [ 117, 79, 85, 301, 101 ]
- },
- 864: {
- evolution: 865,
- evolvers: [ 118, 87, 266, 303, 103 ]
- },
- 869: {
- evolution: 870,
- evolvers: [ 118, 85, 266, 301, 267 ]
- },
- 871: {
- evolution: 872,
- evolvers: [ 83, 85, 96, 301, 101 ]
- },
- 873: {
- evolution: 874,
- evolvers: [ 118, 87, 94, 303, 103 ]
- },
- 875: {
- evolution: 876,
- evolvers: [ 118, 88, 99, 304, 104 ]
- },
- 877: {
- evolution: 878,
- evolvers: [ 86, 266, 91, 97, 102 ]
- },
- 879: {
- evolution: 880,
- evolvers: [ 118, 83, 84, 300, 100 ]
- },
- 881: {
- evolution: 882,
- evolvers: [ 118, 85, 94, 301, 101 ]
- },
- 883: {
- evolution: 884,
- evolvers: [ 117, 88, 93, 99, 104 ]
- },
- 889: {
- evolution: 890,
- evolvers: [ 117, 80, 86, 97, 302 ]
- },
- 895: {
- evolution: 896,
- evolvers: [ 117, 86, 91, 97, 102 ]
- },
- 900: {
- evolution: 901,
- evolvers: [ 118, 86, 94, 302, 102 ]
- },
- 902: {
- evolution: 903,
- evolvers: [ 117, 87, 92, 98, 103 ]
- },
- 905: {
- evolution: 906,
- evolvers: [ 118, 83, 84, 300, 100 ]
- },
- 907: {
- evolution: 908,
- evolvers: [ 88, 266, 94, 304, 104 ]
- },
- 909: {
- evolution: 910,
- evolvers: [ 118, 83, 87, 98, 103 ]
- },
- 911: {
- evolution: 912,
- evolvers: [ 118, 86, 266, 97, 102 ]
- },
- 913: {
- evolution: 914,
- evolvers: [ 85, 94, 94, 301, 101 ]
- },
- 915: {
- evolution: 916,
- evolvers: [ 84, 85, 86, 87, 88 ]
- },
- 917: {
- evolution: 918,
- evolvers: [ 117, 79, 85, 96, 101 ]
- }
-};
\ No newline at end of file
+ 1: {
+ evolution: 2,
+ evolvers: [ 78 ]
+ },
+ 2: {
+ evolution: 3,
+ evolvers: [ 115, 78 ]
+ },
+ 3: {
+ evolution: 4,
+ evolvers: [ 117, 84, 95, 100 ]
+ },
+ 5: {
+ evolution: [ 6, 7 ],
+ evolvers: [ [ 115, 80 ], [ 116, 80, 97 ] ]
+ },
+ 6: {
+ evolution: 8,
+ evolvers: [ 117, 86, 97, 102 ]
+ },
+ 7: {
+ evolution: 8,
+ evolvers: [ 117, 80, 102 ]
+ },
+ 9: {
+ evolution: [ 10, 11 ],
+ evolvers: [ [ 115, 82 ], [ 116, 82, 99 ] ]
+ },
+ 10: {
+ evolution: 12,
+ evolvers: [ 117, 88, 99, 104 ]
+ },
+ 11: {
+ evolution: 12,
+ evolvers: [ 117, 82, 104 ]
+ },
+ 13: {
+ evolution: [ 14, 15 ],
+ evolvers: [ [ 115, 81 ], [ 115, 81, 98 ] ]
+ },
+ 14: {
+ evolution: [ 15, 16 ],
+ evolvers: [ [ 117 ], [ 117, 87, 98, 103 ] ]
+ },
+ 15: {
+ evolution: 16,
+ evolvers: [ 117, 81, 103 ]
+ },
+ 17: {
+ evolution: [ 18, 19 ],
+ evolvers: [ [ 115, 79 ], [ 116, 79, 96 ] ]
+ },
+ 18: {
+ evolution: 20,
+ evolvers: [ 117, 85, 96, 101 ]
+ },
+ 19: {
+ evolution: 20,
+ evolvers: [ 117, 79, 101 ]
+ },
+ 21: {
+ evolution: [ 22, 23, 24, 25, 26 ],
+ evolvers: [ [ 116, 81, 98 ], [ 116, 82, 99 ], [ 116, 78, 95 ], [ 116, 79, 96 ], [ 116, 80, 97 ] ]
+ },
+ 29: {
+ evolution: 30,
+ evolvers: [ 117, 78, 89, 100 ]
+ },
+ 31: {
+ evolution: 32,
+ evolvers: [ 115, 81 ]
+ },
+ 33: {
+ evolution: 34,
+ evolvers: [ 115, 82 ]
+ },
+ 35: {
+ evolution: 228,
+ evolvers: [ 116, 78, 89 ]
+ },
+ 38: {
+ evolution: 39,
+ evolvers: [ 116, 82, 93 ]
+ },
+ 43: {
+ evolution: [ 44, 229 ],
+ evolvers: [ [ 116, 80, 91 ], [ 116, 81, 92 ] ]
+ },
+ 45: {
+ evolution: 46,
+ evolvers: [ 117, 79, 90, 101 ]
+ },
+ 49: {
+ evolution: 230,
+ evolvers: [ 116, 78, 89 ]
+ },
+ 53: {
+ evolution: 54,
+ evolvers: [ 116, 79, 90 ]
+ },
+ 55: {
+ evolution: 56,
+ evolvers: [ 116, 78, 89 ]
+ },
+ 57: {
+ evolution: 58,
+ evolvers: [ 117, 82, 93, 104 ]
+ },
+ 63: {
+ evolution: 64,
+ evolvers: [ 116, 80, 91 ]
+ },
+ 65: {
+ evolution: 66,
+ evolvers: [ 117, 78, 89, 100 ]
+ },
+ 67: {
+ evolution: 68,
+ evolvers: [ 117, 83, 79, 85, 96 ]
+ },
+ 69: {
+ evolution: 70,
+ evolvers: [ 117, 83, 80, 86, 97 ]
+ },
+ 70: {
+ evolution: 268,
+ evolvers: [ 117, 80, 86, 91, 102 ]
+ },
+ 71: {
+ evolution: [ 72, 72 ],
+ evolvers: [ [ 117, 81, 98 ], [ 444 ] ]
+ },
+ 72: {
+ evolution: 73,
+ evolvers: [ 118, 83, 87, 98, 103 ]
+ },
+ 74: {
+ evolution: 75,
+ evolvers: [ 118, 83, 85, 85, 101 ]
+ },
+ 76: {
+ evolution: 77,
+ evolvers: [ 118, 83, 87, 98, 103 ]
+ },
+ 121: {
+ evolution: 142,
+ evolvers: [ 89 ]
+ },
+ 122: {
+ evolution: 143,
+ evolvers: [ 90 ]
+ },
+ 123: {
+ evolution: 144,
+ evolvers: [ 91 ]
+ },
+ 124: {
+ evolution: 145,
+ evolvers: [ 92 ]
+ },
+ 125: {
+ evolution: 146,
+ evolvers: [ 93 ]
+ },
+ 126: {
+ evolution: 147,
+ evolvers: [ 89 ]
+ },
+ 127: {
+ evolution: 148,
+ evolvers: [ 90 ]
+ },
+ 128: {
+ evolution: 149,
+ evolvers: [ 91 ]
+ },
+ 129: {
+ evolution: 150,
+ evolvers: [ 92 ]
+ },
+ 130: {
+ evolution: 151,
+ evolvers: [ 93 ]
+ },
+ 131: {
+ evolution: 152,
+ evolvers: [ 89 ]
+ },
+ 132: {
+ evolution: 153,
+ evolvers: [ 90 ]
+ },
+ 133: {
+ evolution: 154,
+ evolvers: [ 91 ]
+ },
+ 134: {
+ evolution: 155,
+ evolvers: [ 92 ]
+ },
+ 135: {
+ evolution: 156,
+ evolvers: [ 93 ]
+ },
+ 136: {
+ evolution: 157,
+ evolvers: [ 89 ]
+ },
+ 137: {
+ evolution: 158,
+ evolvers: [ 90 ]
+ },
+ 138: {
+ evolution: 159,
+ evolvers: [ 91 ]
+ },
+ 139: {
+ evolution: 160,
+ evolvers: [ 92 ]
+ },
+ 140: {
+ evolution: 161,
+ evolvers: [ 93 ]
+ },
+ 141: {
+ evolution: 162,
+ evolvers: [ 115, 93 ]
+ },
+ 142: {
+ evolution: 269,
+ evolvers: [ 115, 116, 89 ]
+ },
+ 143: {
+ evolution: 270,
+ evolvers: [ 115, 116, 90 ]
+ },
+ 144: {
+ evolution: 271,
+ evolvers: [ 115, 116, 91 ]
+ },
+ 145: {
+ evolution: 272,
+ evolvers: [ 115, 116, 92 ]
+ },
+ 146: {
+ evolution: 273,
+ evolvers: [ 115, 116, 93 ]
+ },
+ 147: {
+ evolution: 274,
+ evolvers: [ 116, 95 ]
+ },
+ 148: {
+ evolution: 275,
+ evolvers: [ 116, 96 ]
+ },
+ 149: {
+ evolution: 276,
+ evolvers: [ 116, 97 ]
+ },
+ 150: {
+ evolution: 277,
+ evolvers: [ 116, 98 ]
+ },
+ 151: {
+ evolution: 278,
+ evolvers: [ 116, 99 ]
+ },
+ 152: {
+ evolution: 279,
+ evolvers: [ 78, 84 ]
+ },
+ 153: {
+ evolution: 280,
+ evolvers: [ 79, 85 ]
+ },
+ 154: {
+ evolution: 281,
+ evolvers: [ 80, 86 ]
+ },
+ 155: {
+ evolution: 282,
+ evolvers: [ 81, 87 ]
+ },
+ 156: {
+ evolution: 283,
+ evolvers: [ 82, 88 ]
+ },
+ 157: {
+ evolution: 284,
+ evolvers: [ 115, 116, 89 ]
+ },
+ 158: {
+ evolution: 285,
+ evolvers: [ 115, 116, 90 ]
+ },
+ 159: {
+ evolution: 286,
+ evolvers: [ 115, 116, 91 ]
+ },
+ 160: {
+ evolution: 287,
+ evolvers: [ 115, 116, 92 ]
+ },
+ 161: {
+ evolution: 288,
+ evolvers: [ 115, 116, 93 ]
+ },
+ 162: {
+ evolution: 289,
+ evolvers: [ 104 ]
+ },
+ 179: {
+ evolution: 184,
+ evolvers: [ 78 ]
+ },
+ 180: {
+ evolution: 185,
+ evolvers: [ 80 ]
+ },
+ 181: {
+ evolution: 186,
+ evolvers: [ 79 ]
+ },
+ 182: {
+ evolution: 187,
+ evolvers: [ 81 ]
+ },
+ 183: {
+ evolution: 188,
+ evolvers: [ 115, 82 ]
+ },
+ 184: {
+ evolution: 194,
+ evolvers: [ 116, 78, 84 ]
+ },
+ 185: {
+ evolution: 195,
+ evolvers: [ 116, 80, 86 ]
+ },
+ 186: {
+ evolution: 196,
+ evolvers: [ 116, 79, 85 ]
+ },
+ 187: {
+ evolution: 197,
+ evolvers: [ 116, 81, 87 ]
+ },
+ 188: {
+ evolution: 198,
+ evolvers: [ 116, 117, 82, 88 ]
+ },
+ 199: {
+ evolution: 200,
+ evolvers: [ 94, 78 ]
+ },
+ 201: {
+ evolution: 202,
+ evolvers: [ 94, 79 ]
+ },
+ 203: {
+ evolution: 204,
+ evolvers: [ 94, 82 ]
+ },
+ 205: {
+ evolution: 206,
+ evolvers: [ 94, 80 ]
+ },
+ 207: {
+ evolution: [ 208, 462 ],
+ evolvers: [ [ 94, 81 ], [ 117, 231 ] ]
+ },
+ 209: {
+ evolution: 210,
+ evolvers: [ 118, 82, 83, 88, 104 ]
+ },
+ 211: {
+ evolution: 212,
+ evolvers: [ 116, 79, 90 ]
+ },
+ 213: {
+ evolution: 214,
+ evolvers: [ 117, 78, 95, 100 ]
+ },
+ 216: {
+ evolution: 217,
+ evolvers: [ 118, 84, 100, 94, 89 ]
+ },
+ 218: {
+ evolution: 219,
+ evolvers: [ 118, 86, 102, 94, 91 ]
+ },
+ 220: {
+ evolution: 221,
+ evolvers: [ 118, 88, 104, 94, 93 ]
+ },
+ 222: {
+ evolution: 223,
+ evolvers: [ 117, 81, 98, 83 ]
+ },
+ 224: {
+ evolution: 225,
+ evolvers: [ 117, 79, 90, 83 ]
+ },
+ 226: {
+ evolution: 227,
+ evolvers: [ 118, 83, 86, 86, 102 ]
+ },
+ 231: {
+ evolution: 232,
+ evolvers: [ 117, 79, 85, 90, 101 ]
+ },
+ 233: {
+ evolution: 234,
+ evolvers: [ 116, 81, 92 ]
+ },
+ 235: {
+ evolution: 236,
+ evolvers: [ 116, 78, 89 ]
+ },
+ 237: {
+ evolution: 242,
+ evolvers: [ 115, 89, 95 ]
+ },
+ 238: {
+ evolution: 243,
+ evolvers: [ 115, 91, 97 ]
+ },
+ 239: {
+ evolution: 244,
+ evolvers: [ 115, 90, 96 ]
+ },
+ 240: {
+ evolution: 245,
+ evolvers: [ 115, 92, 98 ]
+ },
+ 241: {
+ evolution: 246,
+ evolvers: [ 115, 93, 99 ]
+ },
+ 248: {
+ evolution: 249,
+ evolvers: [ 118, 84, 84, 95, 100 ]
+ },
+ 250: {
+ evolution: 251,
+ evolvers: [ 118, 87, 94, 98, 103 ]
+ },
+ 252: {
+ evolution: 253,
+ evolvers: [ 118, 85, 94, 96, 101 ]
+ },
+ 254: {
+ evolution: 255,
+ evolvers: [ 118, 88, 94, 99, 104 ]
+ },
+ 256: {
+ evolution: 257,
+ evolvers: [ 118, 86, 94, 97, 102 ]
+ },
+ 258: {
+ evolution: 259,
+ evolvers: [ 118, 84, 94, 95, 100 ]
+ },
+ 260: {
+ evolution: 261,
+ evolvers: [ 118, 84, 266, 95, 267 ]
+ },
+ 262: {
+ evolution: 263,
+ evolvers: [ 117, 81, 87, 92, 103 ]
+ },
+ 264: {
+ evolution: 265,
+ evolvers: [ 117, 82, 88, 93, 104 ]
+ },
+ 296: {
+ evolution: 297,
+ evolvers: [ 117, 82, 88, 93, 104 ]
+ },
+ 305: {
+ evolution: 306,
+ evolvers: [ 118, 87, 87, 303, 103 ]
+ },
+ 307: {
+ evolution: 308,
+ evolvers: [ 118, 80, 83, 302, 102 ]
+ },
+ 309: {
+ evolution: 310,
+ evolvers: [ 118, 82, 83, 304, 104 ]
+ },
+ 311: {
+ evolution: 312,
+ evolvers: [ 118, 79, 83, 301, 101 ]
+ },
+ 313: {
+ evolution: 314,
+ evolvers: [ 118, 81, 83, 303, 103 ]
+ },
+ 315: {
+ evolution: 316,
+ evolvers: [ 118, 78, 83, 300, 100 ]
+ },
+ 317: {
+ evolution: 318,
+ evolvers: [ 117, 80, 86, 97, 102 ]
+ },
+ 319: {
+ evolution: 320,
+ evolvers: [ 117, 80, 86, 97, 102 ]
+ },
+ 321: {
+ evolution: 322,
+ evolvers: [ 117, 79, 85, 96, 101 ]
+ },
+ 323: {
+ evolution: 324,
+ evolvers: [ 117, 90, 85, 96, 101 ]
+ },
+ 326: {
+ evolution: 327,
+ evolvers: [ 117, 84, 89, 95, 300 ]
+ },
+ 328: {
+ evolution: 329,
+ evolvers: [ 117, 79, 85, 96 ]
+ },
+ 330: {
+ evolution: 332,
+ evolvers: [ 116, 331, 302 ]
+ },
+ 331: {
+ evolution: 332,
+ evolvers: [ 116, 330, 302 ]
+ },
+ 334: {
+ evolution: 335,
+ evolvers: [ 116, 82, 304 ]
+ },
+ 336: {
+ evolution: 337,
+ evolvers: [ 117, 81, 87, 98, 103 ]
+ },
+ 340: {
+ evolution: 341,
+ evolvers: [ 117, 78, 84, 95, 100 ]
+ },
+ 342: {
+ evolution: [ 347, 347, 347 ],
+ evolvers: [ [ 115, 105, 105 ], [ 78, 105, 105 ], [ 89, 105, 105 ] ]
+ },
+ 343: {
+ evolution: [ 348, 348, 348 ],
+ evolvers: [ [ 115, 106, 106 ], [ 79, 106, 106 ], [ 90, 106, 106 ] ]
+ },
+ 344: {
+ evolution: [ 349, 349, 349 ],
+ evolvers: [ [ 115, 107, 107 ], [ 80, 107, 107 ], [ 91, 107, 107 ] ]
+ },
+ 345: {
+ evolution: [ 350, 350, 350 ],
+ evolvers: [ [ 115, 108, 108 ], [ 81, 108, 108 ], [ 92, 108, 108 ] ]
+ },
+ 346: {
+ evolution: [ 351, 351, 351 ],
+ evolvers: [ [ 115, 109, 109 ], [ 82, 109, 109 ], [ 93, 109, 109 ] ]
+ },
+ 352: {
+ evolution: 353,
+ evolvers: [ 118, 83, 88, 304, 104 ]
+ },
+ 354: {
+ evolution: 355,
+ evolvers: [ 116, 85, 90, 96 ]
+ },
+ 356: {
+ evolution: 357,
+ evolvers: [ 118, 78, 83, 300, 100 ]
+ },
+ 358: {
+ evolution: 359,
+ evolvers: [ 118, 80, 83, 302, 102 ]
+ },
+ 360: {
+ evolution: 361,
+ evolvers: [ 118, 82, 83, 304, 104 ]
+ },
+ 362: {
+ evolution: 363,
+ evolvers: [ 118, 81, 83, 303, 103 ]
+ },
+ 364: {
+ evolution: 365,
+ evolvers: [ 118, 79, 83, 301, 101 ]
+ },
+ 366: {
+ evolution: 367,
+ evolvers: [ 118, 88, 266, 99, 267 ]
+ },
+ 368: {
+ evolution: 373,
+ evolvers: [ 116, 89, 95 ]
+ },
+ 369: {
+ evolution: 374,
+ evolvers: [ 116, 90, 96 ]
+ },
+ 370: {
+ evolution: 375,
+ evolvers: [ 116, 91, 97 ]
+ },
+ 371: {
+ evolution: 376,
+ evolvers: [ 116, 92, 98 ]
+ },
+ 372: {
+ evolution: 377,
+ evolvers: [ 116, 93, 99 ]
+ },
+ 379: {
+ evolution: 380,
+ evolvers: [ 115, 78, 300 ]
+ },
+ 383: {
+ evolution: [ 384, 408 ],
+ evolvers: [ [ 117, 88, 93, 94, 104 ], [ 118, 88, 266, 304, 267 ] ]
+ },
+ 385: {
+ evolution: 386,
+ evolvers: [ 117, 82, 88, 93, 99 ]
+ },
+ 387: {
+ evolution: 388,
+ evolvers: [ 117, 81, 87, 385 ]
+ },
+ 389: {
+ evolution: 390,
+ evolvers: [ 118, 85, 94, 301, 101 ]
+ },
+ 391: {
+ evolution: 392,
+ evolvers: [ 117, 86, 91, 97, 102 ]
+ },
+ 395: {
+ evolution: 396,
+ evolvers: [ 79, 85, 90, 301 ]
+ },
+ 397: {
+ evolution: 398,
+ evolvers: [ 78, 84, 89, 300 ]
+ },
+ 399: {
+ evolution: 400,
+ evolvers: [ 80, 86, 91, 302 ]
+ },
+ 401: {
+ evolution: 402,
+ evolvers: [ 78, 84, 89, 300 ]
+ },
+ 404: {
+ evolution: 405,
+ evolvers: [ 117, 84, 89, 95, 100 ]
+ },
+ 409: {
+ evolution: 410,
+ evolvers: [ 118, 85, 94, 301, 101 ]
+ },
+ 411: {
+ evolution: 412,
+ evolvers: [ 118, 84, 94, 300, 100 ]
+ },
+ 413: {
+ evolution: 414,
+ evolvers: [ 118, 88, 94, 304, 104 ]
+ },
+ 415: {
+ evolution: 416,
+ evolvers: [ 118, 266, 94, 96, 267 ]
+ },
+ 417: {
+ evolution: 418,
+ evolvers: [ 118, 83, 86, 302, 102 ]
+ },
+ 423: {
+ evolution: 424,
+ evolvers: [ 117, 79, 85, 96, 101 ]
+ },
+ 430: {
+ evolution: 431,
+ evolvers: [ 116, 86, 91, 97 ]
+ },
+ 435: {
+ evolution: 436,
+ evolvers: [ 117, 85, 433, 434, 96 ]
+ },
+ 437: {
+ evolution: 438,
+ evolvers: [ 118, 80, 86, 94, 97 ]
+ },
+ 439: {
+ evolution: 440,
+ evolvers: [ 118, 81, 87, 94, 98 ]
+ },
+ 444: {
+ evolution: 445,
+ evolvers: [ 441, 442, 443 ]
+ },
+ 446: {
+ evolution: 447,
+ evolvers: [ 118, 266, 89, 300, 100 ]
+ },
+ 448: {
+ evolution: 449,
+ evolvers: [ 118, 83, 85, 301, 101 ]
+ },
+ 450: {
+ evolution: 451,
+ evolvers: [ 118, 83, 86, 302, 102 ]
+ },
+ 452: {
+ evolution: 453,
+ evolvers: [ 118, 83, 87, 303, 103 ]
+ },
+ 454: {
+ evolution: 455,
+ evolvers: [ 118, 83, 84, 300, 100 ]
+ },
+ 456: {
+ evolution: 457,
+ evolvers: [ 118, 83, 88, 304, 104 ]
+ },
+ 458: {
+ evolution: 459,
+ evolvers: [ 118, 266, 94, 98, 267 ]
+ },
+ 461: {
+ evolution: 462,
+ evolvers: [ 117, 80, 86, 97, 102 ]
+ },
+ 468: {
+ evolution: 470,
+ evolvers: [ 116, 81, 98 ]
+ },
+ 469: {
+ evolution: 471,
+ evolvers: [ 116, 82, 99 ]
+ },
+ 477: {
+ evolution: 482,
+ evolvers: [ 116, 84, 89, 95 ]
+ },
+ 478: {
+ evolution: 483,
+ evolvers: [ 116, 85, 90, 96 ]
+ },
+ 479: {
+ evolution: 484,
+ evolvers: [ 116, 86, 91, 97 ]
+ },
+ 480: {
+ evolution: 485,
+ evolvers: [ 116, 87, 92, 98 ]
+ },
+ 481: {
+ evolution: 486,
+ evolvers: [ 116, 88, 93, 99 ]
+ },
+ 487: {
+ evolution: 490,
+ evolvers: [ 115, 300 ]
+ },
+ 488: {
+ evolution: 491,
+ evolvers: [ 116, 301 ]
+ },
+ 489: {
+ evolution: 492,
+ evolvers: [ 117, 302 ]
+ },
+ 493: {
+ evolution: 495,
+ evolvers: [ 117, 81, 87 ]
+ },
+ 494: {
+ evolution: 496,
+ evolvers: [ 117, 82, 88 ]
+ },
+ 497: {
+ evolution: 498,
+ evolvers: [ 90, 94, 96, 301, 101 ]
+ },
+ 499: {
+ evolution: 500,
+ evolvers: [ 117, 80, 97, 94 ]
+ },
+ 501: {
+ evolution: 502,
+ evolvers: [ 117, 87, 92, 94 ]
+ },
+ 503: {
+ evolution: 504,
+ evolvers: [ 117, 82, 88, 104 ]
+ },
+ 505: {
+ evolution: 506,
+ evolvers: [ 116, 79, 85, 266 ]
+ },
+ 507: {
+ evolution: 508,
+ evolvers: [ 116, 89, 95, 300 ]
+ },
+ 509: {
+ evolution: 510,
+ evolvers: [ 117, 85, 96, 96, 301 ]
+ },
+ 512: {
+ evolution: 513,
+ evolvers: [ 115, 116, 117, 118, 81 ]
+ },
+ 515: {
+ evolution: 516,
+ evolvers: [ 118, 87, 266, 303, 103 ]
+ },
+ 517: {
+ evolution: 518,
+ evolvers: [ 116, 81, 98 ]
+ },
+ 519: {
+ evolution: 520,
+ evolvers: [ 118, 84, 95, 94, 100 ]
+ },
+ 521: {
+ evolution: 522,
+ evolvers: [ 118, 83, 88, 94, 104 ]
+ },
+ 523: {
+ evolution: 524,
+ evolvers: [ 118, 85, 96, 301, 101 ]
+ },
+ 525: {
+ evolution: 526,
+ evolvers: [ 118, 92, 94, 98, 303 ]
+ },
+ 527: {
+ evolution: 528,
+ evolvers: [ 118, 86, 266, 97, 302 ]
+ },
+ 529: {
+ evolution: 530,
+ evolvers: [ 118, 87, 266, 98, 267 ]
+ },
+ 531: {
+ evolution: 532,
+ evolvers: [ 117, 80, 86, 91, 97 ]
+ },
+ 533: {
+ evolution: 534,
+ evolvers: [ 118, 79, 85, 96, 101 ]
+ },
+ 535: {
+ evolution: 536,
+ evolvers: [ 118, 80, 86, 91, 97 ]
+ },
+ 537: {
+ evolution: 538,
+ evolvers: [ 117, 81, 92, 98, 103 ]
+ },
+ 543: {
+ evolution: 544,
+ evolvers: [ 117, 86, 97, 102 ]
+ },
+ 545: {
+ evolution: 546,
+ evolvers: [ 118, 266, 92, 303, 103 ]
+ },
+ 547: {
+ evolution: 548,
+ evolvers: [ 118, 78, 78, 84, 84 ]
+ },
+ 549: {
+ evolution: 550,
+ evolvers: [ 117, 82, 88, 99, 104 ]
+ },
+ 553: {
+ evolution: 554,
+ evolvers: [ 118, 83, 97, 302, 102 ]
+ },
+ 555: {
+ evolution: 556,
+ evolvers: [ 118, 83, 96, 301, 101 ]
+ },
+ 557: {
+ evolution: 558,
+ evolvers: [ 118, 88, 94, 304, 104 ]
+ },
+ 559: {
+ evolution: 560,
+ evolvers: [ 118, 83, 84, 300, 100 ]
+ },
+ 561: {
+ evolution: 562,
+ evolvers: [ 118, 86, 266, 302, 267 ]
+ },
+ 568: {
+ evolution: 569,
+ evolvers: [ 117, 83, 88, 93, 99 ]
+ },
+ 570: {
+ evolution: 571,
+ evolvers: [ 170, 142, 184, 237, 572 ]
+ },
+ 574: {
+ evolution: 575,
+ evolvers: [ 118, 88, 266, 304, 104 ]
+ },
+ 577: {
+ evolution: 578,
+ evolvers: [ 118, 266, 95, 300, 267 ]
+ },
+ 579: {
+ evolution: 580,
+ evolvers: [ 117, 85, 86, 96, 97 ]
+ },
+ 585: {
+ evolution: 586,
+ evolvers: [ 116, 87, 92, 98 ]
+ },
+ 587: {
+ evolution: 588,
+ evolvers: [ 117, 304 ]
+ },
+ 589: {
+ evolution: 590,
+ evolvers: [ 116, 117, 79, 85 ]
+ },
+ 596: {
+ evolution: 597,
+ evolvers: [ 117, 78, 84, 89, 95 ]
+ },
+ 598: {
+ evolution: 599,
+ evolvers: [ 117, 82, 82, 88, 88 ]
+ },
+ 600: {
+ evolution: 601,
+ evolvers: [ 117, 81, 87, 98, 103 ]
+ },
+ 602: {
+ evolution: 603,
+ evolvers: [ 118, 266, 96, 301, 101 ]
+ },
+ 604: {
+ evolution: 605,
+ evolvers: [ 117, 86, 97, 97, 302 ]
+ },
+ 606: {
+ evolution: 607,
+ evolvers: [ 117, 80, 86, 97, 102 ]
+ },
+ 612: {
+ evolution: 613,
+ evolvers: [ 91, 94, 97, 97, 302 ]
+ },
+ 629: {
+ evolution: 739,
+ evolvers: [ 117, 82, 83, 99, 104 ]
+ },
+ 630: {
+ evolution: [ 631, 736 ],
+ evolvers: [ [ 117, 90, 96, 301, 101 ], [ 118, 78, 94, 95, 100 ] ]
+ },
+ 632: {
+ evolution: [ 633, 737 ],
+ evolvers: [ [ 117, 89, 95, 300, 100 ], [ 118, 79, 94, 96, 101 ] ]
+ },
+ 634: {
+ evolution: 635,
+ evolvers: [ 117, 79, 85, 96, 101 ]
+ },
+ 638: {
+ evolution: 639,
+ evolvers: [ 118, 83, 96, 301, 101 ]
+ },
+ 640: {
+ evolution: 641,
+ evolvers: [ 118, 83, 86, 302, 102 ]
+ },
+ 642: {
+ evolution: 643,
+ evolvers: [ 118, 92, 94, 303, 103 ]
+ },
+ 644: {
+ evolution: 645,
+ evolvers: [ 118, 94, 99, 304, 104 ]
+ },
+ 646: {
+ evolution: 647,
+ evolvers: [ 118, 84, 266, 95, 100 ]
+ },
+ 648: {
+ evolution: 649,
+ evolvers: [ 118, 85, 266, 301, 267 ]
+ },
+ 650: {
+ evolution: 651,
+ evolvers: [ 117, 83, 88, 93, 104 ]
+ },
+ 652: {
+ evolution: 653,
+ evolvers: [ 116, 117, 80, 91, 97 ]
+ },
+ 653: {
+ evolution: [ 654, 654 ],
+ evolvers: [ [ 118, 86, 266, 97, 102 ], [ 18 ] ]
+ },
+ 655: {
+ evolution: 656,
+ evolvers: [ 117, 78, 84, 95, 100 ]
+ },
+ 660: {
+ evolution: 661,
+ evolvers: [ 117, 85, 94, 96, 101 ]
+ },
+ 663: {
+ evolution: 664,
+ evolvers: [ 117, 81, 87, 98, 103 ]
+ },
+ 665: {
+ evolution: 666,
+ evolvers: [ 117, 79, 85, 96, 101 ]
+ },
+ 668: {
+ evolution: 669,
+ evolvers: [ 118, 87, 266, 303, 267 ]
+ },
+ 670: {
+ evolution: 671,
+ evolvers: [ 118, 83, 86, 302, 102 ]
+ },
+ 672: {
+ evolution: 673,
+ evolvers: [ 118, 84, 94, 300, 100 ]
+ },
+ 674: {
+ evolution: 675,
+ evolvers: [ 118, 83, 88, 304, 104 ]
+ },
+ 676: {
+ evolution: 677,
+ evolvers: [ 94, 96, 96, 301, 301 ]
+ },
+ 678: {
+ evolution: 679,
+ evolvers: [ 117, 87, 94, 303, 103 ]
+ },
+ 680: {
+ evolution: 681,
+ evolvers: [ 117, 80, 86, 97, 302 ]
+ },
+ 682: {
+ evolution: 683,
+ evolvers: [ 117, 81, 87, 98, 303 ]
+ },
+ 684: {
+ evolution: 685,
+ evolvers: [ 117, 88, 93, 99, 304 ]
+ },
+ 687: {
+ evolution: 688,
+ evolvers: [ 117, 78, 84, 95, 100 ]
+ },
+ 689: {
+ evolution: 690,
+ evolvers: [ 117, 82, 88, 99, 104 ]
+ },
+ 691: {
+ evolution: 696,
+ evolvers: [ 116, 97, 302 ]
+ },
+ 692: {
+ evolution: 697,
+ evolvers: [ 116, 96, 301 ]
+ },
+ 693: {
+ evolution: 698,
+ evolvers: [ 116, 98, 303 ]
+ },
+ 694: {
+ evolution: 699,
+ evolvers: [ 116, 95, 300 ]
+ },
+ 695: {
+ evolution: 700,
+ evolvers: [ 116, 99, 304 ]
+ },
+ 706: {
+ evolution: 707,
+ evolvers: [ 117, 84, 89, 95, 100 ]
+ },
+ 708: {
+ evolution: 709,
+ evolvers: [ 117, 81, 87, 303, 103 ]
+ },
+ 710: {
+ evolution: 711,
+ evolvers: [ 117, 87, 94, 303, 103 ]
+ },
+ 712: {
+ evolution: 713,
+ evolvers: [ 117, 90, 96, 301, 101 ]
+ },
+ 715: {
+ evolution: 716,
+ evolvers: [ 116, 117, 81, 87 ]
+ },
+ 717: {
+ evolution: 718,
+ evolvers: [ 118, 266, 99, 304, 267 ]
+ },
+ 719: {
+ evolution: 720,
+ evolvers: [ 118, 86, 266, 102, 267 ]
+ },
+ 721: {
+ evolution: 722,
+ evolvers: [ 117, 78, 89, 95 ]
+ },
+ 723: {
+ evolution: 724,
+ evolvers: [ 117, 92, 98, 98, 103 ]
+ },
+ 725: {
+ evolution: 726,
+ evolvers: [ 117, 79, 85, 96, 101 ]
+ },
+ 728: {
+ evolution: 729,
+ evolvers: [ 117, 86, 91, 97, 302 ]
+ },
+ 730: {
+ evolution: 731,
+ evolvers: [ 117, 88, 93, 99, 304 ]
+ },
+ 732: {
+ evolution: 733,
+ evolvers: [ 116, 84, 95, 300 ]
+ },
+ 734: {
+ evolution: 735,
+ evolvers: [ 116, 87, 98, 303 ]
+ },
+ 740: {
+ evolution: 741,
+ evolvers: [ 117, 79, 90, 96 ]
+ },
+ 742: {
+ evolution: 743,
+ evolvers: [ 117, 80, 86, 91, 97 ]
+ },
+ 744: {
+ evolution: 745,
+ evolvers: [ 118, 85, 94, 301, 101 ]
+ },
+ 747: {
+ evolution: 748,
+ evolvers: [ 118, 84, 266, 300, 267 ]
+ },
+ 749: {
+ evolution: 750,
+ evolvers: [ 118, 83, 86, 302, 102 ]
+ },
+ 751: {
+ evolution: 752,
+ evolvers: [ 118, 83, 85, 301, 101 ]
+ },
+ 753: {
+ evolution: 754,
+ evolvers: [ 118, 94, 96, 301, 101 ]
+ },
+ 755: {
+ evolution: 756,
+ evolvers: [ 118, 83, 88, 304, 104 ]
+ },
+ 757: {
+ evolution: 758,
+ evolvers: [ 118, 87, 87, 303, 103 ]
+ },
+ 759: {
+ evolution: 760,
+ evolvers: [ 118, 84, 84, 300, 100 ]
+ },
+ 776: {
+ evolution: 777,
+ evolvers: [ 116, 117, 81, 87, 103 ]
+ },
+ 778: {
+ evolution: 779,
+ evolvers: [ 117, 85, 94, 96, 301 ]
+ },
+ 780: {
+ evolution: 781,
+ evolvers: [ 118, 84, 94, 300, 100 ]
+ },
+ 782: {
+ evolution: 783,
+ evolvers: [ 117, 93, 94, 304, 104 ]
+ },
+ 784: {
+ evolution: 785,
+ evolvers: [ 116, 89, 95 ]
+ },
+ 786: {
+ evolution: 787,
+ evolvers: [ 116, 81, 87 ]
+ },
+ 788: {
+ evolution: 789,
+ evolvers: [ 116, 80, 86 ]
+ },
+ 790: {
+ evolution: 791,
+ evolvers: [ 89, 90, 91 ]
+ },
+ 792: {
+ evolution: 793,
+ evolvers: [ 116, 117, 99 ]
+ },
+ 794: {
+ evolution: 795,
+ evolvers: [ 118, 88, 266, 304, 104 ]
+ },
+ 796: {
+ evolution: 797,
+ evolvers: [ 117, 82, 88, 99, 104 ]
+ },
+ 801: {
+ evolution: 802,
+ evolvers: [ 87, 94, 98, 303, 103 ]
+ },
+ 803: {
+ evolution: 804,
+ evolvers: [ 117, 80, 86, 302, 102 ]
+ },
+ 805: {
+ evolution: 806,
+ evolvers: [ 118, 83, 88, 99, 304 ]
+ },
+ 807: {
+ evolution: 808,
+ evolvers: [ 117, 87, 92, 98, 103 ]
+ },
+ 809: {
+ evolution: [ 810, 810 ],
+ evolvers: [ [ 116, 78, 84, 89, 95 ], [ 404 ] ]
+ },
+ 815: {
+ evolution: [ 816, 894 ],
+ evolvers: [ [ 117, 88, 94, 304, 104 ], [ 117, 88, 94, 99, 104 ] ]
+ },
+ 828: {
+ evolution: 829,
+ evolvers: [ 115, 116, 117, 118 ]
+ },
+ 830: {
+ evolution: 831,
+ evolvers: [ 118, 86, 94, 302, 102 ]
+ },
+ 832: {
+ evolution: 833,
+ evolvers: [ 117, 89, 95, 300, 100 ]
+ },
+ 835: {
+ evolution: 836,
+ evolvers: [ 118, 84, 266, 300, 100 ]
+ },
+ 837: {
+ evolution: 838,
+ evolvers: [ 83, 86, 97, 302, 102 ]
+ },
+ 839: {
+ evolution: 840,
+ evolvers: [ 118, 88, 266, 304, 104 ]
+ },
+ 841: {
+ evolution: 842,
+ evolvers: [ 118, 83, 87, 303, 103 ]
+ },
+ 843: {
+ evolution: 844,
+ evolvers: [ 118, 84, 95, 300, 100 ]
+ },
+ 845: {
+ evolution: 846,
+ evolvers: [ 118, 85, 94, 301, 101 ]
+ },
+ 847: {
+ evolution: 848,
+ evolvers: [ 117, 80, 86, 97, 102 ]
+ },
+ 851: {
+ evolution: 852,
+ evolvers: [ 117, 78, 85, 95, 101 ]
+ },
+ 855: {
+ evolution: 856,
+ evolvers: [ 117, 86, 94, 97, 102 ]
+ },
+ 857: {
+ evolution: 858,
+ evolvers: [ 117, 98, 98, 303, 303 ]
+ },
+ 859: {
+ evolution: 860,
+ evolvers: [ 117, 87, 98, 98, 303 ]
+ },
+ 861: {
+ evolution: 862,
+ evolvers: [ 117, 79, 85, 301, 101 ]
+ },
+ 864: {
+ evolution: 865,
+ evolvers: [ 118, 87, 266, 303, 103 ]
+ },
+ 869: {
+ evolution: 870,
+ evolvers: [ 118, 85, 266, 301, 267 ]
+ },
+ 871: {
+ evolution: 872,
+ evolvers: [ 83, 85, 96, 301, 101 ]
+ },
+ 873: {
+ evolution: 874,
+ evolvers: [ 118, 87, 94, 303, 103 ]
+ },
+ 875: {
+ evolution: 876,
+ evolvers: [ 118, 88, 99, 304, 104 ]
+ },
+ 877: {
+ evolution: 878,
+ evolvers: [ 86, 266, 91, 97, 102 ]
+ },
+ 879: {
+ evolution: 880,
+ evolvers: [ 118, 83, 84, 300, 100 ]
+ },
+ 881: {
+ evolution: 882,
+ evolvers: [ 118, 85, 94, 301, 101 ]
+ },
+ 883: {
+ evolution: 884,
+ evolvers: [ 117, 88, 93, 99, 104 ]
+ },
+ 889: {
+ evolution: 890,
+ evolvers: [ 117, 80, 86, 97, 302 ]
+ },
+ 895: {
+ evolution: 896,
+ evolvers: [ 117, 86, 91, 97, 102 ]
+ },
+ 900: {
+ evolution: 901,
+ evolvers: [ 118, 86, 94, 302, 102 ]
+ },
+ 902: {
+ evolution: 903,
+ evolvers: [ 117, 87, 92, 98, 103 ]
+ },
+ 905: {
+ evolution: 906,
+ evolvers: [ 118, 83, 84, 300, 100 ]
+ },
+ 907: {
+ evolution: 908,
+ evolvers: [ 88, 266, 94, 304, 104 ]
+ },
+ 909: {
+ evolution: 910,
+ evolvers: [ 118, 83, 87, 98, 103 ]
+ },
+ 911: {
+ evolution: 912,
+ evolvers: [ 118, 86, 266, 97, 102 ]
+ },
+ 913: {
+ evolution: 914,
+ evolvers: [ 85, 94, 94, 301, 101 ]
+ },
+ 915: {
+ evolution: 916,
+ evolvers: [ 84, 85, 86, 87, 88 ]
+ },
+ 917: {
+ evolution: 918,
+ evolvers: [ 117, 79, 85, 96, 101 ]
+ },
+ 921: {
+ evolution: 922,
+ evolvers: [ 84 , 85, 86 , 87 , 88]
+ },
+ 923: {
+ evolution: 924,
+ evolvers: [ 118 , 83, 84 , 95 , 300]
+ },
+ 925: {
+ evolution: 926,
+ evolvers: [ 117 , 85, 90 , 96 , 101]
+ },
+ 928: {
+ evolution: 929,
+ evolvers: [ 117, 80, 86, 97, 102 ]
+ },
+ 932: {
+ evolution: 933,
+ evolvers: [ 118, 87, 266, 303, 103 ]
+ },
+ 934: {
+ evolution: 935,
+ evolvers: [ 118, 88, 266, 304, 267 ]
+ },
+ 936: {
+ evolution: 937,
+ evolvers: [ 118, 94, 96, 301, 101 ]
+ },
+ 938: {
+ evolution: 939,
+ evolvers: [ 117, 118, 83, 87, 103 ]
+ },
+ 940: {
+ evolution: 941,
+ evolvers: [ 94, 97, 97, 302, 102 ]
+ },
+ 942: {
+ evolution: 943,
+ evolvers: [ 118, 83, 84, 95, 100 ]
+ },
+ 944: {
+ evolution: 945,
+ evolvers: [ 84, 85, 86, 87, 88 ]
+ },
+ 950: {
+ evolution: 951,
+ evolvers: [ 118, 83, 87, 98, 303 ]
+ },
+ 952: {
+ evolution: 953,
+ evolvers: [ 116, 117, 80, 86, 97 ]
+ },
+ 973: {
+ evolution: [ 974, 974, 974, 974, 974 ],
+ evolvers: [ [ 117, 971 ], [ 87, 968], [ 98, 970], [ 87, 969], [ 117, 972] ]
+ },
+ 975: {
+ evolution: 976,
+ evolvers: [ 117, 80, 91, 97 ]
+ },
+ 977: {
+ evolution: 978,
+ evolvers: [ 118, 85, 266, 301, 101 ]
+ },
+ 982: {
+ evolution: 983,
+ evolvers: [ 118, 85, 94, 301, 101 ]
+ },
+ 985: {
+ evolution: 989,
+ evolvers: [ 986, 987, 988 ]
+ },
+ 990: {
+ evolution: 991,
+ evolvers: [ 99, 304, 304, 104, 104 ]
+ },
+ 992: {
+ evolution: 993,
+ evolvers: [ 118, 83, 85, 96, 101 ]
+ },
+ 994: {
+ evolution: 995,
+ evolvers: [ 118, 87, 94, 303, 103 ]
+ },
+ 996: {
+ evolution: 997,
+ evolvers: [ 80, 86, 266, 302, 102 ]
+ },
+ 998: {
+ evolution: 999,
+ evolvers: [ 118, 83, 84, 95, 100 ]
+ },
+ 1000: {
+ evolution: 1001,
+ evolvers: [ 118, 86, 266, 302, 267 ]
+ },
+ 1002: {
+ evolution: 1003,
+ evolvers: [ 117, 78, 84, 95, 100 ]
+ },
+ 1005: {
+ evolution: 1006,
+ evolvers: [ 116, 84, 89, 95, 100 ]
+ },
+ 1007: {
+ evolution: 1008,
+ evolvers: [ 117, 85, 87, 96, 98 ]
+ },
+ 1010: {
+ evolution: 1011,
+ evolvers: [ 116, 82, 88, 93, 104 ]
+ },
+ 1015: {
+ evolution: 1016,
+ evolvers: [ 82, 266, 88, 304, 104 ]
+ },
+ 1017: {
+ evolution: 1018,
+ evolvers: [ 117, 81, 87, 98, 103 ]
+ },
+ 1020: {
+ evolution: 1021,
+ evolvers: [ 117, 85, 88, 96, 99 ]
+ },
+ 1024: {
+ evolution: 1025,
+ evolvers: [ 88, 266, 94, 100, 104 ]
+ },
+ 1026: {
+ evolution: 1027,
+ evolvers: [ 85, 96, 301, 301, 101 ]
+ },
+ 1028: {
+ evolution: 1029,
+ evolvers: [ 118, 84, 86, 100, 102 ]
+ },
+ 1030: {
+ evolution: 1031,
+ evolvers: [ 83, 87, 98, 303, 103 ]
+ },
+ 1032: {
+ evolution: 1033,
+ evolvers: [ 118, 84, 87, 300, 303 ]
+ },
+ 1034: {
+ evolution: 1035,
+ evolvers: [ 118, 84, 266, 300, 267]
+ },
+ 1036: {
+ evolution: 1037,
+ evolvers: [ 117, 79, 85, 96, 101]
+ },
+ 1038: {
+ evolution: 1039,
+ evolvers: [ 90, 91, 96, 97 ]
+ },
+ 1040: {
+ evolution: 1041,
+ evolvers: [ 118, 83, 84, 95, 300 ]
+ },
+ 1042: {
+ evolution: 1043,
+ evolvers: [ 118, 86, 97, 302, 102 ]
+ },
+ 1044: {
+ evolution: 1045,
+ evolvers: [ 118, 87, 266, 303, 267 ]
+ },
+ 1046: {
+ evolution: 1047,
+ evolvers: [ 118, 86, 266, 302, 102 ]
+ },
+ 1048: {
+ evolution: 1049,
+ evolvers: [ 117, 81, 81, 87, 103 ]
+ },
+ 1050: {
+ evolution: 1051,
+ evolvers: [ 117, 92, 92, 98, 103 ]
+ },
+ 1053: {
+ evolution: 1054,
+ evolvers: [ 117, 79, 90, 96 ]
+ },
+ 1055: {
+ evolution: 1056,
+ evolvers: [ 117, 80, 86, 97, 102 ]
+ },
+ 1057: {
+ evolution: 1058,
+ evolvers: [ 117, 78, 84, 95, 100 ]
+ },
+ 1059: {
+ evolution: 1060,
+ evolvers: [ 116, 92, 98, 303 ]
+ },
+ 1069: {
+ evolution: 1070,
+ evolvers: [ 116, 80, 86, 91 ]
+ },
+ 1071: {
+ evolution: 1072,
+ evolvers: [ 117, 78, 84, 95, 100 ]
+ },
+ 1074: {
+ evolution: 1075,
+ evolvers: [ 118, 94, 99, 304, 104 ]
+ },
+ 1076: {
+ evolution: 1077,
+ evolvers: [ 118, 83, 85, 96, 101 ]
+ },
+ 1078: {
+ evolution: 1079,
+ evolvers: [ 83, 87, 87, 303, 103 ]
+ },
+ 1080: {
+ evolution: 1081,
+ evolvers: [ 86, 266, 97, 302, 102 ]
+ },
+ 1082: {
+ evolution: 1083,
+ evolvers: [ 118, 83, 84, 300, 100 ]
+ },
+ 1084: {
+ evolution: 1085,
+ evolvers: [ 118, 88, 266, 304, 267 ]
+ },
+ 1086: {
+ evolution: 1087,
+ evolvers: [ 117, 88, 99, 304, 104 ]
+ },
+ 1088: {
+ evolution: 1089,
+ evolvers: [ 117, 85, 96, 301, 101 ]
+ },
+ 1090: {
+ evolution: 1091,
+ evolvers: [ 118, 83, 87, 303, 103 ]
+ },
+ 1092: {
+ evolution: 1093,
+ evolvers: [ 115, 116, 117, 81 ]
+ },
+ 1094: {
+ evolution: 1095,
+ evolvers: [ 117, 80, 86, 97, 102 ]
+ },
+ 1096: {
+ evolution: 1097,
+ evolvers: [ 117, 82, 82, 99, 104]
+ },
+ 1099: {
+ evolution: 1100,
+ evolvers: [ 117, 91, 92, 97, 98 ]
+ },
+ 1101: {
+ evolution: [1102, 1102],
+ evolvers: [ [118, 266, 300, 100, 104 ], [ 1103, 1105 ]]
+ },
+ 1103: {
+ evolution: 1104,
+ evolvers: [ 117, 82, 88, 304, 104 ]
+ },
+ 1105: {
+ evolution: 1106,
+ evolvers: [ 117, 80, 86, 97, 302 ]
+ },
+ 1107: {
+ evolution: 1108,
+ evolvers: [ 118, 84, 266, 300, 100 ]
+ },
+ 1109: {
+ evolution: 1110,
+ evolvers: [ 116, 117, 81, 87, 98 ]
+ },
+ 1111: {
+ evolution: 1112,
+ evolvers: [ 117, 79, 85, 96, 101 ]
+ },
+ 1114: {
+ evolution: 1115,
+ evolvers: [ 118, 84, 95, 94, 100 ]
+ },
+ 1116: {
+ evolution: 1117,
+ evolvers: [ 118, 83, 88, 94, 104 ]
+ },
+ 1118: {
+ evolution: 1119,
+ evolvers: [ 118, 85, 96, 301, 101 ]
+ },
+ 1120: {
+ evolution: 1121,
+ evolvers: [ 118, 266, 95, 300, 267 ]
+ },
+ 1122: {
+ evolution: 1123,
+ evolvers: [ 118, 85, 266, 301, 267 ]
+ },
+ 1124: {
+ evolution: 1125,
+ evolvers: [ 118, 83, 87, 98, 303 ]
+ },
+ 1126: {
+ evolution: 1127,
+ evolvers: [ 83, 86, 97, 302, 102 ]
+ },
+ 1128: {
+ evolution: 1129,
+ evolvers: [ 118, 94, 99, 304, 104 ]
+ },
+ 1130: {
+ evolution: 1131,
+ evolvers: [ 84, 94, 95, 300, 100 ]
+ },
+ 1132: {
+ evolution: 1133,
+ evolvers: [ 118, 83, 88, 304, 104 ]
+ },
+ 1134: {
+ evolution: 1135,
+ evolvers: [ 117, 82, 93, 99 ]
+ },
+ 1140: {
+ evolution: 1141,
+ evolvers: [ 118, 83, 86, 88, 102 ]
+ },
+ 1142: {
+ evolution: 1143,
+ evolvers: [ 117, 95, 99, 300, 304 ]
+ },
+ 1144: {
+ evolution: 1145,
+ evolvers: [ 116, 117, 87, 98 ]
+ },
+ 1156: {
+ evolution: 1157,
+ evolvers: [ 117, 81, 87, 92, 98 ]
+ },
+ 1158: {
+ evolution: 1159,
+ evolvers: [ 118, 78, 82, 95, 304 ]
+ },
+ 1160: {
+ evolution: 1161,
+ evolvers: [ 117, 79, 85, 96, 101 ]
+ },
+ 1162: {
+ evolution: 1163,
+ evolvers: [ 118, 1180 ]
+ },
+ 1164: {
+ evolution: 1165,
+ evolvers: [ 116, 117, 80, 86 ]
+ },
+ 1166: {
+ evolution: 1167,
+ evolvers: [ 117, 88, 99 ]
+ },
+ 1168: {
+ evolution: 1169,
+ evolvers: [ 117, 84, 95 ]
+ },
+ 1170: {
+ evolution: 1171,
+ evolvers: [ 116, 117, 85 ]
+ },
+ 1172: {
+ evolution: 1173,
+ evolvers: [ 118, 92, 94, 98, 303 ]
+ },
+ 1174: {
+ evolution: 1175,
+ evolvers: [ 118, 83, 97, 302, 102 ]
+ },
+ 1176: {
+ evolution: 1177,
+ evolvers: [ 118, 86, 266, 97, 302 ]
+ },
+ 1178: {
+ evolution: 1179,
+ evolvers: [ 118, 84, 95, 300, 100 ]
+ },
+ 1181: {
+ evolution: 1182,
+ evolvers: [ 118, 83, 86, 97, 102 ]
+ },
+ 1183: {
+ evolution: 1184,
+ evolvers: [ 87, 94, 98, 303, 103 ]
+ },
+ 1185: {
+ evolution: 1186,
+ evolvers: [ 118, 88, 99, 99, 104 ]
+ },
+ 1187: {
+ evolution: 1188,
+ evolvers: [ 83, 84, 95, 300, 300 ]
+ },
+ 1189: {
+ evolution: 1190,
+ evolvers: [ 118, 85, 94, 96, 96 ]
+ },
+ 1191: {
+ evolution: 1192,
+ evolvers: [ 118, 266, 301, 101, 267 ]
+ },
+ 1193: {
+ evolution: 1194,
+ evolvers: [ 117, 80, 86, 97, 102 ]
+ },
+ 1195: {
+ evolution: 1196,
+ evolvers: [ 117, 81, 87, 303, 103 ]
+ },
+ 1198: {
+ evolution: 1199,
+ evolvers: [ 117, 78, 84, 95, 300 ]
+ },
+ 1200: {
+ evolution: 1201,
+ evolvers: [ 117, 79, 85, 96, 301 ]
+ },
+ 1202: {
+ evolution: 1203,
+ evolvers: [ 117, 81, 87, 98, 103 ]
+ },
+ 1204: {
+ evolution: 1205,
+ evolvers: [ 116, 117, 90, 96, 101 ]
+ },
+ 1207: {
+ evolution: 1208,
+ evolvers: [ 118, 88, 94, 304, 104 ]
+ },
+ 1209: {
+ evolution: 1210,
+ evolvers: [ 118, 83, 96, 301, 101 ]
+ },
+ 1211: {
+ evolution: 1212,
+ evolvers: [ 118, 83, 84, 300, 100 ]
+ },
+ 1213: {
+ evolution: 1214,
+ evolvers: [ 117, 78, 98, 95, 100 ]
+ },
+ 1219: {
+ evolution: 1220,
+ evolvers: [ 118, 88, 84, 304, 104 ]
+ },
+ 1221: {
+ evolution: 1222,
+ evolvers: [ 83, 84, 89, 95, 300 ]
+ },
+ 1229: {
+ evolution: 1230,
+ evolvers: [ 98, 99, 300, 303, 304 ]
+ },
+ 1231: {
+ evolution: 1232,
+ evolvers: [ 118, 83, 86, 302, 102 ]
+ },
+ 1233: {
+ evolution: 1234,
+ evolvers: [ 118, 83, 85, 301, 101 ]
+ },
+ 1235: {
+ evolution: 1236,
+ evolvers: [ 266, 94, 98, 303, 103 ]
+ },
+ 1237: {
+ evolution: 1238,
+ evolvers: [ 84, 89, 94, 95, 100 ]
+ },
+ 1239: {
+ evolution: 1240,
+ evolvers: [ 118, 266, 98, 303, 267 ]
+ },
+ 1241: {
+ evolution: 1242,
+ evolvers: [ 116, 117, 78, 84, 100 ]
+ },
+ 1243: {
+ evolution: 1244,
+ evolvers: [ 116, 117, 93, 99, 104 ]
+ },
+ 1246: {
+ evolution: 1247,
+ evolvers: [ 118, 84, 94, 95, 100 ]
+ },
+ 1248: {
+ evolution: 1249,
+ evolvers: [ 117, 80, 86, 97, 102 ]
+ },
+ 1250: {
+ evolution: 1251,
+ evolvers: [ 118, 85, 87, 301, 101 ]
+ },
+ 1257: {
+ evolution: 1258,
+ evolvers: [ 118, 87, 266, 98, 267 ]
+ },
+ 1259: {
+ evolution: 1260,
+ evolvers: [ 300, 301, 302, 303, 304 ]
+ },
+ 1261: {
+ evolution: 1262,
+ evolvers: [ 266, 88, 88, 88, 88 ]
+ },
+ 1263: {
+ evolution: 1264,
+ evolvers: [ 96, 99, 101, 104 ]
+ },
+ 1265: {
+ evolution: 1266,
+ evolvers: [ 117, 78, 84, 95, 100 ]
+ },
+ 1267: {
+ evolution: 1268,
+ evolvers: [ 266, 302, 304, 102, 267 ]
+ },
+ 1269: {
+ evolution: 1270,
+ evolvers: [ 83, 86, 94, 97, 302 ]
+ },
+ 1271: {
+ evolution: 1272,
+ evolvers: [ 85, 94, 96, 301, 101 ]
+ },
+ 1273: {
+ evolution: 1274,
+ evolvers: [ 118, 118, 78, 78, 100 ]
+ },
+ 1275: {
+ evolution: 1276,
+ evolvers: [ 118, 88, 99, 304, 104 ]
+ },
+ 1277: {
+ evolution: 1278,
+ evolvers: [ 118, 87, 98, 303, 103 ]
+ },
+ 1284: {
+ evolution: 1285,
+ evolvers: [ 95, 96, 97, 303, 304 ]
+ },
+ 1286: {
+ evolution: 1287,
+ evolvers: [ 116, 117, 81, 98 ]
+ },
+ 1288: {
+ evolution: 1289,
+ evolvers: [ 116, 117, 80, 97 ]
+ },
+ 1291: {
+ evolution: 1292,
+ evolvers: [ 118, 94, 97, 302, 102 ]
+ },
+ 1293: {
+ evolution: 1294,
+ evolvers: [ 117, 80, 81, 86, 87 ]
+ },
+ 1295: {
+ evolution: 1296,
+ evolvers: [ 117, 78, 84, 300, 100 ]
+ },
+ 1297: {
+ evolution: 1298,
+ evolvers: [ 118, 94, 300, 300, 100 ]
+ },
+ 1299: {
+ evolution: 1300,
+ evolvers: [ 116, 117, 82, 88, 104 ]
+ },
+ 1301: {
+ evolution: 1302,
+ evolvers: [ 116, 117, 79, 85, 101 ]
+ },
+ 1303: {
+ evolution: 1304,
+ evolvers: [ 116, 117, 82, 88, 104 ]
+ },
+ 1305: {
+ evolution: 1306,
+ evolvers: [ 116, 117, 80, 86, 102 ]
+ },
+ 1307: {
+ evolution: 1308,
+ evolvers: [ ]
+ },
+ 1309: {
+ evolution: 1310,
+ evolvers: [ 118, 95, 95, 300, 267 ]
+ },
+ 1311: {
+ evolution: 1312,
+ evolvers: [ 117, 78, 82, 84, 88 ]
+ },
+ 1313: {
+ evolution: 1314,
+ evolvers: [ 118, 266, 95, 300, 267 ]
+ },
+ 1315: {
+ evolution: 1316,
+ evolvers: [ 87, 94, 98, 303, 103 ]
+ },
+ 1317: {
+ evolution: 1318,
+ evolvers: [ 118, 84, 94, 300, 100 ]
+ },
+ 1319: {
+ evolution: 1320,
+ evolvers: [ 83, 85, 96, 301, 101 ]
+ },
+ 1321: {
+ evolution: 1322,
+ evolvers: [ 118, 80, 83, 97, 102 ]
+ },
+ 1323: {
+ evolution: 1324,
+ evolvers: [ 88, 266, 99, 304, 104 ]
+ },
+ 1325: {
+ evolution: 1326,
+ evolvers: [ 116, 117, 81, 87, 103 ]
+ },
+ 1327: {
+ evolution: 1328,
+ evolvers: [ 116, 117, 80, 91, 102 ]
+ },
+ 1331: {
+ evolution: 1332,
+ evolvers: [ 116, 117, 81, 92, 103 ]
+ },
+ 1335: {
+ evolution: 1336,
+ evolvers: [ 117, 88, 94, 99, 104 ]
+ },
+ 1337: {
+ evolution: 1338,
+ evolvers: [ 118, 98, 98, 303, 267 ]
+ },
+ 1340: {
+ evolution: 1341,
+ evolvers: [ 79, 85, 90, 94, 301 ]
+ },
+ 1354: {
+ evolution: 1355,
+ evolvers: [ 117, 80, 83, 97, 302 ]
+ },
+ 1356: {
+ evolution: 1357,
+ evolvers: [ 78, 78, 78, 84, 84 ]
+ },
+ 1358: {
+ evolution: 1359,
+ evolvers: [ 82, 82, 82, 88, 88 ]
+ },
+ 1361: {
+ evolution: 1362,
+ evolvers: [ 118, 86, 266, 302, 267 ]
+ },
+ 1363: {
+ evolution: 1364,
+ evolvers: [ 1180, 87, 266, 98, 103 ]
+ },
+ 1365: {
+ evolution: 1366,
+ evolvers: [ 1180, 82, 83, 88, 304 ]
+ },
+ 1367: {
+ evolution: 1368,
+ evolvers: [ 1180, 117, 84, 300, 100 ]
+ },
+ 1369: {
+ evolution: 1370,
+ evolvers: [ 1180, 85, 94, 301, 101 ]
+ },
+ 1371: {
+ evolution: 1372,
+ evolvers: [ 95, 302, 301, 98, 99 ]
+ },
+ 1373: {
+ evolution: 1374,
+ evolvers: [ 118, 88, 94, 304, 104 ]
+ },
+ 1375: {
+ evolution: 1376,
+ evolvers: [ 118, 79, 83, 96, 301 ]
+ },
+ 1377: {
+ evolution: 1378,
+ evolvers: [ 117, 118, 86, 91, 97 ]
+ },
+ 1379: {
+ evolution: 1380,
+ evolvers: [ 118, 88, 266, 99, 304 ]
+ },
+ 1381: {
+ evolution: 1382,
+ evolvers: [ ]
+ },
+ 1383: {
+ evolution: 1384,
+ evolvers: [ 117, 79, 85, 96, 101 ]
+ },
+ 1385: {
+ evolution: 1386,
+ evolvers: [ 116, 117, 81, 98 ]
+ },
+ 4: {
+ evolution: 1387,
+ evolvers: [ ]
+ },
+ 8: {
+ evolution: 1388,
+ evolvers: [ ]
+ },
+ 12: {
+ evolution: 1389,
+ evolvers: [ ]
+ },
+ 1390: {
+ evolution: 1391,
+ evolvers: [ 118, 88, 99, 304, 267 ]
+ },
+ 1394: {
+ evolution: 1395,
+ evolvers: [ 117, 118, 84, 85 ]
+ },
+ 1396: {
+ evolution: 1397,
+ evolvers: [ 117, 80, 91, 97, 102 ]
+ },
+ 1398: {
+ evolution: 1399,
+ evolvers: [ 117, 79, 90, 96, 101 ]
+ },
+ 1400: {
+ evolution: 1401,
+ evolvers: [ ]
+ },
+ 1403: {
+ evolution: 1404,
+ evolvers: [ 118, 85, 266, 301, 267 ]
+ },
+ 1405: {
+ evolution: 1406,
+ evolvers: [ 1180, 87, 98, 303, 103 ]
+ },
+ 1407: {
+ evolution: 1408,
+ evolvers: [ 1180, 117, 94, 302, 303 ]
+ },
+ 1409: {
+ evolution: 1410,
+ evolvers: [ 1180, 83, 88, 304, 104 ]
+ },
+ 1411: {
+ evolution: 1412,
+ evolvers: [ 1180, 118, 89, 95, 100 ]
+ },
+ 261: {
+ evolution: 1413,
+ evolvers: [ ]
+ },
+ 1415: {
+ evolution: 1416,
+ evolvers: [ 116, 117, 92, 98, 103 ]
+ },
+ 1419: {
+ evolution: 1420,
+ evolvers: [ 84, 88, 300, 304, 104 ]
+ },
+ 1421: {
+ evolution: 1422,
+ evolvers: [ 118, 94, 99, 304, 267 ]
+ },
+ 1425: {
+ evolution: 1426,
+ evolvers: [ 117, 79, 85, 96, 101 ]
+ },
+ 1429: {
+ evolution: 1430,
+ evolvers: [ 117, 83, 86, 91, 97 ]
+ },
+};
diff --git a/common/data/families.js b/common/data/families.js
index 05a1e1930..31c6a1cf8 100644
--- a/common/data/families.js
+++ b/common/data/families.js
@@ -1,922 +1,1432 @@
window.families = [
- "Monkey D. Luffy",
- "Monkey D. Luffy",
- "Monkey D. Luffy",
- "Monkey D. Luffy",
- "Roronoa Zoro",
- "Roronoa Zoro",
- "Roronoa Zoro",
- "Roronoa Zoro",
- "Nami",
- "Nami",
- "Nami",
- "Nami",
- "Usopp",
- "Usopp",
- "Usopp",
- "Usopp",
- "Sanji",
- "Sanji",
- "Sanji",
- "Sanji",
- "Tony Tony Chopper",
- "Tony Tony Chopper",
- "Tony Tony Chopper",
- "Tony Tony Chopper",
- "Tony Tony Chopper",
- "Tony Tony Chopper",
- "Higuma",
- "Master of the Near Sea",
- "Alvida",
- "Alvida",
- "Coby",
- "Coby",
- "Helmeppo",
- "Helmeppo",
- "Morgan",
- "Mohji & Richie",
- "Cabaji",
- "Buggy",
- "Buggy",
- "Gaimon",
- "Siam",
- "Butchie",
- "Django",
- "Django",
- "Kuro",
- "Kuro",
- "Yosaku",
- "Johnny",
- "Fullbody",
- "Patty",
- "Carne",
- "Zeff",
- "Gin",
- "Gin",
- "Pearl",
- "Pearl",
- "Don Krieg",
- "Don Krieg",
- "Nezumi",
- "Momoo",
- "Choo",
- "Kuroobi",
- "Hachi",
- "Hachi",
- "Arlong",
- "Arlong",
- "Tashigi",
- "Tashigi",
- "Smoker",
- "Smoker",
- "Nefertari Vivi",
- "Nefertari Vivi",
- "Nefertari Vivi",
- "Portgas D. Ace",
- "Portgas D. Ace",
- "Shanks",
- "Shanks",
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- "Sword Bandit",
- "Pistol Bandit",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Cannoneer",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Cannoneer",
- "Bodyguard",
- "Bodyguard",
- "Black Cat Pirates",
- "Black Cat Pirates",
- "Black Cat Pirates",
- "Black Cat Pirates",
- "Black Cat Pirates",
- "Fighter Group Leader",
- "Slasher Group Leader",
- "Striker Group Leader",
- "Shooter Group Leader",
- "Assassin Master",
- "Arlong Crewmember",
- "Arlong Crewmember",
- "Arlong Crewmember",
- "Arlong Crewmember",
- "Knuckle Navy",
- "Saber Navy",
- "Halberd Navy",
- "Pistol Navy",
- "Cannoneer Navy",
- "Knuckle Navy",
- "Saber Navy",
- "Halberd Navy",
- "Pistol Navy",
- "Cannoneer Navy",
- null,
- null,
- null,
- null,
- null,
- "Knuckle Navy",
- "Saber Navy",
- "Halberd Navy",
- "Pistol Navy",
- "Cannoneer Navy",
- "Mr. 5",
- "Mr. 5",
- "Miss Valentine",
- "Miss Valentine",
- "Galdino",
- "Galdino",
- "Miss Goldenweek",
- "Miss Goldenweek",
- "Bentham",
- "Bentham",
- "Nico Robin",
- "Nico Robin",
- "Mr. 9",
- "Mr. 9",
- "Laboon",
- "Laboon",
- "Neptunian Squid",
- "Monkey D. Luffy",
- "Monkey D. Luffy",
- "Roronoa Zoro",
- "Roronoa Zoro",
- "Nami",
- "Nami",
- "Usopp",
- "Usopp",
- "Sanji",
- "Sanji",
- "Dracule Mihawk",
- "Dracule Mihawk",
- "Morgan",
- "Django",
- "Fullbody",
- "Hina",
- "Hina",
- "Mr. 8",
- "Mr. 8",
- "Misss Monday",
- "Misss Monday",
- "Knuckle Baroque Works",
- "Saber Baroque Works",
- "Halberd Baroque Works",
- "Pistol Baroque Works",
- "Bazooka Baroque Works",
- "Knuckle Baroque Works",
- "Saber Baroque Works",
- "Halberd Baroque Works",
- "Pistol Baroque Works",
- "Bazooka Baroque Works",
- "Tony Tony Chopper",
- "Tony Tony Chopper",
- "Tony Tony Chopper",
- "Marco",
- "Marco",
- "Jozu",
- "Jozu",
- "Vista",
- "Vista",
- "Izo",
- "Izo",
- "Blamenco",
- "Blamenco",
- "Whitebeard",
- "Whitebeard",
- "Coby",
- "Coby",
- "Helmeppo",
- "Helmeppo",
- null,
- null,
- "Smoker",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Fighter Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Slasher Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Striker Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Shooter Group Crew Pirates",
- "Cannoneer",
- "Mr. 13",
- "Dorry",
- "Broggy",
- "Triceratops",
- "Rex",
- "Brontosaurus",
- "Tsuru",
- "Tsuru",
- "Momonga",
- "Onigumo",
- null,
- null,
- null,
- null,
- null,
- "Monkey D. Garp",
- "Monkey D. Garp",
- "Trafalgar Law",
- "Trafalgar Law",
- "Basil Hawkins",
- "Basil Hawkins",
- "Killer",
- "Killer",
- "Urouge",
- "Urouge",
- "Bepo",
- "Bepo",
- "Kalifa",
- "Kalifa",
- "Paulie",
- "Paulie",
- "Rob Lucci",
- "Rob Lucci",
- "Kaku",
- "Kaku",
- "Lulu",
- "Wapol",
- "Wapol",
- "Dalton",
- "Dalton",
- "Chessmarimo",
- "Chessmarimo",
- "Chessmarimo",
- "Dr. Kureha",
- "Lapin",
- "Lapin",
- "Franky",
- "Franky",
- "Kiwi & Mozu",
- "Kiwi & Mozu",
- "Surume",
- "Surume",
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- "Zephyr",
- "Zephyr",
- "Ain",
- "Ain",
- "Eustass Kid",
- "Eustass Kid",
- "Scratchmen Apoo",
- "Scratchmen Apoo",
- "X Drake",
- "X Drake",
- "Jewelry Bonney",
- "Jewelry Bonney",
- "Capone Bege",
- "Capone Bege",
- "Silvers Rayleigh",
- "Silvers Rayleigh",
- "Giant Red Pirates",
- "Giant Blue Pirates",
- "Giant Green Pirates",
- "Giant Yellow Pirates",
- "Giant Black Pirates",
- "Giant Red Pirates",
- "Giant Blue Pirates",
- "Giant Green Pirates",
- "Giant Yellow Pirates",
- "Giant Black Pirates",
- "Sea Cat",
- "Dugong",
- "Dugong",
- "Banana Gator",
- "Sandora Dragon",
- "Crocodile",
- "Crocodile",
- "Hogback",
- "Hogback",
- "Cindry",
- "Cindry",
- "Emporio Ivankov",
- "Emporio Ivankov",
- "Perona",
- "Perona",
- "Kumacy",
- "Dog Penguin",
- "Miss Merry Christmas",
- "Miss Merry Christmas",
- "Mr. 4",
- "Mr. 4",
- "Miss Doublefinger",
- "Miss Doublefinger",
- "Daz Bones",
- "Daz Bones",
- "Rebecca",
- "Absalom",
- "Absalom",
- "General Zombie",
- "Jigoro of the Wind",
- "Crocodile",
- "Jimbe",
- "Jimbe",
- "Bartholomew Kuma",
- "Bartholomew Kuma",
- "Gecko Moria",
- "Gecko Moria",
- "Boa Hancock",
- "Boa Hancock",
- "Donquixote Doflamingo",
- "Donquixote Doflamingo",
- "Sanji",
- "Monkey D. Luffy",
- "Roronoa Zoro",
- "Nami",
- "Brook",
- "Brook",
- "Ryuuma",
- "Masira",
- "Shoujou",
- "Montblanc Cricket",
- "South Bird and Forest Residents",
- "Bellamy",
- "Bellamy",
- "Sarquiss",
- "Elizabeth",
- "Caroline",
- "Sanji",
- "Sanji",
- "Perona",
- "Perona",
- "Nefertari Vivi",
- "Nefertari Vivi",
- "Duck Squadron",
- "Duck Squadron",
- "Duck Squadron",
- "Duck Squadron",
- "Duck Squadron",
- "Blackbeard",
- "Blackbeard",
- "Thatch",
- "Thatch",
- "Namule",
- "Namule",
- "Rakuyo",
- "Rakuyo",
- "Fossa",
- "Fossa",
- "Curiel",
- "Curiel",
- "Sengoku",
- "Sengoku",
- "Galdino",
- "Bentham",
- "Bentham",
- "Satori",
- "Shura",
- "Gedatsu",
- "Braham",
- "Yama",
- "Yellow Skypiea Guard",
- "Black Skypiea Guard",
- "Yellow Skypiea Guard",
- "Black Skypiea Guard",
- "Red Skypiea Guard Enforcer",
- "Blue Skypiea Guard Enforcer",
- "Green Skypiea Guard Enforcer",
- "Yellow Skypiea Guard Enforcer",
- "Black Skypiea Guard Enforcer",
- "Red Skypiea Enforcer",
- "Blue Skypiea Enforcer",
- "Green Skypiea Enforcer",
- "Yellow Skypiea Enforcer",
- "Black Skypiea Enforcer",
- "Red Skypiea Enforcer",
- "Blue Skypiea Enforcer",
- "Green Skypiea Enforcer",
- "Yellow Skypiea Enforcer",
- "Black Skypiea Enforcer",
- "Red Shandian Warrior",
- "Blue Shandian Warrior",
- "Green Shandian Warrior",
- "Red Shandian Warrior",
- "Blue Shandian Warrior",
- "Green Shandian Warrior",
- "Yellow Shandian Warrior",
- "Black Shandian Warrior",
- "Yellow Shandian Warrior",
- "Black Shandian Warrior",
- "Portgas D. Ace",
- "Portgas D. Ace",
- "Bellmere",
- "Bellmere",
- "Kaya",
- "Kaya",
- "Hotori and Kotori",
- "Hotori and Kotori",
- "Pell",
- "Pell",
- "Chaka",
- "Chaka",
- "Crocodile",
- "Crocodile",
- "Daz Bones",
- "Sabo",
- "Sabo",
- "Nico Robin",
- "Heracles'n",
- "Heracles'n",
- "Usopp",
- "Usopp",
- "Monkey D. Luffy",
- "Monkey D. Luffy",
- "Sanji",
- "Sanji",
- "Nami",
- "Nami",
- "Brook",
- "Brook",
- "Tony Tony Chopper",
- "Tony Tony Chopper",
- "Shanks",
- "Shanks",
- "Nico Robin",
- "Nico Robin",
- "Brook",
- "Brook",
- "Nami",
- "Nami",
- "Domino",
- "Domino",
- "Minorhinoceros",
- "Basilisk",
- "Ohm",
- "Nola Giant Snake",
- "Wyper",
- "Wyper",
- "Eneru",
- "Eneru",
- "Monkey D. Luffy",
- "Monkey D. Luffy",
- "Sadi-chan",
- "Sadi-chan",
- "Minokoala",
- "Manticore",
- "Roronoa Zoro",
- "Roronoa Zoro",
- "Usopp",
- "Usopp",
- "Nico Robin",
- "Nico Robin",
- "Franky",
- "Franky",
- "Portgas D. Ace",
- "Portgas D. Ace",
- "Porche",
- "Capote",
- "Hamburg",
- "Pickles",
- "Big Bun",
- "Foxy",
- "Foxy",
- "Monkey D. Luffy",
- "Monkey D. Luffy",
- "Usopp",
- "Tony Tony Chopper",
- "Aokiji",
- "Aokiji",
- "Nami",
- "Monkey D. Luffy",
- "Monkey D. Luffy",
- "Roronoa Zoro",
- "Roronoa Zoro",
- "Genbou",
- "Kamakiri",
- "Raki",
- "Aisa",
- "Nojiko",
- "Nojiko",
- "Crocus",
- "Crocus",
- "Koza",
- "Koza",
- null,
- null,
- null,
- null,
- null,
- "Tony Tony Chopper",
- "Tony Tony Chopper",
- "Buggy",
- "Buggy",
- "Shanks",
- "Shanks",
- "Eneru",
- "Eneru",
- "Sanji",
- "Sanji",
- "Zeff",
- "Zeff",
- "Patty",
- "Carne",
- "Hiking Bear",
- "Purinpurin",
- "Brook",
- "Brook",
- "Zanbai",
- "Superhuman Destroyers",
- "Superhuman Destroyers",
- "Superhuman Destroyers",
- "Street Punk Brawler",
- "Street Punk Brawler",
- "Street Punk Blade",
- "Street Punk Blade",
- "Street Punk Bullet",
- "Street Punk Bullet",
- "Street Punk Nails",
- "Street Punk Nails",
- "Street Punk Gatling",
- "Street Punk Gatling",
- "Tilestone",
- "Franky",
- "Kaku",
- "Kaku",
- "Rob Lucci",
- "Rob Lucci",
- "Keimi",
- "Keimi",
- "Pappug",
- "Hachi",
- "Doma",
- "Doma",
- "Decalvan Brothers",
- "Decalvan Brothers",
- "Squard",
- "Squard",
- "Whitey Bay",
- "Whitey Bay",
- "Little Oars Jr.",
- "Little Oars Jr.",
- "Marco",
- "Marco",
- "Nami",
- "Nami",
- "Duval",
- "Duval",
- "Duval",
- "Arlong",
- "Arlong",
- "Kuroobi",
- "Choo",
- "Monkey D. Luffy",
- "Usopp",
- "Usopp",
- "Nami",
- "Nefertari Vivi",
- "Nefertari Vivi",
- "Koza",
- "Koza",
- "Nefertari Cobra",
- "Sabo",
- "Sabo",
- "Koala",
- "Koala",
- "Hack",
- "Hack",
- "Emporio Ivankov",
- "Emporio Ivankov",
- "Inazuma",
- "Inazuma",
- "Nico Robin",
- "Nico Robin",
- "Nami",
- "Nami",
- "Nico Robin",
- "Nico Robin",
- "Perona",
- "Perona",
- "Nefertari Vivi",
- "Calgara",
- "Calgara",
- "Montblanc Noland",
- "Montblanc Noland",
- "Halberd Coporal Navy",
- "Pistol Coporal Navy",
- "Saber Coporal Navy",
- "Bazooka Coporal Navy",
- "Knuckle Coporal Navy",
- "Halberd Coporal Navy",
- "Pistol Coporal Navy",
- "Saber Coporal Navy",
- "Bazooka Coporal Navy",
- "Knuckle Coporal Navy",
- "Oimo",
- "Kashi",
- "Watchdog Unit of the Law",
- "Just Juryman",
- "Three-Headed Baskerville",
- "Blueno",
- "Blueno",
- "Nico Robin",
- "Nico Robin",
- "Franky",
- "Franky",
- "Gan Fall",
- "Gan Fall",
- "Pierre",
- "Konis",
- "Konis",
- "Dracule Mihawk",
- "Dracule Mihawk",
- "Crocodile",
- "Crocodile",
- "Jerry",
- "Jerry",
- "T-Bone",
- "T-Bone",
- "Nefertari Vivi",
- "Nefertari Vivi",
- "Monkey D. Luffy",
- "Kalifa",
- "Kalifa",
- "Jabra",
- "Jabra",
- "Fukuro",
- "Fukuro",
- "Kumadori",
- "Kumadori",
- "Kaku",
- "Rob Lucci",
- "Spandam",
- "Franky",
- "Nero",
- "Nero",
- "Wanze",
- "Wanze",
- "Portgas D. Ace",
- "Portgas D. Ace",
- "Princess Shirahoshi",
- "Rob Lucci",
- "Rob Lucci",
- "Kaku",
- "Kaku",
- "Kalifa",
- "Kalifa",
- "Jabra",
- "Jabra",
- "Blueno",
- "Blueno",
- "Fukuro",
- "Fukuro",
- "Kumadori",
- "Kumadori",
- "Monkey D. Luffy",
- "Usopp",
- "Franky",
- "Nami",
- "Tony Tony Chopper",
- "Roronoa Zoro",
- "Nico Robin",
- "Sanji",
- "Brook",
- "Dalmatian",
- "Momonga",
- "Onigumo",
- "Shu",
- "Very Good",
- "Strawberry",
- "Lucky Roo",
- "Lucky Roo",
- "Rebecca",
- "Rebecca",
- "Urouge",
- "Urouge",
- "Tashigi",
- "Tashigi",
- "Genzo",
- "Genzo",
- "Dr. Hiluluk",
- "Dr. Hiluluk",
- "Kuina",
- "Kuina",
- "Usopp Pirates",
- "Usopp Pirates",
- "Iceburg",
- "Iceburg",
- "Monkey D. Luffy",
- "Monkey D. Luffy",
- "Breed",
- "Breed",
- "Dugong",
- "Lapin",
- "Octopus Boxer",
- "Bentham",
- "Bentham",
- "Hina",
- "Hina",
- "Smoker",
- "Smoker",
- "Nami",
- "Nami",
- "Lola",
- "Lola",
- "Risky Brothers",
- "Cerberus",
- "Tararan",
- "Bear-Skin Rug",
- "Gecko Moria",
- "Gecko Moria",
- "Soldier Zombie",
- "Soldier Zombie",
- "Soldier Zombie",
- "Soldier Zombie",
- "Soldier Zombie",
- "Wild Zombie",
- "Wild Zombie",
- "Wild Zombie",
- "General Zombie",
- "General Zombie",
- "General Zombie",
- null,
- null,
- "Basil Hawkins",
- "Basil Hawkins",
- "Wyper",
- "Wyper",
- "Mr. 7 & Miss Father's Day",
- "Bartholomew Kuma",
- "Bartholomew Kuma",
- "Caesar Clown",
- "Caesar Clown",
- "Vergo",
- "Vergo",
- "Monet",
- "Monet",
- "Baby 5",
- "Baby 5",
- "Buffalo",
- "Buffalo",
- "Tom",
- "Tom",
- "Franky",
- "Iceburg",
- "Wapol",
- "Wapol",
- "Robson",
- "Tony Tony Chopper",
- "Trafalgar Law",
- "Trafalgar Law",
- "Jewelry Bonney",
- "Jewelry Bonney",
- "Coby",
- "Coby",
- "Alvida",
- "Alvida",
- "Nami",
- "Boa Hancock",
- "Boa Hancock",
- "Nico Robin",
- "Usopp",
- "Tony Tony Chopper",
- "Donquixote Doflamingo",
- "Donquixote Doflamingo",
- "Sugar",
- "Sugar",
- "Señor Pink",
- "Señor Pink",
- "Trebol",
- "Trebol",
- "Jora",
- "Jora",
- "Lao-G",
- "Lao-G",
- "Scratchmen Apoo",
- "Scratchmen Apoo",
- "Dorry",
- "Dorry",
- "Jimbe",
- "Daz Bones",
- "Buggy",
- null,
- "Perona",
- "Perona",
- "Hogback",
- "Absalom",
- "Oars",
- "Gecko Moria",
- "Brook",
- "Brook",
- "Crocodile",
- "Galdino",
- "Bentham",
- "Franky",
- "Franky",
- "Broggy",
- "Broggy",
- "Yokozuna",
- "Roronoa Zoro",
- "Roronoa Zoro",
- "Nico Robin",
- "Nico Robin",
- "Tony Tony Chopper",
- "Tony Tony Chopper",
- "Sanji",
- "Sanji",
- "Brook",
- "Brook",
- "Nico Nico Robin",
- "Nico Nico Robin",
- "Marguerite",
- "Marguerite",
- "Aphelandra",
- "Sweet Pea"
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Roronoa Zoro",
+ "Roronoa Zoro",
+ "Roronoa Zoro",
+ "Roronoa Zoro",
+ "Nami",
+ "Nami",
+ "Nami",
+ "Nami",
+ "Usopp",
+ "Usopp",
+ "Usopp",
+ "Usopp",
+ "Sanji",
+ "Sanji",
+ "Sanji",
+ "Sanji",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Higuma",
+ "Master of the Near Sea",
+ "Alvida",
+ "Alvida",
+ "Coby",
+ "Coby",
+ "Helmeppo",
+ "Helmeppo",
+ "Morgan",
+ "Mohji & Richie",
+ "Cabaji",
+ "Buggy",
+ "Buggy",
+ "Gaimon",
+ "Siam",
+ "Butchie",
+ "Django",
+ "Django",
+ "Kuro",
+ "Kuro",
+ "Yosaku",
+ "Johnny",
+ "Fullbody",
+ "Patty",
+ "Carne",
+ "Zeff",
+ "Gin",
+ "Gin",
+ "Pearl",
+ "Pearl",
+ "Don Krieg",
+ "Don Krieg",
+ "Nezumi",
+ "Momoo",
+ "Choo",
+ "Kuroobi",
+ "Hachi",
+ "Hachi",
+ "Arlong",
+ "Arlong",
+ "Tashigi",
+ "Tashigi",
+ "Smoker",
+ "Smoker",
+ "Nefertari Vivi",
+ "Nefertari Vivi",
+ "Nefertari Vivi",
+ "Portgas D. Ace",
+ "Portgas D. Ace",
+ "Shanks",
+ "Shanks",
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ "Sword Bandit",
+ "Pistol Bandit",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Cannoneer",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Cannoneer",
+ "Bodyguard",
+ "Bodyguard",
+ "Black Cat Pirates",
+ "Black Cat Pirates",
+ "Black Cat Pirates",
+ "Black Cat Pirates",
+ "Black Cat Pirates",
+ "Fighter Group Leader",
+ "Slasher Group Leader",
+ "Striker Group Leader",
+ "Shooter Group Leader",
+ "Assassin Master",
+ "Arlong Crewmember",
+ "Arlong Crewmember",
+ "Arlong Crewmember",
+ "Arlong Crewmember",
+ "Knuckle Navy",
+ "Saber Navy",
+ "Halberd Navy",
+ "Pistol Navy",
+ "Cannoneer Navy",
+ "Knuckle Navy",
+ "Saber Navy",
+ "Halberd Navy",
+ "Pistol Navy",
+ "Cannoneer Navy",
+ null,
+ null,
+ null,
+ null,
+ null,
+ "Knuckle Navy",
+ "Saber Navy",
+ "Halberd Navy",
+ "Pistol Navy",
+ "Cannoneer Navy",
+ "Mr. 5",
+ "Mr. 5",
+ "Miss Valentine",
+ "Miss Valentine",
+ "Galdino",
+ "Galdino",
+ "Miss Goldenweek",
+ "Miss Goldenweek",
+ "Bentham",
+ "Bentham",
+ "Nico Robin",
+ "Nico Robin",
+ "Mr. 9",
+ "Mr. 9",
+ "Laboon",
+ "Laboon",
+ "Neptunian Squid",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Roronoa Zoro",
+ "Roronoa Zoro",
+ "Nami",
+ "Nami",
+ "Usopp",
+ "Usopp",
+ "Sanji",
+ "Sanji",
+ "Dracule Mihawk",
+ "Dracule Mihawk",
+ "Morgan",
+ "Django",
+ "Fullbody",
+ "Hina",
+ "Hina",
+ "Mr. 8",
+ "Mr. 8",
+ "Misss Monday",
+ "Misss Monday",
+ "Knuckle Baroque Works",
+ "Saber Baroque Works",
+ "Halberd Baroque Works",
+ "Pistol Baroque Works",
+ "Bazooka Baroque Works",
+ "Knuckle Baroque Works",
+ "Saber Baroque Works",
+ "Halberd Baroque Works",
+ "Pistol Baroque Works",
+ "Bazooka Baroque Works",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Marco",
+ "Marco",
+ "Jozu",
+ "Jozu",
+ "Vista",
+ "Vista",
+ "Izo",
+ "Izo",
+ "Blamenco",
+ "Blamenco",
+ "Whitebeard",
+ "Whitebeard",
+ "Coby",
+ "Coby",
+ "Helmeppo",
+ "Helmeppo",
+ null,
+ null,
+ "Smoker",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Fighter Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Slasher Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Striker Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Shooter Group Crew Pirates",
+ "Cannoneer",
+ "Mr. 13",
+ "Dorry",
+ "Broggy",
+ "Triceratops",
+ "Rex",
+ "Brontosaurus",
+ "Tsuru",
+ "Tsuru",
+ "Momonga",
+ "Onigumo",
+ null,
+ null,
+ null,
+ null,
+ null,
+ "Monkey D. Garp",
+ "Monkey D. Garp",
+ "Trafalgar Law",
+ "Trafalgar Law",
+ "Basil Hawkins",
+ "Basil Hawkins",
+ "Killer",
+ "Killer",
+ "Urouge",
+ "Urouge",
+ "Bepo",
+ "Bepo",
+ "Kalifa",
+ "Kalifa",
+ "Paulie",
+ "Paulie",
+ "Rob Lucci",
+ "Rob Lucci",
+ "Kaku",
+ "Kaku",
+ "Lulu",
+ "Wapol",
+ "Wapol",
+ "Dalton",
+ "Dalton",
+ "Chessmarimo",
+ "Chessmarimo",
+ "Chessmarimo",
+ "Dr. Kureha",
+ "Lapin",
+ "Lapin",
+ "Franky",
+ "Franky",
+ "Kiwi & Mozu",
+ "Kiwi & Mozu",
+ "Surume",
+ "Surume",
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ "Zephyr",
+ "Zephyr",
+ "Ain",
+ "Ain",
+ "Eustass Kid",
+ "Eustass Kid",
+ "Scratchmen Apoo",
+ "Scratchmen Apoo",
+ "X Drake",
+ "X Drake",
+ "Jewelry Bonney",
+ "Jewelry Bonney",
+ "Capone Bege",
+ "Capone Bege",
+ "Silvers Rayleigh",
+ "Silvers Rayleigh",
+ "Giant Red Pirates",
+ "Giant Blue Pirates",
+ "Giant Green Pirates",
+ "Giant Yellow Pirates",
+ "Giant Black Pirates",
+ "Giant Red Pirates",
+ "Giant Blue Pirates",
+ "Giant Green Pirates",
+ "Giant Yellow Pirates",
+ "Giant Black Pirates",
+ "Sea Cat",
+ "Dugong",
+ "Dugong",
+ "Banana Gator",
+ "Sandora Dragon",
+ "Crocodile",
+ "Crocodile",
+ "Hogback",
+ "Hogback",
+ "Cindry",
+ "Cindry",
+ "Emporio Ivankov",
+ "Emporio Ivankov",
+ "Perona",
+ "Perona",
+ "Kumacy",
+ "Dog Penguin",
+ "Miss Merry Christmas",
+ "Miss Merry Christmas",
+ "Mr. 4",
+ "Mr. 4",
+ "Miss Doublefinger",
+ "Miss Doublefinger",
+ "Daz Bones",
+ "Daz Bones",
+ "Rebecca",
+ "Absalom",
+ "Absalom",
+ "General Zombie",
+ "Jigoro of the Wind",
+ "Crocodile",
+ "Jimbe",
+ "Jimbe",
+ "Bartholomew Kuma",
+ "Bartholomew Kuma",
+ "Gecko Moria",
+ "Gecko Moria",
+ "Boa Hancock",
+ "Boa Hancock",
+ "Donquixote Doflamingo",
+ "Donquixote Doflamingo",
+ "Sanji",
+ "Monkey D. Luffy",
+ "Roronoa Zoro",
+ "Nami",
+ "Brook",
+ "Brook",
+ "Ryuuma",
+ "Masira",
+ "Shoujou",
+ "Montblanc Cricket",
+ "South Bird and Forest Residents",
+ "Bellamy",
+ "Bellamy",
+ "Sarquiss",
+ "Elizabeth",
+ "Caroline",
+ "Sanji",
+ "Sanji",
+ "Perona",
+ "Perona",
+ "Nefertari Vivi",
+ "Nefertari Vivi",
+ "Duck Squadron",
+ "Duck Squadron",
+ "Duck Squadron",
+ "Duck Squadron",
+ "Duck Squadron",
+ "Blackbeard",
+ "Blackbeard",
+ "Thatch",
+ "Thatch",
+ "Namule",
+ "Namule",
+ "Rakuyo",
+ "Rakuyo",
+ "Fossa",
+ "Fossa",
+ "Curiel",
+ "Curiel",
+ "Sengoku",
+ "Sengoku",
+ "Galdino",
+ "Bentham",
+ "Bentham",
+ "Satori",
+ "Shura",
+ "Gedatsu",
+ "Braham",
+ "Yama",
+ "Yellow Skypiea Guard",
+ "Black Skypiea Guard",
+ "Yellow Skypiea Guard",
+ "Black Skypiea Guard",
+ "Red Skypiea Guard Enforcer",
+ "Blue Skypiea Guard Enforcer",
+ "Green Skypiea Guard Enforcer",
+ "Yellow Skypiea Guard Enforcer",
+ "Black Skypiea Guard Enforcer",
+ "Red Skypiea Enforcer",
+ "Blue Skypiea Enforcer",
+ "Green Skypiea Enforcer",
+ "Yellow Skypiea Enforcer",
+ "Black Skypiea Enforcer",
+ "Red Skypiea Enforcer",
+ "Blue Skypiea Enforcer",
+ "Green Skypiea Enforcer",
+ "Yellow Skypiea Enforcer",
+ "Black Skypiea Enforcer",
+ "Red Shandian Warrior",
+ "Blue Shandian Warrior",
+ "Green Shandian Warrior",
+ "Red Shandian Warrior",
+ "Blue Shandian Warrior",
+ "Green Shandian Warrior",
+ "Yellow Shandian Warrior",
+ "Black Shandian Warrior",
+ "Yellow Shandian Warrior",
+ "Black Shandian Warrior",
+ "Portgas D. Ace",
+ "Portgas D. Ace",
+ "Bellmere",
+ "Bellmere",
+ "Kaya",
+ "Kaya",
+ "Hotori and Kotori",
+ "Hotori and Kotori",
+ "Pell",
+ "Pell",
+ "Chaka",
+ "Chaka",
+ "Crocodile",
+ "Crocodile",
+ "Daz Bones",
+ "Sabo",
+ "Sabo",
+ "Nico Robin",
+ "Heracles'n",
+ "Heracles'n",
+ "Usopp",
+ "Usopp",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Sanji",
+ "Sanji",
+ "Nami",
+ "Nami",
+ "Brook",
+ "Brook",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Shanks",
+ "Shanks",
+ "Nico Robin",
+ "Nico Robin",
+ "Brook",
+ "Brook",
+ "Nami",
+ "Nami",
+ "Domino",
+ "Domino",
+ "Minorhinoceros",
+ "Basilisk",
+ "Ohm",
+ "Nola Giant Snake",
+ "Wyper",
+ "Wyper",
+ "Eneru",
+ "Eneru",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Sadi-chan",
+ "Sadi-chan",
+ "Minokoala",
+ "Manticore",
+ "Roronoa Zoro",
+ "Roronoa Zoro",
+ "Usopp",
+ "Usopp",
+ "Nico Robin",
+ "Nico Robin",
+ "Franky",
+ "Franky",
+ "Portgas D. Ace",
+ "Portgas D. Ace",
+ "Porche",
+ "Capote",
+ "Hamburg",
+ "Pickles",
+ "Big Bun",
+ "Foxy",
+ "Foxy",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Usopp",
+ "Tony Tony Chopper",
+ "Aokiji",
+ "Aokiji",
+ "Nami",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Roronoa Zoro",
+ "Roronoa Zoro",
+ "Genbou",
+ "Kamakiri",
+ "Raki",
+ "Aisa",
+ "Nojiko",
+ "Nojiko",
+ "Crocus",
+ "Crocus",
+ "Koza",
+ "Koza",
+ null,
+ null,
+ null,
+ null,
+ null,
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Buggy",
+ "Buggy",
+ "Shanks",
+ "Shanks",
+ "Eneru",
+ "Eneru",
+ "Sanji",
+ "Sanji",
+ "Zeff",
+ "Zeff",
+ "Patty",
+ "Carne",
+ "Hiking Bear",
+ "Purinpurin",
+ "Brook",
+ "Brook",
+ "Zanbai",
+ "Superhuman Destroyers",
+ "Superhuman Destroyers",
+ "Superhuman Destroyers",
+ "Street Punk Brawler",
+ "Street Punk Brawler",
+ "Street Punk Blade",
+ "Street Punk Blade",
+ "Street Punk Bullet",
+ "Street Punk Bullet",
+ "Street Punk Nails",
+ "Street Punk Nails",
+ "Street Punk Gatling",
+ "Street Punk Gatling",
+ "Tilestone",
+ "Franky",
+ "Kaku",
+ "Kaku",
+ "Rob Lucci",
+ "Rob Lucci",
+ "Keimi",
+ "Keimi",
+ "Pappug",
+ "Hachi",
+ "Doma",
+ "Doma",
+ "Decalvan Brothers",
+ "Decalvan Brothers",
+ "Squard",
+ "Squard",
+ "Whitey Bay",
+ "Whitey Bay",
+ "Little Oars Jr.",
+ "Little Oars Jr.",
+ "Marco",
+ "Marco",
+ "Nami",
+ "Nami",
+ "Duval",
+ "Duval",
+ "Duval",
+ "Arlong",
+ "Arlong",
+ "Kuroobi",
+ "Choo",
+ "Monkey D. Luffy",
+ "Usopp",
+ "Usopp",
+ "Nami",
+ "Nefertari Vivi",
+ "Nefertari Vivi",
+ "Koza",
+ "Koza",
+ "Nefertari Cobra",
+ "Sabo",
+ "Sabo",
+ "Koala",
+ "Koala",
+ "Hack",
+ "Hack",
+ "Emporio Ivankov",
+ "Emporio Ivankov",
+ "Inazuma",
+ "Inazuma",
+ "Nico Robin",
+ "Nico Robin",
+ "Nami",
+ "Nami",
+ "Nico Robin",
+ "Nico Robin",
+ "Perona",
+ "Perona",
+ "Nefertari Vivi",
+ "Calgara",
+ "Calgara",
+ "Montblanc Noland",
+ "Montblanc Noland",
+ "Halberd Coporal Navy",
+ "Pistol Coporal Navy",
+ "Saber Coporal Navy",
+ "Bazooka Coporal Navy",
+ "Knuckle Coporal Navy",
+ "Halberd Coporal Navy",
+ "Pistol Coporal Navy",
+ "Saber Coporal Navy",
+ "Bazooka Coporal Navy",
+ "Knuckle Coporal Navy",
+ "Oimo",
+ "Kashi",
+ "Watchdog Unit of the Law",
+ "Just Juryman",
+ "Three-Headed Baskerville",
+ "Blueno",
+ "Blueno",
+ "Nico Robin",
+ "Nico Robin",
+ "Franky",
+ "Franky",
+ "Gan Fall",
+ "Gan Fall",
+ "Pierre",
+ "Konis",
+ "Konis",
+ "Dracule Mihawk",
+ "Dracule Mihawk",
+ "Crocodile",
+ "Crocodile",
+ "Jerry",
+ "Jerry",
+ "T-Bone",
+ "T-Bone",
+ "Nefertari Vivi",
+ "Nefertari Vivi",
+ "Monkey D. Luffy",
+ "Kalifa",
+ "Kalifa",
+ "Jabra",
+ "Jabra",
+ "Fukuro",
+ "Fukuro",
+ "Kumadori",
+ "Kumadori",
+ "Kaku",
+ "Rob Lucci",
+ "Spandam",
+ "Franky",
+ "Nero",
+ "Nero",
+ "Wanze",
+ "Wanze",
+ "Portgas D. Ace",
+ "Portgas D. Ace",
+ "Princess Shirahoshi",
+ "Rob Lucci",
+ "Rob Lucci",
+ "Kaku",
+ "Kaku",
+ "Kalifa",
+ "Kalifa",
+ "Jabra",
+ "Jabra",
+ "Blueno",
+ "Blueno",
+ "Fukuro",
+ "Fukuro",
+ "Kumadori",
+ "Kumadori",
+ "Monkey D. Luffy",
+ "Usopp",
+ "Franky",
+ "Nami",
+ "Tony Tony Chopper",
+ "Roronoa Zoro",
+ "Nico Robin",
+ "Sanji",
+ "Brook",
+ "Dalmatian",
+ "Momonga",
+ "Onigumo",
+ "Shu",
+ "Very Good",
+ "Strawberry",
+ "Lucky Roo",
+ "Lucky Roo",
+ "Rebecca",
+ "Rebecca",
+ "Urouge",
+ "Urouge",
+ "Tashigi",
+ "Tashigi",
+ "Genzo",
+ "Genzo",
+ "Dr. Hiluluk",
+ "Dr. Hiluluk",
+ "Kuina",
+ "Kuina",
+ "Usopp Pirates",
+ "Usopp Pirates",
+ "Iceburg",
+ "Iceburg",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Breed",
+ "Breed",
+ "Dugong",
+ "Lapin",
+ "Octopus Boxer",
+ "Bentham",
+ "Bentham",
+ "Hina",
+ "Hina",
+ "Smoker",
+ "Smoker",
+ "Nami",
+ "Nami",
+ "Lola",
+ "Lola",
+ "Risky Brothers",
+ "Cerberus",
+ "Tararan",
+ "Bear-Skin Rug",
+ "Gecko Moria",
+ "Gecko Moria",
+ "Soldier Zombie",
+ "Soldier Zombie",
+ "Soldier Zombie",
+ "Soldier Zombie",
+ "Soldier Zombie",
+ "Wild Zombie",
+ "Wild Zombie",
+ "Wild Zombie",
+ "General Zombie",
+ "General Zombie",
+ "General Zombie",
+ "Trafalgar Law",
+ "Trafalgar Law",
+ "Basil Hawkins",
+ "Basil Hawkins",
+ "Wyper",
+ "Wyper",
+ "Mr. 7 & Miss Father's Day",
+ "Bartholomew Kuma",
+ "Bartholomew Kuma",
+ "Caesar Clown",
+ "Caesar Clown",
+ "Vergo",
+ "Vergo",
+ "Monet",
+ "Monet",
+ "Baby 5",
+ "Baby 5",
+ "Buffalo",
+ "Buffalo",
+ "Tom",
+ "Tom",
+ "Franky",
+ "Iceburg",
+ "Wapol",
+ "Wapol",
+ "Robson",
+ "Tony Tony Chopper",
+ "Trafalgar Law",
+ "Trafalgar Law",
+ "Jewelry Bonney",
+ "Jewelry Bonney",
+ "Coby",
+ "Coby",
+ "Alvida",
+ "Alvida",
+ "Nami",
+ "Boa Hancock",
+ "Boa Hancock",
+ "Nico Robin",
+ "Usopp",
+ "Tony Tony Chopper",
+ "Donquixote Doflamingo",
+ "Donquixote Doflamingo",
+ "Sugar",
+ "Sugar",
+ "Señor Pink",
+ "Señor Pink",
+ "Trebol",
+ "Trebol",
+ "Jora",
+ "Jora",
+ "Lao-G",
+ "Lao-G",
+ "Scratchmen Apoo",
+ "Scratchmen Apoo",
+ "Dorry",
+ "Dorry",
+ "Jimbe",
+ "Daz Bones",
+ "Buggy",
+ null,
+ "Perona",
+ "Perona",
+ "Hogback",
+ "Absalom",
+ "Oars",
+ "Gecko Moria",
+ "Brook",
+ "Brook",
+ "Crocodile",
+ "Galdino",
+ "Bentham",
+ "Franky",
+ "Franky",
+ "Broggy",
+ "Broggy",
+ "Yokozuna",
+ "Roronoa Zoro",
+ "Roronoa Zoro",
+ "Nico Robin",
+ "Nico Robin",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Sanji",
+ "Sanji",
+ "Brook",
+ "Brook",
+ "Nico Robin",
+ "Nico Robin",
+ "Marguerite",
+ "Marguerite",
+ "Aphelandra",
+ "Sweet Pea",
+ "Boa Hancock",
+ "Boa Hancock",
+ "Eustass Kid",
+ "Eustass Kid",
+ "Sadi-chan",
+ "Sadi-chan",
+ "Doberman",
+ "Hannyabal",
+ "Hannyabal",
+ "Saldeath",
+ null,
+ "Pica",
+ "Pica",
+ "Jimbe",
+ "Jimbe",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Nami",
+ "Nami",
+ "Usopp",
+ "Usopp",
+ "Franky",
+ "Franky",
+ "Perona",
+ "Perona",
+ "Rakuyo",
+ "Fossa",
+ "Curiel",
+ "Thatch",
+ "Portgas D. Ace",
+ "Portgas D. Ace",
+ "Beckman",
+ "Beckman",
+ "Gyaro",
+ "Makuro",
+ "Tansui",
+ "Bodyguard",
+ "Bodyguard",
+ "Bodyguard",
+ "Bodyguard",
+ "Bodyguard",
+ "Bodyguard",
+ "Charloss",
+ "Roswald",
+ "Shalulia",
+ "Eustass Kid",
+ "Trafalgar Law",
+ "Pacifista",
+ "Pacifista",
+ "Pacifista",
+ "Pacifista",
+ "Pacifista",
+ "Sentomaru",
+ "Sentomaru",
+ "Smoker",
+ "Smoker",
+ "Kizaru",
+ "Kizaru",
+ "Izo",
+ "Blamenco",
+ "Namule",
+ "Vista",
+ "Vista",
+ "Paulie",
+ "Impostor Straw Hats",
+ "Impostor Straw Hats",
+ "Impostor Straw Hats",
+ "Impostor Straw Hats",
+ "Impostor Straw Hats",
+ "Machvise",
+ "Machvise",
+ "Gladius",
+ "Gladius",
+ "Violet",
+ "Violet",
+ "Dellinger",
+ "Dellinger",
+ "Diamante",
+ "Diamante",
+ "Corazon",
+ "Corazon",
+ "Bepo",
+ "Bepo",
+ "Sachi and Penguin",
+ "Jean Bart",
+ "Jean Bart",
+ "Monet",
+ "Monet",
+ "Monkey D. Luffy",
+ "Count Butler",
+ "Count Butler",
+ "President Heaby",
+ "General Hotdog",
+ "Tony Tony Chopper",
+ "Capone Bege",
+ "Capone Bege",
+ "Brownbeard",
+ "Brownbeard",
+ "Lulu",
+ "Sugar",
+ "Sugar",
+ "Monkey D. Luffy",
+ "Portgas D. Ace",
+ "Don Chinjao",
+ "Don Chinjao",
+ "Blue Gilly",
+ "Blue Gilly",
+ "Funk Brothers",
+ "Funk Brothers",
+ "Hajrudin",
+ "Hajrudin",
+ "Abdullah and Jeet",
+ "Abdullah and Jeet",
+ "Bartolomeo",
+ "Bartolomeo",
+ "Emporio Ivankov",
+ "Emporio Ivankov",
+ "Inazuma",
+ "Inazuma",
+ "Jozu",
+ "Jozu",
+ "Killer",
+ "Killer",
+ "Trafalgar Law",
+ "Trafalgar Law",
+ "Sabo",
+ "Sabo",
+ "Nico Olvia",
+ "Nico Olvia",
+ "Saul",
+ "Saul",
+ "Nico Robin",
+ "Hina",
+ "Hina",
+ "Boa Sandersonia",
+ "Boa Sandersonia",
+ "Boa Marigold",
+ "Boa Marigold",
+ "Marguerite",
+ "Marguerite",
+ "Kikyo",
+ "Gloriosa",
+ "Destructive Female Archer, Kuja Warriors",
+ "Scheming Female Archer, Kuja Warriors",
+ "Smart Swordswoman, Kuja Warriors",
+ "Bright Swordswoman, Kuja Warriors",
+ "Skilled Female Fighter, Kuja Warriors",
+ "Nimble Female Fighter, Kuja Warriors",
+ "Shuraiya",
+ "Shuraiya",
+ "Gasparde",
+ "Gasparde",
+ "Needless",
+ "Ricky",
+ "Ricky",
+ "Leo",
+ "Leo",
+ "Mansherry",
+ "Mansherry",
+ "Kyros",
+ "Kyros",
+ "Don Sai",
+ "Don Sai",
+ "Fujitora",
+ "Fujitora",
+ "Musshuru",
+ "Musshuru",
+ "Saga",
+ "Saga",
+ "X Drake",
+ "X Drake",
+ "Rebecca",
+ "Rebecca",
+ "Dr. Indigo",
+ "Dr. Indigo",
+ "Scarlet",
+ "Scarlet",
+ "Billy",
+ "Coby",
+ "Coby",
+ "Zephyr",
+ "Zephyr",
+ "Ain",
+ "Ain",
+ "Binz",
+ "Binz",
+ "Shiki",
+ "Shiki",
+ "Nami",
+ "Nami",
+ "Nico Robin",
+ "Nico Robin",
+ "Tony Tony Chopper",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Sanji",
+ "Sanji",
+ "Nami",
+ "Nami",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Cavendish",
+ "Cavendish",
+ "Suleiman",
+ "Suleiman",
+ "Orlumbus",
+ "Orlumbus",
+ "Dagama",
+ "Dagama",
+ "Elizabello",
+ "Elizabello",
+ "Ideo",
+ "Ideo",
+ "Tashigi",
+ "Tashigi",
+ "Fukuro",
+ "Jabra",
+ "Blueno",
+ "Kumadori",
+ "Gecko Moria",
+ "Gecko Moria",
+ "Foxy",
+ "Foxy",
+ "Porche",
+ "Porche",
+ "Red Uniformed Guard",
+ "Green Uniformed Guard",
+ "Blue Uniformed Guard",
+ "Black Jailer",
+ "Yellow jailer",
+ "Minotaur",
+ "Minozebra",
+ "Sphinx",
+ "Saldeath",
+ null,
+ "Hannyabal",
+ "Hannyabal",
+ "Magellan",
+ "Magellan",
+ "Koala",
+ "Koala",
+ "Tesoro",
+ "Tesoro",
+ "Carina",
+ "Carina",
+ "Baccarat",
+ "Baccarat",
+ "Dice",
+ "Dice",
+ "Tanaka",
+ "Tanaka",
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ "Oars",
+ "Oars",
+ null,
+ "Blenheim",
+ "Blenheim",
+ "Kingdew",
+ "Kingdew",
+ "Haruta",
+ "Haruta",
+ "Atmos",
+ "Atmos",
+ "Speed Jiru",
+ "Speed Jiru",
+ "Aokiji",
+ "Aokiji",
+ "Boa Hancock",
+ "Boa Hancock",
+ "Gan Fall",
+ "Gan Fall",
+ "Ohm",
+ "Jewelry Bonney",
+ "Jewelry Bonney",
+ "Violet",
+ "Violet",
+ "Yoki",
+ "Yoki",
+ "Brook",
+ "Brook",
+ "Laboon",
+ "Nico Robin",
+ "Nico Robin",
+ "Usopp",
+ "Usopp",
+ "Franky",
+ "Franky",
+ "Baby 5",
+ "Baby 5",
+ null,
+ null,
+ null,
+ "Boa Hancock",
+ "Byrnndi World",
+ "Byrnndi World",
+ "Little Oars Jr.",
+ "Little Oars Jr.",
+ "Bastille",
+ "Yamakaji",
+ "Hina",
+ "Smoker",
+ "Dracule Mihawk",
+ "Kizaru",
+ "Sentomaru",
+ "Sentomaru",
+ "Smoker",
+ "Smoker",
+ "Tashigi",
+ "Tashigi",
+ "Maynard",
+ "Maynard",
+ "Bastille",
+ "Bastille",
+ "Kizaru",
+ "Kizaru",
+ "Koala",
+ "Koala",
+ "Hack",
+ "Hack",
+ "Monkey D. Luffy",
+ "Portgas D. Ace",
+ "Portgas D. Ace",
+ "Marco",
+ "Marco",
+ "Marco",
+ "Marco",
+ "Doma",
+ "Shura",
+ "Squard",
+ "Decalvan Brothers",
+ "Whitey Bay",
+ "Whitebeard",
+ "Whitebeard",
+ "Doflamingo",
+ "Doflamingo",
+ "Señor Pink",
+ "Señor Pink",
+ "Vergo",
+ "Vergo",
+ "Portgas D. Ace",
+ "Portgas D. Ace",
+ "Blackbeard",
+ "Blackbeard",
+ "Laffitte",
+ "Laffitte",
+ "Van Augur",
+ "Van Augur",
+ "Jesus Burgess",
+ "Jesus Burgess",
+ "Shiliew",
+ "Shiliew",
+ "Doc Q",
+ "Doc Q",
+ "John Giant",
+ "Aokiji",
+ "Monkey D. Garp",
+ "Sengoku",
+ "Akainu",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Baby 5",
+ "Baby 5",
+ "Trafalgar Law",
+ "Trafalgar Law",
+ "Buffalo",
+ "Lao G",
+ "Lao G",
+ "Boa Sandersonia",
+ "Boa Sandersonia",
+ "Kalifa",
+ "Kalifa",
+ "Akainu",
+ "Akainu",
+ "Rebecca",
+ "Rebecca",
+ "Buggy",
+ "Buggy",
+ "Galdino",
+ "Galdino",
+ "Sugar",
+ "Sugar",
+ "Bartolomeo",
+ "Bartolomeo",
+ "Kinemon",
+ "Kinemon",
+ "Boa Marigold",
+ "Boa Marigold",
+ "Akainu",
+ "Akainu",
+ "Coby",
+ "Coby",
+ "Monkey D. Garp",
+ "Monkey D. Garp",
+ "Tsuru",
+ "Tsuru",
+ "Momonga",
+ "Momonga",
+ "Onigumo",
+ "Onigumo",
+ "Corazon",
+ "Corazon",
+ "Leo",
+ "Leo",
+ "Wicca",
+ "Gancho",
+ "Mansherry",
+ "Mansherry",
+ "Kabu",
+ "Bian",
+ "Sabo",
+ "Sabo",
+ "Kanjuro",
+ "Kanjuro",
+ "Tony Tony Chopper",
+ "Gedatsu",
+ "Gedatsu",
+ "Dadan",
+ "Porchemy",
+ "Bluejam",
+ "Jimbe",
+ "Heracles'n",
+ "Torino Kingdom Monsters",
+ "Humandrills",
+ "Haredas",
+ "Theives of Tehna Gehna Kingdom",
+ "Tequila Wolf Guard",
+ "Emporio Ivankov",
+ "Silvers Rayleigh",
+ "Silvers Rayleigh",
+ "Silvers Rayleigh",
+ "Pekoms",
+ "Pekoms",
+ "Tamago",
+ "Tamago",
+ "Monkey D. Luffy",
+ "Roronoa Zoro",
+ "Roronoa Zoro",
+ "Franky",
+ "Franky",
+ "Nami",
+ "Nami",
+ "Sanji",
+ "Sanji",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Roronoa Zoro",
+ "Roronoa Zoro",
+ "Magellan",
+ "Magellan",
+ "Dellinger",
+ "Dellinger",
+ "Marguerite",
+ "Marguerite",
+ "Shanks",
+ "Shanks",
+ "Tashigi",
+ "Tashigi",
+ "Kyros",
+ "Kyros",
+ "Rebecca",
+ "Rebecca",
+ "Monkey D. Luffy",
+ "Roronoa Zoro",
+ "Nami",
+ "Buggy",
+ "Buggy",
+ "Sentomaru",
+ "Demalo Black",
+ "Baby 5",
+ "Baby 5",
+ "Tashigi",
+ "Tashigi",
+ "Smoker",
+ "Smoker",
+ "Gladius",
+ "Gladius",
+ "Dalton",
+ "Monkey D. Luffy",
+ "Monkey D. Luffy",
+ "Usopp",
+ "Usopp",
+ "Nico Robin",
+ "Nico Robin",
+ "Brook",
+ "Brook",
+ "Tony Tony Chopper",
+ "Tony Tony Chopper",
+ "Whitebeard",
+ "Sanji",
+ "Sengoku",
+ "Sengoku",
+ "Ronse",
+ "Stainless",
+ "Rob Lucci",
+ "Rob Lucci",
+ "Diamante",
+ "Diamante",
+ "T-Bone",
+ "Gin",
+ "Don Sai",
+ "Don Sai",
+ "Boo",
+ "Jean Ango",
+ "Mansherry",
+ "Mansherry",
];
\ No newline at end of file
diff --git a/common/data/flags.js b/common/data/flags.js
index 7c20427e2..c644d5ab3 100644
--- a/common/data/flags.js
+++ b/common/data/flags.js
@@ -1,726 +1,1217 @@
window.flags = {
- 1: { global: 1 },
- 2: { global: 1, rr: 1 },
- 3: { global: 1, rr: 1 },
- 4: { global: 1, rr: 1 },
- 5: { global: 1, rr: 1 },
- 6: { global: 1, rr: 1 },
- 7: { global: 1, rr: 1 },
- 8: { global: 1, rr: 1 },
- 9: { global: 1, rr: 1 },
- 10: { global: 1, rr: 1 },
- 11: { global: 1, rr: 1 },
- 12: { global: 1, rr: 1 },
- 13: { global: 1, rr: 1 },
- 14: { global: 1, rr: 1 },
- 15: { global: 1, rr: 1 },
- 16: { global: 1, rr: 1 },
- 17: { global: 1, rr: 1 },
- 18: { global: 1, rr: 1 },
- 19: { global: 1, rr: 1 },
- 20: { global: 1, rr: 1 },
- 21: { global: 1, rr: 1 },
- 22: { global: 1, rr: 1 },
- 23: { global: 1, rr: 1 },
- 24: { global: 1, rr: 1 },
- 25: { global: 1, rr: 1 },
- 26: { global: 1, rr: 1 },
- 27: { global: 1 },
- 28: { global: 1 },
- 29: { global: 1, rr: 1 },
- 30: { global: 1, rr: 1 },
- 31: { global: 1 },
- 32: { global: 1, rr: 1 },
- 33: { global: 1 },
- 34: { global: 1, rr: 1 },
- 35: { global: 1 },
- 36: { global: 1 },
- 37: { global: 1 },
- 38: { global: 1, rr: 1 },
- 39: { global: 1, rr: 1 },
- 40: { global: 1 },
- 41: { global: 1 },
- 42: { global: 1 },
- 43: { global: 1 },
- 44: { global: 1, rr: 1 },
- 45: { global: 1, rr: 1 },
- 46: { global: 1, rr: 1 },
- 47: { global: 1 },
- 48: { global: 1 },
- 49: { global: 1 },
- 50: { global: 1 },
- 51: { global: 1 },
- 52: { global: 1 },
- 53: { global: 1 },
- 54: { global: 1, rr: 1 },
- 55: { global: 1 },
- 56: { global: 1, rr: 1 },
- 57: { global: 1, rr: 1 },
- 58: { global: 1, rr: 1 },
- 59: { global: 1 },
- 60: { global: 1 },
- 61: { global: 1, rr: 1 },
- 62: { global: 1, rr: 1 },
- 63: { global: 1, rr: 1 },
- 64: { global: 1, rr: 1 },
- 65: { global: 1, rr: 1 },
- 66: { global: 1, rr: 1 },
- 67: { global: 1, rr: 1 },
- 68: { global: 1, rr: 1 },
- 69: { global: 1, rr: 1 },
- 70: { global: 1, rr: 1 },
- 71: { global: 1, rr: 1 },
- 72: { global: 1, rr: 1 },
- 73: { global: 1, rr: 1 },
- 74: { global: 1, rr: 1, rro: 1 },
- 75: { global: 1, rr: 1, rro: 1 },
- 76: { global: 1, rr: 1, rro: 1 },
- 77: { global: 1, rr: 1, rro: 1 },
- 78: { global: 1 },
- 79: { global: 1 },
- 80: { global: 1 },
- 81: { global: 1 },
- 82: { global: 1 },
- 83: { global: 1 },
- 84: { global: 1 },
- 85: { global: 1 },
- 86: { global: 1 },
- 87: { global: 1 },
- 88: { global: 1 },
- 89: { global: 1 },
- 90: { global: 1 },
- 91: { global: 1 },
- 92: { global: 1 },
- 93: { global: 1 },
- 94: { global: 1 },
- 95: { global: 1 },
- 96: { global: 1 },
- 97: { global: 1 },
- 98: { global: 1 },
- 99: { global: 1 },
- 100: { global: 1 },
- 101: { global: 1 },
- 102: { global: 1 },
- 103: { global: 1 },
- 104: { global: 1 },
- 105: { global: 1 },
- 106: { global: 1 },
- 107: { global: 1 },
- 108: { global: 1 },
- 109: { global: 1 },
- 110: { global: 1 },
- 111: { global: 1 },
- 112: { global: 1 },
- 113: { global: 1 },
- 114: { global: 1 },
- 115: { global: 1 },
- 116: { global: 1 },
- 117: { global: 1 },
- 118: { global: 1 },
- 119: { global: 1 },
- 120: { global: 1 },
- 121: { global: 1 },
- 122: { global: 1 },
- 123: { global: 1 },
- 124: { global: 1 },
- 125: { global: 1 },
- 126: { global: 1 },
- 127: { global: 1 },
- 128: { global: 1 },
- 129: { global: 1 },
- 130: { global: 1 },
- 131: { global: 1 },
- 132: { global: 1 },
- 133: { global: 1 },
- 134: { global: 1 },
- 135: { global: 1 },
- 136: { global: 1 },
- 137: { global: 1 },
- 138: { global: 1 },
- 139: { global: 1 },
- 140: { global: 1 },
- 141: { global: 1 },
- 142: { global: 1 },
- 143: { global: 1 },
- 144: { global: 1 },
- 145: { global: 1 },
- 146: { global: 1 },
- 147: { global: 1 },
- 148: { global: 1 },
- 149: { global: 1 },
- 150: { global: 1 },
- 151: { global: 1 },
- 152: { global: 1 },
- 153: { global: 1 },
- 154: { global: 1 },
- 155: { global: 1 },
- 156: { global: 1 },
- 157: { global: 1 },
- 158: { global: 1 },
- 159: { global: 1 },
- 160: { global: 1 },
- 161: { global: 1 },
- 162: { global: 1 },
- 163: { global: 1 },
- 164: { global: 1 },
- 165: { global: 1 },
- 166: { global: 1 },
- 167: { global: 1 },
- 168: { global: 1 },
- 169: { global: 1 },
- 170: { global: 1 },
- 171: { global: 1 },
- 172: { global: 1 },
- 173: { global: 1 },
- 174: { global: 1 },
- 175: { global: 1 },
- 176: { global: 1 },
- 177: { global: 1 },
- 178: { global: 1 },
- 179: { global: 1 },
- 180: { global: 1 },
- 181: { global: 1 },
- 182: { global: 1 },
- 183: { global: 1 },
- 184: { global: 1 },
- 185: { global: 1 },
- 186: { global: 1 },
- 187: { global: 1 },
- 188: { global: 1 },
- 189: { global: 1 },
- 190: { global: 1 },
- 191: { global: 1 },
- 192: { global: 1 },
- 193: { global: 1 },
- 194: { global: 1 },
- 195: { global: 1 },
- 196: { global: 1 },
- 197: { global: 1 },
- 198: { global: 1 },
- 199: { global: 1, rr: 1 },
- 200: { global: 1, rr: 1 },
- 201: { global: 1, rr: 1 },
- 202: { global: 1, rr: 1 },
- 203: { global: 1, rr: 1 },
- 204: { global: 1, rr: 1 },
- 205: { global: 1, rr: 1 },
- 206: { global: 1, rr: 1 },
- 207: { global: 1, rr: 1 },
- 208: { global: 1, rr: 1 },
- 209: { global: 1, rr: 1, rro: 1 },
- 210: { global: 1, rr: 1, rro: 1 },
- 211: { global: 1 },
- 212: { global: 1 },
- 213: { global: 1 },
- 214: { global: 1 },
- 215: { global: 1 },
- 216: { global: 1, rr: 1, rro: 1 },
- 217: { global: 1, rr: 1, rro: 1 },
- 218: { global: 1, rr: 1, rro: 1 },
- 219: { global: 1, rr: 1, rro: 1 },
- 220: { global: 1, rr: 1, rro: 1 },
- 221: { global: 1, rr: 1, rro: 1 },
- 222: { global: 1, rr: 1 },
- 223: { global: 1, rr: 1 },
- 224: { global: 1, rr: 1, rro: 1 },
- 225: { global: 1, rr: 1, rro: 1 },
- 226: { global: 1 },
- 227: { global: 1 },
- 228: { global: 1 },
- 229: { global: 1 },
- 230: { global: 1 },
- 231: { global: 1 },
- 232: { global: 1 },
- 233: { global: 1 },
- 234: { global: 1 },
- 235: { global: 1 },
- 236: { global: 1 },
- 237: { global: 1 },
- 238: { global: 1 },
- 239: { global: 1 },
- 240: { global: 1 },
- 241: { global: 1 },
- 242: { global: 1 },
- 243: { global: 1 },
- 244: { global: 1 },
- 245: { global: 1 },
- 246: { global: 1 },
- 247: { global: 1, special: 1 },
- 248: { global: 1 },
- 249: { global: 1 },
- 250: { global: 1, rr: 1, rro: 1 },
- 251: { global: 1, rr: 1, rro: 1 },
- 252: { global: 1, rr: 1, rro: 1 },
- 253: { global: 1, rr: 1, rro: 1 },
- 254: { global: 1, rr: 1, rro: 1 },
- 255: { global: 1, rr: 1, rro: 1 },
- 256: { global: 1, rr: 1, rro: 1 },
- 257: { global: 1, rr: 1, rro: 1 },
- 258: { global: 1, rr: 1, rro: 1 },
- 259: { global: 1, rr: 1, rro: 1 },
- 260: { global: 1, rr: 1, rro: 1 },
- 261: { global: 1, rr: 1, rro: 1 },
- 262: { global: 1 },
- 263: { global: 1 },
- 264: { global: 1 },
- 265: { global: 1 },
- 266: { global: 1 },
- 267: { global: 1 },
- 268: { global: 1 },
- 269: { global: 1 },
- 270: { global: 1 },
- 271: { global: 1 },
- 272: { global: 1 },
- 273: { global: 1 },
- 274: { global: 1 },
- 275: { global: 1 },
- 276: { global: 1 },
- 277: { global: 1 },
- 278: { global: 1 },
- 279: { global: 1 },
- 280: { global: 1 },
- 281: { global: 1 },
- 282: { global: 1 },
- 283: { global: 1 },
- 284: { global: 1 },
- 285: { global: 1 },
- 286: { global: 1 },
- 287: { global: 1 },
- 288: { global: 1 },
- 289: { global: 1 },
- 290: { global: 1 },
- 291: { global: 1 },
- 292: { global: 1 },
- 293: { global: 1 },
- 294: { global: 1 },
- 295: { global: 1 },
- 296: { global: 1 },
- 297: { global: 1 },
- 298: { global: 1 },
- 299: { global: 1 },
- 300: { global: 1 },
- 301: { global: 1 },
- 302: { global: 1 },
- 303: { global: 1 },
- 304: { global: 1 },
- 305: { global: 1 },
- 306: { global: 1 },
- 307: { global: 1, rr: 1, rro: 1 },
- 308: { global: 1, rr: 1, rro: 1 },
- 309: { global: 1, rr: 1, rro: 1 },
- 310: { global: 1, rr: 1, rro: 1 },
- 311: { global: 1, rr: 1, rro: 1 },
- 312: { global: 1, rr: 1, rro: 1 },
- 313: { global: 1, rr: 1, rro: 1 },
- 314: { global: 1, rr: 1, rro: 1 },
- 315: { global: 1, rr: 1, rro: 1 },
- 316: { global: 1, rr: 1, rro: 1 },
- 317: { global: 1 },
- 318: { global: 1 },
- 319: { global: 1 },
- 320: { global: 1 },
- 321: { global: 1 },
- 322: { global: 1 },
- 323: { global: 1 },
- 324: { global: 1 },
- 325: { global: 1 },
- 326: { global: 1 },
- 327: { global: 1 },
- 328: { global: 1 },
- 329: { global: 1 },
- 330: { global: 1 },
- 331: { global: 1 },
- 332: { global: 1 },
- 333: { global: 1 },
- 334: { global: 1 },
- 335: { global: 1 },
- 336: { global: 1 },
- 337: { global: 1 },
- 338: { global: 1 },
- 339: { global: 1 },
- 340: { global: 1 },
- 341: { global: 1 },
- 342: { global: 1 },
- 343: { global: 1 },
- 344: { global: 1 },
- 345: { global: 1 },
- 346: { global: 1 },
- 347: { global: 1 },
- 348: { global: 1 },
- 349: { global: 1 },
- 350: { global: 1 },
- 351: { global: 1 },
- 356: { global: 1, rr: 1, rro: 1 },
- 357: { global: 1, rr: 1, rro: 1 },
- 358: { global: 1, rr: 1, rro: 1 },
- 359: { global: 1, rr: 1, rro: 1 },
- 360: { global: 1, rr: 1, rro: 1 },
- 361: { global: 1, rr: 1, rro: 1 },
- 362: { global: 1, rr: 1, rro: 1 },
- 363: { global: 1, rr: 1, rro: 1 },
- 364: { global: 1, rr: 1, rro: 1 },
- 365: { global: 1, rr: 1, rro: 1 },
- 366: { global: 1, rr: 1, rro: 1 },
- 367: { global: 1, rr: 1, rro: 1 },
- 368: { global: 1 },
- 369: { global: 1 },
- 370: { global: 1 },
- 371: { global: 1 },
- 372: { global: 1 },
- 373: { global: 1 },
- 374: { global: 1 },
- 375: { global: 1 },
- 376: { global: 1 },
- 377: { global: 1 },
- 378: { global: 1 },
- 379: { global: 1 },
- 380: { global: 1 },
- 381: { global: 1 },
- 382: { global: 1 },
- 383: { global: 1 },
- 384: { global: 1 },
- 385: { global: 1 },
- 386: { global: 1 },
- 387: { global: 1 },
- 388: { global: 1 },
- 389: { global: 1 },
- 390: { global: 1 },
- 391: { global: 1 },
- 392: { global: 1 },
- 393: { global: 1 },
- 394: { global: 1 },
- 395: { global: 1 },
- 396: { global: 1 },
- 397: { global: 1 },
- 398: { global: 1 },
- 399: { global: 1 },
- 400: { global: 1 },
- 401: { global: 1 },
- 402: { global: 1 },
- 403: { promo: 1 },
- 404: { global: 1 },
- 405: { global: 1 },
- 406: { global: 1 },
- 407: { global: 1 },
- 408: { global: 1 },
- 409: { global: 1, rr: 1, rro: 1 },
- 410: { global: 1, rr: 1, rro: 1 },
- 411: { global: 1, rr: 1, rro: 1 },
- 412: { global: 1, rr: 1, rro: 1 },
- 413: { global: 1, rr: 1, rro: 1 },
- 414: { global: 1, rr: 1, rro: 1 },
- 415: { global: 1, rr: 1, rro: 1 },
- 416: { global: 1, rr: 1, rro: 1 },
- 417: { global: 1 },
- 418: { global: 1 },
- 419: { global: 1, promo: 1, special: 1 },
- 420: { global: 1 },
- 421: { global: 1 },
- 422: { global: 1 },
- 423: { global: 1 },
- 424: { global: 1 },
- 425: { global: 1 },
- 426: { global: 1 },
- 427: { global: 1 },
- 428: { global: 1 },
- 429: { global: 1 },
- 430: { global: 1 },
- 431: { global: 1 },
- 432: { global: 1 },
- 433: { global: 1 },
- 434: { global: 1 },
- 435: { global: 1 },
- 436: { global: 1 },
- 437: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 438: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 439: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 440: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 441: { global: 1 },
- 442: { global: 1 },
- 443: { global: 1 },
- 444: { global: 1 },
- 445: { global: 1 },
- 446: { global: 1 },
- 447: { global: 1 },
- 448: { global: 1, rr: 1, rro: 1 },
- 449: { global: 1, rr: 1, rro: 1 },
- 450: { global: 1, rr: 1, rro: 1 },
- 451: { global: 1, rr: 1, rro: 1 },
- 452: { global: 1, rr: 1, rro: 1 },
- 453: { global: 1, rr: 1, rro: 1 },
- 454: { global: 1, rr: 1, rro: 1 },
- 455: { global: 1, rr: 1, rro: 1 },
- 456: { global: 1, rr: 1, rro: 1 },
- 457: { global: 1, rr: 1, rro: 1 },
- 458: { global: 1, rr: 1, rro: 1 },
- 459: { global: 1, rr: 1, rro: 1 },
- 463: { global: 1 },
- 464: { global: 1 },
- 465: { global: 1 },
- 466: { global: 1 },
- 467: { global: 1 },
- 468: { global: 1 },
- 469: { global: 1 },
- 470: { global: 1 },
- 471: { global: 1 },
- 472: { global: 1 },
- 473: { global: 1 },
- 474: { global: 1 },
- 475: { global: 1 },
- 476: { global: 1 },
- 477: { global: 1 },
- 478: { global: 1 },
- 479: { global: 1 },
- 480: { global: 1 },
- 481: { global: 1 },
- 482: { global: 1 },
- 483: { global: 1 },
- 484: { global: 1 },
- 485: { global: 1 },
- 486: { global: 1 },
- 487: { global: 1 },
- 488: { global: 1 },
- 489: { global: 1 },
- 490: { global: 1 },
- 491: { global: 1 },
- 492: { global: 1 },
- 493: { global: 1 },
- 494: { global: 1 },
- 495: { global: 1 },
- 496: { global: 1 },
- 497: { global: 1, rr: 1, rro: 1 },
- 498: { global: 1, rr: 1, rro: 1 },
- 499: { global: 1, rr: 1, rro: 1 },
- 500: { global: 1, rr: 1, rro: 1 },
- 501: { global: 1, rr: 1, rro: 1 },
- 502: { global: 1, rr: 1, rro: 1 },
- 503: { global: 1, rr: 1, rro: 1 },
- 504: { global: 1, rr: 1, rro: 1 },
- 505: { global: 1, rr: 1, rro: 1 },
- 506: { global: 1, rr: 1, rro: 1 },
- 507: { global: 1, rr: 1, rro: 1 },
- 508: { global: 1, rr: 1, rro: 1 },
- 509: { global: 1 },
- 510: { global: 1 },
- 511: { global: 1 },
- 512: { global: 1, rr: 1, rro: 1, lrr: 1, promo: 1 },
- 513: { global: 1, rr: 1, rro: 1, lrr: 1, promo: 1 },
- 514: { rr: 1, rro: 1, lrr: 1 },
- 519: { rr: 1, rro: 1 },
- 520: { rr: 1, rro: 1 },
- 521: { rr: 1, rro: 1 },
- 522: { rr: 1, rro: 1 },
- 523: { rr: 1, rro: 1 },
- 524: { rr: 1, rro: 1 },
- 525: { rr: 1, rro: 1 },
- 526: { rr: 1, rro: 1 },
- 527: { rr: 1, rro: 1 },
- 528: { rr: 1, rro: 1 },
- 529: { global: 1, rr: 1, rro: 1 },
- 530: { global: 1, rr: 1, rro: 1 },
- 531: { promo: 1, global: 1 },
- 532: { promo: 1, global: 1 },
- 533: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 534: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 535: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 536: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 541: { global: 1 },
- 542: { global: 1 },
- 543: { global: 1 },
- 544: { global: 1 },
- 545: { global: 1 },
- 546: { global: 1 },
- 547: { global: 1, rr: 1, rro: 1, lrr: 1 },
- 548: { global: 1, rr: 1, rro: 1, lrr: 1 },
- 553: { rr: 1, rro: 1 },
- 554: { rr: 1, rro: 1 },
- 555: { rr: 1, rro: 1 },
- 556: { rr: 1, rro: 1 },
- 557: { rr: 1, rro: 1 },
- 558: { rr: 1, rro: 1 },
- 559: { rr: 1, rro: 1 },
- 560: { rr: 1, rro: 1 },
- 561: { rr: 1, rro: 1, global: 1 },
- 562: { rr: 1, rro: 1, global: 1 },
- 563: { global: 1 },
- 564: { global: 1 },
- 565: { global: 1 },
- 566: { global: 1 },
- 567: { global: 1 },
- 568: { global: 1 },
- 569: { global: 1 },
- 570: { global: 1 },
- 571: { global: 1 },
- 572: { global: 1 },
- 573: { global: 1 },
- 576: { special: 1 },
- 577: { rr: 1, rro: 1, global: 1 },
- 578: { rr: 1, rro: 1, global: 1 },
- 579: { global: 1, rr: 1, rro: 1, lrr: 1 },
- 580: { global: 1, rr: 1, rro: 1, lrr: 1 },
- 581: { global: 1 },
- 582: { global: 1 },
- 583: { global: 1 },
- 584: { global: 1 },
- 585: { global: 1, rr: 1, rro: 1 },
- 586: { global: 1, rr: 1, rro: 1 },
- 587: { global: 1, rr: 1, rro: 1 },
- 588: { global: 1, rr: 1, rro: 1 },
- 589: { global: 1, rr: 1, rro: 1 },
- 590: { global: 1, rr: 1, rro: 1 },
- 591: { global: 1 },
- 592: { global: 1 },
- 593: { global: 1 },
- 594: { global: 1 },
- 595: { global: 1 },
- 596: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 597: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 602: { global: 1 },
- 603: { global: 1 },
- 604: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 605: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 610: { global: 1 },
- 611: { global: 1 },
- 612: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 613: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 614: { global: 1 },
- 615: { global: 1 },
- 616: { global: 1 },
- 617: { global: 1 },
- 618: { global: 1 },
- 619: { global: 1 },
- 620: { global: 1 },
- 621: { global: 1 },
- 622: { global: 1 },
- 623: { global: 1 },
- 624: { global: 1 },
- 625: { global: 1 },
- 626: { global: 1 },
- 627: { global: 1 },
- 628: { global: 1 },
- 629: { global: 1 },
- 630: { global: 1 },
- 631: { global: 1 },
- 632: { global: 1 },
- 633: { global: 1 },
- 638: { rr: 1, rro: 1, global: 1 },
- 639: { rr: 1, rro: 1, global: 1 },
- 640: { rr: 1, rro: 1, global: 1 },
- 641: { rr: 1, rro: 1, global: 1 },
- 642: { rr: 1, rro: 1, global: 1 },
- 643: { rr: 1, rro: 1, global: 1 },
- 644: { rr: 1, rro: 1, global: 1 },
- 645: { rr: 1, rro: 1, global: 1 },
- 646: { rr: 1, rro: 1, global: 1 },
- 647: { rr: 1, rro: 1, global: 1 },
- 648: { rr: 1, rro: 1, global: 1 },
- 649: { rr: 1, rro: 1, global: 1 },
- 650: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 651: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 660: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 661: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 668: { rr: 1, rro: 1 },
- 669: { rr: 1, rro: 1 },
- 670: { rr: 1, rro: 1 },
- 671: { rr: 1, rro: 1 },
- 672: { rr: 1, rro: 1 },
- 673: { rr: 1, rro: 1 },
- 674: { rr: 1, rro: 1 },
- 675: { rr: 1, rro: 1 },
- 676: { rr: 1, rro: 1 },
- 677: { rr: 1, rro: 1 },
- 678: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 679: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 708: { special: 1 },
- 709: { special: 1 },
- 710: { global: 1, rr: 1, rro: 1, lrr: 1 },
- 711: { global: 1, rr: 1, rro: 1, lrr: 1 },
- 717: { rr: 1, rro: 1, global: 1 },
- 718: { rr: 1, rro: 1, global: 1 },
- 719: { rr: 1, rro: 1 },
- 720: { rr: 1, rro: 1 },
- 725: { global: 1, rr: 1, rro: 1, lrr: 1 },
- 726: { global: 1, rr: 1, rro: 1, lrr: 1 },
- 727: { special: 1 },
- 744: { rr: 1, rro: 1, lrr: 1 },
- 745: { rr: 1, rro: 1, lrr: 1 },
- 746: { promo: 1 },
- 747: { rr: 1, rro: 1 },
- 748: { rr: 1, rro: 1 },
- 749: { rr: 1, rro: 1 },
- 750: { rr: 1, rro: 1 },
- 751: { rr: 1, rro: 1 },
- 752: { rr: 1, rro: 1 },
- 753: { rr: 1, rro: 1 },
- 754: { rr: 1, rro: 1 },
- 755: { rr: 1, rro: 1 },
- 756: { rr: 1, rro: 1 },
- 757: { rr: 1, rro: 1 },
- 758: { rr: 1, rro: 1 },
- 759: { rr: 1, rro: 1 },
- 760: { rr: 1, rro: 1 },
- 761: { global: 1 },
- 762: { global: 1 },
- 763: { global: 1 },
- 764: { global: 1 },
- 765: { global: 1 },
- 766: { global: 1 },
- 767: { global: 1 },
- 768: { global: 1 },
- 769: { global: 1 },
- 782: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 783: { rr: 1, rro: 1, lrr: 1, global: 1 },
- 784: { rr: 1, rro: 1 },
- 785: { rr: 1, rro: 1 },
- 786: { rr: 1, rro: 1 },
- 787: { rr: 1, rro: 1 },
- 788: { rr: 1, rro: 1 },
- 789: { rr: 1, rro: 1 },
- 790: { rr: 1, rro: 1 },
- 791: { rr: 1, rro: 1 },
- 792: { rr: 1, rro: 1 },
- 793: { rr: 1, rro: 1 },
- 801: { rr: 1, rro: 1, lrr: 1 },
- 802: { rr: 1, rro: 1, lrr: 1 },
- 837: { rr: 1, rro: 1 },
- 838: { rr: 1, rro: 1 },
- 839: { rr: 1, rro: 1 },
- 840: { rr: 1, rro: 1 },
- 841: { rr: 1, rro: 1 },
- 842: { rr: 1, rro: 1 },
- 843: { rr: 1, rro: 1 },
- 844: { rr: 1, rro: 1 },
- 845: { rr: 1, rro: 1 },
- 846: { rr: 1, rro: 1 },
- 855: { rr: 1, rro: 1, global: 1 },
- 856: { rr: 1, rro: 1, global: 1 },
- 857: { rr: 1, rro: 1, global: 1 },
- 858: { rr: 1, rro: 1, global: 1 },
- 863: { special: 1 },
- 869: { rr: 1, rro: 1 },
- 870: { rr: 1, rro: 1 },
- 871: { rr: 1, rro: 1 },
- 872: { rr: 1, rro: 1 },
- 873: { rr: 1, rro: 1 },
- 874: { rr: 1, rro: 1 },
- 875: { rr: 1, rro: 1 },
- 876: { rr: 1, rro: 1 },
- 877: { rr: 1, rro: 1 },
- 878: { rr: 1, rro: 1 },
- 879: { rr: 1, rro: 1 },
- 880: { rr: 1, rro: 1 },
- 895: { special: 1 },
- 896: { special: 1 },
- 905: { rr: 1, rro: 1 },
- 906: { rr: 1, rro: 1 },
- 907: { rr: 1, rro: 1 },
- 908: { rr: 1, rro: 1 },
- 909: { rr: 1, rro: 1 },
- 910: { rr: 1, rro: 1 },
- 911: { rr: 1, rro: 1 },
- 912: { rr: 1, rro: 1 },
- 913: { rr: 1, rro: 1 },
- 914: { rr: 1, rro: 1 },
- 915: { rr: 1, rro: 1, lrr: 1 },
- 916: { rr: 1, rro: 1, lrr: 1 }
+ 1: { global: 1 },
+ 2: { global: 1, rr: 1 },
+ 3: { global: 1, rr: 1 },
+ 4: { global: 1, rr: 1 },
+ 5: { global: 1, rr: 1 },
+ 6: { global: 1, rr: 1 },
+ 7: { global: 1, rr: 1 },
+ 8: { global: 1, rr: 1 },
+ 9: { global: 1, rr: 1 },
+ 10: { global: 1, rr: 1 },
+ 11: { global: 1, rr: 1 },
+ 12: { global: 1, rr: 1 },
+ 13: { global: 1, rr: 1 },
+ 14: { global: 1, rr: 1 },
+ 15: { global: 1, rr: 1 },
+ 16: { global: 1, rr: 1 },
+ 17: { global: 1, rr: 1 },
+ 18: { global: 1, rr: 1 },
+ 19: { global: 1, rr: 1 },
+ 20: { global: 1, rr: 1 },
+ 21: { global: 1, rr: 1 },
+ 22: { global: 1, rr: 1 },
+ 23: { global: 1, rr: 1 },
+ 24: { global: 1, rr: 1 },
+ 25: { global: 1, rr: 1 },
+ 26: { global: 1, rr: 1 },
+ 27: { global: 1 },
+ 28: { global: 1 },
+ 29: { global: 1, rr: 1 },
+ 30: { global: 1, rr: 1 },
+ 31: { global: 1 },
+ 32: { global: 1, rr: 1 },
+ 33: { global: 1 },
+ 34: { global: 1, rr: 1 },
+ 35: { global: 1 },
+ 36: { global: 1 },
+ 37: { global: 1 },
+ 38: { global: 1, rr: 1 },
+ 39: { global: 1, rr: 1 },
+ 40: { global: 1 },
+ 41: { global: 1 },
+ 42: { global: 1 },
+ 43: { global: 1 },
+ 44: { global: 1, rr: 1 },
+ 45: { global: 1, rr: 1 },
+ 46: { global: 1, rr: 1 },
+ 47: { global: 1 },
+ 48: { global: 1 },
+ 49: { global: 1 },
+ 50: { global: 1 },
+ 51: { global: 1 },
+ 52: { global: 1 },
+ 53: { global: 1 },
+ 54: { global: 1, rr: 1 },
+ 55: { global: 1 },
+ 56: { global: 1, rr: 1 },
+ 57: { global: 1, rr: 1 },
+ 58: { global: 1, rr: 1 },
+ 59: { global: 1 },
+ 60: { global: 1 },
+ 61: { global: 1, rr: 1 },
+ 62: { global: 1, rr: 1 },
+ 63: { global: 1, rr: 1 },
+ 64: { global: 1, rr: 1 },
+ 65: { global: 1, rr: 1 },
+ 66: { global: 1, rr: 1 },
+ 67: { global: 1, rr: 1 },
+ 68: { global: 1, rr: 1 },
+ 69: { global: 1, rr: 1 },
+ 70: { global: 1, rr: 1 },
+ 71: { global: 1, rr: 1 },
+ 72: { global: 1, rr: 1 },
+ 73: { global: 1, rr: 1 },
+ 74: { global: 1, rr: 1, rro: 1 },
+ 75: { global: 1, rr: 1, rro: 1 },
+ 76: { global: 1, rr: 1, rro: 1 },
+ 77: { global: 1, rr: 1, rro: 1 },
+ 78: { global: 1 },
+ 79: { global: 1 },
+ 80: { global: 1 },
+ 81: { global: 1 },
+ 82: { global: 1 },
+ 83: { global: 1 },
+ 84: { global: 1 },
+ 85: { global: 1 },
+ 86: { global: 1 },
+ 87: { global: 1 },
+ 88: { global: 1 },
+ 89: { global: 1 },
+ 90: { global: 1 },
+ 91: { global: 1 },
+ 92: { global: 1 },
+ 93: { global: 1 },
+ 94: { global: 1 },
+ 95: { global: 1 },
+ 96: { global: 1 },
+ 97: { global: 1 },
+ 98: { global: 1 },
+ 99: { global: 1 },
+ 100: { global: 1 },
+ 101: { global: 1 },
+ 102: { global: 1 },
+ 103: { global: 1 },
+ 104: { global: 1 },
+ 105: { global: 1 },
+ 106: { global: 1 },
+ 107: { global: 1 },
+ 108: { global: 1 },
+ 109: { global: 1 },
+ 110: { global: 1 },
+ 111: { global: 1 },
+ 112: { global: 1 },
+ 113: { global: 1 },
+ 114: { global: 1 },
+ 115: { global: 1 },
+ 116: { global: 1 },
+ 117: { global: 1 },
+ 118: { global: 1 },
+ 119: { global: 1 },
+ 120: { global: 1 },
+ 121: { global: 1 },
+ 122: { global: 1 },
+ 123: { global: 1 },
+ 124: { global: 1 },
+ 125: { global: 1 },
+ 126: { global: 1 },
+ 127: { global: 1 },
+ 128: { global: 1 },
+ 129: { global: 1 },
+ 130: { global: 1 },
+ 131: { global: 1 },
+ 132: { global: 1 },
+ 133: { global: 1 },
+ 134: { global: 1 },
+ 135: { global: 1 },
+ 136: { global: 1 },
+ 137: { global: 1 },
+ 138: { global: 1 },
+ 139: { global: 1 },
+ 140: { global: 1 },
+ 141: { global: 1 },
+ 142: { global: 1 },
+ 143: { global: 1 },
+ 144: { global: 1 },
+ 145: { global: 1 },
+ 146: { global: 1 },
+ 147: { global: 1 },
+ 148: { global: 1 },
+ 149: { global: 1 },
+ 150: { global: 1 },
+ 151: { global: 1 },
+ 152: { global: 1 },
+ 153: { global: 1 },
+ 154: { global: 1 },
+ 155: { global: 1 },
+ 156: { global: 1 },
+ 157: { global: 1 },
+ 158: { global: 1 },
+ 159: { global: 1 },
+ 160: { global: 1 },
+ 161: { global: 1 },
+ 162: { global: 1 },
+ 163: { global: 1 },
+ 164: { global: 1 },
+ 165: { global: 1 },
+ 166: { global: 1 },
+ 167: { global: 1 },
+ 168: { global: 1 },
+ 169: { global: 1 },
+ 170: { global: 1 },
+ 171: { global: 1 },
+ 172: { global: 1 },
+ 173: { global: 1 },
+ 174: { global: 1 },
+ 175: { global: 1 },
+ 176: { global: 1 },
+ 177: { global: 1 },
+ 178: { global: 1 },
+ 179: { global: 1 },
+ 180: { global: 1 },
+ 181: { global: 1 },
+ 182: { global: 1 },
+ 183: { global: 1 },
+ 184: { global: 1 },
+ 185: { global: 1 },
+ 186: { global: 1 },
+ 187: { global: 1 },
+ 188: { global: 1 },
+ 189: { global: 1 },
+ 190: { global: 1 },
+ 191: { global: 1 },
+ 192: { global: 1 },
+ 193: { global: 1 },
+ 194: { global: 1 },
+ 195: { global: 1 },
+ 196: { global: 1 },
+ 197: { global: 1 },
+ 198: { global: 1 },
+ 199: { global: 1, rr: 1 },
+ 200: { global: 1, rr: 1 },
+ 201: { global: 1, rr: 1 },
+ 202: { global: 1, rr: 1 },
+ 203: { global: 1, rr: 1 },
+ 204: { global: 1, rr: 1 },
+ 205: { global: 1, rr: 1 },
+ 206: { global: 1, rr: 1 },
+ 207: { global: 1, rr: 1 },
+ 208: { global: 1, rr: 1 },
+ 209: { global: 1, rr: 1, rro: 1 },
+ 210: { global: 1, rr: 1, rro: 1 },
+ 211: { global: 1 },
+ 212: { global: 1 },
+ 213: { global: 1 },
+ 214: { global: 1 },
+ 215: { global: 1 },
+ 216: { global: 1, rr: 1, rro: 1 },
+ 217: { global: 1, rr: 1, rro: 1 },
+ 218: { global: 1, rr: 1, rro: 1 },
+ 219: { global: 1, rr: 1, rro: 1 },
+ 220: { global: 1, rr: 1, rro: 1 },
+ 221: { global: 1, rr: 1, rro: 1 },
+ 222: { global: 1, rr: 1 },
+ 223: { global: 1, rr: 1 },
+ 224: { global: 1, rr: 1, rro: 1 },
+ 225: { global: 1, rr: 1, rro: 1 },
+ 226: { global: 1 },
+ 227: { global: 1 },
+ 228: { global: 1 },
+ 229: { global: 1 },
+ 230: { global: 1 },
+ 231: { global: 1 },
+ 232: { global: 1 },
+ 233: { global: 1 },
+ 234: { global: 1 },
+ 235: { global: 1 },
+ 236: { global: 1 },
+ 237: { global: 1 },
+ 238: { global: 1 },
+ 239: { global: 1 },
+ 240: { global: 1 },
+ 241: { global: 1 },
+ 242: { global: 1 },
+ 243: { global: 1 },
+ 244: { global: 1 },
+ 245: { global: 1 },
+ 246: { global: 1 },
+ 247: { global: 1, special: 1, shop: 1 },
+ 248: { global: 1 },
+ 249: { global: 1 },
+ 250: { global: 1, rr: 1, rro: 1 },
+ 251: { global: 1, rr: 1, rro: 1 },
+ 252: { global: 1, rr: 1, rro: 1 },
+ 253: { global: 1, rr: 1, rro: 1 },
+ 254: { global: 1, rr: 1, rro: 1 },
+ 255: { global: 1, rr: 1, rro: 1 },
+ 256: { global: 1, rr: 1, rro: 1 },
+ 257: { global: 1, rr: 1, rro: 1 },
+ 258: { global: 1, rr: 1, rro: 1 },
+ 259: { global: 1, rr: 1, rro: 1 },
+ 260: { global: 1, rr: 1, rro: 1 },
+ 261: { global: 1, rr: 1, rro: 1 },
+ 262: { global: 1 },
+ 263: { global: 1 },
+ 264: { global: 1 },
+ 265: { global: 1 },
+ 266: { global: 1 },
+ 267: { global: 1 },
+ 268: { global: 1 },
+ 269: { global: 1 },
+ 270: { global: 1 },
+ 271: { global: 1 },
+ 272: { global: 1 },
+ 273: { global: 1 },
+ 274: { global: 1 },
+ 275: { global: 1 },
+ 276: { global: 1 },
+ 277: { global: 1 },
+ 278: { global: 1 },
+ 279: { global: 1 },
+ 280: { global: 1 },
+ 281: { global: 1 },
+ 282: { global: 1 },
+ 283: { global: 1 },
+ 284: { global: 1 },
+ 285: { global: 1 },
+ 286: { global: 1 },
+ 287: { global: 1 },
+ 288: { global: 1 },
+ 289: { global: 1 },
+ 290: { global: 1 },
+ 291: { global: 1 },
+ 292: { global: 1 },
+ 293: { global: 1 },
+ 294: { global: 1 },
+ 295: { global: 1 },
+ 296: { global: 1 },
+ 297: { global: 1 },
+ 298: { global: 1 },
+ 299: { global: 1 },
+ 300: { global: 1 },
+ 301: { global: 1 },
+ 302: { global: 1 },
+ 303: { global: 1 },
+ 304: { global: 1 },
+ 305: { global: 1 },
+ 306: { global: 1 },
+ 307: { global: 1, rr: 1, rro: 1 },
+ 308: { global: 1, rr: 1, rro: 1 },
+ 309: { global: 1, rr: 1, rro: 1 },
+ 310: { global: 1, rr: 1, rro: 1 },
+ 311: { global: 1, rr: 1, rro: 1 },
+ 312: { global: 1, rr: 1, rro: 1 },
+ 313: { global: 1, rr: 1, rro: 1 },
+ 314: { global: 1, rr: 1, rro: 1 },
+ 315: { global: 1, rr: 1, rro: 1 },
+ 316: { global: 1, rr: 1, rro: 1 },
+ 317: { global: 1 },
+ 318: { global: 1 },
+ 319: { global: 1 },
+ 320: { global: 1 },
+ 321: { global: 1 },
+ 322: { global: 1 },
+ 323: { global: 1 },
+ 324: { global: 1 },
+ 325: { global: 1 },
+ 326: { global: 1 },
+ 327: { global: 1 },
+ 328: { global: 1 },
+ 329: { global: 1 },
+ 330: { global: 1 },
+ 331: { global: 1 },
+ 332: { global: 1 },
+ 333: { global: 1 },
+ 334: { global: 1 },
+ 335: { global: 1 },
+ 336: { global: 1 },
+ 337: { global: 1 },
+ 338: { global: 1 },
+ 339: { global: 1 },
+ 340: { global: 1 },
+ 341: { global: 1 },
+ 342: { global: 1 },
+ 343: { global: 1 },
+ 344: { global: 1 },
+ 345: { global: 1 },
+ 346: { global: 1 },
+ 347: { global: 1 },
+ 348: { global: 1 },
+ 349: { global: 1 },
+ 350: { global: 1 },
+ 351: { global: 1 },
+ 352: { global: 1 },
+ 353: { global: 1 },
+ 354: { global: 1 },
+ 355: { global: 1 },
+ 356: { global: 1, rr: 1, rro: 1 },
+ 357: { global: 1, rr: 1, rro: 1 },
+ 358: { global: 1, rr: 1, rro: 1 },
+ 359: { global: 1, rr: 1, rro: 1 },
+ 360: { global: 1, rr: 1, rro: 1 },
+ 361: { global: 1, rr: 1, rro: 1 },
+ 362: { global: 1, rr: 1, rro: 1 },
+ 363: { global: 1, rr: 1, rro: 1 },
+ 364: { global: 1, rr: 1, rro: 1 },
+ 365: { global: 1, rr: 1, rro: 1 },
+ 366: { global: 1, rr: 1, rro: 1 },
+ 367: { global: 1, rr: 1, rro: 1 },
+ 368: { global: 1 },
+ 369: { global: 1 },
+ 370: { global: 1 },
+ 371: { global: 1 },
+ 372: { global: 1 },
+ 373: { global: 1 },
+ 374: { global: 1 },
+ 375: { global: 1 },
+ 376: { global: 1 },
+ 377: { global: 1 },
+ 378: { global: 1 },
+ 379: { global: 1 },
+ 380: { global: 1 },
+ 381: { global: 1 },
+ 382: { global: 1 },
+ 383: { global: 1 },
+ 384: { global: 1 },
+ 385: { global: 1 },
+ 386: { global: 1 },
+ 387: { global: 1 },
+ 388: { global: 1 },
+ 389: { global: 1 },
+ 390: { global: 1 },
+ 391: { global: 1 },
+ 392: { global: 1 },
+ 393: { global: 1 },
+ 394: { global: 1 },
+ 395: { global: 1 },
+ 396: { global: 1 },
+ 397: { global: 1 },
+ 398: { global: 1 },
+ 399: { global: 1 },
+ 400: { global: 1 },
+ 401: { global: 1 },
+ 402: { global: 1 },
+ 403: { promo: 1, shop: 1 },
+ 404: { global: 1 },
+ 405: { global: 1 },
+ 406: { global: 1 },
+ 407: { global: 1 },
+ 408: { global: 1 },
+ 409: { global: 1, rr: 1, rro: 1 },
+ 410: { global: 1, rr: 1, rro: 1 },
+ 411: { global: 1, rr: 1, rro: 1 },
+ 412: { global: 1, rr: 1, rro: 1 },
+ 413: { global: 1, rr: 1, rro: 1 },
+ 414: { global: 1, rr: 1, rro: 1 },
+ 415: { global: 1, rr: 1, rro: 1 },
+ 416: { global: 1, rr: 1, rro: 1 },
+ 417: { global: 1 },
+ 418: { global: 1 },
+ 419: { global: 1, promo: 1, special: 1 },
+ 420: { global: 1 },
+ 421: { global: 1 },
+ 422: { global: 1 },
+ 423: { global: 1 },
+ 424: { global: 1 },
+ 425: { global: 1 },
+ 426: { global: 1 },
+ 427: { global: 1 },
+ 428: { global: 1 },
+ 429: { global: 1 },
+ 430: { global: 1 },
+ 431: { global: 1 },
+ 432: { global: 1 },
+ 433: { global: 1 },
+ 434: { global: 1 },
+ 435: { global: 1 },
+ 436: { global: 1 },
+ 437: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 438: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 439: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 440: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 441: { global: 1 },
+ 442: { global: 1 },
+ 443: { global: 1 },
+ 444: { global: 1 },
+ 445: { global: 1 },
+ 446: { global: 1 },
+ 447: { global: 1 },
+ 448: { global: 1, rr: 1, rro: 1 },
+ 449: { global: 1, rr: 1, rro: 1 },
+ 450: { global: 1, rr: 1, rro: 1 },
+ 451: { global: 1, rr: 1, rro: 1 },
+ 452: { global: 1, rr: 1, rro: 1 },
+ 453: { global: 1, rr: 1, rro: 1 },
+ 454: { global: 1, rr: 1, rro: 1 },
+ 455: { global: 1, rr: 1, rro: 1 },
+ 456: { global: 1, rr: 1, rro: 1 },
+ 457: { global: 1, rr: 1, rro: 1 },
+ 458: { global: 1, rr: 1, rro: 1 },
+ 459: { global: 1, rr: 1, rro: 1 },
+ 460: { global: 1 },
+ 461: { global: 1 },
+ 462: { global: 1 },
+ 463: { global: 1 },
+ 464: { global: 1 },
+ 465: { global: 1 },
+ 466: { global: 1 },
+ 467: { global: 1 },
+ 468: { global: 1 },
+ 469: { global: 1 },
+ 470: { global: 1 },
+ 471: { global: 1 },
+ 472: { global: 1 },
+ 473: { global: 1 },
+ 474: { global: 1 },
+ 475: { global: 1 },
+ 476: { global: 1 },
+ 477: { global: 1 },
+ 478: { global: 1 },
+ 479: { global: 1 },
+ 480: { global: 1 },
+ 481: { global: 1 },
+ 482: { global: 1 },
+ 483: { global: 1 },
+ 484: { global: 1 },
+ 485: { global: 1 },
+ 486: { global: 1 },
+ 487: { global: 1 },
+ 488: { global: 1 },
+ 489: { global: 1 },
+ 490: { global: 1 },
+ 491: { global: 1 },
+ 492: { global: 1 },
+ 493: { global: 1 },
+ 494: { global: 1 },
+ 495: { global: 1 },
+ 496: { global: 1 },
+ 497: { global: 1, rr: 1, rro: 1, lrr: 1 },
+ 498: { global: 1, rr: 1, rro: 1, lrr: 1 },
+ 499: { global: 1, rr: 1, rro: 1 },
+ 500: { global: 1, rr: 1, rro: 1 },
+ 501: { global: 1, rr: 1, rro: 1 },
+ 502: { global: 1, rr: 1, rro: 1 },
+ 503: { global: 1, rr: 1, rro: 1 },
+ 504: { global: 1, rr: 1, rro: 1 },
+ 505: { global: 1, rr: 1, rro: 1 },
+ 506: { global: 1, rr: 1, rro: 1 },
+ 507: { global: 1, rr: 1, rro: 1 },
+ 508: { global: 1, rr: 1, rro: 1 },
+ 509: { global: 1 },
+ 510: { global: 1 },
+ 511: { global: 1 },
+ 512: { global: 1, rr: 1, rro: 1, lrr: 1, promo: 1 },
+ 513: { global: 1, rr: 1, rro: 1, lrr: 1, promo: 1 },
+ 514: { special: 1, shop: 1 },
+ 515: { global: 1 },
+ 516: { global: 1 },
+ 517: { global: 1 },
+ 518: { global: 1 },
+ 519: { rr: 1, rro: 1 },
+ 520: { rr: 1, rro: 1 },
+ 521: { rr: 1, rro: 1 },
+ 522: { rr: 1, rro: 1 },
+ 523: { rr: 1, rro: 1 },
+ 524: { rr: 1, rro: 1 },
+ 525: { rr: 1, rro: 1 },
+ 526: { rr: 1, rro: 1 },
+ 527: { rr: 1, rro: 1 },
+ 528: { rr: 1, rro: 1 },
+ 529: { global: 1, rr: 1, rro: 1 },
+ 530: { global: 1, rr: 1, rro: 1 },
+ 531: { promo: 1, global: 1 },
+ 532: { promo: 1, global: 1 },
+ 533: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 534: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 535: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 536: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 537: { global: 1 },
+ 538: { global: 1 },
+ 539: { global: 1 },
+ 540: { global: 1 },
+ 541: { global: 1 },
+ 542: { global: 1 },
+ 543: { global: 1 },
+ 544: { global: 1 },
+ 545: { global: 1 },
+ 546: { global: 1 },
+ 547: { global: 1, rr: 1, rro: 1, lrr: 1 },
+ 548: { global: 1, rr: 1, rro: 1, lrr: 1 },
+ 549: { global: 1 },
+ 550: { global: 1 },
+ 551: { global: 1 },
+ 552: { global: 1 },
+ 553: { rr: 1, rro: 1 },
+ 554: { rr: 1, rro: 1 },
+ 555: { rr: 1, rro: 1 },
+ 556: { rr: 1, rro: 1 },
+ 557: { rr: 1, rro: 1 },
+ 558: { rr: 1, rro: 1 },
+ 559: { rr: 1, rro: 1 },
+ 560: { rr: 1, rro: 1 },
+ 561: { rr: 1, rro: 1, global: 1 },
+ 562: { rr: 1, rro: 1, global: 1 },
+ 563: { global: 1 },
+ 564: { global: 1 },
+ 565: { global: 1 },
+ 566: { global: 1 },
+ 567: { global: 1 },
+ 568: { global: 1 },
+ 569: { global: 1 },
+ 570: { global: 1 },
+ 571: { global: 1 },
+ 572: { global: 1 },
+ 573: { global: 1 },
+ 574: { global: 1 },
+ 575: { global: 1 },
+ 576: { special: 1, shop: 1 },
+ 577: { rr: 1, rro: 1, global: 1 },
+ 578: { rr: 1, rro: 1, global: 1 },
+ 579: { global: 1, rr: 1, rro: 1, lrr: 1 },
+ 580: { global: 1, rr: 1, rro: 1, lrr: 1 },
+ 581: { global: 1 },
+ 582: { global: 1 },
+ 583: { global: 1 },
+ 584: { global: 1 },
+ 585: { global: 1, rr: 1, rro: 1 },
+ 586: { global: 1, rr: 1, rro: 1 },
+ 587: { global: 1, rr: 1, rro: 1 },
+ 588: { global: 1, rr: 1, rro: 1 },
+ 589: { global: 1, rr: 1, rro: 1 },
+ 590: { global: 1, rr: 1, rro: 1 },
+ 591: { global: 1 },
+ 592: { global: 1 },
+ 593: { global: 1 },
+ 594: { global: 1 },
+ 595: { global: 1 },
+ 596: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 597: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 598: { global: 1 },
+ 599: { global: 1 },
+ 600: { global: 1 },
+ 601: { global: 1 },
+ 602: { global: 1 },
+ 603: { global: 1 },
+ 604: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 605: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 606: { global: 1 },
+ 607: { global: 1 },
+ 608: { global: 1 },
+ 609: { global: 1 },
+ 610: { global: 1 },
+ 611: { global: 1 },
+ 612: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 613: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 614: { global: 1 },
+ 615: { global: 1 },
+ 616: { global: 1 },
+ 617: { global: 1 },
+ 618: { global: 1 },
+ 619: { global: 1 },
+ 620: { global: 1 },
+ 621: { global: 1 },
+ 622: { global: 1 },
+ 623: { global: 1 },
+ 624: { global: 1 },
+ 625: { global: 1 },
+ 626: { global: 1 },
+ 627: { global: 1 },
+ 628: { global: 1 },
+ 629: { global: 1 },
+ 630: { global: 1 },
+ 631: { global: 1 },
+ 632: { global: 1 },
+ 633: { global: 1 },
+ 634: { global: 1 },
+ 635: { global: 1 },
+ 636: { global: 1 },
+ 637: { global: 1 },
+ 638: { rr: 1, rro: 1, global: 1 },
+ 639: { rr: 1, rro: 1, global: 1 },
+ 640: { rr: 1, rro: 1, global: 1 },
+ 641: { rr: 1, rro: 1, global: 1 },
+ 642: { rr: 1, rro: 1, global: 1 },
+ 643: { rr: 1, rro: 1, global: 1 },
+ 644: { rr: 1, rro: 1, global: 1 },
+ 645: { rr: 1, rro: 1, global: 1 },
+ 646: { rr: 1, rro: 1, global: 1 },
+ 647: { rr: 1, rro: 1, global: 1 },
+ 648: { rr: 1, rro: 1, global: 1 },
+ 649: { rr: 1, rro: 1, global: 1 },
+ 650: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 651: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 652: { global: 1 },
+ 653: { global: 1 },
+ 654: { global: 1 },
+ 655: { global: 1},
+ 656: { global: 1},
+ 657: { global: 1},
+ 658: { global: 1},
+ 660: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 661: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 662: { shop: 1 },
+ 663: { global: 1 },
+ 664: { global: 1 },
+ 665: { global: 1 },
+ 666: { global: 1 },
+ 667: { global: 1 },
+ 668: { rr: 1, rro: 1, global: 1 },
+ 669: { rr: 1, rro: 1, global: 1 },
+ 670: { rr: 1, rro: 1, global: 1 },
+ 671: { rr: 1, rro: 1, global: 1 },
+ 672: { rr: 1, rro: 1, global: 1 },
+ 673: { rr: 1, rro: 1, global: 1 },
+ 674: { rr: 1, rro: 1, global: 1 },
+ 675: { rr: 1, rro: 1, global: 1 },
+ 676: { rr: 1, rro: 1, global: 1 },
+ 677: { rr: 1, rro: 1, global: 1 },
+ 678: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 679: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 680: { global: 1 },
+ 681: { global: 1 },
+ 682: { global: 1 },
+ 683: { global: 1 },
+ 684: { global: 1 },
+ 685: { global: 1 },
+ 686: { special: 1, shop: 1 },
+ 687: { global: 1 },
+ 688: { global: 1 },
+ 689: { global: 1 },
+ 690: { global: 1 },
+ 691: { global: 1 },
+ 692: { global: 1 },
+ 693: { global: 1 },
+ 694: { global: 1 },
+ 695: { global: 1 },
+ 696: { global: 1 },
+ 697: { global: 1 },
+ 698: { global: 1 },
+ 699: { global: 1 },
+ 700: { global: 1 },
+ 701: { global: 1 },
+ 702: { global: 1 },
+ 703: { global: 1 },
+ 704: { global: 1 },
+ 705: { global: 1 },
+ 706: { global: 1 },
+ 707: { global: 1 },
+ 708: { global: 1 },
+ 709: { global: 1 },
+ 710: { global: 1, rr: 1, rro: 1, lrr: 1 },
+ 711: { global: 1, rr: 1, rro: 1, lrr: 1 },
+ 712: { global: 1 },
+ 713: { global: 1 },
+ 714: { global: 1 },
+ 715: { global: 1 },
+ 716: { global: 1 },
+ 717: { rr: 1, rro: 1, global: 1 },
+ 718: { rr: 1, rro: 1, global: 1 },
+ 719: { rr: 1, rro: 1, global: 1 },
+ 720: { rr: 1, rro: 1, global: 1 },
+ 721: { global: 1 },
+ 722: { global: 1 },
+ 723: { global: 1 },
+ 724: { global: 1 },
+ 725: { global: 1, rr: 1, rro: 1, lrr: 1 },
+ 726: { global: 1, rr: 1, rro: 1, lrr: 1 },
+ 727: { special: 1, global: 1 },
+ 728: { global: 1 },
+ 729: { global: 1 },
+ 730: { global: 1 },
+ 731: { global: 1 },
+ 732: { global: 1 },
+ 733: { global: 1 },
+ 734: { global: 1 },
+ 735: { global: 1 },
+ 736: { global: 1 },
+ 737: { global: 1 },
+ 738: { global: 1 },
+ 739: { global: 1 },
+ 740: { global: 1 },
+ 741: { global: 1 },
+ 742: { global: 1 },
+ 743: { global: 1 },
+ 744: { rr: 1, rro: 1, lrr: 1 },
+ 745: { rr: 1, rro: 1, lrr: 1 },
+ 746: { promo: 1 },
+ 747: { rr: 1, rro: 1, global: 1 },
+ 748: { rr: 1, rro: 1, global: 1 },
+ 749: { rr: 1, rro: 1, global: 1 },
+ 750: { rr: 1, rro: 1, global: 1 },
+ 751: { rr: 1, rro: 1, global: 1 },
+ 752: { rr: 1, rro: 1, global: 1 },
+ 753: { rr: 1, rro: 1, global: 1 },
+ 754: { rr: 1, rro: 1, global: 1 },
+ 755: { rr: 1, rro: 1, global: 1 },
+ 756: { rr: 1, rro: 1, global: 1 },
+ 757: { rr: 1, rro: 1, global: 1 },
+ 758: { rr: 1, rro: 1, global: 1 },
+ 759: { rr: 1, rro: 1, global: 1 },
+ 760: { rr: 1, rro: 1, global: 1 },
+ 761: { global: 1 },
+ 762: { global: 1 },
+ 763: { global: 1 },
+ 764: { global: 1 },
+ 765: { global: 1 },
+ 766: { global: 1 },
+ 767: { global: 1 },
+ 768: { global: 1 },
+ 769: { global: 1 },
+ 770: { global: 1 },
+ 771: { global: 1 },
+ 772: { global: 1 },
+ 773: { global: 1 },
+ 774: { global: 1 },
+ 775: { global: 1 },
+ 776: { global: 1 },
+ 777: { global: 1 },
+ 778: { global: 1 },
+ 779: { global: 1 },
+ 780: { global: 1 },
+ 781: { global: 1 },
+ 782: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 783: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 784: { rr: 1, rro: 1, global: 1 },
+ 785: { rr: 1, rro: 1, global: 1 },
+ 786: { rr: 1, rro: 1, global: 1 },
+ 787: { rr: 1, rro: 1, global: 1 },
+ 788: { rr: 1, rro: 1, global: 1 },
+ 789: { rr: 1, rro: 1, global: 1 },
+ 790: { rr: 1, rro: 1, global: 1 },
+ 791: { rr: 1, rro: 1, global: 1 },
+ 792: { rr: 1, rro: 1, global: 1 },
+ 793: { rr: 1, rro: 1, global: 1 },
+ 796: { global: 1 },
+ 797: { global: 1 },
+ 798: { global: 1 },
+ 799: { global: 1 },
+ 800: { global: 1 },
+ 801: { rr: 1, rro: 1, lrr: 1 },
+ 802: { rr: 1, rro: 1, lrr: 1 },
+ 803: { global: 1 },
+ 804: { global: 1 },
+ 805: { global: 1 },
+ 806: { global: 1 },
+ 807: { global: 1 },
+ 808: { global: 1 },
+ 809: { global: 1 },
+ 810: { global: 1 },
+ 811: { global: 1 },
+ 812: { global: 1 },
+ 813: { global: 1 },
+ 814: { global: 1 },
+ 815: { global: 1 },
+ 816: { global: 1 },
+ 817: { global: 1 },
+ 818: { global: 1 },
+ 819: { global: 1 },
+ 820: { global: 1 },
+ 821: { global: 1 },
+ 822: { global: 1 },
+ 823: { global: 1 },
+ 824: { global: 1 },
+ 825: { global: 1 },
+ 826: { global: 1 },
+ 827: { global: 1 },
+ 828: { rr: 1, rro: 1, lrr: 1 },
+ 829: { rr: 1, rro: 1, lrr: 1 },
+ 830: { global: 1 },
+ 831: { global: 1 },
+ 832: { global: 1 },
+ 833: { global: 1 },
+ 834: { global: 1 },
+ 835: { global: 1 },
+ 836: { global: 1 },
+ 837: { rr: 1, rro: 1, global: 1 },
+ 838: { rr: 1, rro: 1, global: 1 },
+ 839: { rr: 1, rro: 1, global: 1 },
+ 840: { rr: 1, rro: 1, global: 1 },
+ 841: { rr: 1, rro: 1, global: 1 },
+ 842: { rr: 1, rro: 1, global: 1 },
+ 843: { rr: 1, rro: 1, global: 1 },
+ 844: { rr: 1, rro: 1, global: 1 },
+ 845: { rr: 1, rro: 1, global: 1 },
+ 846: { rr: 1, rro: 1, global: 1 },
+ 847: { global: 1 },
+ 848: { global: 1 },
+ 849: { global: 1 },
+ 850: { global: 1 },
+ 851: { global: 1 },
+ 852: { global: 1 },
+ 853: { global: 1 },
+ 854: { global: 1 },
+ 855: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 856: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 857: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 858: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 859: { global: 1 },
+ 860: { global: 1 },
+ 861: { global: 1 },
+ 862: { global: 1 },
+ 863: { special: 1, global: 1, shop: 1 },
+ 864: { global: 1 },
+ 865: { global: 1 },
+ 869: { rr: 1, rro: 1, global: 1 },
+ 870: { rr: 1, rro: 1, global: 1 },
+ 871: { rr: 1, rro: 1, global: 1 },
+ 872: { rr: 1, rro: 1, global: 1 },
+ 873: { rr: 1, rro: 1, global: 1 },
+ 874: { rr: 1, rro: 1, global: 1 },
+ 875: { rr: 1, rro: 1, global: 1 },
+ 876: { rr: 1, rro: 1, global: 1 },
+ 877: { rr: 1, rro: 1, global: 1 },
+ 878: { rr: 1, rro: 1, global: 1 },
+ 879: { rr: 1, rro: 1, global: 1 },
+ 880: { rr: 1, rro: 1, global: 1 },
+ 881: { global: 1 },
+ 882: { global: 1 },
+ 883: { global: 1 },
+ 884: { global: 1 },
+ 888: { global: 1 },
+ 889: { global: 1 },
+ 890: { global: 1 },
+ 891: { global: 1 },
+ 892: { global: 1 },
+ 893: { global: 1 },
+ 894: { global: 1 },
+ 895: { special: 1, global: 1 },
+ 896: { special: 1, global: 1 },
+ 905: { rr: 1, rro: 1, global: 1 },
+ 906: { rr: 1, rro: 1, global: 1 },
+ 907: { rr: 1, rro: 1, global: 1 },
+ 908: { rr: 1, rro: 1, global: 1 },
+ 909: { rr: 1, rro: 1, global: 1 },
+ 910: { rr: 1, rro: 1, global: 1 },
+ 911: { rr: 1, rro: 1, global: 1 },
+ 912: { rr: 1, rro: 1, global: 1 },
+ 913: { rr: 1, rro: 1, global: 1 },
+ 914: { rr: 1, rro: 1, global: 1 },
+ 915: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 916: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 917: { global: 1 },
+ 918: { global: 1 },
+ 919: { global: 1 },
+ 920: { global: 1 },
+ 921: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 922: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 923: { global: 1 },
+ 924: { global: 1 },
+ 925: { global: 1 },
+ 926: { global: 1 },
+ 927: { global: 1 },
+ 928: { global: 1 },
+ 929: { global: 1 },
+ 930: { global: 1 },
+ 931: { global: 1 },
+ 934: { rr: 1, rro: 1, global: 1 },
+ 935: { rr: 1, rro: 1, global: 1 },
+ 936: { rr: 1, rro: 1, global: 1 },
+ 937: { rr: 1, rro: 1, global: 1 },
+ 938: { rr: 1, rro: 1, global: 1 },
+ 939: { rr: 1, rro: 1, global: 1 },
+ 940: { rr: 1, rro: 1, global: 1 },
+ 941: { rr: 1, rro: 1, global: 1 },
+ 942: { rr: 1, rro: 1, global: 1 },
+ 943: { rr: 1, rro: 1, global: 1 },
+ 944: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 945: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 946: { global: 1 },
+ 947: { global: 1 },
+ 948: { global: 1 },
+ 949: { global: 1 },
+ 950: { global: 1 },
+ 951: { global: 1 },
+ 952: { global: 1 },
+ 953: { global: 1 },
+ 954: { global: 1 },
+ 955: { global: 1 },
+ 956: { global: 1 },
+ 957: { global: 1 },
+ 958: { global: 1 },
+ 959: { global: 1 },
+ 960: { global: 1 },
+ 961: { global: 1 },
+ 962: { global: 1 },
+ 963: { global: 1 },
+ 964: { global: 1 },
+ 965: { global: 1 },
+ 966: { global: 1 },
+ 967: { global: 1 },
+ 968: { global: 1 },
+ 969: { global: 1 },
+ 970: { global: 1 },
+ 971: { global: 1 },
+ 972: { global: 1 },
+ 973: { global: 1 },
+ 974: { global: 1 },
+ 975: { rr: 1, rro: 1, lrr: 1 },
+ 976: { rr: 1, rro: 1, lrr: 1 },
+ 990: { rr: 1, rro: 1, global: 1 },
+ 991: { rr: 1, rro: 1, global: 1 },
+ 992: { rr: 1, rro: 1, global: 1 },
+ 993: { rr: 1, rro: 1, global: 1 },
+ 994: { rr: 1, rro: 1, global: 1 },
+ 995: { rr: 1, rro: 1, global: 1 },
+ 996: { rr: 1, rro: 1, global: 1 },
+ 997: { rr: 1, rro: 1, global: 1 },
+ 998: { rr: 1, rro: 1, global: 1 },
+ 999: { rr: 1, rro: 1, global: 1 },
+ 1000: { rr: 1, rro: 1, global: 1 },
+ 1001: { rr: 1, rro: 1, global: 1 },
+ 1007: { rr: 1, rro: 1, lrr: 1 },
+ 1008: { rr: 1, rro: 1, lrr: 1 },
+ 1009: { promo: 1 },
+ 1010: { global: 1 },
+ 1011: { global: 1 },
+ 1012: { global: 1 },
+ 1013: { global: 1 },
+ 1014: { global: 1 },
+ 1020: { rr: 1, rro: 1, lrr: 1 },
+ 1021: { rr: 1, rro: 1, lrr: 1 },
+ 1022: { promo: 1 },
+ 1024: { rr: 1, rro: 1, global: 1 },
+ 1025: { rr: 1, rro: 1, global: 1 },
+ 1026: { rr: 1, rro: 1, global: 1 },
+ 1027: { rr: 1, rro: 1, global: 1 },
+ 1028: { rr: 1, rro: 1, global: 1 },
+ 1029: { rr: 1, rro: 1, global: 1 },
+ 1030: { rr: 1, rro: 1, global: 1 },
+ 1031: { rr: 1, rro: 1, global: 1 },
+ 1032: { rr: 1, rro: 1, global: 1 },
+ 1033: { rr: 1, rro: 1, global: 1 },
+ 1034: { rr: 1, rro: 1, global: 1 },
+ 1035: { rr: 1, rro: 1, global: 1 },
+ 1044: { rr: 1, rro: 1, global: 1 },
+ 1045: { rr: 1, rro: 1, global: 1 },
+ 1053: { rr: 1, rro: 1, lrr: 1 },
+ 1054: { rr: 1, rro: 1, lrr: 1 },
+ 1055: { global: 1 },
+ 1056: { global: 1 },
+ 1057: { global: 1 },
+ 1058: { global: 1 },
+ 1059: { global: 1 },
+ 1060: { global: 1 },
+ 1061: { global: 1 },
+ 1062: { global: 1 },
+ 1063: { global: 1 },
+ 1064: { global: 1 },
+ 1065: { global: 1 },
+ 1066: { global: 1 },
+ 1067: { global: 1 },
+ 1068: { global: 1 },
+ 1069: { global: 1 },
+ 1070: { global: 1 },
+ 1071: { global: 1 },
+ 1072: { global: 1 },
+ 1073: { global: 1 },
+ 1074: { rr: 1, rro: 1, global: 1 },
+ 1075: { rr: 1, rro: 1, global: 1 },
+ 1076: { rr: 1, rro: 1, global: 1 },
+ 1077: { rr: 1, rro: 1, global: 1 },
+ 1078: { rr: 1, rro: 1, global: 1 },
+ 1079: { rr: 1, rro: 1, global: 1 },
+ 1080: { rr: 1, rro: 1, global: 1 },
+ 1081: { rr: 1, rro: 1, global: 1 },
+ 1082: { rr: 1, rro: 1, global: 1 },
+ 1083: { rr: 1, rro: 1, global: 1 },
+ 1084: { rr: 1, rro: 1, global: 1 },
+ 1085: { rr: 1, rro: 1, global: 1 },
+ 1092: { rr: 1, rro: 1, lrr: 1 },
+ 1093: { rr: 1, rro: 1, lrr: 1 },
+ 1094: { global: 1 },
+ 1095: { global: 1 },
+ 1096: { global: 1 },
+ 1097: { global: 1 },
+ 1098: { global: 1 },
+ 1099: { rr: 1, rro: 1, lrr: 1 },
+ 1100: { rr: 1, rro: 1, lrr: 1 },
+ 1107: { global: 1 },
+ 1108: { global: 1 },
+ 1109: { global: 1 },
+ 1110: { global: 1 },
+ 1111: { global: 1 },
+ 1112: { global: 1 },
+ 1113: { global: 1 },
+ 1114: { rr: 1, rro: 1, global: 1 },
+ 1115: { rr: 1, rro: 1, global: 1 },
+ 1116: { rr: 1, rro: 1, global: 1 },
+ 1117: { rr: 1, rro: 1, global: 1 },
+ 1118: { rr: 1, rro: 1, global: 1 },
+ 1119: { rr: 1, rro: 1, global: 1 },
+ 1120: { rr: 1, rro: 1, global: 1 },
+ 1121: { rr: 1, rro: 1, global: 1 },
+ 1122: { rr: 1, rro: 1, global: 1 },
+ 1123: { rr: 1, rro: 1, global: 1 },
+ 1124: { rr: 1, rro: 1, global: 1 },
+ 1125: { rr: 1, rro: 1, global: 1 },
+ 1126: { rr: 1, rro: 1, global: 1 },
+ 1127: { rr: 1, rro: 1, global: 1 },
+ 1128: { rr: 1, rro: 1, global: 1 },
+ 1129: { rr: 1, rro: 1, global: 1 },
+ 1130: { rr: 1, rro: 1, global: 1 },
+ 1131: { rr: 1, rro: 1, global: 1 },
+ 1132: { rr: 1, rro: 1, global: 1 },
+ 1133: { rr: 1, rro: 1, global: 1 },
+ 1146: { global: 1 },
+ 1147: { global: 1 },
+ 1148: { global: 1 },
+ 1149: { global: 1 },
+ 1150: { global: 1 },
+ 1151: { global: 1 },
+ 1152: { global: 1 },
+ 1153: { global: 1 },
+ 1154: { global: 1 },
+ 1155: { global: 1 },
+ 1156: { global: 1 },
+ 1157: { global: 1 },
+ 1158: { global: 1 },
+ 1159: { global: 1 },
+ 1160: { rr: 1, rro: 1, lrr: 1 },
+ 1161: { rr: 1, rro: 1, lrr: 1 },
+ 1162: { global: 1 },
+ 1163: { global: 1 },
+ 1164: { global: 1 },
+ 1165: { global: 1 },
+ 1166: { global: 1 },
+ 1167: { global: 1 },
+ 1168: { global: 1 },
+ 1169: { global: 1 },
+ 1170: { global: 1 },
+ 1171: { global: 1 },
+ 1172: { rr: 1, rro: 1, global: 1 },
+ 1173: { rr: 1, rro: 1, global: 1 },
+ 1174: { rr: 1, rro: 1, global: 1 },
+ 1175: { rr: 1, rro: 1, global: 1 },
+ 1176: { rr: 1, rro: 1, global: 1 },
+ 1177: { rr: 1, rro: 1, global: 1 },
+ 1178: { shop: 1 },
+ 1179: { shop: 1 },
+ 1181: { rr: 1, rro: 1, global: 1 },
+ 1182: { rr: 1, rro: 1, global: 1 },
+ 1183: { rr: 1, rro: 1, global: 1 },
+ 1184: { rr: 1, rro: 1, global: 1 },
+ 1185: { rr: 1, rro: 1, global: 1 },
+ 1186: { rr: 1, rro: 1, global: 1 },
+ 1187: { rr: 1, rro: 1, global: 1 },
+ 1188: { rr: 1, rro: 1, global: 1 },
+ 1189: { rr: 1, rro: 1, global: 1 },
+ 1190: { rr: 1, rro: 1, global: 1 },
+ 1191: { rr: 1, rro: 1, global: 1 },
+ 1192: { rr: 1, rro: 1, global: 1 },
+ 1193: { rr: 1, rro: 1, lrr: 1 },
+ 1194: { rr: 1, rro: 1, lrr: 1 },
+ 1207: { rr: 1, rro: 1, global: 1 },
+ 1208: { rr: 1, rro: 1, global: 1 },
+ 1209: { rr: 1, rro: 1, global: 1 },
+ 1210: { rr: 1, rro: 1, global: 1 },
+ 1211: { rr: 1, rro: 1, global: 1 },
+ 1212: { rr: 1, rro: 1, global: 1 },
+ 1213: { rr: 1, rro: 1, lrr: 1 },
+ 1214: { rr: 1, rro: 1, lrr: 1 },
+ 1223: { global: 1 },
+ 1224: { global: 1 },
+ 1225: { global: 1 },
+ 1226: { global: 1 },
+ 1227: { global: 1 },
+ 1228: { global: 1 },
+ 1229: { rr: 1, rro: 1, global: 1 },
+ 1230: { rr: 1, rro: 1, global: 1 },
+ 1231: { rr: 1, rro: 1, global: 1 },
+ 1232: { rr: 1, rro: 1, global: 1 },
+ 1233: { rr: 1, rro: 1, global: 1 },
+ 1234: { rr: 1, rro: 1, global: 1 },
+ 1235: { rr: 1, rro: 1, global: 1 },
+ 1236: { rr: 1, rro: 1, global: 1 },
+ 1237: { rr: 1, rro: 1, global: 1 },
+ 1238: { rr: 1, rro: 1, global: 1 },
+ 1239: { rr: 1, rro: 1, global: 1 },
+ 1240: { rr: 1, rro: 1, global: 1 },
+ 1248: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 1249: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 1259: { rr: 1, rro: 1, lrr: 1 },
+ 1260: { rr: 1, rro: 1, lrr: 1 },
+ 1261: { rr: 1, rro: 1, lrr: 1 },
+ 1262: { rr: 1, rro: 1, lrr: 1 },
+ 1263: { rr: 1, rro: 1, lrr: 1 },
+ 1264: { rr: 1, rro: 1, lrr: 1 },
+ 1265: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 1266: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 1267: { rr: 1, rro: 1 },
+ 1268: { rr: 1, rro: 1 },
+ 1269: { rr: 1, rro: 1 },
+ 1270: { rr: 1, rro: 1 },
+ 1271: { rr: 1, rro: 1 },
+ 1272: { rr: 1, rro: 1 },
+ 1273: { rr: 1, rro: 1 },
+ 1274: { rr: 1, rro: 1 },
+ 1275: { rr: 1, rro: 1 },
+ 1276: { rr: 1, rro: 1 },
+ 1277: { rr: 1, rro: 1 },
+ 1278: { rr: 1, rro: 1 },
+ 1284: { shop: 1 },
+ 1285: { shop: 1 },
+ 1295: { rr: 1, rro: 1, lrr: 1 },
+ 1296: { rr: 1, rro: 1, lrr: 1 },
+ 1307: { rr: 1, rro: 1, lrr: 1 },
+ 1308: { rr: 1, rro: 1, lrr: 1 },
+ 1313: { rr: 1, rro: 1 },
+ 1314: { rr: 1, rro: 1 },
+ 1315: { rr: 1, rro: 1 },
+ 1316: { rr: 1, rro: 1 },
+ 1317: { rr: 1, rro: 1 },
+ 1318: { rr: 1, rro: 1 },
+ 1319: { rr: 1, rro: 1 },
+ 1320: { rr: 1, rro: 1 },
+ 1321: { rr: 1, rro: 1 },
+ 1322: { rr: 1, rro: 1 },
+ 1323: { rr: 1, rro: 1 },
+ 1324: { rr: 1, rro: 1 },
+ 1335: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 1336: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 1354: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 1355: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 1360: { promo: 1 },
+ 1361: { rr: 1, rro: 1 },
+ 1362: { rr: 1, rro: 1 },
+ 1363: { rr: 1, rro: 1 },
+ 1364: { rr: 1, rro: 1 },
+ 1365: { rr: 1, rro: 1 },
+ 1366: { rr: 1, rro: 1 },
+ 1367: { rr: 1, rro: 1 },
+ 1368: { rr: 1, rro: 1 },
+ 1369: { rr: 1, rro: 1 },
+ 1370: { rr: 1, rro: 1 },
+ 1371: { shop: 1 },
+ 1372: { shop: 1 },
+ 1381: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 1382: { rr: 1, rro: 1, lrr: 1, global: 1 },
+ 1390: { rr: 1, rro: 1 },
+ 1391: { rr: 1, rro: 1 },
+ 1394: { rr: 1, rro: 1, lrr: 1, },
+ 1395: { rr: 1, rro: 1, lrr: 1, },
+ 1403: { rr: 1, rro: 1 },
+ 1404: { rr: 1, rro: 1 },
+ 1405: { rr: 1, rro: 1 },
+ 1406: { rr: 1, rro: 1 },
+ 1407: { rr: 1, rro: 1 },
+ 1408: { rr: 1, rro: 1 },
+ 1409: { rr: 1, rro: 1 },
+ 1410: { rr: 1, rro: 1 },
+ 1411: { rr: 1, rro: 1 },
+ 1412: { rr: 1, rro: 1 },
+ 1414: { shop: 1 },
+ 1419: { rr: 1, rro: 1, lrr: 1, },
+ 1420: { rr: 1, rro: 1, lrr: 1, },
+ 1429: { rr: 1, rro: 1, lrr: 1, },
+ 1430: { rr: 1, rro: 1, lrr: 1, },
};
\ No newline at end of file
diff --git a/common/data/gw.js b/common/data/gw.js
index afdf72025..1ec629e9d 100644
--- a/common/data/gw.js
+++ b/common/data/gw.js
@@ -1 +1,1432 @@
-window.gw=[2017,2017,2017,2017,2019,2019,2019,2019,2020,2020,2020,2020,2022,2022,2022,2022,2018,2018,2018,2018,2021,2021,2021,2021,2021,2021,2820,2412,2105,2105,2102,2102,2123,2123,2184,2122,2121,2106,2106,2207,2164,2804,2146,2146,2024,2024,2821,2819,2215,2163,2162,2016,2145,2145,2129,2129,2128,2128,2216,2180,2174,2147,2161,2161,1926,1926,2077,2077,2078,2078,2013,2013,2013,2015,2015,2014,2014,1652,1652,1652,1652,1652,1652,2210,2210,2210,2210,2210,1657,1657,1657,1657,1657,1657,1861,1861,1861,1861,1861,1851,1851,1851,1851,1851,2292,2292,2292,2292,2292,2333,2333,2333,2333,2333,1857,1857,1857,1857,2823,2822,2790,2204,2784,2202,2700,2786,2788,2789,2201,2796,2787,2177,2791,2797,2354,2183,2203,2355,2206,2341,2217,2790,2204,2784,2202,2700,2786,2788,2789,2201,2796,2787,2177,2791,2797,2354,2183,2203,2355,2206,2341,2217,2816,2824,2181,2179,2205,2209,2219,2185,2178,2176,2208,2218,2182,2818,2353,2817,2529,2526,2527,2528,2220,2529,2526,2527,2528,2220,3873,3873,3873,3873,3873,2529,2526,2527,2528,2220,3062,3062,3056,3056,3060,3060,3057,3057,3061,3061,3058,3058,3748,3748,3747,3747,3744,4005,4005,4035,4035,4027,4027,4039,4039,4029,4029,4143,4143,2184,2146,2215,4659,4659,4916,4916,4925,4925,4926,4929,4960,4928,4927,4926,4929,4960,4928,4927,5143,5209,5209,4707,4707,4864,4864,4863,4863,4861,4861,4862,4862,5166,5166,5100,5100,5101,5101,2210,1851,2078,2790,2204,2784,2202,2700,2786,2788,2789,2201,2796,2787,2177,2791,2797,2354,2183,2203,2355,2206,2341,2217,5589,5506,5505,5872,5871,5870,5168,5168,5819,5820,5801,5801,5801,5801,5801,5359,5359,5982,5982,5978,5978,5979,5979,5981,5981,5980,5980,6114,6114,6113,6113,6484,6484,6488,6488,6489,6659,6659,6661,6661,6664,6664,6665,6662,6663,6663,6873,6873,6871,6872,7269,7269,7273,7273,7273,7273,7273,7273,7273,7273,7273,7273,7291,7291,7310,7310,7207,7207,7209,7209,7208,7208,7211,7211,7210,7210,7311,7311,7588,7574,7591,7590,7589,7588,7574,7591,7590,7589,7576,7573,7573,7572,7575,7577,7577,7731,7731,7732,7732,8286,8286,8440,8440,8439,8438,8883,8883,8882,8882,8881,8881,8880,8880,8873,8884,8884,8885,8886,7577,9032,9032,9031,9031,9033,9033,9034,9034,9035,9035,8946,9247,9248,9249,3574,3574,3558,9875,9876,9881,9882,9877,9877,9880,10005,10004,10003,10003,10445,10445,10834,10834,10837,10837,10837,10833,10833,9878,9878,11071,11071,11072,11072,11073,11073,11074,11074,11075,11075,11070,11070,11460,3061,3061,11529,11530,11532,11531,11533,11538,11537,11538,11537,11536,11535,11550,11549,11534,11539,11540,11541,11542,11543,11539,11540,11541,11542,11543,11545,11546,11563,11545,11546,11563,11544,11562,11544,11562,11642,11642,11791,11791,11787,11787,11790,11790,11788,11788,11789,11789,11775,11775,11776,11806,11806,11786,11960,11960,12015,12015,11949,11949,11950,11950,11951,11951,11952,11952,11953,11953,11948,11948,12067,12067,11774,11774,11773,11773,12098,12098,12100,12099,12136,12137,12132,12132,12131,12131,12424,12424,12138,12138,12134,12135,12648,12648,12649,12649,12650,12650,12651,12651,12647,12647,12775,12781,12782,12780,12776,12774,12774,12805,12805,12806,12807,12794,12794,12868,12878,12878,12888,12888,13148,13137,13138,13136,13133,13133,13134,13134,13135,13135,13396,13396,13396,13396,13396,13315,13315,13568,13568,13567,13567,13688,13688,13749,13749,13947,13947,13948,13949,14421,14420,14257,14257,14296,4349,4860,6065,5085,5304,6955,5190,7435,5311,6924,6051,6430,6030,14295,14294,14303,14303,14312,14312,14399,14399,14419,14398,14405,14405,14404,14404,14403,14403,14402,14402,14401,14401,14400,14400,14660,14660,14749,14749,14749,14829,14829,14828,14827,14980,15002,15002,15111,15149,15149,15150,15150,15151,15191,15191,15190,15190,15189,15189,15187,15187,15188,15188,15442,15442,15603,15603,15441,15441,15853,15853,16015,15597,15597,15598,15598,15647,15650,15649,15646,15648,15647,15650,15649,15646,15648,15601,15621,15652,15651,15602,15600,15600,15622,15622,16021,16021,16034,16034,16036,16035,16035,16215,16215,16216,16216,16387,16387,16375,16375,16372,16372,16538,16617,16617,16616,16616,16655,16655,16656,16656,14303,14312,16658,14294,16729,16729,16728,16728,16726,16726,16863,16960,16960,16961,16961,16962,16962,16963,16963,16964,16964,16965,16965,16966,16966,17123,17127,17125,17126,17124,17922,17920,17921,17923,17349,17347,17348,17364,17363,17350,17475,17475,17474,17474,17476,17476,18004,18004,18182,18182,18185,18185,18183,18183,18184,18184,18187,18187,18567,18567,18769,18769,18770,18772,18771,18794,18794,18812,18812,18811,18811,19171,19171,19172,19172,19173,19286,19287,19288,19289,19289,19296,19297,19298,19299,19300,19290,19291,19292,19293,19294,19295,null,null,19416,19416,19417,19417,19418,19426,19426,19810,19810,19812,19812,19811,19811,19805,19805,19806,19806,19904,19904,19906,19905,20242,20242,20489,20488,20154,20154,20480,20480,20495,20495,20292,20292,20833,20391,20391,20793,21528,21529,21536,21536,21543,21543,21540,21540,21539,21539,21541,21541,21542,21542,21921,21921,21138,21138,22177,22117,22419,22654,22655,22655,22656,22657,22658,19289,22436,22436,22986,22983,22987,23062,23062,22820,22820,23128,23145,23145,23380,23380,23378,23378,23377,23377,23379,23379,23332,23332,23265,23265,23690,23691];
+window.gw=[
+ 2017,
+ 2017,
+ 2017,
+ 2017,
+ 2019,
+ 2019,
+ 2019,
+ 2019,
+ 2020,
+ 2020,
+ 2020,
+ 2020,
+ 2022,
+ 2022,
+ 2022,
+ 2022,
+ 2018,
+ 2018,
+ 2018,
+ 2018,
+ 2021,
+ 2021,
+ 2021,
+ 2021,
+ 2021,
+ 2021,
+ 2820,
+ 2412,
+ 2105,
+ 2105,
+ 2102,
+ 2102,
+ 2123,
+ 2123,
+ 2184,
+ 2122,
+ 2121,
+ 2106,
+ 2106,
+ 2207,
+ 2164,
+ 2804,
+ 2146,
+ 2146,
+ 2024,
+ 2024,
+ 2821,
+ 2819,
+ 2215,
+ 2163,
+ 2162,
+ 2016,
+ 2145,
+ 2145,
+ 2129,
+ 2129,
+ 2128,
+ 2128,
+ 2216,
+ 2180,
+ 2174,
+ 2147,
+ 2161,
+ 2161,
+ 1926,
+ 1926,
+ 2077,
+ 2077,
+ 2078,
+ 2078,
+ 2013,
+ 2013,
+ 2013,
+ 2015,
+ 2015,
+ 2014,
+ 2014,
+ 1652,
+ 1652,
+ 1652,
+ 1652,
+ 1652,
+ 1652,
+ 2210,
+ 2210,
+ 2210,
+ 2210,
+ 2210,
+ 1657,
+ 1657,
+ 1657,
+ 1657,
+ 1657,
+ 1657,
+ 1861,
+ 1861,
+ 1861,
+ 1861,
+ 1861,
+ 1851,
+ 1851,
+ 1851,
+ 1851,
+ 1851,
+ 2292,
+ 2292,
+ 2292,
+ 2292,
+ 2292,
+ 2333,
+ 2333,
+ 2333,
+ 2333,
+ 2333,
+ 1857,
+ 1857,
+ 1857,
+ 1857,
+ 2823,
+ 2822,
+ 2790,
+ 2204,
+ 2784,
+ 2202,
+ 2700,
+ 2786,
+ 2788,
+ 2789,
+ 2201,
+ 2796,
+ 2787,
+ 2177,
+ 2791,
+ 2797,
+ 2354,
+ 2183,
+ 2203,
+ 2355,
+ 2206,
+ 2341,
+ 2217,
+ 2790,
+ 2204,
+ 2784,
+ 2202,
+ 2700,
+ 2786,
+ 2788,
+ 2789,
+ 2201,
+ 2796,
+ 2787,
+ 2177,
+ 2791,
+ 2797,
+ 2354,
+ 2183,
+ 2203,
+ 2355,
+ 2206,
+ 2341,
+ 2217,
+ 2816,
+ 2824,
+ 2181,
+ 2179,
+ 2205,
+ 2209,
+ 2219,
+ 2185,
+ 2178,
+ 2176,
+ 2208,
+ 2218,
+ 2182,
+ 2818,
+ 2353,
+ 2817,
+ 2529,
+ 2526,
+ 2527,
+ 2528,
+ 2220,
+ 2529,
+ 2526,
+ 2527,
+ 2528,
+ 2220,
+ 3873,
+ 3873,
+ 3873,
+ 3873,
+ 3873,
+ 2529,
+ 2526,
+ 2527,
+ 2528,
+ 2220,
+ 3062,
+ 3062,
+ 3056,
+ 3056,
+ 3060,
+ 3060,
+ 3057,
+ 3057,
+ 3061,
+ 3061,
+ 3058,
+ 3058,
+ 3748,
+ 3748,
+ 3747,
+ 3747,
+ 3744,
+ 4005,
+ 4005,
+ 4035,
+ 4035,
+ 4027,
+ 4027,
+ 4039,
+ 4039,
+ 4029,
+ 4029,
+ 4143,
+ 4143,
+ 2184,
+ 2146,
+ 2215,
+ 4659,
+ 4659,
+ 4916,
+ 4916,
+ 4925,
+ 4925,
+ 4926,
+ 4929,
+ 4960,
+ 4928,
+ 4927,
+ 4926,
+ 4929,
+ 4960,
+ 4928,
+ 4927,
+ 5143,
+ 5209,
+ 5209,
+ 4707,
+ 4707,
+ 4864,
+ 4864,
+ 4863,
+ 4863,
+ 4861,
+ 4861,
+ 4862,
+ 4862,
+ 5166,
+ 5166,
+ 5100,
+ 5100,
+ 5101,
+ 5101,
+ 2210,
+ 1851,
+ 2078,
+ 2790,
+ 2204,
+ 2784,
+ 2202,
+ 2700,
+ 2786,
+ 2788,
+ 2789,
+ 2201,
+ 2796,
+ 2787,
+ 2177,
+ 2791,
+ 2797,
+ 2354,
+ 2183,
+ 2203,
+ 2355,
+ 2206,
+ 2341,
+ 2217,
+ 5589,
+ 5506,
+ 5505,
+ 5872,
+ 5871,
+ 5870,
+ 5168,
+ 5168,
+ 5819,
+ 5820,
+ 5801,
+ 5801,
+ 5801,
+ 5801,
+ 5801,
+ 5359,
+ 5359,
+ 5982,
+ 5982,
+ 5978,
+ 5978,
+ 5979,
+ 5979,
+ 5981,
+ 5981,
+ 5980,
+ 5980,
+ 6114,
+ 6114,
+ 6113,
+ 6113,
+ 6484,
+ 6484,
+ 6488,
+ 6488,
+ 6489,
+ 6659,
+ 6659,
+ 6661,
+ 6661,
+ 6664,
+ 6664,
+ 6665,
+ 6662,
+ 6663,
+ 6663,
+ 6873,
+ 6873,
+ 6871,
+ 6872,
+ 7269,
+ 7269,
+ 7273,
+ 7273,
+ 7273,
+ 7273,
+ 7273,
+ 7273,
+ 7273,
+ 7273,
+ 7273,
+ 7273,
+ 7291,
+ 7291,
+ 7310,
+ 7310,
+ 7207,
+ 7207,
+ 7209,
+ 7209,
+ 7208,
+ 7208,
+ 7211,
+ 7211,
+ 7210,
+ 7210,
+ 7311,
+ 7311,
+ 7588,
+ 7574,
+ 7591,
+ 7590,
+ 7589,
+ 7588,
+ 7574,
+ 7591,
+ 7590,
+ 7589,
+ 7576,
+ 7573,
+ 7573,
+ 7572,
+ 7575,
+ 7577,
+ 7577,
+ 7731,
+ 7731,
+ 7732,
+ 7732,
+ 8286,
+ 8286,
+ 8440,
+ 8440,
+ 8439,
+ 8438,
+ 8883,
+ 8883,
+ 8882,
+ 8882,
+ 8881,
+ 8881,
+ 8880,
+ 8880,
+ 8873,
+ 8884,
+ 8884,
+ 8885,
+ 8886,
+ 7577,
+ 9032,
+ 9032,
+ 9031,
+ 9031,
+ 9033,
+ 9033,
+ 9034,
+ 9034,
+ 9035,
+ 9035,
+ 8946,
+ 9247,
+ 9248,
+ 9249,
+ 3574,
+ 3574,
+ 3558,
+ 9875,
+ 9876,
+ 9881,
+ 9882,
+ 9877,
+ 9877,
+ 9880,
+ 10005,
+ 10004,
+ 10003,
+ 10003,
+ 10445,
+ 10445,
+ 10834,
+ 10834,
+ 10837,
+ 10837,
+ 10837,
+ 10833,
+ 10833,
+ 9878,
+ 9878,
+ 11071,
+ 11071,
+ 11072,
+ 11072,
+ 11073,
+ 11073,
+ 11074,
+ 11074,
+ 11075,
+ 11075,
+ 11070,
+ 11070,
+ 11460,
+ 3061,
+ 3061,
+ 11529,
+ 11530,
+ 11532,
+ 11531,
+ 11533,
+ 11538,
+ 11537,
+ 11538,
+ 11537,
+ 11536,
+ 11535,
+ 11550,
+ 11549,
+ 11534,
+ 11539,
+ 11540,
+ 11541,
+ 11542,
+ 11543,
+ 11539,
+ 11540,
+ 11541,
+ 11542,
+ 11543,
+ 11545,
+ 11546,
+ 11563,
+ 11545,
+ 11546,
+ 11563,
+ 11544,
+ 11562,
+ 11544,
+ 11562,
+ 11642,
+ 11642,
+ 11791,
+ 11791,
+ 11787,
+ 11787,
+ 11790,
+ 11790,
+ 11788,
+ 11788,
+ 11789,
+ 11789,
+ 11775,
+ 11775,
+ 11776,
+ 11806,
+ 11806,
+ 11786,
+ 11960,
+ 11960,
+ 12015,
+ 12015,
+ 11949,
+ 11949,
+ 11950,
+ 11950,
+ 11951,
+ 11951,
+ 11952,
+ 11952,
+ 11953,
+ 11953,
+ 11948,
+ 11948,
+ 12067,
+ 12067,
+ 11774,
+ 11774,
+ 11773,
+ 11773,
+ 12098,
+ 12098,
+ 12100,
+ 12099,
+ 12136,
+ 12137,
+ 12132,
+ 12132,
+ 12131,
+ 12131,
+ 12424,
+ 12424,
+ 12138,
+ 12138,
+ 12134,
+ 12135,
+ 12648,
+ 12648,
+ 12649,
+ 12649,
+ 12650,
+ 12650,
+ 12651,
+ 12651,
+ 12647,
+ 12647,
+ 12775,
+ 12781,
+ 12782,
+ 12780,
+ 12776,
+ 12774,
+ 12774,
+ 12805,
+ 12805,
+ 12806,
+ 12807,
+ 12794,
+ 12794,
+ 12868,
+ 12878,
+ 12878,
+ 12888,
+ 12888,
+ 13148,
+ 13137,
+ 13138,
+ 13136,
+ 13133,
+ 13133,
+ 13134,
+ 13134,
+ 13135,
+ 13135,
+ 13396,
+ 13396,
+ 13396,
+ 13396,
+ 13396,
+ 13315,
+ 13315,
+ 13568,
+ 13568,
+ 13567,
+ 13567,
+ 13688,
+ 13688,
+ 13749,
+ 13749,
+ 13947,
+ 13947,
+ 13948,
+ 13949,
+ 14421,
+ 14420,
+ 14257,
+ 14257,
+ 14296,
+ 4349,
+ 4860,
+ 6065,
+ 5085,
+ 5304,
+ 6955,
+ 5190,
+ 7435,
+ 5311,
+ 6924,
+ 6051,
+ 6430,
+ 6030,
+ 14295,
+ 14294,
+ 14303,
+ 14303,
+ 14312,
+ 14312,
+ 14399,
+ 14399,
+ 14419,
+ 14398,
+ 14405,
+ 14405,
+ 14404,
+ 14404,
+ 14403,
+ 14403,
+ 14402,
+ 14402,
+ 14401,
+ 14401,
+ 14400,
+ 14400,
+ 14660,
+ 14660,
+ 14749,
+ 14749,
+ 14749,
+ 14829,
+ 14829,
+ 14828,
+ 14827,
+ 14980,
+ 15002,
+ 15002,
+ 15111,
+ 15149,
+ 15149,
+ 15150,
+ 15150,
+ 15151,
+ 15191,
+ 15191,
+ 15190,
+ 15190,
+ 15189,
+ 15189,
+ 15187,
+ 15187,
+ 15188,
+ 15188,
+ 15442,
+ 15442,
+ 15603,
+ 15603,
+ 15441,
+ 15441,
+ 15853,
+ 15853,
+ 16015,
+ 15597,
+ 15597,
+ 15598,
+ 15598,
+ 15647,
+ 15650,
+ 15649,
+ 15646,
+ 15648,
+ 15647,
+ 15650,
+ 15649,
+ 15646,
+ 15648,
+ 15601,
+ 15621,
+ 15652,
+ 15651,
+ 15602,
+ 15600,
+ 15600,
+ 15622,
+ 15622,
+ 16021,
+ 16021,
+ 16034,
+ 16034,
+ 16036,
+ 16035,
+ 16035,
+ 16215,
+ 16215,
+ 16216,
+ 16216,
+ 16387,
+ 16387,
+ 16375,
+ 16375,
+ 16372,
+ 16372,
+ 16538,
+ 16617,
+ 16617,
+ 16616,
+ 16616,
+ 16655,
+ 16655,
+ 16656,
+ 16656,
+ 14303,
+ 14312,
+ 16658,
+ 14294,
+ 16729,
+ 16729,
+ 16728,
+ 16728,
+ 16726,
+ 16726,
+ 16863,
+ 16960,
+ 16960,
+ 16961,
+ 16961,
+ 16962,
+ 16962,
+ 16963,
+ 16963,
+ 16964,
+ 16964,
+ 16965,
+ 16965,
+ 16966,
+ 16966,
+ 17123,
+ 17127,
+ 17125,
+ 17126,
+ 17124,
+ 17920,
+ 17922,
+ 17921,
+ 17923,
+ 17349,
+ 17347,
+ 17348,
+ 17364,
+ 17363,
+ 17350,
+ 17475,
+ 17475,
+ 17474,
+ 17474,
+ 17476,
+ 17476,
+ 18004,
+ 18004,
+ 18182,
+ 18182,
+ 18185,
+ 18185,
+ 18183,
+ 18183,
+ 18184,
+ 18184,
+ 18187,
+ 18187,
+ 18567,
+ 18567,
+ 18769,
+ 18769,
+ 18770,
+ 18772,
+ 18771,
+ 18794,
+ 18794,
+ 18812,
+ 18812,
+ 18811,
+ 18811,
+ 19171,
+ 19171,
+ 19172,
+ 19172,
+ 19173,
+ 19286,
+ 19287,
+ 19288,
+ 19289,
+ 19289,
+ 19296,
+ 19297,
+ 19298,
+ 19299,
+ 19300,
+ 19290,
+ 19291,
+ 19292,
+ 19293,
+ 19294,
+ 19295,
+ 26358,
+ 26358,
+ 19416,
+ 19416,
+ 19417,
+ 19417,
+ 19418,
+ 19426,
+ 19426,
+ 19810,
+ 19810,
+ 19812,
+ 19812,
+ 19811,
+ 19811,
+ 19805,
+ 19805,
+ 19806,
+ 19806,
+ 19904,
+ 19904,
+ 19906,
+ 19905,
+ 20242,
+ 20242,
+ 20489,
+ 20488,
+ 20154,
+ 20154,
+ 20480,
+ 20480,
+ 20495,
+ 20495,
+ 20292,
+ 20292,
+ 20833,
+ 20391,
+ 20391,
+ 20793,
+ 21528,
+ 21529,
+ 21536,
+ 21536,
+ 21543,
+ 21543,
+ 21540,
+ 21540,
+ 21539,
+ 21539,
+ 21541,
+ 21541,
+ 21542,
+ 21542,
+ 21921,
+ 21921,
+ 21138,
+ 21138,
+ 22177,
+ 22117,
+ 22419,
+ 22654,
+ 22655,
+ 22655,
+ 22656,
+ 22657,
+ 22658,
+ 19289,
+ 22436,
+ 22436,
+ 22986,
+ 22983,
+ 22987,
+ 23062,
+ 23062,
+ 22820,
+ 22820,
+ 23128,
+ 23145,
+ 23145,
+ 23380,
+ 23380,
+ 23378,
+ 23378,
+ 23377,
+ 23377,
+ 23379,
+ 23379,
+ 23332,
+ 23332,
+ 23265,
+ 23265,
+ 23690,
+ 23691,
+ 24045,
+ 24045,
+ 24017,
+ 24017,
+ 24018,
+ 24018,
+ 24036,
+ 24162,
+ 24162,
+ 24305,
+ 24306,
+ 23506,
+ 23506,
+ 24564,
+ 24564,
+ 24703,
+ 24703,
+ 24701,
+ 24701,
+ 24699,
+ 24699,
+ 24702,
+ 24702,
+ 24807,
+ 24807,
+ 25016,
+ 25017,
+ 25018,
+ 25019,
+ 25098,
+ 25098,
+ 25133,
+ 25133,
+ 25318,
+ 25336,
+ 25335,
+ 25317,
+ 25316,
+ 25315,
+ 25314,
+ 24998,
+ 24978,
+ 25323,
+ 25330,
+ 25329,
+ 25319,
+ 25320,
+ 25321,
+ 25321,
+ 25321,
+ 25321,
+ 25321,
+ 25313,
+ 25313,
+ 25365,
+ 25365,
+ 25111,
+ 25111,
+ 25488,
+ 25489,
+ 25751,
+ 26489,
+ 26489,
+ 26490,
+ 26833,
+ 26833,
+ 26833,
+ 26833,
+ 26833,
+ 26487,
+ 26487,
+ 26627,
+ 26627,
+ 26464,
+ 26464,
+ 26720,
+ 26720,
+ 26797,
+ 26797,
+ 26850,
+ 26850,
+ 26911,
+ 26911,
+ 26913,
+ 26912,
+ 26912,
+ 27334,
+ 27334,
+ 27466,
+ 27634,
+ 27634,
+ 27635,
+ 27636,
+ 27637,
+ 27620,
+ 27620,
+ 27622,
+ 27622,
+ 27624,
+ 28647,
+ 28647,
+ 28650,
+ 29679,
+ 28723,
+ 28723,
+ 28761,
+ 28761,
+ 28759,
+ 28759,
+ 28756,
+ 28756,
+ 28754,
+ 28754,
+ 28771,
+ 28771,
+ 29445,
+ 29445,
+ 29446,
+ 29446,
+ 29621,
+ 29621,
+ 29622,
+ 29622,
+ 29651,
+ 29651,
+ 29787,
+ 29787,
+ 29915,
+ 29915,
+ 29916,
+ 29916,
+ 29917,
+ 30405,
+ 30405,
+ 30529,
+ 30529,
+ 30530,
+ 30530,
+ 30531,
+ 30531,
+ 30558,
+ 30556,
+ 30554,
+ 30555,
+ 30553,
+ 30552,
+ 30551,
+ 30550,
+ 30771,
+ 30771,
+ 30770,
+ 30770,
+ 30772,
+ 30738,
+ 30738,
+ 30733,
+ 30733,
+ 30734,
+ 30734,
+ 30737,
+ 30737,
+ 30736,
+ 30736,
+ 30744,
+ 30744,
+ 30798,
+ 30798,
+ 30797,
+ 30797,
+ 30796,
+ 30796,
+ 32539,
+ 32539,
+ 33121,
+ 33121,
+ 33122,
+ 33122,
+ 33123,
+ 33396,
+ 33396,
+ 33488,
+ 33488,
+ 33489,
+ 33489,
+ 33490,
+ 33490,
+ 33650,
+ 33650,
+ 33851,
+ 33851,
+ 33850,
+ 33850,
+ 33852,
+ 11949,
+ 11949,
+ 11950,
+ 11950,
+ 11951,
+ 11951,
+ 12878,
+ 12878,
+ 33767,
+ 33767,
+ 33765,
+ 33765,
+ 33764,
+ 33764,
+ 33763,
+ 33763,
+ 33762,
+ 33762,
+ 33766,
+ 33766,
+ 34316,
+ 34316,
+ 34499,
+ 34496,
+ 34497,
+ 34498,
+ 34493,
+ 34493,
+ 34494,
+ 34494,
+ 34495,
+ 34495,
+ 34757,
+ 34756,
+ 34755,
+ 34754,
+ 34753,
+ 34752,
+ 34751,
+ 34750,
+ 34748,
+ 34749,
+ 34747,
+ 34747,
+ 34746,
+ 34746,
+ 35105,
+ 35105,
+ 35076,
+ 35076,
+ 35077,
+ 35077,
+ 35203,
+ 35203,
+ 35202,
+ 35202,
+ 35201,
+ 35201,
+ 11952,
+ 11952,
+ 12648,
+ 12648,
+ 11953,
+ 11953,
+ 35056,
+ 35056,
+ 1861,
+ 35411,
+ 35411,
+ 35305,
+ 35305,
+ 35306,
+ 35306,
+ 35374,
+ 35374,
+ 35412,
+ 35412,
+ 35281,
+ 35281,
+ 35516,
+ 35516,
+ 35525,
+ 35525,
+ 35526,
+ 35778,
+ 35778,
+ 36035,
+ 36035,
+ 35904,
+ 35904,
+ 35906,
+ 35906,
+ 35907,
+ 12650,
+ 12650,
+ 12649,
+ 12649,
+ 12651,
+ 12651,
+ 36068,
+ 36068,
+ 36743,
+ 36744,
+ 36742,
+ 36745,
+ 36721,
+ 36721,
+ 36720,
+ 36720,
+ 37233,
+ 37237,
+ 37194,
+ 37195,
+ 37196,
+ 37154,
+ 37079,
+ 37079,
+ 37122,
+ 37122,
+ 37082,
+ 37082,
+ 37051,
+ 37051,
+ 37052,
+ 37052,
+ 37125,
+ 37125,
+ 37427,
+ 37427,
+ 37426,
+ 37426,
+ 37431,
+ 37432,
+ 37432,
+ 38048,
+ 38048,
+ 38049,
+ 38049,
+ 38050,
+ 38051,
+ 38339,
+ 38341,
+ 38342,
+ 38236,
+ 38236,
+ 38724,
+ 38724,
+ 38723,
+ 38723,
+ 38722,
+ 38722,
+ 38846,
+ 38846,
+ 38773,
+ 38773,
+ 38772,
+ 38772,
+ 38768,
+ 38768,
+ 38771,
+ 38771,
+ 38770,
+ 38770,
+ 38769,
+ 38769,
+ 39054,
+ 38884,
+ 38882,
+ 38883,
+ 38885,
+ 39075,
+ 39075,
+ 39525,
+ 39525,
+ 39527,
+ 39527,
+ 39526,
+ 39529,
+ 39529,
+ 39530,
+ 39530,
+ 40554,
+ 40554,
+ 41278,
+ 41278,
+ 41926,
+ 41926,
+ 41931,
+ 41931,
+ 41932,
+ 41932,
+ 43619,
+ 43619,
+ 43743,
+ 43743,
+ 43751,
+ 43751,
+ 43752,
+ 43752,
+ 43909,
+ 43909,
+ 43907,
+ 43907,
+ 43908,
+ 43908,
+ 43906,
+ 43906,
+ 43894,
+ 43894,
+ 43893,
+ 43893,
+ 44750,
+ 44750,
+ 44751,
+ 44752,
+ 44762,
+ 44762,
+ 44750,
+ 44750,
+ 44751,
+ 44752,
+ 44762,
+ 44762,
+ 44766,
+ 44766,
+ 44770,
+ 44768,
+ 44768,
+ 45630,
+ 45629,
+ 45628,
+ 45561,
+ 45627,
+ 45634,
+ 45633,
+ 45632,
+ 45636,
+ 45635,
+ 45637,
+ 45560,
+ 45767,
+ 45767,
+ 45766,
+ 45766,
+ 45785,
+ 45785,
+ 45836,
+ 45711,
+ 45711,
+ 45758,
+ 45758,
+ 45759,
+ 45759,
+ 45756,
+ 45756,
+ 45757,
+ 45757,
+ 45851,
+ 45851,
+ 45905,
+ 45905,
+ 46259,
+ 46259,
+ 46330,
+ 46330,
+ 46369,
+ 46369,
+ 46657,
+ 46657,
+ 46661,
+ 46661,
+ 46662,
+ 46662,
+ 2017,
+ 2019,
+ 2020,
+ 46852,
+ 46852,
+ 47137,
+ 47139,
+ 47292,
+ 47292,
+ 47253,
+ 47253,
+ 47254,
+ 47254,
+ 47299,
+ 47299,
+ 47302,
+ 47356,
+ 47356,
+ 47362,
+ 47362,
+ 47338,
+ 47338,
+ 47322,
+ 47322,
+ 47321,
+ 47321,
+ 5166,
+ 47389,
+ 48078,
+ 48078,
+ 48077,
+ 48076,
+ 48222,
+ 48222,
+ 48689,
+ 48689,
+ 48806,
+ 48804,
+ 49865,
+ 49865,
+ 49866,
+ 49867,
+ 49836,
+ 49836,
+];
\ No newline at end of file
diff --git a/common/data/json.html b/common/data/json.html
new file mode 100644
index 000000000..091e5751c
--- /dev/null
+++ b/common/data/json.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/data/matchers.js b/common/data/matchers.js
index e67dbab74..1159b316c 100644
--- a/common/data/matchers.js
+++ b/common/data/matchers.js
@@ -11,7 +11,7 @@ window.matchers = [
{
name: 'Class-boosting captains',
target: 'captain',
- matcher: /Boosts (ATK|HP|RCV|ATK and HP|ATK and RCV|HP and RCV|ATK, HP and RCV) of[^,]+(Slasher|Striker|Fighter|Shooter|Freedom|Knowledge|Tough|Ambition)/i
+ matcher: /Boosts (ATK|HP|RCV|ATK and HP|ATK and RCV|HP and RCV|ATK, HP and RCV) of[^,]+(Slasher|Striker|Fighter|Shooter|Free Spirit|Cerebral|Powerhouse|Driven)/i
},
{
@@ -78,7 +78,14 @@ window.matchers = [
{
name: 'Positional captains',
target: 'captain',
- matcher: /(after scoring|following a chain)/i
+ matcher: /(after scoring|following a chain|perfect|great|good)/i
+ },
+
+ {
+ name: '"Beneficial" Orb captains',
+ target: 'captain',
+ matcher: /"beneficial/i
+ //matcher: /Makes ((STR|DEX|QCK|PSY|INT|\[RCV\]|\[TND\])|((STR|DEX|QCK|PSY|INT|\[RCV\]|\[TND\]) and (STR|DEX|QCK|PSY|INT|\[RCV\]|\[TND\]))) orbs "beneficial"/i
},
{
@@ -116,6 +123,12 @@ window.matchers = [
target: 'captain',
matcher: /Protects from defeat/i
},
+
+ {
+ name: 'End of Turn Damage Dealer',
+ target: 'captain',
+ matcher: /deals.+end of each turn/i
+ },
/* * * * * Specials * * * * */
@@ -128,7 +141,7 @@ window.matchers = [
{
name: 'Class-boosting specials',
target: 'special',
- matcher: /Boosts (ATK|HP|RCV|ATK and HP|ATK and RCV|HP and RCV|ATK, HP and RCV) of[^,]+(Slasher|Striker|Fighter|Shooter|Freedom|Knowledge|Tough|Ambition)/i
+ matcher: /Boosts (ATK|HP|RCV|ATK and HP|ATK and RCV|HP and RCV|ATK, HP and RCV) of[^,]+(Slasher|Striker|Fighter|Shooter|Free Spirit|Cerebral|Powerhouse|Driven)/i
},
{
@@ -160,6 +173,18 @@ window.matchers = [
target: 'special',
matcher: /(Following the activation.+boosts.+ATK|If during that turn.+boosts.+ATK)/i
},
+
+ {
+ name: 'Color Affinity boosters',
+ target: 'special',
+ matcher: /Boosts the Color Affinity/i
+ },
+
+ {
+ name: 'RCV boosters',
+ target: 'special',
+ matcher: /Boosts RCV/i
+ },
{
name: 'Orb lockers',
@@ -182,9 +207,9 @@ window.matchers = [
{
name: 'Orb controllers',
target: 'special',
- matcher: /(Changes.+orbs)/i
+ matcher: /(Changes.+(orb|orbs))/i
},
-
+
{
name: 'Full-board orb controllers',
target: 'special',
@@ -208,6 +233,13 @@ window.matchers = [
target: 'special',
matcher: /switches orbs/i
},
+
+ {
+ name: 'Orb matchers',
+ target: 'special',
+ matcher: /(Changes.+(orb|orbs))[^,]+Matching/i,
+ include: [ 1036, 1037 ]
+ },
{
name: 'Slot emptiers',
@@ -226,6 +258,12 @@ window.matchers = [
target: 'special',
matcher: /delays/i
},
+
+ {
+ name: 'Single-target damage dealer',
+ target: 'special',
+ matcher: /deals.+to one enemy/i
+ },
{
name: 'Multi-target damage dealers',
@@ -290,25 +328,31 @@ window.matchers = [
{
name: 'Bind reducers',
target: 'special',
- matcher: /reduces.+bind.+duration/i,
+ matcher: /(reduces|removes).+bind.+duration/i
},
+ {
+ name: 'Despair reducers',
+ target: 'special',
+ matcher: /(reduces|removes).+despair.+duration/i
+ },
+
{
name: 'Silence reducers',
target: 'special',
- matcher: /reduces.+silence.+duration/i,
+ matcher: /(reduces|removes).+silence.+duration/i
},
{
name: 'Block orb removers',
target: 'special',
- matcher: /(empties.+with \[BLOCK\]|changes.+\[BLOCK\].+into|including.+\[BLOCK\])/i,
+ matcher: /(empties.+with \[BLOCK\]|changes.+\[BLOCK\].+into|including.+\[BLOCK\])/i
},
{
name: 'Blindness removers',
target: 'special',
- matcher: /removes blindness/i
+ matcher: /(reduces|removes).+blindness/i
},
{
@@ -332,13 +376,69 @@ window.matchers = [
{
name: 'Poison removers',
target: 'special',
- matcher: /Removes poison/i
+ matcher: /removes.+poison/i
},
{
name: 'Zombies',
target: 'special',
matcher: /Protects from defeat/i
- }
+ },
+
+ {
+ name: 'Special cooldown reducer',
+ target: 'special',
+ matcher: /reduces special cooldown/i
+ },
+
+ {
+ name: 'Paralysis reducers',
+ target: 'special',
+ matcher: /(reduces|removes).+Paralysis/i
+ },
+
+ {
+ name: 'Chain Boosters',
+ target: 'special',
+ matcher: /Adds.+to Chain/i
+ },
+
+ {
+ name: 'Chain Lockers',
+ target: 'special',
+ matcher: /Locks the chain multiplier/i
+ },
+
+ {
+ name: '"Beneficial" Orb Enablers',
+ target: 'special',
+ matcher: /Makes.+ orbs "beneficial"/i
+ },
+
+ /* * * * * Sailor * * * * */
+
+ {
+ name: 'Has Sailor Ability',
+ target: 'sailor',
+ matcher: /\S/i
+ },
+
+ {
+ name: 'Type-boosting sailors',
+ target: 'sailor',
+ matcher: /Boosts (ATK|HP|RCV|ATK and HP|ATK and RCV|HP and RCV|ATK, HP and RCV) of[^,]+(STR|DEX|QCK|PSY|INT)\b/i
+ },
+
+ {
+ name: 'Class-boosting sailors',
+ target: 'sailor',
+ matcher: /Boosts (ATK|HP|RCV|ATK and HP|ATK and RCV|HP and RCV|ATK, HP and RCV) of[^,]+(Slasher|Striker|Fighter|Shooter|Free Spirit|Cerebral|Powerhouse|Driven)/i
+ },
+
+ {
+ name: '"Beneficial" Orb sailors',
+ target: 'sailor',
+ matcher: /Makes (\[STR\]|\[DEX\]|\[QCK\]|\[PSY\]|\[INT\]|\[RCV\]|\[TND\]) orbs "beneficial"/i
+ },
];
diff --git a/common/data/ships.js b/common/data/ships.js
index 04b900f6a..200e8e412 100644
--- a/common/data/ships.js
+++ b/common/data/ships.js
@@ -77,9 +77,9 @@ window.ships = [
{ // 5
name: 'Miss Love Duck',
thumb: 'ship_0006_c.png',
- description: 'Reduces damage received by 10%, boosts ATK of each character by 100 units',
+ description: 'Reduces damage received by 10%, boosts ATK of Striker characters by 100 units',
atkStatic: function(p) {
- return p.boatLevel < 7 ? 0 : [ 50, 50, 50, 100 ][p.boatLevel - 7];
+ return !p.unit.class.has('Striker') ? 0 : [ 0, 0, 0, 0, 0, 0, 50, 50, 50, 100 ][p.boatLevel -1];
}
},
@@ -134,7 +134,7 @@ window.ships = [
{ // 10
name: 'Aokiji\'s Bike',
- thumb: null,
+ thumb: 'ship_0011_c1.png',
description: 'Boosts ATK and HP of Striker characters by 1.5x, greatly reduces the appearance of RCV orbs',
atk: function(p) {
return !p.unit.class.has('Striker') ? 1 :
@@ -148,7 +148,7 @@ window.ships = [
{ // 11
name: 'Ace\'s Striker',
- thumb: null,
+ thumb: 'ship_0012_c1.png',
description: 'Boosts ATK of Shooter characters by 1.5x and their HP by 1.3x, reduces cooldown of all specials by 1 turn at the start of the fight',
atk: function(p) {
return !p.unit.class.has('Shooter') ? 1 :
@@ -176,6 +176,149 @@ window.ships = [
atk: function(p) {
return [ 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.5 ][p.boatLevel - 1];
}
- }
+ },
+
+ { //14
+ name: 'Kuja Pirate Ship',
+ thumb: 'ship_0015_c1.png',
+ description: 'Boosts ATK of Free Spirit characters by 1.5x and their HP by 1.35x, reduces the HP of everyone else by 99%. Special: heals the crew by 6,500HP (cooldown: 15 turns).',
+ atk: function(p) {
+ return !p.unit.class.has('Free Spirit') ? 1 :
+ [ 1.2, 1.2, 1.2, 1.2, 1.2, 1.3, 1.3, 1.3, 1.4, 1.5 ][p.boatLevel - 1];
+ },
+ hp: function(p) {
+ return !p.unit.class.has('Free Spirit') ? 0.01 :
+ [ 1.2, 1.2, 1.2, 1.2, 1.2, 1.3, 1.3, 1.3, 1.3, 1.35 ][p.boatLevel - 1];
+ }
+ },
+
+ { //15
+ name: 'Ark Maxim',
+ thumb: 'ship_0016_c1.png',
+ description: 'Boosts ATK of QCK and PSY characters by 1.5x and their HP by 1.2x. Special: Deals 56560 fixed Damage to all enemies (cooldown: 17 Turns)',
+ atk: function(p) {
+ return p.unit.type == "PSY" || p.unit.type == "QCK" ? [ 1.2, 1.2, 1.2, 1.2, 1.2, 1.3, 1.3, 1.3, 1.4, 1.5 ][p.boatLevel - 1] : 1;
+ },
+ hp: function(p) {
+ return p.unit.type == "PSY" || p.unit.type == "QCK" ? [ 1, 1, 1, 1, 1, 1.1, 1.1, 1.1, 1.1, 1.2 ][p.boatLevel - 1] : 1;
+ }
+ },
+
+ { // 16
+ name: 'Red Force',
+ thumb: 'ship_0017_c1.png',
+ description: 'Boosts ATK of Cerebral characters by 1.5x and their HP by 1.35x, Increased Orb Rate for Cerebral characters.',
+ atk: function(p) {
+ return !p.unit.class.has('Cerebral') ? 1 : [ 1.0, 1.2, 1.2, 1.2, 1.25, 1.3, 1.4, 1.4, 1.4, 1.5 ][p.boatLevel - 1];
+ },
+ hp: function(p) {
+ return !p.unit.class.has('Cerebral') ? 1 : [ 1.1, 1.1, 1.2, 1.2, 1.2, 1.2, 1.2, 1.3, 1.3, 1.35 ][p.boatLevel - 1];
+ }
+ },
+
+ { // 17
+ name: '2nd Anniversary Thousand Sunny',
+ thumb: 'ship_0018_c1.png',
+ description: 'Boosts ATK by 1.2x.',
+ atk: function(p) { return 1.2; },
+ },
+
+ { // 18
+ name: 'Sun Pirates Ship',
+ thumb: 'ship_0019_c.png',
+ description: 'Boosts ATK and HP of Fighter characters depending on the number of Fighters on the team. Sharply reduces ATK and HP of non-Fighter units.',
+ atk: function(p) {
+ return !p.unit.class.has('Fighter') ? .05 :
+ [ p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.01 : p.classCount.Fighter == 3 ? 1.02 : p.classCount.Fighter == 4 ? 1.03 : p.classCount.Fighter == 5 ? 1.04 : p.classCount.Fighter == 6 ? 1.05 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.02 : p.classCount.Fighter == 3 ? 1.03 : p.classCount.Fighter == 4 ? 1.04 : p.classCount.Fighter == 5 ? 1.05 : p.classCount.Fighter == 6 ? 1.1 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.02 : p.classCount.Fighter == 3 ? 1.03 : p.classCount.Fighter == 4 ? 1.05 : p.classCount.Fighter == 5 ? 1.1 : p.classCount.Fighter == 6 ? 1.15 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.02 : p.classCount.Fighter == 3 ? 1.05 : p.classCount.Fighter == 4 ? 1.1 : p.classCount.Fighter == 5 ? 1.15 : p.classCount.Fighter == 6 ? 1.2 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.05 : p.classCount.Fighter == 3 ? 1.1 : p.classCount.Fighter == 4 ? 1.15 : p.classCount.Fighter == 5 ? 1.2 : p.classCount.Fighter == 6 ? 1.25 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.05 : p.classCount.Fighter == 3 ? 1.1 : p.classCount.Fighter == 4 ? 1.15 : p.classCount.Fighter == 5 ? 1.2 : p.classCount.Fighter == 6 ? 1.3 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.1 : p.classCount.Fighter == 3 ? 1.15 : p.classCount.Fighter == 4 ? 1.2 : p.classCount.Fighter == 5 ? 1.25 : p.classCount.Fighter == 6 ? 1.35 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.1 : p.classCount.Fighter == 3 ? 1.15 : p.classCount.Fighter == 4 ? 1.2 : p.classCount.Fighter == 5 ? 1.3 : p.classCount.Fighter == 6 ? 1.4 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.1 : p.classCount.Fighter == 3 ? 1.15 : p.classCount.Fighter == 4 ? 1.2 : p.classCount.Fighter == 5 ? 1.3 : p.classCount.Fighter == 6 ? 1.45 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.1 : p.classCount.Fighter == 3 ? 1.2 : p.classCount.Fighter == 4 ? 1.3 : p.classCount.Fighter == 5 ? 1.4 : p.classCount.Fighter == 6 ? 1.5 : 0][p.boatLevel - 1];
+ },
+ hp: function(p) {
+ return !p.unit.class.has('Fighter') ? .05 :
+ [ p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.01 : p.classCount.Fighter == 3 ? 1.02 : p.classCount.Fighter == 4 ? 1.03 : p.classCount.Fighter == 5 ? 1.04 : p.classCount.Fighter == 6 ? 1.05 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.02 : p.classCount.Fighter == 3 ? 1.03 : p.classCount.Fighter == 4 ? 1.04 : p.classCount.Fighter == 5 ? 1.05 : p.classCount.Fighter == 6 ? 1.1 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.02 : p.classCount.Fighter == 3 ? 1.03 : p.classCount.Fighter == 4 ? 1.05 : p.classCount.Fighter == 5 ? 1.1 : p.classCount.Fighter == 6 ? 1.15 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.02 : p.classCount.Fighter == 3 ? 1.05 : p.classCount.Fighter == 4 ? 1.1 : p.classCount.Fighter == 5 ? 1.15 : p.classCount.Fighter == 6 ? 1.2 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.05 : p.classCount.Fighter == 3 ? 1.1 : p.classCount.Fighter == 4 ? 1.15 : p.classCount.Fighter == 5 ? 1.2 : p.classCount.Fighter == 6 ? 1.25 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.05 : p.classCount.Fighter == 3 ? 1.1 : p.classCount.Fighter == 4 ? 1.15 : p.classCount.Fighter == 5 ? 1.2 : p.classCount.Fighter == 6 ? 1.3 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.1 : p.classCount.Fighter == 3 ? 1.15 : p.classCount.Fighter == 4 ? 1.2 : p.classCount.Fighter == 5 ? 1.25 : p.classCount.Fighter == 6 ? 1.35 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.1 : p.classCount.Fighter == 3 ? 1.15 : p.classCount.Fighter == 4 ? 1.2 : p.classCount.Fighter == 5 ? 1.3 : p.classCount.Fighter == 6 ? 1.4 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.1 : p.classCount.Fighter == 3 ? 1.15 : p.classCount.Fighter == 4 ? 1.2 : p.classCount.Fighter == 5 ? 1.3 : p.classCount.Fighter == 6 ? 1.45 : 0, p.classCount.Fighter == 1 ? 1 : p.classCount.Fighter == 2 ? 1.1 : p.classCount.Fighter == 3 ? 1.2 : p.classCount.Fighter == 4 ? 1.3 : p.classCount.Fighter == 5 ? 1.4 : p.classCount.Fighter == 6 ? 1.5 : 0][p.boatLevel - 1];
+ }
+ },
+
+ { // 19
+ name: "Doflamingo Ship",
+ thumb: null,
+ description: 'Boosts ATK of Driven Characters by 1.5x and their HP by 1.35x. Makes Perfects easier to Hit for Driven characters. Special: Adds 0.2 to Chain (cooldown MAX: 15 Turns)',
+ atk: function(p) { return !p.unit.class.has('Driven') ? 1 : [ 1.2, 1.2, 1.3, 1.3, 1.3, 1.3, 1.4, 1.4, 1.4, 1.5][p.boatLevel - 1]},
+ hp: function(p) { return !p.unit.class.has('Driven') ? 1 : [ 1.1, 1.1, 1.1, 1.15, 1.2, 1.2, 1.2, 1.2, 1.2, 1.35][p.boatLevel - 1]}
+ },
+
+ { // 20
+ name: 'The Rocket Man',
+ thumb: null,
+ description: 'Boosts ATK of Powerhouse characters by 1.55x, and heals at the end of every turn for a variable amount depending on the number of Powerhouse characters on the team. (At MAX, heals 900 per turn with 6 Powerhouse characters) Sharply reduces HP of non-Powerhouse units. Special: Deals 99,999 typeless damage to one unit. (cooldown MAX: 17 Turns)',
+ atk: function(p) {
+ return !p.unit.class.has('Powerhouse') ? 1 : [ 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.4, 1.55 ][p.boatLevel - 1];
+ },
+ hp: function(p) {
+ return p.unit.class.has('Powerhouse') ? 1 : 0.01;
+ },
+ heal: function(p) {
+ return p.classCount.Powerhouse == 1 ? 1 : p.classCount.Powerhouse == 2 ? 10 : p.classCount.Powerhouse == 3 ? 20 : p.classCount.Powerhouse == 4 ? 30 : p.classCount.Powerhouse == 5 ? 100 : p.classCount.Powerhouse == 6 ? 900 : 0;
+ },
+
+ },
+
+ { // 21
+ name: 'Burning Whitebeard Ship',
+ thumb: null,
+ description: 'Boosts HP by 1.3x',
+ hp: function(p) {
+ return 1.3;
+ },
+ },
+
+ { // 22
+ name: 'Garp Ship',
+ thumb: null,
+ description: 'Boosts ATK of [STR] and [PSY] characters by 1.5x, and their HP by 1.25x',
+ atk: function(p) {
+ return p.unit.type == "PSY" || p.unit.type == "STR" ? [ 1.2, 1.25, 1.25, 1.3, 1.35, 1.35, 1.4, 1.4, 1.45, 1.5 ][p.boatLevel - 1] : 1;
+ },
+ hp: function(p) {
+ return p.unit.type == "PSY" || p.unit.type == "STR" ? [ 1.1, 1.1, 1.15, 1.15, 1.15, 1.2, 1.2, 1.25, 1.25, 1.25 ][p.boatLevel - 1] : 1;
+ },
+ },
+
+ { //23
+ name: 'Polar Tang',
+ thumb: null,
+ description: 'Boosts ATK of Slashers and Free Spirit characters by 1.5x and their HP by 1.25x. Special: Heals for 10k when low HP (cooldown MAX: 18 turns)',
+ atk: function(p) {
+ return !(p.unit.class.has('Slasher') || p.unit.class.has('Free Spirit')) ? 1 : [ 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.4, 1.4, 1.4, 1.5 ][p.boatLevel - 1];
+ },
+ hp: function(p) {
+ return !(p.unit.class.has('Slasher') || p.unit.class.has('Free Spirit')) ? 1 : [ 1.1, 1.1, 1.1, 1.1, 1.2, 1.2, 1.2, 1.2, 1.25, 1.25 ][p.boatLevel - 1];
+ },
+ },
+ { // 24
+ name: 'New Year\'s Big Top',
+ thumb: null,
+ description: 'Boosts ATK by 1.2x',
+ atk: function(p) {
+ return 1.2;
+ },
+ },
+ { // 25
+ name: 'Thousand Sunny: Coated',
+ thumb: null,
+ description: 'Boosts ATK by 1.5x. Special: reduces damage received by 50% for 1 turn (cooldown: 16 turns).',
+ atk: function(p) {
+ return [ 1.3, 1.3, 1.3, 1.3, 1.35, 1.35, 1.35, 1.4, 1.45, 1.5 ][p.boatLevel - 1];
+ }
+ },
+ { // 26
+ name: 'Kizaru\'s Cannonball',
+ thumb: null,
+ description: 'Boosts ATK of Shooter characters by 1.55x and their HP by 1.2x, reduces cooldown of all specials by 1 turn at the start of the fight. Special: Cuts the current HP of each enemy by 7% (cooldown: 15 turns).',
+ atk: function(p) {
+ return [ 1.2, 1.2, 1.3, 1.3, 1.3, 1.4, 1.4, 1.4, 1.4, 1.55 ][p.boatLevel - 1];
+ },
+ hp: function(p) {
+ return [ 1.1, 1.1, 1.1, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2 ][p.boatLevel - 1];
+ }
+ },
];
diff --git a/common/data/specials.js b/common/data/specials.js
index 38da34691..c2d28c05f 100644
--- a/common/data/specials.js
+++ b/common/data/specials.js
@@ -1,1036 +1,2060 @@
window.specials = {
- 18: {
- def: function(p) { return 0.5; }
- },
- 24: {
- def: function(p) { return 0.5; }
- },
- 34: {
- def: function(p) { return 0; }
- },
- 127: {
- def: function(p) { return 0.5; }
- },
- 137: {
- def: function(p) { return 0.5; }
- },
- 148: {
- def: function(p) { return 0.5; }
- },
- 158: {
- def: function(p) { return 0.5; }
- },
- 206: {
- def: function(p) { return 0.5; }
- },
- 209: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
- type: "type"
- },
- 210: {
- atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
- type: "type"
- },
- 222: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- type: "type"
- },
- 223: {
- atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
- type: "type"
- },
- 263: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 267: {
- def: function(p) { return 0.5; }
- },
- 275: {
- def: function(p) { return 0.5; }
- },
- 285: {
- def: function(p) { return 0.5; }
- },
- 295: {
- def: function(p) { return 0.5; }
- },
- 309: {
- def: function(p) { return 0.5; }
- },
- 310: {
- def: function(p) { return 0.5; }
- },
- 313: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
- type: "class"
- },
- 314: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
- type: "class"
- },
- 323: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 324: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 352: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; },
- type: "class"
- },
- 353: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; },
- type: "class"
- },
- 382: {
- def: function(p) { return 0.5; }
- },
- 385: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.25 : 1; },
- type: "class"
- },
- 386: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.25 : 1; },
- type: "class"
- },
- 391: {
- def: function(p) { return 0.2; }
- },
- 392: {
- def: function(p) { return 0.2; }
- },
- 395: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
- },
- 396: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
- },
- 399: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
- type: "type"
- },
- 400: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
- type: "type"
- },
- 401: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.25 : 1; },
- type: "class"
- },
- 402: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.25 : 1; },
- type: "class"
- },
- 404: {
- rcv: function(p) { return 2; }
- },
- 405: {
- rcv: function(p) { return 2; }
- },
- 406: {
- atk: function(p) { return 1.2; },
- type: "type"
- },
- 417: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 2); }
- },
- 418: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 2); }
- },
- 419: {
- def: function(p) { return 0.5; }
- },
- 423: {
- def: function(p) { return 0.5; }
- },
- 424: {
- def: function(p) { return 0.5; }
- },
- 426: {
- atk: function(p) { return p.unit.type == "STR" ? 1.05 : 1; },
- type: "type"
- },
- 429: {
- def: function(p) { return 0.5; }
- },
- 430: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 431: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 434: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
- },
- 450: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
- type: "class"
- },
- 451: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
- type: "class"
- },
- 454: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
- type: "type"
- },
- 455: {
- atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
- type: "type"
- },
- 458: {
- atk: function(p) { return 1.5; },
- type: "type"
- },
- 459: {
- atk: function(p) { return 1.5; },
- type: "type"
- },
- 461: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.25 : 1; },
- type: "class"
- },
- 462: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.25 : 1; },
- type: "class"
- },
- 465: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
- },
- 468: {
- rcv: function(p) { return 1.5; }
- },
- 470: {
- rcv: function(p) { return 1.5; }
- },
- 487: {
- atk: function(p) { return p.unit.type == "STR" ? 1.2 : 1; },
- type: "type"
- },
- 488: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; },
- type: "type"
- },
- 489: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
- type: "type"
- },
- 490: {
- atk: function(p) { return p.unit.type == "STR" ? 1.2 : 1; },
- type: "type"
- },
- 491: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; },
- type: "type"
- },
- 492: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
- type: "type"
- },
- 505: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.25 : 1; },
- type: "type"
- },
- 506: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.25 : 1; },
- type: "type"
- },
- 509: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
- type: "class"
- },
- 510: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
- type: "class"
- },
- 511: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.25 : 1; },
- type: "class"
- },
- 514: {
- def: function(p) { return 0.5; },
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
- type: "type"
- },
- 517: {
- atk: function(p) { return 1.05; },
- type: "type"
- },
- 518: {
- atk: function(p) { return 1.05; },
- type: "type"
- },
- 519: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
- type: "type"
- },
- 520: {
- atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
- type: "type"
- },
- 529: {
- def: function(p) { return 0; }
- },
- 530: {
- def: function(p) { return 0; }
- },
- 533: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 534: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 542: {
- rcv: function(p) { return 2; }
- },
- 545: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- type: "type"
- },
- 546: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- type: "type"
- },
- 549: {
- atk: function(p) { return p.defenseDown ? 1.3 : 1; },
- type: "condition"
- },
- 550: {
- atk: function(p) { return p.defenseDown ? 1.3 : 1; },
- type: "condition"
- },
- 559: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 560: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 568: {
- def: function(p) { return 0.5; }
- },
- 569: {
- def: function(p) { return 0.5; }
- },
- 572: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; },
- type: "class",
- onActivation: function(p) { p.tdata.lock = Math.max(1, p.tdata.lock); },
- onDeactivation: function(p) { if (p.tdata.lock == 1) p.tdata.lock = 0; }
- },
- 574: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; },
- type: "class"
- },
- 575: {
- atk: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; },
- type: "class"
- },
- 576: {
- rcv: function(p) { return 1.5; }
- },
- 582: {
- atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
- type: "type"
- },
- 589: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
- type: "class"
- },
- 590: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
- type: "class"
- },
- 596: {
- def: function(p) { return 0.5; }
- },
- 597: {
- def: function(p) { return 0.5; }
- },
- 600: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.3 : 1; },
- type: "type"
- },
- 601: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.3 : 1; },
- type: "type"
- },
- 602: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
- type: "type"
- },
- 603: {
- atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
- type: "type"
- },
- 612: {
- atkStatic: function(p) { return 45; },
- rcvStatic: function(p) { return 45; },
- type: "type"
- },
- 613: {
- atkStatic: function(p) { return 45; },
- rcvStatic: function(p) { return 45; },
- type: "type"
- },
- 614: {
- def: function(p) { return 0.5; }
- },
- 617: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.2 : 1; },
- type: "class"
- },
- 622: {
- rcvStatic: function(p) { return 100; },
- type: "type"
- },
- 632: {
- def: function(p) { return 0.5; }
- },
- 633: {
- def: function(p) { return 0.5; }
- },
- 634: {
- atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.2 : 1; },
- type: "type"
- },
- 635: {
- atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.2 : 1; },
- type: "type"
- },
- 637: {
- atk: function(p) { return 1.3; },
- type: "condition",
- warning: "Selected special (%name%) assumes that the enemy has a defense buff active."
- },
- 642: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
- },
- 643: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
- },
- 644: {
- atk: function(p) { return 1.2; },
- type: "condition",
- warning: "Selected special (%name%) assumes that the enemy has been delayed."
- },
- 645: {
- atk: function(p) { return 1.2; },
- type: "condition",
- warning: "Selected special (%name%) assumes that the enemy has been delayed."
- },
- 648: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 649: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 650: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 651: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 655: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
- },
- 656: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
- },
- 660: {
- def: function(p) { return 0.5; }
- },
- 661: {
- def: function(p) { return 0.5; }
- },
- 665: {
- atk: function(p) { return p.defenseDown ? 1.3 : 1; },
- type: "condition"
- },
- 666: {
- atk: function(p) { return p.defenseDown ? 1.3 : 1; },
- type: "condition"
- },
- 668: {
- atk: function(p) { return !p.unit.class.has('Freedom') ? 1 : window.specials[668].multiplier; },
- type: "class",
- onActivation: function(p) {
- var n = (window.specials[668].multiplier == 1.5 ? 1 : 0);
- window.specials[668].multiplier = [1.5, 2][n];
- p.scope.notify({
- text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
- name: '667warning'
- });
- }
- },
- 669: {
- atk: function(p) { return !p.unit.class.has('Freedom') ? 1 : window.specials[669].multiplier; },
- type: "class",
- onActivation: function(p) {
- var n = (window.specials[669].multiplier == 1.5 ? 1 : 0);
- window.specials[669].multiplier = [1.5, 2][n];
- p.scope.notify({
- text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
- name: '668warning'
- });
- }
- },
- 670: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; },
- type: "class"
- },
- 671: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; },
- type: "class"
- },
- 680: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.25 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.25 : 1; },
- type: "type"
- },
- 681: {
- atk: function(p) { return p.unit.type == "DEX" ? 1.25 : 1; },
- rcv: function(p) { return p.unit.type == "DEX" ? 1.25 : 1; },
- type: "type"
- },
- 687: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 1.3 : 1; },
- type: "class"
- },
- 688: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 1.3 : 1; },
- type: "class"
- },
- 689: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 690: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 710: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.25 : 1; },
- type: "class"
- },
- 711: {
- atk: function(p) { return p.unit.class.has("Shooter") ? 1.25 : 1; },
- type: "class"
- },
- 712: {
- atk: function(p) { return p.slot < 2 ? 1.5 : 1; },
- type: "class"
- },
- 713: {
- atk: function(p) { return p.slot < 2 ? 1.5 : 1; },
- type: "class"
- },
- 715: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 1.5 : 1; },
- type: "class"
- },
- 716: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 1.5 : 1; },
- type: "class"
- },
- 719: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? window.specials[719].multiplier : 1; },
- type: "class",
- onActivation: function(p) {
- var n = (p.percHP <= 30 ? 2 : 1.5);
- window.specials[719].multiplier = n;
- p.scope.notify({
- text: 'HP ' + (n == 2 ? 'below' : 'above') + ' 30%, using the ' + n + 'x multiplier.',
- name: '719warning'
- });
- }
- },
- 720: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? window.specials[720].multiplier : 1; },
- type: "class",
- onActivation: function(p) {
- var n = (p.percHP <= 30 ? 2 : 1.5);
- window.specials[720].multiplier = n;
- p.scope.notify({
- text: 'HP ' + (n == 2 ? 'below' : 'above') + ' 30%, using the ' + n + 'x multiplier.',
- name: '720warning'
- });
- }
- },
- 727: {
- def: function(p) { return 0.5; }
- },
- 730: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
- type: "type"
- },
- 731: {
- atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
- type: "type"
- },
- 732: {
- def: function(p) { return 0.5; }
- },
- 733: {
- def: function(p) { return 0.5; }
- },
- 740: {
- atk: function(p) { return 1.3; },
- type: "condition",
- warning: "Selected special (%name%) assumes that the enemy has a defense buff active."
- },
- 741: {
- atk: function(p) { return 1.3; },
- type: "condition",
- warning: "Selected special (%name%) assumes that the enemy has a defense buff active."
- },
- 742: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
- },
- 743: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
- },
- 753: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
- },
- 754: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
- },
- 755: {
- atk: function(p) { return p.unit.class.has("Tough") ? 1.75 : 1; },
- type: "class"
- },
- 756: {
- atk: function(p) { return p.unit.class.has("Tough") ? 1.75 : 1; },
- type: "class"
- },
- 761: {
- atk: function(p) { return 1.2; },
- type: "type"
- },
- 762: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; },
- type: "type"
- },
- 770: {
- atk: function(p) { return 1.3; },
- type: "condition",
- warning: "Selected special (%name%) assumes that the enemy has been delayed."
- },
- 771: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 1.75 : 1; },
- type: "type"
- },
- 780: {
- atk: function(p) { return p.slot == p.sourceSlot ? window.specials[780].multiplier : 1; },
- type: "type",
- onActivation: function(p) {
- var n = (p.percHP <= 20 ? 2 : (p.percHP <= 50 ? 1.75 : 1.5));
- window.specials[780].multiplier = n;
- p.scope.notify({
- text: 'Using the ' + n + 'x multiplier.',
- name: '780warning'
- });
- }
- },
- 781: {
- atk: function(p) { return p.slot == p.sourceSlot ? window.specials[781].multiplier : 1; },
- type: "type",
- onActivation: function(p) {
- var n = (p.percHP <= 20 ? 2 : (p.percHP <= 50 ? 1.75 : 1.5));
- window.specials[781].multiplier = n;
- p.scope.notify({
- text: 'Using the ' + n + 'x multiplier.',
- name: '781warning'
- });
- }
- },
- 788: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.75 : 1; },
- type: "class"
- },
- 789: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.75 : 1; },
- type: "class"
- },
- 790: {
- atk: function(p) { return /STR|DEX|QCK/.test(p.unit.type) ? 1.2 : 1; },
- type: "type"
- },
- 791: {
- atk: function(p) { return /STR|DEX|QCK/.test(p.unit.type) ? 1.2 : 1; },
- type: "type"
- },
- 796: {
- atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
- type: "type"
- },
- 797: {
- atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
- type: "type"
- },
- 798: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; },
- type: "class"
- },
- 803: {
- atk: function(p) { return 1.1; },
- type: "type"
- },
- 804: {
- atk: function(p) { return 1.1; },
- type: "type"
- },
- 805: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
- },
- 806: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
- },
- 807: {
- atk: function(p) { return p.defenseDown ? 1.3 : 1; },
- type: "condition"
- },
- 808: {
- atk: function(p) { return p.defenseDown ? 1.3 : 1; },
- type: "condition"
- },
- 809: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); },
- def: function(p) { return 0.2; }
- },
- 810: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); },
- def: function(p) { return 0.2; }
- },
- 813: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
- },
- 822: {
- rcvStatic: function(p) { return 100; },
- type: "type"
- },
- 825: {
- atkStatic: function(p) { return 200; },
- type: "type"
- },
- 826: {
- atk: function(p) { return 0.2; },
- type: "type"
- },
- 827: {
- atk: function(p) { return 1.05; },
- type: "condition",
- warning: "Selected special (%name%) assumes that the enemy has been poisoned."
- },
- 832: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 1.5 : 1; },
- type: "class"
- },
- 833: {
- atk: function(p) { return p.unit.class.has("Freedom") ? 1.5 : 1; },
- type: "class"
- },
- 835: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
- },
- 836: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
- },
- 837: {
- atk: function(p) { return p.unit.class.has("Ambition") ? 1.75 : 1; },
- type: "class"
- },
- 838: {
- atk: function(p) { return p.unit.class.has("Ambition") ? 1.75 : 1; },
- type: "class"
- },
- 839: {
- atk: function(p) { return p.slot == p.sourceSlot ? 2 : 1; },
- type: "type"
- },
- 840: {
- atk: function(p) { return p.slot == p.sourceSlot ? 2 : 1; },
- type: "type"
- },
- 841: {
- atk: function(p) { return 1.25; },
- type: "condition",
- warning: "Selected special (%name%) assumes that the enemy has been delayed."
- },
- 842: {
- atk: function(p) { return 1.25; },
- type: "condition",
- warning: "Selected special (%name%) assumes that the enemy has been delayed."
- },
- 843: {
- atk: function(p) {
- if (window.specials[843].stage) return p.unit.class.has("Shooter") ? 1.5 : 1;
- else return p.unit.class.has("Shooter") || p.unit.class.has("Slasher") || p.unit.class.has("Striker") ? 1.5 : 1;
- },
- type: "class",
- onActivation: function(p) {
- window.specials[843].multiplier = !window.specials[843].multiplier;
- p.scope.notify({
- text: (window.specials[843].multiplier ?
- 'Boosting Shooters. To switch to the second multiplier, disable and re-enable this special' :
- 'Boosting Shooters, Slashers and Strikers. To switch to the first multiplier, disable and re-enable this special'),
- name: '843warning'
- });
- }
- },
- 844: {
- atk: function(p) {
- if (window.specials[844].stage) return p.unit.class.has("Shooter") ? 1.5 : 1;
- else return p.unit.class.has("Shooter") || p.unit.class.has("Slasher") || p.unit.class.has("Striker") ? 1.5 : 1;
- },
- type: "class",
- onActivation: function(p) {
- window.specials[844].multiplier = !window.specials[844].multiplier;
- p.scope.notify({
- text: (window.specials[844].multiplier ?
- 'Boosting Shooters. To switch to the second multiplier, disable and re-enable this special' :
- 'Boosting Shooters, Slashers and Strikers. To switch to the first multiplier, disable and re-enable this special'),
- name: '844warning'
- });
- }
- },
- 847: {
- atk: function(p) { return 1.05; },
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.15); },
- type: "class"
- },
- 848: {
- atk: function(p) { return 1.05; },
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.15); },
- type: "class"
- },
- 849: {
- def: function() { return 0.5; }
- },
- 853: {
- atk: function(p) { return p.unit.class("Tough") || p.unit.class.has("Fighter") ? 1.2 : 1; },
- type: "class"
- },
- 857: {
- rcv: function(p) { return p.unit.type == 'PSY' ? 1.5 : 1; },
- type: "type"
- },
- 858: {
- rcv: function(p) { return p.unit.type == 'PSY' ? 1.5 : 1; },
- type: "type"
- },
- 861: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 862: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
- },
- 863: {
- def: function(p) { return 0.5; }
- },
- 864: {
- chain: function(p) { return 2.5; },
- chainLimiter: function(p) { return p.chainPosition > 0 ? 2.5 : 1.0; }
- },
- 865: {
- chain: function(p) { return 2.5; },
- chainLimiter: function(p) { return p.chainPosition > 0 ? 2.5 : 1.0; }
- },
- 866: {
- atk: function(p) {
- return p.unit.class.has("Slasher") || p.unit.class.has("Knowledge") ? 1.3 : 1;
- },
- type: "class"
- },
- 869: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 2.0); }
- },
- 870: {
- orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 2.0); }
- },
- 873: {
- orb: function(p) {
- if (window.specials[873].first) return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5);
- else return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75);
- },
- type: "class",
- onActivation: function(p) {
- window.specials[873].first = !window.specials[873].first;
- p.scope.notify({
- text: (window.specials[873].first ?
- 'Activating the first stage. To switch to the second stage, disable and re-enable this special' :
- 'Activating the second stage. To switch to the first stage, disable and re-enable this special'),
- name: '873warning'
- });
- }
- },
- 874: {
- orb: function(p) {
- if (window.specials[874].first) return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5);
- else return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75);
- },
- type: "class",
- onActivation: function(p) {
- window.specials[874].first = !window.specials[874].first;
- p.scope.notify({
- text: (window.specials[874].first ?
- 'Activating the first stage. To switch to the second stage, disable and re-enable this special' :
- 'Activating the second stage. To switch to the first stage, disable and re-enable this special'),
- name: '874warning'
- });
- }
- },
- 881: {
- atk: function(p) {
- return p.unit.class.has("Shooter") || p.unit.class.has("Freedom") ? 1.75 : 1;
- },
- type: "class"
- },
- 882: {
- atk: function(p) {
- return p.unit.class.has("Shooter") || p.unit.class.has("Freedom") ? 1.75 : 1;
- },
- type: "class"
- },
- 883: {
- atk: function(p) { return !p.unit.class.has('Tough') ? 1 : window.specials[883].multiplier; },
- type: "class",
- onActivation: function(p) {
- var n = (window.specials[883].multiplier == 1.5 ? 1 : 0);
- window.specials[883].multiplier = [1.5, 2][n];
- p.scope.notify({
- text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
- name: '883warning'
- });
- }
- },
- 884: {
- atk: function(p) { return !p.unit.class.has('Tough') ? 1 : window.specials[884].multiplier; },
- type: "class",
- onActivation: function(p) {
- var n = (window.specials[884].multiplier == 1.5 ? 1 : 0);
- window.specials[884].multiplier = [1.5, 2][n];
- p.scope.notify({
- text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
- name: '884warning'
- });
- }
- },
- 885: {
- atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
- type: "class"
- },
- 886: {
- atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
- type: "class"
- },
- 887: {
- def: function(p) { return 0.2; }
- },
- 891: {
- atk: function(p) { return p.unit.class.has("Tough") ? 1.25 : 1; },
- type: "class"
- },
- 902: {
- atk: function(p) { return !p.unit.class.has('Tough') ? 1 : window.specials[902].multiplier; },
- type: "class",
- onActivation: function(p) {
- var n = (window.specials[902].multiplier == 1.5 ? 1 : 0);
- window.specials[902].multiplier = [1.5, 2][n];
- p.scope.notify({
- text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
- name: '902warning'
- });
- }
- },
- 903: {
- atk: function(p) { return !p.unit.class.has('Tough') ? 1 : window.specials[903].multiplier; },
- type: "class",
- onActivation: function(p) {
- var n = (window.specials[903].multiplier == 1.5 ? 1 : 0);
- window.specials[903].multiplier = [1.5, 2][n];
- p.scope.notify({
- text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
- name: '902warning'
- });
- }
- },
- 905: {
- atk: function(p) {
- if (!window.specials[905].stage) return p.slot == p.sourceSlot ? 1.5 : 1;
- if (window.specials[905].stage == 1) return p.unit.class.has("Slasher") ? 1.5 : 1;
- if (window.specials[905].stage == 2) return p.unit.class.has("Slasher") ? 1.75 : 1;
- },
- type: "class",
- stage: -1,
- onActivation: function(p) {
- window.specials[905].stage = (window.specials[905].stage + 1) % 3;
- p.scope.notify({
- text: 'Activating stage #' + (window.specials[905].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
- name: '905warning'
- });
- }
- },
- 906: {
- atk: function(p) {
- if (!window.specials[906].stage) return p.slot == p.sourceSlot ? 1.5 : 1;
- if (window.specials[906].stage == 1) return p.unit.class.has("Slasher") ? 1.5 : 1;
- if (window.specials[906].stage == 2) return p.unit.class.has("Slasher") ? 1.75 : 1;
- },
- type: "class",
- stage: -1,
- onActivation: function(p) {
- window.specials[906].stage = (window.specials[906].stage + 1) % 3;
- p.scope.notify({
- text: 'Activating stage #' + (window.specials[906].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
- name: '906warning'
- });
- }
- },
- 909: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- type: "type"
- },
- 910: {
- atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
- type: "type"
- },
- 911: {
- atk: function(p) {
- if (!window.specials[911].stage) return p.unit.class.has("Tough") ? 1.2 : 1;
- if (window.specials[911].stage == 1) return p.unit.class.has("Tough") ? 2 : 1;
- },
- type: "class",
- stage: -1,
- onActivation: function(p) {
- window.specials[911].stage = (window.specials[911].stage + 1) % 2;
- p.scope.notify({
- text: 'Activating stage #' + (window.specials[911].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
- name: '911warning'
- });
- }
- },
- 912: {
- atk: function(p) {
- if (!window.specials[912].stage) return p.unit.class.has("Tough") ? 1.2 : 1;
- if (window.specials[912].stage == 1) return p.unit.class.has("Tough") ? 2 : 1;
- },
- type: "class",
- stage: -1,
- onActivation: function(p) {
- window.specials[912].stage = (window.specials[912].stage + 1) % 2;
- p.scope.notify({
- text: 'Activating stage #' + (window.specials[912].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
- name: '912warning'
- });
- }
- },
- 915: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; },
- type: "class"
- },
- 916: {
- atk: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; },
- rcv: function(p) { return p.unit.class.has("Knowledge") ? 1.5 : 1; },
- type: "class"
- }
-};
\ No newline at end of file
+ 18: {
+ def: function(p) { return 0.5; }
+ },
+ 24: {
+ def: function(p) { return 0.5; }
+ },
+ 34: {
+ def: function(p) { return 0; }
+ },
+ 127: {
+ def: function(p) { return 0.5; }
+ },
+ 137: {
+ def: function(p) { return 0.5; }
+ },
+ 148: {
+ def: function(p) { return 0.5; }
+ },
+ 158: {
+ def: function(p) { return 0.5; }
+ },
+ 206: {
+ def: function(p) { return 0.5; }
+ },
+ 209: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ type: "type"
+ },
+ 210: {
+ atk: function(p) { return p.unit.type == "INT" ? 2 : 1; },
+ type: "type"
+ },
+ 222: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ type: "type"
+ },
+ 223: {
+ atk: function(p) { return p.unit.type == "PSY" ? 2 : 1; },
+ type: "type"
+ },
+ 263: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 267: {
+ def: function(p) { return 0.5; }
+ },
+ 275: {
+ def: function(p) { return 0.5; }
+ },
+ 285: {
+ def: function(p) { return 0.5; }
+ },
+ 295: {
+ def: function(p) { return 0.5; }
+ },
+ 309: {
+ def: function(p) { return 0.5; }
+ },
+ 310: {
+ def: function(p) { return 0.5; }
+ },
+ 313: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ type: "class"
+ },
+ 314: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ type: "class"
+ },
+ 323: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 324: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 352: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; },
+ type: "class"
+ },
+ 353: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; },
+ type: "class"
+ },
+ 382: {
+ def: function(p) { return 0.5; }
+ },
+ 385: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.25 : 1; },
+ type: "class"
+ },
+ 386: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.25 : 1; },
+ type: "class"
+ },
+ 391: {
+ def: function(p) { return 0.2; }
+ },
+ 392: {
+ def: function(p) { return 0.2; }
+ },
+ 395: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 396: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 399: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ type: "type"
+ },
+ 400: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.5 : 1; },
+ type: "type"
+ },
+ 401: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.25 : 1; },
+ type: "class"
+ },
+ 402: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.25 : 1; },
+ type: "class"
+ },
+ 404: {
+ rcv: function(p) { return 2; }
+ },
+ 405: {
+ rcv: function(p) { return 2; }
+ },
+ 406: {
+ atk: function(p) { return 1.2; },
+ type: "type"
+ },
+ 417: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 2); }
+ },
+ 418: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 2); }
+ },
+ 419: {
+ def: function(p) { return 0.5; }
+ },
+ 423: {
+ def: function(p) { return 0.5; }
+ },
+ 424: {
+ def: function(p) { return 0.5; }
+ },
+ 426: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.05 : 1; },
+ type: "type"
+ },
+ 429: {
+ def: function(p) { return 0.5; }
+ },
+ 430: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 431: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 434: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 450: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ type: "class"
+ },
+ 451: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ type: "class"
+ },
+ 454: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ type: "type"
+ },
+ 455: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.5 : 1; },
+ type: "type"
+ },
+ 458: {
+ atk: function(p) { return 1.5; },
+ type: "type"
+ },
+ 459: {
+ atk: function(p) { return 1.5; },
+ type: "type"
+ },
+ 461: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.25 : 1; },
+ type: "class"
+ },
+ 462: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.25 : 1; },
+ type: "class"
+ },
+ 465: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 468: {
+ rcv: function(p) { return 1.5; }
+ },
+ 470: {
+ rcv: function(p) { return 1.5; }
+ },
+ 487: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.2 : 1; },
+ type: "type"
+ },
+ 488: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; },
+ type: "type"
+ },
+ 489: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
+ type: "type"
+ },
+ 490: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.2 : 1; },
+ type: "type"
+ },
+ 491: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.2 : 1; },
+ type: "type"
+ },
+ 492: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.2 : 1; },
+ type: "type"
+ },
+ 505: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.25 : 1; },
+ type: "type"
+ },
+ 506: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.25 : 1; },
+ type: "type"
+ },
+ 509: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ type: "class"
+ },
+ 510: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.5 : 1; },
+ type: "class"
+ },
+ 511: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.25 : 1; },
+ type: "class"
+ },
+ 514: {
+ def: function(p) { return 0.5; },
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ type: "type"
+ },
+ 517: {
+ atk: function(p) { return 1.05; },
+ type: "type"
+ },
+ 518: {
+ atk: function(p) { return 1.05; },
+ type: "type"
+ },
+ 519: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
+ type: "type"
+ },
+ 520: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
+ type: "type"
+ },
+ 529: {
+ def: function(p) { return 0; }
+ },
+ 530: {
+ def: function(p) { return 0; }
+ },
+ 533: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 534: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 542: {
+ rcv: function(p) { return 2; }
+ },
+ 545: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ type: "type"
+ },
+ 546: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ type: "type"
+ },
+ 549: {
+ atk: function(p) { return p.defenseDown ? 1.3 : 1; },
+ type: "condition"
+ },
+ 550: {
+ atk: function(p) { return p.defenseDown ? 1.3 : 1; },
+ type: "condition"
+ },
+ 552: {
+ def: function(p) { return 0; }
+ },
+ 559: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 560: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 568: {
+ def: function(p) { return 0.5; }
+ },
+ 569: {
+ def: function(p) { return 0.5; }
+ },
+ 572: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 2 : 1; },
+ type: "class",
+ onActivation: function(p) { p.tdata.lock = Math.max(1, p.tdata.lock); },
+ onDeactivation: function(p) { if (p.tdata.lock == 1) p.tdata.lock = 0; }
+ },
+ 574: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; },
+ type: "class"
+ },
+ 575: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; },
+ type: "class"
+ },
+ 576: {
+ rcv: function(p) { return 1.5; }
+ },
+ 582: {
+ atk: function(p) { return p.unit.type == "QCK" ? 1.5 : 1; },
+ type: "type"
+ },
+ 589: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ type: "class"
+ },
+ 590: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ type: "class"
+ },
+ 596: {
+ def: function(p) { return 0.5; }
+ },
+ 597: {
+ def: function(p) { return 0.5; }
+ },
+ 600: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.3 : 1; },
+ type: "type"
+ },
+ 601: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.3 : 1; },
+ type: "type"
+ },
+ 602: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
+ type: "type"
+ },
+ 603: {
+ atk: function(p) { return p.unit.type == "QCK" ? 2 : 1; },
+ type: "type"
+ },
+ 612: {
+ atkStatic: function(p) { return 45; },
+ rcvStatic: function(p) { return 45; },
+ type: "type"
+ },
+ 613: {
+ atkStatic: function(p) { return 45; },
+ rcvStatic: function(p) { return 45; },
+ type: "type"
+ },
+ 614: {
+ def: function(p) { return 0.5; }
+ },
+ 617: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.2 : 1; },
+ type: "class"
+ },
+ 622: {
+ rcvStatic: function(p) { return 100; },
+ type: "type"
+ },
+ 632: {
+ def: function(p) { return 0.5; }
+ },
+ 633: {
+ def: function(p) { return 0.5; }
+ },
+ 634: {
+ atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.2 : 1; },
+ type: "type"
+ },
+ 635: {
+ atk: function(p) { return p.unit.type == "QCK" || p.unit.type == "PSY" ? 1.2 : 1; },
+ type: "type"
+ },
+ 637: {
+ atk: function(p) { return 1.3; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has a defense buff active."
+ },
+ 642: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
+ },
+ 643: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
+ },
+ 644: {
+ atk: function(p) { return 1.2; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been delayed."
+ },
+ 645: {
+ atk: function(p) { return 1.2; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been delayed."
+ },
+ 648: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 649: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 650: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 651: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 655: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 656: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 660: {
+ def: function(p) { return 0.5; }
+ },
+ 661: {
+ def: function(p) { return 0.5; }
+ },
+ 665: {
+ atk: function(p) { return p.defenseDown ? 1.3 : 1; },
+ type: "condition"
+ },
+ 666: {
+ atk: function(p) { return p.defenseDown ? 1.3 : 1; },
+ type: "condition"
+ },
+ 668: {
+ atk: function(p) { return !p.unit.class.has('Free Spirit') ? 1 : window.specials[668].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[668].multiplier == 1.5 ? 1 : 0);
+ window.specials[668].multiplier = [1.5, 2][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
+ name: '668warning'
+ });
+ }
+ },
+ 669: {
+ atk: function(p) { return !p.unit.class.has('Free Spirit') ? 1 : window.specials[669].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[669].multiplier == 1.5 ? 1 : 0);
+ window.specials[669].multiplier = [1.5, 2][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
+ name: '669warning'
+ });
+ }
+ },
+ 670: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; },
+ type: "class"
+ },
+ 671: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; },
+ type: "class"
+ },
+ 680: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.25 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.25 : 1; },
+ type: "type"
+ },
+ 681: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.25 : 1; },
+ rcv: function(p) { return p.unit.type == "DEX" ? 1.25 : 1; },
+ type: "type"
+ },
+ 687: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.3 : 1; },
+ type: "class"
+ },
+ 688: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.3 : 1; },
+ type: "class"
+ },
+ 689: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 690: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 710: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.25 : 1; },
+ type: "class"
+ },
+ 711: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.25 : 1; },
+ type: "class"
+ },
+ 712: {
+ atk: function(p) { return p.slot < 2 ? 1.5 : 1; },
+ type: "class"
+ },
+ 713: {
+ atk: function(p) { return p.slot < 2 ? 1.5 : 1; },
+ type: "class"
+ },
+ 715: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; },
+ type: "class"
+ },
+ 716: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; },
+ type: "class"
+ },
+ 719: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? window.specials[719].multiplier : 1; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (p.percHP <= 30 ? 2 : 1.5);
+ window.specials[719].multiplier = n;
+ p.scope.notify({
+ text: 'HP ' + (n == 2 ? 'below' : 'above') + ' 30%, using the ' + n + 'x multiplier.',
+ name: '719warning'
+ });
+ }
+ },
+ 720: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? window.specials[720].multiplier : 1; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (p.percHP <= 30 ? 2 : 1.5);
+ window.specials[720].multiplier = n;
+ p.scope.notify({
+ text: 'HP ' + (n == 2 ? 'below' : 'above') + ' 30%, using the ' + n + 'x multiplier.',
+ name: '720warning'
+ });
+ }
+ },
+ 727: {
+ def: function(p) { return 0.5; }
+ },
+ 730: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ type: "type"
+ },
+ 731: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ type: "type"
+ },
+ 732: {
+ def: function(p) { return 0.5; }
+ },
+ 733: {
+ def: function(p) { return 0.5; }
+ },
+ 740: {
+ atk: function(p) { return 1.3; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has a defense buff active."
+ },
+ 741: {
+ atk: function(p) { return 1.3; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has a defense buff active."
+ },
+ 742: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 743: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 753: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
+ },
+ 754: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
+ },
+ 755: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.75 : 1; },
+ type: "class"
+ },
+ 756: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.75 : 1; },
+ type: "class"
+ },
+ 761: {
+ atk: function(p) { return 1.2; },
+ type: "type"
+ },
+ 762: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; },
+ type: "type"
+ },
+ 770: {
+ atk: function(p) { return 1.3; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been delayed."
+ },
+ 771: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.75 : 1; },
+ type: "type"
+ },
+ 780: {
+ atk: function(p) { return p.slot == p.sourceSlot ? window.specials[780].multiplier : 1; },
+ type: "type",
+ onActivation: function(p) {
+ var n = (p.percHP <= 20 ? 2 : (p.percHP <= 50 ? 1.75 : 1.5));
+ window.specials[780].multiplier = n;
+ p.scope.notify({
+ text: 'Using the ' + n + 'x multiplier.',
+ name: '780warning'
+ });
+ }
+ },
+ 781: {
+ atk: function(p) { return p.slot == p.sourceSlot ? window.specials[781].multiplier : 1; },
+ type: "type",
+ onActivation: function(p) {
+ var n = (p.percHP <= 20 ? 2 : (p.percHP <= 50 ? 1.75 : 1.5));
+ window.specials[781].multiplier = n;
+ p.scope.notify({
+ text: 'Using the ' + n + 'x multiplier.',
+ name: '781warning'
+ });
+ }
+ },
+ 788: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.75 : 1; },
+ type: "class"
+ },
+ 789: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.75 : 1; },
+ type: "class"
+ },
+ 790: {
+ atk: function(p) { return /STR|DEX|QCK/.test(p.unit.type) ? 1.2 : 1; },
+ type: "type"
+ },
+ 791: {
+ atk: function(p) { return /STR|DEX|QCK/.test(p.unit.type) ? 1.2 : 1; },
+ type: "type"
+ },
+ 796: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
+ type: "type"
+ },
+ 797: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
+ type: "type"
+ },
+ 798: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.75 : 1; },
+ type: "class"
+ },
+ 803: {
+ atk: function(p) { return 1.1; },
+ type: "type"
+ },
+ 804: {
+ atk: function(p) { return 1.1; },
+ type: "type"
+ },
+ 805: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
+ },
+ 806: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
+ },
+ 807: {
+ atk: function(p) { return p.defenseDown ? 1.3 : 1; },
+ type: "condition"
+ },
+ 808: {
+ atk: function(p) { return p.defenseDown ? 1.3 : 1; },
+ type: "condition"
+ },
+ 809: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); },
+ def: function(p) { return 0.2; }
+ },
+ 810: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); },
+ def: function(p) { return 0.2; }
+ },
+ 813: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 822: {
+ rcvStatic: function(p) { return 100; },
+ type: "type"
+ },
+ 825: {
+ atkStatic: function(p) { return 200; },
+ type: "type"
+ },
+ 826: {
+ atk: function(p) { return 0.2; },
+ type: "type"
+ },
+ 827: {
+ atk: function(p) { return 1.05; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been poisoned."
+ },
+ 828: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Driven") ? window.specials[828].multiplier : 1; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (p.percHP < 20 ? 1.75 : 1);
+ window.specials[828].multiplier = n;
+ p.scope.notify({
+ text: 'HP ' + (n == 1.75 ? 'below' : 'above') + ' 20%, using the ' + n + 'x multiplier.',
+ name: '828warning'
+ });
+ }
+ },
+ 829: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Driven") ? window.specials[829].multiplier : 1; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (p.percHP < 20 ? 1.75 : 1);
+ window.specials[829].multiplier = n;
+ p.scope.notify({
+ text: 'HP ' + (n == 1.75 ? 'below' : 'above') + ' 20%, using the ' + n + 'x multiplier.',
+ name: '829warning'
+ });
+ }
+ },
+ 832: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; },
+ type: "class"
+ },
+ 833: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.5 : 1; },
+ type: "class"
+ },
+ 835: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
+ },
+ 836: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75); }
+ },
+ 837: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.75 : 1; },
+ type: "class"
+ },
+ 838: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.75 : 1; },
+ type: "class"
+ },
+ 839: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2 : 1; },
+ type: "type"
+ },
+ 840: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2 : 1; },
+ type: "type"
+ },
+ 841: {
+ atk: function(p) { return 1.25; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been delayed."
+ },
+ 842: {
+ atk: function(p) { return 1.25; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been delayed."
+ },
+ 843: {
+ atk: function(p) {
+ if (window.specials[843].first) return p.unit.class.has("Shooter") ? 1.5 : 1;
+ else return p.unit.class.has("Shooter") || p.unit.class.has("Slasher") || p.unit.class.has("Striker") ? 1.5 : 1;
+ },
+ type: "class",
+ onActivation: function(p) {
+ window.specials[843].first = !window.specials[843].first;
+ p.scope.notify({
+ text: (window.specials[843].first ?
+ 'Boosting Shooters. To switch to the second multiplier, disable and re-enable this special' :
+ 'Boosting Shooters, Slashers and Strikers. To switch to the first multiplier, disable and re-enable this special'),
+ name: '843warning'
+ });
+ }
+ },
+ 844: {
+ atk: function(p) {
+ if (window.specials[844].first) return p.unit.class.has("Shooter") ? 1.5 : 1;
+ else return p.unit.class.has("Shooter") || p.unit.class.has("Slasher") || p.unit.class.has("Striker") ? 1.5 : 1;
+ },
+ type: "class",
+ onActivation: function(p) {
+ window.specials[844].first = !window.specials[844].first;
+ p.scope.notify({
+ text: (window.specials[844].first ?
+ 'Boosting Shooters. To switch to the second multiplier, disable and re-enable this special' :
+ 'Boosting Shooters, Slashers and Strikers. To switch to the first multiplier, disable and re-enable this special'),
+ name: '844warning'
+ });
+ }
+ },
+ 847: {
+ atk: function(p) { return 1.05; },
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.15); },
+ type: "class"
+ },
+ 848: {
+ atk: function(p) { return 1.05; },
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.15); },
+ type: "class"
+ },
+ 849: {
+ def: function() { return 0.5; }
+ },
+ 853: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") || p.unit.class.has("Fighter") ? 1.2 : 1; },
+ type: "class"
+ },
+ 857: {
+ rcv: function(p) { return p.unit.type == 'PSY' ? 1.5 : 1; },
+ type: "type"
+ },
+ 858: {
+ rcv: function(p) { return p.unit.type == 'PSY' ? 1.5 : 1; },
+ type: "type"
+ },
+ 861: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 862: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 863: {
+ def: function(p) { return 0.5; }
+ },
+ 864: {
+ chain: function(p) { return 2.5; },
+ chainLimiter: function(p) { return p.chainPosition > 0 ? 2.5 : 1.0; }
+ },
+ 865: {
+ chain: function(p) { return 2.5; },
+ chainLimiter: function(p) { return p.chainPosition > 0 ? 2.5 : 1.0; }
+ },
+ 866: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.3 : 1;
+ },
+ type: "class"
+ },
+ 869: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 2.0); }
+ },
+ 870: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 2.0); }
+ },
+ 873: {
+ orb: function(p) {
+ if (window.specials[873].first) return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5);
+ else return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75);
+ },
+ type: "class",
+ onActivation: function(p) {
+ window.specials[873].first = !window.specials[873].first;
+ p.scope.notify({
+ text: (window.specials[873].first ?
+ 'Activating the first stage. To switch to the second stage, disable and re-enable this special' :
+ 'Activating the second stage. To switch to the first stage, disable and re-enable this special'),
+ name: '873warning'
+ });
+ }
+ },
+ 874: {
+ orb: function(p) {
+ if (window.specials[874].first) return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5);
+ else return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75);
+ },
+ type: "class",
+ onActivation: function(p) {
+ window.specials[874].first = !window.specials[874].first;
+ p.scope.notify({
+ text: (window.specials[874].first ?
+ 'Activating the first stage. To switch to the second stage, disable and re-enable this special' :
+ 'Activating the second stage. To switch to the first stage, disable and re-enable this special'),
+ name: '874warning'
+ });
+ }
+ },
+ 881: {
+ atk: function(p) {
+ return p.unit.class.has("Shooter") || p.unit.class.has("Free Spirit") ? 1.75 : 1;
+ },
+ rcv: function(p) { return 0.1; },
+ type: "class"
+ },
+ 882: {
+ atk: function(p) {
+ return p.unit.class.has("Shooter") || p.unit.class.has("Free Spirit") ? 1.75 : 1;
+ },
+ rcv: function(p) { return 0.1; },
+ type: "class"
+ },
+ 883: {
+ atk: function(p) { return !p.unit.class.has('Powerhouse') ? 1 : window.specials[883].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[883].multiplier == 1.5 ? 1 : 0);
+ window.specials[883].multiplier = [1.5, 2][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
+ name: '883warning'
+ });
+ }
+ },
+ 884: {
+ atk: function(p) { return !p.unit.class.has('Powerhouse') ? 1 : window.specials[884].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[884].multiplier == 1.5 ? 1 : 0);
+ window.specials[884].multiplier = [1.5, 2][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
+ name: '884warning'
+ });
+ }
+ },
+ 885: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ type: "class"
+ },
+ 886: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1; },
+ type: "class"
+ },
+ 887: {
+ def: function(p) { return 0.2; }
+ },
+ 891: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.25 : 1; },
+ type: "class"
+ },
+ 902: {
+ atk: function(p) { return !p.unit.class.has('Powerhouse') ? 1 : window.specials[902].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[902].multiplier == 1.5 ? 1 : 0);
+ window.specials[902].multiplier = [1.5, 2][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
+ name: '902warning'
+ });
+ }
+ },
+ 903: {
+ atk: function(p) { return !p.unit.class.has('Powerhouse') ? 1 : window.specials[903].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[903].multiplier == 1.5 ? 1 : 0);
+ window.specials[903].multiplier = [1.5, 2][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.5][n] + 'x multiplier, disable and re-enable this special',
+ name: '902warning'
+ });
+ }
+ },
+ 905: {
+ atk: function(p) {
+ if (!window.specials[905].stage) return p.slot == p.sourceSlot ? 1.5 : 1;
+ if (window.specials[905].stage == 1) return p.unit.class.has("Slasher") ? 1.5 : 1;
+ if (window.specials[905].stage == 2) return p.unit.class.has("Slasher") ? 1.75 : 1;
+ },
+ type: "class",
+ stage: -1,
+ onActivation: function(p) {
+ window.specials[905].stage = (window.specials[905].stage + 1) % 3;
+ p.scope.notify({
+ text: 'Activating stage #' + (window.specials[905].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
+ name: '905warning'
+ });
+ }
+ },
+ 906: {
+ atk: function(p) {
+ if (!window.specials[906].stage) return p.slot == p.sourceSlot ? 1.5 : 1;
+ if (window.specials[906].stage == 1) return p.unit.class.has("Slasher") ? 1.5 : 1;
+ if (window.specials[906].stage == 2) return p.unit.class.has("Slasher") ? 1.75 : 1;
+ },
+ type: "class",
+ stage: -1,
+ onActivation: function(p) {
+ window.specials[906].stage = (window.specials[906].stage + 1) % 3;
+ p.scope.notify({
+ text: 'Activating stage #' + (window.specials[906].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
+ name: '906warning'
+ });
+ }
+ },
+ 909: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ type: "type"
+ },
+ 910: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.5 : 1; },
+ type: "type"
+ },
+ 911: {
+ atk: function(p) {
+ if (!window.specials[911].stage) return p.unit.class.has("Powerhouse") ? 1.2 : 1;
+ if (window.specials[911].stage == 1) return p.unit.class.has("Powerhouse") ? 2 : 1;
+ },
+ type: "class",
+ stage: -1,
+ onActivation: function(p) {
+ window.specials[911].stage = (window.specials[911].stage + 1) % 2;
+ p.scope.notify({
+ text: 'Activating stage #' + (window.specials[911].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
+ name: '911warning'
+ });
+ }
+ },
+ 912: {
+ atk: function(p) {
+ if (!window.specials[912].stage) return p.unit.class.has("Powerhouse") ? 1.2 : 1;
+ if (window.specials[912].stage == 1) return p.unit.class.has("Powerhouse") ? 2 : 1;
+ },
+ type: "class",
+ stage: -1,
+ onActivation: function(p) {
+ window.specials[912].stage = (window.specials[912].stage + 1) % 2;
+ p.scope.notify({
+ text: 'Activating stage #' + (window.specials[912].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
+ name: '912warning'
+ });
+ }
+ },
+ 915: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ type: "class"
+ },
+ 916: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Cerebral") ? 1.5 : 1; },
+ type: "class"
+ },
+ 921: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 922: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 925: {
+ atk: function(p) { return p.defenseDown ? 1.3 : 1; },
+ type: "condition"
+ },
+ 926: {
+ atk: function(p) { return p.defenseDown ? 1.3 : 1; },
+ type: "condition"
+ },
+ 927: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") || p.unit.class.has("Driven") ? 1.2 : 1;
+ },
+ type: "class"
+ },
+ 928: {
+ atk: function(p) { return 1.3; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been poisoned."
+ },
+ 929: {
+ atk: function(p) { return 1.3; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been poisoned."
+ },
+ 940: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.75 : 1; },
+ type: "type"
+ },
+ 941: {
+ atk: function(p) { return p.unit.type == "DEX" ? 1.75 : 1; },
+ type: "type"
+ },
+ 944: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; },
+ type: "class"
+ },
+ 945: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; },
+ rcv: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; },
+ type: "class"
+ },
+ 947: {
+ atk: function(p) { return p.unit.type == "STR" || p.unit.type == "INT" ? 1.3 : 1; },
+ type: "type"
+ },
+ 954: {
+ def: function(p) { return 0.2; }
+ },
+ 955: {
+ atk: function(p) { return p.defenseDown ? 1.2 : 1; },
+ type: "condition"
+ },
+ 956: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.2 : 1; },
+ type: "class"
+ },
+ 961: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 963: {
+ def: function(p) { return 0; }
+ },
+ 964: {
+ atk: function(p) { return window.specials[964].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[964].multiplier == 1.1 ? 1 : 0);
+ window.specials[964].multiplier = [1.1, 1.5][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.1, 1.5][n] + 'x ATK multiplier. To switch to the ' + [1.5, 1.1][n] + 'x multiplier, disable and re-enable this special',
+ name: '965warning'
+ });
+ }
+ },
+ 965: {
+ atk: function(p) { return window.specials[965].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[965].multiplier == 1.1 ? 1 : 0);
+ window.specials[965].multiplier = [1.1, 1.5][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.1, 1.5][n] + 'x ATK multiplier. To switch to the ' + [1.5, 1.1][n] + 'x multiplier, disable and re-enable this special',
+ name: '965warning'
+ });
+ }
+ },
+ 975: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.3 : 1; },
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.3 : 1; },
+ type: "class"
+ },
+ 976: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.3 : 1; },
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.3 : 1; },
+ type: "class"
+ },
+ 977: {
+ chainAddition: function(p) {return 0.5;}
+ },
+ 978: {
+ chainAddition: function(p){ return 0.5;}
+ },
+ 981: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
+ type: "type"
+ },
+ 1005: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
+ type: "type"
+ },
+ 1006: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
+ type: "type"
+ },
+ 1010: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.3 : 1; },
+ type: "type"
+ },
+ 1011: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.3 : 1; },
+ type: "type"
+ },
+ 1013: {
+ atk: function(p) { return 1.2; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been delayed."
+ },
+ 1015: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ type: "type"
+ },
+ 1016: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.5 : 1; },
+ type: "type"
+ },
+ 1017: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1},
+ type: "class"
+ },
+ 1018: {
+ atk: function(p) { return p.unit.class.has("Slasher") ? 1.5 : 1},
+ type: "class"
+ },
+ 1023: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.75 : 1},
+ type: "class"
+ },
+ 1024: {
+ orb: function(p) {
+ if(p.percHP >= 70.0){
+ return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25);
+ }else if(p.percHP >= 30.0){
+ return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5);
+ }else{
+ return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75);
+ }
+ }
+ },
+ 1025: {
+ orb: function(p) {
+ if(p.percHP >= 70.0){
+ return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25);
+ }else if(p.percHP >= 30.0){
+ return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5);
+ }else{
+ return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75);
+ }
+ }
+ },
+ 1028: {
+ //TODO
+ hit: function(n) { return n > 30 ? 1.75 : 1; },
+ type: "condition"
+ },
+ 1029: {
+ //TODO
+ hit: function(n) { return n > 30 ? 1.75 : 1; },
+ type: "condition"
+ },
+ 1030: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2.25 : 1; },
+ type: "type"
+ },
+ 1031: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2.25 : 1; },
+ type: "type"
+ },
+ 1040: {
+ atk: function(p) { return p.percHP < 30.0 ? 1.5 : 1; },
+ type: "type"
+ },
+ 1041: {
+ atk: function(p) { return p.percHP < 30.0 ? 1.5 : 1; },
+ type: "type"
+ },
+ 1046: {
+ staticMult: function(p) { return 55; }
+ },
+ 1047: {
+ staticMult: function(p) { return 55; }
+ },
+ 1055: {
+ atk: function(p) { return 1.4; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been STRONGLY Poisoned."
+ },
+ 1056: {
+ atk: function(p) { return 1.4; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been STRONGLY Poisoned."
+ },
+ 1059: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 1060: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 1061: {
+ chain: function(p) { return 2; },
+ chainLimiter: function(p) { return p.chainPosition > 0 ? 2 : 1.0; }
+ },
+ 1063: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.3 : 1},
+ type: "class"
+ },
+ 1065: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 1066: {
+ chainAddition: function(p){ return 0.1;}
+ },
+ 1067: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.5 : 1; },
+ type: "type"
+ },
+ 1071: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1},
+ type: "class"
+ },
+ 1072: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1},
+ type: "class"
+ },
+ 1080: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2 : 1; },
+ type: "type"
+ },
+ 1081: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2 : 1; },
+ type: "type"
+ },
+ 1082: {
+ atk: function(p) {
+ if(p.percHP >= 70.0){
+ return p.unit.class.has("Striker") || p.unit.class.has("Fighter") ? 1.2 : 1;
+ }else if(p.percHP >= 30.0){
+ return p.unit.class.has("Striker") || p.unit.class.has("Fighter") ? 1.5 : 1;
+ }else{
+ return p.unit.class.has("Striker") || p.unit.class.has("Fighter") ? 1.75 : 1;
+ }
+ },
+ type: "class"
+ },
+ 1083: {
+ atk: function(p) {
+ if(p.percHP >= 70.0){
+ return p.unit.class.has("Striker") || p.unit.class.has("Fighter") ? 1.2 : 1;
+ }else if(p.percHP >= 30.0){
+ return p.unit.class.has("Striker") || p.unit.class.has("Fighter") ? 1.5 : 1;
+ }else{
+ return p.unit.class.has("Striker") || p.unit.class.has("Fighter") ? 1.75 : 1;
+ }
+ },
+ type: "class"
+ },
+ 1086: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 1087: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 1088: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Driven") ? 1.5 : 1},
+ type: "class"
+ },
+ 1089: {
+ atk: function(p) { return p.unit.class.has("Slasher") || p.unit.class.has("Driven") ? 1.5 : 1},
+ type: "class"
+ },
+ 1096: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
+ type: "type"
+ },
+ 1097: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
+ type: "type"
+ },
+ 1099: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 1100: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 1101: {
+ atk: function(p) { return p.unit.type == "STR" || p.unit.type == "INT" ? 1.75 : 1; },
+ type: "type"
+ },
+ 1102: {
+ atk: function(p) { return p.unit.type == "STR" || p.unit.type == "INT" ? 1.75 : 1; },
+ type: "type"
+ },
+ 1105: {
+ chainAddition: function(p){ return 0.2;}
+ },
+ 1106: {
+ chainAddition: function(p){ return 0.2;}
+ },
+ 1107: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.75 : 1; },
+ type: "class"
+ },
+ 1108: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.75 : 1; },
+ type: "class"
+ },
+ 1111: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 1112: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.25); }
+ },
+ 1113: {
+ atk: function(p) { return 1.2; },
+ type: "type"
+ },
+ 1114: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
+ type: "type"
+ },
+ 1115: {
+ atk: function(p) { return p.unit.type == "STR" ? 2 : 1; },
+ type: "type"
+ },
+ 1122: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2.25 : 1; },
+ type: "type",
+ orb: function(p) { return p.slot == p.sourceSlot ? CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1)}
+ },
+ 1123: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2.25 : 1; },
+ type: "type",
+ orb: function(p) { return p.slot == p.sourceSlot ? CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1)}
+ },
+ 1132: {
+ atk: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Shooter") ? window.specials[1132].multiplier : 1; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[1132].multiplier == 1.5 ? 1 : 0);
+ window.specials[1132].multiplier = [1.5, 1.75][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 1.75][n] + 'x ATK multiplier. To switch to the ' + [1.75, 1.5][n] + 'x multiplier, disable and re-enable this special',
+ name: '1132warning'
+ });
+ }
+ },
+ 1133: {
+ atk: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Shooter") ? window.specials[1133].multiplier : 1; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[1133].multiplier == 1.5 ? 1 : 0);
+ window.specials[1133].multiplier = [1.5, 1.75][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 1.75][n] + 'x ATK multiplier. To switch to the ' + [1.75, 1.5][n] + 'x multiplier, disable and re-enable this special',
+ name: '1133warning'
+ });
+ }
+ },
+ 1137: {
+ orb: function(p) { return p.unit.class.has("Free Spirit") ? CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1); }
+ },
+ 1138: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") || p.unit.class.has("Fighter") ? 1.3 : 1},
+ type: "class"
+ },
+ 1153: {
+ def: function(p) { return 0; },
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.25 : 1},
+ type: "class"
+ },
+ 1154: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1},
+ type: "class"
+ },
+ 1164: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); },
+ rcv: function(p) { return 1.5; }
+ },
+ 1165: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); },
+ rcv: function(p) { return 1.5; }
+ },
+ 1168: {
+ atk: function(p) { return p.unit.type == "STR" ? window.specials[1168].multiplier : 1; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (p.percHP <= 30 ? 1.75 : 1.1);
+ window.specials[1168].multiplier = n;
+ p.scope.notify({
+ text: 'HP ' + (n == 1.75 ? 'below' : 'above') + ' 30%, using the ' + n + 'x multiplier.',
+ name: '1168warning'
+ });
+ }
+ },
+ 1169: {
+ atk: function(p) { return p.unit.type == "STR" ? window.specials[1169].multiplier : 1; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (p.percHP <= 30 ? 1.75 : 1.1);
+ window.specials[1169].multiplier = n;
+ p.scope.notify({
+ text: 'HP ' + (n == 1.75 ? 'below' : 'above') + ' 30%, using the ' + n + 'x multiplier.',
+ name: '1169warning'
+ });
+ }
+ },
+ 1193: {
+ chain: function(p) { return 2.5; },
+ chainLimiter: function(p) { return p.chainPosition > 0 ? 2.5 : 1.0; }
+ },
+ 1194: {
+ chain: function(p) { return 2.5; },
+ chainLimiter: function(p) { return p.chainPosition > 0 ? 2.5 : 1.0; }
+ },
+ 1195: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; },
+ type: "class"
+ },
+ 1196: {
+ atk: function(p) { return p.unit.class.has("Striker") ? 1.75 : 1; },
+ type: "class"
+ },
+ 1211: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 1212: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 1219: {
+ atk: function(p) {
+ if (!window.specials[1219].stage) return p.unit.class.has("Shooter") ? 1.2 : 1;
+ if (window.specials[1219].stage == 1) return p.unit.class.has("Shooter") ? 1.5 : 1;
+ if (window.specials[1219].stage == 2) return p.unit.class.has("Shooter") ? 2 : 1;
+ },
+ type: "class",
+ stage: -1,
+ onActivation: function(p) {
+ window.specials[1219].stage = (window.specials[1219].stage + 1) % 3;
+ p.scope.notify({
+ text: 'Activating stage #' + (window.specials[1219].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
+ name: '1219warning'
+ });
+ }
+ },
+ 1220: {
+ atk: function(p) {
+ if (!window.specials[1220].stage) return p.unit.class.has("Shooter") ? 1.2 : 1;
+ if (window.specials[1220].stage == 1) return p.unit.class.has("Shooter") ? 1.5 : 1;
+ if (window.specials[1220].stage == 2) return p.unit.class.has("Shooter") ? 2 : 1;
+ },
+ type: "class",
+ stage: -1,
+ onActivation: function(p) {
+ window.specials[1220].stage = (window.specials[1220].stage + 1) % 3;
+ p.scope.notify({
+ text: 'Activating stage #' + (window.specials[1220].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
+ name: '1219warning'
+ });
+ }
+ },
+ 1227: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
+ type: "type"
+ },
+ 1231: {
+ turnedOn: false,
+ onActivation: function(p) {
+ window.specials[1231].turnedOn = true;
+ p.scope.notify({
+ text: 'Only affects damage if Smoker is your captain',
+ name: '1231warning'
+ });
+ },
+ onDeactivation: function(p) {
+ window.specials[1231].turnedOn = false;
+ }
+ },
+ 1232: {
+ turnedOn: false,
+ onActivation: function(p) {
+ window.specials[1232].turnedOn = true;
+ p.scope.notify({
+ text: 'Only affects damage if Smoker is your captain',
+ name: '1232warning'
+ });
+ },
+ onDeactivation: function(p) {
+ window.specials[1232].turnedOn = false;
+ }
+ },
+ 1233: {//Tashigi
+ affinity: function(p){ return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 1234: {//Tashigi
+ affinity: function(p){ return p.unit.class.has("Slasher") || p.unit.class.has("Cerebral") ? 1.5 : 1; }
+ },
+ 1239: {
+ turnedOn: false,
+ onActivation: function(p) {
+ window.specials[1239].turnedOn = true;
+ p.scope.notify({
+ text: 'Only affects damage if Kizaru is your captain',
+ name: '1239warning'
+ });
+ },
+ onDeactivation: function(p) {
+ window.specials[1239].turnedOn = false;
+ }
+ },
+ 1240: {
+ turnedOn: false,
+ onActivation: function(p) {
+ window.specials[1240].turnedOn = true;
+ p.scope.notify({
+ text: 'Only affects damage if Kizaru is your captain',
+ name: '1240warning'
+ });
+ },
+ onDeactivation: function(p) {
+ window.specials[1240].turnedOn = false;
+ }
+ },
+ 1241: {
+ staticMult: function(p) { return 15; }
+ },
+ 1242: {
+ staticMult: function(p) { return 15; }
+ },
+ 1245: {
+ atk: function(p) { return !p.unit.class.has('Fighter') ? 1 : window.specials[1245].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[1245].multiplier == 1.3 ? 1 : 0);
+ window.specials[1245].multiplier = [1.3, 2][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.3, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.3][n] + 'x multiplier, disable and re-enable this special',
+ name: '1245warning'
+ });
+ }
+ },
+ 1246: {
+ atk: function(p) { return !p.unit.class.has('Fighter') ? 1 : window.specials[1246].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[1246].multiplier == 1.3 ? 1 : 0);
+ window.specials[1246].multiplier = [1.3, 2][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.3, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.3][n] + 'x multiplier, disable and re-enable this special',
+ name: '1246warning'
+ });
+ }
+ },
+ 1247: {
+ atk: function(p) { return !p.unit.class.has('Fighter') ? 1 : window.specials[1247].multiplier; },
+ type: "class",
+ onActivation: function(p) {
+ var n = (window.specials[1247].multiplier == 1.3 ? 1 : 0);
+ window.specials[1247].multiplier = [1.3, 2][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.3, 2][n] + 'x ATK multiplier. To switch to the ' + [2, 1.3][n] + 'x multiplier, disable and re-enable this special',
+ name: '1247warning'
+ });
+ }
+ },
+ 1250: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ type: "class"
+ },
+ 1251: {
+ atk: function(p) { return p.unit.class.has("Powerhouse") ? 1.5 : 1; },
+ type: "class"
+ },
+ 1253: {
+ atk: function(p) { return p.unit.type == "STR" ? 1.75 : 1; },
+ type: "class"
+ },
+ 1254: {
+ def: function(p) { return 0.5; } //TODO: get correct value
+ },
+ 1255: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); }
+ },
+ 1256: {
+ atk: function(p) { return 1.3 },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has a defense buff active."
+ },
+ 1261: {//Young Senor Pink
+ affinity: function(p){ return p.unit.class.has("Shooter") || p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1262: {//Young Senor Pink
+ affinity: function(p){ return p.unit.class.has("Shooter") || p.unit.class.has("Free Spirit") ? 1.5 : 1; }
+ },
+ 1263: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2 : 1; },
+ type: "type"
+ },
+ 1264: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 2 : 1; },
+ type: "type"
+ },
+ 1265: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.75 : 1; },
+ type: "class"
+ },
+ 1266: {
+ atk: function(p) { return p.unit.class.has("Free Spirit") ? 1.75 : 1; },
+ type: "class"
+ },
+ 1271: {
+ orb: function(p) { return p.unit.class.has("Shooter") ? CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1); }
+ },
+ 1272: {
+ orb: function(p) { return p.unit.class.has("Shooter") ? CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1); }
+ },
+ 1273: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ type: "class"
+ },
+ 1274: {
+ atk: function(p) { return p.unit.class.has("Fighter") ? 1.5 : 1; },
+ type: "class"
+ },
+ 1282: {
+ atk: function(p) { return 1.2; },
+ type: "class",
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.2); },
+ },
+ 1283: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.5 : 1; },
+ type: "class"
+ },
+ 1286: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ type: "class"
+ },
+ 1287: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.5 : 1; },
+ type: "class"
+ },
+ 1297: {
+ affinity: function(p){ return p.unit.type == "STR" ? 1.75 : 1; }
+ },
+ 1298: {
+ affinity: function(p){ return p.unit.type == "STR" ? 1.75 : 1; }
+ },
+ 1299: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.75 : 1; },
+ type: "class"
+ },
+ 1300: {
+ atk: function(p) { return p.unit.type == "INT" ? 1.75 : 1; },
+ type: "class"
+ },
+ 1313: {
+ atk: function(p) { return p.unit.cost >= 50 ? 1.75 : 1; },
+ type: "class"
+ },
+ 1314: {
+ atk: function(p) { return p.unit.cost >= 50 ? 1.75 : 1; },
+ type: "class"
+ },
+ 1319: {
+ atk: function(p) { return 1.5; },
+ type: "class"
+ },
+ 1320: {
+ atk: function(p) { return 1.5; },
+ type: "class"
+ },
+ 1321: {
+ atk: function(p) { return 1.5; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been delayed."
+ },
+ 1322: {
+ atk: function(p) { return 1.5; },
+ type: "condition",
+ warning: "Selected special (%name%) assumes that the enemy has been delayed."
+ },
+ 1329: {
+ affinity: function(p){ return p.unit.class.has("Fighter") || p.unit.class.has("Free Spirit") ? 1.25 : 1; }
+ },
+ 1335: {
+ chainAddition: function(p){ return 0.5; }
+ },
+ 1336: {
+ chainAddition: function(p){ return 0.5; }
+ },
+ 1339: {
+ chainAddition: function(p) {
+ if (!window.specials[1339].stage) return 0.2;
+ if (window.specials[1339].stage == 1) return 0.3;
+ if (window.specials[1339].stage == 2) return 0.5;
+ },
+ stage: -1,
+ onActivation: function(p) {
+ window.specials[1339].stage = (window.specials[1339].stage + 1) % 3;
+ p.scope.notify({
+ text: 'Activating stage #' + (window.specials[1339].stage + 1) + '. To move onto the next stage, disable and re-enable this special.',
+ name: '1339warning'
+ });
+ }
+ },
+ 1343: {
+ atk: function(p) { return p.defenseDown ? 1.3 : 1; },
+ type: "condition"
+ },
+ 1344: {
+ atk: function(p) { return p.unit.class.has("Driven") ? 1.3 : 1; },
+ type: "class"
+ },
+ 1348: {
+ atk: function(p) { return 1.2; },
+ type: "class",
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.2); },
+ },
+ 1349: {
+ atk: function(p) { return p.unit.class.has("Cerebral") ? 1.2 : 1; },
+ type: "class"
+ },
+ 1351: {
+ def: function(p) { return 0.5; }
+ },
+ 1353: {
+ chainAddition: function(p){ return 0.5; }
+ },
+ 1354: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); },
+ },
+ 1355: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); },
+ },
+ 1358: {
+ rcv: function(p){ return 1.75; }
+ },
+ 1359: {
+ rcv: function(p){ return 1.75; }
+ },
+ 1361: {
+ atk: function(p) { return !p.unit.class.has('Slasher') ? 1 : p.sourceSlot < 2 ? 2 : 1.75 ; },
+ type: "class",
+ },
+ 1362: {
+ atk: function(p) { return !p.unit.class.has('Slasher') ? 1 : p.sourceSlot < 2 ? 2 : 1.75 ; },
+ type: "class",
+ },
+ 1363: {
+ orb: function(p) { return p.unit.type == "PSY" ? CrunchUtils.getOrbMultiplier(p.orb, 1, 2) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1); },
+ },
+ 1364: {
+ orb: function(p) { return p.unit.type == "PSY" ? CrunchUtils.getOrbMultiplier(p.orb, 1, 2) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1); },
+ },
+ 1367:{
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, window.specials[1367].multiplier); },
+ onActivation: function(p) {
+ var n = (window.specials[1367].multiplier == 1.5 ? 1 : 0);
+ window.specials[1367].multiplier = [1.5, 1.75][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 1.75][n] + 'x Orb boost. To switch to the ' + [1.75, 1.5][n] + 'x Orb boost, disable and re-enable this special',
+ name: '1367warning'
+ });
+ },
+ },
+ 1368:{
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, window.specials[1368].multiplier); },
+ onActivation: function(p) {
+ var n = (window.specials[1368].multiplier == 1.5 ? 1 : 0);
+ window.specials[1368].multiplier = [1.5, 1.75][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 1.75][n] + 'x Orb boost. To switch to the ' + [1.75, 1.5][n] + 'x Orb boost, disable and re-enable this special',
+ name: '1368warning'
+ });
+ },
+ },
+ 1375: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.5 : 1; },
+ type: "type",
+ orb: function(p) { return p.slot == p.sourceSlot ? CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1)}
+ },
+ 1376: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.5 : 1; },
+ type: "type",
+ orb: function(p) { return p.slot == p.sourceSlot ? CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1)}
+ },
+ 1379: {
+ orb: function(p) { return (p.unit.class.has("Free Spirit") || p.unit.class.has("Cerebral")) ? CrunchUtils.getOrbMultiplier(p.orb, 1, 2) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1); }
+ },
+ 1380: {
+ orb: function(p) { return (p.unit.class.has("Free Spirit") || p.unit.class.has("Cerebral")) ? CrunchUtils.getOrbMultiplier(p.orb, 1, 2) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1); }
+ },
+ 1389: {
+ orb: function(p) { return p.unit.type == "INT" ? CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1); },
+ },
+ 1390: {
+ atk: function(p) { return p.unit.cost <= 40 ? 1.75 : 1; },
+ type: "class"
+ },
+ 1391: {
+ atk: function(p) { return p.unit.cost <= 40 ? 1.75 : 1; },
+ type: "class"
+ },
+ 1392: {
+ atk: function(p) { return p.unit.type == "PSY" ? 1.75 : 1; },
+ type: "class"
+ },
+ 1393: {
+ atk: function(p) { return 1.1; },
+ type: "class",
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.1); },
+ },
+ 1394: {
+ atk: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Striker") ? 1.5 : 1; },
+ type: "class"
+ },
+ 1395: {
+ atk: function(p) { return p.unit.class.has("Fighter") || p.unit.class.has("Striker") ? 1.5 : 1; },
+ type: "class"
+ },
+ 1396: {
+ def: function(p) { return 0.2; }
+ },
+ 1397: {
+ def: function(p) { return 0.2; }
+ },
+ 1400: {
+ affinity: function(p) { return p.unit.class.has("Shooter") ? window.specials[1400].multiplier : 1; },
+ onActivation: function(p) {
+ var n = (window.specials[1400].multiplier == 1.5 ? 1 : 0);
+ window.specials[1400].multiplier = [1.5, 1.75][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 1.75][n] + 'x Affinity boost. To switch to the ' + [1.75, 1.5][n] + 'x Affinity boost, disable and re-enable this special',
+ name: '1400warning'
+ });
+ },
+ },
+ 1401: {
+ affinity: function(p) { return p.unit.class.has("Shooter") ? window.specials[1401].multiplier : 1; },
+ onActivation: function(p) {
+ var n = (window.specials[1401].multiplier == 1.5 ? 1 : 0);
+ window.specials[1401].multiplier = [1.5, 1.75][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.5, 1.75][n] + 'x Affinity boost. To switch to the ' + [1.75, 1.5][n] + 'x Affinity boost, disable and re-enable this special',
+ name: '1401warning'
+ });
+ },
+ },
+ 1402: {
+ atk: function(p) { return p.unit.type == "PSY" ? window.specials[1402].multiplier : 1; },
+ onActivation: function(p) {
+ var n = (window.specials[1402].multiplier == 1.3 ? 1 : 0);
+ window.specials[1402].multiplier = [1.3, 1.5][n];
+ p.scope.notify({
+ text: 'Using the ' + [1.3, 1.5][n] + 'x Affinity boost. To switch to the ' + [1.5, 1.3][n] + 'x Affinity boost, disable and re-enable this special',
+ name: '1402warning'
+ });
+ },
+ },
+ 1403: {
+ onActivation: function(p) {
+ var n = (window.specials[1403].multiplier == 3.16 ? 1 : 0);
+ window.specials[1403].turnedOn = true;
+ window.specials[1403].multiplier = [3.16, 4][n];
+ p.scope.notify({
+ text: 'Only affects damage is Luffy is your captain, and each Luffy only boosts his own Captain damage. Using the ' + [10, 16][n] + 'x Captain boost. To switch to the ' + [10, 16][n] + 'x Captain boost, disable and re-enable this special',
+ name: '1403warning'
+ });
+ },
+ onDeactivation: function(p) {
+ window.specials[1403].turnedOn = false;
+ }
+
+ },
+ 1404: {
+ onActivation: function(p) {
+ var n = (window.specials[1404].multiplier == 3.16 ? 1 : 0);
+ window.specials[1404].turnedOn = true;
+ window.specials[1404].multiplier = [3.16, 4][n];
+ p.scope.notify({
+ text: 'Only affects damage is Luffy is your captain, and each Luffy only boosts his own Captain damage. Toggle to change between effective captain boosts. Using the ' + [10, 16][n] + 'x Captain boost. To switch to the ' + [10, 16][n] + 'x Captain boost, disable and re-enable this special',
+ name: '1404warning'
+ });
+ },
+ onDeactivation: function(p) {
+ window.specials[1404].turnedOn = false;
+ }
+
+ },
+ 1405: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; },
+ type: "class",
+ orb: function(p) { return p.unit.class.has("Shooter") ? CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1); },
+ warning: "Selected special (%name%) assumes that the enemy has Delay Protection."
+ },
+ 1406: {
+ atk: function(p) { return p.unit.class.has("Shooter") ? 1.75 : 1; },
+ type: "class",
+ orb: function(p) { return p.unit.class.has("Shooter") ? CrunchUtils.getOrbMultiplier(p.orb, 1, 1.75) : CrunchUtils.getOrbMultiplier(p.orb, 1, 1); },
+ warning: "Selected special (%name%) assumes that the enemy has Delay Protection."
+ },
+ 1407: {
+ atk: function(p) { return p.unit.type == "PSY" || p.unit.type == "DEX" ? 2 : 1; },
+ type: "type"
+ },
+ 1408: {
+ atk: function(p) { return p.unit.type == "PSY" || p.unit.type == "DEX" ? 2 : 1; },
+ type: "type"
+ },
+ 1409: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") || p.unit.class.has("Free Spirit") ? 1.75 : 1;
+ },
+ type: "class"
+ },
+ 1410: {
+ atk: function(p) {
+ return p.unit.class.has("Slasher") || p.unit.class.has("Free Spirit") ? 1.75 : 1;
+ },
+ type: "class"
+ },
+ 1415: {
+ atk: function(p) { return p.unit.cost <= 30 ? 1.5 : 1; },
+ type: "class"
+ },
+ 1416: {
+ atk: function(p) { return p.unit.cost <= 30 ? 1.5 : 1; },
+ type: "class"
+ },
+ 1419: {
+ atk: function(p) { return p.defenseDown ? 1.5 : 1; },
+ type: "condition"
+ },
+ 1420: {
+ atk: function(p) { return p.defenseDown ? 1.5 : 1; },
+ type: "condition"
+ },
+ 1421: {
+ atk: function(p) {
+ if(p.percHP == 100.0){
+ return p.unit.class.has("Driven") ? 1.75 : 1;
+ }else{
+ return p.unit.class.has("Driven") ? 1.75 : 1;
+ }
+ },
+ type: "class"
+ },
+ 1422: {
+ atk: function(p) {
+ if(p.percHP == 100.0){
+ return p.unit.class.has("Driven") ? 2 : 1;
+ }else{
+ return p.unit.class.has("Driven") ? 1.5 : 1;
+ }
+ },
+ type: "class"
+ },
+ 1426: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); },
+ warning: "Selected special (%name%) assumes that an ally has been inflicted with Bind."
+ },
+ 1427: {
+ orb: function(p) { return CrunchUtils.getOrbMultiplier(p.orb, 1, 1.5); },
+ warning: "Selected special (%name%) assumes that an ally has been inflicted with Bind."
+ },
+ 1406: {
+ atk: function(p) { return p.slot == p.sourceSlot ? 1.75 : 1; },
+ type: "class",
+ warning: "Selected special (%name%) assumes that the enemy has been Delayed."
+ },
+};
diff --git a/common/data/tandems.js b/common/data/tandems.js
index 30b15fa20..8a97534b4 100644
--- a/common/data/tandems.js
+++ b/common/data/tandems.js
@@ -316,7 +316,17 @@ window.tandems = [
},
{
"name": "Giant Pirates' Charge",
- "desc": "Deals 3 times the cumulative ATK of all the characters in the tandem to all enemies, boosts ATK of Tough characters by 1.4x until the end of the current turn",
+ "desc": "Deals 3 times the cumulative ATK of all the characters in the tandem to all enemies, boosts ATK of Powerhouse characters by 1.4x until the end of the current turn",
"units": [ 884, 903 ]
- }
+ },
+ {
+ "name": "Kidnapping Trio Rampage",
+ "desc": "Deals 3,000 fixed damage to all enemies",
+ "units": [ 954, 955, 956 ]
+ },
+ {
+ "name": "Snake Pit Dance",
+ "desc": "Deals 3 times the cumulative ATK of all the characters in the tandem to all enemies, boosts ATK of Powerhouse characters by 1.3x until the end of the current turn",
+ "units": [ 1056, 1058 ]
+ },
];
diff --git a/common/data/units.js b/common/data/units.js
index 4456548dd..012993008 100644
--- a/common/data/units.js
+++ b/common/data/units.js
@@ -1,922 +1,1451 @@
window.units = [
- [ "Monkey D. Luffy", "STR", "Fighter", 2, 1, 5, 0, 5, 163, 42, 15, 8, 134, 68, 15, 1 ],
- [ "Monkey D. Luffy Gum-Gum Pistol", "STR", "Fighter", 3, 4, 6, 0, 20, 26184, 130, 76, 14, 510, 249, 49, 0.7 ],
- [ "Monkey D. Luffy Gum-Gum Bazooka", "STR", "Fighter", 4, 7, 6, 2, 35, 136167, 404, 227, 39, 975, 522, 105, 1 ],
- [ "Monkey D. Luffy Gear 2", "STR", [ "Fighter", "Freedom" ], 5, 15, 8, 3, 99, 3000000, 902, 473, 74, 1772, 1313, 227, 1 ],
- [ "Roronoa Zoro", "DEX", "Slasher", 3, 4, 6, 0, 20, 26184, 126, 75, 15, 488, 239, 56, 0.7 ],
- [ "Roronoa Zoro Three Thousand Worlds", "DEX", [ "Slasher", "Ambition" ], 4, 7, 6, 2, 35, 136167, 426, 222, 37, 899, 515, 120, 1 ],
- [ "Roronoa Zoro Pound Phoenix", "DEX", [ "Slasher", "Ambition" ], 4, 9, 4, 2, 50, 392109, 462, 258, 37, 1216, 694, 106, 1 ],
- [ "Roronoa Zoro Ashura Ichibugin", "DEX", [ "Slasher", "Ambition" ], 5, 15, 9, 3, 99, 3000000, 724, 667, 39, 2232, 1332, 144, 1 ],
- [ "Nami", "INT", "Striker", 3, 4, 4, 0, 20, 26184, 72, 51, 32, 366, 201, 89, 0.7 ],
- [ "Nami Tornado Tempo", "INT", [ "Striker", "Knowledge" ], 4, 7, 5, 2, 35, 136167, 336, 192, 62, 783, 453, 160, 1 ],
- [ "Nami Mirage Tempo", "INT", [ "Striker", "Knowledge" ], 4, 9, 5, 2, 50, 392109, 348, 201, 75, 840, 543, 219, 1 ],
- [ "Nami Thunderbolt Tempo", "INT", [ "Striker", "Knowledge" ], 5, 15, 4, 3, 99, 3000000, 494, 437, 154, 1262, 1088, 387, 1 ],
- [ "Usopp", "PSY", "Shooter", 3, 4, 5, 0, 20, 26184, 50, 32, 42, 322, 127, 121, 0.7 ],
- [ "Usopp Tabasco Star", "PSY", "Shooter", 4, 7, 6, 2, 35, 136167, 286, 148, 85, 627, 240, 257, 1 ],
- [ "Usopp Golden Pound", "PSY", "Shooter", 4, 9, 6, 2, 50, 392109, 444, 237, 47, 1080, 648, 144, 1 ],
- [ "Sogeking", "PSY", "Shooter", 5, 15, 7, 3, 99, 3000000, 638, 260, 189, 1506, 690, 479, 1 ],
- [ "Sanji", "QCK", "Fighter", 3, 4, 6, 0, 20, 26184, 136, 64, 17, 506, 218, 60, 1 ],
- [ "Sanji Plastic Surgery Shot", "QCK", [ "Fighter", "Tough" ], 4, 7, 5, 2, 35, 136167, 486, 207, 32, 907, 496, 125, 1 ],
- [ "Chef Sanji Hot Rock Stew", "QCK", [ "Fighter", "Tough" ], 4, 9, 4, 2, 50, 392109, 494, 191, 54, 986, 500, 209, 1 ],
- [ "Sanji Diable Jambe Flambe", "QCK", [ "Fighter", "Tough" ], 5, 15, 4, 3, 99, 3000000, 406, 418, 175, 2206, 1030, 249, 1 ],
- [ "Tony Tony Chopper", "PSY", "Fighter", 3, 4, 5, 0, 20, 26184, 52, 40, 39, 294, 144, 120, 1 ],
- [ "Tony Tony Chopper Heavy Point", "PSY", [ "Fighter", "Freedom" ], 4, 9, 5, 2, 50, 392109, 306, 213, 78, 754, 622, 207, 1 ],
- [ "Tony Tony Chopper Brain Point", "INT", [ "Fighter", "Knowledge" ], 4, 9, 5, 2, 50, 392109, 258, 198, 91, 520, 454, 302, 1 ],
- [ "Tony Tony Chopper Arm Point", "STR", [ "Fighter", "Tough" ], 4, 9, 4, 2, 50, 392109, 356, 260, 54, 868, 820, 122, 1 ],
- [ "Tony Tony Chopper Horn Point", "QCK", "Fighter", 4, 9, 6, 2, 50, 392109, 414, 306, 29, 958, 856, 95, 1 ],
- [ "Tony Tony Chopper Guard Point", "DEX", [ "Fighter", "Tough" ], 4, 9, 6, 2, 50, 392109, 394, 178, 75, 1320, 408, 184, 1 ],
- [ "Higuma", "QCK", "Slasher", 2, 8, 5, 0, 35, 45389, 132, 87, 29, 692, 323, 99, 1 ],
- [ "Master of the Near Sea", "STR", "Fighter", 2, 20, 5, 0, 35, 90778, 500, 350, 80, 550, 400, 100, 1.5 ],
- [ "Iron-Mace Alvida", "STR", [ "Striker", "Tough" ], 3, 10, 5, 0, 50, 392109, 184, 154, 5, 1412, 755, 61, 1 ],
- [ "Iron-Mace Alvida Smooth-Smooth Fruit", "STR", [ "Striker", "Freedom" ], 4, 15, 6, 1, 99, 3000000, 766, 625, 135, 1668, 999, 369, 1 ],
- [ "Coby", "PSY", "Fighter", 2, 4, 5, 0, 25, 50439, 70, 25, 32, 166, 70, 120, 1 ],
- [ "Cabin Boy Coby", "PSY", [ "Fighter", "Ambition" ], 3, 9, 5, 3, 50, 392109, 130, 49, 100, 524, 155, 216, 1 ],
- [ "Helmeppo", "INT", "Shooter", 2, 4, 5, 0, 25, 50439, 62, 62, 21, 308, 242, 39, 1 ],
- [ "Cabin Boy Helmeppo", "INT", [ "Fighter", "Ambition" ], 3, 8, 5, 3, 50, 392109, 234, 210, 29, 770, 485, 130, 1 ],
- [ "Axe-Hand Morgan", "STR", [ "Slasher", "Ambition" ], 2, 9, 5, 0, 50, 261406, 133, 100, 5, 1554, 747, 35, 1 ],
- [ "Mohji & Richie", "PSY", [ "Fighter", "Ambition" ], 2, 9, 6, 1, 50, 261406, 150, 135, 10, 1072, 559, 55, 1 ],
- [ "Cabaji the Acrobat", "DEX", [ "Slasher", "Ambition" ], 2, 9, 6, 1, 50, 261406, 134, 77, 32, 824, 458, 130, 1 ],
- [ "Buggy", "INT", [ "Slasher", "Ambition" ], 3, 8, 5, 0, 35, 136167, 200, 107, 22, 818, 446, 85, 1 ],
- [ "Buggy the Clown", "INT", [ "Slasher", "Ambition" ], 4, 11, 5, 2, 70, 1066998, 714, 342, 58, 1666, 757, 135, 1 ],
- [ "Gaimon", "PSY", "Shooter", 2, 3, 6, 0, 50, 261406, 133, 5, 14, 1303, 85, 121, 1.5 ],
- [ "Siam", "INT", "Slasher", 2, 9, 6, 0, 50, 261406, 112, 112, 24, 724, 499, 133, 1 ],
- [ "Butchie", "STR", [ "Slasher", "Tough" ], 2, 9, 6, 0, 50, 261406, 132, 117, 19, 872, 530, 98, 1 ],
- [ "One-Two Django", "DEX", "Slasher", 2, 8, 5, 0, 35, 90778, 118, 64, 39, 556, 271, 139, 1 ],
- [ "Dancing Django", "DEX", "Slasher", 3, 11, 5, 2, 70, 1066998, 476, 218, 98, 1155, 555, 228, 1 ],
- [ "Captain Kuro", "QCK", [ "Slasher", "Knowledge" ], 3, 10, 7, 0, 70, 1066998, 144, 111, 31, 1102, 640, 151, 1 ],
- [ "Kuro of a Hundred Plans", "QCK", [ "Slasher", "Knowledge" ], 4, 15, 8, 2, 99, 3000000, 978, 558, 122, 2074, 1057, 282, 1 ],
- [ "Yosaku", "STR", "Slasher", 2, 5, 6, 1, 40, 134812, 100, 43, 19, 439, 439, 99, 1.5 ],
- [ "Johnny", "QCK", "Slasher", 2, 7, 6, 1, 40, 134812, 100, 42, 20, 421, 421, 108, 1.5 ],
- [ "Iron Fist Fullbody", "STR", "Fighter", 2, 3, 6, 0, 15, 7532, 103, 100, 49, 153, 160, 84, 0.7 ],
- [ "Patty", "STR", "Slasher", 2, 9, 5, 0, 50, 261406, 140, 65, 35, 872, 314, 170, 1 ],
- [ "Carne", "QCK", "Slasher", 2, 9, 5, 0, 50, 261406, 94, 91, 34, 650, 428, 169, 1 ],
- [ "Chef Zeff", "DEX", "Fighter", 3, 10, 5, 1, 50, 392109, 142, 118, 29, 908, 698, 164, 1.5 ],
- [ "Gin", "QCK", "Shooter", 2, 8, 5, 0, 35, 90778, 148, 94, 24, 618, 363, 98, 1 ],
- [ "Gin the Man-Demon", "QCK", "Striker", 3, 11, 6, 1, 70, 1066998, 558, 300, 57, 1152, 792, 209, 1 ],
- [ "Pearl", "STR", [ "Striker", "Tough" ], 2, 8, 5, 0, 35, 90778, 198, 84, 19, 956, 296, 64, 1 ],
- [ "Fire Pearl", "STR", [ "Striker", "Tough" ], 3, 11, 4, 1, 70, 1066998, 820, 226, 38, 1904, 656, 129, 1 ],
- [ "Don Krieg", "INT", [ "Shooter", "Ambition" ], 3, 10, 6, 0, 50, 392109, 214, 97, 24, 1454, 632, 95, 1 ],
- [ "Don Krieg Poison Gas Bomb MH5", "INT", [ "Shooter", "Ambition" ], 4, 15, 4, 2, 99, 3000000, 1276, 553, 74, 2734, 1057, 172, 1 ],
- [ "Nezumi", "INT", [ "Shooter", "Knowledge" ], 2, 6, 6, 0, 30, 28779, 55, 55, 55, 150, 130, 204, 0.7 ],
- [ "Momoo", "STR", "Fighter", 3, 18, 4, 0, 50, 392109, 600, 400, 120, 1000, 500, 150, 1.5 ],
- [ "Choo", "INT", [ "Shooter", "Tough" ], 3, 9, 5, 1, 50, 392109, 110, 71, 49, 768, 492, 256, 1 ],
- [ "Kuroobi", "STR", [ "Fighter", "Tough" ], 3, 9, 4, 1, 50, 392109, 160, 157, 10, 1200, 759, 76, 1 ],
- [ "Hatchan", "DEX", [ "Slasher", "Tough" ], 3, 8, 8, 1, 35, 136167, 88, 88, 47, 588, 387, 143, 1 ],
- [ "Six-Sword Hachi", "DEX", [ "Slasher", "Tough" ], 4, 11, 8, 2, 70, 1066998, 542, 338, 88, 986, 638, 288, 1 ],
- [ "Arlong", "STR", [ "Slasher", "Tough" ], 3, 10, 5, 0, 50, 392109, 104, 152, 24, 936, 930, 82, 1 ],
- [ "Enraged Arlong Shark On Tooth", "STR", [ "Slasher", "Tough" ], 4, 15, 4, 1, 99, 3000000, 832, 832, 55, 1974, 1491, 154, 1 ],
- [ "Tashigi", "QCK", [ "Slasher", "Knowledge" ], 3, 9, 5, 1, 50, 392109, 102, 102, 41, 690, 483, 272, 1 ],
- [ "Tashigi Navy HQ Ensign", "QCK", [ "Slasher", "Knowledge" ], 4, 15, 5, 2, 99, 3000000, 632, 431, 222, 1434, 921, 434, 1.5 ],
- [ "Smoker", "DEX", [ "Striker", "Ambition" ], 3, 9, 5, 1, 50, 392109, 110, 113, 36, 944, 575, 199, 1 ],
- [ "Smoker the White Hunter", "DEX", [ "Striker", "Ambition" ], 4, 15, 5, 2, 99, 3000000, 872, 515, 154, 1736, 1070, 334, 1.5 ],
- [ "Miss Wednesday", "PSY", "Slasher", 3, 9, 5, 0, 35, 136167, 22, 10, 74, 190, 127, 216, 0.7 ],
- [ "Nefertari Vivi", "PSY", "Slasher", 4, 13, 5, 1, 70, 1066998, 138, 102, 183, 682, 454, 350, 1 ],
- [ "Princess Vivi", "PSY", [ "Slasher", "Freedom" ], 5, 20, 6, 3, 99, 4000000, 602, 414, 280, 908, 747, 477, 1.5 ],
- [ "Portgas D. Ace", "QCK", [ "Fighter", "Freedom" ], 4, 13, 6, 3, 70, 1066998, 252, 144, 40, 1802, 545, 199, 1.5 ],
- [ "Portgas D. Ace Flame Mirror", "QCK", [ "Fighter", "Freedom" ], 5, 20, 6, 4, 99, 4000000, 1728, 501, 140, 2886, 1020, 279, 1.5 ],
- [ "Shanks", "PSY", [ "Slasher", "Knowledge" ], 4, 13, 5, 3, 70, 1066998, 186, 159, 46, 1010, 725, 271, 1.5 ],
- [ "Red-Haired Shanks", "PSY", [ "Slasher", "Knowledge" ], 5, 20, 4, 4, 99, 4000000, 898, 670, 222, 2118, 990, 417, 1 ],
- [ "Red Robber Penguin", "STR", "Evolver", 1, 1, 5, 0, 1, 0, 20, 10, 20, 20, 10, 20, 1 ],
- [ "Blue Robber Penguin", "QCK", "Evolver", 1, 1, 5, 0, 1, 0, 20, 10, 20, 20, 10, 20, 1 ],
- [ "Green Robber Penguin", "DEX", "Evolver", 1, 1, 5, 0, 1, 0, 20, 10, 20, 20, 10, 20, 1 ],
- [ "Yellow Robber Penguin", "PSY", "Evolver", 1, 1, 5, 0, 1, 0, 20, 10, 20, 20, 10, 20, 1 ],
- [ "Black Robber Penguin", "INT", "Evolver", 1, 1, 5, 0, 1, 0, 20, 10, 20, 20, 10, 20, 1 ],
- [ "Rainbow Robber Penguin", "INT", "Evolver", 3, 1, 5, 0, 1, 0, 20, 20, 50, 20, 20, 50, 1 ],
- [ "Red Pirate Penguin", "STR", "Evolver", 2, 3, 6, 0, 1, 0, 30, 20, 180, 30, 20, 180, 1 ],
- [ "Blue Pirate Penguin", "QCK", "Evolver", 2, 3, 6, 0, 1, 0, 30, 20, 180, 30, 20, 180, 1 ],
- [ "Green Pirate Penguin", "DEX", "Evolver", 2, 3, 6, 0, 1, 0, 30, 20, 180, 30, 20, 180, 1 ],
- [ "Yellow Pirate Penguin", "PSY", "Evolver", 2, 3, 6, 0, 1, 0, 30, 20, 180, 30, 20, 180, 1 ],
- [ "Black Pirate Penguin", "INT", "Evolver", 2, 3, 6, 0, 1, 0, 30, 20, 180, 30, 20, 180, 1 ],
- [ "Red Hermit Crab", "STR", "Evolver", 1, 1, 5, 0, 1, 0, 50, 180, 0, 50, 180, 0, 1 ],
- [ "Blue Hermit Crab", "QCK", "Evolver", 1, 1, 5, 0, 1, 0, 50, 180, 0, 50, 180, 0, 1 ],
- [ "Green Hermit Crab", "DEX", "Evolver", 1, 1, 5, 0, 1, 0, 50, 180, 0, 50, 180, 0, 1 ],
- [ "Yellow Hermit Crab", "PSY", "Evolver", 1, 1, 5, 0, 1, 0, 50, 180, 0, 50, 180, 0, 1 ],
- [ "Black Hermit Crab", "INT", "Evolver", 1, 1, 5, 0, 1, 0, 50, 180, 0, 50, 180, 0, 1 ],
- [ "Rainbow Hermit Crab", "INT", "Evolver", 2, 3, 5, 0, 1, 0, 50, 280, 0, 50, 150, 0, 1 ],
- [ "Red Armored Crab", "STR", "Evolver", 2, 2, 5, 0, 1, 0, 50, 300, 0, 50, 300, 0, 1 ],
- [ "Blue Armored Crab", "QCK", "Evolver", 2, 2, 5, 0, 1, 0, 50, 300, 0, 50, 300, 0, 1 ],
- [ "Green Armored Crab", "DEX", "Evolver", 2, 2, 5, 0, 1, 0, 50, 300, 0, 50, 300, 0, 1 ],
- [ "Yellow Armored Crab", "PSY", "Evolver", 2, 2, 5, 0, 1, 0, 50, 300, 0, 50, 300, 0, 1 ],
- [ "Black Armored Crab", "INT", "Evolver", 2, 2, 5, 0, 1, 0, 50, 300, 0, 50, 300, 0, 1 ],
- [ "Red Striped Dragon", "STR", "Evolver", 3, 12, 4, 0, 1, 0, 500, 500, 50, 500, 500, 50, 1 ],
- [ "Blue Striped Dragon", "QCK", "Evolver", 3, 12, 4, 0, 1, 0, 500, 500, 50, 500, 500, 50, 1 ],
- [ "Green Striped Dragon", "DEX", "Evolver", 3, 12, 4, 0, 1, 0, 500, 500, 50, 500, 500, 50, 1 ],
- [ "Yellow Striped Dragon", "PSY", "Evolver", 3, 12, 4, 0, 1, 0, 500, 500, 50, 500, 500, 50, 1 ],
- [ "Black Striped Dragon", "INT", "Evolver", 3, 12, 4, 0, 1, 0, 500, 500, 50, 500, 500, 50, 1 ],
- [ "Red Treasure Turtle", "STR", "Booster", 3, 1, 6, 0, 1, 0, 100, 10, 10, 100, 10, 10, 1 ],
- [ "Blue Treasure Turtle", "QCK", "Booster", 3, 1, 6, 0, 1, 0, 100, 10, 10, 100, 10, 10, 1 ],
- [ "Green Treasure Turtle", "DEX", "Booster", 3, 1, 6, 0, 1, 0, 100, 10, 10, 100, 10, 10, 1 ],
- [ "Yellow Treasure Turtle", "PSY", "Booster", 3, 1, 6, 0, 1, 0, 100, 10, 10, 100, 10, 10, 1 ],
- [ "Black Treasure Turtle", "INT", "Booster", 3, 1, 6, 0, 1, 0, 100, 10, 10, 100, 10, 10, 1 ],
- [ "Red Daimyo Turtle", "STR", "Booster", 4, 2, 5, 0, 1, 0, 500, 20, 20, 500, 20, 20, 1 ],
- [ "Blue Daimyo Turtle", "QCK", "Booster", 4, 2, 5, 0, 1, 0, 500, 20, 20, 500, 20, 20, 1 ],
- [ "Green Daimyo Turtle", "DEX", "Booster", 4, 2, 5, 0, 1, 0, 500, 20, 20, 500, 20, 20, 1 ],
- [ "Yellow Daimyo Turtle", "PSY", "Booster", 4, 2, 5, 0, 1, 0, 500, 20, 20, 500, 20, 20, 1 ],
- [ "Black Daimyo Turtle", "INT", "Booster", 4, 2, 5, 0, 1, 0, 500, 20, 20, 500, 20, 20, 1 ],
- [ "Sea Pony", "PSY", "Evolver", 1, 2, 5, 0, 1, 0, 20, 20, 20, 20, 20, 10, 1 ],
- [ "Sea Colt", "PSY", "Evolver", 2, 4, 5, 0, 1, 0, 50, 50, 50, 50, 50, 20, 1 ],
- [ "Sea Horse", "PSY", "Evolver", 3, 6, 4, 0, 1, 0, 100, 100, 100, 100, 100, 40, 1 ],
- [ "Sea Stallion", "PSY", "Evolver", 4, 8, 4, 0, 1, 0, 150, 150, 150, 150, 150, 60, 1 ],
- [ "Sword Bandit", "DEX", "Slasher", 1, 1, 5, 0, 20, 8728, 77, 41, 9, 348, 140, 41, 1 ],
- [ "Pistol Bandit", "STR", "Shooter", 1, 1, 5, 0, 20, 8728, 17, 14, 28, 105, 57, 104, 1 ],
- [ "Fighter Group Cabin Boy Red Pirates", "STR", "Fighter", 1, 2, 6, 0, 10, 2330, 79, 54, 6, 327, 141, 17, 1 ],
- [ "Fighter Group Cabin Boy Blue Pirates", "QCK", "Fighter", 1, 2, 6, 0, 10, 2330, 85, 51, 6, 349, 133, 16, 1 ],
- [ "Fighter Group Cabin Boy Green Pirates", "DEX", "Fighter", 1, 2, 6, 0, 10, 2330, 85, 54, 5, 357, 138, 13, 1 ],
- [ "Fighter Group Cabin Boy Yellow Pirates", "PSY", "Fighter", 1, 2, 6, 0, 10, 2330, 77, 49, 8, 315, 126, 24, 1 ],
- [ "Fighter Group Cabin Boy Black Pirates", "INT", "Fighter", 1, 2, 6, 0, 10, 2330, 83, 61, 3, 345, 153, 10, 1 ],
- [ "Slasher Group Cabin Boy Red Pirates", "STR", "Slasher", 1, 3, 6, 0, 15, 7532, 69, 47, 10, 333, 134, 28, 1 ],
- [ "Slasher Group Cabin Boy Blue Pirates", "QCK", "Slasher", 1, 3, 6, 0, 15, 7532, 75, 41, 11, 347, 118, 31, 1 ],
- [ "Slasher Group Cabin Boy Green Pirates", "DEX", "Slasher", 1, 3, 6, 0, 15, 7532, 69, 44, 11, 341, 115, 33, 1 ],
- [ "Slasher Group Cabin Boy Yellow Pirates", "PSY", "Slasher", 1, 3, 6, 0, 15, 7532, 63, 38, 14, 325, 114, 35, 1 ],
- [ "Slasher Group Cabin Boy Black Pirates", "INT", "Slasher", 1, 3, 6, 0, 15, 7532, 65, 49, 10, 341, 136, 25, 1 ],
- [ "Striker Group Cabin Boy Red Pirates", "STR", "Striker", 1, 1, 6, 0, 10, 2330, 77, 49, 12, 281, 114, 27, 0.7 ],
- [ "Striker Group Cabin Boy Blue Pirates", "QCK", "Striker", 1, 1, 6, 0, 10, 2330, 79, 45, 13, 281, 105, 30, 0.7 ],
- [ "Striker Group Cabin Boy Green Pirates", "DEX", "Striker", 1, 1, 6, 0, 10, 2330, 73, 45, 14, 255, 103, 35, 0.7 ],
- [ "Striker Group Cabin Boy Yellow Pirates", "PSY", "Striker", 1, 1, 6, 0, 10, 2330, 67, 42, 16, 253, 101, 36, 0.7 ],
- [ "Striker Group Cabin Boy Black Pirates", "INT", "Striker", 1, 1, 6, 0, 10, 2330, 73, 57, 10, 261, 127, 26, 0.7 ],
- [ "Shooter Group Cabin Boy Red Pirates", "STR", "Shooter", 1, 3, 6, 0, 10, 2330, 41, 19, 24, 129, 57, 78, 0.7 ],
- [ "Shooter Group Cabin Boy Blue Pirates", "QCK", "Shooter", 1, 3, 6, 0, 10, 2330, 39, 17, 25, 125, 53, 80, 0.7 ],
- [ "Shooter Group Cabin Boy Green Pirates", "DEX", "Shooter", 1, 3, 6, 0, 10, 2330, 37, 15, 26, 123, 51, 81, 0.7 ],
- [ "Shooter Group Cabin Boy Yellow Pirates", "PSY", "Shooter", 1, 3, 6, 0, 10, 2330, 35, 13, 27, 107, 47, 85, 0.7 ],
- [ "Shooter Group Cabin Boy Black Pirates", "INT", "Shooter", 1, 3, 6, 0, 10, 2330, 41, 22, 23, 139, 64, 74, 0.7 ],
- [ "Cannoneer Cabin Boy", "INT", "Shooter", 1, 4, 5, 0, 20, 17456, 98, 80, 1, 523, 280, 3, 1 ],
- [ "Fighter Group Crew Red Pirates", "STR", "Fighter", 2, 6, 5, 0, 30, 57558, 200, 103, 10, 707, 428, 29, 1 ],
- [ "Fighter Group Crew Blue Pirates", "QCK", "Fighter", 2, 6, 5, 0, 30, 57558, 220, 93, 10, 727, 412, 31, 1 ],
- [ "Fighter Group Crew Green Pirates", "DEX", "Fighter", 2, 6, 5, 0, 30, 57558, 212, 100, 9, 717, 417, 31, 1 ],
- [ "Fighter Group Crew Yellow Pirates", "PSY", "Fighter", 2, 6, 5, 0, 30, 57558, 190, 90, 16, 695, 398, 41, 1 ],
- [ "Fighter Group Crew Black Pirates", "INT", "Fighter", 2, 6, 5, 0, 30, 57558, 202, 108, 8, 695, 440, 27, 1 ],
- [ "Slasher Group Crew Red Pirates", "STR", "Slasher", 2, 7, 5, 0, 35, 90778, 178, 90, 19, 645, 406, 79, 1 ],
- [ "Slasher Group Crew Blue Pirates", "QCK", "Slasher", 2, 7, 5, 0, 35, 90778, 184, 75, 23, 659, 372, 88, 1 ],
- [ "Slasher Group Crew Green Pirates", "DEX", "Slasher", 2, 7, 5, 0, 35, 90778, 162, 83, 24, 665, 375, 86, 1 ],
- [ "Slasher Group Crew Yellow Pirates", "PSY", "Slasher", 2, 7, 5, 0, 35, 90778, 152, 73, 29, 629, 369, 94, 1 ],
- [ "Slasher Group Crew Black Pirates", "INT", "Slasher", 2, 7, 5, 0, 35, 90778, 176, 100, 16, 695, 384, 78, 1 ],
- [ "Striker Group Crew Red Pirates", "STR", "Striker", 2, 5, 5, 0, 25, 33626, 174, 85, 21, 473, 320, 71, 0.7 ],
- [ "Striker Group Crew Blue Pirates", "QCK", "Striker", 2, 5, 5, 0, 25, 33626, 190, 74, 22, 483, 309, 73, 0.7 ],
- [ "Striker Group Crew Green Pirates", "DEX", "Striker", 2, 5, 5, 0, 25, 33626, 176, 75, 24, 429, 318, 79, 0.7 ],
- [ "Striker Group Crew Yellow Pirates", "PSY", "Striker", 2, 5, 5, 0, 25, 33626, 182, 69, 25, 439, 289, 87, 0.7 ],
- [ "Striker Group Crew Black Pirates", "INT", "Striker", 2, 5, 5, 0, 25, 33626, 188, 87, 18, 465, 342, 65, 0.7 ],
- [ "Shooter Group Crew Red Pirates", "STR", "Shooter", 2, 7, 5, 0, 30, 57558, 75, 23, 60, 289, 118, 202, 1 ],
- [ "Shooter Group Crew Blue Pirates", "QCK", "Shooter", 2, 7, 5, 0, 30, 57558, 75, 20, 61, 299, 110, 203, 1 ],
- [ "Shooter Group Crew Green Pirates", "DEX", "Shooter", 2, 7, 5, 0, 30, 57558, 65, 19, 63, 281, 113, 205, 1 ],
- [ "Shooter Group Crew Yellow Pirates", "PSY", "Shooter", 2, 7, 5, 0, 30, 57558, 55, 15, 66, 227, 98, 219, 1 ],
- [ "Shooter Group Crew Black Pirates", "INT", "Shooter", 2, 7, 5, 0, 30, 57558, 75, 29, 58, 299, 155, 198, 1 ],
- [ "Cannoneer Skilled", "INT", "Shooter", 2, 12, 5, 0, 50, 261406, 203, 105, 3, 1350, 550, 30, 1 ],
- [ "Bodyguard, ‘Sunglasses'", "DEX", "Shooter", 1, 4, 5, 0, 20, 8728, 115, 50, 30, 370, 180, 90, 0.7 ],
- [ "Bearded Bodyguard", "QCK", "Shooter", 1, 4, 5, 0, 20, 8728, 105, 70, 25, 370, 210, 80, 0.7 ],
- [ "Knuckle Punk Black Cat Pirates", "STR", "Fighter", 2, 6, 6, 0, 25, 33626, 30, 129, 2, 267, 612, 3, 1 ],
- [ "Saber Punk Black Cat Pirates", "DEX", "Slasher", 2, 6, 5, 0, 25, 33626, 42, 120, 3, 295, 592, 5, 1 ],
- [ "Halberd Punk Black Cat Pirates", "QCK", "Striker", 2, 6, 5, 0, 25, 33626, 32, 122, 4, 277, 598, 6, 1 ],
- [ "Pistol Punk Black Cat Pirates", "PSY", "Shooter", 2, 6, 5, 0, 25, 33626, 30, 117, 6, 269, 569, 17, 1 ],
- [ "Cannoneer Punk Black Cat Pirates", "INT", "Shooter", 2, 6, 5, 0, 25, 33626, 26, 137, 0, 267, 621, 0, 1 ],
- [ "Fighter Group Leader", "STR", "Fighter", 3, 7, 6, 1, 40, 202218, 208, 97, 23, 982, 457, 104, 1 ],
- [ "Slasher Group Leader", "DEX", "Slasher", 3, 7, 5, 1, 45, 286773, 166, 82, 35, 922, 397, 184, 1 ],
- [ "Striker Group Leader", "QCK", "Striker", 3, 7, 5, 1, 35, 136167, 200, 80, 30, 828, 291, 135, 1 ],
- [ "Shooter Group Leader", "PSY", "Shooter", 3, 7, 5, 1, 40, 202218, 128, 41, 55, 508, 253, 251, 1 ],
- [ "Assassin Master", "INT", "Shooter", 3, 7, 5, 1, 50, 392109, 224, 119, 13, 1532, 557, 79, 1 ],
- [ "Karate Fishman Arlong crewmember", "STR", "Fighter", 2, 7, 6, 0, 30, 57558, 70, 49, 24, 547, 258, 116, 0.7 ],
- [ "Sword Fishman Arlong crewmember", "DEX", "Slasher", 2, 7, 5, 0, 30, 57558, 92, 44, 22, 585, 245, 114, 0.7 ],
- [ "Spear Fishman Arlong crewmember", "QCK", "Striker", 2, 7, 5, 0, 30, 57558, 82, 46, 23, 553, 246, 119, 0.7 ],
- [ "Pistol Fishman Arlong crewmember", "PSY", "Shooter", 2, 7, 5, 0, 30, 57558, 72, 36, 28, 523, 216, 134, 0.7 ],
- [ "Knuckle Apprentice Navy", "STR", "Fighter", 1, 3, 6, 0, 15, 7532, 105, 66, 6, 317, 203, 17, 1 ],
- [ "Saber Apprentice Navy", "DEX", "Slasher", 1, 4, 6, 0, 20, 17456, 45, 75, 13, 293, 194, 44, 1 ],
- [ "Halberd Apprentice Navy", "QCK", "Striker", 1, 3, 6, 0, 15, 7532, 73, 70, 10, 305, 158, 34, 1 ],
- [ "Pistol Apprentice Navy", "PSY", "Shooter", 1, 3, 6, 0, 15, 7532, 49, 16, 32, 105, 72, 96, 1 ],
- [ "Cannoneer Apprentice Navy", "INT", "Shooter", 1, 5, 5, 0, 25, 33626, 93, 90, 0, 400, 350, 1, 1 ],
- [ "Knuckle Seaman Navy", "STR", "Fighter", 2, 5, 5, 0, 25, 33626, 139, 96, 17, 523, 289, 43, 1 ],
- [ "Saber Seaman Navy", "DEX", "Slasher", 2, 6, 5, 0, 35, 90778, 75, 101, 26, 512, 322, 84, 1 ],
- [ "Halberd Seaman Navy", "QCK", "Striker", 2, 5, 5, 0, 25, 33626, 105, 92, 24, 407, 290, 62, 1 ],
- [ "Pistol Seaman Navy", "PSY", "Shooter", 2, 6, 5, 0, 25, 33626, 75, 23, 52, 139, 100, 170, 1 ],
- [ "Cannoneer Seaman Navy", "INT", "Shooter", 2, 10, 5, 0, 40, 134812, 143, 140, 1, 620, 660, 2, 1.5 ],
- [ "Red Elder Turtle", "STR", "Booster", 5, 4, 4, 0, 1, 0, 1000, 30, 30, 1000, 30, 30, 1 ],
- [ "Blue Elder Turtle", "QCK", "Booster", 5, 4, 4, 0, 1, 0, 1000, 30, 30, 1000, 30, 30, 1 ],
- [ "Green Elder Turtle", "DEX", "Booster", 5, 4, 4, 0, 1, 0, 1000, 30, 30, 1000, 30, 30, 1 ],
- [ "Yellow Elder Turtle", "PSY", "Booster", 5, 4, 4, 0, 1, 0, 1000, 30, 30, 1000, 30, 30, 1 ],
- [ "Black Elder Turtle", "INT", "Booster", 5, 4, 4, 0, 1, 0, 1000, 30, 30, 1000, 30, 30, 1 ],
- [ "Knuckle Ensign Navy HQ", "STR", "Fighter", 3, 9, 6, 1, 50, 392109, 474, 237, 30, 898, 490, 107, 1 ],
- [ "Saber Ensign Navy HQ", "DEX", "Slasher", 3, 9, 6, 1, 50, 392109, 424, 229, 51, 800, 467, 131, 1 ],
- [ "Halberd Ensign Navy HQ", "QCK", "Striker", 3, 9, 6, 1, 50, 392109, 400, 220, 48, 916, 442, 120, 1 ],
- [ "Pistol Ensign Navy HQ", "PSY", "Shooter", 3, 9, 6, 1, 50, 392109, 121, 70, 145, 275, 191, 320, 1 ],
- [ "Bazooka Ensign Navy HQ", "INT", "Shooter", 3, 12, 5, 1, 70, 1066998, 480, 460, 1, 1300, 850, 3, 1 ],
- [ "Mr. 5 Nez-Palm Cannon", "STR", "Fighter", 3, 11, 5, 1, 35, 136167, 82, 142, 31, 752, 602, 124, 1 ],
- [ "Mr. 5 Breeze Breath Bomb", "STR", "Shooter", 4, 15, 5, 2, 70, 1066998, 688, 520, 92, 1120, 943, 180, 1 ],
- [ "Miss Valentine", "QCK", "Fighter", 3, 11, 5, 1, 35, 136167, 120, 114, 34, 860, 488, 144, 1 ],
- [ "Miss Valentine 10,000 Kilo Guillotine", "QCK", "Fighter", 4, 15, 5, 2, 70, 1066998, 804, 426, 104, 1324, 787, 198, 1 ],
- [ "Mr. 3", "INT", [ "Slasher", "Knowledge" ], 3, 11, 4, 1, 35, 136167, 196, 100, 26, 926, 515, 120, 1 ],
- [ "Mr. 3 Extra Special Candelabra", "INT", [ "Slasher", "Knowledge" ], 4, 15, 4, 2, 70, 1066998, 600, 449, 120, 1394, 818, 176, 1 ],
- [ "Miss Goldenweek", "DEX", [ "Striker", "Freedom" ], 3, 11, 5, 1, 35, 136167, 51, 51, 81, 301, 301, 305, 1 ],
- [ "Miss Goldenweek Colors Trap: Calming Green", "DEX", [ "Striker", "Freedom" ], 4, 15, 5, 2, 70, 1066998, 264, 264, 268, 412, 390, 530, 1 ],
- [ "Mr. 2 Bon Clay", "PSY", [ "Fighter", "Freedom" ], 3, 11, 5, 1, 35, 136167, 94, 93, 46, 690, 403, 201, 1 ],
- [ "Mr. 2 Bon Clay Bombardier Arabesque", "PSY", [ "Fighter", "Freedom" ], 4, 15, 4, 2, 70, 1066998, 599, 348, 169, 935, 709, 302, 1 ],
- [ "Miss All Sunday Baroque Works VP", "INT", [ "Fighter", "Knowledge" ], 4, 15, 6, 1, 50, 392109, 368, 128, 96, 772, 478, 252, 0.7 ],
- [ "Nico Robin", "INT", [ "Fighter", "Knowledge" ], 5, 20, 6, 2, 99, 3000000, 736, 430, 214, 1865, 1055, 338, 1 ],
- [ "Mr. 9", "QCK", "Striker", 2, 10, 5, 0, 35, 90778, 106, 88, 33, 490, 313, 136, 0.7 ],
- [ "Mr. 9 Hot Blooded Bat", "QCK", "Striker", 3, 13, 5, 3, 70, 1066998, 408, 249, 99, 1011, 590, 240, 0.7 ],
- [ "Laboon", "STR", [ "Fighter", "Tough" ], 3, 18, 5, 1, 50, 392109, 650, 300, 150, 1100, 500, 200, 1 ],
- [ "Laboon (Luffy's drawing)", "STR", [ "Fighter", "Tough" ], 4, 22, 5, 2, 99, 3000000, 1000, 400, 160, 2500, 850, 250, 1 ],
- [ "Neptunian Squid", "DEX", "Striker", 3, 18, 8, 1, 50, 392109, 600, 280, 130, 900, 480, 180, 1.5 ],
- [ "Monkey D. Luffy Gum-Gum Balloon", "STR", [ "Fighter", "Freedom" ], 4, 15, 6, 2, 50, 392109, 490, 178, 29, 1492, 655, 63, 1 ],
- [ "Monkey D. Luffy Gear Third", "STR", [ "Fighter", "Freedom" ], 5, 22, 4, 2, 99, 4000000, 1374, 585, 50, 2960, 1303, 105, 1 ],
- [ "Roronoa Zoro Streaming Wolf Swords", "DEX", [ "Slasher", "Ambition" ], 4, 15, 5, 2, 50, 392109, 598, 136, 5, 1902, 582, 19, 1 ],
- [ "Roronoa Zoro Lion's Song", "DEX", [ "Slasher", "Ambition" ], 5, 22, 6, 3, 99, 4000000, 1882, 538, 10, 3558, 1038, 32, 1 ],
- [ "Nami Fine Tempo", "INT", [ "Striker", "Knowledge" ], 4, 15, 5, 2, 50, 392109, 454, 133, 50, 1062, 421, 102, 1 ],
- [ "Nami Happiness Punch", "INT", [ "Striker", "Knowledge" ], 5, 22, 4, 3, 99, 4000000, 1044, 377, 94, 1990, 949, 168, 1 ],
- [ "Usopp Usopp Hammer", "PSY", "Striker", 3, 12, 5, 1, 35, 136167, 188, 101, 40, 778, 388, 191, 1 ],
- [ "Usopp Impact", "PSY", "Shooter", 4, 18, 6, 2, 70, 1066998, 733, 361, 97, 1185, 669, 265, 1 ],
- [ "Mr. Prince Mutton Shot", "QCK", [ "Fighter", "Knowledge" ], 3, 12, 4, 1, 35, 136167, 276, 108, 32, 1144, 457, 107, 1 ],
- [ "Mr. Prince Veau Shot", "QCK", [ "Fighter", "Knowledge" ], 4, 18, 5, 2, 70, 1066998, 1101, 422, 93, 1600, 792, 161, 1 ],
- [ "Dracule Mihawk", "DEX", "Slasher", 4, 30, 4, 1, 70, 1066998, 324, 201, 1, 1998, 814, 7, 1 ],
- [ "Hawk Eyes Mihawk", "DEX", "Slasher", 5, 50, 4, 1, 99, 5000000, 1916, 782, 5, 3760, 1285, 15, 1 ],
- [ "Escapee Morgan", "STR", [ "Slasher", "Ambition" ], 3, 17, 5, 1, 70, 711332, 1427, 699, 27, 1600, 1000, 35, 1 ],
- [ "Double Crosser Django", "PSY", [ "Slasher", "Freedom" ], 3, 11, 5, 1, 70, 1066998, 446, 219, 103, 930, 665, 230, 1 ],
- [ "Double Ironfist Fullbody", "STR", [ "Fighter", "Freedom" ], 3, 11, 6, 1, 70, 1066998, 150, 150, 80, 890, 809, 187, 1 ],
- [ "Hina", "QCK", [ "Fighter", "Knowledge" ], 3, 12, 5, 1, 50, 392109, 154, 73, 42, 1176, 495, 187, 1 ],
- [ "Black Cage Hina", "QCK", [ "Fighter", "Knowledge" ], 4, 18, 4, 2, 99, 3000000, 1088, 422, 149, 2270, 905, 300, 1 ],
- [ "Mr. 8", "PSY", [ "Shooter", "Knowledge" ], 2, 10, 5, 0, 35, 90778, 178, 55, 32, 530, 248, 151, 1 ],
- [ "Mr. 8 Igarappapa", "PSY", [ "Shooter", "Knowledge" ], 3, 13, 5, 1, 70, 1066998, 500, 186, 120, 1286, 433, 230, 1 ],
- [ "Miss Monday", "STR", [ "Fighter", "Tough" ], 2, 10, 4, 0, 35, 90778, 66, 126, 27, 350, 500, 97, 1 ],
- [ "Miss Monday Superhuman Brass Knuckles", "STR", [ "Fighter", "Tough" ], 3, 13, 4, 1, 70, 1066998, 270, 422, 71, 506, 1005, 186, 1 ],
- [ "Knuckle Millions Baroque Works", "STR", "Fighter", 2, 5, 6, 0, 25, 33626, 185, 89, 21, 532, 352, 50, 1 ],
- [ "Saber Millions Baroque Works", "DEX", "Slasher", 2, 5, 6, 0, 25, 33626, 161, 77, 29, 486, 294, 77, 1 ],
- [ "Polearm Millions Baroque Works", "QCK", "Striker", 2, 5, 6, 0, 25, 33626, 197, 74, 24, 620, 278, 60, 1 ],
- [ "Pistol Millions Baroque Works", "PSY", "Shooter", 2, 5, 6, 0, 25, 33626, 159, 51, 40, 476, 224, 102, 1 ],
- [ "Bazooka Millions Baroque Works", "INT", "Shooter", 2, 5, 4, 0, 25, 33626, 203, 113, 10, 640, 388, 20, 1 ],
- [ "Knuckle Billions Baroque Works", "STR", "Fighter", 3, 9, 5, 1, 50, 261406, 466, 301, 32, 850, 580, 85, 1 ],
- [ "Saber Billions Baroque Works", "DEX", "Slasher", 3, 9, 5, 1, 50, 261406, 410, 257, 56, 798, 508, 120, 1 ],
- [ "Halberd Billions Baroque Works", "QCK", "Striker", 3, 9, 5, 1, 50, 261406, 560, 230, 40, 996, 477, 95, 1 ],
- [ "Pistol Billions Baroque Works", "PSY", "Shooter", 3, 9, 5, 1, 50, 261406, 402, 187, 82, 698, 400, 172, 1 ],
- [ "Bazooka Billions Baroque Works", "INT", "Shooter", 3, 9, 4, 1, 50, 261406, 550, 319, 12, 1020, 655, 32, 1 ],
- [ "Chopper Man", "PSY", "Fighter", 4, 10, 6, 5, 50, 130703, 250, 250, 125, 500, 500, 250, 1 ],
- [ "Tony Tony Chopper Pre-Rampage", "STR", "Fighter", 4, 30, 6, 1, 70, 1066998, 280, 180, 300, 1808, 851, 0, 1 ],
- [ "Tony Tony Chopper Post-Rampage", "STR", [ "Fighter", "Tough" ], 5, 50, 4, 2, 99, 5000000, 1808, 851, -350, 3660, 1500, -900, 1 ],
- [ "Marco", "PSY", [ "Fighter", "Tough" ], 4, 18, 6, 3, 50, 392109, 172, 125, 64, 1030, 676, 220, 1 ],
- [ "Marco the Phoenix", "PSY", [ "Fighter", "Tough" ], 5, 28, 4, 4, 99, 4000000, 951, 618, 180, 2258, 1100, 390, 1 ],
- [ "Jozu", "QCK", [ "Fighter", "Tough" ], 4, 18, 4, 3, 50, 392109, 412, 109, 27, 1820, 596, 98, 1 ],
- [ "Diamond Jozu", "QCK", [ "Fighter", "Tough" ], 5, 28, 4, 4, 99, 4000000, 1748, 524, 69, 3300, 987, 231, 1 ],
- [ "Vista", "INT", [ "Slasher", "Tough" ], 4, 18, 5, 3, 50, 392109, 290, 206, 15, 1388, 806, 100, 1 ],
- [ "Flower Sword Vista", "INT", [ "Slasher", "Tough" ], 5, 28, 5, 4, 99, 4000000, 1314, 732, 72, 2840, 1325, 185, 1 ],
- [ "Izo", "DEX", [ "Shooter", "Knowledge" ], 4, 18, 4, 3, 50, 392109, 232, 130, 50, 1300, 634, 172, 1 ],
- [ "Flintlock Pistols Izo", "DEX", [ "Shooter", "Knowledge" ], 5, 28, 5, 4, 99, 4000000, 1224, 585, 136, 2550, 1068, 319, 1 ],
- [ "Blamenco", "STR", [ "Striker", "Freedom" ], 4, 18, 4, 3, 50, 392109, 204, 192, 34, 1150, 775, 150, 1 ],
- [ "Blamenco the Mallet", "STR", [ "Striker", "Freedom" ], 5, 28, 4, 4, 99, 4000000, 1086, 726, 112, 2488, 1252, 268, 1 ],
- [ "Edward Newgate", "STR", [ "Striker", "Tough" ], 5, 40, 4, 4, 70, 1422664, 1338, 522, 80, 3220, 1060, 156, 1 ],
- [ "Whitebeard", "STR", [ "Striker", "Tough" ], 6, 55, 4, 5, 99, 5000000, 3148, 978, 110, 3900, 1360, 235, 1 ],
- [ "Training Coby", "PSY", [ "Striker", "Ambition" ], 3, 12, 5, 1, 50, 261406, 90, 81, 55, 780, 514, 218, 0.7 ],
- [ "Petty Officer Coby", "PSY", [ "Fighter", "Ambition" ], 4, 18, 6, 2, 99, 3000000, 701, 485, 191, 1926, 984, 340, 1 ],
- [ "Training Helmeppo", "INT", [ "Striker", "Ambition" ], 3, 12, 5, 1, 50, 261406, 108, 93, 43, 890, 605, 185, 0.7 ],
- [ "Sergeant Helmeppo", "INT", [ "Slasher", "Ambition" ], 4, 18, 5, 2, 99, 3000000, 807, 555, 150, 1998, 1060, 260, 1 ],
- [ "Rainbow Pirate Penguin", "INT", "Evolver", 4, 6, 6, 0, 1, 0, 200, 100, 300, 200, 100, 300, 1 ],
- [ "Rainbow Striped Dragon", "INT", "Evolver", 4, 20, 4, 0, 1, 0, 1500, 800, 100, 1500, 800, 100, 1 ],
- [ "White Chase Smoker", "DEX", [ "Striker", "Ambition" ], 5, 20, 5, 3, 99, 2000000, 1644, 1012, 298, 2215, 1282, 338, 1.5 ],
- [ "Armed Fighter Unit Red Pirates", "STR", "Fighter", 3, 12, 5, 1, 60, 449516, 644, 388, 19, 1055, 781, 33, 0.7 ],
- [ "Armed Fighter Unit Blue Pirates", "QCK", "Fighter", 3, 12, 5, 1, 60, 449516, 679, 369, 21, 1106, 750, 36, 0.7 ],
- [ "Armed Fighter Unit Green Pirates", "DEX", "Fighter", 3, 12, 5, 1, 60, 449516, 663, 380, 22, 1082, 770, 34, 0.7 ],
- [ "Armed Fighter Unit Yellow Pirates", "PSY", "Fighter", 3, 12, 5, 1, 60, 449516, 622, 358, 35, 1030, 725, 58, 0.7 ],
- [ "Armed Fighter Unit Black Pirates", "INT", "Fighter", 3, 12, 5, 1, 60, 449516, 633, 405, 18, 1044, 800, 30, 0.7 ],
- [ "Armed Slasher Unit Red Pirates", "STR", "Slasher", 3, 12, 5, 1, 60, 449516, 583, 380, 69, 990, 658, 99, 0.7 ],
- [ "Armed Slasher Unit Blue Pirates", "QCK", "Slasher", 3, 12, 5, 1, 60, 449516, 618, 339, 74, 1068, 592, 119, 0.7 ],
- [ "Armed Slasher Unit Green Pirates", "DEX", "Slasher", 3, 12, 5, 1, 60, 449516, 602, 358, 80, 1017, 616, 122, 0.7 ],
- [ "Armed Slasher Unit Yellow Pirates", "PSY", "Slasher", 3, 12, 5, 1, 60, 449516, 566, 333, 84, 944, 572, 149, 0.7 ],
- [ "Armed Slasher Unit Black Pirates", "INT", "Slasher", 3, 12, 5, 1, 60, 449516, 590, 381, 59, 983, 660, 109, 0.7 ],
- [ "Armed Striker Unit Red Pirates", "STR", "Striker", 3, 12, 5, 1, 60, 449516, 473, 320, 71, 946, 640, 142, 0.7 ],
- [ "Armed Striker Unit Blue Pirates", "QCK", "Striker", 3, 12, 5, 1, 60, 449516, 483, 309, 73, 976, 618, 146, 0.7 ],
- [ "Armed Striker Unit Green Pirates", "DEX", "Striker", 3, 12, 5, 1, 60, 449516, 429, 318, 79, 858, 636, 158, 0.7 ],
- [ "Armed Striker Unit Yellow Pirates", "PSY", "Striker", 3, 12, 5, 1, 60, 449516, 439, 289, 87, 878, 578, 176, 0.7 ],
- [ "Armed Striker Unit Black Pirates", "INT", "Striker", 3, 12, 5, 1, 60, 449516, 465, 342, 65, 930, 684, 130, 0.7 ],
- [ "Armed Shooter Unit Red Pirates", "STR", "Shooter", 3, 12, 5, 1, 60, 449516, 271, 102, 180, 481, 355, 301, 0.7 ],
- [ "Armed Shooter Unit Blue Pirates", "QCK", "Shooter", 3, 12, 5, 1, 60, 449516, 280, 96, 181, 530, 302, 312, 0.7 ],
- [ "Armed Shooter Unit Green Pirates", "DEX", "Shooter", 3, 12, 5, 1, 60, 449516, 273, 99, 182, 502, 312, 314, 0.7 ],
- [ "Armed Shooter Unit Yellow Pirates", "PSY", "Shooter", 3, 12, 5, 1, 60, 449516, 201, 88, 205, 427, 284, 348, 0.7 ],
- [ "Armed Shooter Unit Black Pirates", "INT", "Shooter", 3, 12, 5, 1, 60, 449516, 280, 137, 174, 500, 400, 297, 0.7 ],
- [ "Skilled Gunner", "INT", "Shooter", 3, 15, 5, 2, 70, 711332, 1280, 500, 20, 1550, 850, 40, 0.7 ],
- [ "Mr. 13 & Ms. Friday The Unluckies", "INT", "Shooter", 3, 13, 7, 3, 50, 392109, 44, 44, 44, 596, 893, 130, 0.7 ],
- [ "Dorry", "PSY", [ "Slasher", "Tough" ], 4, 25, 4, 2, 70, 1422664, 450, 370, 102, 1662, 783, 153, 1.5 ],
- [ "Broggy", "INT", [ "Slasher", "Tough" ], 4, 25, 4, 2, 70, 1422664, 440, 411, 88, 1634, 875, 117, 1.5 ],
- [ "Triceratops", "QCK", "Fighter", 2, 25, 4, 0, 50, 392109, 500, 200, 50, 965, 700, 50, 1.5 ],
- [ "Rex", "STR", "Fighter", 2, 25, 4, 0, 50, 392109, 300, 300, 50, 520, 900, 50, 1.5 ],
- [ "Brontosaurus", "DEX", "Fighter", 2, 25, 4, 0, 50, 392109, 400, 250, 50, 755, 755, 50, 1.5 ],
- [ "Tsuru", "INT", [ "Shooter", "Knowledge" ], 3, 12, 4, 2, 50, 392109, 140, 26, 60, 880, 400, 266, 1 ],
- [ "Great Advisor Tsuru", "INT", [ "Shooter", "Knowledge" ], 4, 18, 6, 3, 99, 4000000, 808, 337, 224, 1151, 1210, 366, 1 ],
- [ "Momonga", "PSY", [ "Slasher", "Knowledge" ], 3, 11, 5, 2, 70, 1066998, 420, 398, 98, 632, 815, 255, 1 ],
- [ "Onigumo", "DEX", [ "Slasher", "Ambition" ], 3, 11, 8, 2, 70, 1066998, 482, 434, 63, 944, 920, 131, 1 ],
- [ "Red Plated Lobster", "STR", "Evolver", 3, 7, 4, 0, 1, 0, 50, 550, 0, 50, 550, 0, 1 ],
- [ "Blue Plated Lobster", "QCK", "Evolver", 3, 7, 4, 0, 1, 0, 50, 550, 0, 50, 550, 0, 1 ],
- [ "Green Plated Lobster", "DEX", "Evolver", 3, 7, 4, 0, 1, 0, 50, 550, 0, 50, 550, 0, 1 ],
- [ "Yellow Plated Lobster", "PSY", "Evolver", 3, 7, 4, 0, 1, 0, 50, 550, 0, 50, 550, 0, 1 ],
- [ "Black Plated Lobster", "INT", "Evolver", 3, 7, 4, 0, 1, 0, 50, 550, 0, 50, 550, 0, 1 ],
- [ "Monkey D. Garp", "PSY", [ "Fighter", "Tough" ], 4, 30, 4, 1, 70, 1066998, 280, 145, 50, 1442, 722, 131, 1 ],
- [ "Garp the Fist", "PSY", [ "Fighter", "Tough" ], 5, 50, 4, 2, 99, 5000000, 1377, 685, 105, 2852, 1220, 225, 1 ],
- [ "Trafalgar Law", "DEX", [ "Slasher", "Freedom" ], 4, 18, 4, 3, 70, 1066998, 104, 125, 73, 876, 702, 238, 1 ],
- [ "Trafalgar Law ROOM", "DEX", [ "Slasher", "Freedom" ], 5, 28, 4, 4, 99, 4000000, 817, 655, 190, 2052, 1300, 370, 1 ],
- [ "Basil Hawkins", "INT", [ "Slasher", "Knowledge" ], 4, 18, 4, 3, 70, 1066998, 200, 200, 7, 1165, 750, 127, 1 ],
- [ "Basil Hawkins the Magician", "INT", [ "Striker", "Knowledge" ], 5, 28, 6, 4, 99, 4000000, 1095, 717, 85, 2480, 1295, 255, 1 ],
- [ "Killer", "QCK", [ "Striker", "Knowledge" ], 4, 18, 6, 3, 70, 1066998, 180, 250, 0, 1228, 895, -50, 1 ],
- [ "Massacre Soldier Killer", "QCK", [ "Striker", "Knowledge" ], 5, 28, 4, 4, 99, 4000000, 1120, 811, 0, 2570, 1449, -200, 1 ],
- [ "Urouge", "PSY", [ "Striker", "Tough" ], 4, 18, 4, 3, 70, 1066998, 108, 108, 35, 1290, 798, 108, 1 ],
- [ "Mad Monk Urouge", "PSY", [ "Striker", "Tough" ], 5, 28, 5, 4, 99, 4000000, 1202, 730, 75, 2071, 1343, 200, 1 ],
- [ "Bepo", "STR", [ "Fighter", "Tough" ], 4, 18, 4, 3, 70, 1066998, 120, 105, 80, 820, 690, 246, 1 ],
- [ "Bepo the Martial Artist", "STR", [ "Fighter", "Tough" ], 5, 28, 6, 4, 99, 4000000, 755, 640, 198, 1880, 1200, 405, 1 ],
- [ "Kalifa", "DEX", [ "Fighter", "Knowledge" ], 3, 12, 5, 1, 50, 392109, 116, 65, 51, 850, 540, 227, 1 ],
- [ "Beautiful Secretary Kalifa", "DEX", [ "Fighter", "Knowledge" ], 4, 18, 6, 2, 99, 3000000, 788, 488, 177, 1728, 963, 378, 1 ],
- [ "Paulie", "DEX", "Striker", 3, 12, 5, 1, 50, 392109, 162, 102, 31, 882, 705, 166, 1 ],
- [ "Paulie Dock One Foreman/Mast Specialist", "DEX", "Striker", 4, 18, 4, 2, 99, 3000000, 812, 617, 130, 2300, 1070, 231, 1 ],
- [ "Rob Lucci", "QCK", [ "Slasher", "Tough" ], 3, 12, 4, 1, 50, 392109, 132, 126, 28, 1192, 721, 106, 1 ],
- [ "Rob Lucci Dock One Sawyer, Treenail Specialist", "QCK", [ "Slasher", "Tough" ], 4, 18, 6, 2, 99, 3000000, 1107, 654, 69, 2220, 1203, 177, 1 ],
- [ "Kaku", "QCK", "Striker", 3, 12, 5, 1, 50, 392109, 172, 79, 37, 1233, 635, 131, 0.7 ],
- [ "Kaku Dock One Carpentry Specialist", "QCK", [ "Striker", "Freedom" ], 4, 18, 4, 2, 99, 3000000, 1132, 552, 98, 2517, 988, 213, 0.7 ],
- [ "Lulu", "QCK", "Shooter", 3, 12, 6, 2, 70, 1066998, 290, 168, 88, 985, 682, 223, 1 ],
- [ "Wapol", "STR", [ "Fighter", "Freedom" ], 3, 8, 4, 1, 50, 392109, 330, 128, 20, 1440, 488, 98, 1 ],
- [ "Wapol House", "STR", [ "Shooter", "Freedom" ], 4, 15, 4, 2, 99, 3000000, 1390, 423, 77, 2940, 835, 142, [ 1, 1, 0.7 ] ],
- [ "Dalton", "QCK", [ "Slasher", "Knowledge" ], 3, 7, 5, 1, 35, 90778, 192, 110, 45, 751, 390, 140, 0.7 ],
- [ "Dalton Bison", "QCK", [ "Slasher", "Knowledge" ], 4, 11, 4, 2, 70, 1066998, 690, 322, 102, 1155, 620, 290, 0.7 ],
- [ "Chess", "DEX", "Shooter", 3, 7, 6, 0, 35, 90778, 186, 90, 31, 668, 296, 121, 1 ],
- [ "Kuromarimo", "DEX", "Striker", 3, 7, 5, 0, 35, 90778, 72, 144, 24, 366, 488, 108, 1 ],
- [ "Chessmarimo", "DEX", "Striker", 4, 11, 7, 2, 70, 1066998, 525, 396, 145, 1290, 840, 185, 1 ],
- [ "Dr. Kureha", "PSY", [ "Slasher", "Knowledge" ], 3, 20, 5, 2, 50, 392109, 35, 32, 88, 200, 200, 510, 1.5 ],
- [ "Lapin", "INT", "Fighter", 2, 15, 5, 0, 35, 90778, 200, 200, 25, 550, 550, 53, 1.5 ],
- [ "Lapin Adult", "INT", [ "Fighter", "Tough" ], 3, 20, 4, 2, 70, 1066998, 380, 480, 38, 1100, 950, 100, 1.5 ],
- [ "Franky", "PSY", [ "Shooter", "Freedom" ], 3, 12, 4, 1, 50, 392109, 128, 128, 28, 1220, 680, 112, 1 ],
- [ "Dismantler Franky", "PSY", [ "Shooter", "Freedom" ], 4, 20, 5, 2, 99, 3000000, 1138, 637, 71, 2453, 1032, 198, 1 ],
- [ "Kiwi", "PSY", "Slasher", 3, 13, 4, 1, 50, 392109, 77, 77, 77, 777, 444, 265, 1 ],
- [ "Mozu", "PSY", "Slasher", 3, 13, 4, 1, 50, 392109, 77, 77, 77, 555, 555, 265, 1 ],
- [ "Kraken Surume", "STR", [ "Striker", "Tough" ], 3, 12, 6, 1, 50, 392109, 99, 99, 188, 1440, 685, 133, 1 ],
- [ "Kraken Monster of the North", "STR", [ "Striker", "Tough" ], 4, 20, 8, 2, 99, 3000000, 1355, 602, 118, 2700, 1111, 33, 1 ],
- [ "Red Jeweled Porc", "STR", "Booster", 2, 2, 4, 0, 10, 2330, 45, 27, 7, 129, 77, 15, 1 ],
- [ "Blue Jeweled Porc", "QCK", "Booster", 2, 2, 4, 0, 10, 2330, 49, 21, 9, 145, 65, 19, 1 ],
- [ "Green Jeweled Porc", "DEX", "Booster", 2, 2, 4, 0, 10, 2330, 47, 25, 8, 133, 72, 17, 1 ],
- [ "Yellow Jeweled Porc", "PSY", "Booster", 2, 2, 4, 0, 10, 2330, 44, 19, 12, 120, 58, 28, 1 ],
- [ "Black Jeweled Porc", "INT", "Booster", 2, 2, 4, 0, 10, 2330, 42, 30, 7, 119, 88, 14, 1 ],
- [ "Ruby Jeweled Porc", "STR", "Booster", 3, 5, 4, 0, 1, 0, 169, 97, 22, 169, 97, 22, 1 ],
- [ "Sapphire Jeweled Porc", "QCK", "Booster", 3, 5, 4, 0, 1, 0, 185, 85, 26, 185, 85, 26, 1 ],
- [ "Emerald Jeweled Porc", "DEX", "Booster", 3, 5, 4, 0, 1, 0, 173, 92, 24, 173, 92, 24, 1 ],
- [ "Topaz Jeweled Porc", "PSY", "Booster", 3, 5, 4, 0, 1, 0, 160, 78, 35, 160, 78, 35, 1 ],
- [ "Amethyst Jeweled Porc", "INT", "Booster", 3, 5, 4, 0, 1, 0, 159, 108, 21, 159, 108, 21, 1 ],
- [ "Zephyr", "INT", [ "Shooter", "Tough" ], 4, 30, 7, 1, 70, 1066998, 320, 133, 4, 1588, 699, 29, 1 ],
- [ "Zephyr NEO Navy Commander", "INT", [ "Shooter", "Tough" ], 5, 50, 4, 2, 99, 5000000, 1550, 680, 11, 3702, 1252, 88, 1 ],
- [ "Ain", "QCK", [ "Shooter", "Knowledge" ], 3, 8, 6, 1, 35, 136167, 96, 87, 47, 688, 421, 195, 1 ],
- [ "Ain NEO Navy Vice Admiral", "QCK", [ "Shooter", "Knowledge" ], 4, 13, 4, 2, 70, 1066998, 620, 377, 155, 908, 679, 285, 1 ],
- [ "Eustass Kid", "STR", [ "Striker", "Ambition" ], 4, 18, 4, 3, 70, 1066998, 233, 141, 12, 1221, 721, 32, 1 ],
- [ "Captain Kid", "STR", [ "Striker", "Ambition" ], 5, 28, 4, 4, 99, 4000000, 1138, 651, 21, 3515, 1298, 69, 1 ],
- [ "Scratchmen Apoo", "DEX", [ "Shooter", "Freedom" ], 4, 18, 5, 3, 70, 1066998, 209, 122, 39, 1126, 652, 184, 1 ],
- [ "Roar of the Sea Scratchmen Apoo", "DEX", [ "Shooter", "Freedom" ], 5, 28, 5, 4, 99, 4000000, 1085, 580, 144, 2801, 1111, 300, 1 ],
- [ "X Drake", "INT", [ "Striker", "Tough" ], 4, 18, 5, 3, 70, 1066998, 242, 112, 32, 1515, 688, 88, 1 ],
- [ "Red Flag X Drake", "INT", [ "Fighter", "Tough" ], 5, 28, 6, 4, 99, 4000000, 1432, 611, 57, 3580, 1098, 132, 1 ],
- [ "Jewelry Bonney", "PSY", [ "Fighter", "Freedom" ], 4, 18, 4, 3, 70, 1066998, 277, 80, 44, 1370, 440, 220, 1 ],
- [ "Big Eater Jewelry Bonney", "PSY", [ "Fighter", "Freedom" ], 5, 28, 5, 4, 99, 4000000, 1248, 401, 158, 3000, 720, 400, 1 ],
- [ "Capone Bege", "QCK", [ "Shooter", "Freedom" ], 4, 18, 6, 3, 70, 1066998, 199, 102, 34, 1050, 755, 153, 1 ],
- [ "Capone Gang Bege", "QCK", [ "Shooter", "Freedom" ], 5, 28, 4, 4, 99, 4000000, 893, 682, 110, 2122, 1323, 313, 1 ],
- [ "Silvers Rayleigh", "INT", [ "Fighter", "Knowledge" ], 5, 30, 4, 3, 70, 1066998, 488, 302, 168, 1518, 826, 309, 1 ],
- [ "Dark King Rayleigh", "INT", [ "Fighter", "Knowledge" ], 6, 55, 4, 4, 99, 5000000, 1462, 777, 277, 3001, 1300, 500, 1 ],
- [ "Giant Slasher Red Pirates", "STR", "Slasher", 2, 8, 6, 0, 30, 57558, 297, 163, 41, 579, 363, 41, 1.5 ],
- [ "Giant Shooter Blue Pirates", "QCK", "Shooter", 2, 8, 4, 0, 30, 57558, 350, 129, 53, 619, 303, 68, 1.5 ],
- [ "Giant Warrior Green Pirates", "DEX", "Striker", 2, 8, 4, 0, 30, 57558, 313, 155, 55, 561, 340, 77, 1.5 ],
- [ "Giant Fighter Yellow Pirates", "PSY", "Fighter", 2, 8, 5, 0, 30, 57558, 308, 151, 52, 575, 332, 67, 1.5 ],
- [ "Giant Striker Black Pirates", "INT", "Striker", 2, 8, 6, 0, 30, 57558, 330, 133, 42, 614, 313, 54, 1.5 ],
- [ "Giant Imperial Slasher Red Pirates", "STR", "Slasher", 3, 13, 4, 1, 60, 674274, 490, 334, 46, 1179, 668, 109, 1.5 ],
- [ "Giant Imperial Shooter Blue Pirates", "QCK", "Shooter", 3, 13, 4, 1, 60, 674274, 528, 281, 64, 1235, 562, 135, 1.5 ],
- [ "Female Giant Imperial Warrior Green Pirates", "DEX", "Striker", 3, 13, 4, 1, 60, 674274, 472, 310, 72, 1132, 620, 143, 1.5 ],
- [ "Giant Imperial Fighter Yellow Pirates", "PSY", "Fighter", 3, 13, 4, 1, 60, 674274, 488, 302, 61, 1170, 604, 132, 1.5 ],
- [ "Giant Imperial Striker Black Pirates", "INT", "Striker", 3, 13, 4, 1, 60, 674274, 525, 311, 49, 1213, 622, 119, 1.5 ],
- [ "Sea Cat", "PSY", "Fighter", 3, 10, 4, 1, 50, 392109, 77, 7, 33, 777, 77, 333, 1 ],
- [ "Kung Fu Dugong", "STR", "Fighter", 3, 7, 5, 1, 20, 26184, 25, 225, 45, 50, 355, 95, 0.7 ],
- [ "Kung Fu Dugong Faithful Apprentice", "STR", "Fighter", 4, 11, 8, 3, 50, 392109, 25, 305, 55, 75, 825, 225, 0.7 ],
- [ "Banana Gator", "QCK", "Fighter", 3, 10, 4, 0, 50, 392109, 552, 334, 80, 922, 534, 155, 1 ],
- [ "Sandora Dragon", "DEX", "Fighter", 3, 10, 4, 0, 50, 392109, 511, 285, 120, 811, 485, 190, 1 ],
- [ "Mr. 0 Baroque Works CEO", "INT", [ "Striker", "Knowledge" ], 3, 10, 5, 2, 50, 392109, 194, 110, 23, 1088, 659, 147, 1.5 ],
- [ "Sir Crocodile", "INT", [ "Striker", "Knowledge" ], 4, 18, 4, 3, 99, 3000000, 995, 582, 112, 2210, 1220, 208, 1.5 ],
- [ "Hogback", "INT", [ "Fighter", "Knowledge" ], 3, 12, 6, 1, 50, 392109, 210, 72, 33, 1251, 595, 118, 1 ],
- [ "Doctor Hogback", "INT", [ "Fighter", "Knowledge" ], 4, 20, 4, 2, 99, 3000000, 1180, 550, 72, 2741, 945, 189, 1 ],
- [ "Cindry", "PSY", "Shooter", 3, 12, 5, 1, 50, 392109, 76, 58, 60, 806, 458, 259, 0.7 ],
- [ "Victoria Cindry", "PSY", "Shooter", 4, 20, 4, 2, 99, 3000000, 622, 398, 231, 1402, 661, 478, 0.7 ],
- [ "Emporio Ivankov", "QCK", [ "Fighter", "Freedom" ], 4, 30, 4, 3, 70, 1066998, 302, 125, 53, 1682, 512, 161, 1 ],
- [ "Emporio Ivankov Queen of Kamabakka Queendom", "QCK", [ "Fighter", "Freedom" ], 5, 50, 4, 4, 99, 5000000, 1642, 470, 132, 3030, 1155, 290, 1 ],
- [ "Perona", "DEX", [ "Shooter", "Ambition" ], 3, 10, 4, 1, 50, 392109, 134, 44, 55, 944, 422, 222, 1 ],
- [ "Ghost Princess Perona", "DEX", [ "Shooter", "Ambition" ], 4, 18, 4, 2, 99, 3000000, 887, 377, 198, 1598, 791, 430, 1 ],
- [ "Kumacy", "STR", [ "Fighter", "Tough" ], 3, 11, 6, 1, 70, 1066998, 500, 255, 0, 1660, 904, 0, 1 ],
- [ "Dog Penguin", "QCK", "Fighter", 3, 11, 4, 1, 50, 392109, 986, 500, 54, 1420, 722, 0, 1 ],
- [ "Miss Merry Christmas", "QCK", "Fighter", 3, 11, 5, 1, 35, 136167, 220, 51, 42, 980, 422, 147, 1 ],
- [ "Miss Merry Christmas Human Mole", "QCK", "Fighter", 4, 15, 4, 2, 70, 1066998, 910, 348, 113, 1401, 690, 233, 1 ],
- [ "Mr. 4", "STR", [ "Shooter", "Tough" ], 3, 11, 4, 1, 35, 136167, 250, 110, 14, 1046, 590, 80, 1 ],
- [ "Mr. 4 and Lassoo the Dog-Gun", "STR", [ "Shooter", "Tough" ], 4, 15, 6, 2, 70, 1066998, 980, 522, 43, 1606, 910, 110, 1 ],
- [ "Miss Doublefinger", "DEX", [ "Striker", "Knowledge" ], 3, 11, 8, 1, 35, 136167, 115, 87, 44, 770, 501, 158, 1 ],
- [ "Miss Doublefinger Human Spike", "DEX", [ "Striker", "Knowledge" ], 4, 15, 4, 2, 70, 1066998, 720, 435, 120, 1081, 701, 288, 1 ],
- [ "Mr. 1", "STR", [ "Slasher", "Knowledge" ], 3, 11, 4, 1, 35, 136167, 255, 156, 1, 1152, 744, 10, 1 ],
- [ "Mr. 1 Human Sword", "STR", [ "Slasher", "Knowledge" ], 4, 15, 5, 2, 70, 1066998, 1021, 652, 2, 1880, 1042, 15, 1 ],
- [ "Rebecca", "QCK", "Slasher", 4, 14, 5, 2, 70, 1422664, 242, 115, 108, 1525, 707, 345, 1 ],
- [ "Absalom", "STR", [ "Shooter", "Tough" ], 3, 12, 6, 1, 50, 392109, 158, 93, 35, 1330, 602, 126, 1 ],
- [ "Absalom of the Graveyard", "STR", [ "Shooter", "Tough" ], 4, 20, 7, 2, 99, 3000000, 1271, 545, 77, 2601, 1008, 192, 1 ],
- [ "General Zombie", "INT", "Fighter", 3, 12, 5, 1, 70, 1066998, 920, 352, 0, 2610, 605, 0, 1 ],
- [ "Jigoro of the Wind", "DEX", "Slasher", 3, 9, 6, 1, 50, 392109, 426, 258, 37, 1348, 744, 0, 1 ],
- [ "Sir Crocodile Warlord of the Sea", "INT", [ "Slasher", "Knowledge" ], 5, 30, 4, 4, 99, 4000000, 1088, 659, 147, 2980, 1380, 150, 1 ],
- [ "Jimbe", "QCK", [ "Fighter", "Tough" ], 4, 15, 4, 3, 70, 1066998, 266, 101, 35, 1590, 660, 118, 1 ],
- [ "Jimbe Warlord of the Sea", "QCK", [ "Fighter", "Tough" ], 5, 30, 4, 4, 99, 4000000, 1522, 622, 70, 3055, 1092, 250, 1 ],
- [ "Bartholomew Kuma", "STR", [ "Shooter", "Tough" ], 4, 15, 4, 3, 70, 1066998, 290, 110, 33, 1525, 692, 118, 1 ],
- [ "Bartholomew Kuma Warlord of the Sea", "STR", [ "Shooter", "Tough" ], 5, 30, 4, 4, 99, 4000000, 1445, 644, 82, 2734, 1205, 262, 1 ],
- [ "Gecko Moria", "INT", [ "Striker", "Ambition" ], 4, 15, 4, 3, 70, 1066998, 355, 102, 15, 1928, 677, 33, 1 ],
- [ "Gecko Moria Warlord of the Sea", "INT", [ "Striker", "Ambition" ], 5, 30, 4, 4, 99, 4000000, 1845, 612, 33, 3900, 1120, 118, 1 ],
- [ "Boa Hancock", "QCK", [ "Fighter", "Freedom" ], 5, 30, 4, 4, 70, 1066998, 416, 251, 197, 1595, 859, 340, 1 ],
- [ "Boa Hancock Warlord of the Sea", "QCK", [ "Fighter", "Freedom" ], 6, 55, 4, 5, 99, 5000000, 1512, 782, 301, 2860, 1320, 515, 1 ],
- [ "Donquixote Doflamingo", "DEX", [ "Slasher", "Ambition" ], 4, 30, 4, 1, 70, 1066998, 200, 186, 30, 1061, 790, 145, 1 ],
- [ "Donquixote Doflamingo Warlord of the Sea", "DEX", [ "Slasher", "Ambition" ], 5, 50, 5, 2, 99, 4000000, 932, 721, 118, 2311, 1500, 255, 1 ],
- [ "Sanji Parage Shot: The Storm", "QCK", [ "Fighter", "Tough" ], 4, 10, 5, 2, 99, 2000000, 486, 207, 32, 2015, 900, 217, 0.7 ],
- [ "Monkey D. Luffy Gum-Gum Bazooka: Supremacy", "STR", [ "Fighter", "Freedom" ], 4, 15, 6, 2, 99, 2000000, 404, 227, 39, 1748, 1250, 192, 1 ],
- [ "Roronoa Zoro Three Thousand Worlds: The Final Stroke", "DEX", [ "Slasher", "Ambition" ], 4, 15, 6, 2, 99, 2000000, 426, 222, 37, 2175, 1188, 132, 1 ],
- [ "Nami Mirage Tempo: The Heavens", "INT", [ "Striker", "Knowledge" ], 4, 15, 5, 2, 99, 2000000, 348, 201, 75, 1260, 988, 361, 1 ],
- [ "Brook", "QCK", [ "Slasher", "Freedom" ], 3, 12, 5, 1, 50, 392109, 220, 43, 45, 1190, 430, 208, 1 ],
- [ "Humming Swordsman Brook", "QCK", [ "Slasher", "Freedom" ], 4, 20, 4, 2, 99, 3000000, 1138, 368, 162, 2108, 980, 332, 1 ],
- [ "Ryuma", "PSY", "Slasher", 4, 18, 5, 2, 99, 3000000, 1138, 368, 162, 2005, 1088, 162, 1 ],
- [ "Masira", "STR", "Fighter", 3, 10, 4, 1, 50, 392109, 525, 212, 12, 1120, 655, 95, 1 ],
- [ "Shoujou", "DEX", "Shooter", 3, 10, 4, 1, 50, 392109, 655, 132, 23, 1334, 401, 144, 1 ],
- [ "Montblanc Cricket", "PSY", [ "Shooter", "Freedom" ], 3, 12, 4, 1, 50, 392109, 488, 145, 54, 1050, 525, 155, 1.5 ],
- [ "South Bird and Forest Residents", "DEX", "Fighter", 3, 8, 6, 1, 50, 261406, 752, 383, 121, 929, 423, 161, 1.5 ],
- [ "Bellamy", "DEX", [ "Fighter", "Ambition" ], 3, 10, 4, 1, 35, 136167, 131, 152, 24, 769, 692, 89, 1 ],
- [ "Bellamy the Hyena", "DEX", [ "Fighter", "Ambition" ], 4, 15, 6, 2, 70, 1066998, 726, 600, 67, 1072, 986, 170, 1 ],
- [ "Sarquiss", "QCK", "Slasher", 3, 10, 5, 1, 50, 392109, 220, 92, 22, 1440, 424, 68, 1 ],
- [ "Elizabeth", "DEX", [ "Fighter", "Freedom" ], 4, 12, 4, 2, 70, 1422664, 881, 422, 155, 1485, 700, 198, 1.5 ],
- [ "Caroline", "INT", [ "Fighter", "Freedom" ], 4, 18, 6, 2, 99, 3000000, 772, 389, 177, 1890, 915, 300, [ 1.5, 1.5, 0.7 ] ],
- [ "Sanji Kamabakka Queendom Traditional Fighting Style", "QCK", "Fighter", 3, 10, 4, 2, 50, 392109, 221, 58, 29, 1229, 622, 130, [ 0.7, 0.7, 1.5 ] ],
- [ "Sanji Candy", "QCK", [ "Fighter", "Freedom" ], 4, 18, 4, 3, 99, 3000000, 1155, 545, 76, 1802, 951, 357, [ 0.7, 0.7, 1.5 ] ],
- [ "Perona - Sweets", "DEX", [ "Shooter", "Ambition" ], 4, 11, 4, 2, 50, 392109, 168, 98, 58, 928, 412, 231, 1.5 ],
- [ "Ghost Princess Perona - Sweets", "DEX", [ "Shooter", "Ambition" ], 5, 20, 4, 3, 99, 3000000, 856, 359, 186, 1568, 741, 466, 1.5 ],
- [ "Nefertari Vivi - Love", "PSY", [ "Slasher", "Freedom" ], 4, 11, 5, 2, 50, 392109, 138, 102, 183, 889, 358, 256, 1.5 ],
- [ "Princess Vivi - Love", "PSY", [ "Slasher", "Freedom" ], 5, 20, 6, 3, 99, 3000000, 844, 297, 213, 1440, 683, 322, 1.5 ],
- [ "Cowboy and Bourbon Jr. Supersonic Duck Squadron", "QCK", "Evolver", 3, 9, 5, 0, 35, 90778, 150, 80, 35, 755, 334, 155, 1 ],
- [ "Stomp and Ivan X Supersonic Duck Squadron", "DEX", "Evolver", 3, 9, 5, 0, 35, 90778, 126, 98, 33, 719, 361, 152, 1 ],
- [ "Centaur and Hikoichi Supersonic Duck Squadron", "STR", "Evolver", 3, 9, 5, 0, 35, 90778, 102, 119, 30, 693, 383, 149, 1 ],
- [ "Karoo", "PSY", "Striker", 3, 6, 4, 1, 20, 26184, 178, 86, 40, 229, 155, 100, 1 ],
- [ "Captain Karoo and the Supersonic Duck Squadron", "PSY", "Striker", 4, 18, 7, 2, 99, 3000000, 378, 383, 138, 1412, 702, 461, 1.5 ],
- [ "Marshall D. Teach", "STR", [ "Shooter", "Ambition" ], 4, 30, 6, 1, 70, 1066998, 235, 166, 30, 1402, 790, 23, 1 ],
- [ "Blackbeard", "STR", [ "Shooter", "Ambition" ], 5, 50, 4, 2, 99, 5000000, 1338, 744, 18, 3140, 1418, 83, 1 ],
- [ "Thatch", "QCK", [ "Slasher", "Knowledge" ], 4, 18, 5, 3, 50, 522812, 208, 103, 63, 1246, 626, 188, 1 ],
- [ "Twin-Blade Thatch", "QCK", [ "Slasher", "Knowledge" ], 5, 28, 4, 4, 99, 4000000, 1184, 575, 146, 2505, 1190, 302, 1 ],
- [ "Namule", "DEX", [ "Fighter", "Tough" ], 4, 18, 4, 3, 50, 522812, 155, 133, 40, 1081, 822, 142, 1 ],
- [ "One-Hit Namule", "DEX", [ "Fighter", "Tough" ], 5, 28, 4, 4, 99, 4000000, 999, 755, 117, 2398, 1303, 262, 1 ],
- [ "Rakuyo", "PSY", [ "Striker", "Ambition" ], 4, 18, 4, 3, 50, 522812, 161, 122, 65, 1000, 733, 193, 1 ],
- [ "Morning Star Rakuyo", "PSY", [ "Striker", "Ambition" ], 5, 28, 4, 4, 99, 4000000, 945, 681, 122, 2001, 1320, 337, 1 ],
- [ "Fossa", "STR", [ "Slasher", "Ambition" ], 4, 18, 4, 3, 50, 522812, 150, 160, 34, 1120, 831, 132, 1 ],
- [ "Fossa the Blazing Katana", "STR", [ "Slasher", "Ambition" ], 5, 28, 4, 4, 99, 4000000, 1059, 788, 95, 2454, 1388, 228, 1 ],
- [ "Curiel", "INT", [ "Shooter", "Ambition" ], 4, 18, 6, 3, 50, 522812, 202, 153, 48, 1159, 818, 134, 1 ],
- [ "Heavy Specialist Curiel", "INT", [ "Shooter", "Ambition" ], 5, 28, 5, 4, 99, 4000000, 1092, 762, 99, 2470, 1359, 252, 1 ],
- [ "Sengoku", "PSY", [ "Fighter", "Knowledge" ], 5, 30, 4, 4, 70, 1066998, 610, 278, 157, 2020, 758, 228, 1 ],
- [ "Sengoku the Buddha", "PSY", [ "Fighter", "Knowledge" ], 6, 54, 4, 5, 99, 5000000, 1962, 711, 191, 3429, 1338, 389, 1 ],
- [ "Criminal Galdino Mr. 3", "PSY", [ "Slasher", "Knowledge" ], 3, 12, 4, 2, 70, 1066998, 588, 333, 133, 1033, 687, 233, 1 ],
- [ "Fugitive Bentham Mr. 2 Bon Clay", "DEX", [ "Fighter", "Freedom" ], 3, 12, 5, 1, 50, 392109, 178, 104, 32, 980, 529, 187, 1 ],
- [ "Prison Break Expert Mr. 2 Bon Clay", "DEX", [ "Fighter", "Freedom" ], 4, 20, 4, 2, 99, 3000000, 921, 460, 146, 1830, 978, 323, 1 ],
- [ "Satori", "PSY", [ "Shooter", "Knowledge" ], 4, 15, 4, 2, 70, 1066998, 479, 190, 158, 1422, 576, 272, 1 ],
- [ "Shura", "INT", "Striker", 4, 15, 4, 2, 70, 1066998, 330, 420, 93, 1030, 1002, 175, 1 ],
- [ "Gedatsu", "QCK", "Fighter", 4, 15, 4, 2, 70, 1066998, 622, 378, 53, 2020, 703, 108, 1 ],
- [ "Braham", "DEX", [ "Shooter", "Freedom" ], 3, 15, 5, 1, 70, 1066998, 374, 283, 96, 1202, 684, 202, 1 ],
- [ "Yama", "STR", "Fighter", 3, 13, 6, 1, 50, 392109, 800, 228, 1, 1700, 608, 2, 1 ],
- [ "Yellow White Beret Skypiea Guard", "PSY", "Shooter", 2, 3, 6, 0, 20, 17456, 51, 23, 45, 330, 166, 89, 1 ],
- [ "Black White Beret Skypiea Guard", "INT", "Shooter", 2, 3, 6, 0, 20, 17456, 49, 38, 40, 320, 197, 80, 1 ],
- [ "Yellow White Beret Captain Skypiea Guard", "PSY", "Shooter", 3, 9, 5, 1, 50, 261406, 270, 128, 69, 845, 433, 198, 1 ],
- [ "Black White Beret Captain Skypiea Guard", "INT", "Shooter", 3, 9, 5, 1, 50, 261406, 259, 142, 65, 837, 498, 177, 1 ],
- [ "Eneru's Elect: Red Guard Skypiea Enforcer", "STR", "Slasher", 2, 8, 6, 0, 50, 261406, 388, 202, 87, 890, 503, 121, 1 ],
- [ "Eneru's Elect: Blue Guard Skypiea Enforcer", "QCK", "Slasher", 2, 8, 6, 0, 50, 261406, 438, 155, 90, 962, 413, 139, 1 ],
- [ "Eneru's Elect: Green Guard Skypiea Enforcer", "DEX", "Slasher", 2, 8, 6, 0, 50, 261406, 410, 179, 88, 926, 464, 128, 1 ],
- [ "Eneru's Elect: Yellow Guard Skypiea Enforcer", "PSY", "Slasher", 2, 8, 6, 0, 50, 261406, 377, 140, 110, 859, 396, 170, 1 ],
- [ "Eneru's Elect: Black Guard Skypiea Enforcer", "INT", "Slasher", 2, 8, 6, 0, 50, 261406, 390, 200, 80, 912, 501, 115, 1 ],
- [ "Red Striker Skypiea Enforcer", "STR", "Striker", 2, 6, 4, 0, 30, 57558, 12, 55, 25, 311, 445, 70, 1 ],
- [ "Blue Striker Skypiea Enforcer", "QCK", "Striker", 2, 6, 4, 0, 30, 57558, 20, 47, 27, 343, 420, 73, 1 ],
- [ "Green Striker Skypiea Enforcer", "DEX", "Striker", 2, 6, 4, 0, 30, 57558, 16, 51, 26, 325, 435, 71, 1 ],
- [ "Yellow Striker Skypiea Enforcer", "PSY", "Striker", 2, 6, 4, 0, 30, 57558, 12, 47, 30, 322, 418, 80, 1 ],
- [ "Black Striker Skypiea Enforcer", "INT", "Striker", 2, 6, 4, 0, 30, 57558, 16, 54, 24, 329, 442, 68, 1 ],
- [ "Red Striker Elite Skypiea Enforcer", "STR", "Striker", 3, 12, 5, 1, 60, 449516, 243, 359, 45, 510, 804, 157, 1 ],
- [ "Blue Striker Elite Skypiea Enforcer", "QCK", "Striker", 3, 12, 5, 1, 60, 449516, 278, 340, 48, 562, 772, 159, 1 ],
- [ "Green Striker Elite Skypiea Enforcer", "DEX", "Striker", 3, 12, 5, 1, 60, 449516, 265, 350, 46, 536, 788, 158, 1 ],
- [ "Yellow Striker Elite Skypiea Enforcer", "PSY", "Striker", 3, 12, 5, 1, 60, 449516, 242, 338, 53, 505, 760, 166, 1 ],
- [ "Black Striker Elite Skypiea Enforcer", "INT", "Striker", 3, 12, 5, 1, 60, 449516, 250, 358, 45, 520, 802, 156, 1 ],
- [ "Red Nomad Shandian Warrior", "STR", "Striker", 2, 6, 5, 0, 30, 57558, 79, 45, 26, 494, 302, 87, 1 ],
- [ "Blue Nomad Shandian Warrior", "QCK", "Striker", 2, 6, 5, 0, 30, 57558, 92, 36, 30, 538, 268, 94, 1 ],
- [ "Green Nomad Shandian Warrior", "DEX", "Striker", 2, 6, 5, 0, 30, 57558, 85, 40, 28, 517, 289, 89, 1 ],
- [ "Red Nomad Adept Shandian Warrior", "STR", "Striker", 3, 12, 5, 1, 60, 449516, 438, 228, 60, 864, 642, 162, 1 ],
- [ "Blue Nomad Adept Shandian Warrior", "QCK", "Striker", 3, 12, 5, 1, 60, 449516, 460, 187, 63, 948, 570, 172, 1 ],
- [ "Green Nomad Adept Shandian Warrior", "DEX", "Striker", 3, 12, 5, 1, 60, 449516, 449, 201, 61, 900, 606, 168, 1 ],
- [ "Yellow Hunter Shandian Warrior", "PSY", "Shooter", 2, 5, 4, 0, 30, 57558, 38, 20, 41, 210, 115, 201, 1 ],
- [ "Black Hunter Shandian Warrior", "INT", "Shooter", 2, 5, 4, 0, 30, 57558, 40, 25, 39, 214, 128, 196, 1 ],
- [ "Yellow Hunter Adept Shandian Warrior", "PSY", "Shooter", 3, 11, 4, 1, 60, 449516, 150, 60, 160, 502, 258, 365, 1 ],
- [ "Black Hunter Adept Shandian Warrior", "INT", "Shooter", 3, 11, 4, 1, 60, 449516, 152, 66, 153, 508, 271, 359, 1 ],
- [ "Portgas D. Ace Mt. Corvo's Brothers 3", "QCK", [ "Fighter", "Freedom" ], 4, 10, 4, 2, 35, 90778, 144, 66, 60, 632, 347, 248, 0.7 ],
- [ "Portgas D. Ace Mt. Corvo's Brothers 3, Cup of Sworn Brotherhood", "QCK", [ "Fighter", "Freedom" ], 5, 18, 4, 3, 70, 1066998, 571, 295, 200, 1072, 559, 385, 0.7 ],
- [ "Bellmere", "DEX", "Shooter", 3, 9, 5, 1, 35, 136167, 60, 39, 68, 426, 291, 283, 1 ],
- [ "Bellmere Nami and Nojiko's Mother", "DEX", "Shooter", 4, 15, 4, 2, 70, 1066998, 377, 249, 240, 810, 483, 400, 1 ],
- [ "Kaya", "PSY", [ "Shooter", "Knowledge" ], 3, 9, 6, 1, 35, 136167, 115, 50, 72, 370, 180, 330, 1.5 ],
- [ "Kaya A Rich Young Girl from Syrup Village", "PSY", [ "Shooter", "Knowledge" ], 4, 15, 5, 2, 70, 1066998, 331, 151, 275, 405, 250, 550, 1.5 ],
- [ "Hotori and Kotori", "INT", "Fighter", 3, 9, 6, 1, 35, 136167, 242, 74, 27, 1055, 455, 122, 1 ],
- [ "Hotori and Kotori Skypiea Vice Head Enforcers", "INT", "Fighter", 4, 15, 4, 2, 70, 1066998, 989, 385, 92, 1959, 601, 151, 1 ],
- [ "Pell", "QCK", [ "Slasher", "Tough" ], 3, 9, 6, 1, 35, 136167, 175, 70, 40, 1000, 427, 142, 1 ],
- [ "Pell The Guardian Falcon of Alabasta", "QCK", [ "Slasher", "Tough" ], 4, 15, 4, 2, 70, 1066998, 941, 358, 104, 1585, 695, 186, 1 ],
- [ "Chaka", "STR", [ "Slasher", "Tough" ], 3, 9, 5, 1, 35, 136167, 173, 120, 21, 822, 615, 109, 1 ],
- [ "Chaka The Guardian Jackal of Alabasta", "STR", [ "Slasher", "Tough" ], 4, 15, 4, 2, 70, 1066998, 740, 531, 81, 1160, 923, 180, 1 ],
- [ "Sir Crocodile, the Strongest Prisoner Mr. 0, Ex-Baroque Works Leader", "QCK", [ "Striker", "Knowledge" ], 3, 13, 5, 1, 50, 392109, 213, 108, 24, 1161, 565, 135, 1 ],
- [ "Sir Crocodile, the Strongest Prisoner Ex-Warlord", "QCK", [ "Striker", "Knowledge" ], 4, 20, 4, 2, 99, 3000000, 1101, 500, 100, 2200, 1150, 188, 1 ],
- [ "Daz Bones, Convict Mr. 1", "INT", [ "Slasher", "Knowledge" ], 4, 16, 4, 2, 70, 1066998, 255, 156, 242, 1710, 1011, 55, 1 ],
- [ "Sabo Mt. Corvo's Brothers 3", "PSY", [ "Striker", "Freedom" ], 4, 10, 5, 2, 35, 90778, 32, 32, 32, 522, 288, 286, 0.7 ],
- [ "Sabo Mt. Corvo's Brothers 3, Cup of Sworn Brotherhood", "PSY", [ "Striker", "Freedom" ], 5, 18, 4, 3, 70, 1066998, 440, 233, 242, 951, 460, 450, 0.7 ],
- [ "Nico Robin Tropical", "INT", [ "Fighter", "Knowledge" ], 4, 15, 6, 2, 99, 2000000, 368, 128, 96, 1910, 715, 292, 1 ],
- [ "Heracles'n", "PSY", [ "Shooter", "Knowledge" ], 4, 30, 6, 2, 70, 1066998, 330, 89, 34, 1698, 569, 160, 1 ],
- [ "Heracles'n the Hero of the Forest", "PSY", [ "Shooter", "Knowledge" ], 5, 50, 4, 3, 99, 5000000, 1622, 480, 108, 3188, 1010, 300, 1 ],
- [ "Usopp'n", "PSY", "Shooter", 4, 10, 5, 1, 50, 261406, 444, 237, 47, 1080, 648, 144, 1 ],
- [ "Usopp'n, Pupil of Heracles'n", "PSY", [ "Shooter", "Tough" ], 5, 20, 4, 5, 99, 2000000, 1280, 648, 0, 2550, 700, -41, 1 ],
- [ "Monkey D. Luffy, Merveille's Adventurer", "STR", [ "Fighter", "Freedom" ], 4, 17, 4, 3, 70, 1066998, 242, 148, 28, 1505, 744, 106, 1 ],
- [ "Monkey D. Luffy, Straw Hat Pirates' Attack", "STR", [ "Fighter", "Freedom" ], 5, 27, 8, 4, 99, 4000000, 1438, 676, 72, 2722, 1411, 176, 1 ],
- [ "Sanji, Merveille's Adventurer", "INT", [ "Fighter", "Tough" ], 4, 17, 4, 3, 70, 1066998, 268, 115, 32, 1545, 698, 122, 1 ],
- [ "Sanji, Straw Hat Pirates' Attack", "INT", [ "Fighter", "Tough" ], 5, 27, 5, 4, 99, 4000000, 1471, 630, 86, 2834, 1224, 226, 1 ],
- [ "Nami, Merveille's Adventurer", "QCK", [ "Striker", "Knowledge" ], 4, 17, 5, 3, 70, 1066998, 190, 81, 57, 1051, 602, 230, 1 ],
- [ "Nami and Billy the Thunder Bird", "QCK", [ "Striker", "Knowledge" ], 5, 27, 6, 4, 99, 4000000, 979, 540, 191, 1980, 1000, 455, 1 ],
- [ "Brook, Merveille's Adventurer", "PSY", [ "Slasher", "Freedom" ], 4, 17, 6, 3, 70, 1066998, 249, 101, 40, 1530, 684, 133, 1 ],
- [ "Brook, Straw Hat Pirates' Attack", "PSY", [ "Slasher", "Freedom" ], 5, 27, 4, 4, 99, 4000000, 1461, 636, 100, 2788, 1243, 234, 1 ],
- [ "Chopper, Merveille's Adventurer", "DEX", [ "Shooter", "Knowledge" ], 4, 17, 5, 3, 70, 1066998, 196, 98, 51, 1170, 624, 212, 1 ],
- [ "Chopper, Straw Hat Pirates' Attack", "DEX", [ "Shooter", "Knowledge" ], 5, 27, 4, 4, 99, 4000000, 1110, 571, 179, 2212, 1099, 368, 1 ],
- [ "Shanks Black Clad Redhead", "PSY", [ "Slasher", "Knowledge" ], 5, 30, 4, 4, 70, 1066998, 478, 285, 185, 1650, 780, 291, 1 ],
- [ "Shanks Black Clad Emperor", "PSY", [ "Slasher", "Knowledge" ], 6, 55, 5, 5, 99, 5000000, 1537, 736, 261, 3140, 1400, 418, 1 ],
- [ "Nico Robin Cherry Blossoms Falling", "DEX", [ "Fighter", "Knowledge" ], 4, 11, 4, 2, 50, 392109, 171, 55, 65, 976, 328, 252, 1 ],
- [ "Nico Robin Cherry Blossoms in Full Bloom", "DEX", [ "Fighter", "Knowledge" ], 5, 19, 6, 3, 99, 3000000, 913, 271, 209, 1925, 747, 384, 1 ],
- [ "Brook Cherry Blossom Hair", "QCK", [ "Slasher", "Freedom" ], 4, 12, 5, 2, 50, 392109, 211, 108, 40, 1267, 448, 163, 1 ],
- [ "Brook Cherry Blossom Melody", "QCK", [ "Slasher", "Freedom" ], 5, 20, 4, 3, 99, 3000000, 1199, 379, 131, 2311, 885, 281, 1 ],
- [ "Nami Blossom Cloud", "DEX", [ "Shooter", "Knowledge" ], 4, 12, 5, 2, 50, 392109, 127, 53, 73, 812, 303, 287, 1 ],
- [ "Nami Blossom Climate", "DEX", [ "Shooter", "Knowledge" ], 5, 20, 4, 3, 99, 3000000, 750, 247, 241, 1783, 670, 445, 1 ],
- [ "Domino", "PSY", [ "Fighter", "Knowledge" ], 3, 13, 4, 1, 50, 392109, 32, 20, 80, 713, 366, 318, 1 ],
- [ "Domino, Impel Down's Head Jailer", "PSY", [ "Fighter", "Knowledge" ], 4, 20, 5, 2, 99, 3000000, 634, 301, 265, 1800, 694, 449, 1 ],
- [ "Minorhinoceros", "STR", [ "Striker", "Tough" ], 3, 30, 6, 0, 70, 1066998, 1055, 655, 0, 2122, 815, -250, 1 ],
- [ "Basilisk", "DEX", [ "Fighter", "Tough" ], 3, 12, 4, 1, 70, 1066998, 612, 289, 31, 1525, 644, 128, 1 ],
- [ "Ohm", "STR", [ "Slasher", "Knowledge" ], 4, 16, 4, 2, 70, 1066998, 770, 480, -600, 2200, 1050, -600, 1 ],
- [ "Nola Giant Snake", "PSY", [ "Fighter", "Tough" ], 3, 20, 4, 1, 50, 392109, 1000, 180, 71, 2100, 455, 101, 0.7 ],
- [ "Wyper", "DEX", [ "Shooter", "Freedom" ], 3, 9, 4, 2, 35, 136167, 212, 105, 20, 981, 567, 99, 1 ],
- [ "Wyper Descendant of Great Warrior Calgara", "DEX", [ "Shooter", "Freedom" ], 4, 15, 4, 3, 70, 1066998, 914, 490, 70, 1598, 804, 155, 1 ],
- [ "Eneru", "PSY", [ "Shooter", "Ambition" ], 3, 12, 4, 2, 50, 392109, 177, 141, 58, 951, 615, 185, 1 ],
- [ "Kami Eneru", "PSY", [ "Shooter", "Ambition" ], 4, 20, 4, 3, 99, 3000000, 880, 542, 143, 1530, 1290, 318, 1 ],
- [ "Monkey D. Luffy Mt. Corvo's Brothers 3", "STR", [ "Fighter", "Freedom" ], 4, 10, 4, 2, 35, 136167, 100, 28, 77, 551, 267, 261, 1 ],
- [ "Monkey D. Luffy Mt. Corvo's Brothers 3, Cup of Sworn Brotherhood", "STR", [ "Fighter", "Freedom" ], 5, 18, 4, 3, 70, 1778330, 479, 209, 231, 1058, 541, 397, 1 ],
- [ "Sadi-chan", "INT", [ "Striker", "Freedom" ], 3, 12, 4, 1, 50, 392109, 31, 60, 66, 681, 550, 263, 1 ],
- [ "Sadi-chan, Impel Down's Chief Guard", "INT", [ "Striker", "Freedom" ], 4, 20, 6, 2, 99, 3000000, 618, 488, 202, 1505, 997, 388, 1 ],
- [ "Minokoala", "STR", [ "Fighter", "Tough" ], 3, 30, 5, 0, 70, 1066998, 1400, 602, 0, 1977, 812, -100, 1 ],
- [ "Manticore", "QCK", [ "Fighter", "Tough" ], 3, 15, 4, 1, 70, 1066998, 313, 245, 24, 999, 770, 112, 1 ],
- [ "Roronoa Zoro, Merveille's Adventurer", "DEX", [ "Slasher", "Ambition" ], 4, 17, 5, 3, 70, 1066998, 270, 124, 23, 1585, 715, 98, 1 ],
- [ "Roronoa Zoro, Straw Hat Pirates' Attack", "DEX", [ "Slasher", "Ambition" ], 5, 27, 4, 4, 99, 4000000, 1531, 646, 60, 2900, 1321, 171, 1 ],
- [ "Usopp, Merveille's Adventurer", "QCK", "Shooter", 4, 17, 6, 3, 70, 1066998, 224, 90, 47, 1222, 593, 208, 1 ],
- [ "Usopp, Straw Hat Pirates' Attack", "QCK", "Shooter", 5, 27, 5, 4, 99, 4000000, 1167, 542, 174, 2301, 954, 376, 1 ],
- [ "Nico Robin, Merveille's Adventurer", "INT", [ "Fighter", "Knowledge" ], 4, 17, 4, 3, 70, 1066998, 213, 96, 45, 1147, 626, 216, 1 ],
- [ "Nico Robin, Straw Hat Pirates' Attack", "INT", [ "Fighter", "Knowledge" ], 5, 27, 4, 4, 99, 4000000, 1098, 551, 180, 2076, 1099, 400, 1 ],
- [ "Franky, Merveille's Adventurer", "STR", [ "Shooter", "Freedom" ], 4, 17, 6, 3, 70, 1066998, 244, 140, 21, 1590, 738, 95, 1 ],
- [ "Franky, Straw Hat Pirates' Attack", "STR", [ "Shooter", "Freedom" ], 5, 27, 5, 4, 99, 4000000, 1525, 660, 50, 2801, 1395, 161, 1 ],
- [ "Portgas D. Ace Black Clad Flame Fist", "DEX", [ "Shooter", "Freedom" ], 5, 30, 6, 4, 70, 1066998, 515, 264, 152, 1922, 758, 253, 1 ],
- [ "Portgas D. Ace Black Clad Whitebeard 2nd Div. Commander", "DEX", [ "Shooter", "Freedom" ], 6, 55, 4, 5, 99, 5000000, 1877, 702, 214, 3818, 1352, 321, 1 ],
- [ "Porche", "PSY", "Shooter", 3, 10, 6, 1, 50, 392109, 33, 29, 58, 536, 338, 300, 1 ],
- [ "Capote", "QCK", "Striker", 3, 10, 5, 1, 50, 392109, 124, 48, 36, 1188, 482, 139, 1 ],
- [ "Hamburg", "DEX", [ "Striker", "Tough" ], 3, 10, 5, 1, 50, 392109, 103, 58, 32, 1024, 620, 122, 1 ],
- [ "Pickles", "QCK", [ "Fighter", "Tough" ], 3, 10, 4, 1, 50, 392109, 130, 51, 25, 1202, 603, 98, 1 ],
- [ "Big Bun", "STR", [ "Slasher", "Tough" ], 3, 15, 6, 1, 70, 1066998, 180, 105, 2, 1895, 850, 3, 1 ],
- [ "Foxy", "INT", [ "Fighter", "Freedom" ], 3, 10, 5, 2, 35, 136167, 106, 51, 30, 788, 433, 175, 1 ],
- [ "The Silver Fox Foxy", "INT", [ "Fighter", "Freedom" ], 4, 18, 5, 3, 70, 1066998, 725, 373, 144, 1212, 698, 266, 1 ],
- [ "Monkey D. Luffy Davy Back Fight: Afro", "STR", [ "Fighter", "Tough" ], 3, 12, 6, 1, 50, 392109, 465, 232, 36, 984, 585, 110, 1.5 ],
- [ "Monkey D. Luffy Davy Back Fight: Combat", "STR", [ "Fighter", "Tough" ], 4, 20, 4, 2, 99, 3000000, 862, 492, 70, 1978, 1170, 220, 1.5 ],
- [ "Usopp Davy Back Fight: Cornerman", "DEX", "Shooter", 4, 13, 5, 2, 70, 1066998, 61, 30, 75, 1361, 354, 310, 1 ],
- [ "Tony Tony Chopper Davy Back Fight: Mask", "PSY", [ "Fighter", "Knowledge" ], 3, 10, 4, 2, 70, 1066998, 83, 27, 70, 1176, 483, 280, 0.7 ],
- [ "Aokiji", "INT", [ "Striker", "Freedom" ], 4, 30, 4, 2, 70, 1066998, 232, 160, 32, 1142, 712, 157, 1 ],
- [ "Aokiji the Freezing Man", "INT", [ "Striker", "Freedom" ], 5, 50, 4, 3, 99, 5000000, 1093, 644, 122, 2465, 1435, 251, 1 ],
- [ "Tea Time Nami", "INT", [ "Striker", "Knowledge" ], 4, 18, 4, 2, 99, 2000000, 454, 133, 50, 1473, 703, 373, 0.7 ],
- [ "Monkey D. Luffy Voyage Log: Straw Hat Pirates", "STR", [ "Fighter", "Freedom" ], 5, 30, 4, 3, 70, 1066998, 390, 290, 150, 1559, 840, 290, 1.5 ],
- [ "Monkey D. Luffy Voyage Dream: Pirate King", "STR", [ "Fighter", "Freedom" ], 6, 55, 4, 4, 99, 5000000, 1490, 776, 250, 3440, 1430, 351, 1 ],
- [ "Roronoa Zoro Voyage Log: Straw Hat Pirates", "QCK", [ "Slasher", "Ambition" ], 4, 12, 4, 2, 50, 392109, 230, 110, 35, 1388, 651, 132, 1 ],
- [ "Roronoa Zoro Voyage Dream: Master Swordsman", "QCK", [ "Slasher", "Ambition" ], 5, 20, 4, 3, 99, 3000000, 1329, 777, 90, 2250, 1118, 201, 1 ],
- [ "Genbou", "STR", [ "Shooter", "Freedom" ], 3, 15, 4, 1, 70, 1066998, 271, 91, 15, 1855, 711, 54, 0.7 ],
- [ "Kamakiri", "QCK", [ "Striker", "Freedom" ], 3, 15, 5, 1, 70, 1066998, 195, 84, 30, 1669, 691, 101, 0.7 ],
- [ "Raki", "INT", "Shooter", 4, 18, 4, 2, 99, 3000000, 158, 55, 51, 1544, 668, 460, 0.7 ],
- [ "Aisa", "PSY", "Fighter", 3, 11, 5, 2, 50, 392109, 32, 15, 80, 223, 109, 475, 0.7 ],
- [ "Nojiko", "PSY", [ "Striker", "Knowledge" ], 3, 9, 5, 1, 35, 136167, 125, 57, 60, 398, 277, 293, 1 ],
- [ "Nojiko Nami's Sister", "PSY", [ "Fighter", "Knowledge" ], 4, 15, 6, 2, 70, 1066998, 330, 233, 253, 709, 382, 438, 1 ],
- [ "Crocus", "INT", [ "Striker", "Knowledge" ], 3, 9, 4, 1, 35, 136167, 202, 60, 41, 886, 301, 203, 1 ],
- [ "Crocus, Twin Cape's Lighthouse Keeper", "INT", [ "Striker", "Knowledge" ], 4, 15, 5, 2, 70, 1066998, 820, 249, 160, 1224, 509, 320, 1 ],
- [ "Koza", "QCK", "Slasher", 3, 9, 5, 1, 35, 136167, 179, 69, 33, 939, 423, 158, 1 ],
- [ "Koza Rebel Leader", "QCK", "Slasher", 4, 15, 4, 2, 70, 1066998, 872, 375, 114, 1440, 681, 225, 1 ],
- [ "Crimson Hime Turtle", "STR", "Booster", 6, 20, 6, 0, 1, 0, 2000, 100, 50, 2000, 100, 50, 1 ],
- [ "Azure Hime Turtle", "QCK", "Booster", 6, 20, 6, 0, 1, 0, 2000, 100, 50, 2000, 100, 50, 1 ],
- [ "Jade Hime Turtle", "DEX", "Booster", 6, 20, 6, 0, 1, 0, 2000, 100, 50, 2000, 100, 50, 1 ],
- [ "Amber Hime Turtle", "PSY", "Booster", 6, 20, 6, 0, 1, 0, 2000, 100, 50, 2000, 100, 50, 1 ],
- [ "Onyx Hime Turtle", "INT", "Booster", 6, 20, 6, 0, 1, 0, 2000, 100, 50, 2000, 100, 50, 1 ],
- [ "Tony Tony Chopper Voyage Log: Straw Hat Pirates", "STR", [ "Fighter", "Tough" ], 4, 12, 4, 2, 50, 392109, 220, 95, 46, 1324, 589, 186, 0.7 ],
- [ "Tony Tony Chopper Voyage Dream: Great Doctor", "STR", [ "Fighter", "Tough" ], 5, 20, 6, 3, 99, 3000000, 1280, 542, 151, 1980, 1002, 301, 0.7 ],
- [ "Buggy the Pirate Apprentice", "INT", [ "Slasher", "Ambition" ], 3, 12, 6, 1, 50, 392109, 155, 74, 42, 872, 411, 162, 1 ],
- [ "Buggy, Roger Pirates", "INT", [ "Slasher", "Ambition" ], 4, 19, 5, 2, 99, 3000000, 813, 358, 123, 1602, 709, 290, 1 ],
- [ "Shanks the Pirate Apprentice", "PSY", [ "Slasher", "Freedom" ], 3, 12, 4, 1, 50, 392109, 155, 74, 42, 903, 488, 230, 1 ],
- [ "Shanks, Roger Pirates", "PSY", [ "Slasher", "Freedom" ], 4, 18, 6, 3, 99, 3000000, 825, 440, 193, 1964, 920, 354, 1 ],
- [ "Eneru 200,000,000 Volt Amaru", "QCK", [ "Striker", "Ambition" ], 4, 30, 6, 2, 70, 1066998, 155, 163, 38, 1369, 724, 128, 1 ],
- [ "Eneru, Lightning Incarnate 200,000,000 Volt Amaru", "QCK", [ "Striker", "Ambition" ], 5, 50, 5, 3, 99, 5000000, 1288, 670, 90, 2524, 1470, 234, 1 ],
- [ "Sanji Voyage Log: Straw Hat Pirates", "DEX", [ "Fighter", "Tough" ], 4, 12, 4, 2, 50, 392109, 240, 103, 36, 1462, 620, 134, 0.7 ],
- [ "Sanji Voyage Dream: All Blue", "DEX", [ "Fighter", "Tough" ], 5, 20, 6, 3, 99, 3000000, 1413, 577, 100, 2350, 1052, 208, 0.7 ],
- [ "Zeff the Pirate", "DEX", [ "Fighter", "Tough" ], 3, 13, 5, 1, 50, 392109, 185, 112, 24, 1210, 663, 128, 1 ],
- [ "Red Leg Zeff, Captain of the Cook Pirates", "DEX", [ "Fighter", "Tough" ], 4, 20, 4, 2, 99, 3000000, 1152, 599, 81, 2000, 1088, 258, 1 ],
- [ "Thug Patty", "STR", "Shooter", 3, 10, 4, 1, 50, 522812, 155, 120, 25, 1080, 648, 132, 0.7 ],
- [ "Thug Carne", "QCK", "Slasher", 3, 10, 6, 1, 50, 522812, 153, 91, 35, 1054, 571, 162, 0.7 ],
- [ "Hiking Bear", "INT", "Fighter", 2, 7, 5, 0, 35, 90778, 129, 32, 8, 1410, 225, 30, 0.7 ],
- [ "Purinpurin", "PSY", "Shooter", 2, 7, 6, 0, 35, 90778, 38, 14, 29, 544, 194, 193, 0.7 ],
- [ "Brook Voyage Log: Straw Hat Pirates", "DEX", [ "Slasher", "Freedom" ], 4, 12, 6, 2, 50, 392109, 208, 99, 29, 1326, 603, 168, 0.7 ],
- [ "Brook Voyage Dream: Promised Meeting", "DEX", [ "Slasher", "Freedom" ], 5, 20, 6, 3, 99, 3000000, 1276, 560, 132, 2117, 1009, 279, 0.7 ],
- [ "Zambai", "PSY", "Shooter", 3, 16, 4, 2, 70, 1066998, 230, 90, 48, 1580, 702, 168, 1 ],
- [ "Demolisher Axeman", "STR", [ "Slasher", "Tough" ], 3, 20, 6, 1, 60, 899032, 1200, 500, 15, 1500, 900, 35, 1.5 ],
- [ "Demolisher Spearman", "STR", [ "Striker", "Tough" ], 3, 20, 6, 1, 60, 899032, 1200, 500, 16, 1700, 800, 38, 1.5 ],
- [ "Demolisher Gunner", "STR", [ "Shooter", "Tough" ], 3, 20, 6, 1, 60, 899032, 1200, 500, 14, 1300, 1000, 32, 1.5 ],
- [ "Street Punk: Brawler Red Bounty Hunter", "STR", "Fighter", 3, 13, 6, 1, 60, 674274, 102, 85, 28, 1158, 790, 90, 1 ],
- [ "Street Punk: Brawler Green Bounty Hunter", "DEX", "Fighter", 3, 13, 6, 1, 60, 674274, 108, 75, 32, 1175, 754, 102, 1 ],
- [ "Street Punk: Blade Blue Bounty Hunter", "QCK", "Slasher", 3, 13, 5, 1, 60, 674274, 153, 66, 40, 1215, 653, 128, 1 ],
- [ "Street Punk: Blade Red Bounty Hunter", "STR", "Slasher", 3, 13, 5, 1, 60, 674274, 149, 73, 33, 1193, 690, 115, 1 ],
- [ "Street Punk: Bullet Green Bounty Hunter", "DEX", "Shooter", 3, 13, 5, 1, 60, 674274, 92, 45, 51, 938, 500, 255, 1 ],
- [ "Street Punk: Bullet Yellow Bounty Hunter", "PSY", "Shooter", 3, 13, 5, 1, 60, 674274, 86, 38, 55, 900, 467, 274, 1 ],
- [ "Street Punk: Nails Yellow Bounty Hunter", "PSY", "Striker", 3, 13, 4, 1, 60, 674274, 71, 102, 33, 878, 854, 119, 1 ],
- [ "Street Punk: Nails Black Bounty Hunter", "INT", "Striker", 3, 13, 4, 1, 60, 674274, 71, 108, 29, 877, 890, 107, 1 ],
- [ "Street Punk: Gatling Black Bounty Hunter", "INT", "Shooter", 3, 13, 6, 1, 60, 674274, 133, 90, 3, 1556, 765, 15, 1 ],
- [ "Street Punk: Gatling Blue Bounty Hunter", "QCK", "Shooter", 3, 13, 6, 1, 60, 674274, 150, 84, 5, 1602, 745, 16, 1 ],
- [ "Tilestone", "STR", [ "Shooter", "Tough" ], 3, 12, 4, 2, 70, 1066998, 153, 98, 30, 1521, 800, 101, 1 ],
- [ "Franky Franky Family", "INT", "Fighter", 3, 17, 5, 2, 70, 1066998, 203, 103, 23, 1712, 831, 85, 1 ],
- [ "Kaku Cipher Pol No. 9", "QCK", [ "Slasher", "Tough" ], 3, 12, 5, 2, 50, 392109, 175, 80, 36, 1224, 643, 120, 1 ],
- [ "Kaku: Six Powers Cipher Pol No. 9", "QCK", [ "Slasher", "Tough" ], 4, 20, 4, 3, 99, 3000000, 1144, 577, 93, 2523, 1000, 196, 1 ],
- [ "Rob Lucci Cipher Pol No. 9", "STR", [ "Fighter", "Tough" ], 3, 12, 4, 2, 50, 392109, 121, 153, 20, 1121, 792, 64, 1 ],
- [ "Rob Lucci: Six Powers Cipher Pol No. 9", "STR", [ "Fighter", "Tough" ], 4, 20, 6, 3, 99, 3000000, 1064, 743, 51, 2284, 1289, 134, 1 ],
- [ "Keimi", "QCK", "Fighter", 3, 12, 4, 1, 50, 392109, 90, 23, 62, 960, 352, 273, [ 0.7, 1, 0.7 ] ],
- [ "Keimi, Takoyaki Stand Assistant", "QCK", "Fighter", 4, 18, 5, 2, 99, 3000000, 900, 295, 231, 1731, 698, 455, 0.7 ],
- [ "Pappug", "INT", "Fighter", 3, 12, 5, 1, 50, 392109, 77, 30, 77, 895, 505, 214, 0.7 ],
- [ "Hatchan, Takoyaki Stand Owner", "PSY", [ "Slasher", "Tough" ], 3, 16, 6, 2, 99, 3000000, 134, 88, 41, 1788, 888, 187, 0.7 ],
- [ "Doma", "QCK", "Slasher", 4, 18, 4, 3, 70, 1066998, 89, 144, 43, 1098, 733, 187, 0.7 ],
- [ "Bohemian Knight Doma", "QCK", "Slasher", 5, 29, 4, 4, 99, 4000000, 1020, 695, 150, 2134, 1268, 328, 0.7 ],
- [ "DeCalvan Brothers", "DEX", "Fighter", 4, 18, 6, 3, 70, 1066998, 240, 89, 28, 1880, 668, 73, 0.7 ],
- [ "DeCalvan Brothers Brothers' Bond", "DEX", "Fighter", 5, 29, 5, 4, 99, 4000000, 1824, 602, 50, 3330, 1183, 158, 0.7 ],
- [ "Squard", "PSY", [ "Striker", "Tough" ], 4, 18, 5, 3, 70, 1066998, 198, 190, 0, 1351, 810, 0, 0.7 ],
- [ "Maelstrom Spider Squard", "PSY", [ "Striker", "Tough" ], 5, 29, 5, 4, 99, 4000000, 960, 755, -1, 2755, 1434, -150, 0.7 ],
- [ "Whitey Bay", "INT", [ "Slasher", "Ambition" ], 4, 18, 5, 3, 70, 1066998, 109, 93, 44, 1140, 600, 223, 0.7 ],
- [ "Ice Witch Whitey Bay", "INT", [ "Slasher", "Ambition" ], 5, 29, 5, 4, 99, 4000000, 1094, 561, 171, 2278, 993, 399, 0.7 ],
- [ "Little Oars Jr.", "STR", [ "Shooter", "Tough" ], 4, 20, 6, 3, 70, 1066998, 251, 166, 1, 1900, 734, 3, 0.7 ],
- [ "Little Oars Jr. Charging!", "STR", [ "Shooter", "Tough" ], 5, 30, 4, 4, 99, 4000000, 1533, 801, 2, 4000, 1300, 9, 0.7 ],
- [ "Marco Whitebeard 1st Div. Commander", "QCK", [ "Fighter", "Tough" ], 5, 30, 4, 4, 50, 392109, 455, 268, 177, 1612, 777, 303, 0.7 ],
- [ "Marco the Phoenix Whitebeard 1st Div. Commander", "QCK", [ "Fighter", "Tough" ], 6, 55, 4, 5, 99, 5000000, 1555, 734, 258, 3013, 1402, 455, 0.7 ],
- [ "Nami Voyage Log: Straw Hat Pirates", "INT", [ "Striker", "Knowledge" ], 4, 12, 4, 2, 50, 392109, 143, 65, 50, 998, 498, 254, 0.7 ],
- [ "Nami Voyage Dream: World Map", "INT", [ "Striker", "Knowledge" ], 5, 20, 4, 3, 99, 3000000, 922, 434, 198, 1890, 900, 380, 0.7 ],
- [ "Iron Mask Duval", "DEX", [ "Shooter", "Ambition" ], 3, 10, 4, 1, 35, 226945, 132, 133, 25, 725, 505, 77, 1 ],
- [ "Duval, Head of the Flying Fish Riders", "DEX", [ "Shooter", "Ambition" ], 4, 30, 5, 2, 60, 1123790, 664, 424, 44, 1448, 723, 103, 1 ],
- [ "Duval, Head of the Rosy Life Riders", "DEX", [ "Shooter", "Freedom" ], 5, 50, 8, 3, 99, 5000000, 1420, 658, 103, 2608, 1113, 308, 1 ],
- [ "Pirate Arlong", "STR", [ "Slasher", "Tough" ], 3, 12, 6, 1, 50, 392109, 159, 144, 14, 1332, 700, 89, 1 ],
- [ "Arlong, Sun Pirates", "STR", [ "Slasher", "Tough" ], 4, 20, 4, 2, 99, 3000000, 1261, 633, 45, 2020, 1389, 171, 1 ],
- [ "Kuroobi, Sun Pirates", "STR", [ "Fighter", "Tough" ], 3, 10, 6, 1, 50, 392109, 160, 103, 9, 1233, 744, 70, 1 ],
- [ "Choo, Sun Pirates", "INT", [ "Shooter", "Tough" ], 3, 10, 5, 1, 50, 392109, 75, 72, 22, 1002, 552, 178, 1 ],
- [ "Monkey D. Luffy Swim Ring", "QCK", "Fighter", 4, 15, 6, 2, 99, 2000000, 144, 69, 31, 2232, 933, 242, 1 ],
- [ "Usopp Voyage Log: Straw Hat Pirates", "QCK", "Striker", 4, 12, 6, 2, 50, 392109, 155, 67, 47, 1085, 513, 235, 0.7 ],
- [ "Usopp Voyage Dream: Brave Sea Warrior", "QCK", "Striker", 5, 20, 4, 3, 99, 3000000, 1024, 468, 185, 2012, 938, 344, 0.7 ],
- [ "Nami Holiday", "PSY", [ "Striker", "Knowledge" ], 4, 15, 5, 2, 99, 2000000, 70, 30, 100, 1334, 673, 396, 0.7 ],
- [ "Nefertari Vivi, Princess of the Alabasta Kingdom", "PSY", [ "Striker", "Freedom" ], 3, 9, 6, 1, 35, 136167, 11, 11, 11, 285, 104, 225, 1 ],
- [ "Nefertari Vivi, Vice-Leader of the Suna Suna Clan", "PSY", [ "Fighter", "Freedom" ], 4, 15, 6, 2, 70, 1066998, 243, 51, 187, 593, 269, 488, 1 ],
- [ "Koza, Alabasta Citizen", "QCK", [ "Striker", "Freedom" ], 3, 9, 5, 1, 35, 136167, 53, 53, 3, 503, 274, 151, 1 ],
- [ "Koza, Leader of the Suna Suna Clan", "QCK", [ "Striker", "Freedom" ], 4, 15, 4, 2, 70, 1066998, 445, 230, 123, 1000, 503, 341, 1 ],
- [ "Nefertari Cobra, King of the Alabasta Kingdom", "PSY", "Fighter", 3, 15, 5, 2, 70, 1066998, 523, 294, 31, 1402, 571, 211, 1 ],
- [ "Sabo", "PSY", [ "Freedom", "Striker" ], 5, 30, 5, 4, 70, 1066998, 369, 279, 169, 1498, 821, 305, 1.5 ],
- [ "Sabo the Revolutionary", "PSY", [ "Freedom", "Striker" ], 6, 55, 4, 5, 99, 5000000, 1440, 752, 252, 2985, 1422, 451, 1.5 ],
- [ "Koala", "DEX", [ "Fighter", "Freedom" ], 4, 18, 4, 3, 70, 1066998, 94, 122, 48, 996, 644, 226, 1.5 ],
- [ "Koala the Revolutionary", "DEX", [ "Fighter", "Freedom" ], 5, 29, 4, 4, 99, 4000000, 931, 600, 185, 1934, 1212, 392, 1.5 ],
- [ "Hack", "STR", [ "Fighter", "Tough" ], 4, 18, 4, 3, 70, 1066998, 188, 136, 21, 1241, 721, 151, 1.5 ],
- [ "Hack the Revolutionary", "STR", [ "Fighter", "Tough" ], 5, 29, 5, 4, 99, 4000000, 1185, 668, 115, 2387, 1324, 259, 1.5 ],
- [ "Emporio Ivankov, Newkama Kenpo Instructor", "INT", [ "Freedom", "Fighter" ], 4, 18, 4, 3, 70, 1066998, 206, 99, 32, 1343, 653, 157, 1.5 ],
- [ "Emporio Ivankov the Revolutionary", "INT", [ "Freedom", "Fighter" ], 5, 29, 7, 4, 99, 4000000, 1285, 593, 142, 2774, 1212, 241, 1.5 ],
- [ "Inazuma", "QCK", [ "Slasher", "Knowledge" ], 4, 18, 4, 3, 70, 1066998, 179, 58, 47, 1300, 449, 232, 1.5 ],
- [ "Inazuma the Revolutionary", "QCK", [ "Slasher", "Knowledge" ], 5, 29, 6, 4, 99, 4000000, 1244, 400, 199, 2559, 833, 380, 1.5 ],
- [ "Nico Robin Voyage Log: Straw Hat Pirates", "PSY", [ "Fighter", "Knowledge" ], 4, 12, 6, 2, 50, 392109, 155, 62, 58, 1032, 484, 262, 1 ],
- [ "Nico Robin Voyage Dream: 100-Year Void", "PSY", [ "Fighter", "Knowledge" ], 5, 20, 6, 3, 99, 3000000, 970, 423, 220, 1924, 857, 390, 1 ],
- [ "Ice Cream Loving Nami", "DEX", [ "Striker", "Knowledge" ], 4, 12, 6, 1, 50, 392109, 141, 43, 53, 966, 422, 242, 1 ],
- [ "Lemon Ice Cream Loving Nami", "DEX", [ "Striker", "Knowledge" ], 5, 20, 4, 2, 99, 3000000, 900, 366, 200, 1802, 768, 402, 1 ],
- [ "Ice Cream Loving Robin", "PSY", [ "Fighter", "Knowledge" ], 4, 12, 6, 1, 50, 392109, 147, 61, 46, 988, 491, 218, 0.7 ],
- [ "Chocolate Ice Cream Loving Robin", "PSY", [ "Fighter", "Knowledge" ], 5, 20, 4, 2, 99, 3000000, 943, 443, 172, 1903, 842, 361, 1 ],
- [ "Ice Cream Loving Perona", "INT", [ "Shooter", "Ambition" ], 4, 12, 5, 1, 50, 392109, 99, 67, 52, 901, 527, 233, 1 ],
- [ "Strawberry Ice Cream Loving Perona", "INT", [ "Shooter", "Ambition" ], 5, 20, 4, 2, 99, 3000000, 848, 462, 182, 1689, 877, 385, 1 ],
- [ "Vivi's Breather", "QCK", [ "Slasher", "Freedom" ], 4, 12, 4, 2, 70, 1066998, 102, 37, 91, 1028, 497, 343, 1 ],
- [ "Calgara", "STR", [ "Freedom", "Striker" ], 3, 12, 6, 1, 50, 392109, 94, 115, 0, 1203, 692, 0, 1 ],
- [ "Calgara, the Great Warrior of Shandia", "STR", [ "Freedom", "Striker" ], 4, 20, 4, 2, 99, 3000000, 1145, 633, 0, 2401, 1300, 90, 1 ],
- [ "Montblanc Noland", "INT", [ "Slasher", "Knowledge" ], 3, 12, 5, 1, 50, 392109, 102, 74, 49, 1028, 502, 212, 1 ],
- [ "Montblanc Noland, Explorer and Admiral of the Lvneel Kingdom", "INT", [ "Slasher", "Knowledge" ], 4, 20, 4, 2, 99, 3000000, 949, 442, 170, 1982, 890, 326, 1 ],
- [ "Halberd Corporal Navy HQ", "DEX", "Striker", 2, 7, 5, 0, 35, 90778, 70, 32, 21, 601, 301, 98, 1 ],
- [ "Pistol Corporal Navy HQ", "QCK", "Shooter", 2, 7, 6, 0, 35, 90778, 58, 28, 28, 498, 286, 121, 1 ],
- [ "Saber Corporal Navy HQ", "PSY", "Slasher", 2, 7, 5, 0, 35, 90778, 51, 34, 22, 466, 330, 111, 1 ],
- [ "Bazooka Corporal Navy HQ", "STR", "Shooter", 2, 7, 4, 0, 35, 90778, 62, 50, 14, 598, 404, 64, 1 ],
- [ "Knuckle Corporal Navy HQ", "INT", "Fighter", 2, 7, 6, 0, 35, 90778, 55, 48, 22, 522, 392, 82, 1 ],
- [ "Halberd Major Navy HQ", "DEX", "Striker", 3, 13, 6, 1, 70, 1066998, 554, 250, 61, 1358, 645, 170, 1 ],
- [ "Pistol Major Navy HQ", "QCK", "Shooter", 3, 13, 5, 1, 70, 1066998, 444, 244, 96, 1002, 568, 259, 1 ],
- [ "Saber Major Navy HQ", "PSY", "Slasher", 3, 13, 6, 1, 70, 1066998, 411, 275, 86, 989, 737, 208, 1 ],
- [ "Bazooka Major Navy HQ", "STR", "Shooter", 3, 13, 6, 1, 70, 1066998, 547, 362, 44, 1301, 833, 117, 1 ],
- [ "Knuckle Major Navy HQ", "INT", "Fighter", 3, 13, 5, 1, 70, 1066998, 462, 351, 49, 1244, 876, 112, 1 ],
- [ "Oimo", "PSY", [ "Striker", "Tough" ], 3, 25, 5, 2, 70, 1778330, 452, 223, 23, 1602, 742, 98, 1 ],
- [ "Kashi", "INT", [ "Slasher", "Tough" ], 3, 25, 6, 2, 70, 1778330, 426, 242, 21, 1551, 798, 87, 1 ],
- [ "Watchdog Unit of the Law", "QCK", "Slasher", 3, 13, 4, 1, 70, 1066998, 122, 43, 40, 1211, 488, 251, 1 ],
- [ "Just Juryman", "STR", "Striker", 3, 13, 4, 1, 70, 1066998, 108, 129, 34, 990, 900, 144, 1 ],
- [ "Three-Headed Baskerville", "DEX", "Slasher", 3, 13, 4, 3, 70, 1066998, 102, 78, 38, 1109, 595, 232, 1 ],
- [ "Blueno, Cipher Pol No.9", "STR", [ "Fighter", "Tough" ], 3, 12, 5, 2, 50, 392109, 166, 102, 32, 1338, 502, 124, 1 ],
- [ "Blueno Rokushiki, Cipher Pol No.9", "STR", [ "Fighter", "Tough" ], 4, 20, 4, 3, 99, 3000000, 1281, 452, 100, 2466, 921, 221, 1 ],
- [ "Nico Robin the Devil Child", "PSY", [ "Fighter", "Knowledge" ], 3, 10, 6, 2, 50, 392109, 110, 63, 32, 1002, 494, 209, 1 ],
- [ "Nico Robin, Straw Hat Pirates", "PSY", [ "Fighter", "Knowledge" ], 4, 16, 5, 3, 99, 3000000, 938, 430, 155, 1892, 881, 351, 1 ],
- [ "Franky Voyage Log: Straw Hat Pirates", "PSY", [ "Shooter", "Freedom" ], 4, 12, 4, 2, 50, 392109, 242, 100, 34, 1330, 597, 151, 1 ],
- [ "Franky Voyage Dream: Ship of the Seven Seas", "PSY", [ "Shooter", "Freedom" ], 5, 20, 6, 3, 99, 3000000, 1259, 550, 112, 2372, 1100, 231, 1 ],
- [ "Gan Fall", "QCK", "Striker", 3, 12, 6, 1, 50, 392109, 80, 40, 48, 930, 452, 185, 1.5 ],
- [ "Gan Fall the Knight of the Sky", "QCK", "Striker", 4, 20, 4, 2, 99, 3000000, 884, 401, 151, 1704, 1202, 300, 1.5 ],
- [ "Pierre", "DEX", "Fighter", 3, 12, 4, 1, 50, 392109, 69, 32, 38, 920, 480, 182, 1 ],
- [ "Konis", "PSY", "Freedom", 3, 9, 5, 2, 35, 136167, 58, 10, 32, 503, 190, 232, 1 ],
- [ "Konis, Skypiean Maiden", "PSY", "Freedom", 4, 15, 4, 3, 70, 1066998, 458, 145, 196, 912, 388, 387, 1 ],
- [ "Dracule Mihawk Warlord of the Sea", "INT", "Slasher", 5, 30, 4, 4, 70, 1066998, 623, 328, 10, 1921, 850, 58, 1.5 ],
- [ "Dracule Mihawk, World's Strongest Swordsman", "INT", "Slasher", 6, 55, 5, 4, 99, 5000000, 1857, 799, 31, 3900, 1490, 120, 1.5 ],
- [ "Sir Crocodile Logia Warlord of the Sea", "DEX", [ "Knowledge", "Striker" ], 5, 30, 4, 4, 70, 1066998, 500, 293, 104, 1780, 831, 226, 1.5 ],
- [ "Sir Crocodile Logia Former Warlord of the Sea", "DEX", [ "Knowledge", "Striker" ], 6, 55, 4, 4, 99, 5000000, 1724, 765, 174, 3621, 1435, 310, 1.5 ],
- [ "Jerry", "STR", [ "Fighter", "Freedom" ], 3, 9, 5, 1, 35, 136167, 72, 100, 32, 492, 380, 104, 1 ],
- [ "Jerry, Cipher Pol No.6", "STR", [ "Fighter", "Freedom" ], 4, 15, 8, 2, 70, 1066998, 439, 323, 70, 1000, 712, 212, 1 ],
- [ "T-Bone", "PSY", [ "Slasher", "Knowledge" ], 3, 12, 6, 1, 50, 392109, 99, 78, 42, 958, 542, 162, 1 ],
- [ "Ship Cutter T-Bone, Navy HQ Captain", "PSY", [ "Slasher", "Knowledge" ], 4, 20, 4, 3, 99, 3000000, 900, 493, 133, 1700, 1100, 300, 1 ],
- [ "Nefertari Vivi Voyage Log: Princess of Alabasta", "QCK", [ "Slasher", "Freedom" ], 4, 12, 6, 2, 50, 392109, 98, 51, 62, 855, 424, 288, 1 ],
- [ "Nefertari Vivi Voyage Dream: Queen of the Pirates", "QCK", [ "Slasher", "Freedom" ], 5, 20, 4, 3, 99, 3000000, 800, 371, 258, 1591, 777, 474, 1 ],
- [ "Monkey D. Luffy Gum-Gum Gatling", "DEX", [ "Freedom", "Fighter" ], 4, 15, 8, 3, 99, 2000000, 212, 100, 46, 1777, 795, 270, 0.7 ],
- [ "Kalifa, Cipher Pol No.9", "DEX", [ "Fighter", "Knowledge" ], 3, 12, 5, 2, 50, 392109, 89, 39, 55, 952, 448, 217, 1 ],
- [ "Kalifa Rokushiki, Cipher Pol No.9", "DEX", [ "Fighter", "Knowledge" ], 4, 20, 5, 3, 99, 3000000, 900, 401, 174, 1894, 970, 302, 1 ],
- [ "Jabra, Cipher Pol No.9", "INT", [ "Fighter", "Tough" ], 3, 12, 4, 2, 50, 392109, 190, 92, -200, 1334, 572, -200, 1 ],
- [ "Jabra Rokushiki, Cipher Pol No.9", "INT", [ "Fighter", "Tough" ], 4, 20, 4, 3, 99, 3000000, 1272, 521, -200, 2720, 1250, -200, 1 ],
- [ "Fukuro, Cipher Pol No.9", "STR", [ "Fighter", "Tough" ], 3, 9, 4, 2, 35, 136167, 114, 52, 30, 1123, 408, 122, 1 ],
- [ "Fukuro Rokushiki, Cipher Pol No.9", "STR", [ "Fighter", "Tough" ], 4, 15, 6, 3, 70, 1066998, 1077, 362, 97, 1850, 690, 177, 1 ],
- [ "Kumadori, Cipher Pol No.9", "PSY", [ "Striker", "Tough" ], 3, 9, 5, 2, 35, 136167, 102, 60, 29, 1055, 442, 119, 1 ],
- [ "Kumadori Rokushiki, Cipher Pol No.9", "PSY", [ "Striker", "Tough" ], 4, 15, 4, 3, 70, 1066998, 1000, 398, 88, 1792, 755, 165, 1 ],
- [ "Kaku Human-Beast, Ox-Ox Fruit Model: Giraffe", "STR", [ "Slasher", "Tough" ], 4, 20, 6, 3, 99, 4000000, 1220, 692, 43, 2526, 1200, 114, 1 ],
- [ "Lucci Human-Beast, Cat-Cat Fruit Model: Leopard", "QCK", [ "Fighter", "Tough" ], 4, 20, 4, 3, 99, 4000000, 1032, 703, 56, 2200, 1302, 140, 1 ],
- [ "Spandam", "INT", "Slasher", 4, 7, 5, 1, 35, 136167, 52, 25, 25, 258, 196, 89, 1 ],
- [ "Franky, Straw Hat Pirates", "INT", [ "Fighter", "Freedom" ], 4, 18, 4, 3, 99, 3000000, 1623, 765, 70, 2505, 1149, 130, 1 ],
- [ "Nero", "QCK", [ "Shooter", "Ambition" ], 3, 9, 6, 1, 35, 136167, 59, 112, 20, 324, 543, 83, 0.7 ],
- [ "Nero, Cipher Pol No.9", "QCK", [ "Shooter", "Ambition" ], 4, 15, 5, 2, 70, 1066998, 277, 489, 51, 755, 1050, 145, 0.7 ],
- [ "Wanze", "DEX", "Freedom", 3, 11, 4, 1, 50, 392109, 202, 44, 40, 1124, 367, 212, 1 ],
- [ "Wanze, Cipher Pol No.7", "DEX", "Freedom", 4, 18, 5, 2, 99, 3000000, 1059, 312, 170, 2051, 674, 363, 1 ],
- [ "Portgas D. Ace, Record of the Voyage - Whitebeard Pirates", "QCK", [ "Freedom", "Fighter" ], 4, 12, 5, 2, 50, 392109, 141, 71, 36, 1121, 585, 189, 1.5 ],
- [ "Portgas D. Ace Voyage Dream: Pirate Summit", "QCK", [ "Freedom", "Fighter" ], 5, 20, 4, 3, 99, 4000000, 1063, 524, 140, 2181, 1100, 258, 1.5 ],
- [ "Megalo and Princess Shirahoshi", "QCK", "Fighter", 4, 15, 4, 3, 70, 1066998, 1251, 271, 150, 2001, 600, 241, 1 ],
- [ "Rob Lucci, CP9's Dark Justice", "STR", [ "Tough", "Fighter" ], 5, 30, 4, 4, 70, 1066998, 496, 300, 89, 1656, 800, 245, 1.5 ],
- [ "Rob Lucci, CP9's Strongest Generation", "STR", [ "Tough", "Fighter" ], 6, 55, 6, 4, 99, 5000000, 1611, 762, 220, 3230, 1456, 382, 1.5 ],
- [ "Kaku, CP9's Dark Justice", "DEX", [ "Slasher", "Tough" ], 4, 17, 6, 3, 70, 1066998, 151, 132, 28, 1183, 713, 178, 1 ],
- [ "Kaku, CP9's Strongest Generation", "DEX", [ "Slasher", "Tough" ], 5, 27, 8, 4, 99, 4000000, 1124, 666, 147, 2440, 1325, 272, 1 ],
- [ "Kalifa, CP9's Dark Justice", "QCK", [ "Knowledge", "Fighter" ], 4, 17, 5, 3, 70, 1066998, 98, 60, 63, 963, 545, 270, 1 ],
- [ "Kalifa, CP9's Strongest Generation", "QCK", [ "Knowledge", "Fighter" ], 5, 27, 5, 4, 99, 4000000, 912, 498, 238, 1964, 933, 473, 1 ],
- [ "Jabra, CP9's Dark Justice", "QCK", [ "Tough", "Freedom" ], 4, 17, 5, 3, 70, 1066998, 224, 112, 21, 1650, 702, 89, 1 ],
- [ "Jabra, CP9's Strongest Generation", "QCK", [ "Tough", "Freedom" ], 5, 27, 4, 4, 99, 4000000, 1601, 657, 55, 3003, 1299, 166, 1 ],
- [ "Blueno, CP9's Dark Justice", "INT", [ "Tough", "Freedom" ], 4, 16, 5, 3, 70, 1066998, 245, 94, 23, 1832, 644, 91, 1 ],
- [ "Blueno, CP9's Strongest Generation", "INT", [ "Tough", "Freedom" ], 5, 26, 4, 4, 99, 4000000, 1779, 600, 56, 3502, 1045, 168, 1 ],
- [ "Fukuro, CP9's Dark Justice", "PSY", [ "Tough", "Fighter" ], 4, 16, 4, 3, 70, 1066998, 151, 97, 46, 1140, 651, 203, 1 ],
- [ "Fukuro, CP9's Strongest Generation", "PSY", [ "Tough", "Fighter" ], 5, 26, 8, 4, 99, 4000000, 1093, 603, 165, 2415, 1051, 353, 1 ],
- [ "Kumadori, CP9's Dark Justice", "STR", [ "Tough", "Striker" ], 4, 16, 4, 3, 70, 1066998, 162, 89, 47, 1167, 612, 212, 1 ],
- [ "Kumadori, CP9's Strongest Generation", "STR", [ "Tough", "Striker" ], 5, 26, 7, 4, 99, 4000000, 1110, 560, 170, 2479, 1018, 355, 1 ],
- [ "Monkey D. Luffy Halloween Monster", "DEX", [ "Fighter", "Freedom" ], 4, 20, 6, 3, 99, 3000000, 85, 41, 26, 1920, 1080, 185, 1 ],
- [ "Usopp Lying Wolf", "PSY", "Shooter", 4, 20, 5, 3, 99, 3000000, 51, 23, 46, 1444, 673, 400, 1 ],
- [ "Franky Frankenstein", "STR", [ "Shooter", "Freedom" ], 4, 20, 4, 3, 99, 3000000, 82, 43, 22, 1903, 1121, 170, 1 ],
- [ "Nami Jackie 'o Lantern", "QCK", [ "Striker", "Knowledge" ], 4, 20, 4, 3, 99, 3000000, 47, 25, 49, 1342, 699, 416, 1 ],
- [ "Tony Tony Chopper Lil' Vampire", "INT", [ "Fighter", "Knowledge" ], 4, 20, 6, 3, 99, 3000000, 56, 33, 38, 1548, 763, 358, 1 ],
- [ "Roronoa Zoro Jack the Ripper", "QCK", [ "Slasher", "Ambition" ], 4, 20, 6, 3, 99, 3000000, 90, 39, 13, 2094, 1063, 131, 1 ],
- [ "Nico Robin Devil Girl", "DEX", [ "Fighter", "Knowledge" ], 4, 20, 4, 3, 99, 3000000, 53, 35, 34, 1500, 889, 320, 1 ],
- [ "Sanji Ghost Knight", "PSY", "Fighter", 4, 20, 4, 3, 99, 3000000, 92, 36, 28, 2088, 936, 221, 1 ],
- [ "Brook Cowardly Skeleton", "INT", [ "Slasher", "Freedom" ], 4, 20, 4, 3, 99, 3000000, 62, 35, 26, 1921, 948, 210, 1 ],
- [ "Dalmatian, Navy HQ Vice Admiral", "STR", [ "Fighter", "Tough" ], 4, 20, 5, 3, 99, 4000000, 241, 186, 35, 2171, 1275, 189, 1.5 ],
- [ "Momonga, Navy HQ Vice Admiral", "PSY", [ "Knowledge", "Slasher" ], 4, 20, 6, 3, 99, 4000000, 298, 142, 20, 2618, 1111, 163, 1.5 ],
- [ "Onigumo, Navy HQ Vice Admiral", "DEX", [ "Slasher", "Ambition" ], 4, 20, 8, 3, 99, 4000000, 213, 118, 54, 2000, 1021, 318, 1.5 ],
- [ "Shu", "INT", [ "Fighter", "Freedom" ], 3, 12, 4, 2, 70, 1066998, 56, 89, 23, 943, 969, 150, 1 ],
- [ "Very Good", "QCK", [ "Freedom", "Striker" ], 3, 12, 4, 2, 70, 1066998, 203, 57, 15, 1808, 703, 103, 1 ],
- [ "Strawberry, Navy HQ Vice Admiral", "PSY", [ "Knowledge", "Slasher" ], 3, 16, 6, 2, 99, 3000000, 142, 64, 33, 1883, 943, 178, 1 ],
- [ "Lucky Roo", "PSY", [ "Shooter", "Freedom" ], 3, 13, 6, 2, 35, 136167, 303, 169, 30, 904, 460, 98, 0.7 ],
- [ "Lucky Roo of the Red Hair Pirates", "PSY", [ "Shooter", "Freedom" ], 4, 20, 5, 3, 70, 1778330, 842, 412, 70, 1606, 789, 188, 0.7 ],
- [ "Rebecca, Prisoner Gladiator", "QCK", "Striker", 4, 18, 5, 1, 50, 392109, 193, 112, 51, 1003, 503, 201, 1 ],
- [ "Rebecca, Colosseum's Exclusive Gladiator", "QCK", "Striker", 5, 30, 4, 3, 99, 3000000, 920, 441, 150, 1947, 853, 374, 1 ],
- [ "Urouge, Captain of the Fallen Monk Pirates", "STR", [ "Fighter", "Striker" ], 4, 25, 5, 2, 70, 1066998, 702, 340, 38, 1580, 790, 121, 1.5 ],
- [ "Mad Monk Urouge, Captain of the Fallen Monk Pirates", "STR", [ "Fighter", "Striker" ], 5, 40, 5, 3, 99, 4000000, 1512, 755, 83, 2824, 1324, 203, 1.5 ],
- [ "Tashigi: Flower of Justice", "INT", [ "Slasher", "Knowledge" ], 4, 13, 5, 2, 50, 392109, 132, 65, 49, 999, 495, 205, 1 ],
- [ "Tashigi Marine Officer: Flower of Justice", "INT", [ "Slasher", "Knowledge" ], 5, 20, 5, 3, 99, 3000000, 932, 428, 164, 1804, 890, 378, 1 ],
- [ "Gen-san", "STR", [ "Slasher", "Knowledge" ], 3, 9, 5, 2, 35, 136167, 211, 45, 33, 930, 288, 190, 1 ],
- [ "Genzo, Cocoyasi Village Resident", "STR", [ "Slasher", "Knowledge" ], 4, 15, 4, 3, 70, 1066998, 879, 242, 143, 1324, 501, 299, 1 ],
- [ "Dr. Hiluluk", "PSY", [ "Shooter", "Freedom" ], 3, 9, 6, 2, 35, 136167, 231, 63, 5, 1248, 461, 84, 1 ],
- [ "Dr. Hiluluk, Quack Doctor", "PSY", [ "Shooter", "Freedom" ], 4, 15, 5, 3, 70, 1066998, 1233, 451, 84, 1248, 518, 312, 1 ],
- [ "Kuina", "DEX", "Striker", 3, 9, 6, 2, 35, 136167, 54, 41, 70, 503, 264, 251, 1 ],
- [ "Kuina, Shimotsuki Village's Girl Swordsman", "DEX", [ "Slasher", "Ambition" ], 4, 15, 5, 3, 70, 1066998, 448, 220, 213, 917, 582, 338, 1 ],
- [ "Tamanegi, Piiman & Ninjin", "QCK", [ "Striker", "Freedom" ], 3, 9, 4, 3, 35, 136167, 80, 10, 66, 716, 142, 249, 1 ],
- [ "Tamanegi, Piiman & Ninjin, the Usopp Pirates", "QCK", [ "Striker", "Freedom" ], 4, 15, 6, 3, 70, 1066998, 654, 77, 180, 1200, 333, 350, 1 ],
- [ "Iceburg", "INT", [ "Shooter", "Knowledge" ], 3, 9, 6, 2, 35, 136167, 155, 69, 38, 790, 392, 167, 1 ],
- [ "Iceburg, Mayor of W7 and President of Galley-La Company", "INT", [ "Shooter", "Knowledge" ], 4, 16, 4, 3, 70, 1066998, 723, 343, 122, 1401, 702, 224, 1 ],
- [ "Monkey D. Luffy Star of Hope", "INT", [ "Slasher", "Tough" ], 4, 30, 4, 1, 70, 1066998, 259, 179, 0, 1400, 763, 0, 1.5 ],
- [ "Nightmare Luffy Warrior of Hope", "INT", [ "Fighter", "Tough" ], 5, 50, 4, 2, 99, 5000000, 1331, 711, 0, 3020, 1520, 0, 1.5 ],
- [ "Breed", "INT", "Knowledge", 3, 13, 6, 1, 50, 392109, 59, 25, 59, 867, 418, 275, 1.5 ],
- [ "Breed, User of the Peto-Peto Fruit", "INT", [ "Knowledge", "Tough" ], 4, 20, 4, 3, 99, 3000000, 867, 818, 200, 2002, 1311, 180, 1.5 ],
- [ "Kung Fu Dugong, Sea Animal Pirates", "PSY", [ "Fighter", "Tough" ], 4, 18, 5, 2, 70, 1778330, 50, 355, 95, 450, 1115, 225, 1.5 ],
- [ "Sea Lapin, Sea Animal Pirates", "QCK", [ "Fighter", "Tough" ], 3, 15, 4, 1, 70, 711332, 209, 76, 14, 1757, 724, 112, 1 ],
- [ "Octopus Boxer, Sea Animal Pirates", "STR", [ "Fighter", "Tough" ], 3, 15, 8, 1, 70, 711332, 99, 91, 2, 1563, 846, 93, 1 ],
- [ "Mr. 2 Bon Clay Voyage Log: B.W.", "PSY", [ "Fighter", "Freedom" ], 4, 13, 5, 2, 50, 392109, 109, 57, 32, 1033, 513, 212, 1 ],
- [ "Mr. 2 Bon Clay Voyage Dream: Okama Way", "PSY", [ "Fighter", "Freedom" ], 5, 20, 4, 3, 99, 3000000, 970, 448, 181, 1914, 922, 362, 1 ],
- [ "Hina, Navy HQ Captain", "DEX", [ "Fighter", "Knowledge" ], 4, 18, 5, 1, 50, 392109, 188, 128, 48, 977, 544, 191, 1 ],
- [ "Black Cage Hina, Navy HQ Captain", "DEX", [ "Fighter", "Knowledge" ], 5, 30, 5, 3, 99, 3000000, 920, 488, 159, 1901, 912, 357, 1 ],
- [ "Smoker, Navy HQ Captain", "INT", [ "Striker", "Ambition" ], 4, 25, 6, 2, 70, 1066998, 710, 309, 44, 1600, 703, 146, 1.5 ],
- [ "Smoker the White Hunter, Navy HQ Captain", "INT", [ "Striker", "Ambition" ], 5, 40, 5, 3, 99, 4000000, 1549, 640, 112, 2727, 1289, 234, 1.5 ],
- [ "Pure White Angel Wedding Nami", "PSY", [ "Striker", "Knowledge" ], 3, 13, 5, 1, 50, 392109, 60, 33, 49, 933, 419, 268, 1 ],
- [ "Pure White Goddess Wedding Nami", "PSY", [ "Striker", "Knowledge" ], 4, 20, 4, 2, 99, 3000000, 877, 362, 221, 1772, 799, 409, 1 ],
- [ "Lola, Thriller Bark Bride", "STR", [ "Slasher", "Tough" ], 3, 11, 6, 1, 50, 261406, 103, 69, 31, 1101, 559, 91, 1 ],
- [ "Courting Lola, Thriller Bark Bride", "STR", [ "Slasher", "Tough" ], 4, 18, 8, 2, 99, 2000000, 1032, 513, 52, 2018, 1009, 147, 1 ],
- [ "Risky Brothers", "DEX", [ "Slasher", "Freedom" ], 3, 9, 4, 2, 50, 392109, 30, 15, 40, 707, 368, 287, 1 ],
- [ "Cerberus", "QCK", [ "Fighter", "Tough" ], 3, 14, 5, 2, 50, 392109, 233, 108, 52, 1151, 781, 0, 1 ],
- [ "Tararan", "INT", [ "Knowledge", "Tough" ], 3, 14, 7, 2, 50, 392109, 325, 76, 48, 1385, 696, 0, 1 ],
- [ "Bear-Skin Rug", "DEX", [ "Fighter", "Tough" ], 3, 14, 5, 2, 50, 392109, 203, 52, 155, 1074, 609, 74, 1 ],
- [ "Gecko Moriah, Thriller Bark's Mysterious Four", "INT", [ "Freedom", "Ambition" ], 3, 12, 6, 2, 50, 392109, 205, 92, 0, 1422, 504, 0, 1 ],
- [ "Gecko Moriah, Ruler of Thriller Bark", "INT", [ "Freedom", "Ambition" ], 4, 20, 4, 3, 99, 3000000, 1355, 451, 0, 2603, 913, 0, 1.5 ],
- [ "Soldier Zombie Boastful Shadow", "STR", "Fighter", 2, 7, 6, 0, 35, 90778, 85, 39, 92, 990, 622, 27, 1 ],
- [ "Soldier Zombie Quick Shadow", "QCK", "Fighter", 2, 7, 6, 0, 35, 90778, 77, 30, 92, 944, 590, 43, 1 ],
- [ "Soldier Zombie Vile Shadow", "DEX", "Fighter", 2, 7, 6, 0, 35, 90778, 92, 28, 92, 1032, 574, 35, 1 ],
- [ "Soldier Zombie Hateful Shadow", "INT", "Fighter", 2, 7, 6, 0, 35, 90778, 71, 40, 92, 903, 648, 29, 1 ],
- [ "Soldier Zombie Proud Shadow", "PSY", "Fighter", 2, 7, 6, 0, 35, 90778, 70, 24, 92, 887, 551, 72, 1 ],
- [ "Tricky Wild Zombie", "DEX", "Tough", 3, 12, 4, 1, 50, 392109, 75, 74, 132, 899, 720, 71, 1 ],
- [ "Brainy Wild Zombie", "INT", "Tough", 3, 12, 4, 1, 50, 392109, 71, 86, 132, 823, 771, 65, 1 ],
- [ "Hearty Wild Zombie", "PSY", "Tough", 3, 12, 4, 1, 50, 392109, 70, 70, 132, 801, 700, 94, 1 ],
- [ "General Zombie Herculean Shadow", "STR", [ "Slasher", "Tough" ], 3, 20, 6, 1, 70, 1066998, 99, 59, 29, 1702, 813, 0, 1 ],
- [ "General Zombie Peculiar Shadow", "DEX", [ "Slasher", "Tough" ], 3, 20, 6, 1, 70, 1066998, 102, 57, 29, 1727, 802, 0, 1 ],
- [ "General Zombie Swift Shadow", "QCK", [ "Slasher", "Tough" ], 3, 20, 6, 1, 70, 1066998, 113, 54, 29, 1768, 789, 0, 1 ],
- [],
- [],
- [ "Basil Hawkins, Captain of the Hawkins Pirates", "DEX", [ "Knowledge", "Striker" ], 4, 25, 6, 2, 70, 1066998, 639, 298, 69, 1219, 745, 201, 1 ],
- [ "Basil Hawkins the Magician, Captain of the Hawkins Pirates", "DEX", [ "Knowledge", "Striker" ], 5, 40, 4, 3, 99, 4000000, 1157, 690, 147, 2239, 1278, 347, 1 ],
- [ "Wyper, Warrior of Shandia", "STR", [ "Shooter", "Freedom" ], 4, 18, 6, 1, 50, 392109, 229, 151, 10, 1198, 611, 33, 1 ],
- [ "Berserker Wyper, Warrior of Shandia", "STR", [ "Shooter", "Freedom" ], 5, 30, 5, 3, 99, 3000000, 1140, 543, 15, 2095, 1260, 99, 1 ],
- [ "Mr. 7 & Miss Father's Day", "QCK", [ "Shooter", "Ambition" ], 4, 20, 6, 2, 70, 1778330, 68, 42, 105, 1085, 625, 315, 1 ],
- [ "Tyrant Bartholomew Kuma", "STR", [ "Knowledge", "Tough" ], 4, 30, 4, 2, 70, 1066998, 260, 170, 90, 1201, 623, 190, 1 ],
- [ "Tyrant Bartholomew Kuma, Government's Human Weapon", "STR", [ "Knowledge", "Tough" ], 5, 50, 7, 3, 99, 5000000, 1159, 572, 190, 3090, 1435, 90, 1 ],
- [ "Caesar Clown", "DEX", [ "Ambition", "Knowledge" ], 4, 18, 5, 3, 70, 1066998, 71, 141, 71, 989, 740, 204, 1 ],
- [ "Master Caesar", "DEX", [ "Ambition", "Knowledge" ], 5, 30, 4, 4, 99, 4000000, 941, 695, 177, 2000, 1383, 343, 1 ],
- [ "Vergo", "INT", [ "Striker", "Tough" ], 4, 18, 6, 3, 70, 1066998, 282, 150, 19, 1515, 782, 89, 1 ],
- [ "Vergo, Donquixote Pirates", "INT", [ "Striker", "Tough" ], 5, 30, 4, 4, 99, 4000000, 1464, 730, 60, 3003, 1410, 140, 1 ],
- [ "Monet", "PSY", [ "Freedom", "Knowledge" ], 4, 18, 4, 3, 70, 1066998, 130, 87, 47, 1078, 593, 241, 1 ],
- [ "Monet, Donquixote Pirates", "PSY", [ "Freedom", "Knowledge" ], 5, 30, 4, 4, 99, 4000000, 1020, 540, 199, 2131, 1001, 433, 1 ],
- [ "Baby 5", "STR", [ "Shooter", "Striker" ], 4, 18, 5, 3, 70, 1066998, 114, 142, 53, 892, 743, 230, 1 ],
- [ "Baby 5, Donquixote Pirates", "STR", [ "Shooter", "Striker" ], 5, 30, 6, 4, 99, 4000000, 850, 692, 185, 1929, 1352, 349, 1 ],
- [ "Buffalo", "QCK", [ "Shooter", "Freedom" ], 4, 18, 9, 3, 70, 1066998, 96, 96, 49, 1111, 666, 196, 1 ],
- [ "Buffalo, Donquixote Pirates", "QCK", [ "Shooter", "Freedom" ], 5, 30, 10, 4, 99, 4000000, 1050, 600, 173, 2769, 1096, 296, 1 ],
- [ "Tom, Tom's Workers", "DEX", [ "Fighter", "Tough" ], 3, 12, 6, 1, 50, 392109, 159, 95, 30, 1103, 614, 141, 1 ],
- [ "Legendary Shipwright Tom, Tom's Workers", "DEX", [ "Fighter", "Tough" ], 4, 20, 4, 2, 99, 3000000, 1059, 572, 100, 2207, 1029, 266, 1 ],
- [ "Cutty Flam, Tom's Workers", "STR", [ "Shooter", "Ambition" ], 3, 13, 6, 2, 70, 1066998, 24, 138, 15, 924, 932, 139, 1 ],
- [ "Iceburg, Tom's Workers", "QCK", [ "Striker", "Knowledge" ], 3, 13, 6, 2, 70, 1066998, 58, 60, 36, 1098, 694, 203, 1 ],
- [ "Tin-Plate Wapol", "STR", [ "Shooter", "Ambition" ], 3, 12, 6, 2, 70, 1066998, 160, 78, 26, 1304, 800, 99, 1 ],
- [ "Slim-up Wapol", "QCK", [ "Shooter", "Ambition" ], 4, 20, 5, 2, 99, 3000000, 837, 505, 95, 1923, 867, 247, 1 ],
- [ "Robson", "PSY", [ "Fighter", "Tough" ], 3, 9, 6, 1, 50, 392109, 155, 22, 36, 1574, 318, 151, 1 ],
- [ "Chopper Playing in the Snow", "DEX", [ "Fighter", "Tough" ], 4, 15, 5, 2, 99, 2000000, 130, 30, 50, 1920, 614, 293, 1 ],
- [ "Trafalgar Law Holy Night Gentleman", "DEX", [ "Slasher", "Freedom" ], 4, 12, 6, 3, 50, 392109, 182, 93, 43, 995, 489, 198, 1 ],
- [ "Trafalgar Law Holy Night Nobleman", "DEX", [ "Slasher", "Freedom" ], 5, 19, 4, 3, 99, 4000000, 945, 460, 151, 2003, 1030, 313, 1 ],
- [ "Jewelry Bonney Ravenous Spoiled Santa", "PSY", [ "Fighter", "Freedom" ], 4, 12, 5, 3, 50, 392109, 190, 50, 54, 1003, 403, 213, 1 ],
- [ "Jewelry Bonney Ravenous Greedy Santa", "PSY", [ "Fighter", "Freedom" ], 5, 19, 4, 3, 99, 4000000, 848, 354, 178, 2380, 769, 338, 1 ],
- [ "Coby, Navy HQ Petty Officer", "PSY", [ "Fighter", "Ambition" ], 4, 18, 5, 2, 50, 392109, 267, 98, 27, 1193, 561, 158, 1 ],
- [ "War Hero Coby, Navy HQ Petty Officer", "PSY", [ "Fighter", "Ambition" ], 5, 30, 4, 3, 99, 3000000, 1121, 500, 104, 2239, 1048, 261, 1 ],
- [ "Lady Alvida, Lovely Beauty", "QCK", [ "Striker", "Freedom" ], 4, 18, 5, 1, 50, 392109, 240, 92, 31, 1030, 534, 197, 1 ],
- [ "Lady Alvida, Peerless Beauty", "QCK", [ "Striker", "Freedom" ], 5, 30, 6, 3, 99, 3000000, 967, 466, 148, 2092, 1000, 307, 1 ],
- [ "Snowy World Nami", "QCK", [ "Striker", "Knowledge" ], 4, 15, 5, 2, 99, 2000000, 77, 33, 78, 1459, 674, 349, 1 ],
- [ "Boa Hancock, Captain of the Kuja Pirates", "PSY", [ "Shooter", "Freedom" ], 4, 30, 4, 2, 70, 1066998, 153, 138, 57, 1020, 633, 201, 1 ],
- [ "Empress Boa Hancock, Captain of the Kuja Pirates", "PSY", [ "Shooter", "Freedom" ], 5, 50, 4, 3, 99, 5000000, 943, 589, 161, 2055, 1378, 375, 1 ],
- [ "Nico Robin Cien Fleur Wing: The Storm", "INT", [ "Knowledge", "Slasher" ], 4, 15, 4, 2, 99, 2000000, 238, 203, 83, 1518, 1061, 290, 1 ],
- [ "Usopp Tabasco Star: The Storm", "DEX", "Shooter", 4, 15, 7, 2, 99, 2000000, 258, 152, 94, 1866, 704, 343, 1 ],
- [ "Tony Tony Chopper Heavy Gong: The Storm", "STR", [ "Tough", "Knowledge" ], 4, 15, 4, 2, 99, 2000000, 303, 168, 70, 2171, 900, 231, 1 ],
- [ "Donquixote Doflamingo, Donquixote Pirates", "QCK", [ "Ambition", "Knowledge" ], 5, 30, 6, 4, 70, 1066998, 390, 311, 77, 1510, 830, 258, 1 ],
- [ "Heavenly Yaksha Donquixote Doflamingo", "QCK", [ "Ambition", "Knowledge" ], 6, 55, 4, 4, 99, 5000000, 1446, 780, 230, 2800, 1530, 405, 1 ],
- [ "Sugar", "QCK", [ "Freedom", "Knowledge" ], 4, 18, 4, 3, 70, 1066998, 102, 55, 68, 952, 420, 321, 1 ],
- [ "Sugar, Donquixote Pirates", "QCK", [ "Freedom", "Knowledge" ], 5, 30, 5, 4, 99, 4000000, 896, 342, 274, 1905, 790, 532, 1 ],
- [ "Señor Pink", "PSY", [ "Freedom", "Fighter" ], 4, 18, 4, 3, 70, 1066998, 292, 103, 24, 1524, 657, 142, 1 ],
- [ "Señor Pink, Donquixote Pirates", "PSY", [ "Freedom", "Fighter" ], 5, 30, 4, 4, 99, 4000000, 1478, 600, 100, 2800, 1242, 241, 1 ],
- [ "Trebol", "INT", [ "Knowledge", "Ambition" ], 4, 18, 5, 3, 70, 1066998, 103, 150, 42, 941, 770, 201, 1 ],
- [ "Trebol, Donquixote Pirates", "INT", [ "Knowledge", "Ambition" ], 5, 30, 6, 4, 99, 4000000, 889, 721, 148, 1967, 1381, 334, 1 ],
- [ "Jora", "DEX", [ "Freedom", "Ambition" ], 4, 18, 4, 3, 70, 1066998, 236, 66, 41, 1463, 494, 204, 1 ],
- [ "Jora, Donquixote Pirates", "DEX", [ "Freedom", "Ambition" ], 5, 30, 4, 4, 99, 4000000, 1404, 443, 146, 2887, 880, 347, 1 ],
- [ "Lao-G", "STR", [ "Fighter", "Ambition" ], 4, 18, 5, 3, 70, 1066998, 117, 129, 37, 1025, 783, 181, [ 1.5, 0.7, 1.5 ] ],
- [ "Lao-G, Donquixote Pirates", "STR", [ "Fighter", "Ambition" ], 5, 30, 4, 4, 99, 4000000, 968, 721, 143, 2021, 1420, 293, [ 1.5, 0.7, 1.5 ] ],
- [ "Scratchmen Apoo, Captain of the On Air Pirates", "QCK", [ "Shooter", "Freedom" ], 4, 25, 5, 2, 70, 1066998, 646, 261, 83, 1247, 693, 220, 1 ],
- [ "Roar of the Sea Scratchmen Apoo, Captain of the On Air Pirates", "QCK", [ "Shooter", "Freedom" ], 5, 40, 4, 3, 99, 4000000, 1188, 639, 175, 2309, 1190, 351, 1 ],
- [ "Dorry, Giant Warrior Pirates", "INT", [ "Slasher", "Tough" ], 4, 18, 6, 1, 50, 392109, 261, 120, 20, 1420, 503, 90, 1 ],
- [ "Dorry the Blue Ogre", "INT", [ "Slasher", "Tough" ], 5, 30, 4, 3, 99, 3000000, 1366, 449, 64, 2640, 1000, 156, 1 ],
- [ "Jimbe, Shark Soldier", "PSY", [ "Fighter", "Tough" ], 4, 20, 4, 2, 99, 3000000, 84, 34, 29, 1990, 1020, 298, 1 ],
- [ "Mr. 1, West Blue Swordsman", "STR", [ "Slasher", "Knowledge" ], 4, 17, 6, 2, 99, 2000000, 45, 24, 19, 2024, 1044, 118, 1.5 ],
- [ "Buggy, Cheerfully Crazy", "QCK", [ "Ambition", "Freedom" ], 4, 17, 5, 2, 99, 2000000, 32, 19, 30, 1790, 694, 285, 1.5 ],
- [ "Hollow Hollow Ghost", "PSY", "Freedom", 2, 6, 4, 0, 35, 90778, 40, 20, 100, 150, 90, 190, 1 ],
- [ "Perona, Thriller Bark's Mysterious Four", "DEX", [ "Shooter", "Ambition" ], 3, 12, 4, 1, 50, 392109, 59, 31, 38, 797, 392, 271, 1 ],
- [ "Perona, Giant Ghost Princess", "DEX", [ "Shooter", "Ambition" ], 4, 20, 5, 3, 99, 3000000, 772, 381, 159, 1909, 960, 271, 1 ],
- [ "Doctor Hogback, Thriller Bark's Mysterious Four", "INT", [ "Fighter", "Knowledge" ], 3, 15, 5, 2, 70, 1066998, 148, 75, 30, 1492, 535, 247, 1 ],
- [ "Absalom of the Graveyard, Thriller Bark's Mysterious Four", "STR", [ "Shooter", "Tough" ], 3, 15, 6, 2, 70, 1066998, 156, 102, 13, 1803, 813, 96, 1 ],
- [ "Oars, Special Zombie", "STR", [ "Fighter", "Tough" ], 4, 50, 4, 2, 99, 4000000, 1500, 700, 0, 2700, 1440, -500, 1 ],
- [ "Gecko Moria, Shadow's Asgard", "INT", [ "Ambition", "Tough" ], 5, 30, 4, 3, 99, 4000000, 1000, 500, -500, 3180, 1430, -999, 1 ],
- [ "Brook, Gentleman Skeleton", "DEX", [ "Slasher", "Freedom" ], 3, 10, 5, 1, 50, 392109, 148, 96, 37, 1067, 491, 196, 1 ],
- [ "Brook, Straw Hat Pirates", "DEX", [ "Slasher", "Freedom" ], 4, 16, 6, 3, 99, 3000000, 1000, 442, 140, 1990, 847, 316, 1 ],
- [ "Sir Crocodile, Sand General", "STR", [ "Knowledge", "Ambition" ], 4, 20, 5, 2, 99, 3000000, 89, 41, 24, 2142, 1149, 208, 1 ],
- [ "Mr. 3, Makeshift Musician", "QCK", [ "Striker", "Knowledge" ], 4, 17, 4, 2, 99, 2000000, 24, 14, 33, 1703, 622, 312, 1.5 ],
- [ "Mr. 2 Bon Clay, Dubious Samurai", "INT", [ "Fighter", "Freedom" ], 4, 17, 4, 2, 99, 2000000, 42, 20, 22, 1810, 804, 235, 1.5 ],
- [ "Fresh Franky, Health Comes First", "DEX", [ "Shooter", "Freedom" ], 4, 25, 6, 2, 70, 1066998, 659, 244, 85, 1330, 659, 211, 1 ],
- [ "Cyborg Franky", "DEX", [ "Shooter", "Freedom" ], 5, 40, 8, 3, 99, 4000000, 1269, 618, 167, 2515, 1172, 323, 1 ],
- [ "Broggy, Giant Warrior Pirates", "PSY", [ "Slasher", "Tough" ], 4, 18, 5, 1, 50, 392109, 261, 120, 20, 1354, 539, 90, 1 ],
- [ "Broggy the Red Ogre", "PSY", [ "Slasher", "Tough" ], 5, 30, 4, 3, 99, 3000000, 1292, 463, 64, 2460, 1090, 156, 1 ],
- [ "Yokozuna", "STR", [ "Fighter", "Tough" ], 4, 20, 4, 2, 70, 1778330, 520, 170, 45, 1852, 700, 162, 1 ],
- [ "Roronoa Zoro, the Swordsman Who Wanders Kuraigana Island", "STR", [ "Slasher", "Ambition" ], 4, 18, 6, 3, 70, 1066998, 200, 142, 15, 1492, 750, 101, 1 ],
- [ "Roronoa Zoro, Pupil of the World's Strongest Swordsman", "STR", [ "Slasher", "Ambition" ], 5, 30, 5, 4, 99, 4000000, 1403, 687, 67, 2830, 1390, 190, 1 ],
- [ "Nico Robin, Tequila Wolf Inmate", "INT", [ "Knowledge", "Fighter" ], 4, 18, 4, 3, 70, 1066998, 131, 91, 43, 1021, 679, 217, 1 ],
- [ "Nico Robin, Light of the Revolution", "INT", [ "Knowledge", "Fighter" ], 5, 30, 4, 4, 99, 4000000, 946, 593, 178, 2011, 1156, 400, 1 ],
- [ "Tony Tony Chopper, Torino Kingdom's Peace Mediator", "PSY", [ "Fighter", "Knowledge" ], 4, 18, 6, 3, 70, 1066998, 187, 70, 42, 1300, 504, 220, 1 ],
- [ "Chopper Mask, the Hero Who Protects the World", "PSY", [ "Fighter", "Knowledge" ], 5, 30, 4, 4, 99, 4000000, 1234, 447, 170, 2500, 912, 404, 1 ],
- [ "Sanji, Kamabakka Queendom Fugitive", "DEX", [ "Tough", "Fighter" ], 4, 18, 4, 3, 70, 1066998, 212, 124, 20, 1575, 701, 127, 1 ],
- [ "Sanji, the Cook of Love Who Laid His Manliness on the Line", "DEX", [ "Tough", "Fighter" ], 5, 30, 4, 4, 99, 4000000, 1498, 634, 85, 2926, 1349, 201, 1 ],
- [ "Brook, Harahetternia's Demon Lord", "QCK", [ "Freedom", "Slasher" ], 4, 18, 6, 3, 70, 1066998, 159, 90, 39, 1281, 597, 201, 1 ],
- [ "Brook, BONE to be Wild!!!", "QCK", [ "Freedom", "Slasher" ], 5, 30, 4, 4, 99, 4000000, 1220, 531, 150, 2392, 1137, 352, 1 ],
- [ "Nico Robin, Bride of Ohara", "QCK", [ "Knowledge", "Fighter" ], 4, 12, 4, 2, 50, null, 72, 38, 43, 899, 409, 105, 1 ],
- [ "Beautiful and Talented Woman Wedding Robin", "QCK", [ "Knowledge", "Fighter" ], 5, 20, 4, 3, 99, null, 826, 327, 143, null, null, null, 0 ],
- [ "Marguerite", "QCK", "Shooter", 3, 13, 4, 1, 50, 392109, 80, 53, 37, 920, 577, 207, 1 ],
- [ "Marguerite, Warrior Defending Her Country", "QCK", "Shooter", 4, 20, 5, 2, 99, 3000000, 854, 516, 145, 1563, 1070, 335, 0 ],
- [ "Aphelandra", "QCK", "Slasher", 3, 15, 6, 1, 70, 1066998, 98, 42, 32, 2001, 604, 141, 1 ],
- [ "Sweet Pea", "STR", [ "Tough", "Shooter" ], 3, 15, 4, 2, 70, 1066998, 210, 157, 26, 1041, 1041, 155, 1 ]
-];
\ No newline at end of file
+ [ "Monkey D. Luffy", "STR", "Fighter", 2, 1, 5, 0, 5, 163, 42, 15, 8, 134, 68, 15, 1 ],
+ [ "Monkey D. Luffy Gum-Gum Pistol", "STR", "Fighter", 3, 4, 6, 0, 20, 26184, 130, 76, 14, 510, 249, 49, 0.7 ],
+ [ "Monkey D. Luffy Gum-Gum Bazooka", "STR", "Fighter", 4, 7, 6, 2, 35, 136167, 404, 227, 39, 975, 522, 105, 1 ],
+ [ "Monkey D. Luffy Gear 2", "STR", [ "Fighter", "Free Spirit" ], 5, 15, 8, 3, 99, 3000000, 902, 473, 74, 1772, 1313, 227, 1 ],
+ [ "Roronoa Zoro", "DEX", "Slasher", 3, 4, 6, 0, 20, 26184, 126, 75, 15, 488, 239, 56, 0.7 ],
+ [ "Roronoa Zoro Three Thousand Worlds", "DEX", [ "Slasher", "Driven" ], 4, 7, 6, 2, 35, 136167, 426, 222, 37, 899, 515, 120, 1 ],
+ [ "Roronoa Zoro Pound Phoenix", "DEX", [ "Slasher", "Driven" ], 4, 9, 4, 2, 50, 392109, 462, 258, 37, 1216, 694, 106, 1 ],
+ [ "Roronoa Zoro Ashura Ichibugin", "DEX", [ "Slasher", "Driven" ], 5, 15, 9, 3, 99, 3000000, 724, 667, 39, 2232, 1332, 144, 1 ],
+ [ "Nami", "INT", "Striker", 3, 4, 4, 0, 20, 26184, 72, 51, 32, 366, 201, 89, 0.7 ],
+ [ "Nami Tornado Tempo", "INT", [ "Striker", "Cerebral" ], 4, 7, 5, 2, 35, 136167, 336, 192, 62, 783, 453, 160, 1 ],
+ [ "Nami Mirage Tempo", "INT", [ "Striker", "Cerebral" ], 4, 9, 5, 2, 50, 392109, 348, 201, 75, 840, 543, 219, 1 ],
+ [ "Nami Thunderbolt Tempo", "INT", [ "Striker", "Cerebral" ], 5, 15, 4, 3, 99, 3000000, 494, 437, 154, 1262, 1088, 387, 1 ],
+ [ "Usopp", "PSY", "Shooter", 3, 4, 5, 0, 20, 26184, 50, 32, 42, 322, 127, 121, 0.7 ],
+ [ "Usopp Tabasco Star", "PSY", "Shooter", 4, 7, 6, 2, 35, 136167, 286, 148, 85, 627, 240, 257, 1 ],
+ [ "Usopp Golden Pound", "PSY", "Shooter", 4, 9, 6, 2, 50, 392109, 444, 237, 47, 1080, 648, 144, 1 ],
+ [ "Sogeking", "PSY", "Shooter", 5, 15, 7, 3, 99, 3000000, 638, 260, 189, 1506, 690, 479, 1 ],
+ [ "Sanji", "QCK", "Fighter", 3, 4, 6, 0, 20, 26184, 136, 64, 17, 506, 218, 60, 1 ],
+ [ "Sanji Plastic Surgery Shot", "QCK", [ "Fighter", "Powerhouse" ], 4, 7, 5, 2, 35, 136167, 486, 207, 32, 907, 496, 125, 1 ],
+ [ "Chef Sanji Hot Rock Stew", "QCK", [ "Fighter", "Powerhouse" ], 4, 9, 4, 2, 50, 392109, 494, 191, 54, 986, 500, 209, 1 ],
+ [ "Sanji Diable Jambe Flambe", "QCK", [ "Fighter", "Powerhouse" ], 5, 15, 4, 3, 99, 3000000, 406, 418, 175, 2206, 1030, 249, 1 ],
+ [ "Tony Tony Chopper", "PSY", "Fighter", 3, 4, 5, 0, 20, 26184, 52, 40, 39, 294, 144, 120, 1 ],
+ [ "Tony Tony Chopper Heavy Point", "PSY", [ "Fighter", "Free Spirit" ], 4, 9, 5, 2, 50, 392109, 306, 213, 78, 754, 622, 207, 1 ],
+ [ "Tony Tony Chopper Brain Point", "INT", [ "Fighter", "Cerebral" ], 4, 9, 5, 2, 50, 392109, 258, 198, 91, 520, 454, 302, 1 ],
+ [ "Tony Tony Chopper Arm Point", "STR", [ "Fighter", "Powerhouse" ], 4, 9, 4, 2, 50, 392109, 356, 260, 54, 868, 820, 122, 1 ],
+ [ "Tony Tony Chopper Horn Point", "QCK", "Fighter", 4, 9, 6, 2, 50, 392109, 414, 306, 29, 958, 856, 95, 1 ],
+ [ "Tony Tony Chopper Guard Point", "DEX", [ "Fighter", "Powerhouse" ], 4, 9, 6, 2, 50, 392109, 394, 178, 75, 1320, 408, 184, 1 ],
+ [ "Higuma", "QCK", "Slasher", 2, 8, 5, 0, 35, 45389, 132, 87, 29, 692, 323, 99, 1 ],
+ [ "Master of the Near Sea", "STR", "Fighter", 2, 20, 5, 0, 35, 90778, 500, 350, 80, 550, 400, 100, 1.5 ],
+ [ "Iron-Mace Alvida", "STR", [ "Striker", "Powerhouse" ], 3, 10, 5, 0, 50, 392109, 184, 154, 5, 1412, 755, 61, 1 ],
+ [ "Iron-Mace Alvida Smooth-Smooth Fruit", "STR", [ "Striker", "Free Spirit" ], 4, 15, 6, 1, 99, 3000000, 766, 625, 135, 1668, 999, 369, 1 ],
+ [ "Coby", "PSY", "Fighter", 2, 4, 5, 0, 25, 50439, 70, 25, 32, 166, 70, 120, 1 ],
+ [ "Cabin Boy Coby", "PSY", [ "Fighter", "Driven" ], 3, 9, 5, 3, 50, 392109, 130, 49, 100, 524, 155, 216, 1 ],
+ [ "Helmeppo", "INT", "Shooter", 2, 4, 5, 0, 25, 50439, 62, 62, 21, 308, 242, 39, 1 ],
+ [ "Cabin Boy Helmeppo", "INT", [ "Fighter", "Driven" ], 3, 8, 5, 3, 50, 392109, 234, 210, 29, 770, 485, 130, 1 ],
+ [ "Axe-Hand Morgan", "STR", [ "Slasher", "Driven" ], 2, 9, 5, 0, 50, 261406, 133, 100, 5, 1554, 747, 35, 1 ],
+ [ "Mohji & Richie", "PSY", [ "Fighter", "Driven" ], 2, 9, 6, 1, 50, 261406, 150, 135, 10, 1072, 559, 55, 1 ],
+ [ "Cabaji the Acrobat", "DEX", [ "Slasher", "Driven" ], 2, 9, 6, 1, 50, 261406, 134, 77, 32, 824, 458, 130, 1 ],
+ [ "Buggy", "INT", [ "Slasher", "Driven" ], 3, 8, 5, 0, 35, 136167, 200, 107, 22, 818, 446, 85, 1 ],
+ [ "Buggy the Clown", "INT", [ "Slasher", "Driven" ], 4, 11, 5, 2, 70, 1066998, 714, 342, 58, 1666, 757, 135, 1 ],
+ [ "Gaimon", "PSY", "Shooter", 2, 3, 6, 0, 50, 261406, 133, 5, 14, 1303, 85, 121, 1.5 ],
+ [ "Siam", "INT", "Slasher", 2, 9, 6, 0, 50, 261406, 112, 112, 24, 724, 499, 133, 1 ],
+ [ "Butchie", "STR", [ "Slasher", "Powerhouse" ], 2, 9, 6, 0, 50, 261406, 132, 117, 19, 872, 530, 98, 1 ],
+ [ "One-Two Django", "DEX", "Slasher", 2, 8, 5, 0, 35, 90778, 118, 64, 39, 556, 271, 139, 1 ],
+ [ "Dancing Django", "DEX", "Slasher", 3, 11, 5, 2, 70, 1066998, 476, 218, 98, 1155, 555, 228, 1 ],
+ [ "Captain Kuro", "QCK", [ "Slasher", "Cerebral" ], 3, 10, 7, 0, 70, 1066998, 144, 111, 31, 1102, 640, 151, 1 ],
+ [ "Kuro of a Hundred Plans", "QCK", [ "Slasher", "Cerebral" ], 4, 15, 8, 2, 99, 3000000, 978, 558, 122, 2074, 1057, 282, 1 ],
+ [ "Yosaku", "STR", "Slasher", 2, 5, 6, 1, 40, 134812, 100, 43, 19, 439, 439, 99, 1.5 ],
+ [ "Johnny", "QCK", "Slasher", 2, 7, 6, 1, 40, 134812, 100, 42, 20, 421, 421, 108, 1.5 ],
+ [ "Iron Fist Fullbody", "STR", "Fighter", 2, 3, 6, 0, 15, 7532, 103, 100, 49, 153, 160, 84, 0.7 ],
+ [ "Patty", "STR", "Slasher", 2, 9, 5, 0, 50, 261406, 140, 65, 35, 872, 314, 170, 1 ],
+ [ "Carne", "QCK", "Slasher", 2, 9, 5, 0, 50, 261406, 94, 91, 34, 650, 428, 169, 1 ],
+ [ "Chef Zeff", "DEX", "Fighter", 3, 10, 5, 1, 50, 392109, 142, 118, 29, 908, 698, 164, 1.5 ],
+ [ "Gin", "QCK", "Shooter", 2, 8, 5, 0, 35, 90778, 148, 94, 24, 618, 363, 98, 1 ],
+ [ "Gin the Man-Demon", "QCK", "Striker", 3, 11, 6, 1, 70, 1066998, 558, 300, 57, 1152, 792, 209, 1 ],
+ [ "Pearl", "STR", [ "Striker", "Powerhouse" ], 2, 8, 5, 0, 35, 90778, 198, 84, 19, 956, 296, 64, 1 ],
+ [ "Fire Pearl", "STR", [ "Striker", "Powerhouse" ], 3, 11, 4, 1, 70, 1066998, 820, 226, 38, 1904, 656, 129, 1 ],
+ [ "Don Krieg", "INT", [ "Shooter", "Driven" ], 3, 10, 6, 0, 50, 392109, 214, 97, 24, 1454, 632, 95, 1 ],
+ [ "Don Krieg Poison Gas Bomb MH5", "INT", [ "Shooter", "Driven" ], 4, 15, 4, 2, 99, 3000000, 1276, 553, 74, 2734, 1057, 172, 1 ],
+ [ "Nezumi", "INT", [ "Shooter", "Cerebral" ], 2, 6, 6, 0, 30, 28779, 55, 55, 55, 150, 130, 204, 0.7 ],
+ [ "Momoo", "STR", "Fighter", 3, 18, 4, 0, 50, 392109, 600, 400, 120, 1000, 500, 150, 1.5 ],
+ [ "Choo", "INT", [ "Shooter", "Powerhouse" ], 3, 9, 5, 1, 50, 392109, 110, 71, 49, 768, 492, 256, 1 ],
+ [ "Kuroobi", "STR", [ "Fighter", "Powerhouse" ], 3, 9, 4, 1, 50, 392109, 160, 157, 10, 1200, 759, 76, 1 ],
+ [ "Hatchan", "DEX", [ "Slasher", "Powerhouse" ], 3, 8, 8, 1, 35, 136167, 88, 88, 47, 588, 387, 143, 1 ],
+ [ "Six-Sword Hachi", "DEX", [ "Slasher", "Powerhouse" ], 4, 11, 8, 2, 70, 1066998, 542, 338, 88, 986, 638, 288, 1 ],
+ [ "Arlong", "STR", [ "Slasher", "Powerhouse" ], 3, 10, 5, 0, 50, 392109, 104, 152, 24, 936, 930, 82, 1 ],
+ [ "Enraged Arlong Shark On Tooth", "STR", [ "Slasher", "Powerhouse" ], 4, 15, 4, 1, 99, 3000000, 832, 832, 55, 1974, 1491, 154, 1 ],
+ [ "Tashigi", "QCK", [ "Slasher", "Cerebral" ], 3, 9, 5, 1, 50, 392109, 102, 102, 41, 690, 483, 272, 1 ],
+ [ "Tashigi Navy HQ Ensign", "QCK", [ "Slasher", "Cerebral" ], 4, 15, 5, 2, 99, 3000000, 632, 431, 222, 1434, 921, 434, 1.5 ],
+ [ "Smoker", "DEX", [ "Striker", "Driven" ], 3, 9, 5, 1, 50, 392109, 110, 113, 36, 944, 575, 199, 1 ],
+ [ "Smoker the White Hunter", "DEX", [ "Striker", "Driven" ], 4, 15, 5, 2, 99, 3000000, 872, 515, 154, 1736, 1070, 334, 1.5 ],
+ [ "Miss Wednesday", "PSY", "Slasher", 3, 9, 5, 0, 35, 136167, 22, 10, 74, 190, 127, 216, 0.7 ],
+ [ "Nefertari Vivi", "PSY", "Slasher", 4, 13, 5, 1, 70, 1066998, 138, 102, 183, 682, 454, 350, 1 ],
+ [ "Princess Vivi", "PSY", [ "Slasher", "Free Spirit" ], 5, 20, 6, 3, 99, 4000000, 602, 414, 280, 908, 747, 477, 1.5 ],
+ [ "Portgas D. Ace", "QCK", [ "Fighter", "Free Spirit" ], 4, 13, 6, 3, 70, 1066998, 252, 144, 40, 1802, 545, 199, 1.5 ],
+ [ "Portgas D. Ace Flame Mirror", "QCK", [ "Fighter", "Free Spirit" ], 5, 20, 6, 4, 99, 4000000, 1728, 501, 140, 2886, 1020, 279, 1.5 ],
+ [ "Shanks", "PSY", [ "Slasher", "Cerebral" ], 4, 13, 5, 3, 70, 1066998, 186, 159, 46, 1010, 725, 271, 1.5 ],
+ [ "Red-Haired Shanks", "PSY", [ "Slasher", "Cerebral" ], 5, 20, 4, 4, 99, 4000000, 898, 670, 222, 2118, 990, 417, 1 ],
+ [ "Red Robber Penguin", "STR", "Evolver", 1, 1, 5, 0, 1, 0, 20, 10, 20, 20, 10, 20, 1 ],
+ [ "Blue Robber Penguin", "QCK", "Evolver", 1, 1, 5, 0, 1, 0, 20, 10, 20, 20, 10, 20, 1 ],
+ [ "Green Robber Penguin", "DEX", "Evolver", 1, 1, 5, 0, 1, 0, 20, 10, 20, 20, 10, 20, 1 ],
+ [ "Yellow Robber Penguin", "PSY", "Evolver", 1, 1, 5, 0, 1, 0, 20, 10, 20, 20, 10, 20, 1 ],
+ [ "Black Robber Penguin", "INT", "Evolver", 1, 1, 5, 0, 1, 0, 20, 10, 20, 20, 10, 20, 1 ],
+ [ "Rainbow Robber Penguin", "INT", "Evolver", 3, 1, 5, 0, 1, 0, 20, 20, 50, 20, 20, 50, 1 ],
+ [ "Red Pirate Penguin", "STR", "Evolver", 2, 3, 6, 0, 1, 0, 30, 20, 180, 30, 20, 180, 1 ],
+ [ "Blue Pirate Penguin", "QCK", "Evolver", 2, 3, 6, 0, 1, 0, 30, 20, 180, 30, 20, 180, 1 ],
+ [ "Green Pirate Penguin", "DEX", "Evolver", 2, 3, 6, 0, 1, 0, 30, 20, 180, 30, 20, 180, 1 ],
+ [ "Yellow Pirate Penguin", "PSY", "Evolver", 2, 3, 6, 0, 1, 0, 30, 20, 180, 30, 20, 180, 1 ],
+ [ "Black Pirate Penguin", "INT", "Evolver", 2, 3, 6, 0, 1, 0, 30, 20, 180, 30, 20, 180, 1 ],
+ [ "Red Hermit Crab", "STR", "Evolver", 1, 1, 5, 0, 1, 0, 50, 180, 0, 50, 180, 0, 1 ],
+ [ "Blue Hermit Crab", "QCK", "Evolver", 1, 1, 5, 0, 1, 0, 50, 180, 0, 50, 180, 0, 1 ],
+ [ "Green Hermit Crab", "DEX", "Evolver", 1, 1, 5, 0, 1, 0, 50, 180, 0, 50, 180, 0, 1 ],
+ [ "Yellow Hermit Crab", "PSY", "Evolver", 1, 1, 5, 0, 1, 0, 50, 180, 0, 50, 180, 0, 1 ],
+ [ "Black Hermit Crab", "INT", "Evolver", 1, 1, 5, 0, 1, 0, 50, 180, 0, 50, 180, 0, 1 ],
+ [ "Rainbow Hermit Crab", "INT", "Evolver", 2, 3, 5, 0, 1, 0, 50, 280, 0, 50, 150, 0, 1 ],
+ [ "Red Armored Crab", "STR", "Evolver", 2, 2, 5, 0, 1, 0, 50, 300, 0, 50, 300, 0, 1 ],
+ [ "Blue Armored Crab", "QCK", "Evolver", 2, 2, 5, 0, 1, 0, 50, 300, 0, 50, 300, 0, 1 ],
+ [ "Green Armored Crab", "DEX", "Evolver", 2, 2, 5, 0, 1, 0, 50, 300, 0, 50, 300, 0, 1 ],
+ [ "Yellow Armored Crab", "PSY", "Evolver", 2, 2, 5, 0, 1, 0, 50, 300, 0, 50, 300, 0, 1 ],
+ [ "Black Armored Crab", "INT", "Evolver", 2, 2, 5, 0, 1, 0, 50, 300, 0, 50, 300, 0, 1 ],
+ [ "Red Striped Dragon", "STR", "Evolver", 3, 12, 4, 0, 1, 0, 500, 500, 50, 500, 500, 50, 1 ],
+ [ "Blue Striped Dragon", "QCK", "Evolver", 3, 12, 4, 0, 1, 0, 500, 500, 50, 500, 500, 50, 1 ],
+ [ "Green Striped Dragon", "DEX", "Evolver", 3, 12, 4, 0, 1, 0, 500, 500, 50, 500, 500, 50, 1 ],
+ [ "Yellow Striped Dragon", "PSY", "Evolver", 3, 12, 4, 0, 1, 0, 500, 500, 50, 500, 500, 50, 1 ],
+ [ "Black Striped Dragon", "INT", "Evolver", 3, 12, 4, 0, 1, 0, 500, 500, 50, 500, 500, 50, 1 ],
+ [ "Red Treasure Turtle", "STR", "Booster", 3, 1, 6, 0, 1, 0, 100, 10, 10, 100, 10, 10, 1 ],
+ [ "Blue Treasure Turtle", "QCK", "Booster", 3, 1, 6, 0, 1, 0, 100, 10, 10, 100, 10, 10, 1 ],
+ [ "Green Treasure Turtle", "DEX", "Booster", 3, 1, 6, 0, 1, 0, 100, 10, 10, 100, 10, 10, 1 ],
+ [ "Yellow Treasure Turtle", "PSY", "Booster", 3, 1, 6, 0, 1, 0, 100, 10, 10, 100, 10, 10, 1 ],
+ [ "Black Treasure Turtle", "INT", "Booster", 3, 1, 6, 0, 1, 0, 100, 10, 10, 100, 10, 10, 1 ],
+ [ "Red Daimyo Turtle", "STR", "Booster", 4, 2, 5, 0, 1, 0, 500, 20, 20, 500, 20, 20, 1 ],
+ [ "Blue Daimyo Turtle", "QCK", "Booster", 4, 2, 5, 0, 1, 0, 500, 20, 20, 500, 20, 20, 1 ],
+ [ "Green Daimyo Turtle", "DEX", "Booster", 4, 2, 5, 0, 1, 0, 500, 20, 20, 500, 20, 20, 1 ],
+ [ "Yellow Daimyo Turtle", "PSY", "Booster", 4, 2, 5, 0, 1, 0, 500, 20, 20, 500, 20, 20, 1 ],
+ [ "Black Daimyo Turtle", "INT", "Booster", 4, 2, 5, 0, 1, 0, 500, 20, 20, 500, 20, 20, 1 ],
+ [ "Sea Pony", "PSY", "Evolver", 1, 2, 5, 0, 1, 0, 20, 20, 20, 20, 20, 10, 1 ],
+ [ "Sea Colt", "PSY", "Evolver", 2, 4, 5, 0, 1, 0, 50, 50, 50, 50, 50, 20, 1 ],
+ [ "Sea Horse", "PSY", "Evolver", 3, 6, 4, 0, 1, 0, 100, 100, 100, 100, 100, 40, 1 ],
+ [ "Sea Stallion", "PSY", "Evolver", 4, 8, 4, 0, 1, 0, 150, 150, 150, 150, 150, 60, 1 ],
+ [ "Sword Bandit", "DEX", "Slasher", 1, 1, 5, 0, 20, 8728, 77, 41, 9, 348, 140, 41, 1 ],
+ [ "Pistol Bandit", "STR", "Shooter", 1, 1, 5, 0, 20, 8728, 17, 14, 28, 105, 57, 104, 1 ],
+ [ "Fighter Group Cabin Boy Red Pirates", "STR", "Fighter", 1, 2, 6, 0, 10, 2330, 79, 54, 6, 327, 141, 17, 1 ],
+ [ "Fighter Group Cabin Boy Blue Pirates", "QCK", "Fighter", 1, 2, 6, 0, 10, 2330, 85, 51, 6, 349, 133, 16, 1 ],
+ [ "Fighter Group Cabin Boy Green Pirates", "DEX", "Fighter", 1, 2, 6, 0, 10, 2330, 85, 54, 5, 357, 138, 13, 1 ],
+ [ "Fighter Group Cabin Boy Yellow Pirates", "PSY", "Fighter", 1, 2, 6, 0, 10, 2330, 77, 49, 8, 315, 126, 24, 1 ],
+ [ "Fighter Group Cabin Boy Black Pirates", "INT", "Fighter", 1, 2, 6, 0, 10, 2330, 83, 61, 3, 345, 153, 10, 1 ],
+ [ "Slasher Group Cabin Boy Red Pirates", "STR", "Slasher", 1, 3, 6, 0, 15, 7532, 69, 47, 10, 333, 134, 28, 1 ],
+ [ "Slasher Group Cabin Boy Blue Pirates", "QCK", "Slasher", 1, 3, 6, 0, 15, 7532, 75, 41, 11, 347, 118, 31, 1 ],
+ [ "Slasher Group Cabin Boy Green Pirates", "DEX", "Slasher", 1, 3, 6, 0, 15, 7532, 69, 44, 11, 341, 115, 33, 1 ],
+ [ "Slasher Group Cabin Boy Yellow Pirates", "PSY", "Slasher", 1, 3, 6, 0, 15, 7532, 63, 38, 14, 325, 114, 35, 1 ],
+ [ "Slasher Group Cabin Boy Black Pirates", "INT", "Slasher", 1, 3, 6, 0, 15, 7532, 65, 49, 10, 341, 136, 25, 1 ],
+ [ "Striker Group Cabin Boy Red Pirates", "STR", "Striker", 1, 1, 6, 0, 10, 2330, 77, 49, 12, 281, 114, 27, 0.7 ],
+ [ "Striker Group Cabin Boy Blue Pirates", "QCK", "Striker", 1, 1, 6, 0, 10, 2330, 79, 45, 13, 281, 105, 30, 0.7 ],
+ [ "Striker Group Cabin Boy Green Pirates", "DEX", "Striker", 1, 1, 6, 0, 10, 2330, 73, 45, 14, 255, 103, 35, 0.7 ],
+ [ "Striker Group Cabin Boy Yellow Pirates", "PSY", "Striker", 1, 1, 6, 0, 10, 2330, 67, 42, 16, 253, 101, 36, 0.7 ],
+ [ "Striker Group Cabin Boy Black Pirates", "INT", "Striker", 1, 1, 6, 0, 10, 2330, 73, 57, 10, 261, 127, 26, 0.7 ],
+ [ "Shooter Group Cabin Boy Red Pirates", "STR", "Shooter", 1, 3, 6, 0, 10, 2330, 41, 19, 24, 129, 57, 78, 0.7 ],
+ [ "Shooter Group Cabin Boy Blue Pirates", "QCK", "Shooter", 1, 3, 6, 0, 10, 2330, 39, 17, 25, 125, 53, 80, 0.7 ],
+ [ "Shooter Group Cabin Boy Green Pirates", "DEX", "Shooter", 1, 3, 6, 0, 10, 2330, 37, 15, 26, 123, 51, 81, 0.7 ],
+ [ "Shooter Group Cabin Boy Yellow Pirates", "PSY", "Shooter", 1, 3, 6, 0, 10, 2330, 35, 13, 27, 107, 47, 85, 0.7 ],
+ [ "Shooter Group Cabin Boy Black Pirates", "INT", "Shooter", 1, 3, 6, 0, 10, 2330, 41, 22, 23, 139, 64, 74, 0.7 ],
+ [ "Cannoneer Cabin Boy", "INT", "Shooter", 1, 4, 5, 0, 20, 17456, 98, 80, 1, 523, 280, 3, 1 ],
+ [ "Fighter Group Crew Red Pirates", "STR", "Fighter", 2, 6, 5, 0, 30, 57558, 200, 103, 10, 707, 428, 29, 1 ],
+ [ "Fighter Group Crew Blue Pirates", "QCK", "Fighter", 2, 6, 5, 0, 30, 57558, 220, 93, 10, 727, 412, 31, 1 ],
+ [ "Fighter Group Crew Green Pirates", "DEX", "Fighter", 2, 6, 5, 0, 30, 57558, 212, 100, 9, 717, 417, 31, 1 ],
+ [ "Fighter Group Crew Yellow Pirates", "PSY", "Fighter", 2, 6, 5, 0, 30, 57558, 190, 90, 16, 695, 398, 41, 1 ],
+ [ "Fighter Group Crew Black Pirates", "INT", "Fighter", 2, 6, 5, 0, 30, 57558, 202, 108, 8, 695, 440, 27, 1 ],
+ [ "Slasher Group Crew Red Pirates", "STR", "Slasher", 2, 7, 5, 0, 35, 90778, 178, 90, 19, 645, 406, 79, 1 ],
+ [ "Slasher Group Crew Blue Pirates", "QCK", "Slasher", 2, 7, 5, 0, 35, 90778, 184, 75, 23, 659, 372, 88, 1 ],
+ [ "Slasher Group Crew Green Pirates", "DEX", "Slasher", 2, 7, 5, 0, 35, 90778, 162, 83, 24, 665, 375, 86, 1 ],
+ [ "Slasher Group Crew Yellow Pirates", "PSY", "Slasher", 2, 7, 5, 0, 35, 90778, 152, 73, 29, 629, 369, 94, 1 ],
+ [ "Slasher Group Crew Black Pirates", "INT", "Slasher", 2, 7, 5, 0, 35, 90778, 176, 100, 16, 695, 384, 78, 1 ],
+ [ "Striker Group Crew Red Pirates", "STR", "Striker", 2, 5, 5, 0, 25, 33626, 174, 85, 21, 473, 320, 71, 0.7 ],
+ [ "Striker Group Crew Blue Pirates", "QCK", "Striker", 2, 5, 5, 0, 25, 33626, 190, 74, 22, 483, 309, 73, 0.7 ],
+ [ "Striker Group Crew Green Pirates", "DEX", "Striker", 2, 5, 5, 0, 25, 33626, 176, 75, 24, 429, 318, 79, 0.7 ],
+ [ "Striker Group Crew Yellow Pirates", "PSY", "Striker", 2, 5, 5, 0, 25, 33626, 182, 69, 25, 439, 289, 87, 0.7 ],
+ [ "Striker Group Crew Black Pirates", "INT", "Striker", 2, 5, 5, 0, 25, 33626, 188, 87, 18, 465, 342, 65, 0.7 ],
+ [ "Shooter Group Crew Red Pirates", "STR", "Shooter", 2, 7, 5, 0, 30, 57558, 75, 23, 60, 289, 118, 202, 1 ],
+ [ "Shooter Group Crew Blue Pirates", "QCK", "Shooter", 2, 7, 5, 0, 30, 57558, 75, 20, 61, 299, 110, 203, 1 ],
+ [ "Shooter Group Crew Green Pirates", "DEX", "Shooter", 2, 7, 5, 0, 30, 57558, 65, 19, 63, 281, 113, 205, 1 ],
+ [ "Shooter Group Crew Yellow Pirates", "PSY", "Shooter", 2, 7, 5, 0, 30, 57558, 55, 15, 66, 227, 98, 219, 1 ],
+ [ "Shooter Group Crew Black Pirates", "INT", "Shooter", 2, 7, 5, 0, 30, 57558, 75, 29, 58, 299, 155, 198, 1 ],
+ [ "Cannoneer Skilled", "INT", "Shooter", 2, 12, 5, 0, 50, 261406, 203, 105, 3, 1350, 550, 30, 1 ],
+ [ "Bodyguard, ‘Sunglasses'", "DEX", "Shooter", 1, 4, 5, 0, 20, 8728, 115, 50, 30, 370, 180, 90, 0.7 ],
+ [ "Bearded Bodyguard", "QCK", "Shooter", 1, 4, 5, 0, 20, 8728, 105, 70, 25, 370, 210, 80, 0.7 ],
+ [ "Knuckle Punk Black Cat Pirates", "STR", "Fighter", 2, 6, 6, 0, 25, 33626, 30, 129, 2, 267, 612, 3, 1 ],
+ [ "Saber Punk Black Cat Pirates", "DEX", "Slasher", 2, 6, 5, 0, 25, 33626, 42, 120, 3, 295, 592, 5, 1 ],
+ [ "Halberd Punk Black Cat Pirates", "QCK", "Striker", 2, 6, 5, 0, 25, 33626, 32, 122, 4, 277, 598, 6, 1 ],
+ [ "Pistol Punk Black Cat Pirates", "PSY", "Shooter", 2, 6, 5, 0, 25, 33626, 30, 117, 6, 269, 569, 17, 1 ],
+ [ "Cannoneer Punk Black Cat Pirates", "INT", "Shooter", 2, 6, 5, 0, 25, 33626, 26, 137, 0, 267, 621, 0, 1 ],
+ [ "Fighter Group Leader", "STR", "Fighter", 3, 7, 6, 1, 40, 202218, 208, 97, 23, 982, 457, 104, 1 ],
+ [ "Slasher Group Leader", "DEX", "Slasher", 3, 7, 5, 1, 45, 286773, 166, 82, 35, 922, 397, 184, 1 ],
+ [ "Striker Group Leader", "QCK", "Striker", 3, 7, 5, 1, 35, 136167, 200, 80, 30, 828, 291, 135, 1 ],
+ [ "Shooter Group Leader", "PSY", "Shooter", 3, 7, 5, 1, 40, 202218, 128, 41, 55, 508, 253, 251, 1 ],
+ [ "Assassin Master", "INT", "Shooter", 3, 7, 5, 1, 50, 392109, 224, 119, 13, 1532, 557, 79, 1 ],
+ [ "Karate Fishman Arlong crewmember", "STR", "Fighter", 2, 7, 6, 0, 30, 57558, 70, 49, 24, 547, 258, 116, 0.7 ],
+ [ "Sword Fishman Arlong crewmember", "DEX", "Slasher", 2, 7, 5, 0, 30, 57558, 92, 44, 22, 585, 245, 114, 0.7 ],
+ [ "Spear Fishman Arlong crewmember", "QCK", "Striker", 2, 7, 5, 0, 30, 57558, 82, 46, 23, 553, 246, 119, 0.7 ],
+ [ "Pistol Fishman Arlong crewmember", "PSY", "Shooter", 2, 7, 5, 0, 30, 57558, 72, 36, 28, 523, 216, 134, 0.7 ],
+ [ "Knuckle Apprentice Navy", "STR", "Fighter", 1, 3, 6, 0, 15, 7532, 105, 66, 6, 317, 203, 17, 1 ],
+ [ "Saber Apprentice Navy", "DEX", "Slasher", 1, 4, 6, 0, 20, 17456, 45, 75, 13, 293, 194, 44, 1 ],
+ [ "Halberd Apprentice Navy", "QCK", "Striker", 1, 3, 6, 0, 15, 7532, 73, 70, 10, 305, 158, 34, 1 ],
+ [ "Pistol Apprentice Navy", "PSY", "Shooter", 1, 3, 6, 0, 15, 7532, 49, 16, 32, 105, 72, 96, 1 ],
+ [ "Cannoneer Apprentice Navy", "INT", "Shooter", 1, 5, 5, 0, 25, 33626, 93, 90, 0, 400, 350, 1, 1 ],
+ [ "Knuckle Seaman Navy", "STR", "Fighter", 2, 5, 5, 0, 25, 33626, 139, 96, 17, 523, 289, 43, 1 ],
+ [ "Saber Seaman Navy", "DEX", "Slasher", 2, 6, 5, 0, 35, 90778, 75, 101, 26, 512, 322, 84, 1 ],
+ [ "Halberd Seaman Navy", "QCK", "Striker", 2, 5, 5, 0, 25, 33626, 105, 92, 24, 407, 290, 62, 1 ],
+ [ "Pistol Seaman Navy", "PSY", "Shooter", 2, 6, 5, 0, 25, 33626, 75, 23, 52, 139, 100, 170, 1 ],
+ [ "Cannoneer Seaman Navy", "INT", "Shooter", 2, 10, 5, 0, 40, 134812, 143, 140, 1, 620, 660, 2, 1.5 ],
+ [ "Red Elder Turtle", "STR", "Booster", 5, 4, 4, 0, 1, 0, 1000, 30, 30, 1000, 30, 30, 1 ],
+ [ "Blue Elder Turtle", "QCK", "Booster", 5, 4, 4, 0, 1, 0, 1000, 30, 30, 1000, 30, 30, 1 ],
+ [ "Green Elder Turtle", "DEX", "Booster", 5, 4, 4, 0, 1, 0, 1000, 30, 30, 1000, 30, 30, 1 ],
+ [ "Yellow Elder Turtle", "PSY", "Booster", 5, 4, 4, 0, 1, 0, 1000, 30, 30, 1000, 30, 30, 1 ],
+ [ "Black Elder Turtle", "INT", "Booster", 5, 4, 4, 0, 1, 0, 1000, 30, 30, 1000, 30, 30, 1 ],
+ [ "Knuckle Ensign Navy HQ", "STR", "Fighter", 3, 9, 6, 1, 50, 392109, 474, 237, 30, 898, 490, 107, 1 ],
+ [ "Saber Ensign Navy HQ", "DEX", "Slasher", 3, 9, 6, 1, 50, 392109, 424, 229, 51, 800, 467, 131, 1 ],
+ [ "Halberd Ensign Navy HQ", "QCK", "Striker", 3, 9, 6, 1, 50, 392109, 400, 220, 48, 916, 442, 120, 1 ],
+ [ "Pistol Ensign Navy HQ", "PSY", "Shooter", 3, 9, 6, 1, 50, 392109, 121, 70, 145, 275, 191, 320, 1 ],
+ [ "Bazooka Ensign Navy HQ", "INT", "Shooter", 3, 12, 5, 1, 70, 1066998, 480, 460, 1, 1300, 850, 3, 1 ],
+ [ "Mr. 5 Nez-Palm Cannon", "STR", "Fighter", 3, 11, 5, 1, 35, 136167, 82, 142, 31, 752, 602, 124, 1 ],
+ [ "Mr. 5 Breeze Breath Bomb", "STR", "Shooter", 4, 15, 5, 2, 70, 1066998, 688, 520, 92, 1120, 943, 180, 1 ],
+ [ "Miss Valentine", "QCK", "Fighter", 3, 11, 5, 1, 35, 136167, 120, 114, 34, 860, 488, 144, 1 ],
+ [ "Miss Valentine 10,000 Kilo Guillotine", "QCK", "Fighter", 4, 15, 5, 2, 70, 1066998, 804, 426, 104, 1324, 787, 198, 1 ],
+ [ "Mr. 3", "INT", [ "Slasher", "Cerebral" ], 3, 11, 4, 1, 35, 136167, 196, 100, 26, 926, 515, 120, 1 ],
+ [ "Mr. 3 Extra Special Candelabra", "INT", [ "Slasher", "Cerebral" ], 4, 15, 4, 2, 70, 1066998, 600, 449, 120, 1394, 818, 176, 1 ],
+ [ "Miss Goldenweek", "DEX", [ "Striker", "Free Spirit" ], 3, 11, 5, 1, 35, 136167, 51, 51, 81, 301, 301, 305, 1 ],
+ [ "Miss Goldenweek Colors Trap: Calming Green", "DEX", [ "Striker", "Free Spirit" ], 4, 15, 5, 2, 70, 1066998, 264, 264, 268, 412, 390, 530, 1 ],
+ [ "Mr. 2 Bon Clay", "PSY", [ "Fighter", "Free Spirit" ], 3, 11, 5, 1, 35, 136167, 94, 93, 46, 690, 403, 201, 1 ],
+ [ "Mr. 2 Bon Clay Bombardier Arabesque", "PSY", [ "Fighter", "Free Spirit" ], 4, 15, 4, 2, 70, 1066998, 599, 348, 169, 935, 709, 302, 1 ],
+ [ "Miss All Sunday Baroque Works VP", "INT", [ "Fighter", "Cerebral" ], 4, 15, 6, 1, 50, 392109, 368, 128, 96, 772, 478, 252, 0.7 ],
+ [ "Nico Robin", "INT", [ "Fighter", "Cerebral" ], 5, 20, 6, 2, 99, 3000000, 736, 430, 214, 1865, 1055, 338, 1 ],
+ [ "Mr. 9", "QCK", "Striker", 2, 10, 5, 0, 35, 90778, 106, 88, 33, 490, 313, 136, 0.7 ],
+ [ "Mr. 9 Hot Blooded Bat", "QCK", "Striker", 3, 13, 5, 3, 70, 1066998, 408, 249, 99, 1011, 590, 240, 0.7 ],
+ [ "Laboon", "STR", [ "Fighter", "Powerhouse" ], 3, 18, 5, 1, 50, 392109, 650, 300, 150, 1100, 500, 200, 1 ],
+ [ "Laboon (Luffy's drawing)", "STR", [ "Fighter", "Powerhouse" ], 4, 22, 5, 2, 99, 3000000, 1000, 400, 160, 2500, 850, 250, 1 ],
+ [ "Neptunian Squid", "DEX", "Striker", 3, 18, 8, 1, 50, 392109, 600, 280, 130, 900, 480, 180, 1.5 ],
+ [ "Monkey D. Luffy, Gum-Gum Balloon", "STR", [ "Fighter", "Free Spirit" ], 4, 15, 6, 2, 50, 392109, 490, 178, 29, 1492, 655, 63, 1 ],
+ [ "Monkey D. Luffy, Gear Third", "STR", [ "Fighter", "Free Spirit" ], 5, 22, 4, 2, 99, 4000000, 1374, 585, 50, 2960, 1303, 105, 1 ],
+ [ "Roronoa Zoro, Streaming Wolf Swords", "DEX", [ "Slasher", "Driven" ], 4, 15, 5, 2, 50, 392109, 598, 136, 5, 1902, 582, 19, 1 ],
+ [ "Roronoa Zoro, Lion's Song", "DEX", [ "Slasher", "Driven" ], 5, 22, 6, 3, 99, 4000000, 1882, 538, 10, 3558, 1038, 32, 1 ],
+ [ "Nami, Fine Tempo", "INT", [ "Striker", "Cerebral" ], 4, 15, 5, 2, 50, 392109, 454, 133, 50, 1062, 421, 102, 1 ],
+ [ "Nami, Happiness Punch", "INT", [ "Striker", "Cerebral" ], 5, 22, 4, 3, 99, 4000000, 1044, 377, 94, 1990, 949, 168, 1 ],
+ [ "Usopp, Usopp Hammer", "PSY", "Striker", 3, 12, 5, 1, 35, 136167, 188, 101, 40, 778, 388, 191, 1 ],
+ [ "Usopp, Impact", "PSY", "Shooter", 4, 18, 6, 2, 70, 1066998, 733, 361, 97, 1185, 669, 265, 1 ],
+ [ "Mr. Prince, Mutton Shot", "QCK", [ "Fighter", "Cerebral" ], 3, 12, 4, 1, 35, 136167, 276, 108, 32, 1144, 457, 107, 1 ],
+ [ "Mr. Prince, Veau Shot", "QCK", [ "Fighter", "Cerebral" ], 4, 18, 5, 2, 70, 1066998, 1101, 422, 93, 1600, 792, 161, 1 ],
+ [ "Dracule Mihawk", "DEX", "Slasher", 4, 30, 4, 1, 70, 1066998, 324, 201, 1, 1998, 814, 7, 1 ],
+ [ "Hawk Eyes Mihawk", "DEX", "Slasher", 5, 50, 4, 1, 99, 5000000, 1916, 782, 5, 3760, 1285, 15, 1 ],
+ [ "Escapee Morgan", "STR", [ "Slasher", "Driven" ], 3, 17, 5, 1, 70, 711332, 1427, 699, 27, 1600, 1000, 35, 1 ],
+ [ "Double Crosser Django", "PSY", [ "Slasher", "Free Spirit" ], 3, 11, 5, 1, 70, 1066998, 446, 219, 103, 930, 665, 230, 1 ],
+ [ "Double Ironfist Fullbody", "STR", [ "Fighter", "Free Spirit" ], 3, 11, 6, 1, 70, 1066998, 150, 150, 80, 890, 809, 187, 1 ],
+ [ "Hina", "QCK", [ "Fighter", "Cerebral" ], 3, 12, 5, 1, 50, 392109, 154, 73, 42, 1176, 495, 187, 1 ],
+ [ "Black Cage Hina", "QCK", [ "Fighter", "Cerebral" ], 4, 18, 4, 2, 99, 3000000, 1088, 422, 149, 2270, 905, 300, 1 ],
+ [ "Mr. 8", "PSY", [ "Shooter", "Cerebral" ], 2, 10, 5, 0, 35, 90778, 178, 55, 32, 530, 248, 151, 1 ],
+ [ "Mr. 8 Igarappapa", "PSY", [ "Shooter", "Cerebral" ], 3, 13, 5, 1, 70, 1066998, 500, 186, 120, 1286, 433, 230, 1 ],
+ [ "Miss Monday", "STR", [ "Fighter", "Powerhouse" ], 2, 10, 4, 0, 35, 90778, 66, 126, 27, 350, 500, 97, 1 ],
+ [ "Miss Monday Superhuman Brass Knuckles", "STR", [ "Fighter", "Powerhouse" ], 3, 13, 4, 1, 70, 1066998, 270, 422, 71, 506, 1005, 186, 1 ],
+ [ "Knuckle Millions Baroque Works", "STR", "Fighter", 2, 5, 6, 0, 25, 33626, 185, 89, 21, 532, 352, 50, 1 ],
+ [ "Saber Millions Baroque Works", "DEX", "Slasher", 2, 5, 6, 0, 25, 33626, 161, 77, 29, 486, 294, 77, 1 ],
+ [ "Polearm Millions Baroque Works", "QCK", "Striker", 2, 5, 6, 0, 25, 33626, 197, 74, 24, 620, 278, 60, 1 ],
+ [ "Pistol Millions Baroque Works", "PSY", "Shooter", 2, 5, 6, 0, 25, 33626, 159, 51, 40, 476, 224, 102, 1 ],
+ [ "Bazooka Millions Baroque Works", "INT", "Shooter", 2, 5, 4, 0, 25, 33626, 203, 113, 10, 640, 388, 20, 1 ],
+ [ "Knuckle Billions Baroque Works", "STR", "Fighter", 3, 9, 5, 1, 50, 261406, 466, 301, 32, 850, 580, 85, 1 ],
+ [ "Saber Billions Baroque Works", "DEX", "Slasher", 3, 9, 5, 1, 50, 261406, 410, 257, 56, 798, 508, 120, 1 ],
+ [ "Halberd Billions Baroque Works", "QCK", "Striker", 3, 9, 5, 1, 50, 261406, 560, 230, 40, 996, 477, 95, 1 ],
+ [ "Pistol Billions Baroque Works", "PSY", "Shooter", 3, 9, 5, 1, 50, 261406, 402, 187, 82, 698, 400, 172, 1 ],
+ [ "Bazooka Billions Baroque Works", "INT", "Shooter", 3, 9, 4, 1, 50, 261406, 550, 319, 12, 1020, 655, 32, 1 ],
+ [ "Chopper Man", "PSY", "Fighter", 4, 10, 6, 5, 50, 130703, 250, 250, 125, 500, 500, 250, 1 ],
+ [ "Tony Tony Chopper Pre-Rampage", "STR", "Fighter", 4, 30, 6, 1, 70, 1066998, 280, 180, 300, 1808, 851, 0, 1 ],
+ [ "Tony Tony Chopper Post-Rampage", "STR", [ "Fighter", "Powerhouse" ], 5, 50, 4, 2, 99, 5000000, 1808, 851, -350, 3660, 1500, -900, 1 ],
+ [ "Marco", "PSY", [ "Fighter", "Powerhouse" ], 4, 18, 6, 3, 50, 392109, 172, 125, 64, 1030, 676, 220, 1 ],
+ [ "Marco the Phoenix", "PSY", [ "Fighter", "Powerhouse" ], 5, 28, 4, 4, 99, 4000000, 951, 618, 180, 2258, 1100, 390, 1 ],
+ [ "Jozu", "QCK", [ "Fighter", "Powerhouse" ], 4, 18, 4, 3, 50, 392109, 412, 109, 27, 1820, 596, 98, 1 ],
+ [ "Diamond Jozu", "QCK", [ "Fighter", "Powerhouse" ], 5, 28, 4, 4, 99, 4000000, 1748, 524, 69, 3300, 987, 231, 1 ],
+ [ "Vista", "INT", [ "Slasher", "Powerhouse" ], 4, 18, 5, 3, 50, 392109, 290, 206, 15, 1388, 806, 100, 1 ],
+ [ "Flower Sword Vista", "INT", [ "Slasher", "Powerhouse" ], 5, 28, 5, 4, 99, 4000000, 1314, 732, 72, 2840, 1325, 185, 1 ],
+ [ "Izo", "DEX", [ "Shooter", "Cerebral" ], 4, 18, 4, 3, 50, 392109, 232, 130, 50, 1300, 634, 172, 1 ],
+ [ "Flintlock Pistols Izo", "DEX", [ "Shooter", "Cerebral" ], 5, 28, 5, 4, 99, 4000000, 1224, 585, 136, 2550, 1068, 319, 1 ],
+ [ "Blamenco", "STR", [ "Striker", "Free Spirit" ], 4, 18, 4, 3, 50, 392109, 204, 192, 34, 1150, 775, 150, 1 ],
+ [ "Blamenco the Mallet", "STR", [ "Striker", "Free Spirit" ], 5, 28, 4, 4, 99, 4000000, 1086, 726, 112, 2488, 1252, 268, 1 ],
+ [ "Edward Newgate", "STR", [ "Striker", "Powerhouse" ], 5, 40, 4, 4, 70, 1422664, 1338, 522, 80, 3220, 1060, 156, 1 ],
+ [ "Whitebeard", "STR", [ "Striker", "Powerhouse" ], 6, 55, 4, 5, 99, 5000000, 3148, 978, 110, 3900, 1360, 235, 1 ],
+ [ "Training Coby", "PSY", [ "Striker", "Driven" ], 3, 12, 5, 1, 50, 261406, 90, 81, 55, 780, 514, 218, 0.7 ],
+ [ "Petty Officer Coby", "PSY", [ "Fighter", "Driven" ], 4, 18, 6, 2, 99, 3000000, 701, 485, 191, 1926, 984, 340, 1 ],
+ [ "Training Helmeppo", "INT", [ "Striker", "Driven" ], 3, 12, 5, 1, 50, 261406, 108, 93, 43, 890, 605, 185, 0.7 ],
+ [ "Sergeant Helmeppo", "INT", [ "Slasher", "Driven" ], 4, 18, 5, 2, 99, 3000000, 807, 555, 150, 1998, 1060, 260, 1 ],
+ [ "Rainbow Pirate Penguin", "INT", "Evolver", 4, 6, 6, 0, 1, 0, 200, 100, 300, 200, 100, 300, 1 ],
+ [ "Rainbow Striped Dragon", "INT", "Evolver", 4, 20, 4, 0, 1, 0, 1500, 800, 100, 1500, 800, 100, 1 ],
+ [ "White Chase Smoker", "DEX", [ "Striker", "Driven" ], 5, 20, 5, 3, 99, 2000000, 1644, 1012, 298, 2215, 1282, 338, 1.5 ],
+ [ "Armed Fighter Unit Red Pirates", "STR", "Fighter", 3, 12, 5, 1, 60, 449516, 644, 388, 19, 1055, 781, 33, 0.7 ],
+ [ "Armed Fighter Unit Blue Pirates", "QCK", "Fighter", 3, 12, 5, 1, 60, 449516, 679, 369, 21, 1106, 750, 36, 0.7 ],
+ [ "Armed Fighter Unit Green Pirates", "DEX", "Fighter", 3, 12, 5, 1, 60, 449516, 663, 380, 22, 1082, 770, 34, 0.7 ],
+ [ "Armed Fighter Unit Yellow Pirates", "PSY", "Fighter", 3, 12, 5, 1, 60, 449516, 622, 358, 35, 1030, 725, 58, 0.7 ],
+ [ "Armed Fighter Unit Black Pirates", "INT", "Fighter", 3, 12, 5, 1, 60, 449516, 633, 405, 18, 1044, 800, 30, 0.7 ],
+ [ "Armed Slasher Unit Red Pirates", "STR", "Slasher", 3, 12, 5, 1, 60, 449516, 583, 380, 69, 990, 658, 99, 0.7 ],
+ [ "Armed Slasher Unit Blue Pirates", "QCK", "Slasher", 3, 12, 5, 1, 60, 449516, 618, 339, 74, 1068, 592, 119, 0.7 ],
+ [ "Armed Slasher Unit Green Pirates", "DEX", "Slasher", 3, 12, 5, 1, 60, 449516, 602, 358, 80, 1017, 616, 122, 0.7 ],
+ [ "Armed Slasher Unit Yellow Pirates", "PSY", "Slasher", 3, 12, 5, 1, 60, 449516, 566, 333, 84, 944, 572, 149, 0.7 ],
+ [ "Armed Slasher Unit Black Pirates", "INT", "Slasher", 3, 12, 5, 1, 60, 449516, 590, 381, 59, 983, 660, 109, 0.7 ],
+ [ "Armed Striker Unit Red Pirates", "STR", "Striker", 3, 12, 5, 1, 60, 449516, 473, 320, 71, 946, 640, 142, 0.7 ],
+ [ "Armed Striker Unit Blue Pirates", "QCK", "Striker", 3, 12, 5, 1, 60, 449516, 483, 309, 73, 976, 618, 146, 0.7 ],
+ [ "Armed Striker Unit Green Pirates", "DEX", "Striker", 3, 12, 5, 1, 60, 449516, 429, 318, 79, 858, 636, 158, 0.7 ],
+ [ "Armed Striker Unit Yellow Pirates", "PSY", "Striker", 3, 12, 5, 1, 60, 449516, 439, 289, 87, 878, 578, 176, 0.7 ],
+ [ "Armed Striker Unit Black Pirates", "INT", "Striker", 3, 12, 5, 1, 60, 449516, 465, 342, 65, 930, 684, 130, 0.7 ],
+ [ "Armed Shooter Unit Red Pirates", "STR", "Shooter", 3, 12, 5, 1, 60, 449516, 271, 102, 180, 481, 355, 301, 0.7 ],
+ [ "Armed Shooter Unit Blue Pirates", "QCK", "Shooter", 3, 12, 5, 1, 60, 449516, 280, 96, 181, 530, 302, 312, 0.7 ],
+ [ "Armed Shooter Unit Green Pirates", "DEX", "Shooter", 3, 12, 5, 1, 60, 449516, 273, 99, 182, 502, 312, 314, 0.7 ],
+ [ "Armed Shooter Unit Yellow Pirates", "PSY", "Shooter", 3, 12, 5, 1, 60, 449516, 201, 88, 205, 427, 284, 348, 0.7 ],
+ [ "Armed Shooter Unit Black Pirates", "INT", "Shooter", 3, 12, 5, 1, 60, 449516, 280, 137, 174, 500, 400, 297, 0.7 ],
+ [ "Skilled Gunner", "INT", "Shooter", 3, 15, 5, 2, 70, 711332, 1280, 500, 20, 1550, 850, 40, 0.7 ],
+ [ "Mr. 13 & Ms. Friday The Unluckies", "INT", "Shooter", 3, 13, 7, 3, 50, 392109, 44, 44, 44, 596, 893, 130, 0.7 ],
+ [ "Dorry", "PSY", [ "Slasher", "Powerhouse" ], 4, 25, 4, 2, 70, 1422664, 450, 370, 102, 1662, 783, 153, 1.5 ],
+ [ "Broggy", "INT", [ "Slasher", "Powerhouse" ], 4, 25, 4, 2, 70, 1422664, 440, 411, 88, 1634, 875, 117, 1.5 ],
+ [ "Triceratops", "QCK", "Fighter", 2, 25, 4, 0, 50, 392109, 500, 200, 50, 965, 700, 50, 1.5 ],
+ [ "Rex", "STR", "Fighter", 2, 25, 4, 0, 50, 392109, 300, 300, 50, 520, 900, 50, 1.5 ],
+ [ "Brontosaurus", "DEX", "Fighter", 2, 25, 4, 0, 50, 392109, 400, 250, 50, 755, 755, 50, 1.5 ],
+ [ "Tsuru", "INT", [ "Shooter", "Cerebral" ], 3, 12, 4, 2, 50, 392109, 140, 26, 60, 880, 400, 266, 1 ],
+ [ "Great Advisor Tsuru", "INT", [ "Shooter", "Cerebral" ], 4, 18, 6, 3, 99, 4000000, 808, 337, 224, 1151, 1210, 366, 1 ],
+ [ "Momonga", "PSY", [ "Slasher", "Cerebral" ], 3, 11, 5, 2, 70, 1066998, 420, 398, 98, 632, 815, 255, 1 ],
+ [ "Onigumo", "DEX", [ "Slasher", "Driven" ], 3, 11, 8, 2, 70, 1066998, 482, 434, 63, 944, 920, 131, 1 ],
+ [ "Red Plated Lobster", "STR", "Evolver", 3, 7, 4, 0, 1, 0, 50, 550, 0, 50, 550, 0, 1 ],
+ [ "Blue Plated Lobster", "QCK", "Evolver", 3, 7, 4, 0, 1, 0, 50, 550, 0, 50, 550, 0, 1 ],
+ [ "Green Plated Lobster", "DEX", "Evolver", 3, 7, 4, 0, 1, 0, 50, 550, 0, 50, 550, 0, 1 ],
+ [ "Yellow Plated Lobster", "PSY", "Evolver", 3, 7, 4, 0, 1, 0, 50, 550, 0, 50, 550, 0, 1 ],
+ [ "Black Plated Lobster", "INT", "Evolver", 3, 7, 4, 0, 1, 0, 50, 550, 0, 50, 550, 0, 1 ],
+ [ "Monkey D. Garp", "PSY", [ "Fighter", "Powerhouse" ], 4, 30, 4, 1, 70, 1066998, 280, 145, 50, 1442, 722, 131, 1 ],
+ [ "Garp the Fist", "PSY", [ "Fighter", "Powerhouse" ], 5, 50, 4, 2, 99, 5000000, 1377, 685, 105, 2852, 1220, 225, 1 ],
+ [ "Trafalgar Law", "DEX", [ "Slasher", "Free Spirit" ], 4, 18, 4, 3, 70, 1066998, 104, 125, 73, 876, 702, 238, 1 ],
+ [ "Trafalgar Law, ROOM", "DEX", [ "Slasher", "Free Spirit" ], 5, 28, 4, 4, 99, 4000000, 817, 655, 190, 2052, 1300, 370, 1 ],
+ [ "Basil Hawkins", "INT", [ "Slasher", "Cerebral" ], 4, 18, 4, 3, 70, 1066998, 200, 200, 7, 1165, 750, 127, 1 ],
+ [ "Basil Hawkins the Magician", "INT", [ "Striker", "Cerebral" ], 5, 28, 6, 4, 99, 4000000, 1095, 717, 85, 2480, 1295, 255, 1 ],
+ [ "Killer", "QCK", [ "Striker", "Cerebral" ], 4, 18, 6, 3, 70, 1066998, 180, 250, 0, 1228, 895, -50, 1 ],
+ [ "Massacre Soldier Killer", "QCK", [ "Striker", "Cerebral" ], 5, 28, 4, 4, 99, 4000000, 1120, 811, 0, 2570, 1449, -200, 1 ],
+ [ "Urouge", "PSY", [ "Striker", "Powerhouse" ], 4, 18, 4, 3, 70, 1066998, 108, 108, 35, 1290, 798, 108, 1 ],
+ [ "Mad Monk Urouge", "PSY", [ "Striker", "Powerhouse" ], 5, 28, 5, 4, 99, 4000000, 1202, 730, 75, 2071, 1343, 200, 1 ],
+ [ "Bepo", "STR", [ "Fighter", "Powerhouse" ], 4, 18, 4, 3, 70, 1066998, 120, 105, 80, 820, 690, 246, 1 ],
+ [ "Bepo the Martial Artist", "STR", [ "Fighter", "Powerhouse" ], 5, 28, 6, 4, 99, 4000000, 755, 640, 198, 1880, 1200, 405, 1 ],
+ [ "Kalifa", "DEX", [ "Fighter", "Cerebral" ], 3, 12, 5, 1, 50, 392109, 116, 65, 51, 850, 540, 227, 1 ],
+ [ "Beautiful Secretary Kalifa", "DEX", [ "Fighter", "Cerebral" ], 4, 18, 6, 2, 99, 3000000, 788, 488, 177, 1728, 963, 378, 1 ],
+ [ "Paulie", "DEX", "Striker", 3, 12, 5, 1, 50, 392109, 162, 102, 31, 882, 705, 166, 1 ],
+ [ "Paulie Dock One Foreman/Mast Specialist", "DEX", "Striker", 4, 18, 4, 2, 99, 3000000, 812, 617, 130, 2300, 1070, 231, 1 ],
+ [ "Rob Lucci", "QCK", [ "Slasher", "Powerhouse" ], 3, 12, 4, 1, 50, 392109, 132, 126, 28, 1192, 721, 106, 1 ],
+ [ "Rob Lucci Dock One Sawyer, Treenail Specialist", "QCK", [ "Slasher", "Powerhouse" ], 4, 18, 6, 2, 99, 3000000, 1107, 654, 69, 2220, 1203, 177, 1 ],
+ [ "Kaku", "QCK", "Striker", 3, 12, 5, 1, 50, 392109, 172, 79, 37, 1233, 635, 131, 0.7 ],
+ [ "Kaku Dock One Carpentry Specialist", "QCK", [ "Striker", "Free Spirit" ], 4, 18, 4, 2, 99, 3000000, 1132, 552, 98, 2517, 988, 213, 0.7 ],
+ [ "Lulu", "QCK", "Shooter", 3, 12, 6, 2, 70, 1066998, 290, 168, 88, 985, 682, 223, 1 ],
+ [ "Wapol", "STR", [ "Fighter", "Free Spirit" ], 3, 8, 4, 1, 50, 392109, 330, 128, 20, 1440, 488, 98, 1 ],
+ [ "Wapol House", "STR", [ "Shooter", "Free Spirit" ], 4, 15, 4, 2, 99, 3000000, 1390, 423, 77, 2940, 835, 142, [ 1, 1, 0.7 ] ],
+ [ "Dalton", "QCK", [ "Slasher", "Cerebral" ], 3, 7, 5, 1, 35, 90778, 192, 110, 45, 751, 390, 140, 0.7 ],
+ [ "Dalton Bison", "QCK", [ "Slasher", "Cerebral" ], 4, 11, 4, 2, 70, 1066998, 690, 322, 102, 1155, 620, 290, 0.7 ],
+ [ "Chess", "DEX", "Shooter", 3, 7, 6, 0, 35, 90778, 186, 90, 31, 668, 296, 121, 1 ],
+ [ "Kuromarimo", "DEX", "Striker", 3, 7, 5, 0, 35, 90778, 72, 144, 24, 366, 488, 108, 1 ],
+ [ "Chessmarimo", "DEX", "Striker", 4, 11, 7, 2, 70, 1066998, 525, 396, 145, 1290, 840, 185, 1 ],
+ [ "Dr. Kureha", "PSY", [ "Slasher", "Cerebral" ], 3, 20, 5, 2, 50, 392109, 35, 32, 88, 200, 200, 510, 1.5 ],
+ [ "Lapin", "INT", "Fighter", 2, 15, 5, 0, 35, 90778, 200, 200, 25, 550, 550, 53, 1.5 ],
+ [ "Lapin Adult", "INT", [ "Fighter", "Powerhouse" ], 3, 20, 4, 2, 70, 1066998, 380, 480, 38, 1100, 950, 100, 1.5 ],
+ [ "Franky", "PSY", [ "Shooter", "Free Spirit" ], 3, 12, 4, 1, 50, 392109, 128, 128, 28, 1220, 680, 112, 1 ],
+ [ "Dismantler Franky", "PSY", [ "Shooter", "Free Spirit" ], 4, 20, 5, 2, 99, 3000000, 1138, 637, 71, 2453, 1032, 198, 1 ],
+ [ "Kiwi", "PSY", "Slasher", 3, 13, 4, 1, 50, 392109, 77, 77, 77, 777, 444, 265, 1 ],
+ [ "Mozu", "PSY", "Slasher", 3, 13, 4, 1, 50, 392109, 77, 77, 77, 555, 555, 265, 1 ],
+ [ "Kraken Surume", "STR", [ "Striker", "Powerhouse" ], 3, 12, 6, 1, 50, 392109, 99, 99, 188, 1440, 685, 133, 1 ],
+ [ "Kraken Monster of the North", "STR", [ "Striker", "Powerhouse" ], 4, 20, 8, 2, 99, 3000000, 1355, 602, 118, 2700, 1111, 33, 1 ],
+ [ "Red Jeweled Porc", "STR", "Booster", 2, 2, 4, 0, 10, 2330, 45, 27, 7, 129, 77, 15, 1 ],
+ [ "Blue Jeweled Porc", "QCK", "Booster", 2, 2, 4, 0, 10, 2330, 49, 21, 9, 145, 65, 19, 1 ],
+ [ "Green Jeweled Porc", "DEX", "Booster", 2, 2, 4, 0, 10, 2330, 47, 25, 8, 133, 72, 17, 1 ],
+ [ "Yellow Jeweled Porc", "PSY", "Booster", 2, 2, 4, 0, 10, 2330, 44, 19, 12, 120, 58, 28, 1 ],
+ [ "Black Jeweled Porc", "INT", "Booster", 2, 2, 4, 0, 10, 2330, 42, 30, 7, 119, 88, 14, 1 ],
+ [ "Ruby Jeweled Porc", "STR", "Booster", 3, 5, 4, 0, 1, 0, 169, 97, 22, 169, 97, 22, 1 ],
+ [ "Sapphire Jeweled Porc", "QCK", "Booster", 3, 5, 4, 0, 1, 0, 185, 85, 26, 185, 85, 26, 1 ],
+ [ "Emerald Jeweled Porc", "DEX", "Booster", 3, 5, 4, 0, 1, 0, 173, 92, 24, 173, 92, 24, 1 ],
+ [ "Topaz Jeweled Porc", "PSY", "Booster", 3, 5, 4, 0, 1, 0, 160, 78, 35, 160, 78, 35, 1 ],
+ [ "Amethyst Jeweled Porc", "INT", "Booster", 3, 5, 4, 0, 1, 0, 159, 108, 21, 159, 108, 21, 1 ],
+ [ "Zephyr", "INT", [ "Shooter", "Powerhouse" ], 4, 30, 7, 1, 70, 1066998, 320, 133, 4, 1588, 699, 29, 1 ],
+ [ "Zephyr NEO Navy Commander", "INT", [ "Shooter", "Powerhouse" ], 5, 50, 4, 2, 99, 5000000, 1550, 680, 11, 3702, 1252, 88, 1 ],
+ [ "Ain", "QCK", [ "Shooter", "Cerebral" ], 3, 8, 6, 1, 35, 136167, 96, 87, 47, 688, 421, 195, 1 ],
+ [ "Ain NEO Navy Vice Admiral", "QCK", [ "Shooter", "Cerebral" ], 4, 13, 4, 2, 70, 1066998, 620, 377, 155, 908, 679, 285, 1 ],
+ [ "Eustass Kid", "STR", [ "Striker", "Driven" ], 4, 18, 4, 3, 70, 1066998, 233, 141, 12, 1221, 721, 32, 1 ],
+ [ "Captain Kid", "STR", [ "Striker", "Driven" ], 5, 28, 4, 4, 99, 4000000, 1138, 651, 21, 3515, 1298, 69, 1 ],
+ [ "Scratchmen Apoo", "DEX", [ "Shooter", "Free Spirit" ], 4, 18, 5, 3, 70, 1066998, 209, 122, 39, 1126, 652, 184, 1 ],
+ [ "Roar of the Sea Scratchmen Apoo", "DEX", [ "Shooter", "Free Spirit" ], 5, 28, 5, 4, 99, 4000000, 1085, 580, 144, 2801, 1111, 300, 1 ],
+ [ "X Drake", "INT", [ "Striker", "Powerhouse" ], 4, 18, 5, 3, 70, 1066998, 242, 112, 32, 1515, 688, 88, 1 ],
+ [ "Red Flag X Drake", "INT", [ "Fighter", "Powerhouse" ], 5, 28, 6, 4, 99, 4000000, 1432, 611, 57, 3580, 1098, 132, 1 ],
+ [ "Jewelry Bonney", "PSY", [ "Fighter", "Free Spirit" ], 4, 18, 4, 3, 70, 1066998, 277, 80, 44, 1370, 440, 220, 1 ],
+ [ "Big Eater Jewelry Bonney", "PSY", [ "Fighter", "Free Spirit" ], 5, 28, 5, 4, 99, 4000000, 1248, 401, 158, 3000, 720, 400, 1 ],
+ [ "Capone Bege", "QCK", [ "Shooter", "Free Spirit" ], 4, 18, 6, 3, 70, 1066998, 199, 102, 34, 1050, 755, 153, 1 ],
+ [ "Capone Gang Bege", "QCK", [ "Shooter", "Free Spirit" ], 5, 28, 4, 4, 99, 4000000, 893, 682, 110, 2122, 1323, 313, 1 ],
+ [ "Silvers Rayleigh", "INT", [ "Fighter", "Cerebral" ], 5, 30, 4, 3, 70, 1066998, 488, 302, 168, 1518, 826, 309, 1 ],
+ [ "Dark King Rayleigh", "INT", [ "Fighter", "Cerebral" ], 6, 55, 4, 4, 99, 5000000, 1462, 777, 277, 3001, 1300, 500, 1 ],
+ [ "Giant Slasher Red Pirates", "STR", "Slasher", 2, 8, 6, 0, 30, 57558, 297, 163, 41, 579, 363, 41, 1.5 ],
+ [ "Giant Shooter Blue Pirates", "QCK", "Shooter", 2, 8, 4, 0, 30, 57558, 350, 129, 53, 619, 303, 68, 1.5 ],
+ [ "Giant Warrior Green Pirates", "DEX", "Striker", 2, 8, 4, 0, 30, 57558, 313, 155, 55, 561, 340, 77, 1.5 ],
+ [ "Giant Fighter Yellow Pirates", "PSY", "Fighter", 2, 8, 5, 0, 30, 57558, 308, 151, 52, 575, 332, 67, 1.5 ],
+ [ "Giant Striker Black Pirates", "INT", "Striker", 2, 8, 6, 0, 30, 57558, 330, 133, 42, 614, 313, 54, 1.5 ],
+ [ "Giant Imperial Slasher Red Pirates", "STR", "Slasher", 3, 13, 4, 1, 60, 674274, 490, 334, 46, 1179, 668, 109, 1.5 ],
+ [ "Giant Imperial Shooter Blue Pirates", "QCK", "Shooter", 3, 13, 4, 1, 60, 674274, 528, 281, 64, 1235, 562, 135, 1.5 ],
+ [ "Female Giant Imperial Warrior Green Pirates", "DEX", "Striker", 3, 13, 4, 1, 60, 674274, 472, 310, 72, 1132, 620, 143, 1.5 ],
+ [ "Giant Imperial Fighter Yellow Pirates", "PSY", "Fighter", 3, 13, 4, 1, 60, 674274, 488, 302, 61, 1170, 604, 132, 1.5 ],
+ [ "Giant Imperial Striker Black Pirates", "INT", "Striker", 3, 13, 4, 1, 60, 674274, 525, 311, 49, 1213, 622, 119, 1.5 ],
+ [ "Sea Cat", "PSY", "Fighter", 3, 10, 4, 1, 50, 392109, 77, 7, 33, 777, 77, 333, 1 ],
+ [ "Kung Fu Dugong", "STR", "Fighter", 3, 7, 5, 1, 20, 26184, 25, 225, 45, 50, 355, 95, 0.7 ],
+ [ "Kung Fu Dugong Faithful Apprentice", "STR", "Fighter", 4, 11, 8, 3, 50, 392109, 25, 305, 55, 75, 825, 225, 0.7 ],
+ [ "Banana Gator", "QCK", "Fighter", 3, 10, 4, 0, 50, 392109, 552, 334, 80, 922, 534, 155, 1 ],
+ [ "Sandora Dragon", "DEX", "Fighter", 3, 10, 4, 0, 50, 392109, 511, 285, 120, 811, 485, 190, 1 ],
+ [ "Mr. 0 Baroque Works CEO", "INT", [ "Striker", "Cerebral" ], 3, 10, 5, 2, 50, 392109, 194, 110, 23, 1088, 659, 147, 1.5 ],
+ [ "Sir Crocodile", "INT", [ "Striker", "Cerebral" ], 4, 18, 4, 3, 99, 3000000, 995, 582, 112, 2210, 1220, 208, 1.5 ],
+ [ "Hogback", "INT", [ "Fighter", "Cerebral" ], 3, 12, 6, 1, 50, 392109, 210, 72, 33, 1251, 595, 118, 1 ],
+ [ "Doctor Hogback", "INT", [ "Fighter", "Cerebral" ], 4, 20, 4, 2, 99, 3000000, 1180, 550, 72, 2741, 945, 189, 1 ],
+ [ "Cindry", "PSY", "Shooter", 3, 12, 5, 1, 50, 392109, 76, 58, 60, 806, 458, 259, 0.7 ],
+ [ "Victoria Cindry", "PSY", "Shooter", 4, 20, 4, 2, 99, 3000000, 622, 398, 231, 1402, 661, 478, 0.7 ],
+ [ "Emporio Ivankov", "QCK", [ "Fighter", "Free Spirit" ], 4, 30, 4, 3, 70, 1066998, 302, 125, 53, 1682, 512, 161, 1 ],
+ [ "Emporio Ivankov Queen of Kamabakka Queendom", "QCK", [ "Fighter", "Free Spirit" ], 5, 50, 4, 4, 99, 5000000, 1642, 470, 132, 3030, 1155, 290, 1 ],
+ [ "Perona", "DEX", [ "Shooter", "Driven" ], 3, 10, 4, 1, 50, 392109, 134, 44, 55, 944, 422, 222, 1 ],
+ [ "Ghost Princess Perona", "DEX", [ "Shooter", "Driven" ], 4, 18, 4, 2, 99, 3000000, 887, 377, 198, 1598, 791, 430, 1 ],
+ [ "Kumacy", "STR", [ "Fighter", "Powerhouse" ], 3, 11, 6, 1, 70, 1066998, 500, 255, 0, 1660, 904, 0, 1 ],
+ [ "Dog Penguin", "QCK", "Fighter", 3, 11, 4, 1, 50, 392109, 986, 500, 54, 1420, 722, 0, 1 ],
+ [ "Miss Merry Christmas", "QCK", "Fighter", 3, 11, 5, 1, 35, 136167, 220, 51, 42, 980, 422, 147, 1 ],
+ [ "Miss Merry Christmas Human Mole", "QCK", "Fighter", 4, 15, 4, 2, 70, 1066998, 910, 348, 113, 1401, 690, 233, 1 ],
+ [ "Mr. 4", "STR", [ "Shooter", "Powerhouse" ], 3, 11, 4, 1, 35, 136167, 250, 110, 14, 1046, 590, 80, 1 ],
+ [ "Mr. 4 and Lassoo the Dog-Gun", "STR", [ "Shooter", "Powerhouse" ], 4, 15, 6, 2, 70, 1066998, 980, 522, 43, 1606, 910, 110, 1 ],
+ [ "Miss Doublefinger", "DEX", [ "Striker", "Cerebral" ], 3, 11, 8, 1, 35, 136167, 115, 87, 44, 770, 501, 158, 1 ],
+ [ "Miss Doublefinger Human Spike", "DEX", [ "Striker", "Cerebral" ], 4, 15, 4, 2, 70, 1066998, 720, 435, 120, 1081, 701, 288, 1 ],
+ [ "Mr. 1", "STR", [ "Slasher", "Cerebral" ], 3, 11, 4, 1, 35, 136167, 255, 156, 1, 1152, 744, 10, 1 ],
+ [ "Mr. 1 Human Sword", "STR", [ "Slasher", "Cerebral" ], 4, 15, 5, 2, 70, 1066998, 1021, 652, 2, 1880, 1042, 15, 1 ],
+ [ "Rebecca", "QCK", "Slasher", 4, 14, 5, 2, 70, 1422664, 242, 115, 108, 1525, 707, 345, 1 ],
+ [ "Absalom", "STR", [ "Shooter", "Powerhouse" ], 3, 12, 6, 1, 50, 392109, 158, 93, 35, 1330, 602, 126, 1 ],
+ [ "Absalom of the Graveyard", "STR", [ "Shooter", "Powerhouse" ], 4, 20, 7, 2, 99, 3000000, 1271, 545, 77, 2601, 1008, 192, 1 ],
+ [ "General Zombie", "INT", "Fighter", 3, 12, 5, 1, 70, 1066998, 920, 352, 0, 2610, 605, 0, 1 ],
+ [ "Jigoro of the Wind", "DEX", "Slasher", 3, 9, 6, 1, 50, 392109, 426, 258, 37, 1348, 744, 0, 1 ],
+ [ "Sir Crocodile Warlord of the Sea", "INT", [ "Slasher", "Cerebral" ], 5, 30, 4, 4, 99, 4000000, 1088, 659, 147, 2980, 1380, 150, 1 ],
+ [ "Jimbe", "QCK", [ "Fighter", "Powerhouse" ], 4, 15, 4, 3, 70, 1066998, 266, 101, 35, 1590, 660, 118, 1 ],
+ [ "Jimbe Warlord of the Sea", "QCK", [ "Fighter", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1522, 622, 70, 3055, 1092, 250, 1 ],
+ [ "Bartholomew Kuma", "STR", [ "Shooter", "Powerhouse" ], 4, 15, 4, 3, 70, 1066998, 290, 110, 33, 1525, 692, 118, 1 ],
+ [ "Bartholomew Kuma Warlord of the Sea", "STR", [ "Shooter", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1445, 644, 82, 2734, 1205, 262, 1 ],
+ [ "Gecko Moria", "INT", [ "Striker", "Driven" ], 4, 15, 4, 3, 70, 1066998, 355, 102, 15, 1928, 677, 33, 1 ],
+ [ "Gecko Moria Warlord of the Sea", "INT", [ "Striker", "Driven" ], 5, 30, 4, 4, 99, 4000000, 1845, 612, 33, 3900, 1120, 118, 1 ],
+ [ "Boa Hancock", "QCK", [ "Fighter", "Free Spirit" ], 5, 30, 4, 4, 70, 1066998, 416, 251, 197, 1595, 859, 340, 1 ],
+ [ "Boa Hancock Warlord of the Sea", "QCK", [ "Fighter", "Free Spirit" ], 6, 55, 4, 5, 99, 5000000, 1512, 782, 301, 2860, 1320, 515, 1 ],
+ [ "Donquixote Doflamingo", "DEX", [ "Slasher", "Driven" ], 4, 30, 4, 1, 70, 1066998, 200, 186, 30, 1061, 790, 145, 1 ],
+ [ "Donquixote Doflamingo, Warlord of the Sea", "DEX", [ "Slasher", "Driven" ], 5, 50, 5, 2, 99, 4000000, 932, 721, 118, 2311, 1500, 255, 1 ],
+ [ "Sanji Parage Shot: The Storm", "QCK", [ "Fighter", "Powerhouse" ], 4, 10, 5, 2, 99, 2000000, 486, 207, 32, 2015, 900, 217, 0.7 ],
+ [ "Monkey D. Luffy Gum-Gum Bazooka: Supremacy", "STR", [ "Fighter", "Free Spirit" ], 4, 15, 6, 2, 99, 2000000, 404, 227, 39, 1748, 1250, 192, 1 ],
+ [ "Roronoa Zoro Three Thousand Worlds: The Final Stroke", "DEX", [ "Slasher", "Driven" ], 4, 15, 6, 2, 99, 2000000, 426, 222, 37, 2175, 1188, 132, 1 ],
+ [ "Nami Mirage Tempo: The Heavens", "INT", [ "Striker", "Cerebral" ], 4, 15, 5, 2, 99, 2000000, 348, 201, 75, 1260, 988, 361, 1 ],
+ [ "Brook", "QCK", [ "Slasher", "Free Spirit" ], 3, 12, 5, 1, 50, 392109, 220, 43, 45, 1190, 430, 208, 1 ],
+ [ "Humming Swordsman Brook", "QCK", [ "Slasher", "Free Spirit" ], 4, 20, 4, 2, 99, 3000000, 1138, 368, 162, 2108, 980, 332, 1 ],
+ [ "Ryuma", "PSY", "Slasher", 4, 18, 5, 2, 99, 3000000, 1138, 368, 162, 2005, 1088, 162, 1 ],
+ [ "Masira", "STR", "Fighter", 3, 10, 4, 1, 50, 392109, 525, 212, 12, 1120, 655, 95, 1 ],
+ [ "Shoujou", "DEX", "Shooter", 3, 10, 4, 1, 50, 392109, 655, 132, 23, 1334, 401, 144, 1 ],
+ [ "Montblanc Cricket", "PSY", [ "Shooter", "Free Spirit" ], 3, 12, 4, 1, 50, 392109, 488, 145, 54, 1050, 525, 155, 1.5 ],
+ [ "South Bird and Forest Residents", "DEX", "Fighter", 3, 8, 6, 1, 50, 261406, 752, 383, 121, 929, 423, 161, 1.5 ],
+ [ "Bellamy", "DEX", [ "Fighter", "Driven" ], 3, 10, 4, 1, 35, 136167, 131, 152, 24, 769, 692, 89, 1 ],
+ [ "Bellamy the Hyena", "DEX", [ "Fighter", "Driven" ], 4, 15, 6, 2, 70, 1066998, 726, 600, 67, 1072, 986, 170, 1 ],
+ [ "Sarquiss", "QCK", "Slasher", 3, 10, 5, 1, 50, 392109, 220, 92, 22, 1440, 424, 68, 1 ],
+ [ "Elizabeth", "DEX", [ "Fighter", "Free Spirit" ], 4, 12, 4, 2, 70, 1422664, 881, 422, 155, 1485, 700, 198, 1.5 ],
+ [ "Caroline", "INT", [ "Fighter", "Free Spirit" ], 4, 18, 6, 2, 99, 3000000, 772, 389, 177, 1890, 915, 300, [ 1.5, 1.5, 0.7 ] ],
+ [ "Sanji Kamabakka Queendom Traditional Fighting Style", "QCK", "Fighter", 3, 10, 4, 2, 50, 392109, 221, 58, 29, 1229, 622, 130, [ 0.7, 0.7, 1.5 ] ],
+ [ "Sanji Candy", "QCK", [ "Fighter", "Free Spirit" ], 4, 18, 4, 3, 99, 3000000, 1155, 545, 76, 1802, 951, 357, [ 0.7, 0.7, 1.5 ] ],
+ [ "Perona - Sweets", "DEX", [ "Shooter", "Driven" ], 4, 11, 4, 2, 50, 392109, 168, 98, 58, 928, 412, 231, 1.5 ],
+ [ "Ghost Princess Perona - Sweets", "DEX", [ "Shooter", "Driven" ], 5, 20, 4, 3, 99, 3000000, 856, 359, 186, 1568, 741, 466, 1.5 ],
+ [ "Nefertari Vivi - Love", "PSY", [ "Slasher", "Free Spirit" ], 4, 11, 5, 2, 50, 392109, 138, 102, 183, 889, 358, 256, 1.5 ],
+ [ "Princess Vivi - Love", "PSY", [ "Slasher", "Free Spirit" ], 5, 20, 6, 3, 99, 3000000, 844, 297, 213, 1440, 683, 322, 1.5 ],
+ [ "Cowboy and Bourbon Jr. Supersonic Duck Squadron", "QCK", "Evolver", 3, 9, 5, 0, 35, 90778, 150, 80, 35, 755, 334, 155, 1 ],
+ [ "Stomp and Ivan X Supersonic Duck Squadron", "DEX", "Evolver", 3, 9, 5, 0, 35, 90778, 126, 98, 33, 719, 361, 152, 1 ],
+ [ "Centaur and Hikoichi Supersonic Duck Squadron", "STR", "Evolver", 3, 9, 5, 0, 35, 90778, 102, 119, 30, 693, 383, 149, 1 ],
+ [ "Karoo", "PSY", "Striker", 3, 6, 4, 1, 20, 26184, 178, 86, 40, 229, 155, 100, 1 ],
+ [ "Captain Karoo and the Supersonic Duck Squadron", "PSY", "Striker", 4, 18, 7, 2, 99, 3000000, 378, 383, 138, 1412, 702, 461, 1.5 ],
+ [ "Marshall D. Teach", "STR", [ "Shooter", "Driven" ], 4, 30, 6, 1, 70, 1066998, 235, 166, 30, 1402, 790, 23, 1 ],
+ [ "Blackbeard", "STR", [ "Shooter", "Driven" ], 5, 50, 4, 2, 99, 5000000, 1338, 744, 18, 3140, 1418, 83, 1 ],
+ [ "Thatch", "QCK", [ "Slasher", "Cerebral" ], 4, 18, 5, 3, 50, 522812, 208, 103, 63, 1246, 626, 188, 1 ],
+ [ "Twin-Blade Thatch", "QCK", [ "Slasher", "Cerebral" ], 5, 28, 4, 4, 99, 4000000, 1184, 575, 146, 2505, 1190, 302, 1 ],
+ [ "Namule", "DEX", [ "Fighter", "Powerhouse" ], 4, 18, 4, 3, 50, 522812, 155, 133, 40, 1081, 822, 142, 1 ],
+ [ "One-Hit Namule", "DEX", [ "Fighter", "Powerhouse" ], 5, 28, 4, 4, 99, 4000000, 999, 755, 117, 2398, 1303, 262, 1 ],
+ [ "Rakuyo", "PSY", [ "Striker", "Driven" ], 4, 18, 4, 3, 50, 522812, 161, 122, 65, 1000, 733, 193, 1 ],
+ [ "Morning Star Rakuyo", "PSY", [ "Striker", "Driven" ], 5, 28, 4, 4, 99, 4000000, 945, 681, 122, 2001, 1320, 337, 1 ],
+ [ "Fossa", "STR", [ "Slasher", "Driven" ], 4, 18, 4, 3, 50, 522812, 150, 160, 34, 1120, 831, 132, 1 ],
+ [ "Fossa the Blazing Katana", "STR", [ "Slasher", "Driven" ], 5, 28, 4, 4, 99, 4000000, 1059, 788, 95, 2454, 1388, 228, 1 ],
+ [ "Curiel", "INT", [ "Shooter", "Driven" ], 4, 18, 6, 3, 50, 522812, 202, 153, 48, 1159, 818, 134, 1 ],
+ [ "Heavy Specialist Curiel", "INT", [ "Shooter", "Driven" ], 5, 28, 5, 4, 99, 4000000, 1092, 762, 99, 2470, 1359, 252, 1 ],
+ [ "Sengoku", "PSY", [ "Fighter", "Cerebral" ], 5, 30, 4, 4, 70, 1066998, 610, 278, 157, 2020, 758, 228, 1 ],
+ [ "Sengoku the Buddha", "PSY", [ "Fighter", "Cerebral" ], 6, 54, 4, 5, 99, 5000000, 1962, 711, 191, 3429, 1338, 389, 1 ],
+ [ "Galdino the Criminal, Mr. 3", "PSY", [ "Slasher", "Cerebral" ], 3, 12, 4, 2, 70, 1066998, 588, 333, 133, 1033, 687, 233, 1 ],
+ [ "Escapee Bentham, Mr. 2 Bon Clay", "DEX", [ "Fighter", "Free Spirit" ], 3, 12, 5, 1, 50, 392109, 178, 104, 32, 980, 529, 187, 1 ],
+ [ "Master Escape Artist Bentham, Mr. 2 Bon Clay", "DEX", [ "Fighter", "Free Spirit" ], 4, 20, 4, 2, 99, 3000000, 921, 460, 146, 1830, 978, 323, 1 ],
+ [ "Satori", "PSY", [ "Shooter", "Cerebral" ], 4, 15, 4, 2, 70, 1066998, 479, 190, 158, 1422, 576, 272, 1 ],
+ [ "Shura", "INT", "Striker", 4, 15, 4, 2, 70, 1066998, 330, 420, 93, 1030, 1002, 175, 1 ],
+ [ "Gedatsu", "QCK", "Fighter", 4, 15, 4, 2, 70, 1066998, 622, 378, 53, 2020, 703, 108, 1 ],
+ [ "Braham", "DEX", [ "Shooter", "Free Spirit" ], 3, 15, 5, 1, 70, 1066998, 374, 283, 96, 1202, 684, 202, 1 ],
+ [ "Yama", "STR", "Fighter", 3, 13, 6, 1, 50, 392109, 800, 228, 1, 1700, 608, 2, 1 ],
+ [ "Yellow White Beret, Skypiea Guard", "PSY", "Shooter", 2, 3, 6, 0, 20, 17456, 51, 23, 45, 330, 166, 89, 1 ],
+ [ "Black White Beret, Skypiea Guard", "INT", "Shooter", 2, 3, 6, 0, 20, 17456, 49, 38, 40, 320, 197, 80, 1 ],
+ [ "Yellow White Beret Captain, Skypiea Guard", "PSY", "Shooter", 3, 9, 5, 1, 50, 261406, 270, 128, 69, 845, 433, 198, 1 ],
+ [ "Black White Beret Captain, Skypiea Guard", "INT", "Shooter", 3, 9, 5, 1, 50, 261406, 259, 142, 65, 837, 498, 177, 1 ],
+ [ "Eneru's Elect: Red Guard, Skypiea Enforcer", "STR", "Slasher", 2, 8, 6, 0, 50, 261406, 388, 202, 87, 890, 503, 121, 1 ],
+ [ "Eneru's Elect: Blue Guard, Skypiea Enforcer", "QCK", "Slasher", 2, 8, 6, 0, 50, 261406, 438, 155, 90, 962, 413, 139, 1 ],
+ [ "Eneru's Elect: Green Guard, Skypiea Enforcer", "DEX", "Slasher", 2, 8, 6, 0, 50, 261406, 410, 179, 88, 926, 464, 128, 1 ],
+ [ "Eneru's Elect: Yellow Guard, Skypiea Enforcer", "PSY", "Slasher", 2, 8, 6, 0, 50, 261406, 377, 140, 110, 859, 396, 170, 1 ],
+ [ "Eneru's Elect: Black Guard, Skypiea Enforcer", "INT", "Slasher", 2, 8, 6, 0, 50, 261406, 390, 200, 80, 912, 501, 115, 1 ],
+ [ "Red Striker, Skypiea Enforcer", "STR", "Striker", 2, 6, 4, 0, 30, 57558, 12, 55, 25, 311, 445, 70, 1 ],
+ [ "Blue Striker, Skypiea Enforcer", "QCK", "Striker", 2, 6, 4, 0, 30, 57558, 20, 47, 27, 343, 420, 73, 1 ],
+ [ "Green Striker, Skypiea Enforcer", "DEX", "Striker", 2, 6, 4, 0, 30, 57558, 16, 51, 26, 325, 435, 71, 1 ],
+ [ "Yellow Striker, Skypiea Enforcer", "PSY", "Striker", 2, 6, 4, 0, 30, 57558, 12, 47, 30, 322, 418, 80, 1 ],
+ [ "Black Striker, Skypiea Enforcer", "INT", "Striker", 2, 6, 4, 0, 30, 57558, 16, 54, 24, 329, 442, 68, 1 ],
+ [ "Red Striker Elite, Skypiea Enforcer", "STR", "Striker", 3, 12, 5, 1, 60, 449516, 243, 359, 45, 510, 804, 157, 1 ],
+ [ "Blue Striker Elite, Skypiea Enforcer", "QCK", "Striker", 3, 12, 5, 1, 60, 449516, 278, 340, 48, 562, 772, 159, 1 ],
+ [ "Green Striker Elite, Skypiea Enforcer", "DEX", "Striker", 3, 12, 5, 1, 60, 449516, 265, 350, 46, 536, 788, 158, 1 ],
+ [ "Yellow Striker Elite, Skypiea Enforcer", "PSY", "Striker", 3, 12, 5, 1, 60, 449516, 242, 338, 53, 505, 760, 166, 1 ],
+ [ "Black Striker Elite, Skypiea Enforcer", "INT", "Striker", 3, 12, 5, 1, 60, 449516, 250, 358, 45, 520, 802, 156, 1 ],
+ [ "Red Nomad, Shandian Warrior", "STR", "Striker", 2, 6, 5, 0, 30, 57558, 79, 45, 26, 494, 302, 87, 1 ],
+ [ "Blue Nomad, Shandian Warrior", "QCK", "Striker", 2, 6, 5, 0, 30, 57558, 92, 36, 30, 538, 268, 94, 1 ],
+ [ "Green Nomad, Shandian Warrior", "DEX", "Striker", 2, 6, 5, 0, 30, 57558, 85, 40, 28, 517, 289, 89, 1 ],
+ [ "Red Nomad Adept, Shandian Warrior", "STR", "Striker", 3, 12, 5, 1, 60, 449516, 438, 228, 60, 864, 642, 162, 1 ],
+ [ "Blue Nomad Adept, Shandian Warrior", "QCK", "Striker", 3, 12, 5, 1, 60, 449516, 460, 187, 63, 948, 570, 172, 1 ],
+ [ "Green Nomad Adept, Shandian Warrior", "DEX", "Striker", 3, 12, 5, 1, 60, 449516, 449, 201, 61, 900, 606, 168, 1 ],
+ [ "Yellow Hunter, Shandian Warrior", "PSY", "Shooter", 2, 5, 4, 0, 30, 57558, 38, 20, 41, 210, 115, 201, 1 ],
+ [ "Black Hunter, Shandian Warrior", "INT", "Shooter", 2, 5, 4, 0, 30, 57558, 40, 25, 39, 214, 128, 196, 1 ],
+ [ "Yellow Hunter Adept, Shandian Warrior", "PSY", "Shooter", 3, 11, 4, 1, 60, 449516, 150, 60, 160, 502, 258, 365, 1 ],
+ [ "Black Hunter Adept, Shandian Warrior", "INT", "Shooter", 3, 11, 4, 1, 60, 449516, 152, 66, 153, 508, 271, 359, 1 ],
+ [ "Portgas D. Ace, Mt. Corvo's Brothers 3", "QCK", [ "Fighter", "Free Spirit" ], 4, 10, 4, 2, 35, 90778, 144, 66, 60, 632, 347, 248, 0.7 ],
+ [ "Portgas D. Ace, Mt. Corvo's Brothers 3, Cup of Sworn Brotherhood", "QCK", [ "Fighter", "Free Spirit" ], 5, 18, 4, 3, 70, 1066998, 571, 295, 200, 1072, 559, 385, 0.7 ],
+ [ "Bellmere", "DEX", "Shooter", 3, 9, 5, 1, 35, 136167, 60, 39, 68, 426, 291, 283, 1 ],
+ [ "Bellmere, Nami and Nojiko's Mother", "DEX", "Shooter", 4, 15, 4, 2, 70, 1066998, 377, 249, 240, 810, 483, 400, 1 ],
+ [ "Kaya", "PSY", [ "Shooter", "Cerebral" ], 3, 9, 6, 1, 35, 136167, 115, 50, 72, 370, 180, 330, 1.5 ],
+ [ "Kaya, A rich young girl from Syrup Village", "PSY", [ "Shooter", "Cerebral" ], 4, 15, 5, 2, 70, 1066998, 331, 151, 275, 405, 250, 550, 1.5 ],
+ [ "Hotori and Kotori", "INT", "Fighter", 3, 9, 6, 1, 35, 136167, 242, 74, 27, 1055, 455, 122, 1 ],
+ [ "Hotori and Kotori, Skypiea Vice Head Enforcers", "INT", "Fighter", 4, 15, 4, 2, 70, 1066998, 989, 385, 92, 1959, 601, 151, 1 ],
+ [ "Pell", "QCK", [ "Slasher", "Powerhouse" ], 3, 9, 6, 1, 35, 136167, 175, 70, 40, 1000, 427, 142, 1 ],
+ [ "Pell, The guardian falcon of Alabasta", "QCK", [ "Slasher", "Powerhouse" ], 4, 15, 4, 2, 70, 1066998, 941, 358, 104, 1585, 695, 186, 1 ],
+ [ "Chaka", "STR", [ "Slasher", "Powerhouse" ], 3, 9, 5, 1, 35, 136167, 173, 120, 21, 822, 615, 109, 1 ],
+ [ "Chaka, The guardian jackal of Alabasta", "STR", [ "Slasher", "Powerhouse" ], 4, 15, 4, 2, 70, 1066998, 740, 531, 81, 1160, 923, 180, 1 ],
+ [ "Sir Crocodile, the Strongest Prisoner, Mr. 0, Ex-Baroque Works Leader", "QCK", [ "Striker", "Cerebral" ], 3, 13, 5, 1, 50, 392109, 213, 108, 24, 1161, 565, 135, 1 ],
+ [ "Sir Crocodile, the Strongest Prisoner, Ex-Seven Warlords Member", "QCK", [ "Striker", "Cerebral" ], 4, 20, 4, 2, 99, 3000000, 1101, 500, 100, 2200, 1150, 188, 1 ],
+ [ "Daz Bones, Convict, Mr. 1", "INT", [ "Slasher", "Cerebral" ], 4, 16, 4, 2, 70, 1066998, 255, 156, 242, 1710, 1011, 55, 1 ],
+ [ "Sabo Mt. Corvo's Brothers 3", "PSY", [ "Striker", "Free Spirit" ], 4, 10, 5, 2, 35, 90778, 32, 32, 32, 522, 288, 286, 0.7 ],
+ [ "Sabo Mt. Corvo's Brothers 3, Cup of Sworn Brotherhood", "PSY", [ "Striker", "Free Spirit" ], 5, 18, 4, 3, 70, 1066998, 440, 233, 242, 951, 460, 450, 0.7 ],
+ [ "Nico Robin Tropical", "INT", [ "Fighter", "Cerebral" ], 4, 15, 6, 2, 99, 2000000, 368, 128, 96, 1910, 715, 292, 1 ],
+ [ "Heracles-un", "PSY", [ "Shooter", "Cerebral" ], 4, 30, 6, 2, 70, 1066998, 330, 89, 34, 1698, 569, 160, 1 ],
+ [ "Heracles-un, Hero of the Forest", "PSY", [ "Shooter", "Cerebral" ], 5, 50, 4, 3, 99, 5000000, 1622, 480, 108, 3188, 1010, 300, 1 ],
+ [ "Usopp-un", "PSY", "Shooter", 4, 10, 5, 1, 50, 261406, 444, 237, 47, 1080, 648, 144, 1 ],
+ [ "Usopp-un, Hercules' Student", "PSY", [ "Shooter", "Powerhouse" ], 5, 20, 4, 5, 99, 2000000, 1280, 648, 0, 2550, 700, -41, 1 ],
+ [ "Monkey D. Luffy, Merveille's Adventurer", "STR", [ "Fighter", "Free Spirit" ], 4, 17, 4, 3, 70, 1066998, 242, 148, 28, 1505, 744, 106, 1 ],
+ [ "Monkey D. Luffy, Straw Hat Pirates' Attack", "STR", [ "Fighter", "Free Spirit" ], 5, 27, 8, 4, 99, 4000000, 1438, 676, 72, 2722, 1411, 176, 1 ],
+ [ "Sanji, Merveille's Adventurer", "INT", [ "Fighter", "Powerhouse" ], 4, 17, 4, 3, 70, 1066998, 268, 115, 32, 1545, 698, 122, 1 ],
+ [ "Sanji, Straw Hat Pirates' Attack", "INT", [ "Fighter", "Powerhouse" ], 5, 27, 5, 4, 99, 4000000, 1471, 630, 86, 2834, 1224, 226, 1 ],
+ [ "Nami, Merveille's Adventurer", "QCK", [ "Striker", "Cerebral" ], 4, 17, 5, 3, 70, 1066998, 190, 81, 57, 1051, 602, 230, 1 ],
+ [ "Nami and Billy the Thunder Bird", "QCK", [ "Striker", "Cerebral" ], 5, 27, 6, 4, 99, 4000000, 979, 540, 191, 1980, 1000, 455, 1 ],
+ [ "Brook, Merveille's Adventurer", "PSY", [ "Slasher", "Free Spirit" ], 4, 17, 6, 3, 70, 1066998, 249, 101, 40, 1530, 684, 133, 1 ],
+ [ "Brook, Straw Hat Pirates' Attack", "PSY", [ "Slasher", "Free Spirit" ], 5, 27, 4, 4, 99, 4000000, 1461, 636, 100, 2788, 1243, 234, 1 ],
+ [ "Chopper, Merveille's Adventurer", "DEX", [ "Shooter", "Cerebral" ], 4, 17, 5, 3, 70, 1066998, 196, 98, 51, 1170, 624, 212, 1 ],
+ [ "Chopper, Straw Hat Pirates' Attack", "DEX", [ "Shooter", "Cerebral" ], 5, 27, 4, 4, 99, 4000000, 1110, 571, 179, 2212, 1099, 368, 1 ],
+ [ "Shanks, Black Clad Redhead", "PSY", [ "Slasher", "Cerebral" ], 5, 30, 4, 4, 70, 1066998, 478, 285, 185, 1650, 780, 291, 1 ],
+ [ "Shanks, Black Clad Emperor", "PSY", [ "Slasher", "Cerebral" ], 6, 55, 5, 5, 99, 5000000, 1537, 736, 261, 3140, 1400, 418, 1 ],
+ [ "Nico Robin Cherry Blossoms Falling", "DEX", [ "Fighter", "Cerebral" ], 4, 11, 4, 2, 50, 392109, 171, 55, 65, 976, 328, 252, 1 ],
+ [ "Nico Robin Cherry Blossoms in Full Bloom", "DEX", [ "Fighter", "Cerebral" ], 5, 19, 6, 3, 99, 3000000, 913, 271, 209, 1925, 747, 384, 1 ],
+ [ "Brook Cherry Blossom Hair", "QCK", [ "Slasher", "Free Spirit" ], 4, 12, 5, 2, 50, 392109, 211, 108, 40, 1267, 448, 163, 1 ],
+ [ "Brook Cherry Blossom Melody", "QCK", [ "Slasher", "Free Spirit" ], 5, 20, 4, 3, 99, 3000000, 1199, 379, 131, 2311, 885, 281, 1 ],
+ [ "Nami Blossom Cloud", "DEX", [ "Shooter", "Cerebral" ], 4, 12, 5, 2, 50, 392109, 127, 53, 73, 812, 303, 287, 1 ],
+ [ "Nami Blossom Climate", "DEX", [ "Shooter", "Cerebral" ], 5, 20, 4, 3, 99, 3000000, 750, 247, 241, 1783, 670, 445, 1 ],
+ [ "Domino", "PSY", [ "Fighter", "Cerebral" ], 3, 13, 4, 1, 50, 392109, 32, 20, 80, 713, 366, 318, 1 ],
+ [ "Domino, Impel Down Vice Head Jailer", "PSY", [ "Fighter", "Cerebral" ], 4, 20, 5, 2, 99, 3000000, 634, 301, 265, 1800, 694, 449, 1 ],
+ [ "Minorhinoceros", "STR", [ "Striker", "Powerhouse" ], 3, 30, 6, 0, 70, 1066998, 1055, 655, 0, 2122, 815, -250, 1 ],
+ [ "Basilisk", "DEX", [ "Fighter", "Powerhouse" ], 3, 12, 4, 1, 70, 1066998, 612, 289, 31, 1525, 644, 128, 1 ],
+ [ "Ohm", "STR", [ "Slasher", "Cerebral" ], 4, 16, 4, 2, 70, 1066998, 770, 480, -600, 2200, 1050, -600, 1 ],
+ [ "Nola, Giant Snake", "PSY", [ "Fighter", "Powerhouse" ], 3, 20, 4, 1, 50, 392109, 1000, 180, 71, 2100, 455, 101, 0.7 ],
+ [ "Wyper", "DEX", [ "Shooter", "Free Spirit" ], 3, 9, 4, 2, 35, 136167, 212, 105, 20, 981, 567, 99, 1 ],
+ [ "Wyper, Descendant of Great Warrior Calgara", "DEX", [ "Shooter", "Free Spirit" ], 4, 15, 4, 3, 70, 1066998, 914, 490, 70, 1598, 804, 155, 1 ],
+ [ "Eneru", "PSY", [ "Shooter", "Driven" ], 3, 12, 4, 2, 50, 392109, 177, 141, 58, 951, 615, 185, 1 ],
+ [ "Kami Eneru", "PSY", [ "Shooter", "Driven" ], 4, 20, 4, 3, 99, 3000000, 880, 542, 143, 1530, 1290, 318, 1 ],
+ [ "Monkey D. Luffy, Mt. Corvo's Brothers 3", "STR", [ "Fighter", "Free Spirit" ], 4, 10, 4, 2, 35, 136167, 100, 28, 77, 551, 267, 261, 1 ],
+ [ "Monkey D. Luffy, Mt. Corvo's Brothers 3, Cup of Sworn Brotherhood", "STR", [ "Fighter", "Free Spirit" ], 5, 18, 4, 3, 70, 1778330, 479, 209, 231, 1058, 541, 397, 1 ],
+ [ "Sadie", "INT", [ "Striker", "Free Spirit" ], 3, 12, 4, 1, 50, 392109, 31, 60, 66, 681, 550, 263, 1 ],
+ [ "Sadie, Impel Down Chief Jailer", "INT", [ "Striker", "Free Spirit" ], 4, 20, 6, 2, 99, 3000000, 618, 488, 202, 1505, 997, 388, 1 ],
+ [ "Minokoala", "STR", [ "Fighter", "Powerhouse" ], 3, 30, 5, 0, 70, 1066998, 1400, 602, 0, 1977, 812, -100, 1 ],
+ [ "Manticore", "QCK", [ "Fighter", "Powerhouse" ], 3, 15, 4, 1, 70, 1066998, 313, 245, 24, 999, 770, 112, 1 ],
+ [ "Roronoa Zoro, Merveille's Adventurer", "DEX", [ "Slasher", "Driven" ], 4, 17, 5, 3, 70, 1066998, 270, 124, 23, 1585, 715, 98, 1 ],
+ [ "Roronoa Zoro, Straw Hat Pirates' Attack", "DEX", [ "Slasher", "Driven" ], 5, 27, 4, 4, 99, 4000000, 1531, 646, 60, 2900, 1321, 171, 1 ],
+ [ "Usopp, Merveille's Adventurer", "QCK", "Shooter", 4, 17, 6, 3, 70, 1066998, 224, 90, 47, 1222, 593, 208, 1 ],
+ [ "Usopp, Straw Hat Pirates' Attack", "QCK", "Shooter", 5, 27, 5, 4, 99, 4000000, 1167, 542, 174, 2301, 954, 376, 1 ],
+ [ "Nico Robin, Merveille's Adventurer", "INT", [ "Fighter", "Cerebral" ], 4, 17, 4, 3, 70, 1066998, 213, 96, 45, 1147, 626, 216, 1 ],
+ [ "Nico Robin, Straw Hat Pirates' Attack", "INT", [ "Fighter", "Cerebral" ], 5, 27, 4, 4, 99, 4000000, 1098, 551, 180, 2076, 1099, 400, 1 ],
+ [ "Franky, Merveille's Adventurer", "STR", [ "Shooter", "Free Spirit" ], 4, 17, 6, 3, 70, 1066998, 244, 140, 21, 1590, 738, 95, 1 ],
+ [ "Franky, Straw Hat Pirates' Attack", "STR", [ "Shooter", "Free Spirit" ], 5, 27, 5, 4, 99, 4000000, 1525, 660, 50, 2801, 1395, 161, 1 ],
+ [ "Portgas D. Ace, Black Clad Flame Fist", "DEX", [ "Shooter", "Free Spirit" ], 5, 30, 6, 4, 70, 1066998, 515, 264, 152, 1922, 758, 253, 1 ],
+ [ "Portgas D. Ace, Black Clad Division Commander", "DEX", [ "Shooter", "Free Spirit" ], 6, 55, 4, 5, 99, 5000000, 1877, 702, 214, 3818, 1352, 321, 1 ],
+ [ "Porche", "PSY", "Shooter", 3, 10, 6, 1, 50, 392109, 33, 29, 58, 536, 338, 300, 1 ],
+ [ "Capote", "QCK", "Striker", 3, 10, 5, 1, 50, 392109, 124, 48, 36, 1188, 482, 139, 1 ],
+ [ "Hamburg", "DEX", [ "Striker", "Powerhouse" ], 3, 10, 5, 1, 50, 392109, 103, 58, 32, 1024, 620, 122, 1 ],
+ [ "Pickles", "QCK", [ "Fighter", "Powerhouse" ], 3, 10, 4, 1, 50, 392109, 130, 51, 25, 1202, 603, 98, 1 ],
+ [ "Big Bun", "STR", [ "Slasher", "Powerhouse" ], 3, 15, 6, 1, 70, 1066998, 180, 105, 2, 1895, 850, 3, 1 ],
+ [ "Foxy", "INT", [ "Fighter", "Free Spirit" ], 3, 10, 5, 2, 35, 136167, 106, 51, 30, 788, 433, 175, 1 ],
+ [ "The Silver Fox Foxy", "INT", [ "Fighter", "Free Spirit" ], 4, 18, 5, 3, 70, 1066998, 725, 373, 144, 1212, 698, 266, 1 ],
+ [ "Monkey D. Luffy, Davy Back Fight: Afro", "STR", [ "Fighter", "Powerhouse" ], 3, 12, 6, 1, 50, 392109, 465, 232, 36, 984, 585, 110, 1.5 ],
+ [ "Monkey D. Luffy, Davy Back Fight: Combat", "STR", [ "Fighter", "Powerhouse" ], 4, 20, 4, 2, 99, 3000000, 862, 492, 70, 1978, 1170, 220, 1.5 ],
+ [ "Usopp, Davy Back Fight: Cornerman", "DEX", "Shooter", 4, 13, 5, 2, 70, 1066998, 61, 30, 75, 1361, 354, 310, 1 ],
+ [ "Tony Tony Chopper, Davy Back Fight: Mask", "PSY", [ "Fighter", "Cerebral" ], 3, 10, 4, 2, 70, 1066998, 83, 27, 70, 1176, 483, 280, 0.7 ],
+ [ "Aokiji", "INT", [ "Striker", "Free Spirit" ], 4, 30, 4, 2, 70, 1066998, 232, 160, 32, 1142, 712, 157, 1 ],
+ [ "Aokiji, Ice Man", "INT", [ "Striker", "Free Spirit" ], 5, 50, 4, 3, 99, 5000000, 1093, 644, 122, 2465, 1435, 251, 1 ],
+ [ "Tea Time Nami", "INT", [ "Striker", "Cerebral" ], 4, 18, 4, 2, 99, 2000000, 454, 133, 50, 1473, 703, 373, 0.7 ],
+ [ "Monkey D. Luffy, Voyage Log: Straw Hat Pirates", "STR", [ "Fighter", "Free Spirit" ], 5, 30, 4, 3, 70, 1066998, 390, 290, 150, 1559, 840, 290, 1.5 ],
+ [ "Monkey D. Luffy, Voyage Dream: Pirate King", "STR", [ "Fighter", "Free Spirit" ], 6, 55, 4, 4, 99, 5000000, 1490, 776, 250, 3440, 1430, 351, 1 ],
+ [ "Roronoa Zoro, Voyage Log: Straw Hat Pirates", "QCK", [ "Slasher", "Driven" ], 4, 12, 4, 2, 50, 392109, 230, 110, 35, 1388, 651, 132, 1 ],
+ [ "Roronoa Zoro, Voyage Dream: Master Swordsman", "QCK", [ "Slasher", "Driven" ], 5, 20, 4, 3, 99, 3000000, 1329, 777, 90, 2250, 1118, 201, 1 ],
+ [ "Genbou", "STR", [ "Shooter", "Free Spirit" ], 3, 15, 4, 1, 70, 1066998, 271, 91, 15, 1855, 711, 54, 0.7 ],
+ [ "Kamakiri", "QCK", [ "Striker", "Free Spirit" ], 3, 15, 5, 1, 70, 1066998, 195, 84, 30, 1669, 691, 101, 0.7 ],
+ [ "Raki", "INT", "Shooter", 4, 18, 4, 2, 99, 3000000, 158, 55, 51, 1544, 668, 460, 0.7 ],
+ [ "Aisa", "PSY", "Fighter", 3, 11, 5, 2, 50, 392109, 32, 15, 80, 223, 109, 475, 0.7 ],
+ [ "Nojiko", "PSY", [ "Striker", "Cerebral" ], 3, 9, 5, 1, 35, 136167, 125, 57, 60, 398, 277, 293, 1 ],
+ [ "Nojiko, Nami's Sister", "PSY", [ "Fighter", "Cerebral" ], 4, 15, 6, 2, 70, 1066998, 330, 233, 253, 709, 382, 438, 1 ],
+ [ "Crocus", "INT", [ "Striker", "Cerebral" ], 3, 9, 4, 1, 35, 136167, 202, 60, 41, 886, 301, 203, 1 ],
+ [ "Crocus, Twin Cape Lighthouse Keeper", "INT", [ "Striker", "Cerebral" ], 4, 15, 5, 2, 70, 1066998, 820, 249, 160, 1224, 509, 320, 1 ],
+ [ "Koza", "QCK", "Slasher", 3, 9, 5, 1, 35, 136167, 179, 69, 33, 939, 423, 158, 1 ],
+ [ "Koza, Rebel Leader", "QCK", "Slasher", 4, 15, 4, 2, 70, 1066998, 872, 375, 114, 1440, 681, 225, 1 ],
+ [ "Crimson Hime Turtle", "STR", "Booster", 6, 20, 6, 0, 1, 0, 2000, 100, 50, 2000, 100, 50, 1 ],
+ [ "Azure Hime Turtle", "QCK", "Booster", 6, 20, 6, 0, 1, 0, 2000, 100, 50, 2000, 100, 50, 1 ],
+ [ "Jade Hime Turtle", "DEX", "Booster", 6, 20, 6, 0, 1, 0, 2000, 100, 50, 2000, 100, 50, 1 ],
+ [ "Amber Hime Turtle", "PSY", "Booster", 6, 20, 6, 0, 1, 0, 2000, 100, 50, 2000, 100, 50, 1 ],
+ [ "Onyx Hime Turtle", "INT", "Booster", 6, 20, 6, 0, 1, 0, 2000, 100, 50, 2000, 100, 50, 1 ],
+ [ "Tony Tony Chopper, Voyage Log: Straw Hat Pirates", "STR", [ "Fighter", "Powerhouse" ], 4, 12, 4, 2, 50, 392109, 220, 95, 46, 1324, 589, 186, 0.7 ],
+ [ "Tony Tony Chopper, Voyage Dream: Great Doctor", "STR", [ "Fighter", "Powerhouse" ], 5, 20, 6, 3, 99, 3000000, 1280, 542, 151, 1980, 1002, 301, 0.7 ],
+ [ "Buggy, Pirate Apprentice", "INT", [ "Slasher", "Driven" ], 3, 12, 6, 1, 50, 392109, 155, 74, 42, 872, 411, 162, 1 ],
+ [ "Buggy, Roger Pirates", "INT", [ "Slasher", "Driven" ], 4, 19, 5, 2, 99, 3000000, 813, 358, 123, 1602, 709, 290, 1 ],
+ [ "Shanks, Pirate Apprentice", "PSY", [ "Slasher", "Free Spirit" ], 3, 12, 4, 1, 50, 392109, 155, 74, 42, 903, 488, 230, 1 ],
+ [ "Shanks, Roger Pirates", "PSY", [ "Slasher", "Free Spirit" ], 4, 18, 6, 3, 99, 3000000, 825, 440, 193, 1964, 920, 354, 1 ],
+ [ "Eneru, 200,000,000 Volt Amaru", "QCK", [ "Striker", "Driven" ], 4, 30, 6, 2, 70, 1066998, 155, 163, 38, 1369, 724, 128, 1 ],
+ [ "Eneru, Lightning Incarnate, 200,000,000 Volt Amaru", "QCK", [ "Striker", "Driven" ], 5, 50, 5, 3, 99, 5000000, 1288, 670, 90, 2524, 1470, 234, 1 ],
+ [ "Sanji Voyage Log: Straw Hat Pirates", "DEX", [ "Fighter", "Powerhouse" ], 4, 12, 4, 2, 50, 392109, 240, 103, 36, 1462, 620, 134, 0.7 ],
+ [ "Sanji Voyage Dream: All Blue", "DEX", [ "Fighter", "Powerhouse" ], 5, 20, 6, 3, 99, 3000000, 1413, 577, 100, 2350, 1052, 208, 0.7 ],
+ [ "Pirate Zeff", "DEX", [ "Fighter", "Powerhouse" ], 3, 13, 5, 1, 50, 392109, 185, 112, 24, 1210, 663, 128, 1 ],
+ [ "Red-Leg Zeff, Cook Pirates Captain", "DEX", [ "Fighter", "Powerhouse" ], 4, 20, 4, 2, 99, 3000000, 1152, 599, 81, 2000, 1088, 258, 1 ],
+ [ "Gangster Patty", "STR", "Shooter", 3, 10, 4, 1, 50, 522812, 155, 120, 25, 1080, 648, 132, 0.7 ],
+ [ "Gangster Carne", "QCK", "Slasher", 3, 10, 6, 1, 50, 522812, 153, 91, 35, 1054, 571, 162, 0.7 ],
+ [ "Hiking Bear", "INT", "Fighter", 2, 7, 5, 0, 35, 90778, 129, 32, 8, 1410, 225, 30, 0.7 ],
+ [ "Purinpurin", "PSY", "Shooter", 2, 7, 6, 0, 35, 90778, 38, 14, 29, 544, 194, 193, 0.7 ],
+ [ "Brook Voyage Log: Straw Hat Pirates", "DEX", [ "Slasher", "Free Spirit" ], 4, 12, 6, 2, 50, 392109, 208, 99, 29, 1326, 603, 168, 0.7 ],
+ [ "Brook Voyage Dream: Promised Meeting", "DEX", [ "Slasher", "Free Spirit" ], 5, 20, 6, 3, 99, 3000000, 1276, 560, 132, 2117, 1009, 279, 0.7 ],
+ [ "Zambai", "PSY", "Shooter", 3, 16, 4, 2, 70, 1066998, 230, 90, 48, 1580, 702, 168, 1 ],
+ [ "Demolisher Axeman", "STR", [ "Slasher", "Powerhouse" ], 3, 20, 6, 1, 60, 899032, 1200, 500, 15, 1500, 900, 35, 1.5 ],
+ [ "Demolisher Spearman", "STR", [ "Striker", "Powerhouse" ], 3, 20, 6, 1, 60, 899032, 1200, 500, 16, 1700, 800, 38, 1.5 ],
+ [ "Demolisher Gunner", "STR", [ "Shooter", "Powerhouse" ], 3, 20, 6, 1, 60, 899032, 1200, 500, 14, 1300, 1000, 32, 1.5 ],
+ [ "Street Punk: Brawler, Red Bounty Hunter", "STR", "Fighter", 3, 13, 6, 1, 60, 674274, 102, 85, 28, 1158, 790, 90, 1 ],
+ [ "Street Punk: Brawler, Green Bounty Hunter", "DEX", "Fighter", 3, 13, 6, 1, 60, 674274, 108, 75, 32, 1175, 754, 102, 1 ],
+ [ "Street Punk: Blade, Blue Bounty Hunter", "QCK", "Slasher", 3, 13, 5, 1, 60, 674274, 153, 66, 40, 1215, 653, 128, 1 ],
+ [ "Street Punk: Blade, Red Bounty Hunter", "STR", "Slasher", 3, 13, 5, 1, 60, 674274, 149, 73, 33, 1193, 690, 115, 1 ],
+ [ "Street Punk: Bullet, Green Bounty Hunter", "DEX", "Shooter", 3, 13, 5, 1, 60, 674274, 92, 45, 51, 938, 500, 255, 1 ],
+ [ "Street Punk: Bullet, Yellow Bounty Hunter", "PSY", "Shooter", 3, 13, 5, 1, 60, 674274, 86, 38, 55, 900, 467, 274, 1 ],
+ [ "Street Punk: Nails, Yellow Bounty Hunter", "PSY", "Striker", 3, 13, 4, 1, 60, 674274, 71, 102, 33, 878, 854, 119, 1 ],
+ [ "Street Punk: Nails, Black Bounty Hunter", "INT", "Striker", 3, 13, 4, 1, 60, 674274, 71, 108, 29, 877, 890, 107, 1 ],
+ [ "Street Punk: Gatling, Black Bounty Hunter", "INT", "Shooter", 3, 13, 6, 1, 60, 674274, 133, 90, 3, 1556, 765, 15, 1 ],
+ [ "Street Punk: Gatling, Blue Bounty Hunter", "QCK", "Shooter", 3, 13, 6, 1, 60, 674274, 150, 84, 5, 1602, 745, 16, 1 ],
+ [ "Tilestone", "STR", [ "Shooter", "Powerhouse" ], 3, 12, 4, 2, 70, 1066998, 153, 98, 30, 1521, 800, 101, 1 ],
+ [ "Franky, Franky Family", "INT", "Fighter", 3, 17, 5, 2, 70, 1066998, 203, 103, 23, 1712, 831, 85, 1 ],
+ [ "Kaku, Cipher Pol No. 9", "QCK", [ "Slasher", "Powerhouse" ], 3, 12, 5, 2, 50, 392109, 175, 80, 36, 1224, 643, 120, 1 ],
+ [ "Kaku: Six Powers, Cipher Pol No. 9", "QCK", [ "Slasher", "Powerhouse" ], 4, 20, 4, 3, 99, 3000000, 1144, 577, 93, 2523, 1000, 196, 1 ],
+ [ "Rob Lucci, Cipher Pol No. 9", "STR", [ "Fighter", "Powerhouse" ], 3, 12, 4, 2, 50, 392109, 121, 153, 20, 1121, 792, 64, 1 ],
+ [ "Rob Lucci: Six Powers, Cipher Pol No. 9", "STR", [ "Fighter", "Powerhouse" ], 4, 20, 6, 3, 99, 3000000, 1064, 743, 51, 2284, 1289, 134, 1 ],
+ [ "Camie", "QCK", "Fighter", 3, 12, 4, 1, 50, 392109, 90, 23, 62, 960, 352, 273, [ 0.7, 1, 0.7 ] ],
+ [ "Camie, Takoyaki Shop Clerk", "QCK", "Fighter", 4, 18, 5, 2, 99, 3000000, 900, 295, 231, 1731, 698, 455, 0.7 ],
+ [ "Pappagu", "INT", "Fighter", 3, 12, 5, 1, 50, 392109, 77, 30, 77, 895, 505, 214, 0.7 ],
+ [ "Hatchan, Takoyaki Shop Manager", "PSY", [ "Slasher", "Powerhouse" ], 3, 16, 6, 2, 99, 3000000, 134, 88, 41, 1788, 888, 187, 0.7 ],
+ [ "Doma", "QCK", "Slasher", 4, 18, 4, 3, 70, 1066998, 89, 144, 43, 1098, 733, 187, 0.7 ],
+ [ "Bohemian Knight Doma", "QCK", "Slasher", 5, 29, 4, 4, 99, 4000000, 1020, 695, 150, 2134, 1268, 328, 0.7 ],
+ [ "DeCalvan Brothers", "DEX", "Fighter", 4, 18, 6, 3, 70, 1066998, 240, 89, 28, 1880, 668, 73, 0.7 ],
+ [ "DeCalvan Brothers, Brothers' Bond", "DEX", "Fighter", 5, 29, 5, 4, 99, 4000000, 1824, 602, 50, 3330, 1183, 158, 0.7 ],
+ [ "Squard", "PSY", [ "Striker", "Powerhouse" ], 4, 18, 5, 3, 70, 1066998, 198, 190, 0, 1351, 810, 0, 0.7 ],
+ [ "Maelstrom Spider Squard", "PSY", [ "Striker", "Powerhouse" ], 5, 29, 5, 4, 99, 4000000, 960, 755, -1, 2755, 1434, -150, 0.7 ],
+ [ "Whitey Bay", "INT", [ "Slasher", "Driven" ], 4, 18, 5, 3, 70, 1066998, 109, 93, 44, 1140, 600, 223, 0.7 ],
+ [ "Ice Witch Whitey Bay", "INT", [ "Slasher", "Driven" ], 5, 29, 5, 4, 99, 4000000, 1094, 561, 171, 2278, 993, 399, 0.7 ],
+ [ "Little Oars Jr.", "STR", [ "Shooter", "Powerhouse" ], 4, 20, 6, 3, 70, 1066998, 251, 166, 1, 1900, 734, 3, 0.7 ],
+ [ "Little Oars Jr., Charging!", "STR", [ "Shooter", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1533, 801, 2, 4000, 1300, 9, 0.7 ],
+ [ "Marco Whitebeard 1st Div. Commander", "QCK", [ "Fighter", "Powerhouse" ], 5, 30, 4, 4, 50, 392109, 455, 268, 177, 1612, 777, 303, 0.7 ],
+ [ "Marco the Phoenix Whitebeard 1st Div. Commander", "QCK", [ "Fighter", "Powerhouse" ], 6, 55, 4, 5, 99, 5000000, 1555, 734, 258, 3013, 1402, 455, 0.7 ],
+ [ "Nami Voyage Log: Straw Hat Pirates", "INT", [ "Striker", "Cerebral" ], 4, 12, 4, 2, 50, 392109, 143, 65, 50, 998, 498, 254, 0.7 ],
+ [ "Nami Voyage Dream: World Map", "INT", [ "Striker", "Cerebral" ], 5, 20, 4, 3, 99, 3000000, 922, 434, 198, 1890, 900, 380, 0.7 ],
+ [ "Iron Mask Duval", "DEX", [ "Shooter", "Driven" ], 3, 10, 4, 1, 35, 226945, 132, 133, 25, 725, 505, 77, 1 ],
+ [ "Duval, Flying Fish Riders Leader", "DEX", [ "Shooter", "Driven" ], 4, 30, 5, 2, 60, 1123790, 664, 424, 44, 1448, 723, 103, 1 ],
+ [ "Duval, Rosy Life Riders Leader", "DEX", [ "Shooter", "Free Spirit" ], 5, 50, 8, 3, 99, 5000000, 1420, 658, 103, 2608, 1113, 308, 1 ],
+ [ "Arlong the Pirate", "STR", [ "Slasher", "Powerhouse" ], 3, 12, 6, 1, 50, 392109, 159, 144, 14, 1332, 700, 89, 1 ],
+ [ "Arlong, Sun Pirates", "STR", [ "Slasher", "Powerhouse" ], 4, 20, 4, 2, 99, 3000000, 1261, 633, 45, 2020, 1389, 171, 1 ],
+ [ "Kuroobi, Sun Pirates", "STR", [ "Fighter", "Powerhouse" ], 3, 10, 6, 1, 50, 392109, 160, 103, 9, 1233, 744, 70, 1 ],
+ [ "Choo, Sun Pirates", "INT", [ "Shooter", "Powerhouse" ], 3, 10, 5, 1, 50, 392109, 75, 72, 22, 1002, 552, 178, 1 ],
+ [ "Monkey D. Luffy Swim Ring", "QCK", "Fighter", 4, 15, 6, 2, 99, 2000000, 144, 69, 31, 2232, 933, 242, 1 ],
+ [ "Usopp Voyage Log: Straw Hat Pirates", "QCK", "Striker", 4, 12, 6, 2, 50, 392109, 155, 67, 47, 1085, 513, 235, 0.7 ],
+ [ "Usopp Voyage Dream: Brave Sea Warrior", "QCK", "Striker", 5, 20, 4, 3, 99, 3000000, 1024, 468, 185, 2012, 938, 344, 0.7 ],
+ [ "Nami Holiday", "PSY", [ "Striker", "Cerebral" ], 4, 15, 5, 2, 99, 2000000, 70, 30, 100, 1334, 673, 396, 0.7 ],
+ [ "Nefeltari Vivi, Princess of Alabasta Kingdom", "PSY", [ "Striker", "Free Spirit" ], 3, 9, 6, 1, 35, 136167, 11, 11, 11, 285, 104, 225, 1 ],
+ [ "Nefeltari Vivi, Sand-Sand Band Sub-Leader", "PSY", [ "Fighter", "Free Spirit" ], 4, 15, 6, 2, 70, 1066998, 243, 51, 187, 593, 269, 488, 1 ],
+ [ "Koza, Alabasta Citizen", "QCK", [ "Striker", "Free Spirit" ], 3, 9, 5, 1, 35, 136167, 53, 53, 3, 503, 274, 151, 1 ],
+ [ "Koza, Sand-Sand Band Leader", "QCK", [ "Striker", "Free Spirit" ], 4, 15, 4, 2, 70, 1066998, 445, 230, 123, 1000, 503, 341, 1 ],
+ [ "Nefeltari Cobra, King of Alabasta Kingdom", "PSY", "Fighter", 3, 15, 5, 2, 70, 1066998, 523, 294, 31, 1402, 571, 211, 1 ],
+ [ "Sabo", "PSY", [ "Free Spirit", "Striker" ], 5, 30, 5, 4, 70, 1066998, 369, 279, 169, 1498, 821, 305, 1.5 ],
+ [ "Sabo the Revolutionary", "PSY", [ "Free Spirit", "Striker" ], 6, 55, 4, 5, 99, 5000000, 1440, 752, 252, 2985, 1422, 451, 1.5 ],
+ [ "Koala", "DEX", [ "Fighter", "Free Spirit" ], 4, 18, 4, 3, 70, 1066998, 94, 122, 48, 996, 644, 226, 1.5 ],
+ [ "Koala the Revolutionary", "DEX", [ "Fighter", "Free Spirit" ], 5, 29, 4, 4, 99, 4000000, 931, 600, 185, 1934, 1212, 392, 1.5 ],
+ [ "Hack", "STR", [ "Fighter", "Powerhouse" ], 4, 18, 4, 3, 70, 1066998, 188, 136, 21, 1241, 721, 151, 1.5 ],
+ [ "Hack, Revolutionary Army", "STR", [ "Fighter", "Powerhouse" ], 5, 29, 5, 4, 99, 4000000, 1185, 668, 115, 2387, 1324, 259, 1.5 ],
+ [ "Emporio Ivankov, New Kama Karate Master", "INT", [ "Free Spirit", "Fighter" ], 4, 18, 4, 3, 70, 1066998, 206, 99, 32, 1343, 653, 157, 1.5 ],
+ [ "Emporio Ivankov, Revolutionary Army", "INT", [ "Free Spirit", "Fighter" ], 5, 29, 7, 4, 99, 4000000, 1285, 593, 142, 2774, 1212, 241, 1.5 ],
+ [ "Inazuma", "QCK", [ "Slasher", "Cerebral" ], 4, 18, 4, 3, 70, 1066998, 179, 58, 47, 1300, 449, 232, 1.5 ],
+ [ "Inazuma the Revolutionary", "QCK", [ "Slasher", "Cerebral" ], 5, 29, 6, 4, 99, 4000000, 1244, 400, 199, 2559, 833, 380, 1.5 ],
+ [ "Nico Robin Voyage Log: Straw Hat Pirates", "PSY", [ "Fighter", "Cerebral" ], 4, 12, 6, 2, 50, 392109, 155, 62, 58, 1032, 484, 262, 1 ],
+ [ "Nico Robin Voyage Dream: 100-Year Void", "PSY", [ "Fighter", "Cerebral" ], 5, 20, 6, 3, 99, 3000000, 970, 423, 220, 1924, 857, 390, 1 ],
+ [ "Ice Cream-Loving Nami", "DEX", [ "Striker", "Cerebral" ], 4, 12, 6, 1, 50, 392109, 141, 43, 53, 966, 422, 242, 1 ],
+ [ "Ice Cream-Loving Nami, Lemon Ice Cream", "DEX", [ "Striker", "Cerebral" ], 5, 20, 4, 2, 99, 3000000, 900, 366, 200, 1802, 768, 402, 1 ],
+ [ "Ice Cream-Loving Robin", "PSY", [ "Fighter", "Cerebral" ], 4, 12, 6, 1, 50, 392109, 147, 61, 46, 988, 491, 218, 0.7 ],
+ [ "Ice Cream-Loving Robin, Chocolate Ice Cream", "PSY", [ "Fighter", "Cerebral" ], 5, 20, 4, 2, 99, 3000000, 943, 443, 172, 1903, 842, 361, 1 ],
+ [ "Ice Cream-Loving Perona", "INT", [ "Shooter", "Driven" ], 4, 12, 5, 1, 50, 392109, 99, 67, 52, 901, 527, 233, 1 ],
+ [ "Ice Cream-Loving Perona, Strawberry Ice Cream", "INT", [ "Shooter", "Driven" ], 5, 20, 4, 2, 99, 3000000, 848, 462, 182, 1689, 877, 385, 1 ],
+ [ "Vivi's Breather", "QCK", [ "Slasher", "Free Spirit" ], 4, 12, 4, 2, 70, 1066998, 102, 37, 91, 1028, 497, 343, 1 ],
+ [ "Calgara", "STR", [ "Free Spirit", "Striker" ], 3, 12, 6, 1, 50, 392109, 94, 115, 0, 1203, 692, 0, 1 ],
+ [ "Calgara, Great Shandia Warrior", "STR", [ "Free Spirit", "Striker" ], 4, 20, 4, 2, 99, 3000000, 1145, 633, 0, 2401, 1300, 90, 1 ],
+ [ "Mont Blanc Noland", "INT", [ "Slasher", "Cerebral" ], 3, 12, 5, 1, 50, 392109, 102, 74, 49, 1028, 502, 212, 1 ],
+ [ "Mont Blanc Noland, Lvneel Kingdom Explorer", "INT", [ "Slasher", "Cerebral" ], 4, 20, 4, 2, 99, 3000000, 949, 442, 170, 1982, 890, 326, 1 ],
+ [ "Naginata Corporal, Navy HQ", "DEX", "Striker", 2, 7, 5, 0, 35, 90778, 70, 32, 21, 601, 301, 98, 1 ],
+ [ "Rifle Corporal, Navy HQ", "QCK", "Shooter", 2, 7, 6, 0, 35, 90778, 58, 28, 28, 498, 286, 121, 1 ],
+ [ "Saber Corporal, Navy HQ", "PSY", "Slasher", 2, 7, 5, 0, 35, 90778, 51, 34, 22, 466, 330, 111, 1 ],
+ [ "Bazooka Corporal, Navy HQ", "STR", "Shooter", 2, 7, 4, 0, 35, 90778, 62, 50, 14, 598, 404, 64, 1 ],
+ [ "Knuckle Corporal, Navy HQ", "INT", "Fighter", 2, 7, 6, 0, 35, 90778, 55, 48, 22, 522, 392, 82, 1 ],
+ [ "Naginata Major, Navy HQ", "DEX", "Striker", 3, 13, 6, 1, 70, 1066998, 554, 250, 61, 1358, 645, 170, 1 ],
+ [ "Rifle Major, Navy HQ", "QCK", "Shooter", 3, 13, 5, 1, 70, 1066998, 444, 244, 96, 1002, 568, 259, 1 ],
+ [ "Saber Major, Navy HQ", "PSY", "Slasher", 3, 13, 6, 1, 70, 1066998, 411, 275, 86, 989, 737, 208, 1 ],
+ [ "Bazooka Major, Navy HQ", "STR", "Shooter", 3, 13, 6, 1, 70, 1066998, 547, 362, 44, 1301, 833, 117, 1 ],
+ [ "Knuckle Major, Navy HQ", "INT", "Fighter", 3, 13, 5, 1, 70, 1066998, 462, 351, 49, 1244, 876, 112, 1 ],
+ [ "Oimo", "PSY", [ "Striker", "Powerhouse" ], 3, 25, 5, 2, 70, 1778330, 452, 223, 23, 1602, 742, 98, 1 ],
+ [ "Kashii", "INT", [ "Slasher", "Powerhouse" ], 3, 25, 6, 2, 70, 1778330, 426, 242, 21, 1551, 798, 87, 1 ],
+ [ "Watchdog Unit of the Law", "QCK", "Slasher", 3, 13, 4, 1, 70, 1066998, 122, 43, 40, 1211, 488, 251, 1 ],
+ [ "Righteous Juror", "STR", "Striker", 3, 13, 4, 1, 70, 1066998, 108, 129, 34, 990, 900, 144, 1 ],
+ [ "Three-Headed Baskerville", "DEX", "Slasher", 3, 13, 4, 3, 70, 1066998, 102, 78, 38, 1109, 595, 232, 1 ],
+ [ "Blueno, Cipher Pol No. 9", "STR", [ "Fighter", "Powerhouse" ], 3, 12, 5, 2, 50, 392109, 166, 102, 32, 1338, 502, 124, 1 ],
+ [ "Blueno: Six Powers, Cipher Pol No. 9", "STR", [ "Fighter", "Powerhouse" ], 4, 20, 4, 3, 99, 3000000, 1281, 452, 100, 2466, 921, 221, 1 ],
+ [ "Nico Robin, Devil Child", "PSY", [ "Fighter", "Cerebral" ], 3, 10, 6, 2, 50, 392109, 110, 63, 32, 1002, 494, 209, 1 ],
+ [ "Nico Robin, Straw Hat Pirates", "PSY", [ "Fighter", "Cerebral" ], 4, 16, 5, 3, 99, 3000000, 938, 430, 155, 1892, 881, 351, 1 ],
+ [ "Franky Voyage Log: Straw Hat Pirates", "PSY", [ "Shooter", "Free Spirit" ], 4, 12, 4, 2, 50, 392109, 242, 100, 34, 1330, 597, 151, 1 ],
+ [ "Franky Voyage Dream: Ship of the Seven Seas", "PSY", [ "Shooter", "Free Spirit" ], 5, 20, 6, 3, 99, 3000000, 1259, 550, 112, 2372, 1100, 231, 1 ],
+ [ "Ganfor", "QCK", "Striker", 3, 12, 6, 1, 50, 392109, 80, 40, 48, 930, 452, 185, 1.5 ],
+ [ "Ganfor, Sky Knight", "QCK", "Striker", 4, 20, 4, 2, 99, 3000000, 884, 401, 151, 1704, 1202, 300, 1.5 ],
+ [ "Pierre", "DEX", "Fighter", 3, 12, 4, 1, 50, 392109, 69, 32, 38, 920, 480, 182, 1 ],
+ [ "Conis", "PSY", "Free Spirit", 3, 9, 5, 2, 35, 136167, 58, 10, 32, 503, 190, 232, 1 ],
+ [ "Conis, Skypiea Girl", "PSY", "Free Spirit", 4, 15, 4, 3, 70, 1066998, 458, 145, 196, 912, 388, 387, 1 ],
+ [ "Dracule Mihawk Warlord of the Sea", "INT", "Slasher", 5, 30, 4, 4, 70, 1066998, 623, 328, 10, 1921, 850, 58, 1.5 ],
+ [ "Hawk Eyes Mihawk, World's Strongest Swordsman", "INT", "Slasher", 6, 55, 5, 4, 99, 5000000, 1857, 799, 31, 3900, 1490, 120, 1.5 ],
+ [ "Sir Crocodile: Logia, Warlord of the Sea", "DEX", [ "Cerebral", "Striker" ], 5, 30, 4, 4, 70, 1066998, 500, 293, 104, 1780, 831, 226, 1.5 ],
+ [ "Sir Crocodile: Logia, Ex-Warlord of the Sea", "DEX", [ "Cerebral", "Striker" ], 6, 55, 4, 4, 99, 5000000, 1724, 765, 174, 3621, 1435, 310, 1.5 ],
+ [ "Jerry", "STR", [ "Fighter", "Free Spirit" ], 3, 9, 5, 1, 35, 136167, 72, 100, 32, 492, 380, 104, 1 ],
+ [ "Jerry, Cipher Pol No. 6", "STR", [ "Fighter", "Free Spirit" ], 4, 15, 8, 2, 70, 1066998, 439, 323, 70, 1000, 712, 212, 1 ],
+ [ "T-Bone", "PSY", [ "Slasher", "Cerebral" ], 3, 12, 6, 1, 50, 392109, 99, 78, 42, 958, 542, 162, 1 ],
+ [ "Ship Cutter T-Bone, Marine Captain", "PSY", [ "Slasher", "Cerebral" ], 4, 20, 4, 3, 99, 3000000, 900, 493, 133, 1700, 1100, 300, 1 ],
+ [ "Nefertari Vivi Voyage Log: Princess of Alabasta", "QCK", [ "Slasher", "Free Spirit" ], 4, 12, 6, 2, 50, 392109, 98, 51, 62, 855, 424, 288, 1 ],
+ [ "Nefertari Vivi Voyage Dream: Queen of the Pirates", "QCK", [ "Slasher", "Free Spirit" ], 5, 20, 4, 3, 99, 3000000, 800, 371, 258, 1591, 777, 474, 1 ],
+ [ "Monkey D. Luffy Gum-Gum Gatling", "DEX", [ "Free Spirit", "Fighter" ], 4, 15, 8, 3, 99, 2000000, 212, 100, 46, 1777, 795, 270, 0.7 ],
+ [ "Kalifa, Cipher Pol No. 9", "DEX", [ "Fighter", "Cerebral" ], 3, 12, 5, 2, 50, 392109, 89, 39, 55, 952, 448, 217, 1 ],
+ [ "Kalifa: Six Powers, Cipher Pol No. 9", "DEX", [ "Fighter", "Cerebral" ], 4, 20, 5, 3, 99, 3000000, 900, 401, 174, 1894, 970, 302, 1 ],
+ [ "Jabra, Cipher Pol No. 9", "INT", [ "Fighter", "Powerhouse" ], 3, 12, 4, 2, 50, 392109, 190, 92, -200, 1334, 572, -200, 1 ],
+ [ "Jabra: Six Powers, Cipher Pol No. 9", "INT", [ "Fighter", "Powerhouse" ], 4, 20, 4, 3, 99, 3000000, 1272, 521, -200, 2720, 1250, -200, 1 ],
+ [ "Fukuro, Cipher Pol No. 9", "STR", [ "Fighter", "Powerhouse" ], 3, 9, 4, 2, 35, 136167, 114, 52, 30, 1123, 408, 122, 1 ],
+ [ "Fukuro: Six Powers, Cipher Pol No. 9", "STR", [ "Fighter", "Powerhouse" ], 4, 15, 6, 3, 70, 1066998, 1077, 362, 97, 1850, 690, 177, 1 ],
+ [ "Kumadori, Cipher Pol No. 9", "PSY", [ "Striker", "Powerhouse" ], 3, 9, 5, 2, 35, 136167, 102, 60, 29, 1055, 442, 119, 1 ],
+ [ "Kumadori: Six Powers, Cipher Pol No. 9", "PSY", [ "Striker", "Powerhouse" ], 4, 15, 4, 3, 70, 1066998, 1000, 398, 88, 1792, 755, 165, 1 ],
+ [ "Kaku: Beastman, Ox-Ox Fruit, Model: Giraffe", "STR", [ "Slasher", "Powerhouse" ], 4, 20, 6, 3, 99, 4000000, 1220, 692, 43, 2526, 1200, 114, 1 ],
+ [ "Lucci: Beastman, Cat-Cat Fruit, Model: Leopard", "QCK", [ "Fighter", "Powerhouse" ], 4, 20, 4, 3, 99, 4000000, 1032, 703, 56, 2200, 1302, 140, 1 ],
+ [ "Spandam", "INT", "Slasher", 4, 7, 5, 1, 35, 136167, 52, 25, 25, 258, 196, 89, 1 ],
+ [ "Franky, Straw Hat Pirates", "INT", [ "Fighter", "Free Spirit" ], 4, 18, 4, 3, 99, 3000000, 1623, 765, 70, 2505, 1149, 130, 1 ],
+ [ "Nero", "QCK", [ "Shooter", "Driven" ], 3, 9, 6, 1, 35, 136167, 59, 112, 20, 324, 543, 83, 0.7 ],
+ [ "Nero, Cipher Pol No. 9", "QCK", [ "Shooter", "Driven" ], 4, 15, 5, 2, 70, 1066998, 277, 489, 51, 755, 1050, 145, 0.7 ],
+ [ "Wanze", "DEX", "Free Spirit", 3, 11, 4, 1, 50, 392109, 202, 44, 40, 1124, 367, 212, 1 ],
+ [ "Wanze, Cipher Pol No. 7", "DEX", "Free Spirit", 4, 18, 5, 2, 99, 3000000, 1059, 312, 170, 2051, 674, 363, 1 ],
+ [ "Portgas D. Ace, Record of the Voyage - Whitebeard Pirates", "QCK", [ "Free Spirit", "Fighter" ], 4, 12, 5, 2, 50, 392109, 141, 71, 36, 1121, 585, 189, 1.5 ],
+ [ "Portgas D. Ace Voyage Dream: Pirate Summit", "QCK", [ "Free Spirit", "Fighter" ], 5, 20, 4, 3, 99, 4000000, 1063, 524, 140, 2181, 1100, 258, 1.5 ],
+ [ "Megalo and Princess Shirahoshi", "QCK", "Fighter", 4, 15, 4, 3, 70, 1066998, 1251, 271, 150, 2001, 600, 241, 1 ],
+ [ "Rob Lucci, CP9 Dark Justice", "STR", [ "Powerhouse", "Fighter" ], 5, 30, 4, 4, 70, 1066998, 496, 300, 89, 1656, 800, 245, 1.5 ],
+ [ "Rob Lucci, CP9's Strongest", "STR", [ "Powerhouse", "Fighter" ], 6, 55, 6, 4, 99, 5000000, 1611, 762, 220, 3230, 1456, 382, 1.5 ],
+ [ "Kaku, CP9 Dark Justice", "DEX", [ "Slasher", "Powerhouse" ], 4, 17, 6, 3, 70, 1066998, 151, 132, 28, 1183, 713, 178, 1 ],
+ [ "Kaku, CP9's Strongest", "DEX", [ "Slasher", "Powerhouse" ], 5, 27, 8, 4, 99, 4000000, 1124, 666, 147, 2440, 1325, 272, 1 ],
+ [ "Kalifa, CP9 Dark Justice", "QCK", [ "Cerebral", "Fighter" ], 4, 17, 5, 3, 70, 1066998, 98, 60, 63, 963, 545, 270, 1 ],
+ [ "Kalifa, CP9's Strongest", "QCK", [ "Cerebral", "Fighter" ], 5, 27, 5, 4, 99, 4000000, 912, 498, 238, 1964, 933, 473, 1 ],
+ [ "Jabra, CP9 Dark Justice", "QCK", [ "Powerhouse", "Free Spirit" ], 4, 17, 5, 3, 70, 1066998, 224, 112, 21, 1650, 702, 89, 1 ],
+ [ "Jabra, CP9's Strongest", "QCK", [ "Powerhouse", "Free Spirit" ], 5, 27, 4, 4, 99, 4000000, 1601, 657, 55, 3003, 1299, 166, 1 ],
+ [ "Blueno, CP9 Dark Justice", "INT", [ "Powerhouse", "Free Spirit" ], 4, 16, 5, 3, 70, 1066998, 245, 94, 23, 1832, 644, 91, 1 ],
+ [ "Blueno, CP9's Strongest", "INT", [ "Powerhouse", "Free Spirit" ], 5, 26, 4, 4, 99, 4000000, 1779, 600, 56, 3502, 1045, 168, 1 ],
+ [ "Fukuro, CP9 Dark Justice", "PSY", [ "Powerhouse", "Fighter" ], 4, 16, 4, 3, 70, 1066998, 151, 97, 46, 1140, 651, 203, 1 ],
+ [ "Fukuro, CP9's Strongest", "PSY", [ "Powerhouse", "Fighter" ], 5, 26, 8, 4, 99, 4000000, 1093, 603, 165, 2415, 1051, 353, 1 ],
+ [ "Kumadori, CP9 Dark Justice", "STR", [ "Powerhouse", "Striker" ], 4, 16, 4, 3, 70, 1066998, 162, 89, 47, 1167, 612, 212, 1 ],
+ [ "Kumadori, CP9's Strongest", "STR", [ "Powerhouse", "Striker" ], 5, 26, 7, 4, 99, 4000000, 1110, 560, 170, 2479, 1018, 355, 1 ],
+ [ "Monkey D. Luffy, Halloween Monster", "DEX", [ "Fighter", "Free Spirit" ], 4, 20, 6, 3, 99, 3000000, 85, 41, 26, 1920, 1080, 185, 1 ],
+ [ "Usopp, Lying Wolf", "PSY", "Shooter", 4, 20, 5, 3, 99, 3000000, 51, 23, 46, 1444, 673, 400, 1 ],
+ [ "Franky, Frankenstein", "STR", [ "Shooter", "Free Spirit" ], 4, 20, 4, 3, 99, 3000000, 82, 43, 22, 1903, 1121, 170, 1 ],
+ [ "Nami, Jackie 'o Lantern", "QCK", [ "Striker", "Cerebral" ], 4, 20, 4, 3, 99, 3000000, 47, 25, 49, 1342, 699, 416, 1 ],
+ [ "Tony Tony Chopper, Lil' Vampire", "INT", [ "Fighter", "Cerebral" ], 4, 20, 6, 3, 99, 3000000, 56, 33, 38, 1548, 763, 358, 1 ],
+ [ "Roronoa Zoro, Jack the Ripper", "QCK", [ "Slasher", "Driven" ], 4, 20, 6, 3, 99, 3000000, 90, 39, 13, 2094, 1063, 131, 1 ],
+ [ "Nico Robin, Devil Girl", "DEX", [ "Fighter", "Cerebral" ], 4, 20, 4, 3, 99, 3000000, 53, 35, 34, 1500, 889, 320, 1 ],
+ [ "Sanji, Ghost Knight", "PSY", "Fighter", 4, 20, 4, 3, 99, 3000000, 92, 36, 28, 2088, 936, 221, 1 ],
+ [ "Brook, Cowardly Skeleton", "INT", [ "Slasher", "Free Spirit" ], 4, 20, 4, 3, 99, 3000000, 62, 35, 26, 1921, 948, 210, 1 ],
+ [ "Dalmatian, Marine Vice Admiral", "STR", [ "Fighter", "Powerhouse" ], 4, 20, 5, 3, 99, 4000000, 241, 186, 35, 2171, 1275, 189, 1.5 ],
+ [ "Momonga, Marine Vice Admiral", "PSY", [ "Cerebral", "Slasher" ], 4, 20, 6, 3, 99, 4000000, 298, 142, 20, 2618, 1111, 163, 1.5 ],
+ [ "Onigumo, Marine Vice Admiral", "DEX", [ "Slasher", "Driven" ], 4, 20, 8, 3, 99, 4000000, 213, 118, 54, 2000, 1021, 318, 1.5 ],
+ [ "Shu", "INT", [ "Fighter", "Free Spirit" ], 3, 12, 4, 2, 70, 1066998, 56, 89, 23, 943, 969, 150, 1 ],
+ [ "Berry Good", "QCK", [ "Free Spirit", "Striker" ], 3, 12, 4, 2, 70, 1066998, 203, 57, 15, 1808, 703, 103, 1 ],
+ [ "Strawberry, Marine Vice Admiral", "PSY", [ "Cerebral", "Slasher" ], 3, 16, 6, 2, 99, 3000000, 142, 64, 33, 1883, 943, 178, 1 ],
+ [ "Lucky Roo", "PSY", [ "Shooter", "Free Spirit" ], 3, 13, 6, 2, 35, 136167, 303, 169, 30, 904, 460, 98, 0.7 ],
+ [ "Lucky Roo of the Red Hair Pirates", "PSY", [ "Shooter", "Free Spirit" ], 4, 20, 5, 3, 70, 1778330, 842, 412, 70, 1606, 789, 188, 0.7 ],
+ [ "Rebecca, Imprisoned Swordsman", "QCK", "Striker", 4, 18, 5, 1, 50, 392109, 193, 112, 51, 1003, 503, 201, 1 ],
+ [ "Rebecca, Coliseum's Exclusive Gladiator", "QCK", "Striker", 5, 30, 4, 3, 99, 3000000, 920, 441, 150, 1947, 853, 374, 1 ],
+ [ "Urouge, Captain of the Fallen Monk Pirates", "STR", [ "Fighter", "Striker" ], 4, 25, 5, 2, 70, 1066998, 702, 340, 38, 1580, 790, 121, 1.5 ],
+ [ "Mad Monk Urouge, Captain of the Fallen Monk Pirates", "STR", [ "Fighter", "Striker" ], 5, 40, 5, 3, 99, 4000000, 1512, 755, 83, 2824, 1324, 203, 1.5 ],
+ [ "Tashigi: Flower of Justice", "INT", [ "Slasher", "Cerebral" ], 4, 13, 5, 2, 50, 392109, 132, 65, 49, 999, 495, 205, 1 ],
+ [ "Tashigi Marine Officer: Flower of Justice", "INT", [ "Slasher", "Cerebral" ], 5, 20, 5, 3, 99, 3000000, 932, 428, 164, 1804, 890, 378, 1 ],
+ [ "Gen-san", "STR", [ "Slasher", "Cerebral" ], 3, 9, 5, 2, 35, 136167, 211, 45, 33, 930, 288, 190, 1 ],
+ [ "Genzo, Cocoyasi Village Resident", "STR", [ "Slasher", "Cerebral" ], 4, 15, 4, 3, 70, 1066998, 879, 242, 143, 1324, 501, 299, 1 ],
+ [ "Dr. Hiluluk", "PSY", [ "Shooter", "Free Spirit" ], 3, 9, 6, 2, 35, 136167, 231, 63, 5, 1248, 461, 84, 1 ],
+ [ "Dr. Hiluluk, Quack Doctor", "PSY", [ "Shooter", "Free Spirit" ], 4, 15, 5, 3, 70, 1066998, 1233, 451, 84, 1248, 518, 312, 1 ],
+ [ "Kuina", "DEX", "Striker", 3, 9, 6, 2, 35, 136167, 54, 41, 70, 503, 264, 251, 1 ],
+ [ "Kuina, Shimotsuki Village's Girl Swordsman", "DEX", [ "Slasher", "Driven" ], 4, 15, 5, 3, 70, 1066998, 448, 220, 213, 917, 582, 338, 1 ],
+ [ "Tamanegi, Piiman & Ninjin", "QCK", [ "Striker", "Free Spirit" ], 3, 9, 4, 3, 35, 136167, 80, 10, 66, 716, 142, 249, 1 ],
+ [ "Tamanegi, Piiman & Ninjin, the Usopp Pirates", "QCK", [ "Striker", "Free Spirit" ], 4, 15, 6, 3, 70, 1066998, 654, 77, 180, 1200, 333, 350, 1 ],
+ [ "Iceburg", "INT", [ "Shooter", "Cerebral" ], 3, 9, 6, 2, 35, 136167, 155, 69, 38, 790, 392, 167, 1 ],
+ [ "Iceburg, Mayor of W7 and President of Galley-La Company", "INT", [ "Shooter", "Cerebral" ], 4, 16, 4, 3, 70, 1066998, 723, 343, 122, 1401, 702, 224, 1 ],
+ [ "Monkey D. Luffy Star of Hope", "INT", [ "Slasher", "Powerhouse" ], 4, 30, 4, 1, 70, 1066998, 259, 179, 0, 1400, 763, 0, 1.5 ],
+ [ "Nightmare Luffy Warrior of Hope", "INT", [ "Fighter", "Powerhouse" ], 5, 50, 4, 2, 99, 5000000, 1331, 711, 0, 3020, 1520, 0, 1.5 ],
+ [ "Breed", "INT", "Cerebral", 3, 13, 6, 1, 50, 392109, 59, 25, 59, 867, 418, 275, 1.5 ],
+ [ "Breed, Pet-Pet Fruit User", "INT", [ "Cerebral", "Powerhouse" ], 4, 20, 4, 3, 99, 3000000, 867, 818, 200, 2002, 1311, 180, 1.5 ],
+ [ "Kung Fu Dugong, Sea Animal Pirates", "PSY", [ "Fighter", "Powerhouse" ], 4, 18, 5, 2, 70, 1778330, 50, 355, 95, 450, 1115, 225, 1.5 ],
+ [ "Sea Lapahn, Sea Animal Pirates", "QCK", [ "Fighter", "Powerhouse" ], 3, 15, 4, 1, 70, 711332, 209, 76, 14, 1757, 724, 112, 1 ],
+ [ "Octopus Boxer, Sea Animal Pirates", "STR", [ "Fighter", "Powerhouse" ], 3, 15, 8, 1, 70, 711332, 99, 91, 2, 1563, 846, 93, 1 ],
+ [ "Mr. 2 Bon Clay Voyage Log: B.W.", "PSY", [ "Fighter", "Free Spirit" ], 4, 13, 5, 2, 50, 392109, 109, 57, 32, 1033, 513, 212, 1 ],
+ [ "Mr. 2 Bon Clay Voyage Dream: Okama Way", "PSY", [ "Fighter", "Free Spirit" ], 5, 20, 4, 3, 99, 3000000, 970, 448, 181, 1914, 922, 362, 1 ],
+ [ "Hina, Navy HQ Captain", "DEX", [ "Fighter", "Cerebral" ], 4, 18, 5, 1, 50, 392109, 188, 128, 48, 977, 544, 191, 1 ],
+ [ "Black Cage Hina, Navy HQ Captain", "DEX", [ "Fighter", "Cerebral" ], 5, 30, 5, 3, 99, 3000000, 920, 488, 159, 1901, 912, 357, 1 ],
+ [ "Smoker, Navy HQ Captain", "INT", [ "Striker", "Driven" ], 4, 25, 6, 2, 70, 1066998, 710, 309, 44, 1600, 703, 146, 1.5 ],
+ [ "Smoker the White Hunter, Navy HQ Captain", "INT", [ "Striker", "Driven" ], 5, 40, 5, 3, 99, 4000000, 1549, 640, 112, 2727, 1289, 234, 1.5 ],
+ [ "Angel in White Nami, Wedding", "PSY", [ "Striker", "Cerebral" ], 3, 13, 5, 1, 50, 392109, 60, 33, 49, 933, 419, 268, 1 ],
+ [ "Goddess in White Nami, Wedding", "PSY", [ "Striker", "Cerebral" ], 4, 20, 4, 2, 99, 3000000, 877, 362, 221, 1772, 799, 409, 1 ],
+ [ "Lola, Thriller Bark Bride", "STR", [ "Slasher", "Powerhouse" ], 3, 11, 6, 1, 50, 261406, 103, 69, 31, 1101, 559, 91, 1 ],
+ [ "Loveseeking Lola, Thriller Bark Bride", "STR", [ "Slasher", "Powerhouse" ], 4, 18, 8, 2, 99, 2000000, 1032, 513, 52, 2018, 1009, 147, 1 ],
+ [ "Risky Brothers", "DEX", [ "Slasher", "Free Spirit" ], 3, 9, 4, 2, 50, 392109, 30, 15, 40, 707, 368, 287, 1 ],
+ [ "Cerberus", "QCK", [ "Fighter", "Powerhouse" ], 3, 14, 5, 2, 50, 392109, 233, 108, 52, 1151, 781, 0, 1 ],
+ [ "Taralan", "INT", [ "Cerebral", "Powerhouse" ], 3, 14, 7, 2, 50, 392109, 325, 76, 48, 1385, 696, 0, 1 ],
+ [ "Bear Skin Rug", "DEX", [ "Fighter", "Powerhouse" ], 3, 14, 5, 2, 50, 392109, 203, 52, 155, 1074, 609, 74, 1 ],
+ [ "Gecko Moria, Thriller Bark Demon", "INT", [ "Free Spirit", "Driven" ], 3, 12, 6, 2, 50, 392109, 205, 92, 0, 1422, 504, 0, 1 ],
+ [ "Gecko Moria, Thriller Bark Ruler", "INT", [ "Free Spirit", "Driven" ], 4, 20, 4, 3, 99, 3000000, 1355, 451, 0, 2603, 913, 0, 1.5 ],
+ [ "Strong Soldier Zombie", "STR", "Fighter", 2, 7, 6, 0, 35, 90778, 85, 39, 92, 990, 622, 27, 1 ],
+ [ "Speedy Soldier Zombie", "QCK", "Fighter", 2, 7, 6, 0, 35, 90778, 77, 30, 92, 944, 590, 43, 1 ],
+ [ "Crafty Soldier Zombie", "DEX", "Fighter", 2, 7, 6, 0, 35, 90778, 92, 28, 92, 1032, 574, 35, 1 ],
+ [ "Hate-Filled Soldier Zombie", "INT", "Fighter", 2, 7, 6, 0, 35, 90778, 71, 40, 92, 903, 648, 29, 1 ],
+ [ "Egotistical Soldier Zombie", "PSY", "Fighter", 2, 7, 6, 0, 35, 90778, 70, 24, 92, 887, 551, 72, 1 ],
+ [ "Tricky Wild Zombie", "DEX", "Powerhouse", 3, 12, 4, 1, 50, 392109, 75, 74, 132, 899, 720, 71, 1 ],
+ [ "Brainy Wild Zombie", "INT", "Powerhouse", 3, 12, 4, 1, 50, 392109, 71, 86, 132, 823, 771, 65, 1 ],
+ [ "Heartful Wild Zombie", "PSY", "Powerhouse", 3, 12, 4, 1, 50, 392109, 70, 70, 132, 801, 700, 94, 1 ],
+ [ "Powerful General Zombie", "STR", [ "Slasher", "Powerhouse" ], 3, 20, 6, 1, 70, 1066998, 99, 59, 29, 1702, 813, 0, 1 ],
+ [ "Sneaky General Zombie", "DEX", [ "Slasher", "Powerhouse" ], 3, 20, 6, 1, 70, 1066998, 102, 57, 29, 1727, 802, 0, 1 ],
+ [ "Blazing General Zombie", "QCK", [ "Slasher", "Powerhouse" ], 3, 20, 6, 1, 70, 1066998, 113, 54, 29, 1768, 789, 0, 1 ],
+ ["Trafalgar Law, the Boy from the White City", "PSY", ["Slasher", "Driven"], 4, 10, 4, 3, 35, 90778, 442, 60, 0, 455, 497, 222, 1],
+ ["Trafalgar Law, the Boy Saved by Fate", "PSY", ["Slasher", "Driven"], 5, 18, 5, 3, 70, 1066998, 442, 424, 149, 696, 762, 390, 1],
+ [ "Basil Hawkins, Captain of the Hawkins Pirates", "DEX", [ "Cerebral", "Striker" ], 4, 25, 6, 2, 70, 1066998, 639, 298, 69, 1219, 745, 201, 1 ],
+ [ "Basil Hawkins the Magician, Captain of the Hawkins Pirates", "DEX", [ "Cerebral", "Striker" ], 5, 40, 4, 3, 99, 4000000, 1157, 690, 147, 2239, 1278, 347, 1 ],
+ [ "Wyper, Warrior of Shandia", "STR", [ "Shooter", "Free Spirit" ], 4, 18, 6, 1, 50, 392109, 229, 151, 10, 1198, 611, 33, 1 ],
+ [ "Berserker Wyper, Warrior of Shandia", "STR", [ "Shooter", "Free Spirit" ], 5, 30, 5, 3, 99, 3000000, 1140, 543, 15, 2095, 1260, 99, 1 ],
+ [ "Mr. 7 & Miss Father's Day", "QCK", [ "Shooter", "Driven" ], 4, 20, 6, 2, 70, 1778330, 68, 42, 105, 1085, 625, 315, 1 ],
+ [ "Tyrant Bartholomew Kuma", "STR", [ "Cerebral", "Powerhouse" ], 4, 30, 4, 2, 70, 1066998, 260, 170, 90, 1201, 623, 190, 1 ],
+ [ "Tyrant Bartholomew Kuma, Government Human Weapon", "STR", [ "Cerebral", "Powerhouse" ], 5, 50, 7, 3, 99, 5000000, 1159, 572, 190, 3090, 1435, 90, 1 ],
+ [ "Caesar Clown", "DEX", [ "Driven", "Cerebral" ], 4, 18, 5, 3, 70, 1066998, 71, 141, 71, 989, 740, 204, 1 ],
+ [ "Master Caesar", "DEX", [ "Driven", "Cerebral" ], 5, 30, 4, 4, 99, 4000000, 941, 695, 177, 2000, 1383, 343, 1 ],
+ [ "Vergo", "INT", [ "Striker", "Powerhouse" ], 4, 18, 6, 3, 70, 1066998, 282, 150, 19, 1515, 782, 89, 1 ],
+ [ "Vergo, Donquixote Pirates", "INT", [ "Striker", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1464, 730, 60, 3003, 1410, 140, 1 ],
+ [ "Monet", "PSY", [ "Free Spirit", "Cerebral" ], 4, 18, 4, 3, 70, 1066998, 130, 87, 47, 1078, 593, 241, 1 ],
+ [ "Monet, Donquixote Pirates", "PSY", [ "Free Spirit", "Cerebral" ], 5, 30, 4, 4, 99, 4000000, 1020, 540, 199, 2131, 1001, 433, 1 ],
+ [ "Baby 5", "STR", [ "Shooter", "Striker" ], 4, 18, 5, 3, 70, 1066998, 114, 142, 53, 892, 743, 230, 1 ],
+ [ "Baby 5, Donquixote Pirates", "STR", [ "Shooter", "Striker" ], 5, 30, 6, 4, 99, 4000000, 850, 692, 185, 1929, 1352, 349, 1 ],
+ [ "Buffalo", "QCK", [ "Shooter", "Free Spirit" ], 4, 18, 9, 3, 70, 1066998, 96, 96, 49, 1111, 666, 196, 1 ],
+ [ "Buffalo, Donquixote Pirates", "QCK", [ "Shooter", "Free Spirit" ], 5, 30, 10, 4, 99, 4000000, 1050, 600, 173, 2769, 1096, 296, 1 ],
+ [ "Tom, Tom's Workers", "DEX", [ "Fighter", "Powerhouse" ], 3, 12, 6, 1, 50, 392109, 159, 95, 30, 1103, 614, 141, 1 ],
+ [ "Legendary Shipwright Tom, Tom's Workers", "DEX", [ "Fighter", "Powerhouse" ], 4, 20, 4, 2, 99, 3000000, 1059, 572, 100, 2207, 1029, 266, 1 ],
+ [ "Cutty Flam, Tom's Workers", "STR", [ "Shooter", "Driven" ], 3, 13, 6, 2, 70, 1066998, 24, 138, 15, 924, 932, 139, 1 ],
+ [ "Iceburg, Tom's Workers", "QCK", [ "Striker", "Cerebral" ], 3, 13, 6, 2, 70, 1066998, 58, 60, 36, 1098, 694, 203, 1 ],
+ [ "Wapol of Tin", "STR", [ "Shooter", "Driven" ], 3, 12, 6, 2, 70, 1066998, 160, 78, 26, 1304, 800, 99, 1 ],
+ [ "Slim-up Wapol", "QCK", [ "Shooter", "Driven" ], 4, 20, 5, 2, 99, 3000000, 837, 505, 95, 1923, 867, 247, 1 ],
+ [ "Robson", "PSY", [ "Fighter", "Powerhouse" ], 3, 9, 6, 1, 50, 392109, 155, 22, 36, 1574, 318, 151, 1 ],
+ [ "Chopper's Snow Day", "DEX", [ "Fighter", "Powerhouse" ], 4, 15, 5, 2, 99, 2000000, 130, 30, 50, 1920, 614, 293, 1 ],
+ [ "Trafalgar Law Holy Night Gentleman", "DEX", [ "Slasher", "Free Spirit" ], 4, 12, 6, 3, 50, 392109, 182, 93, 43, 995, 489, 198, 1 ],
+ [ "Trafalgar Law Holy Night Nobleman", "DEX", [ "Slasher", "Free Spirit" ], 5, 19, 4, 3, 99, 4000000, 945, 460, 151, 2003, 1030, 313, 1 ],
+ [ "Jewelry Bonney Ravenous Spoiled Santa", "PSY", [ "Fighter", "Free Spirit" ], 4, 12, 5, 3, 50, 392109, 190, 50, 54, 1003, 403, 213, 1 ],
+ [ "Jewelry Bonney Ravenous Greedy Santa", "PSY", [ "Fighter", "Free Spirit" ], 5, 19, 4, 3, 99, 4000000, 848, 354, 178, 2380, 769, 338, 1 ],
+ [ "Coby, Navy HQ Petty Officer", "PSY", [ "Fighter", "Driven" ], 4, 18, 5, 2, 50, 392109, 267, 98, 27, 1193, 561, 158, 1 ],
+ [ "War Hero Coby, Navy HQ Petty Officer", "PSY", [ "Fighter", "Driven" ], 5, 30, 4, 3, 99, 3000000, 1121, 500, 104, 2239, 1048, 261, 1 ],
+ [ "Lady Alvida, Lovely Beauty", "QCK", [ "Striker", "Free Spirit" ], 4, 18, 5, 1, 50, 392109, 240, 92, 31, 1030, 534, 197, 1 ],
+ [ "Lady Alvida, Peerless Beauty", "QCK", [ "Striker", "Free Spirit" ], 5, 30, 6, 3, 99, 3000000, 967, 466, 148, 2092, 1000, 307, 1 ],
+ [ "Snowscape Nami", "QCK", [ "Striker", "Cerebral" ], 4, 15, 5, 2, 99, 2000000, 77, 33, 78, 1459, 674, 349, 1 ],
+ [ "Boa Hancock, Captain of the Kuja Pirates", "PSY", [ "Shooter", "Free Spirit" ], 4, 30, 4, 2, 70, 1066998, 153, 138, 57, 1020, 633, 201, 1 ],
+ [ "Empress Boa Hancock, Captain of the Kuja Pirates", "PSY", [ "Shooter", "Free Spirit" ], 5, 50, 4, 3, 99, 5000000, 943, 589, 161, 2055, 1378, 375, 1 ],
+ [ "Nico Robin Cien Fleur Wing: The Storm", "INT", [ "Cerebral", "Slasher" ], 4, 15, 4, 2, 99, 2000000, 238, 203, 83, 1518, 1061, 290, 1 ],
+ [ "Usopp Tabasco Star: The Storm", "DEX", "Shooter", 4, 15, 7, 2, 99, 2000000, 258, 152, 94, 1866, 704, 343, 1 ],
+ [ "Tony Tony Chopper Heavy Gong: The Storm", "STR", [ "Powerhouse", "Cerebral" ], 4, 15, 4, 2, 99, 2000000, 303, 168, 70, 2171, 900, 231, 1 ],
+ [ "Donquixote Doflamingo, Donquixote Pirates", "QCK", [ "Driven", "Cerebral" ], 5, 30, 6, 4, 70, 1066998, 390, 311, 77, 1510, 830, 258, 1 ],
+ [ "Heavenly Yaksha Donquixote Doflamingo", "QCK", [ "Driven", "Cerebral" ], 6, 55, 4, 4, 99, 5000000, 1446, 780, 230, 2800, 1530, 405, 1 ],
+ [ "Sugar", "QCK", [ "Free Spirit", "Cerebral" ], 4, 18, 4, 3, 70, 1066998, 102, 55, 68, 952, 420, 321, 1 ],
+ [ "Sugar, Donquixote Pirates", "QCK", [ "Free Spirit", "Cerebral" ], 5, 30, 5, 4, 99, 4000000, 896, 342, 274, 1905, 790, 532, 1 ],
+ [ "Señor Pink", "PSY", [ "Free Spirit", "Fighter" ], 4, 18, 4, 3, 70, 1066998, 292, 103, 24, 1524, 657, 142, 1 ],
+ [ "Señor Pink, Donquixote Pirates", "PSY", [ "Free Spirit", "Fighter" ], 5, 30, 4, 4, 99, 4000000, 1478, 600, 100, 2800, 1242, 241, 1 ],
+ [ "Trebol", "INT", [ "Cerebral", "Driven" ], 4, 18, 5, 3, 70, 1066998, 103, 150, 42, 941, 770, 201, 1 ],
+ [ "Trebol, Donquixote Pirates", "INT", [ "Cerebral", "Driven" ], 5, 30, 6, 4, 99, 4000000, 889, 721, 148, 1967, 1381, 334, 1 ],
+ [ "Giolla", "DEX", [ "Free Spirit", "Driven" ], 4, 18, 4, 3, 70, 1066998, 236, 66, 41, 1463, 494, 204, 1 ],
+ [ "Giolla, Donquixote Pirates", "DEX", [ "Free Spirit", "Driven" ], 5, 30, 4, 4, 99, 4000000, 1404, 443, 146, 2887, 880, 347, 1 ],
+ [ "Lao G.", "STR", [ "Fighter", "Driven" ], 4, 18, 5, 3, 70, 1066998, 117, 129, 37, 1025, 783, 181, [ 1.5, 0.7, 1.5 ] ],
+ [ "Lao G., Donquixote Pirates", "STR", [ "Fighter", "Driven" ], 5, 30, 4, 4, 99, 4000000, 968, 721, 143, 2021, 1420, 293, [ 1.5, 0.7, 1.5 ] ],
+ [ "Scratchmen Apoo, Captain of the On Air Pirates", "QCK", [ "Shooter", "Free Spirit" ], 4, 25, 5, 2, 70, 1066998, 646, 261, 83, 1247, 693, 220, 1 ],
+ [ "Roar of the Sea Scratchmen Apoo, Captain of the On Air Pirates", "QCK", [ "Shooter", "Free Spirit" ], 5, 40, 4, 3, 99, 4000000, 1188, 639, 175, 2309, 1190, 351, 1 ],
+ [ "Dorry, Giant Warrior Pirates", "INT", [ "Slasher", "Powerhouse" ], 4, 18, 6, 1, 50, 392109, 261, 120, 20, 1420, 503, 90, 1 ],
+ [ "Dorry the Blue Ogre", "INT", [ "Slasher", "Powerhouse" ], 5, 30, 4, 3, 99, 3000000, 1366, 449, 64, 2640, 1000, 156, 1 ],
+ [ "Jimbe, Shark Soldier", "PSY", [ "Fighter", "Powerhouse" ], 4, 20, 4, 2, 99, 3000000, 84, 34, 29, 1990, 1020, 298, 1 ],
+ [ "Mr. 1, West Blue Swordsman", "STR", [ "Slasher", "Cerebral" ], 4, 17, 6, 2, 99, 2000000, 45, 24, 19, 2024, 1044, 118, 1.5 ],
+ [ "Buggy, Cheerfully Crazy", "QCK", [ "Driven", "Free Spirit" ], 4, 17, 5, 2, 99, 2000000, 32, 19, 30, 1790, 694, 285, 1.5 ],
+ [ "Horo Horo Ghost", "PSY", "Free Spirit", 2, 6, 4, 0, 35, 90778, 40, 20, 100, 150, 90, 190, 1 ],
+ [ "Perona, Thriller Bark Demon", "DEX", [ "Shooter", "Driven" ], 3, 12, 4, 1, 50, 392109, 59, 31, 38, 797, 392, 271, 1 ],
+ [ "Perona, Giant Ghost Princess", "DEX", [ "Shooter", "Driven" ], 4, 20, 5, 3, 99, 3000000, 772, 381, 159, 1909, 960, 271, 1 ],
+ [ "Doctor Hogback, Thriller Bark Demon", "INT", [ "Fighter", "Cerebral" ], 3, 15, 5, 2, 70, 1066998, 148, 75, 30, 1492, 535, 247, 1 ],
+ [ "Absalom of the Graveyard, Thriller Bark Demon", "STR", [ "Shooter", "Powerhouse" ], 3, 15, 6, 2, 70, 1066998, 156, 102, 13, 1803, 813, 96, 1 ],
+ [ "Oars, Special Zombie", "STR", [ "Fighter", "Powerhouse" ], 4, 50, 4, 2, 99, 4000000, 1500, 700, 0, 2700, 1440, -500, 1 ],
+ [ "Gecko Moria, Shadows' Asgard", "INT", [ "Driven", "Powerhouse" ], 5, 30, 4, 3, 99, 4000000, 1000, 500, -500, 3180, 1430, -999, 1 ],
+ [ "Brook, Gentlemanly Skeleton", "DEX", [ "Slasher", "Free Spirit" ], 3, 10, 5, 1, 50, 392109, 148, 96, 37, 1067, 491, 196, 1 ],
+ [ "Brook, Straw Hat Pirates", "DEX", [ "Slasher", "Free Spirit" ], 4, 16, 6, 3, 99, 3000000, 1000, 442, 140, 1990, 847, 316, 1 ],
+ [ "Sir Crocodile, Sand General", "STR", [ "Cerebral", "Driven" ], 4, 20, 5, 2, 99, 3000000, 89, 41, 24, 2142, 1149, 208, 1 ],
+ [ "Mr. 3, Makeshift Musician", "QCK", [ "Striker", "Cerebral" ], 4, 17, 4, 2, 99, 2000000, 24, 14, 33, 1703, 622, 312, 1.5 ],
+ [ "Mr. 2 Bon Clay, Dubious Samurai", "INT", [ "Fighter", "Free Spirit" ], 4, 17, 4, 2, 99, 2000000, 42, 20, 22, 1810, 804, 235, 1.5 ],
+ [ "Fresh Franky, Health Comes First", "DEX", [ "Shooter", "Free Spirit" ], 4, 25, 6, 2, 70, 1066998, 659, 244, 85, 1330, 659, 211, 1 ],
+ [ "Cyborg Franky", "DEX", [ "Shooter", "Free Spirit" ], 5, 40, 8, 3, 99, 4000000, 1269, 618, 167, 2515, 1172, 323, 1 ],
+ [ "Broggy, Giant Warrior Pirates", "PSY", [ "Slasher", "Powerhouse" ], 4, 18, 5, 1, 50, 392109, 261, 120, 20, 1354, 539, 90, 1 ],
+ [ "Broggy the Red Ogre", "PSY", [ "Slasher", "Powerhouse" ], 5, 30, 4, 3, 99, 3000000, 1292, 463, 64, 2460, 1090, 156, 1 ],
+ [ "Yokozuna", "STR", [ "Fighter", "Powerhouse" ], 4, 20, 4, 2, 70, 1778330, 520, 170, 45, 1852, 700, 162, 1 ],
+ [ "Roronoa Zoro, the Swordsman Who Wanders Kuraigana Island", "STR", [ "Slasher", "Driven" ], 4, 18, 6, 3, 70, 1066998, 200, 142, 15, 1492, 750, 101, 1 ],
+ [ "Roronoa Zoro, Pupil of the World's Strongest Swordsman", "STR", [ "Slasher", "Driven" ], 5, 30, 5, 4, 99, 4000000, 1403, 687, 67, 2830, 1390, 190, 1 ],
+ [ "Nico Robin, Tequila Wolf Inmate", "INT", [ "Cerebral", "Fighter" ], 4, 18, 4, 3, 70, 1066998, 131, 91, 43, 1021, 679, 217, 1 ],
+ [ "Nico Robin, Light of the Revolution", "INT", [ "Cerebral", "Fighter" ], 5, 30, 4, 4, 99, 4000000, 946, 593, 178, 2011, 1156, 400, 1 ],
+ [ "Tony Tony Chopper, Torino Kingdom's Peace Mediator", "PSY", [ "Fighter", "Cerebral" ], 4, 18, 6, 3, 70, 1066998, 187, 70, 42, 1300, 504, 220, 1 ],
+ [ "Chopper Mask, the Hero Who Protects the World", "PSY", [ "Fighter", "Cerebral" ], 5, 30, 4, 4, 99, 4000000, 1234, 447, 170, 2500, 912, 404, 1 ],
+ [ "Sanji, Kamabakka Queendom Fugitive", "DEX", [ "Powerhouse", "Fighter" ], 4, 18, 4, 3, 70, 1066998, 212, 124, 20, 1575, 701, 127, 1 ],
+ [ "Sanji, the Cook of Love Who Laid His Manliness on the Line", "DEX", [ "Powerhouse", "Fighter" ], 5, 30, 4, 4, 99, 4000000, 1498, 634, 85, 2926, 1349, 201, 1 ],
+ [ "Brook, Harahetternia's Demon Lord", "QCK", [ "Free Spirit", "Slasher" ], 4, 18, 6, 3, 70, 1066998, 159, 90, 39, 1281, 597, 201, 1 ],
+ [ "Brook, BONE to be Wild!!!", "QCK", [ "Free Spirit", "Slasher" ], 5, 30, 4, 4, 99, 4000000, 1220, 531, 150, 2392, 1137, 352, 1 ],
+ [ "Nico Robin, Bride of Ohara", "QCK", [ "Cerebral", "Fighter" ], 4, 12, 4, 2, 50, 392109, 72, 38, 43, 899, 409, 105, 1 ],
+ [ "Beautiful and Talented Woman Wedding Robin", "QCK", [ "Cerebral", "Fighter" ], 5, 20, 4, 3, 99, 3000000, 826, 327, 143, 1851, 812, 371, 1 ],
+ [ "Marguerite", "QCK", "Shooter", 3, 13, 4, 1, 50, 392109, 80, 53, 37, 920, 577, 207, 1 ],
+ [ "Marguerite, Warrior Defending Her Country", "QCK", "Shooter", 4, 20, 5, 2, 99, 3000000, 854, 516, 145, 1563, 1070, 335, 1 ],
+ [ "Aphelandra", "QCK", "Slasher", 3, 15, 6, 1, 70, 1066998, 98, 42, 32, 2001, 604, 141, 1 ],
+ [ "Sweet Pea", "STR", [ "Powerhouse", "Shooter" ], 3, 15, 4, 2, 70, 1066998, 210, 157, 26, 1041, 1041, 155, 1 ],
+ [ "Boa Hancock, Bride of the Island of Women", "INT", [ "Shooter", "Free Spirit" ], 4 , 13 , 4 , 2 , 50 ,392109, 142 , 91 , 46 ,912,556,153,1],
+ [ "Empress in Love Hancock, Wedding", "INT", [ "Shooter", "Free Spirit" ], 5 , 20 , 4 , 3 , 99 ,3000000, 832 , 497 , 106 ,1913,1012,294,1],
+ [ "South Blue's Captain Kid", "STR", [ "Striker", "Driven" ], 4, 25, 4, 2, 70, 1066998, 710, 309, 44,1600,703,146,1],
+ [ "Captain Kid, Captain of the Kid Pirates", "STR", [ "Striker", "Driven" ], 5, 40, 4, 3, 99, 4000000, 1549, 640, 112,2727,1319,224,1],
+ [ "Chief Guard Sadie-chan", "QCK", [ "Striker", "Free Spirit" ],4, 18, 6, 1, 50,392109, 413, 246, 88, 977, 544, 191, 1],
+ [ "Chief Guard Sadie-chan, Commander of the Jailer Beasts", "QCK", ["Striker", "Free Spirit"], 5, 30, 4, 3, 99, 3000000, 920, 488, 159, 1901, 912, 357, 1],
+ [ "Doberman, Navy HQ Vice Admiral", "INT", [ "Slasher", "Driven" ], 4, 20, 6, 2, 70, 1778330, 200, 210, 71, 1085, 951, 205, 1],
+ [ "Hannyabal", "DEX", ["Driven", "Striker"],3, 13, 6, 1, 50, 392109, 157, 44, 39, 1412, 497, 151, 1],
+ [ "Hannyabal, Impel Down Vice Warden", "DEX", [ "Driven", "Striker" ],4, 20, 4, 2, 99, 3000000, 1333, 429, 102, 2603, 940, 205, 1],
+ [ "Saldeath", "INT", [ "Striker", "Cerebral" ], 3, 15, 4, 2, 70, 1066998, 34, 25, 34, 1095, 501, 274, 1],
+ [ "Blugori", "DEX", [ "Powerhouse", "Slasher" ], 3, 11, 4, 0, 50, 392109, 103, 99, 1, 1119, 999, 31, 1],
+ [ "Pica", "PSY", [ "Powerhouse","Driven" ], 4, 30, 4, 1, 70, 1066998, 300, 99, 5, 1730, 630, 6, 1],
+ [ "Pica, Donquixote Pirates", "PSY", [ "Powerhouse", "Driven" ], 5, 50, 4, 2, 99, 5000000, 1660, 552, 5, 4050, 1180, 9, 1],
+ [ "Knight of the Sea Jimbe", "INT", [ "Fighter", "Powerhouse" ], 5, 30, 5, 4, 70, 1066998, 572, 268, 102, 1841, 797, 229, 1],
+ [ "Knight of the Sea Jimbe, Warlord of the Sea", "INT", [ "Fighter", "Powerhouse" ], 6, 55, 4, 5, 99, 5000000, 1787, 733, 179, 3400, 1440, 347, 1],
+ [ "Monkey D. Luffy, Summit War Survivor", "QCK", [ "Fighter", "Free Spirit" ], 4, 18, 7, 3, 70, 1066998, 151, 150, 21, 1220, 764, 149, 1],
+ [ "Monkey D. Luffy, Crew's Promise: 3D2Y", "QCK", [ "Fighter", "Free Spirit" ], 5, 30, 4, 4, 99, 4000000, 1173, 712, 99, 2406, 1415, 257, 1],
+ [ "Nami, Seeker of Weather Science", "PSY", [ "Striker", "Cerebral" ], 4, 18, 4, 3, 70, 1066998, 141, 80, 48, 1102, 584, 233, 1],
+ [ "Nami, Weatheria's Cat Burglar", "PSY", [ "Striker", "Cerebral" ], 5, 30, 5, 4, 99, 4000000, 1037, 522, 189, 2119, 1081, 413, 1],
+ [ "Usopp, Boin Archipelago's Glutton", "DEX", "Fighter", 4, 18, 6, 3, 70, 1066998, 271, 52, 34, 1748, 453, 172, 1],
+ [ "Usopp, Swindling Forest's Resolute Warrior", "DEX", "Shooter", 5, 30, 4, 4, 99, 4000000, 1669, 398, 131, 3239, 800, 323, 1],
+ [ "Franky, Cyborg Fighting Mecha Animals", "STR", [ "Free Spirit", "Shooter" ], 4, 18, 4, 3, 70, 1066998, 220, 112, 22, 1603, 686, 131, 1],
+ [ "Cyborg Franky, Sacred Beast of Baldimore", "STR", [ "Free Spirit", "Shooter" ], 5, 30, 4, 4, 99, 4000000, 1535, 635, 88, 2810, 1249, 244, 1],
+ [ "Perona, Malicious Old Castle Bride", "PSY", [ "Shooter", "Driven" ], 4, 13, 4, 2, 50, 392109, 59, 34, 47, 814, 392, 223, 1],
+ [ "Fancy Princess Wedding Perona", "PSY", [ "Shooter", "Driven" ], 5, 20, 5, 3, 99, 3000000, 740, 333, 172, 1787, 787, 390, 1],
+ [ "Rakuyo, Whitebeard 7th Div. Commander", "INT", [ "Striker", "Powerhouse" ], 4, 25, 6, 3, 99, 3000000, 58, 27, 33, 2077, 1055, 218, 1],
+ [ "Fossa, Whitebeard 15th Div. Commander", "INT", [ "Slasher", "Powerhouse" ], 4, 25, 6, 3, 99, 3000000, 48, 35, 20, 1910, 1231, 187, 1],
+ [ "Curiel, Whitebeard 10th Div. Commander", "STR", [ "Shooter", "Powerhouse" ], 4, 25, 5, 3, 99, 3000000, 33, 39, 30, 1706, 1251, 212, 1],
+ [ "Thatch, Whitebeard 4th Div. Commander", "PSY", [ "Slasher", "Cerebral" ], 4, 25, 5, 3, 99, 3000000, 80, 37, 37, 1995, 1088, 227, 1],
+ [ "Ace, Whitebeard 2nd Div. Commander", "PSY", [ "Free Spirit", "Fighter" ], 4, 25, 5, 2, 70, 1066998, 606, 313, 54, 1496, 744, 152, 1],
+ [ "Fire Fist Ace, Whitebeard 2nd Div. Commander", "PSY", [ "Free Spirit", "Fighter" ], 5, 40, 4, 3, 99, 4000000, 1431, 690, 110, 2599, 1271, 271, 1],
+ [ "Ben Beckman", "DEX", [ "Striker", "Shooter" ], 3, 13, 6, 1, 35, 136167, 131, 98, 25, 935, 375, 163, 1],
+ [ "Ben Beckman, Red Hair Pirates", "DEX", [ "Striker", "Shooter" ], 4, 20, 4, 2, 70, 1778330, 867, 329, 122, 1403, 800, 229, 1],
+ [ "Gyaro", "QCK", [ "Slasher", "Powerhouse" ], 3, 7, 6, 2, 50, 392109, 950, 427, 36, 1420, 627, 98, 1],
+ [ "Macro", "PSY", [ "Shooter", "Powerhouse" ], 3, 7, 4, 2, 50, 392109, 972, 390, 44, 1447, 591, 110, 1],
+ [ "Tansui", "INT", [ "Fighter", "Powerhouse" ], 3, 7, 4, 2, 50, 392109, 933, 468, 31, 1368, 701, 84, 1],
+ [ "Quick-Draw Gunman, Blue Bodyguard", "QCK", "Shooter", 3, 11, 6, 1, 60, 1123790, 72, 57, 59, 743, 556, 265, 1],
+ [ "Scheming Gunman, Black Bodyguard", "INT", "Shooter", 3, 11, 6, 1, 60, 1123790, 64, 64, 57, 709, 597, 257, 1],
+ [ "Technical Gunman, Green Bodyguard", "DEX", "Shooter", 3, 11, 6, 1, 60, 1123790, 80, 69, 51, 785, 640, 230, 1],
+ [ "Quick-Strike Gunman, Blue Bodyguard", "QCK", "Shooter", 3, 11, 6, 1, 60, 1123790, 84, 66, 52, 805, 612, 236, 1],
+ [ "Strong-Arm Gunman, Red Bodyguard", "STR", "Shooter", 3, 11, 6, 1, 60, 1123790, 82, 80, 44, 821, 700, 204, 1],
+ [ "Bold Gunman, Yellow Bodyguard", "PSY", "Shooter", 3, 11, 6, 1, 60, 1123790, 89, 73, 46, 855, 656, 213, 1],
+ [ "Saint Charlos", "STR", "Shooter", 6, 99, 7, 0, 99, 1000000, 5, 320, -500, 25, 554, -400, 1],
+ [ "Saint Roswald", "DEX", "Shooter", 6, 99, 7, 0, 99, 1000000, 6, 334, -600, 30, 601, -500, 1],
+ [ "Saint Shalria", "QCK", "Shooter", 6, 99, 7, 0, 99, 1000000, 4, 293, -400, 20, 503, -300, 1],
+ [ "Eustass Kid, Supernova", "QCK", [ "Driven", "Striker" ], 4, 20, 5, 3, 99, 3000000, 462, 299, 19, 2301, 1205, 128, 1],
+ [ "Trafalgar Law, Supernova", "INT", [ "Slasher", "Free Spirit" ], 4, 20, 4, 3, 99, 3000000, 440, 244, 41, 2035, 1013, 243, 1],
+ [ "Pacifista PX-1", "DEX", [ "Shooter", "Powerhouse" ], 4, 40, 4, 0, 70, 1422664, 2000, 1000, -100, 2009, 1016, 1, 1],
+ [ "Pacifista PX-2", "PSY", [ "Shooter", "Powerhouse" ], 4, 40, 4, 0, 70, 1422664, 2000, 1000, -100, 2009, 1016, 1, 1],
+ [ "Pacifista PX-3", "QCK", [ "Shooter", "Powerhouse" ], 4, 40, 4, 0, 70, 1422664, 2000, 1000, -100, 2009, 1016, 1, 1],
+ [ "Pacifista PX-4", "STR", [ "Shooter", "Powerhouse" ], 4, 40, 4, 0, 70, 1422664, 2000, 1000, -100, 2009, 1016, 1, 1],
+ [ "Pacifista PX-5", "INT", [ "Shooter", "Powerhouse" ], 4, 40, 4, 0, 70, 1422664, 2000, 1000, -100, 2009, 1016, 1, 1],
+ [ "Sentomaru", "PSY", [ "Fighter", "Powerhouse" ], 3, 12, 5, 1, 50, 392109, 105, 38, 10, 1202, 557, 137, 1],
+ [ "Sentomaru, Marine Science Unit Commander", "PSY", [ "Fighter", "Powerhouse" ], 4, 20, 4, 3, 99, 3000000, 1125, 497, 92, 2209, 1000, 214, 1],
+ [ "Smoker, Wild Lone Wolf", "DEX", ["Striker", "Driven"], 4, 10, 6, 3, 35, 90778, 210, 86, 100, 610, 286, 273, 1],
+ [ "Smoker, Solitary Lone Wolf", "DEX", ["Striker", "Driven"], 5, 18, 4, 3, 70, 1066998, 556, 240, 241, 1128, 556, 379, 1],
+ [ "Kizaru", "QCK", ["Shooter", "Fighter"], 4, 30, 4, 2, 70, 1066998, 221, 169, 36, 1241, 741, 160, 1],
+ [ "Kizaru, Light Human", "QCK", ["Shooter", "Fighter"], 5, 50, 5, 3, 99, 5000000, 1179, 665, 130, 2506, 1410, 277, 1],
+ [ "Izo Whitebeard 16th Div. Commander", "PSY", ["Shooter", "Cerebral"], 4, 25, 6, 3, 99, 3000000, 37, 22, 39, 1910, 990, 300, 1 ],
+ [ "Blamenco Whitebeard 6th Div. Commander", "DEX", ["Striker", "Free Spirit"], 4, 25, 4, 3, 99, 3000000, 66, 40, 18, 2394, 1268, 126, 1 ],
+ [ "Namule Whitebeard 8th Div. Commander", "PSY", ["Fighter", "Powerhouse"], 4, 25, 4, 3, 99, 3000000, 49, 48, 26, 2148, 1305, 154, 1 ],
+ [ "Vista Whitebeard 5th Div. Commander", "QCK", ["Slasher", "Powerhouse"], 4, 25, 5, 2, 70, 1066998, 694, 277, 48, 1603, 700, 141, 1 ],
+ [ "Flower Sword Vista Whitebeard 5th Div. Commander", "QCK", ["Slasher", "Powerhouse"], 5, 40, 4, 3, 99, 4000000, 1534, 634, 98, 2830, 1257, 228, 1 ],
+ [ "Paulie Galley-La Company Dock One Foreman","PSY",["Striker","Powerhouse"], 4, 30, 6, 2, 99, 3000000, 321, 132, 30, 2404, 1024, 243, 1 ],
+ [ "Demalo Black & Chocolat, Impostor Straw Hat Pirates","STR","Driven", 3, 5, 6, 0, 20, 17456, 94, 33, 15, 571, 280, 77, 1],
+ [ "Cocoa & Nora Gitsune, Impostor Straw Hat Pirates","INT","Driven", 3, 5, 6, 0, 20, 17456, 79, 21, 28, 489, 224, 110, 1],
+ [ "Manjaro & Drip, Impostor Straw Hat Pirates","DEX","Driven", 3, 5, 6, 0, 20, 17456, 44, 34, 21, 387, 308, 97, 1],
+ [ "Mounblutain & Turco, Impostor Straw Hat Pirates","PSY","Driven", 3, 5, 6, 0, 20, 17456, 103, 23, 18, 612, 258 , 79, 1],
+ [ "Impostor Straw Hats","STR",["Driven","Shooter"], 4, 15, 8, 3, 50, 653515, 561, 330, 36, 1288, 604, 110, 1],
+ [ "Machvise","INT",["Free Spirit","Powerhouse"], 4, 18, 4, 3, 70, 1066998, 203, 127, 34, 1589, 716, 105, 1 ],
+ [ "Machvise, Donquixote Pirates","INT",["Free Spirit","Powerhouse"], 5, 30, 4, 4, 99, 4000000, 1523, 643, 49, 2882, 1280, 217, 1 ],
+ [ "Gladius","QCK",["Shooter","Driven"], 4, 18, 6, 3, 70, 1066998, 102, 161, 32, 1079, 813, 154, 1 ],
+ [ "Gladius, Donquixote Pirates","QCK",["Shooter","Driven"], 5, 30, 4, 4, 99, 4000000, 1000, 767, 101, 2375, 1371, 271, 1 ],
+ [ "Violet","PSY",["Fighter","Cerebral"], 4, 18, 5, 3, 70, 1066998, 147, 48, 77, 1157, 451, 274, 1 ],
+ [ "Violet, Donquixote Pirates","PSY",["Fighter","Cerebral"], 5, 30, 4, 4, 99, 4000000, 1095, 400, 220, 2217, 813, 483, 1 ],
+ [ "Dellinger","DEX",["Powerhouse","Fighter"], 4, 18, 6, 3, 70, 1066998, 91, 147, 51, 999, 755, 192, 1 ],
+ [ "Dellinger, Donquixote Pirates","DEX",["Powerhouse","Fighter"], 5, 30, 4, 4, 99, 4000000, 933, 692, 143, 2087, 1362, 324, 1 ],
+ [ "Diamante","STR",["Driven","Striker"], 4, 18, 6, 3, 70, 1066998, 698, 452, 48, 1500, 866, 90, 1 ],
+ [ "Diamante, Donquixote Pirates","STR",["Driven","Striker"], 5, 30, 5, 4, 99, 4000000, 1443, 812, 50, 2840, 1421, 174, 1 ],
+ [ "Corazon, Donquixote Pirates","DEX",["Free Spirit","Cerebral"], 5, 30, 4, 4, 70, 1066998, 406, 196, 155, 1503, 694, 320, 1 ],
+ [ "Donquixote Rosinante","DEX",["Free Spirit","Cerebral"], 6, 55, 4, 5, 99, 5000000, 1428, 628, 272, 2746, 1222, 555, 1 ],
+ [ "Bepo, Heart Pirates", "STR", ["Fighter", "Powerhouse"], 3, 12, 4, 1, 50, 392109, 96, 53, 46, 1003, 525, 213, 1],
+ [ "Martial Artist Bepo, Heart Pirates", "STR", ["Fighter", "Powerhouse"], 4, 20, 4, 2, 99, 3000000, 921, 461, 162, 1803, 1054, 307, 1],
+ [ "Sachi and Penguin, Heart Pirates", "QCK", ["Fighter", "Free Spirit"], 4, 15, 5, 2, 70, 1066998, 92, 37, 36, 1059, 701, 231, 1],
+ [ "Jean Bart", "STR", ["Powerhouse", "Fighter"], 3, 12, 5, 1, 50, 392109, 194, 55, 13, 1404, 541, 96, 1],
+ [ "Jean Bart, Heart Pirates", "STR", ["Powerhouse", "Fighter"], 4, 20, 4, 2, 99, 3000000, 1337, 488, 44, 2614, 1069, 153, 1],
+ [ "Monet Cold Season Cherry Blossoms","QCK",["Free Spirit","Cerebral"], 4, 13, 6, 2, 50, 392109, 67, 37, 55, 884, 428, 204, 1],
+ [ "Monet Coldest Season Cherry Blossoms","QCK",["Free Spirit","Cerebral"], 5, 20, 6, 3, 99, 3000000, 831, 366, 162, 1660, 869, 384, 1],
+ [ "Kizuna BOOST Luffy", "STR", ["Fighter","Powerhouse"], 4, 20, 6, 2, 99, 3000000, 465, 232, 36, 1978, 1170, 220, 1 ],
+ [ "Count Butler", "INT", ["Driven","Cerebral"], 3, 12, 4, 1, 50, 392109, 103, 25, 41, 1172, 377, 220, 1 ],
+ [ "Count Butler (Ruling Power)", "INT", ["Driven","Powerhouse"], 4, 20, 5, 2, 99, 3000000, 1175, 606, 50, 2152, 1100, 220, 1 ],
+ [ "President Heaby", "QCK", ["Slasher","Driven"], 3, 15, 6, 1, 70, 1422664, 118, 78, 32, 1221, 799, 203, 1 ],
+ [ "General Hotdog", "DEX", ["Fighter","Driven"], 3, 15, 4, 1, 70, 1422664, 105, 86, 24, 1147, 890, 181, 1 ],
+ [ "Tony Tony Chopper, Animal King", "PSY", ["Fighter","Powerhouse"], 4, 16, 4, 2, 70, 1422664, 63, 40, 44, 1154, 719, 280, 1 ],
+ [ "Capone Bege, Captain of the Firetank Pirates", "INT", ["Shooter","Driven"], 4, 25, 4, 2, 70, 1066998, 494, 313, 80, 962, 749, 244, 1],
+ [ "Capone 'Gang' Bege, Captain of the Firetank Pirates", "INT", ["Shooter","Driven"], 5, 40, 6, 3, 99, 4000000, 900, 688, 197, 1903, 1361, 379, 1],
+ [ "Brownbeard", "PSY", ["Slasher","Driven"], 4, 18, 6, 2, 50, 392109, 230, 101, 33, 1202, 504, 137, 1],
+ [ "Brownbeard, Alligator Centaur", "PSY", ["Slasher","Powerhouse"], 5, 30, 6, 2, 99, 3000000, 1127, 444, 90, 2500, 1000, 220, 1],
+ [ "Peeply Lulu Galley-La Company Dock One Foreman ", "DEX", "Slasher", 4, 20, 6, 2, 70, 1778330, 155, 93, 40, 1184, 720, 280, 1],
+ [ "Sugar Cherry Tree", "INT", ["Shooter","Cerebral"], 4, 13, 7, 2, 50, 392109, 41, 24, 64, 799, 355, 249, 1],
+ [ "Sugar Cherry", "INT", ["Shooter","Cerebral"], 5, 20, 5, 3, 99, 3000000, 731, 300, 198, 1621, 717, 442, 1],
+ [ "Monkey D. Luffy Road to Pirate King", "PSY", ["Fighter","Free Spirit"], 4, 15, 4, 2, 99, 2000000, 200, 56, 55, 2000, 1000, 300, 1 ],
+ [ "Portgas D. Ace Dream that Lead to the Pirate King", "INT", [ "Shooter", "Free Spirit" ], 4, 20, 5, 2, 99, 2000000, 159, 98, 41, 1773, 1310, 221, 1.5 ],
+ [ "Don Chin Jao", "INT", [ "Powerhouse","Fighter" ], 4, 18, 6, 3, 70, 1066998, 226, 187, 17, 1505, 808, 100, 1 ],
+ [ "Don Chin Jao, Kano Kingdom Gang", "INT", [ "Powerhouse","Striker" ], 5, 30, 4, 4, 99, 4000000, 1433, 746, 68, 2818, 1424, 185, 1 ],
+ [ "Blue Gilly", "QCK", [ "Fighter","Free Spirit" ], 4, 18, 6, 3, 70, 1066998, 197, 138, 37, 1330, 689, 162, 1 ],
+ [ "Blue Gilly, Jao Kun Do Martial Artist", "QCK", [ "Fighter","Free Spirit" ], 5, 30, 7, 4, 99, 4000000, 1253, 630, 129, 2552, 1300, 277, 1 ],
+ [ "Funk Brothers", "DEX", [ "Fighter","Driven" ], 4, 18, 5, 3, 70, 1066998, 60, 172, 44, 937, 824, 109, 1 ],
+ [ "Funk Brothers, Mogaro Kingdom Assassins", "DEX", [ "Fighter","Driven" ], 5, 30, 8, 4, 99, 4000000, 1500, 824, 77, 2920, 1251, 226, 1 ],
+ [ "Hajrudin", "PSY", [ "Powerhouse","Fighter" ], 4, 18, 5, 3, 70, 1066998, 201, 177, 38, 1403, 795, 116, 1 ],
+ [ "Hajrudin, Pirate Mercenary", "PSY", [ "Powerhouse","Fighter" ], 5, 30, 4, 4, 99, 4000000, 1337, 740, 57, 2700, 1402, 205, 1 ],
+ [ "Abdullah and Jeet", "STR", [ "Slasher","Striker" ], 4, 18, 6, 3, 70, 1066998, 143, 143, 52, 1003, 722, 208, 1 ],
+ [ "Abdullah and Jeet, Former Bounty Hunters", "STR", [ "Slasher","Striker" ], 5, 30, 6, 4, 99, 4000000, 920, 673, 156, 1970, 1345, 343, 1 ],
+ [ "Bartolomeo", "STR", [ "Striker","Driven" ], 5, 30, 4, 4, 70, 1066998, 403, 278, 58, 1623, 813, 232, 1 ],
+ [ "Bartolomeo the Cannibal", "STR", [ "Striker","Driven" ], 6, 55, 4, 5, 99, 5000000, 1550, 769, 181, 3505, 1431, 341, 1 ],
+ [ "Emporio Ivankov Queen of the Secret Garden", "QCK", [ "Free Spirit","Fighter" ], 3, 12, 5, 1, 50, 392109, 161, 39, 39, 1198, 492, 202, 1 ],
+ [ "Emporio Ivankov Queen of the Garden of Miracles", "QCK", [ "Free Spirit","Fighter" ], 4, 20, 4, 2, 99, 3000000, 1120, 443, 141, 2007, 906, 322, 1 ],
+ [ "Inazuma Maiden of the Secret Garden", "DEX", [ "Free Spirit","Fighter" ], 3, 7, 6, 1, 35, 136167, 39, 22, 30, 797, 321, 149, 1 ],
+ [ "Inazuma Maiden Planning to Change ", "DEX", [ "Free Spirit","Fighter" ], 4, 15, 4, 2, 99, 1066998, 730, 267, 100, 1209, 694, 229, 1 ],
+ [ "Jozu Whitebeard 3rd Div. Commander", "STR", [ "Fighter", "Powerhouse" ], 4, 25, 6, 2, 70, 1066998, 626, 252, 60, 1464, 700, 169, 1 ],
+ [ "'Diamond' Jozu Whitebeard 3rd Div. Commander", "STR", [ "Fighter", "Powerhouse" ], 5, 40, 5, 3, 99, 4000000, 1392, 640, 120, 2748, 1299, 249, 1 ],
+ [ "Killer, Kid Pirates", "DEX", [ "Striker", "Slasher" ], 4, 25, 6, 2, 70, 1066998, 455, 310, 36, 949, 797, 113, 1 ],
+ [ "'Massacre Soldier' Killer, Kid Pirates", "DEX", [ "Striker", "Slasher" ], 5, 40, 4, 3, 99, 4000000, 887, 728, 64, 1879, 1424, 189, 1 ],
+ [ "Trafalgar Law, Worst Generation", "PSY", [ "Slasher", "Free Spirit" ], 5, 30, 4, 4, 70, 1066998, 549, 341, 138, 1378, 813, 297, 1 ],
+ [ "Trafalgar Law Warlord of the Sea", "PSY", [ "Slasher", "Free Spirit" ], 6, 55, 6, 5, 99, 5000000, 1302, 747, 241, 2790, 1484, 470, 1 ],
+ [ "Sabo, Dragon Claw", "DEX", [ "Free Spirit", "Fighter" ], 4, 30, 5, 2, 70, 1066998, 233, 140, 34, 1296, 686, 186, 1 ],
+ [ "Sabo, Revolutionary Army Chief of Staff", "DEX", [ "Free Spirit", "Fighter" ], 5, 50, 4, 3, 99, 5000000, 1228, 602, 142, 2484, 1325, 340, 1 ],
+ [ "Nico Olvia", "PSY", [ "Shooter", "Cerebral" ], 3, 12, 6, 1, 50, 392109, 77, 29, 59, 883, 404, 274, 1 ],
+ [ "Nico Olvia, Archaeologist of Ohara", "PSY", [ "Shooter", "Cerebral" ], 4, 20, 4, 2, 99, 3000000, 800, 339, 223, 1602, 713, 461, 1 ],
+ [ "Jaguar D. Saul", "PSY", [ "Powerhouse", "Free Spirit" ], 3, 12, 5, 1, 50, 392109, 173, 56, 29, 1353, 514, 157, 1 ],
+ [ "Jaguar D. Saul, Navy HQ Vice Admiral", "PSY", [ "Powerhouse", "Free Spirit" ], 4, 20, 4, 2, 99, 3000000, 1278, 441, 110, 2448, 929, 236, 1 ],
+ [ "Nico Robin, Girl of Ohara", "QCK", [ "Cerebral", "Fighter" ], 3, 9, 4, 2, 50, 392109, 38, 18, 94, 522, 273, 378, 1 ],
+ [ "Hina, Graceful Honor Student", "QCK", [ "Striker", "Cerebral" ], 4, 10, 5, 3, 35, 90778, 85, 27, 55, 511, 220, 257, 1 ],
+ [ "Hina, Polite Honor Student", "QCK", [ "Striker", "Cerebral" ], 5, 18, 5, 3, 70, 1066998, 501, 198, 259, 1044, 500, 414, 1 ],
+ [ "Boa Sandersonia", "DEX", [ "Fighter" ], 3, 12, 6, 1, 50, 392109, 249, 72, 47, 1040, 500, 176, 1 ],
+ [ "Boa Sandersonia, Kuja Pirates", "DEX", [ "Striker", "Powerhouse" ], 4, 20, 4, 3, 99, 3000000, 1043, 442, 137, 1772, 905, 318, 1 ],
+ [ "Boa Marigold", "STR", [ "Striker" ], 3, 12, 5, 1, 50, 392109, 183, 40, 31, 1062, 517, 158, 1 ],
+ [ "Boa Marigold, Kuja Pirates", "STR", [ "Slasher", "Powerhouse" ], 4, 20, 4, 3, 99, 3000000, 1003, 470, 110, 1892, 947, 284, 1 ],
+ [ "Marguerite, Female Warrior", "PSY", [ "Shooter" ], 3, 9, 4, 1, 35, 136167, 136, 72, 62, 699, 401, 189, 1 ],
+ [ "Marguerite, Kuja Warriors", "PSY", [ "Shooter" ], 4, 15, 5, 2, 70, 1066998, 642, 339, 143, 1003, 713, 301, 1 ],
+ [ "Kikyo", "QCK", [ "Shooter" ], 4, 14, 5, 2, 70, 1066998, 132, 94, 56, 999, 741, 262, 1 ],
+ [ "Gloriosa", "INT", [ "Cerebral", "Fighter" ], 3, 14, 4, 2, 60, 674274, 586, 351, 79, 612, 378, 400, 1 ],
+ [ "Destructive Female Archer, Kuja Warriors", "STR", [ "Shooter" ], 3, 10, 5, 1, 60, 674274, 62, 31, 40, 933, 574, 252, 1 ],
+ [ "Scheming Female Archer, Kuja Warriors", "INT", [ "Shooter" ], 3, 10, 5, 1, 60, 674274, 58, 28, 44, 901, 549, 266, 1 ],
+ [ "Smart Swordswoman, Kuja Warriors", "INT", "Slasher", 3, 10, 4, 1, 60, 674274, 65, 98, 25, 787, 880, 174, 1 ],
+ [ "Bright Swordswoman, Kuja Warriors", "PSY", "Slasher", 3, 10, 4, 1, 60, 674274, 63, 90, 30, 762, 843, 191, 1 ],
+ [ "Skilled Female Fighter, Kuja Warriors", "DEX", [ "Fighter", "Powerhouse" ], 3, 10, 6, 1, 60, 674274, 120, 50, 26, 1204, 668, 175, 1 ],
+ [ "Nimble Female Fighter, Kuja Warriors", "QCK", [ "Fighter", "Powerhouse" ], 3, 10, 6, 1, 60, 674274, 128, 47, 24, 1261, 649, 170, 1 ],
+ [ "Shuraiya Bascùd", "DEX", [ "Fighter", "Driven" ], 3, 9, 5, 2, 35, 136167, 402, 190, 65, 879, 410, 127, 1 ],
+ [ "Shuraiya Bascùd, Pirate Executioner", "DEX", [ "Fighter", "Driven" ], 4, 15, 4, 2, 70, 1066998, 812, 358, 80, 1474, 742, 188, 1 ],
+ [ "Gasparde", "STR", [ "Powerhouse", "Fighter" ], 3, 12, 5, 1, 50, 392109, 129, 67, 18, 1494, 571, 101, 1 ],
+ [ "Gasparde, Gasparde Pirates", "STR", [ "Powerhouse", "Striker" ], 4, 20, 5, 4, 99, 3000000, 1437, 516, 63, 2501, 1002, 198, 1 ],
+ [ "Needless", "QCK", [ "Slasher", "Driven" ], 3, 14, 6, 1, 70, 1066998, 88, 120, 37, 973, 802, 223, 1 ],
+ [ "Ricky", "INT", [ "Cerebral", "Striker" ], 4, 18, 6, 3, 70, 1066998, 207, 102, 62, 1177, 524, 246, 1 ],
+ [ "Ricky, Mysterious Gladiator", "INT", [ "Cerebral", "Striker" ], 5, 30, 6, 4, 99, 4000000, 1102, 467, 199, 2689, 900, 395, 1 ],
+ [ "Leo", "QCK", [ "Striker", "Free Spirit" ], 4, 18, 5, 3, 70, 1066998, 131, 142, 54, 979, 700, 222, 1 ],
+ [ "Leo, Captain of the Tontatta Warriors", "QCK", [ "Striker", "Free Spirit" ], 5, 30, 4, 4, 99, 4000000, 918, 637, 177, 1934, 1351, 371, 1 ],
+ [ "Mansherry", "PSY", "Striker", 4, 18, 6, 3, 70, 1066998, 100, 94, 86, 717, 416, 307, 1 ],
+ [ "Mansherry, Princess of the Tontatta Tribe", "PSY", [ "Striker", "Free Spirit" ], 5, 30, 4, 4, 99, 4000000, 642, 371, 260, 1510, 642, 557, 1 ],
+ [ "Kyros", "DEX", [ "Slasher", "Powerhouse" ], 4, 18, 4, 3, 70, 1066998, 192, 152, 43, 1106, 713, 189, 1 ],
+ [ "Kyros, Former Captain of the Riku Royal Army", "DEX", [ "Slasher", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1042, 657, 143, 2377, 1373, 290, 1 ],
+ [ "Don Sai", "STR", [ "Striker", "Fighter" ], 4, 18, 4, 3, 70, 1066998, 130, 130, 31, 1300, 673, 130, 1 ],
+ [ "Don Sai, Flower Country Gang", "STR", [ "Striker", "Fighter" ], 5, 30, 4, 4, 99, 4000000, 1231, 631, 87, 3013, 1300, 202, 1 ],
+ [ "Fujitora", "INT", [ "Driven", "Powerhouse" ], 5, 30, 4, 4, 70, 1066998, 430, 250, 77, 1890, 754, 204, 1 ],
+ [ "Issho", "INT", [ "Driven", "Powerhouse" ], 6, 55, 4, 5, 99, 5000000, 1820, 700, 201, 3809, 1380, 325, 1 ],
+ [ "Musshuru", "INT", [ "Driven", "Fighter" ], 3, 16, 6, 2, 50, 392109, 103, 110, 34, 729, 530, 189, 1 ],
+ [ "Musshuru, Poison Spore Human", "INT", [ "Driven", "Striker" ], 4, 26, 4, 3, 99, 3000000, 667, 472, 131, 1419, 1142, 302, 1 ],
+ [ "Saga", "QCK", [ "Slasher", "Driven" ], 3, 16, 5, 2, 50, 392109, 143, 115, 21, 977, 551, 141, 1 ],
+ [ "Saga, Cursed Holy Sword", "QCK", [ "Slasher", "Driven" ], 4, 26, 4, 3, 99, 3000000, 912, 497, 93, 1952, 1093, 220, 1 ],
+ [ "X Drake, Captain of the Drake Pirates", "PSY", [ "Cerebral", "Slasher" ], 4, 25, 5, 2, 70, 1066998, 545, 220, 52, 1353, 693, 179, 1 ],
+ [ "'Red Flag' X Drake, Captain of the Drake Pirates", "PSY", [ "Cerebral", "Powerhouse" ], 5, 40, 4, 3, 99, 4000000, 1297, 631, 130, 2599, 1230, 300, 1 ],
+ [ "Rebecca, Parasol Rhytm", "PSY", [ "Striker", "Free Spirit" ], 4, 10, 6, 2, 35, 90778, 59, 14, 79, 462, 130, 328, 1 ],
+ [ "Rebecca, Rainbow Melody", "PSY", [ "Striker", "Free Spirit" ], 5, 17, 4, 3, 70, 1066998, 400, 93, 262, 896, 300, 505, 1 ],
+ [ "Dr. Indigo", "DEX", [ "Cerebral", "Shooter" ], 3, 12, 4, 1, 50, 392109, 66, 36, 41, 965, 497, 209, 1 ],
+ [ "Dr. Indigo, Golden Lion Pirates", "DEX", [ "Cerebral", "Shooter" ], 4, 20, 4, 2, 99, 3000000, 903, 432, 163, 1796, 911, 352, 1 ],
+ [ "Commander Scarlet", "INT", [ "Powerhouse", "Free Spirit" ], 3, 12, 5, 1, 50, 392109, 121, 47, 5, 1323, 520, 59, 1 ],
+ [ "Commander Scarlet, Golden Lion Pirates", "INT", [ "Powerhouse", "Free Spirit" ], 4, 20, 4, 2, 99, 3000000, 1271, 467, 30, 2302, 980, 92, 1 ],
+ [ "Billy the Thunder Bird", "PSY", [ "Shooter", "Powerhouse" ], 3, 10, 4, 2, 50, 392109, 54, 99, 40, 556, 803, 217, 1 ],
+ [ "Coby, Petty Officer in the Rain", "DEX", [ "Fighter", "Cerebral" ], 4, 13, 6, 2, 50, 392109, 79, 50, 47, 963, 471, 178, 1 ],
+ [ "Coby, Petty Officer Sparkling with Dew", "DEX", [ "Fighter", "Cerebral" ], 5, 20, 4, 3, 99, 3000000, 897, 429, 134, 1946, 995, 344, 1 ],
+ [ "Black Arm Zephyr", "STR", [ "Fighter", "Driven" ], 4, 25, 5, 2, 70, 1066998, 545, 404, 0, 1384, 822, 0, 1 ],
+ [ "Black Arm Zephyr, Former Navy HQ Admiral", "STR", [ "Fighter", "Driven" ], 5, 40, 4, 3, 99, 4000000, 1318, 749, 0, 2620, 1500, 0, 1 ],
+ [ "Ain, NEO Marines", "INT", [ "Slasher", "Cerebral" ], 4, 18, 5, 2, 50, 392109, 197, 101, 54, 1078, 492, 217, 1 ],
+ [ "Ain, Zephyr's Last Pupil", "INT", [ "Slasher", "Cerebral" ], 5, 30, 4, 3, 99, 3000000, 1019, 447, 169, 1986, 870, 357, 1 ],
+ [ "Binz, NEO Marines", "DEX", [ "Striker", "Free Spirit" ], 4, 18, 4, 2, 50, 392109, 220, 122, 32, 1164, 541, 167, 1 ],
+ [ "Binz, Zephyr's Last Pupil", "DEX", [ "Striker", "Free Spirit" ], 5, 30, 4, 3, 99, 3000000, 1091, 484, 115, 2107, 1042, 280, 1 ],
+ [ "Golden Lion Shiki", "STR", [ "Driven", "Slasher" ], 4, 30, 4, 2, 70, 1066998, 244, 164, 39, 1274, 709, 177, 1 ],
+ [ "Golden Lion Shiki, Golden Lion Pirates", "STR", [ "Driven", "Slasher" ], 5, 50, 4, 3, 99, 5000000, 1218, 638, 138, 2424, 1407, 292, 1 ],
+ [ "Nami, Rejuvenated Navigator", "PSY", [ "Cerebral", "Fighter" ], 3, 9, 5, 2, 50, 392109, 46, 27, 39, 770, 389, 266, 1 ],
+ [ "Nami, Playful Bar Idol", "PSY", [ "Cerebral", "Striker" ], 4, 18, 4, 3, 99, 3000000, 718, 322, 220, 1505, 707, 426, 1 ],
+ [ "Nico Robin, Rejuvanted Archaeologist", "QCK", [ "Cerebral", "Fighter" ], 3, 12, 6, 2, 50, 392109, 95, 39, 24, 992, 524, 162, 1 ],
+ [ "Nico Robin, Pretty Bar Dancer", "QCK", [ "Cerebral", "Fighter" ], 4, 20, 4, 3, 99, 3000000, 921, 468, 119, 1789, 941, 346, 1 ],
+ [ "Chopper, Rejuvenated Ship Doctor", "INT", [ "Striker", "Cerebral" ], 3, 9, 4, 2, 50, 392109, 67, 55, 49, 524, 506, 300, 1 ],
+ [ "Monkey D. Luffy, Dream-Pursuing Adventurer", "STR", [ "Fighter", "Free Spirit" ], 4, 17, 4, 3, 70, 1066998, 242, 148, 28, 1505, 744, 106, 1 ],
+ [ "Monkey D. Luffy, Loyal Straw Hat Crew", "STR", [ "Fighter", "Free Spirit" ], 5, 27, 8, 4, 99, 4000000, 1438, 676, 72, 2722, 1411, 176, 1 ],
+ [ "Sanji, Dream-Pursuing Adventurer", "INT", [ "Fighter", "Powerhouse" ], 4, 17, 4, 3, 70, 1066998, 268, 115, 32, 1545, 698, 122, 1 ],
+ [ "Sanji, Loyal Straw Hat Crew", "INT", [ "Fighter", "Powerhouse" ], 5, 27, 5, 4, 99, 4000000, 1471, 630, 86, 2834, 1224, 226, 1 ],
+ [ "Nami, Dream-Pursuing Adventurer", "QCK", [ "Striker", "Cerebral" ], 4, 17, 5, 3, 70, 1066998, 190, 81, 57, 1051, 602, 230, 1 ],
+ [ "Nami, Loyal Straw Hat Crew", "QCK", [ "Striker", "Cerebral" ], 5, 27, 6, 4, 99, 4000000, 979, 540, 191, 1980, 1000, 455, 1 ],
+ [ "Monkey D. Luffy, Wakes of the Endless Dream, Straw Hat Crew", "STR", [ "Fighter", "Free Spirit" ], 5, 30, 4, 3, 70, 1066998, 390, 290, 150, 1559, 840, 290, 1 ],
+ [ "Monkey D. Luffy, A Vow in the Great Age of Pirates - Pirate King", "STR", [ "Fighter", "Free Spirit" ], 6, 55, 4, 4, 99, 5000000, 1490, 776, 250, 3440, 1430, 351, 1 ],
+ [ "Cavendish", "QCK", [ "Slasher", "Driven" ], 5, 30, 4, 4, 70, 1066998, 504, 277, 148, 1603, 808, 287, 1 ],
+ [ "Cavendish of Hakuba", "QCK", [ "Slasher", "Driven" ], 6, 55, 4, 5, 99, 5000000, 1541, 749, 231, 2970, 1460, 438, 1 ],
+ [ "Suleiman", "PSY", [ "Slasher", "Cerebral" ], 4, 18, 6, 3, 70, 1066998, 102, 151, 34, 981, 780, 201, 1 ],
+ [ "Suleiman the Beheader", "PSY", [ "Slasher", "Cerebral" ], 5, 30, 7, 4, 99, 4000000, 903, 713, 144, 2000, 1410, 336, 1 ],
+ [ "Orlumbus", "DEX", [ "Powerhouse", "Striker" ], 4, 18, 4, 3, 70, 1066998, 201, 102, 22, 1461, 668, 152, 1 ],
+ [ "Massacre Rule Orlumbus", "DEX", [ "Powerhouse", "Striker" ], 5, 30, 6, 4, 99, 4000000, 1389, 584, 103, 3065, 1180, 231, 1 ],
+ [ "Dagama", "INT", [ "Slasher", "Driven" ], 4, 18, 6, 3, 70, 1066998, 177, 52, 31, 1332, 554, 213, 1 ],
+ [ "Dagama, Tactician of Prodence Kingdom", "INT", [ "Slasher", "Driven" ], 5, 30, 5, 4, 99, 4000000, 1255, 490, 150, 2940, 978, 320, 1 ],
+ [ "Elizabello II", "STR", [ "Powerhouse", "Fighter" ], 4, 18, 5, 3, 70, 1066998, 123, 157, 20, 1137, 800, 177, 1 ],
+ [ "Elizabello II, King of Prodence Kingdom", "STR", [ "Powerhouse", "Fighter" ], 5, 30, 4, 4, 99, 4000000, 1070, 724, 131, 2152, 1400, 303, 1 ],
+ [ "Ideo", "QCK", [ "Shooter", "Fighter" ], 4, 18, 5, 3, 70, 1066998, 151, 120, 29, 1230, 679, 180, 1 ],
+ [ "Destruction Cannon Ideo", "QCK", [ "Shooter", "Fighter" ], 5, 30, 5, 4, 99, 4000000, 1171, 603, 123, 2404, 1318, 294, 1 ],
+ [ "Tashigi, Brash Kendo Girl", "INT", [ "Striker", "Cerebral" ], 4, 10, 6, 3, 35, 90778, 91, 25, 56, 600, 232, 291, 1 ],
+ [ "Tashigi, Dream Kendo Girl", "INT", [ "Striker", "Cerebral" ], 5, 18, 4, 3, 70, 1066998, 523, 177, 252, 1088, 483, 418, 1 ],
+ [ "Fukuro, Secret Intelligence Agency CP9", "QCK", [ "Powerhouse", "Fighter" ], 4, 20, 8, 2, 99, 2000000, 73, 32, 38, 1462, 730, 342, 1 ],
+ [ "Jabra, Secret Intelligence Agency CP9", "STR", [ "Powerhouse", "Free Spirit" ], 4, 25, 6, 3, 99, 3000000, 76, 59, 29, 1992, 1210, 210, 1 ],
+ [ "Blueno, Secret Intelligence Agency CP9", "PSY", [ "Powerhouse", "Fighter" ], 4, 20, 4, 2, 99, 2000000, 99, 30, 19, 2330, 712, 193, 1 ],
+ [ "Kumadori, Secret Intelligence Agency CP9", "DEX", [ "Powerhouse", "Striker" ], 4, 20, 4, 2, 99, 2000000, 84, 35, 32, 1707, 803, 277, 1 ],
+ [ "Gecko Moria, Lord of Florian Triangle", "DEX", [ "Slasher", "Driven" ], 4, 25, 4, 2, 70, 1066998, 689, 223, 31, 1505, 700, 112, 1 ],
+ [ "Gecko Moria, Ruler of Florian Triangle", "DEX", [ "Slasher", "Driven" ], 5, 40, 4, 3, 99, 4000000, 1419, 629, 79, 3023, 1211, 229, 1 ],
+ [ "Foxy, Nuisance of Donut Race", "STR", [ "Free Spirit", "Fighter" ], 3, 16, 5, 2, 50, 392109, 165, 94, 44, 949, 503, 162, 1 ],
+ [ "Foxy, Cowardly Fighter", "STR", [ "Free Spirit", "Shooter" ], 4, 26, 4, 3, 99, 3000000, 867, 424, 120, 1877, 942, 313, 1 ],
+ [ "Porche, Flower Cheerleader", "PSY", [ "Shooter", "Striker" ], 3, 10, 6, 2, 35, 136167, 129, 62, 40, 658, 372, 170, 1 ],
+ [ "Porche, Cutie Baton", "PSY", [ "Shooter", "Slasher" ], 4, 20, 4, 3, 70, 1066998, 591, 314, 121, 1103, 656, 330, 1 ],
+ [ "Suppresion Uniformed Jailer", "STR", [ "Shooter", "Cerebral" ], 3, 12, 6, 1, 60, 449516, 40, 21, 30, 858, 663, 242, 1 ],
+ [ "Urgent Uniformed Jailer", "QCK", [ "Shooter", "Cerebral" ], 3, 12, 6, 1, 60, 449516, 52, 20, 31, 894, 640, 246, 1 ],
+ [ "Siege Uniformed Jailer", "DEX", [ "Shooter", "Cerebral" ], 3, 12, 6, 1, 60, 449516, 54, 19, 31, 877, 651, 244, 1 ],
+ [ "Black Jailer", "INT", [ "Striker", "Driven" ], 3, 12, 6, 1, 60, 449516, 55, 39, 20, 994, 727, 177, 1 ],
+ [ "Yellow Jailer", "PSY", [ "Striker", "Driven" ], 3, 12, 6, 1, 60, 449516, 92, 33, 22, 1003, 691, 192, 1 ],
+ [ "Minotaur", "PSY", [ "Striker", "Powerhouse" ], 3, 30, 5, 1, 70, 1066998, 549, 237, -400, 2225, 885, -400, 1 ],
+ [ "Minozebra", "INT", [ "Striker", "Powerhouse" ], 3, 30, 6, 1, 70, 1066998, 563, 229, -200, 2050, 835, -200, 1 ],
+ [ "Sphinx", "STR", [ "Fighter", "Powerhouse" ], 3, 30, 4, 1, 70, 1066998, 622, 339, -300, 2455, 905, -300, 1 ],
+ [ "Saldeath, Chief Guard", "DEX", [ "Cerebral", "Fighter" ], 3, 15, 4, 2, 70, 1066998, 163, 131, 57, 912, 686, 309, 1 ],
+ [ "Army Wolf", "QCK", "Fighter", 2, 8, 6, 0, 50, 261406, 36, 31, 21, 794, 585, 173, 1 ],
+ [ "Hannyabal, Vice Warden", "PSY", [ "Driven", "Striker" ], 3, 9, 6, 1, 35, 136167, 70, 31, 29, 824, 412, 128, 1 ],
+ [ "Hannyabal, Vice Warden of the Underwater Prison Impel Down", "PSY", [ "Driven", "Striker" ], 4, 16, 4, 3, 70, 1066998, 749, 352, 100, 1590, 755, 190, 1 ],
+ [ "Magellan, Chief Warden", "STR", [ "Powerhouse", "Shooter" ], 3, 18, 4, 1, 50, 392109, 154, 56, -250, 1093, 470, -250, 1 ],
+ [ "Magellan, Chief Warden of the Underwater Prison Impel Down", "STR", [ "Powerhouse", "Shooter" ], 4, 30, 5, 3, 99, 3000000, 1014, 470, -250, 3000, 1159, -300, 1 ],
+ [ "Koala, Beach Angel", "QCK", [ "Fighter", "Free Spirit" ], 4, 13, 6, 2, 50, 392109, 133, 79, 37, 994, 479, 187, 1 ],
+ [ "Koala, Goddess of Paradise", "QCK", [ "Fighter", "Free Spirit" ], 5, 20, 4, 3, 99, 3000000, 902, 412, 123, 1822, 984, 359, 1 ],
+ [ "Gild Tesoro", "PSY", [ "Cerebral", "Driven" ], 4, 30, 5, 5, 99, 3000000, 187, 156, 56, 1756, 1094, 268, 1 ],
+ [ "Gild Tesoro, Casino King of Gran Tesoro", "PSY", [ "Cerebral", "Driven" ], 5, 50, 4, 5, 99, 2000000, 1756, 1094, 268, 2256, 1300, 306, 1 ],
+ [ "Carina", "DEX", [ "Cerebral", "Slasher" ], 3, 10, 5, 1, 35, 136167, 98, 54, 58, 652, 394, 185, 1 ],
+ [ "Carina, Diva of Gran Tesoro", "DEX", [ "Cerebral", "Slasher" ], 4, 20, 5, 3, 70, 1066998, 597, 321, 132, 1074, 719, 306, 1 ],
+ [ "Baccarat", "INT", [ "Fighter", "Striker" ], 3, 12, 5, 2, 50, 392109, 44, 31, 123, 888, 444, 222, 1 ],
+ [ "Baccarat, Concierge of Gran Tesoro", "INT", [ "Fighter", "Striker" ], 4, 20, 4, 2, 99, 3000000, 777, 333, 222, 1552, 777, 456, 1 ],
+ [ "Dice", "STR", [ "Free Spirit", "Powerhouse" ], 3, 12, 5, 2, 50, 392109, 84, 58, -500, 1624, 484, -500, 1 ],
+ [ "Dice, Dealer of Gran Tesoro", "STR", [ "Free Spirit", "Powerhouse" ], 4, 20, 4, 2, 99, 3000000, 1493, 410, -500, 3035, 1005, -500, 1 ],
+ [ "Mr. Tanaka", "QCK", [ "Shooter", "Free Spirit" ], 3, 12, 5, 2, 50, 392109, 54, 62, 32, 924, 528, 188, 1 ],
+ [ "Tanaka, Security Guard of Gran Tesoro", "QCK", [ "Shooter", "Free Spirit" ], 4, 20, 4, 2, 99, 3000000, 849, 449, 131, 1706, 1089, 305, 1 ],
+ [ "Brook, Dream-Pursuing Adventurer", "PSY", [ "Slasher", "Free Spirit" ], 4, 17, 6, 3, 70, 1066998, 249, 101, 40, 1530, 684, 133, 1 ],
+ [ "Brook, Loyal Straw Hat Crew", "PSY", [ "Slasher", "Free Spirit" ], 5, 27, 4, 4, 99, 4000000, 1461, 636, 100, 2788, 1243, 234, 1 ],
+ [ "Roronoa Zoro, Dream-Pursuing Adventurer", "DEX", [ "Slasher", "Driven" ], 4, 17, 5, 3, 70, 1066998, 270, 124, 23, 1585, 715, 98, 1 ],
+ [ "Roronoa Zoro, Loyal Straw Hat Crew", "DEX", [ "Slasher", "Driven" ], 5, 27, 4, 4, 99, 4000000, 1531, 646, 60, 2900, 1321, 171, 1 ],
+ [ "Chopper, Dream-Pursuing Adventurer", "DEX", [ "Shooter", "Cerebral" ], 4, 17, 5, 3, 70, 1066998, 196, 98, 51, 1170, 624, 212, 1 ],
+ [ "Chopper, Loyal Straw Hat Crew", "DEX", [ "Shooter", "Cerebral" ], 5, 27, 4, 4, 99, 4000000, 1110, 571, 179, 2212, 1099, 368, 1 ],
+ [ "Oars", "STR", [ "Fighter", "Powerhouse" ], 4, 30, 4, 1, 70, 1066998, 902, 473, 74, 2018, 1028, -444, 1 ],
+ [ "Oars, the Devil", "STR", [ "Fighter", "Powerhouse" ], 5, 50, 4, 2, 99, 4000000, 1920, 977, -444, 4400, 1402, -444, 1 ],
+ [ "Rainbow Armored Crab", "INT", "Evolver", 3, 4, 5, 0, 1, 0, 30, 500, 0, 30, 500, 0, 1 ],
+ [ "Blenheim", "DEX", [ "Slasher", "Powerhouse" ], 4, 18, 6, 3, 70, 1066998, 206, 106, 19, 1051, 624, 95, 1 ],
+ [ "Blenheim, The Cutlass", "DEX", [ "Slasher", "Powerhouse" ], 5, 30, 6, 4, 99, 4000000, 949, 512, 44, 2643, 1355, 224, 1 ],
+ [ "Kingdew", "PSY", [ "Fighter", "Powerhouse" ], 4, 18, 5, 3, 70, 1066998, 232, 94, 38, 1123, 522, 161, 1 ],
+ [ "Kingdew, Twin Fist Gauntlets", "PSY", [ "Fighter", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1031, 432, 113, 2670, 1180, 308, 1 ],
+ [ "Haruta", "INT", [ "Slasher", "Cerebral" ], 4, 18, 5, 3, 70, 1066998, 132, 103, 34, 920, 583, 177, 1 ],
+ [ "Haruta, Gale Small Swordsman", "INT", [ "Slasher", "Cerebral" ], 5, 30, 4, 4, 99, 4000000, 833, 490, 123, 2025, 1309, 372, 1 ],
+ [ "Atmos", "STR", [ "Slasher", "Powerhouse" ], 4, 18, 6, 3, 70, 1066998, 255, 99, 13, 1242, 534, 89, 1 ],
+ [ "Atmos, The Water Buffalo", "STR", [ "Slasher", "Powerhouse" ], 5, 30, 5, 4, 99, 4000000, 1159, 440, 41, 3552, 1238, 132, 1 ],
+ [ "Speed Jiru", "QCK", [ "Striker", "Driven" ], 4, 18, 6, 3, 70, 1066998, 242, 86, 30, 1198, 500, 148, 1 ],
+ [ "Speed Jiru, Shield and Lance", "QCK", [ "Striker", "Driven" ], 5, 30, 4, 4, 99, 4000000, 1110, 412, 99, 2905, 1152, 288, 1 ],
+ [ "Aokiji, Navy HQ's Strongest Forces", "QCK", [ "Striker", "Shooter" ], 5, 30, 4, 3, 70, 1066998, 362, 271, 103, 1599, 800, 240, 1 ],
+ [ "Kuzan", "QCK", [ "Striker", "Shooter" ], 6, 55, 4, 4, 99, 5000000, 1524, 740, 196, 3300, 1466, 392, 1 ],
+ [ "Boa Hancock, Beachgoing Empress", "DEX", [ "Fighter", "Free Spirit" ], 4, 13, 4, 2, 50, 392109, 181, 132, 47, 945, 539, 181, 1 ],
+ [ "Boa Hancock, Maiden Drowned in Love", "DEX", [ "Fighter", "Free Spirit" ], 5, 20, 4, 3, 99, 3000000, 863, 448, 144, 1724, 1132, 326, 1 ],
+ [ "Ganfor, Former God of Skypiea", "PSY", "Striker", 4, 18, 6, 2, 50, 392109, 222, 122, 22, 1122, 622, 122, 1 ],
+ [ "Ganfor, God of Skypiea", "PSY", "Striker", 5, 30, 4, 3, 99, 3000000, 1111, 611, 111, 2122, 1222, 222, 1 ],
+ [ "Ohm, Sky Breeder", "INT", [ "Cerebral", "Powerhouse" ], 4, 20, 6, 3, 70, 1778330, 197, 169, -200, 1710, 1170, -150, 1 ],
+ [ "Jewelry Bonney, Splashing Sapphire", "STR", [ "Fighter", "Free Spirit" ], 4, 12, 6, 1, 50, 392109, 388, 212, 86, 1006, 559, 194, 1 ],
+ [ "Jewelry Bonney, Pearl White Gleam", "STR", [ "Fighter", "Free Spirit" ], 5, 20, 4, 2, 99, 3000000, 929, 500, 149, 2000, 989, 301, 1 ],
+ [ "Violet, Stirring Summer Vacation", "QCK", [ "Fighter", "Cerebral" ], 4, 12, 5, 1, 50, 392109, 109, 58, 55, 923, 480, 243, 1 ],
+ [ "Violet, Blushing Summer Vacation", "QCK", [ "Fighter", "Cerebral" ], 5, 20, 4, 2, 99, 3000000, 855, 420, 192, 1654, 837, 404, 1 ],
+ [ "Yorki", "PSY", [ "Slasher", "Free Spirit" ], 3, 12, 6, 1, 50, 392109, 102, 91, 36, 902, 584, 201, 1 ],
+ [ "Calico Yorki", "PSY", [ "Slasher", "Free Spirit" ], 4, 20, 4, 3, 99, 3000000, 840, 516, 170, 1583, 1153, 315, 1 ],
+ [ "Rumbar Pirates Brook", "QCK", [ "Slasher", "Free Spirit" ], 3, 12, 5, 1, 50, 392109, 139, 80, 31, 1006, 528, 184, 1 ],
+ [ "Rumbar Pirates Musician and Swordman Brook", "QCK", [ "Slasher", "Free Spirit" ], 4, 20, 4, 2, 99, 3000000, 942, 466, 139, 1894, 984, 299, 1 ],
+ [ "Rumbar Pirates Laboon", "STR", "Fighter", 3, 9, 6, 1, 50, 392109, 155, 55, 23, 1302, 570, 151, 1 ],
+ [ "Nico Robin, Dream-Pursuing Adventurer", "INT", [ "Fighter", "Cerebral" ], 4, 17, 4, 3, 70, 1066998, 213, 96, 45, 1147, 626, 216, 1 ],
+ [ "Nico Robin, Loyal Straw Hat Crew", "INT", [ "Fighter", "Cerebral" ], 5, 27, 4, 4, 99, 4000000, 1098, 551, 180, 2076, 1099, 400, 1 ],
+ [ "Usopp, Dream-Pursuing Adventurer", "QCK", "Shooter", 4, 17, 6, 3, 70, 1066998, 224, 90, 47, 1222, 593, 208, 1 ],
+ [ "Usopp, Loyal Straw Hat Crew", "QCK", "Shooter", 5, 27, 5, 4, 99, 4000000, 1167, 542, 174, 2301, 954, 376, 1 ],
+ [ "Franky, Dream-Pursuing Adventurer", "STR", [ "Shooter", "Free Spirit" ], 4, 17, 6, 3, 70, 1066998, 244, 140, 21, 1590, 738, 95, 1 ],
+ [ "Franky, Loyal Straw Hat Crew", "STR", [ "Shooter", "Free Spirit" ], 5, 27, 5, 4, 99, 4000000, 1525, 660, 50, 2801, 1395, 161, 1 ],
+ [ "Baby 5, Dolphin Floatie", "STR", [ "Slasher", "Striker" ], 4, 13, 4, 2, 50, 392109, 101, 103, 34, 910, 563, 177, 1 ],
+ [ "Baby 5, Dolphin Rider", "STR", [ "Slasher", "Striker" ], 5, 20, 4, 3, 99, 3000000, 843, 489, 130, 1624, 1212, 309, 1 ],
+ [ "Gairam, World Pirates", "DEX", [ "Shooter", "Striker" ], 4, 20, 6, 2, 99, 3000000, 85, 35, 15, 1735, 1135, 175, 1 ],
+ [ "Sebastian, World Pirates", "QCK", [ "Powerhouse", "Striker" ], 4, 20, 6, 2, 99, 3000000, 108, 58, 0, 2258, 1258, 0, 1 ],
+ [ "Nightin, World Pirates", "PSY", [ "Fighter", "Cerebral" ], 4, 20, 4, 2, 99, 3000000, 64, 27, 32, 1654, 987, 321, 1 ],
+ [ "Boa Hancock, Amazon Lily Princess", "STR", [ "Shooter", "Free Spirit" ], 4, 20, 4, 3, 99, 3000000, 72, 42, 22, 1692, 1202, 262, 1 ],
+ [ "Byrnndi World", "INT", [ "Shooter", "Driven" ], 4, 25, 4, 2, 70, 1066998, 472, 331, 19, 1093, 809, 97, 1 ],
+ [ "Byrnndi World, Captain of the World Pirates", "INT", [ "Shooter", "Driven" ], 5, 40, 4, 3, 99, 4000000, 1011, 744, 52, 1990, 1483, 170, 1 ],
+ [ "Oars Jr.", "STR", [ "Slasher", "Powerhouse" ], 4, 16, 6, 2, 50, 392109, 266, 119, 9, 1306, 548, 47, 1 ],
+ [ "Oars Jr. of the Whitebeard Pirates", "STR", [ "Slasher", "Powerhouse" ], 5, 26, 4, 3, 99, 3000000, 1241, 482, 31, 2802, 1171, 90, 1 ],
+ [ "Bastille", "INT", [ "Slasher", "Driven" ], 3, 15, 4, 2, 70, 1066998, 265, 169, 1, 1725, 1102, 9, 1 ],
+ [ "Yamakaji", "STR", [ "Slasher", "Driven" ], 3, 15, 5, 2, 70, 1066998, 340, 128, 24, 1978, 800, 99, 1 ],
+ [ "Hina, Black Cage Corps", "INT", [ "Fighter", "Cerebral" ], 3, 15, 5, 2, 70, 1066998, 205, 105, 61, 1355, 707, 253, 1 ],
+ [ "Smoker, Navy Headquarters Commodore", "PSY", [ "Striker", "Driven" ], 3, 15, 6, 2, 70, 1066998, 241, 160, 33, 1552, 1032, 132, 1 ],
+ [ "Dracule Mihawk, Hawkeyes", "QCK", "Slasher", 4, 30, 4, 3, 99, 3000000, 167, 124, 6, 2119, 1390, 132, 1 ],
+ [ "Kizaru, Navy Headquarters Admiral", "DEX", [ "Shooter", "Fighter" ], 4, 30, 4, 3, 99, 3000000, 166, 109, 50, 2084, 1252, 209, 1 ],
+ [ "Sentomaru, Navy HQ Officer", "INT", [ "Striker", "Slasher" ], 4, 15, 6, 3, 50, 392109, 251, 96, 30, 1603, 442, 140, 1 ],
+ [ "Sentomaru of the Axe, Navy HQ Officer", "INT", [ "Striker", "Slasher" ], 5, 30, 4, 4, 99, 4000000, 1524, 376, 90, 3205, 1006, 362, 1 ],
+ [ "Smoker, G-5 Unit 01", "DEX", [ "Striker", "Driven" ], 4, 15, 6, 3, 50, 392109, 178, 159, 22, 1324, 659, 99, 1 ],
+ [ "Smoker, G-5 Navy HQ Vice Admiral", "DEX", [ "Striker", "Driven" ], 5, 30, 4, 4, 99, 4000000, 1257, 594, 44, 2738, 1430, 196, 1 ],
+ [ "Tashigi, G-5 Unit 01", "QCK", [ "Slasher", "Cerebral" ], 4, 15, 6, 3, 50, 392109, 109, 89, 60, 1061, 403, 230, 1 ],
+ [ "Tashigi, G-5 Navy HQ Captain ", "QCK", [ "Slasher", "Cerebral" ], 5, 30, 5, 4, 99, 4000000, 998, 339, 185, 1990, 937, 479, 1 ],
+ [ "Maynard, Navy HQ Vice Admiral", "PSY", [ "Slasher", "Powerhouse" ], 4, 15, 5, 3, 50, 392109, 120, 140, 34, 1172, 614, 153, 1 ],
+ [ "Maynard the Pursuer, Navy HQ Vice Admiral", "PSY", [ "Slasher", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1100, 549, 101, 2201, 1380, 303, 1 ],
+ [ "Bastille, Navy HQ Vice Admiral", "STR", [ "Slasher", "Driven" ], 4, 15, 6, 3, 50, 392109, 139, 123, 26, 1293, 594, 133, 1 ],
+ [ "'Shark Cutter' Bastille, Navy HQ Vice Admiral", "STR", [ "Slasher", "Driven" ], 5, 30, 7, 4, 99, 4000000, 1222, 519, 83, 2606, 1313, 259, 1 ],
+ [ "Kizaru, Navy HQ's Strongest Forces", "PSY", [ "Slasher", "Shooter" ], 5, 30, 6, 3, 70, 1066998, 316, 293, 101, 1376, 841, 279, 1 ],
+ [ "Borsalino", "PSY", [ "Slasher", "Shooter" ], 6, 55, 4, 4, 99, 5000000, 1321, 776, 231, 2590, 1489, 500, 1 ],
+ [ "Koala, Fishman Karate Assistant Instructor", "STR", [ "Fighter", "Free Spirit" ], 3, 12, 4, 1, 50, 392109, 33, 40, 49, 764, 543, 196, 1 ],
+ [ "Koala, Revolutionary Army Fishman Karate Assistant Instructor", "STR", [ "Fighter", "Free Spirit" ], 4, 20, 4, 3, 99, 3000000, 700, 481, 137, 1426, 1190, 357, 1 ],
+ [ "Hack, Fishman Karate Instructor", "INT", [ "Fighter", "Powerhouse" ], 3, 12, 6, 1, 50, 392109, 79, 55, 12, 904, 570, 91, 1 ],
+ [ "Hack, Revolutionary Army Fishman Karate Instructor", "INT", [ "Fighter", "Powerhouse" ], 4, 20, 5, 2, 99, 3000000, 849, 523, 51, 1872, 1201, 172, 1 ],
+ [ "'Straw Hat' Monkey D Luffy, Marineford Flight ", "QCK", [ "Fighter", "Striker" ], 5, 25, 4, 3, 99, 3000000, 340, 195, 22, 1890, 1242, 309, 1 ],
+ [ "'Fire Fist' Portgas D. Ace, On the Execution Platform", "STR", [ "Fighter", "Shooter" ], 4, 12, 4, 0, 35, 136167, 79, 30, 2, 590, 302, 5, 1 ],
+ [ "'Fire Fist' Portgas D. Ace, Marineford Flight", "STR", [ "Fighter", "Shooter" ], 5, 25, 4, 3, 99, 4000000, 1403, 793, 121, 2120, 1281, 246, 1 ],
+ [ "Marco, Collar Fluttering in the Autumn Breeze", "DEX", [ "Fighter", "Powerhouse" ], 4, 13, 4, 2, 50, 392109, 142, 79, 40, 940, 504, 201, 1 ],
+ [ "Marco, Tipsy Kimono", "DEX", [ "Fighter", "Powerhouse" ], 5, 20, 4, 3, 99, 3000000, 870, 452, 164, 1804, 1017, 374, 1 ],
+ [ "Marco, Whitebeard Pirates", "QCK", [ "Fighter", "Powerhouse" ], 4, 25, 4, 2, 70, 1066998, 740, 322, 100, 1377, 684, 187, 1 ],
+ [ "Whitebeard Pirates Marco, Revival of Flame", "QCK", [ "Fighter", "Powerhouse" ], 5, 40, 4, 3, 99, 4000000, 1309, 620, 142, 2370, 1236, 335, 1 ],
+ [ "'Bohemian Knight' Doma, Subordinates of the Whitebeard Pirates", "INT", "Slasher", 4, 30, 6, 3, 99, 3000000, 201, 102, 21, 2001, 1201, 251, 1 ],
+ [ "'Sky Rider' Shura", "DEX", "Striker", 4, 20, 4, 2, 70, 1778330, 254, 240, 48, 1092, 1029, 179, 1 ],
+ [ "Maelstrom Spider Squardo, Subordinates of the Whitebeard Pirates", "QCK", [ "Striker", "Slasher" ], 4, 25, 6, 3, 99, 3000000, 96, 69, -48, 2096, 1246, 96, 1 ],
+ [ "Decalvan Brothers, Subordinates of the Whitebeard Pirates", "PSY", "Fighter", 4, 25, 8, 3, 99, 3000000, 122, 52, 22, 2525, 1122, 152, 1 ],
+ [ "'Ice Witch' Whitey Bay, Subordinates of the Whitebeard Pirates", "DEX", [ "Slasher", "Driven" ], 4, 25, 6, 3, 99, 3000000, 81, 31, 31, 1931, 913, 301, 1 ],
+ [ "Edward Newgate, Rival of the Pirate King", "PSY", [ "Powerhouse", "Striker" ], 4, 30, 4, 2, 70, 1778330, 1116, 587, 51, 1744, 894, 103, 1 ],
+ [ "'Whitebeard' Edward Newgate, Grand Pirate", "PSY", [ "Powerhouse", "Striker" ], 5, 50, 4, 3, 99, 5000000, 1597, 762, 70, 2702, 1570, 170, 1 ],
+ [ "Donquixote Doflamingo, Pirates of the 'North Blue'", "STR", [ "Cerebral", "Driven" ], 4, 20, 4, 3, 70, 711332, 142, 109, 44, 1024, 679, 201, 1 ],
+ [ "Donquixote Doflamingo, Darkness of the 'North Blue'", "STR", [ "Cerebral", "Driven" ], 5, 30, 4, 4, 99, 4000000, 941, 603, 152, 1997, 1418, 344, 1 ],
+ [ "Senior Pink, Pirates of the 'North Blue'", "INT", [ "Shooter", "Free Spirit" ], 4, 20, 6, 3, 70, 711332, 277, 66, 31, 1526, 503, 174, 1 ],
+ [ "Senior Pink, Darkness of the 'North Blue'", "INT", [ "Shooter", "Free Spirit" ], 5, 30, 4, 4, 99, 4000000, 1472, 440, 130, 3050, 990, 310, 1 ],
+ [ "Vergo, Pirates of the 'North Blue'", "QCK", [ "Powerhouse", "Fighter" ], 4, 20, 5, 3, 70, 711332, 208, 98, 9, 1250, 559, 48, 1 ],
+ [ "Vergo, Darkness of the 'North Blue'", "QCK", [ "Powerhouse", "Fighter" ], 5, 30, 6, 4, 99, 4000000, 1250, 559, 48, 2694, 1389, 139, 1 ],
+ [ "Ace, Wasting Time Until Twilight", "STR", [ "Free Spirit", "Shooter" ], 4, 13, 6, 2, 50, 392109, 152, 90, 30, 961, 584, 174, 1 ],
+ [ "Ace, Face Glowing in the Moonlight", "STR", [ "Free Spirit", "Shooter" ], 5, 20, 4, 3, 99, 3000000, 890, 541, 130, 1948, 1187, 289, 1 ],
+ [ "Marshall D. Teach, Captain of the Blackbeard Pirates", "DEX", [ "Driven", "Powerhouse" ], 5, 30, 4, 3, 70, 1066998, 429, 287, 39, 1674, 854, 127, 1 ],
+ [ "Blackbeard, Captain of the Blackbeard Pirates", "DEX", [ "Driven", "Powerhouse" ], 6, 55, 4, 4, 99, 5000000, 1600, 789, 73, 3350, 1520, 244, 1 ],
+ [ "Laffitte", "DEX", [ "Shooter", "Driven" ], 4, 15, 6, 3, 50, 392109, 109, 92, 51, 995, 506, 202, 1 ],
+ [ "'Demon Sheriff' Laffitte", "DEX", [ "Shooter", "Driven" ], 5, 30, 4, 4, 99, 4000000, 917, 415, 152, 2094, 1132, 406, 1 ],
+ [ "Van Augur", "QCK", [ "Shooter", "Cerebral" ], 4, 15, 4, 3, 50, 392109, 99, 130, 48, 903, 620, 183, 1 ],
+ [ "'The Supersonic' Van Augur", "QCK", [ "Shooter", "Cerebral" ], 5, 30, 6, 4, 99, 4000000, 831, 578, 140, 1890, 1371, 357, 1 ],
+ [ "Jesus Burgess", "STR", [ "Fighter", "Powerhouse" ], 4, 15, 6, 3, 50, 392109, 187, 122, 1, 1520, 603, 1, 1 ],
+ [ "'Champion' Jesus Burgess", "STR", [ "Fighter", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1439, 522, 1, 3870, 1368, 1, 1 ],
+ [ "Shiryu", "INT", [ "Driven", "Slasher" ], 4, 15, 6, 3, 50, 392109, 132, 142, -300, 1244, 689, -300, 1 ],
+ [ "Shiryu of the Rain", "INT", [ "Driven", "Slasher" ], 5, 30, 4, 4, 99, 4000000, 1168, 622, -300, 2500, 1490, -300, 1 ],
+ [ "Doc Q", "PSY", [ "Slasher", "Striker" ], 4, 15, 4, 3, 50, 392109, 52, 131, 89, 703, 624, 254, 1 ],
+ [ "'Grim Reaper' Doc Q", "PSY", [ "Slasher", "Striker" ], 5, 30, 4, 4, 99, 4000000, 609, 549, 201, 1403, 1290, 491, 1 ],
+ [ "John Giant", "DEX", [ "Slasher", "Driven" ], 3, 15, 6, 3, 70, 1066998, 301, 92, 59, 1794, 709, 140, 1 ],
+ [ "Aokiji, Navy HQ Admiral", "PSY", [ "Slasher", "Free Spirit" ], 4, 30, 4, 3, 99, 3000000, 257, 129, 58, 2206, 1152, 227, 1 ],
+ [ "Garp, Navy HQ Vice Admiral", "STR", [ "Fighter", "Powerhouse" ], 4, 30, 5, 3, 99, 3000000, 171, 64, 62, 2094, 1002, 266, 1 ],
+ [ "Sengoku Navy HQ Fleet Admiral", "INT", [ "Cerebral", "Fighter" ], 4, 30, 5, 3, 99, 3000000, 213, 96, 95, 1942, 972, 304, 1 ],
+ [ "Akainu Navy HQ Admiral", "INT", [ "Driven", "Fighter" ], 4, 30, 5, 3, 99, 3000000, 133, 100, 0, 2000, 1381, 0, 1 ],
+ [ "Monkey D. Luffy, Wild Pirate", "PSY", [ "Striker", "Powerhouse" ], 4, 15, 6, 3, 50, 392109, 226, 154, 51, 1104, 602, 143, 1 ],
+ [ "Monkey D. Luffy, Pioneer Of Land", "PSY", [ "Striker", "Powerhouse" ], 5, 30, 4, 3, 99, 4000000, 1002, 501, 88, 2491, 1325, 261, 1 ],
+ [ "Baby 5, Girl of Spider Miles", "PSY", [ "Fighter", "Shooter" ], 3, 9, 5, 1, 50, 392109, 19, 29, 35, 399, 204, 194, 1 ],
+ [ "Baby 5, Member of Donquixote Family", "PSY", [ "Striker", "Shooter" ], 4, 15, 4, 3, 99, 3000000, 274, 158, 146, 784, 579, 372, 1 ],
+ [ "Trafalgar Law, Boy of Spider Miles", "DEX", [ "Driven", "Slasher" ], 3, 9, 6, 1, 50, 392109, 28, 64, 14, 368, 493, 90, 1 ],
+ [ "Trafalgar Law, Member of Donquixote Family", "DEX", [ "Driven", "Shooter" ], 4, 15, 4, 3, 99, 3000000, 312, 420, 51, 892, 890, 242, 1 ],
+ [ "Buffalo, Member of Donquixote Family", "INT", [ "Shooter", "Free Spirit" ], 3, 13, 4, 2, 99, 3000000, 69, 22, 30, 1306, 470, 249, 1 ],
+ [ "Lao G, Jio-Ken User", "DEX", [ "Driven", "Fighter" ], 4, 25, 7, 2, 70, 1066998, 210, 222, 49, 1070, 777, 147, 1 ],
+ [ "Lao G, Diamante Military Leader", "DEX", [ "Driven", "Fighter" ], 5, 40, 4, 3, 99, 4000000, 970, 700, 107, 2070, 1357, 270, 1 ],
+ [ "Boa Sandersonia, Kuja Warrior", "PSY", "Fighter", 3, 16, 4, 2, 50, 392109, 93, 39, 39, 693, 393, 193, 1 ],
+ [ "Boa Sandersonia, Three Gorgon Sisters, Second Daughter", "PSY", [ "Powerhouse", "Striker" ], 4, 26, 4, 3, 99, 3000000, 693, 393, 139, 1839, 993, 329, 1 ],
+ [ "Kalifa, Glamorous Mummy", "STR", [ "Fighter", "Cerebral" ], 4, 13, 5, 2, 50, 392109, 96, 83, 44, 836, 422, 277, 1 ],
+ [ "Kalifa, Glamorous Mummy Halloween Night - Masquerade", "STR", [ "Fighter", "Cerebral" ], 5, 20, 5, 3, 99, 3000000, 759, 351, 229, 1655, 839, 464, 1 ],
+ [ "Akainu", "STR", [ "Driven", "Fighter" ], 4, 30, 4, 2, 70, 1066998, 286, 216, 0, 1618, 816, 49, 1 ],
+ [ "Akainu, Magma Man", "STR", [ "Driven", "Fighter" ], 5, 50, 4, 3, 99, 5000000, 1518, 716, 44, 3168, 1444, 99, 1 ],
+ [ "Rebecca, Lovely Monster Cat", "INT", "Fighter", 4, 12, 7, 1, 50, 392109, 87, 43, 38, 961, 453, 221, 1 ],
+ [ "Rebecca, Lovely Monster Cat Halloween Night - Masquerade", "INT", "Fighter", 5, 20, 5, 3, 99, 3000000, 900, 391, 168, 1862, 912, 361, 1 ],
+ [ "Inmate Buggy", "QCK", [ "Slasher", "Driven" ], 3, 12, 4, 1, 50, 392109, 72, 33, 28, 923, 424, 187, 1 ],
+ [ "Inmate Buggy the Clown, Jailbreak Alliance", "QCK", [ "Slasher", "Driven" ], 4, 20, 4, 3, 99, 3000000, 852, 371, 130, 1903, 854, 340, 1 ],
+ [ "Prison Escapee Galdino", "INT", [ "Cerebral", "Striker" ], 3, 12, 5, 1, 50, 392109, 79, 29, 31, 998, 380, 195, 1 ],
+ [ "Prison Escapee Galdino, Jailbreak Alliance", "INT", [ "Cerebral", "Striker" ], 4, 20, 4, 3, 99, 3000000, 932, 323, 138, 2052, 753, 357, 1 ],
+ [ "Little Succubus Sugar", "DEX", [ "Cerebral", "Slasher" ], 4, 12, 6, 1, 50, 392109, 70, 32, 50, 912, 409, 250, 1 ],
+ [ "Little Succubus Sugar, Halloween Night - Masquerade", "DEX", [ "Cerebral", "Slasher" ], 5, 20, 4, 3, 99, 3000000, 844, 358, 209, 1768, 843, 407, 1 ],
+ [ "Bartolomeo, Full Moon Wolf", "QCK", [ "Driven", "Fighter" ], 4, 13, 5, 2, 50, 392109, 106, 99, 33, 1171, 557, 158, 1 ],
+ [ "Bartolomeo, Full Moon Wolf Halloween Night - Masquerade", "QCK", [ "Driven", "Fighter" ], 5, 20, 4, 4, 99, 3000000, 1109, 472, 109, 2149, 1242, 247, 1 ],
+ [ "Kinemon", "STR", [ "Slasher", "Free Spirit" ], 4, 25, 6, 4, 70, 1066998, 609, 399, 62, 1142, 779, 177, 1 ],
+ [ "Foxfire Kinemon", "STR", [ "Slasher", "Free Spirit" ], 5, 40, 4, 5, 99, 4000000, 1095, 708, 131, 2075, 1433, 321, 1 ],
+ [ "Boa Marigold, Kuja Warrior", "INT", [ "Slasher", "Powerhouse" ], 3, 16, 5, 2, 50, 392109, 245, 116, 24, 1209, 462, 99, 1 ],
+ [ "Boa Marigold, Three Gorgon Sisters, Third Daughter", "INT", [ "Slasher", "Powerhouse" ], 4, 26, 4, 3, 99, 3000000, 1136, 411, 57, 2854, 1033, 169, 1 ],
+ [ "Akainu, Navy HQ's Strongest Forces", "STR", [ "Driven", "Powerhouse" ], 5, 30, 4, 3, 70, 1066998, 442, 300, 18, 1700, 881, 49, 1 ],
+ [ "Sakazuki", "STR", [ "Driven", "Powerhouse" ], 6, 55, 4, 4, 99, 5000000, 1642, 835, 32, 3500, 1600, 99, 1 ],
+ [ "Coby of the Grand Line, Navy HQ Master Chief Petty Officer", "PSY", [ "Fighter", "Driven" ], 4, 15, 5, 3, 50, 392109, 103, 94, 48, 941, 511, 209, 1 ],
+ [ "Coby, Student of the 'Hero of the Navy', Navy HQ Master Chief Petty Officer", "PSY", [ "Fighter", "Driven" ], 5, 30, 4, 4, 99, 4000000, 877, 447, 164, 2024, 1151, 414, 1 ],
+ [ "Monkey D. Garp, Navy HQ Vice Admiral", "STR", [ "Powerhouse", "Free Spirit" ], 4, 15, 5, 3, 50, 392109, 106, 144, 29, 959, 677, 151, 1 ],
+ [ "'Garp the Fist', Navy HQ Vice Admiral", "STR", [ "Powerhouse", "Free Spirit" ], 5, 30, 5, 4, 99, 4000000, 901, 602, 106, 2110, 1474, 290, 1 ],
+ [ "Tsuru, Navy HQ Vice Admiral", "QCK", [ "Cerebral", "Shooter" ], 4, 15, 4, 3, 50, 392109, 292, 205, 89, 902, 534, 213, 1 ],
+ [ "'Grand Staff Officer' Tsuru, Navy HQ Vice Admiral", "QCK", [ "Cerebral", "Shooter" ], 5, 30, 4, 4, 99, 4000000, 832, 467, 175, 1960, 1252, 419, 1 ],
+ [ "Momonga, Monster Slash of the Great Commander", "DEX", [ "Cerebral", "Slasher" ], 4, 15, 6, 3, 50, 392109, 136, 120, 35, 993, 591, 172, 1 ],
+ [ "Momonga, Monster Slash of the Great Commander, Navy Vice Admiral", "DEX", [ "Cerebral", "Slasher" ], 5, 30, 4, 4, 99, 4000000, 939, 529, 133, 2342, 1296, 330, 1 ],
+ [ "Onigumo, Swordsman of the Eight-Sword Style", "INT", [ "Driven", "Slasher" ], 4, 15, 6, 3, 50, 392109, 172, 136, 5, 1294, 638, 99, 1 ],
+ [ "Onigumo, Swordsman of the Eight-Sword Style, Navy Vice Admiral", "INT", [ "Driven", "Slasher" ], 5, 30, 4, 4, 99, 4000000, 1243, 572, 46, 2598, 1383, 225, 1 ],
+ [ "Royal Vampire Corazon", "PSY", [ "Cerebral", "Free Spirit" ], 4, 12, 6, 1, 50, 392109, 84, 51, 33, 935, 526, 206, 1 ],
+ [ "Royal Vampire Corazon, Halloween Night - Masquerade", "PSY", [ "Cerebral", "Free Spirit" ], 5, 20, 4, 3, 99, 3000000, 869, 467, 170, 1840, 1014, 337, 1 ],
+ [ "Leo, Tontatta Tribe - Tonta Corps", "DEX", [ "Striker", "Free Spirit" ], 3, 12, 5, 1, 50, 392109, 40, 40, 40, 888, 518, 180, 1 ],
+ [ "Warrior Leo, Tontatta Tribe - Tonta Corps", "DEX", [ "Striker", "Free Spirit" ], 4, 20, 4, 3, 99, 3000000, 810, 472, 140, 1724, 1134, 281, 1 ],
+ [ "Wicca", "QCK", [ "Fighter", "Free Spirit" ], 3, 15, 8, 2, 70, 1066998, 101, 88, 11, 1017, 888, 219, 1 ],
+ [ "Gancho", "INT", [ "Striker", "Cerebral" ], 3, 15, 6, 2, 70, 1066998, 158, 129, 84, 1008, 629, 334, 1 ],
+ [ "Mansherry, Daughter of the Tontatta Tribe", "PSY", [ "Striker", "Free Spirit" ], 3, 12, 6, 1, 50, 392109, 20, 10, 30, 666, 333, 270, 1],
+ [ "Mansherry, Princess of Tontatta Kingdom", "PSY", [ "Striker", "Free Spirit" ], 4, 20, 4, 3, 99, 3000000, 606, 303, 234, 1472, 604, 497, 1],
+ [ "Kabu", "STR", [ "Striker", "Powerhouse" ], 3, 15, 6, 2, 70, 1066998, 64, 37, 16, 1604, 964, 106, 1],
+ [ "Bian", "DEX", [ "Striker", "Free Spirit" ], 3, 15, 4, 2, 70, 1066998, 38, 28, 28, 888, 789, 288, 1],
+ [ "Sabo, One Act with You", "INT", [ "Striker", "Free Spirit" ], 4, 13, 6, 2, 50, 392109, 203, 142, 32, 1106, 574, 171, 1],
+ [ "Sabo, Phantom of the Theatre", "INT", [ "Striker", "Free Spirit" ], 5, 20, 4, 4, 99, 3000000, 1035, 501, 126, 2191, 1281, 307, 1],
+ [ "Kanjuro", "PSY", [ "Striker", "Free Spirit" ], 4, 25, 6, 4, 70, 1066998, 554, 261, 35, 1275, 707, 183, 1],
+ [ "Evening Shower Kanjuro", "PSY", [ "Striker", "Free Spirit" ], 5, 40, 4, 5, 99, 4000000, 1209, 645, 133, 2414, 1253, 330, 1],
+ [ "Tony Tony Chopper Jump Point", "DEX", [ "Fighter", "Powerhouse" ], 4, 20, 5, 2, 99, 3000000, 162, 91, 29, 2334, 892, 296, 1],
+ [ "Gedatsu, Skypean Priest", "QCK", [ "Driven", "Free Spirit" ], 4, 16, 4, 2, 50, 392109, 109, 122, 38, 753, 505, 193, 1],
+ [ "'Sky Boss' Gedatsu, Skypean Priest", "QCK", [ "Driven", "Free Spirit" ], 5, 26, 4, 3, 99, 3000000, 692, 448, 142, 1443, 1220, 288, 1],
+ [ "Curly Dadan", "PSY", [ "Slasher", "Powerhouse" ], 3, 12, 6, 2, 50, 392109, 144, 62, 33, 1844, 703, 151, 1],
+ [ "Porchemy", "DEX", [ "Fighter", "Driven" ], 3, 13, 6, 1, 50, 392109, 125, 106, 6, 1734, 891, 34, 1],
+ [ "Bluejam", "STR", [ "Shooter", "Driven" ], 3, 13, 5, 1, 70, 1066998, 131, 133, 1, 1809, 1043, 9, 1],
+ [ "Jimbe, Fishman Pirates Captain", "STR", [ "Fighter", "Powerhouse" ], 4, 30, 5, 3, 99, 3000000, 304, 161, 56, 2329, 1144, 229, 1],
+ [ "Heracles'n, Highwayman of the Forest, Teacher of Amazing Weapons", "DEX", [ "Cerebral", "Shooter" ], 4, 20, 4, 3, 99, 3000000, 142, 91, 43, 2095, 899, 303, 1],
+ [ "Torino Kingdom Monsters", "PSY", [ "Fighter", "Powerhouse" ], 3, 13, 4, 1, 70, 1066998, 109, 66, 12, 1487, 706, 127, 1],
+ [ "Humandrills", "STR", [ "Slasher", "Powerhouse" ], 3, 13, 6, 1, 70, 1066998, 133, 112, 0, 1600, 1020, 0, 1],
+ [ "Haredas", "PSY", [ "Cerebral", "Shooter" ], 3, 13, 4, 1, 70, 1066998, 21, 40, 32, 377, 505, 394, 1],
+ [ "Theives of Tehna Gehna Kingdom", "QCK", [ "Driven", "Slasher" ], 3, 13, 5, 1, 70, 1066998, 98, 71, 29, 1377, 709, 181, 1],
+ [ "Tequila Wolf Guard", "INT", "Shooter", 3, 9, 7, 1, 70, 1066998, 51, 38, 21, 1103, 505, 193, 1],
+ [ "Ivankov, New Kama King", "DEX", [ "Fighter", "Free Spirit" ], 4, 20, 8, 3, 99, 3000000, 123, 95, 41, 2034, 935, 299, 1],
+ [ "Rayleigh, Crew of the Pirate King", "QCK", [ "Fighter", "Cerebral" ], 4, 30, 6, 3, 99, 3000000, 201, 189, 75, 2037, 1264, 294, 1],
+ [ "Silvers Rayleigh, Master of Sleepless Street", "DEX", [ "Fighter", "Cerebral" ], 4, 13, 5, 3, 50, 392109, 144, 97, 33, 905, 601, 179, 1 ],
+ [ "Silvers Rayleigh, Shimmering in Limelight", "DEX", [ "Fighter", "Cerebral" ], 5, 20, 4, 4, 99, 3000000, 832, 550, 133, 1922, 1209, 301, 1 ],
+ [ "Pekoms", "STR", [ "Powerhouse", "Fighter" ], 3, 12, 5, 2, 50, 392109, 99, 66, 33, 909, 666, 156, 1 ],
+ [ "Pekoms, Big Mom Pirates", "STR", [ "Powerhouse", "Fighter" ], 4, 20, 5, 3, 99, 3000000, 866, 651, 133, 1766, 1303, 233, 1 ],
+ [ "Baron Tamago", "INT", [ "Cerebral", "Striker" ], 3, 12, 5, 2, 50, 392109, 39, 33, 36, 715, 515, 199, 1 ],
+ [ "Baron Tamago, Big Mom Pirates", "INT", [ "Cerebral", "Striker" ], 4, 20, 4, 3, 99, 3000000, 651, 466, 165, 1651, 1012, 315, 1 ],
+ [ "Luffy, Winter Island Adventure", "QCK", [ "Fighter", "Free Spirit" ], 4, 15, 6, 3, 99, 2000000, 103, 54, 33, 2005, 945, 286, 1 ],
+ [ "Roronoa Zoro, Gathering of the Straw Hats", "DEX", [ "Driven", "Slasher" ], 5, 30, 6, 3, 70, 1066998, 409, 291, 44, 1661, 826, 163, 1 ],
+ [ "Roronoa Zoro, Reunion of the Straw Hat Pirates", "DEX", [ "Driven", "Slasher" ], 6, 55, 4, 5, 99, 5000000, 1587, 751, 111, 3603, 1518, 294, 1 ],
+ [ "Franky, Gathering of the Straw Hats", "PSY", [ "Shooter", "Free Spirit" ], 4, 15, 4, 3, 50, 392109, 309, 158, 19, 1325, 544, 138, 1 ],
+ [ "Franky, Reunion of the Straw Hat Pirates", "PSY", [ "Shooter", "Free Spirit" ], 5, 30, 4, 4, 99, 4000000, 1249, 467, 77, 3030, 1332, 221, 1 ],
+ [ "Nami, Gathering of the Straw Hats", "INT", [ "Cerebral", "Striker" ], 4, 15, 5, 3, 50, 392109, 189, 106, 36, 995, 498, 203, 1 ],
+ [ "Nami, Reunion of the Straw Hat Pirates", "INT", [ "Cerebral", "Striker" ], 5, 30, 4, 4, 99, 4000000, 921, 431, 156, 2171, 1109, 440, 1 ],
+ [ "Sanji, Gathering of the Straw Hats", "STR", [ "Fighter", "Powerhouse" ], 4, 15, 4, 3, 50, 392109, 242, 162, 24, 1182, 556, 148, 1 ],
+ [ "Sanji, Reunion of the Straw Hat Pirates", "STR", [ "Fighter", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1112, 500, 99, 2603, 1437, 260, 1 ],
+ [ "Tony Tony Chopper, Gathering of the Straw Hats", "QCK", [ "Striker", "Powerhouse" ], 4, 15, 6, 3, 50, 392109, 202, 109, 31, 1062, 503, 186, 1 ],
+ [ "Tony Tony Chopper, Reunion of the Straw Hat Pirates", "QCK", [ "Striker", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 990, 434, 137, 2377, 1188, 379, 1 ],
+ [ "Roronoa Zoro, Wild Pirate", "QCK", [ "Slasher", "Powerhouse" ], 4, 15, 4, 3, 50, 392109, 244, 144, 22, 1122, 596, 77, 1 ],
+ [ "Roronoa Zoro, Pioneer of Land", "QCK", [ "Slasher", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1022, 499, 55, 2711, 1322, 161, 1 ],
+ [ "Magellan", "INT", [ "Striker", "Shooter" ], 4, 30, 6, 1, 70, 1066998, 210, 107, 29, 1226, 659, 102, 1 ],
+ [ "Magellan, Chief Warden of Impel Down", "INT", [ "Striker", "Shooter" ], 5, 50, 5, 2, 99, 5000000, 1149, 590, 57, 2605, 1316, 207, 1 ],
+ [ "Dellinger, Blood Thirsty Half-Fishman Fighting Fish", "QCK", [ "Powerhouse", "Fighter" ], 4, 25, 5, 2, 70, 1066998, 499, 366, 47, 1134, 749, 171, 1 ],
+ [ "Dellinger, Combatant of the Diamante Army", "QCK", [ "Powerhouse", "Fighter" ], 5, 40, 7, 3, 99, 4000000, 1062, 668, 109, 2060, 1429, 300, 1 ],
+ [ "Marguerite, Amazon Lily Archer", "DEX", [ "Shooter", "Slasher" ], 3, 16, 5, 2, 50, 392109, 93, 72, 62, 895, 520, 206, 1 ],
+ [ "Marguerite, Ambition of the Kuja Pirates", "DEX", [ "Shooter", "Slasher" ], 4, 26, 5, 3, 99, 3000000, 830, 452, 143, 1759, 974, 403, 1 ],
+ [ "Shanks, Captain of the Red Hair Pirates", "INT", [ "Cerebral", "Free Spirit" ], 4, 30, 4, 2, 70, 1778330, 1094, 514, 126, 1674, 767, 242, 1 ],
+ [ "'Red Hair' Shanks, Captain of the Red Hair Pirates", "INT", [ "Cerebral", "Free Spirit" ], 5, 50, 4, 3, 99, 5000000, 1600, 692, 200, 2552, 1440, 353, 1 ],
+ [ "Tashigi, Silent Night Star", "PSY", [ "Slasher", "Cerebral" ], 4, 13, 6, 3, 50, 392109, 109, 74, 55, 802, 474, 244, 1 ],
+ [ "Tashigi, Holy Night Heroine", "PSY", [ "Slasher", "Cerebral" ], 5, 20, 5, 4, 99, 3000000, 742, 416, 198, 1764, 909, 426, 1 ],
+ [ "Toy Soldier", "QCK", [ "Striker", "Shooter" ], 3, 13, 5, 2, 50, 392109, 81, 72, 28, 867, 611, 186, 1 ],
+ [ "Toy Soldier, Thunder Soldier", "QCK", [ "Striker", "Shooter" ], 4, 20, 4, 4, 99, 3000000, 792, 557, 151, 1552, 1300, 300, 1 ],
+ [ "Rebecca, Surviving Bloodline of the Former Royal Family", "PSY", [ "Striker", "Free Spirit" ], 3, 9, 5, 1, 35, 136167, 70, 27, 40, 502, 301, 197, 1 ],
+ [ "Rebecca, Target from the Former Royal Family's Bloodline", "PSY", [ "Striker", "Free Spirit" ], 4, 15, 4, 3, 70, 1066998, 441, 239, 153, 819, 492, 348, 1 ],
+ [ "Monkey D. Luffy, Gum Gum Elephant: Elephant Gun", "STR", [ "Fighter", "Free Spirit" ], 5, 30, 4, 3, 99, 3000000, 1005, 560, 113, 2255, 1499, 284, 1 ],
+ [ "Roronoa Zoro, Unfortunate Port Bird: Yakkoudori", "DEX", [ "Slasher", "Driven" ], 5, 30, 4, 3, 99, 3000000, 803, 669, 55, 2501, 1434, 233, 1 ],
+ [ "Nami, Weather Egg: Thunder Breed Tempo", "INT", [ "Striker", "Cerebral" ], 5, 30, 4, 3, 99, 3000000, 705, 496, 181, 1970, 1200, 420, 1 ],
+ [ "Buggy Clown, Captain of the Buggy Pirates", "INT", [ "Driven", "Shooter" ], 5, 30, 5, 3, 70, 1066998, 296, 199, 133, 1310, 577, 299, 1 ],
+ [ "Captain Buggy", "INT", [ "Driven", "Shooter" ],6, 40, 5, 5, 99, 5000000, 1244, 504, 220, 2506, 1149, 491, 1 ],
+ [ "Sentomaru, Wall of the Sabaody Archipelagos", "PSY", [ "Slasher", "Striker" ], 4, 20, 5, 3, 99, 3000000, 166, 48, 33, 2805, 955, 201, 1 ],
+ [ "Demalo Black", "INT", [ "Shooter", "Driven" ], 4, 15, 7, 1, 99, 3000000, 102, 105, 49, 1187, 688, 251, 1 ],
+ [ "Baby 5, Dressed for the Shirne", "QCK", [ "Slasher", "Striker" ], 4, 13, 6, 2, 50, 392109, 164, 130, 40, 993, 561, 206, 1 ],
+ [ "Baby 5, Awkward Kimono", "QCK", [ "Slasher", "Striker" ], 5, 20, 4, 3, 99, 3000000, 920, 540, 149, 1912, 1239, 369, 1 ],
+ [ "Tashigi Shambles", "DEX", [ "Striker", "Driven" ], 3, 11, 6, 1, 50, 392109, 103, 34, 23, 1034, 543, 113, 1 ],
+ [ "Tashigi Shambles, 7 Foot Jitte", "DEX", [ "Striker", "Driven" ], 4, 19, 5, 3, 99, 3000000, 914, 463, 103, 2134, 1043, 231, 1 ],
+ [ "Smoker Shambles", "QCK", [ "Slasher", "Cerebral" ], 3, 11, 6, 1, 50, 392109, 76, 26, 41, 886, 466, 186, 1 ],
+ [ "Smoker Shambles, Shigure", "QCK", [ "Slasher", "Cerebral" ], 4, 19, 4, 3, 99, 3000000, 706, 416, 160, 1606, 910, 361, 1 ],
+ [ "Gladius, Pop-Pop Man", "STR", [ "Driven", "Shooter" ], 4, 25, 7, 2, 70, 1066998, 186, 168, 39, 1088, 786, 98, 1 ],
+ [ "Gladius, Pica Military Executive", "STR", [ "Driven", "Shooter" ], 5, 40, 4, 3, 99, 4000000, 986, 698, 86, 2188, 1419, 208, 1 ],
+ [ "Coliseum Dalton", "PSY", [ "Slasher", "Cerebral" ], 4, 20, 6, 2, 70, 1778330, 160, 106, 19, 1061, 961, 235, 1 ],
+ [ "Monkey D. Luffy, Gathering of the Straw Hats", "QCK", [ "Fighter", "Free Spirit" ], 5, 30, 4, 3, 70, 1066998, 313, 300, 70, 1422, 840, 210, 1 ],
+ [ "Monkey D. Luffy, Reunion of the Straw Hat Pirates", "QCK", [ "Fighter", "Free Spirit" ], 6, 55, 4, 5, 99, 5000000, 1369, 762, 168, 3080, 1550, 390, 1 ],
+ [ "Usopp, Gathering of the Straw Hats", "PSY", "Shooter", 4, 15, 4, 3, 50, 392109, 255, 99, 31, 1201, 481, 182, 1 ],
+ [ "Usopp, Reunion of the Straw Hat Pirates", "PSY", "Shooter", 5, 30, 4, 4, 99, 4000000, 1147, 446, 144, 2712, 1142, 340, 1 ],
+ [ "Nico Robin, Gathering of the Straw Hats", "DEX", [ "Fighter", "Cerebral" ], 4, 15, 4, 3, 50, 392109, 182, 119, 33, 992, 524, 200, 1 ],
+ [ "Nico Robin, Reunion of the Straw Hat Pirates", "DEX", [ "Fighter", "Cerebral" ], 5, 30, 4, 4, 99, 4000000, 946, 479, 165, 2151, 1257, 403, 1 ],
+ [ "Brook, Gathering of the Straw Hats", "INT", [ "Slasher", "Free Spirit" ], 4, 15, 6, 3, 50, 392109, 220, 117, 27, 1248, 532, 167, 1 ],
+ [ "Brook, Reunion of the Straw Hat Pirates", "INT", [ "Slasher", "Free Spirit" ], 5, 30, 4, 4, 99, 4000000, 1176, 482, 131, 2421, 1317, 329, 1 ],
+ [ "Tony Tony Chopper: Walk Point, Gathering of the Straw Hats", "STR", [ "Fighter", "Powerhouse" ], 4, 15, 4, 3, 50, 392109, 233, 77, 34, 1362, 439, 170, 1 ],
+ [ "Tony Tony Chopper: Monster Point, Reunion of the Straw Hat Pirates", "STR", [ "Fighter", "Powerhouse" ], 5, 30, 4, 4, 99, 4000000, 1362, 515, 0, 3000, 1499, 170, 1 ],
+ [ "Whitebeard: Four Emperors", "STR", [ "Striker", "Powerhouse" ], 6, 65, 4, 5, 99, 5000000, 3148, 996, 142, 3806, 1558, 347, 1 ],
+ [ "Sanji, Making Food and Drinks", "INT", [ "Fighter", "Powerhouse" ], 4, 20, 5, 3, 99, 3000000, 557, 363, 32, 2276, 1200, 210, 1 ],
+ [ "Sengoku, Wise Warrior", "PSY", [ "Fighter", "Cerebral" ], 3, 13, 5, 1, 50, 392109, 106, 42, 30, 990, 503, 151, 1 ],
+ [ "Sengoku the Buddha, Wise Warrior", "PSY", [ "Fighter", "Cerebral" ], 4, 20, 5, 3, 99, 3000000, 920, 440, 100, 2059, 1059, 304, 1 ],
+ [ "Ronse", "STR", [ "Slasher", "Powerhouse" ], 4, 15, 6, 1, 70, 1066998, 106, 59, 1, 2018, 901, 3, 1 ],
+ [ "Stainless", "INT", [ "Slasher", "Cerebral" ], 4, 15, 5, 2, 70, 1066998, 82, 57, 20, 1408, 874, 202, 1 ],
+ [ "Kimono Lucci", "INT", [ "Fighter", "Powerhouse" ], 4, 13, 5, 2, 50, 392109, 152, 93, 13, 1202, 556, 73, null ],
+ [ "Kimono Lucci, Evolved", "INT", [ "Fighter", "Powerhouse" ], 5, 20, 5, 3, 99, 3000000, 1129, 499, 152, 2299, 1333, 152, null ],
+ [ "Coliseum Diamante", "INT", [ "Driven", "Striker" ], 4, 25, 5, 2, 70, 1066998, 505, 388, 12, 1202, 770, 91, null ],
+ [ "Coliseum Diamante, Evolved", "INT", [ "Driven", "Slasher" ], 5, 40, 4, 3, 99, 4000000, 1131, 711, 47, 2400, 1457, 168, null ],
+ [ "Coliseum T-Bone", "QCK", [ "Cerebral", "Slasher" ], 4, 26, 4, 3, 99, 3000000, 99, 98, 50, 1752, 1199, 300, null ],
+ [ "Coliseum Gin", "DEX", "Striker", 4, 20, 4, 2, 70, 1778330, 110, 69, 32, 1228, 801, 191, null ],
+ [ "Don Sai, Unevolved", "QCK", [ "Fighter", "Striker" ], 3, 13, 5, 1, 50, 392109, 105, 59, 19, null, null, null, null],
+ [ "Don Sai, Evolved", "QCK", [ "Fighter", "Striker" ], 4, 20, 4, 3, 99, 3000000, 1123, 527, 57, null, null, null, null],
+ [ "Boo", "QCK", [ "Fighter", "Driven" ], 4, 15, 6, 3, 70, 1066998, 305, 159, 29, null, null, null, null],
+ [ "Jean Ango", "DEX", [ "Slasher, Shooter" ], 3, 12, 6, 2, 70, 1066998, 158, 173, 21, null, null, null, null ],
+ [ "Secret Mansherry", "DEX", [ "Striker", "Free Spirit" ], 4, 13, 6, 2, 50, 392109, 42, 24, 66, 890, 329, 261, null ],
+ [ "Secret Mansherry, Evolved", "DEX", [ "Striker", "Free Spirit" ], 5, 20, 4, 4, 99, 3000000, 803, 251, 213, null, null, null, null ],
+ [ "Raid Franky", "PSY", [ "Free Spirit", "Powerhouse" ], 4, 30, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "Raid Franky, Evolved", "PSY", [ "Free Spirit", "Powerhouse" ], 5, 50, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+ [ "Boa Hancock: Snake Princess", "QCK", [ "Free Spirit", "Shooter" ], 6, 65, 4, 5, 99, 5000000, 1559, 803, 303, 2900, 1500, 600, null ],
+ ];
+
+// [ "Name", "Type", [ "Class1", "Class2" ], null, null, null, null, null, null, null, null, null, null, null, null, null ],
+// or [ "Name", "Type", "Class1", null, null, null, null, null, null, null, null, null, null, null, null, null ],
+// [ "Name", "Type", [ "Class1", "Class2" ], Stars, Cost, Combo, sockets, maxLVL, EXPToMax, lvl1HP, lvl1ATK, lvl1RCV, MAXHP, MAXATK, MAXRCV, Growth Rate ],
diff --git a/common/data/version.js b/common/data/version.js
index 163593770..3eb7ab903 100644
--- a/common/data/version.js
+++ b/common/data/version.js
@@ -1 +1 @@
-window.dbVersion = 35;
+window.dbVersion = 36;
diff --git a/common/data/zombies.js b/common/data/zombies.js
index 2414e3467..9602379a9 100644
--- a/common/data/zombies.js
+++ b/common/data/zombies.js
@@ -179,9 +179,17 @@ window.zombies = {
type: 'healer',
multiplier: 2
},
+ 828: { //Kid Law
+ type: 'zombie',
+ threshold: 0.5
+ },
+ 829: { //Kid Law Evolution
+ type: 'zombie',
+ threshold: 0.3
+ },
841: { // Monet
type: 'healer',
- multiplier: 5
+ multiplier: 3
},
842: { // Monet
type: 'healer',
@@ -201,6 +209,110 @@ window.zombies = {
},
912: { // SH Sanji
type: 'healer',
- multiplier: 4
- }
+ multiplier: 2
+ },
+ 949: { //Fortnight Thatch
+ type: 'healer',
+ multiplier: 2
+ },
+ 965: {//Saint Charloss
+ type: 'healer',
+ amount: 500
+ },
+ 1008: {//Sakura Monet
+ type: 'healer',
+ multiplier: 3
+ },
+ 1014: {//Tony Tony Chopper, Animal King
+ type: 'healer',
+ multiplier: 2
+ },
+ 1052: {//Kid Robin
+ type: 'healer',
+ amount: 1000
+ },
+ 1062: {//Gloriosa
+ type: 'healer',
+ multiplier: 2
+ },
+ 1133: {
+ type: 'healer',
+ multiplier: 2
+ },
+ 1141: {//Story Moira
+ type: 'healer',
+ multiplier: 3
+ },
+ 1195: {//Colo Ganfor
+ type: 'healer',
+ multiplier: 2
+ },
+ 1196: {//Colo Ganfor
+ type: 'healer',
+ multiplier: 5
+ },
+ 1241: {//Fortnight Koala
+ type: 'healer',
+ multiplier: 1
+ },
+ 1242: {//Fortnight Koala
+ type: 'healer',
+ multiplier: 2
+ },
+ 1250: {//Colo Marco
+ type: 'healer',
+ multiplier: 2.5
+ },
+ 1251: {//Colo Marco
+ type: 'healer',
+ multiplier: 2.5
+ },
+ 1305: {//Halloween Sugar
+ type: 'healer',
+ amount: 500
+ },
+ 1305: {//Halloween Sugar
+ type: 'healer',
+ amount: 1000
+ },
+ 1309: {//Colo Kinemon
+ type: 'healer',
+ multiplier: 1
+ },
+ 1310: {//Colo Kinemon
+ type: 'healer',
+ multiplier: 2
+ },
+ 1330: {//Gancho
+ type: 'healer',
+ multiplier: 2
+ },
+ 1331: {//Mansherry
+ type: 'healer',
+ multiplier: 2
+ },
+ 1332: {//Mansherry
+ type: 'healer',
+ multiplier: 3
+ },
+ 1358: {//Rayleigh
+ type: 'healer',
+ multiplier: 1.5
+ },
+ 1359: {//Rayleigh
+ type: 'healer',
+ multiplier: 1.5
+ },
+ 1409: { // New World Brook
+ type: 'zombie',
+ threshold: 0.5
+ },
+ 1410: { // New World Brook
+ type: 'zombie',
+ threshold: 0.5
+ },
+ 1423: { // Colo T-Bone
+ type: 'healer',
+ amount: 918
+ },
};
diff --git a/common/js/directives.js b/common/js/directives.js
index 3bd224d23..e2f214a17 100644
--- a/common/js/directives.js
+++ b/common/js/directives.js
@@ -4,6 +4,7 @@ var notes = {
captainProportional: "The exact multiplier used to compute the damage is proportional to the " +
"crew's remaining HP and is higher the #1 the HP is. The multiplier is calculated as #2. " +
"At full health the boost is equal to #3x, with 1 HP left to #4x.",
+ captainFixed:"The multiplier is #1 unless #2, in which case it is #3.",
fixed: "Fixed damage means it entirely bypasses the enemy's defense.",
gOrbs: "Characters with [G] orbs will deal 1.5x their normal damage. [G] orbs are affected by orb boosters.",
noFixedPerc: "Specials that deal fixed damage or cut a percentage of the enemy's HP are not " +
@@ -11,13 +12,14 @@ var notes = {
orb: "Orb amplification only affects matching and opposite orbs and works both ways: " +
"matching orbs will deal #1 more damage and opposite orbs will deal #1 less damage.",
poison: "Poison deals 0.5x character's ATK in fixed damage at the end of each turn.",
- random: "Estimated random damage range: between #1 HP and #2 HP.",
+ random: "Estimated random damage range: between #1 HP and #2 HP #3.",
randomHits: "The target of each of the #1 hits is chosen randomly.",
specialProportional: "The exact multiplier used to compute the damage is proportional to the " +
"crew's remaining HP and is higher the #1 the HP is. The multiplier is calculated as: #2.",
stages: "The special can be used as soon as the first stage is reached.",
zombie: "The protection only works when attacked by one single enemy and will leave the team with at least 1 HP; " +
- "the effect will not work when attacked by multiples enemies at once."
+ "the effect will not work when attacked by multiples enemies at once.",
+ colorAffinity: "'Color Affinity' boosts color type advantages. For example, a STR unit normally deals 2x to a DEX unit and .5x to QCK. With this Color Affinity boost, it will deal (2*#1)x to DEX and (0.5*(#1-1))x to QCK."
};
/***********
diff --git a/common/js/dismissal.js b/common/js/dismissal.js
index 331569952..1a7cb41fe 100644
--- a/common/js/dismissal.js
+++ b/common/js/dismissal.js
@@ -7,21 +7,18 @@ app.controller('DismissalCtrl', function(ngDialog, $templateCache) {
var dismissalPopupShown = true;
- try { dismissalPopupShown = JSON.parse(localStorage.getItem('dismissalShown')) || false; }
- catch (e) { }
+// try { dismissalPopupShown = JSON.parse(localStorage.getItem('dismissalShown')) || false; }
+// catch (e) { }
if (dismissalPopupShown) return;
$templateCache.put('dismissal',
'
' +
- '
Discontinuation Notice
' +
+ '
Important Notice
' +
'
' +
- '
The site will be no longer kept updated due to dwindling interest and lack of time. ' +
- 'All past, present and future bugs will now become features.
' +
- '
Existing data will not be removed, you will still be able to browse it.
' +
- '
If someone is interested in picking up ' +
- 'the torch, you are welcome to do so.
' +
- '
You won\'t be shown this popup again once you click on the button.
' +
+ '
I\'m picking up this project for now. For the beggining you can at least expect updates for the DB part of the project. It will probably be a while before I understand the rest of the code.
' +
+ '
That\'s it for now.
' +
+ '
You won\'t be shown this popup again once you click on the button.
- please head over here and complete the form (it takes like 20 seconds), any help is appreciated.
+ please head over here and complete the form (it takes like 20 seconds), any help is appreciated.
diff --git a/probability/views/main.html b/probability/views/main.html
new file mode 100644
index 000000000..d74eecc27
--- /dev/null
+++ b/probability/views/main.html
@@ -0,0 +1,105 @@
+
+
+
+
+ Probability Calculator
+
+
+
+
+
+
+
+
+
+
Select which Sockets your Unit already has.
+
This Unit has no Sockets.
+
+ Quick fill
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Copies/Books:
+
+ Number of Skill-Ups You Need:
+
+ Quick fill
+
+
+
+
+
+
+ Probability to get {{skillups}} skillups with {{copies}} copies/books:
+
+
+ {{specialProbabilityProgressBar}}
+
+
+
+
+
+ Probability to max above Powers with {{copies}} copies:
+ Note: Slots chosen above are how many you CURRENTLY have
+ To change how many of a type you have, click on the number
+
+
Enter whatever Sockets you already have on that Unit
+
+
Click on a Socket to change its level
+
+
Enter the Amount of Books/Duplicates you have of that Unit
+
Enter the Amount of Skill Ups you need
+
+
If you want to calculate the chance during a Special Level Chance Up Event, check the box for it
+
+
Click Calculate for whichever Number you want to calculate
+
Go and cry in a corner because the chance is way too low
+
+
+
+ Disclaimer: This is only Probability Calculation with averages collected by the comunity. Don't come crying to us when you didn't farm enough mihawks because the calculation put you close to 100% You should also look up how probabilites work if you want to blame us
+
';
+ return template;
+ }
+ };
+ }]);
\ No newline at end of file
diff --git a/turtles/app/lib/angular-timer.min.js b/turtles/app/lib/angular-timer.min.js
new file mode 100644
index 000000000..f1d9b2af0
--- /dev/null
+++ b/turtles/app/lib/angular-timer.min.js
@@ -0,0 +1,8 @@
+/**
+ * angular-timer - v1.3.1 - 2015-03-30 1:00 PM
+ * https://github.com/siddii/angular-timer
+ *
+ * Copyright (c) 2015 Siddique Hameed
+ * Licensed MIT
+ */
+var timerModule=angular.module("timer",[]).directive("timer",["$compile",function(a){return{restrict:"EA",replace:!1,scope:{interval:"=interval",startTimeAttr:"=startTime",endTimeAttr:"=endTime",countdownattr:"=countdown",finishCallback:"&finishCallback",autoStart:"&autoStart",language:"@?",maxTimeUnit:"="},controller:["$scope","$element","$attrs","$timeout","I18nService","$interpolate","progressBarService",function(b,c,d,e,f,g,h){function i(){b.timeoutId&&clearTimeout(b.timeoutId)}function j(){var a={};void 0!==d.startTime&&(b.millis=moment().diff(moment(b.startTimeAttr))),a=k.getTimeUnits(b.millis),b.maxTimeUnit&&"day"!==b.maxTimeUnit?"second"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3),b.minutes=0,b.hours=0,b.days=0,b.months=0,b.years=0):"minute"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4),b.hours=0,b.days=0,b.months=0,b.years=0):"hour"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5),b.days=0,b.months=0,b.years=0):"month"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24%30),b.months=Math.floor(b.millis/36e5/24/30),b.years=0):"year"===b.maxTimeUnit&&(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24%30),b.months=Math.floor(b.millis/36e5/24/30%12),b.years=Math.floor(b.millis/36e5/24/365)):(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24),b.months=0,b.years=0),b.secondsS=1===b.seconds?"":"s",b.minutesS=1===b.minutes?"":"s",b.hoursS=1===b.hours?"":"s",b.daysS=1===b.days?"":"s",b.monthsS=1===b.months?"":"s",b.yearsS=1===b.years?"":"s",b.secondUnit=a.seconds,b.minuteUnit=a.minutes,b.hourUnit=a.hours,b.dayUnit=a.days,b.monthUnit=a.months,b.yearUnit=a.years,b.sseconds=b.seconds<10?"0"+b.seconds:b.seconds,b.mminutes=b.minutes<10?"0"+b.minutes:b.minutes,b.hhours=b.hours<10?"0"+b.hours:b.hours,b.ddays=b.days<10?"0"+b.days:b.days,b.mmonths=b.months<10?"0"+b.months:b.months,b.yyears=b.years<10?"0"+b.years:b.years}"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),b.autoStart=d.autoStart||d.autostart,b.language=b.language||"en",b.$watch("language",function(){k.init(b.language)});var k=new f;k.init(b.language),b.displayProgressBar=0,b.displayProgressActive="active",c.append(0===c.html().trim().length?a(""+g.startSymbol()+"millis"+g.endSymbol()+"")(b):a(c.contents())(b)),b.startTime=null,b.endTime=null,b.timeoutId=null,b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>=0?parseInt(b.countdownattr,10):void 0,b.isRunning=!1,b.$on("timer-start",function(){b.start()}),b.$on("timer-resume",function(){b.resume()}),b.$on("timer-stop",function(){b.stop()}),b.$on("timer-clear",function(){b.clear()}),b.$on("timer-reset",function(){b.reset()}),b.$on("timer-set-countdown",function(a,c){b.countdown=c}),b.$watch("startTimeAttr",function(a,c){a!==c&&b.isRunning&&b.start()}),b.start=c[0].start=function(){b.startTime=b.startTimeAttr?moment(b.startTimeAttr):moment(),b.endTime=b.endTimeAttr?moment(b.endTimeAttr):null,b.countdown||(b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>0?parseInt(b.countdownattr,10):void 0),i(),l(),b.isRunning=!0},b.resume=c[0].resume=function(){i(),b.countdownattr&&(b.countdown+=1),b.startTime=moment().diff(moment(b.stoppedTime).diff(moment(b.startTime))),l(),b.isRunning=!0},b.stop=b.pause=c[0].stop=c[0].pause=function(){var a=b.timeoutId;b.clear(),b.$emit("timer-stopped",{timeoutId:a,millis:b.millis,seconds:b.seconds,minutes:b.minutes,hours:b.hours,days:b.days})},b.clear=c[0].clear=function(){b.stoppedTime=moment(),i(),b.timeoutId=null,b.isRunning=!1},b.reset=c[0].reset=function(){b.startTime=b.startTimeAttr?moment(b.startTimeAttr):moment(),b.endTime=b.endTimeAttr?moment(b.endTimeAttr):null,b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>0?parseInt(b.countdownattr,10):void 0,i(),l(),b.isRunning=!1,b.clear()},c.bind("$destroy",function(){i(),b.isRunning=!1}),b.countdownattr?(b.millis=1e3*b.countdownattr,b.addCDSeconds=c[0].addCDSeconds=function(a){b.countdown+=a,b.$digest(),b.isRunning||b.start()},b.$on("timer-add-cd-seconds",function(a,c){e(function(){b.addCDSeconds(c)})}),b.$on("timer-set-countdown-seconds",function(a,c){b.isRunning||b.clear(),b.countdown=c,b.millis=1e3*c,j()})):b.millis=0,j();var l=function m(){var a=null;b.millis=moment().diff(b.startTime);var c=b.millis%1e3;return b.endTimeAttr&&(a=b.endTimeAttr,b.millis=moment(b.endTime).diff(moment()),c=b.interval-b.millis%1e3),b.countdownattr&&(a=b.countdownattr,b.millis=1e3*b.countdown),b.millis<0?(b.stop(),b.millis=0,j(),void(b.finishCallback&&b.$eval(b.finishCallback))):(j(),b.timeoutId=setTimeout(function(){m(),b.$digest()},b.interval-c),b.$emit("timer-tick",{timeoutId:b.timeoutId,millis:b.millis}),b.countdown>0?b.countdown--:b.countdown<=0&&(b.stop(),b.finishCallback&&b.$eval(b.finishCallback)),void(null!==a&&(b.progressBar=h.calculateProgressBar(b.startTime,b.millis,b.endTime,b.countdownattr),100===b.progressBar&&(b.displayProgressActive=""))))};(void 0===b.autoStart||b.autoStart===!0)&&b.start()}]}}]);"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports=timerModule);var app=angular.module("timer");app.factory("I18nService",function(){var a=function(){};return a.prototype.language="en",a.prototype.timeHumanizer={},a.prototype.init=function(a){this.language=a,moment.locale(this.language),this.timeHumanizer=humanizeDuration.humanizer({language:this.language,halfUnit:!1})},a.prototype.getTimeUnits=function(a){var b=1e3*Math.round(a/1e3),c={};return"undefined"!=typeof this.timeHumanizer?c={millis:this.timeHumanizer(b,{units:["milliseconds"]}),seconds:this.timeHumanizer(b,{units:["seconds"]}),minutes:this.timeHumanizer(b,{units:["minutes","seconds"]}),hours:this.timeHumanizer(b,{units:["hours","minutes","seconds"]}),days:this.timeHumanizer(b,{units:["days","hours","minutes","seconds"]}),months:this.timeHumanizer(b,{units:["months","days","hours","minutes","seconds"]}),years:this.timeHumanizer(b,{units:["years","months","days","hours","minutes","seconds"]})}:console.error('i18nService has not been initialized. You must call i18nService.init("en") for example'),c},a});var app=angular.module("timer");app.factory("progressBarService",function(){var a=function(){};return a.prototype.calculateProgressBar=function(a,b,c,d){var e,f,g=0;return b/=1e3,null!==c?(e=moment(c),f=e.diff(a,"seconds"),g=100*b/f):g=100*b/d,g=100-g,g=Math.round(10*g)/10,g>100&&(g=100),g},new a});
\ No newline at end of file
diff --git a/turtles/app/lib/angular-translate.min.js b/turtles/app/lib/angular-translate.min.js
new file mode 100644
index 000000000..f1104f5e2
--- /dev/null
+++ b/turtles/app/lib/angular-translate.min.js
@@ -0,0 +1,6 @@
+/*!
+ * angular-translate - v2.7.0 - 2015-05-02
+ * http://github.com/angular-translate/angular-translate
+ * Copyright (c) 2015 ; Licensed MIT
+ */
+!function(a,b){"function"==typeof define&&define.amd?define([],function(){return b()}):"object"==typeof exports?module.exports=b():b()}(this,function(){function a(a){"use strict";var b=a.storageKey(),c=a.storage(),d=function(){var d=a.preferredLanguage();angular.isString(d)?a.use(d):c.put(b,a.use())};d.displayName="fallbackFromIncorrectStorageValue",c?c.get(b)?a.use(c.get(b))["catch"](d):d():angular.isString(a.preferredLanguage())&&a.use(a.preferredLanguage())}function b(){"use strict";var a,b,c=null,d=!1,e=!1;b={sanitize:function(a,b){return"text"===b&&(a=g(a)),a},escape:function(a,b){return"text"===b&&(a=f(a)),a},sanitizeParameters:function(a,b){return"params"===b&&(a=h(a,g)),a},escapeParameters:function(a,b){return"params"===b&&(a=h(a,f)),a}},b.escaped=b.escapeParameters,this.addStrategy=function(a,c){return b[a]=c,this},this.removeStrategy=function(a){return delete b[a],this},this.useStrategy=function(a){return d=!0,c=a,this},this.$get=["$injector","$log",function(f,g){var h=function(a,c,d){return angular.forEach(d,function(d){if(angular.isFunction(d))a=d(a,c);else{if(!angular.isFunction(b[d]))throw new Error("pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: '"+d+"'");a=b[d](a,c)}}),a},i=function(){d||e||(g.warn("pascalprecht.translate.$translateSanitization: No sanitization strategy has been configured. This can have serious security implications. See http://angular-translate.github.io/docs/#/guide/19_security for details."),e=!0)};return f.has("$sanitize")&&(a=f.get("$sanitize")),{useStrategy:function(a){return function(b){a.useStrategy(b)}}(this),sanitize:function(a,b,d){if(c||i(),arguments.length<3&&(d=c),!d)return a;var e=angular.isArray(d)?d:[d];return h(a,b,e)}}}];var f=function(a){return angular.element("").text(a).html()},g=function(b){if(!a)throw new Error("pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as 'escape'.");return a(b)},h=function(a,b){if(angular.isObject(a)){var c=angular.isArray(a)?[]:{};return angular.forEach(a,function(a,d){c[d]=h(a,b)}),c}return angular.isNumber(a)?a:b(a)}}function c(a,b,c,d){"use strict";var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t={},u=[],v=a,w=[],x="translate-cloak",y=!1,z=".",A=0,B=!0,C="default",D={"default":function(a){return(a||"").split("-").join("_")},java:function(a){var b=(a||"").split("-").join("_"),c=b.split("_");return c.length>1?c[0].toLowerCase()+"_"+c[1].toUpperCase():b},bcp47:function(a){var b=(a||"").split("_").join("-"),c=b.split("-");return c.length>1?c[0].toLowerCase()+"-"+c[1].toUpperCase():b}},E="2.7.0",F=function(){if(angular.isFunction(d.getLocale))return d.getLocale();var a,c,e=b.$get().navigator,f=["language","browserLanguage","systemLanguage","userLanguage"];if(angular.isArray(e.languages))for(a=0;ac;c++)if(a[c]===b)return c;return-1},I=function(){return this.replace(/^\s+|\s+$/g,"")},J=function(a){for(var b=[],c=angular.lowercase(a),d=0,e=u.length;e>d;d++)b.push(angular.lowercase(u[d]));if(H(b,c)>-1)return a;if(f){var g;for(var h in f){var i=!1,j=Object.prototype.hasOwnProperty.call(f,h)&&angular.lowercase(h)===angular.lowercase(a);if("*"===h.slice(-1)&&(i=h.slice(0,-1)===a.slice(0,h.length-1)),(j||i)&&(g=f[h],H(b,angular.lowercase(g))>-1))return g}}if(a){var k=a.split("_");if(k.length>1&&H(b,angular.lowercase(k[0]))>-1)return k[0]}return a},K=function(a,b){if(!a&&!b)return t;if(a&&!b){if(angular.isString(a))return t[a]}else angular.isObject(t[a])||(t[a]={}),angular.extend(t[a],L(b));return this};this.translations=K,this.cloakClassName=function(a){return a?(x=a,this):x};var L=function(a,b,c,d){var e,f,g,h;b||(b=[]),c||(c={});for(e in a)Object.prototype.hasOwnProperty.call(a,e)&&(h=a[e],angular.isObject(h)?L(h,b.concat(e),c,e):(f=b.length?""+b.join(z)+z+e:e,b.length&&e===d&&(g=""+b.join(z),c[g]="@:"+f),c[f]=h));return c};L.displayName="flatObject",this.addInterpolation=function(a){return w.push(a),this},this.useMessageFormatInterpolation=function(){return this.useInterpolation("$translateMessageFormatInterpolation")},this.useInterpolation=function(a){return n=a,this},this.useSanitizeValueStrategy=function(a){return c.useStrategy(a),this},this.preferredLanguage=function(a){return M(a),this};var M=function(a){return a&&(e=a),e};this.translationNotFoundIndicator=function(a){return this.translationNotFoundIndicatorLeft(a),this.translationNotFoundIndicatorRight(a),this},this.translationNotFoundIndicatorLeft=function(a){return a?(q=a,this):q},this.translationNotFoundIndicatorRight=function(a){return a?(r=a,this):r},this.fallbackLanguage=function(a){return N(a),this};var N=function(a){return a?(angular.isString(a)?(h=!0,g=[a]):angular.isArray(a)&&(h=!1,g=a),angular.isString(e)&&H(g,e)<0&&g.push(e),this):h?g[0]:g};this.use=function(a){if(a){if(!t[a]&&!o)throw new Error("$translateProvider couldn't find translationTable for langKey: '"+a+"'");return i=a,this}return i};var O=function(a){return a?void(v=a):l?l+v:v};this.storageKey=O,this.useUrlLoader=function(a,b){return this.useLoader("$translateUrlLoader",angular.extend({url:a},b))},this.useStaticFilesLoader=function(a){return this.useLoader("$translateStaticFilesLoader",a)},this.useLoader=function(a,b){return o=a,p=b||{},this},this.useLocalStorage=function(){return this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){return this.useStorage("$translateCookieStorage")},this.useStorage=function(a){return k=a,this},this.storagePrefix=function(a){return a?(l=a,this):a},this.useMissingTranslationHandlerLog=function(){return this.useMissingTranslationHandler("$translateMissingTranslationHandlerLog")},this.useMissingTranslationHandler=function(a){return m=a,this},this.usePostCompiling=function(a){return y=!!a,this},this.uniformLanguageTag=function(a){return a?angular.isString(a)&&(a={standard:a}):a={},C=a.standard,this},this.determinePreferredLanguage=function(a){var b=a&&angular.isFunction(a)?a():G();return e=u.length?J(b):b,this},this.registerAvailableLanguageKeys=function(a,b){return a?(u=a,b&&(f=b),this):u},this.useLoaderCache=function(a){return a===!1?s=void 0:a===!0?s=!0:"undefined"==typeof a?s="$translationCache":a&&(s=a),this},this.directivePriority=function(a){return void 0===a?A:(A=a,this)},this.statefulFilter=function(a){return void 0===a?B:(B=a,this)},this.$get=["$log","$injector","$rootScope","$q",function(a,b,c,d){var f,l,u,z=b.get(n||"$translateDefaultInterpolation"),C=!1,D={},F={},G=function(a,b,c,h){if(angular.isArray(a)){var j=function(a){for(var e={},f=[],g=function(a){var f=d.defer(),g=function(b){e[a]=b,f.resolve([a,b])};return G(a,b,c,h).then(g,g),f.promise},i=0,j=a.length;j>i;i++)f.push(g(a[i]));return d.all(f).then(function(){return e})};return j(a)}var m=d.defer();a&&(a=I.apply(a));var n=function(){var a=e?F[e]:F[i];if(l=0,k&&!a){var b=f.get(v);if(a=F[b],g&&g.length){var c=H(g,b);l=0===c?1:0,H(g,e)<0&&g.push(e)}}return a}();if(n){var o=function(){_(a,b,c,h).then(m.resolve,m.reject)};o.displayName="promiseResolved",n["finally"](o,m.reject)}else _(a,b,c,h).then(m.resolve,m.reject);return m.promise},P=function(a){return q&&(a=[q,a].join(" ")),r&&(a=[a,r].join(" ")),a},Q=function(a){i=a,c.$emit("$translateChangeSuccess",{language:a}),k&&f.put(G.storageKey(),i),z.setLocale(i);var b=function(a,b){D[b].setLocale(i)};b.displayName="eachInterpolatorLocaleSetter",angular.forEach(D,b),c.$emit("$translateChangeEnd",{language:a})},R=function(a){if(!a)throw"No language key specified for loading.";var e=d.defer();c.$emit("$translateLoadingStart",{language:a}),C=!0;var f=s;"string"==typeof f&&(f=b.get(f));var g=angular.extend({},p,{key:a,$http:angular.extend({},{cache:f},p.$http)}),h=function(b){var d={};c.$emit("$translateLoadingSuccess",{language:a}),angular.isArray(b)?angular.forEach(b,function(a){angular.extend(d,L(a))}):angular.extend(d,L(b)),C=!1,e.resolve({key:a,table:d}),c.$emit("$translateLoadingEnd",{language:a})};h.displayName="onLoaderSuccess";var i=function(a){c.$emit("$translateLoadingError",{language:a}),e.reject(a),c.$emit("$translateLoadingEnd",{language:a})};return i.displayName="onLoaderError",b.get(o)(g).then(h,i),e.promise};if(k&&(f=b.get(k),!f.get||!f.put))throw new Error("Couldn't use storage '"+k+"', missing get() or put() method!");if(w.length){var S=function(a){var c=b.get(a);c.setLocale(e||i),D[c.getInterpolationIdentifier()]=c};S.displayName="interpolationFactoryAdder",angular.forEach(w,S)}var T=function(a){var b=d.defer();if(Object.prototype.hasOwnProperty.call(t,a))b.resolve(t[a]);else if(F[a]){var c=function(a){K(a.key,a.table),b.resolve(a.table)};c.displayName="translationTableResolver",F[a].then(c,b.reject)}else b.reject();return b.promise},U=function(a,b,c,e){var f=d.defer(),g=function(d){if(Object.prototype.hasOwnProperty.call(d,b)){e.setLocale(a);var g=d[b];"@:"===g.substr(0,2)?U(a,g.substr(2),c,e).then(f.resolve,f.reject):f.resolve(e.interpolate(d[b],c)),e.setLocale(i)}else f.reject()};return g.displayName="fallbackTranslationResolver",T(a).then(g,f.reject),f.promise},V=function(a,b,c,d){var e,f=t[a];if(f&&Object.prototype.hasOwnProperty.call(f,b)){if(d.setLocale(a),e=d.interpolate(f[b],c),"@:"===e.substr(0,2))return V(a,e.substr(2),c,d);d.setLocale(i)}return e},W=function(a,c){if(m){var d=b.get(m)(a,i,c);return void 0!==d?d:a}return a},X=function(a,b,c,e,f){var h=d.defer();if(a0?u:l,a,b,c,d)},$=function(a,b,c){return Y(u>0?u:l,a,b,c)},_=function(a,b,c,e){var f=d.defer(),h=i?t[i]:t,j=c?D[c]:z;if(h&&Object.prototype.hasOwnProperty.call(h,a)){var k=h[a];"@:"===k.substr(0,2)?G(k.substr(2),b,c,e).then(f.resolve,f.reject):f.resolve(j.interpolate(k,b))}else{var l;m&&!C&&(l=W(a,b)),i&&g&&g.length?Z(a,b,j,e).then(function(a){f.resolve(a)},function(a){f.reject(P(a))}):m&&!C&&l?f.resolve(e?e:l):e?f.resolve(e):f.reject(P(a))}return f.promise},ab=function(a,b,c){var d,e=i?t[i]:t,f=z;if(D&&Object.prototype.hasOwnProperty.call(D,c)&&(f=D[c]),e&&Object.prototype.hasOwnProperty.call(e,a)){var h=e[a];d="@:"===h.substr(0,2)?ab(h.substr(2),b,c):f.interpolate(h,b)}else{var j;m&&!C&&(j=W(a,b)),i&&g&&g.length?(l=0,d=$(a,b,f)):d=m&&!C&&j?j:P(a)}return d},bb=function(a){j===a&&(j=void 0),F[a]=void 0};if(G.preferredLanguage=function(a){return a&&M(a),e},G.cloakClassName=function(){return x},G.fallbackLanguage=function(a){if(void 0!==a&&null!==a){if(N(a),o&&g&&g.length)for(var b=0,c=g.length;c>b;b++)F[g[b]]||(F[g[b]]=R(g[b]));G.use(G.use())}return h?g[0]:g},G.useFallbackLanguage=function(a){if(void 0!==a&&null!==a)if(a){var b=H(g,a);b>-1&&(u=b)}else u=0},G.proposedLanguage=function(){return j},G.storage=function(){return f},G.use=function(a){if(!a)return i;var b=d.defer();c.$emit("$translateChangeStart",{language:a});var e=J(a);return e&&(a=e),t[a]||!o||F[a]?j===a&&F[a]?F[a].then(function(a){return b.resolve(a.key),a},function(a){return b.reject(a),d.reject(a)}):(b.resolve(a),Q(a)):(j=a,F[a]=R(a).then(function(a){return K(a.key,a.table),b.resolve(a.key),Q(a.key),a},function(a){return c.$emit("$translateChangeError",{language:a}),b.reject(a),c.$emit("$translateChangeEnd",{language:a}),d.reject(a)}),F[a]["finally"](function(){bb(a)})),b.promise},G.storageKey=function(){return O()},G.isPostCompilingEnabled=function(){return y},G.refresh=function(a){function b(){f.resolve(),c.$emit("$translateRefreshEnd",{language:a})}function e(){f.reject(),c.$emit("$translateRefreshEnd",{language:a})}if(!o)throw new Error("Couldn't refresh translation table, no loader registered!");var f=d.defer();if(c.$emit("$translateRefreshStart",{language:a}),a)if(t[a]){var h=function(c){K(c.key,c.table),a===i&&Q(i),b()};h.displayName="refreshPostProcessor",R(a).then(h,e)}else e();else{var j=[],k={};if(g&&g.length)for(var l=0,m=g.length;m>l;l++)j.push(R(g[l])),k[g[l]]=!0;i&&!k[i]&&j.push(R(i));var n=function(a){t={},angular.forEach(a,function(a){K(a.key,a.table)}),i&&Q(i),b()};n.displayName="refreshPostProcessor",d.all(j).then(n)}return f.promise},G.instant=function(a,b,c){if(null===a||angular.isUndefined(a))return a;if(angular.isArray(a)){for(var d={},f=0,h=a.length;h>f;f++)d[a[f]]=G.instant(a[f],b,c);return d}if(angular.isString(a)&&a.length<1)return a;a&&(a=I.apply(a));var j,k=[];e&&k.push(e),i&&k.push(i),g&&g.length&&(k=k.concat(g));for(var l=0,n=k.length;n>l;l++){var o=k[l];if(t[o]&&("undefined"!=typeof t[o][a]?j=ab(a,b,c):(q||r)&&(j=P(a))),"undefined"!=typeof j)break}return j||""===j||(j=z.interpolate(a,b),m&&!C&&(j=W(a,b))),j},G.versionInfo=function(){return E},G.loaderCache=function(){return s},G.directivePriority=function(){return A},G.statefulFilter=function(){return B},o&&(angular.equals(t,{})&&G.use(G.use()),g&&g.length))for(var cb=function(a){return K(a.key,a.table),c.$emit("$translateChangeEnd",{language:a.key}),a},db=0,eb=g.length;eb>db;db++){var fb=g[db];t[fb]||(F[fb]=R(fb).then(cb))}return G}]}function d(a,b){"use strict";var c,d={},e="default";return d.setLocale=function(a){c=a},d.getInterpolationIdentifier=function(){return e},d.useSanitizeValueStrategy=function(a){return b.useStrategy(a),this},d.interpolate=function(c,d){d=d||{},d=b.sanitize(d,"params");var e=a(c)(d);return e=b.sanitize(e,"text")},d}function e(a,b,c,d,e,f){"use strict";var g=function(){return this.replace(/^\s+|\s+$/g,"")};return{restrict:"AE",scope:!0,priority:a.directivePriority(),compile:function(b,h){var i=h.translateValues?h.translateValues:void 0,j=h.translateInterpolation?h.translateInterpolation:void 0,k=b[0].outerHTML.match(/translate-value-+/i),l="^(.*)("+c.startSymbol()+".*"+c.endSymbol()+")(.*)",m="^(.*)"+c.startSymbol()+"(.*)"+c.endSymbol()+"(.*)";return function(b,n,o){b.interpolateParams={},b.preText="",b.postText="";var p={},q=function(a,c,d){if(c.translateValues&&angular.extend(a,e(c.translateValues)(b.$parent)),k)for(var f in d)if(Object.prototype.hasOwnProperty.call(c,f)&&"translateValue"===f.substr(0,14)&&"translateValues"!==f){var g=angular.lowercase(f.substr(14,1))+f.substr(15);a[g]=d[f]}},r=function(a){if(angular.isFunction(r._unwatchOld)&&(r._unwatchOld(),r._unwatchOld=void 0),angular.equals(a,"")||!angular.isDefined(a)){var d=g.apply(n.text()).match(l);if(angular.isArray(d)){b.preText=d[1],b.postText=d[3],p.translate=c(d[2])(b.$parent);var e=n.text().match(m);angular.isArray(e)&&e[2]&&e[2].length&&(r._unwatchOld=b.$watch(e[2],function(a){p.translate=a,x()}))}else p.translate=n.text().replace(/^\s+|\s+$/g,"")}else p.translate=a;x()},s=function(a){o.$observe(a,function(b){p[a]=b,x()})};q(b.interpolateParams,o,h);var t=!0;o.$observe("translate",function(a){"undefined"==typeof a?r(""):""===a&&t||(p.translate=a,x()),t=!1});for(var u in o)o.hasOwnProperty(u)&&"translateAttr"===u.substr(0,13)&&s(u);if(o.$observe("translateDefault",function(a){b.defaultText=a}),i&&o.$observe("translateValues",function(a){a&&b.$parent.$watch(function(){angular.extend(b.interpolateParams,e(a)(b.$parent))})}),k){var v=function(a){o.$observe(a,function(c){var d=angular.lowercase(a.substr(14,1))+a.substr(15);b.interpolateParams[d]=c})};for(var w in o)Object.prototype.hasOwnProperty.call(o,w)&&"translateValue"===w.substr(0,14)&&"translateValues"!==w&&v(w)}var x=function(){for(var a in p)p.hasOwnProperty(a)&&void 0!==p[a]&&y(a,p[a],b,b.interpolateParams,b.defaultText)},y=function(b,c,d,e,f){c?a(c,e,j,f).then(function(a){z(a,d,!0,b)},function(a){z(a,d,!1,b)}):z(c,d,!1,b)},z=function(b,c,e,f){if("translate"===f){e||"undefined"==typeof c.defaultText||(b=c.defaultText),n.html(c.preText+b+c.postText);var g=a.isPostCompilingEnabled(),i="undefined"!=typeof h.translateCompile,j=i&&"false"!==h.translateCompile;(g&&!i||j)&&d(n.contents())(c)}else{e||"undefined"==typeof c.defaultText||(b=c.defaultText);var k=o.$attr[f];"data-"===k.substr(0,5)&&(k=k.substr(5)),k=k.substr(15),n.attr(k,b)}};(i||k||o.translateDefault)&&b.$watch("interpolateParams",x,!0);var A=f.$on("$translateChangeSuccess",x);n.text().length&&r(o.translate?o.translate:""),x(),b.$on("$destroy",A)}}}}function f(a,b){"use strict";return{compile:function(c){var d=function(){c.addClass(b.cloakClassName())},e=function(){c.removeClass(b.cloakClassName())},f=a.$on("$translateChangeEnd",function(){e(),f(),f=null});return d(),function(a,c,f){f.translateCloak&&f.translateCloak.length&&f.$observe("translateCloak",function(a){b(a).then(e,d)})}}}}function g(a,b){"use strict";var c=function(c,d,e){return angular.isObject(d)||(d=a(d)(this)),b.instant(c,d,e)};return b.statefulFilter()&&(c.$stateful=!0),c}return angular.module("pascalprecht.translate",["ng"]).run(a),a.$inject=["$translate"],a.displayName="runTranslate",angular.module("pascalprecht.translate").provider("$translateSanitization",b),angular.module("pascalprecht.translate").constant("pascalprechtTranslateOverrider",{}).provider("$translate",c),c.$inject=["$STORAGE_KEY","$windowProvider","$translateSanitizationProvider","pascalprechtTranslateOverrider"],c.displayName="displayName",angular.module("pascalprecht.translate").factory("$translateDefaultInterpolation",d),d.$inject=["$interpolate","$translateSanitization"],d.displayName="$translateDefaultInterpolation",angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").directive("translate",e),e.$inject=["$translate","$q","$interpolate","$compile","$parse","$rootScope"],e.displayName="translateDirective",angular.module("pascalprecht.translate").directive("translateCloak",f),f.$inject=["$rootScope","$translate"],f.displayName="translateCloakDirective",angular.module("pascalprecht.translate").filter("translate",g),g.$inject=["$parse","$translate"],g.displayName="translateFilterFactory","pascalprecht.translate"});
\ No newline at end of file
diff --git a/turtles/app/lib/bower_components/angular-animate/.bower.json b/turtles/app/lib/bower_components/angular-animate/.bower.json
new file mode 100644
index 000000000..49917407c
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular-animate/.bower.json
@@ -0,0 +1,20 @@
+{
+ "name": "angular-animate",
+ "version": "1.4.0",
+ "main": "./angular-animate.js",
+ "ignore": [],
+ "dependencies": {
+ "angular": "1.4.0"
+ },
+ "homepage": "https://github.com/angular/bower-angular-animate",
+ "_release": "1.4.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.4.0",
+ "commit": "708368e2865fcbee7c6f0f6107aa4eb9c6a9b780"
+ },
+ "_source": "git://github.com/angular/bower-angular-animate.git",
+ "_target": "~1.4.0",
+ "_originalSource": "angular-animate",
+ "_direct": true
+}
\ No newline at end of file
diff --git a/turtles/app/lib/bower_components/angular-animate/README.md b/turtles/app/lib/bower_components/angular-animate/README.md
new file mode 100644
index 000000000..8313da67c
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular-animate/README.md
@@ -0,0 +1,68 @@
+# packaged angular-animate
+
+This repo is for distribution on `npm` and `bower`. The source for this module is in the
+[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate).
+Please file issues and pull requests against that repo.
+
+## Install
+
+You can install this package either with `npm` or with `bower`.
+
+### npm
+
+```shell
+npm install angular-animate
+```
+
+Then add `ngAnimate` as a dependency for your app:
+
+```javascript
+angular.module('myApp', [require('angular-animate')]);
+```
+
+### bower
+
+```shell
+bower install angular-animate
+```
+
+Then add a `
+```
+
+Then add `ngAnimate` as a dependency for your app:
+
+```javascript
+angular.module('myApp', ['ngAnimate']);
+```
+
+## Documentation
+
+Documentation is available on the
+[AngularJS docs site](http://docs.angularjs.org/api/ngAnimate).
+
+## License
+
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/turtles/app/lib/bower_components/angular-animate/angular-animate.js b/turtles/app/lib/bower_components/angular-animate/angular-animate.js
new file mode 100644
index 000000000..42b03e0b5
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular-animate/angular-animate.js
@@ -0,0 +1,3708 @@
+/**
+ * @license AngularJS v1.4.0
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/* jshint ignore:start */
+var noop = angular.noop;
+var extend = angular.extend;
+var jqLite = angular.element;
+var forEach = angular.forEach;
+var isArray = angular.isArray;
+var isString = angular.isString;
+var isObject = angular.isObject;
+var isUndefined = angular.isUndefined;
+var isDefined = angular.isDefined;
+var isFunction = angular.isFunction;
+var isElement = angular.isElement;
+
+var ELEMENT_NODE = 1;
+var COMMENT_NODE = 8;
+
+var NG_ANIMATE_CLASSNAME = 'ng-animate';
+var NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren';
+
+var isPromiseLike = function(p) {
+ return p && p.then ? true : false;
+}
+
+function assertArg(arg, name, reason) {
+ if (!arg) {
+ throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
+ }
+ return arg;
+}
+
+function mergeClasses(a,b) {
+ if (!a && !b) return '';
+ if (!a) return b;
+ if (!b) return a;
+ if (isArray(a)) a = a.join(' ');
+ if (isArray(b)) b = b.join(' ');
+ return a + ' ' + b;
+}
+
+function packageStyles(options) {
+ var styles = {};
+ if (options && (options.to || options.from)) {
+ styles.to = options.to;
+ styles.from = options.from;
+ }
+ return styles;
+}
+
+function pendClasses(classes, fix, isPrefix) {
+ var className = '';
+ classes = isArray(classes)
+ ? classes
+ : classes && isString(classes) && classes.length
+ ? classes.split(/\s+/)
+ : [];
+ forEach(classes, function(klass, i) {
+ if (klass && klass.length > 0) {
+ className += (i > 0) ? ' ' : '';
+ className += isPrefix ? fix + klass
+ : klass + fix;
+ }
+ });
+ return className;
+}
+
+function removeFromArray(arr, val) {
+ var index = arr.indexOf(val);
+ if (val >= 0) {
+ arr.splice(index, 1);
+ }
+}
+
+function stripCommentsFromElement(element) {
+ if (element instanceof jqLite) {
+ switch (element.length) {
+ case 0:
+ return [];
+ break;
+
+ case 1:
+ // there is no point of stripping anything if the element
+ // is the only element within the jqLite wrapper.
+ // (it's important that we retain the element instance.)
+ if (element[0].nodeType === ELEMENT_NODE) {
+ return element;
+ }
+ break;
+
+ default:
+ return jqLite(extractElementNode(element));
+ break;
+ }
+ }
+
+ if (element.nodeType === ELEMENT_NODE) {
+ return jqLite(element);
+ }
+}
+
+function extractElementNode(element) {
+ if (!element[0]) return element;
+ for (var i = 0; i < element.length; i++) {
+ var elm = element[i];
+ if (elm.nodeType == ELEMENT_NODE) {
+ return elm;
+ }
+ }
+}
+
+function $$addClass($$jqLite, element, className) {
+ forEach(element, function(elm) {
+ $$jqLite.addClass(elm, className);
+ });
+}
+
+function $$removeClass($$jqLite, element, className) {
+ forEach(element, function(elm) {
+ $$jqLite.removeClass(elm, className);
+ });
+}
+
+function applyAnimationClassesFactory($$jqLite) {
+ return function(element, options) {
+ if (options.addClass) {
+ $$addClass($$jqLite, element, options.addClass);
+ options.addClass = null;
+ }
+ if (options.removeClass) {
+ $$removeClass($$jqLite, element, options.removeClass);
+ options.removeClass = null;
+ }
+ }
+}
+
+function prepareAnimationOptions(options) {
+ options = options || {};
+ if (!options.$$prepared) {
+ var domOperation = options.domOperation || noop;
+ options.domOperation = function() {
+ options.$$domOperationFired = true;
+ domOperation();
+ domOperation = noop;
+ };
+ options.$$prepared = true;
+ }
+ return options;
+}
+
+function applyAnimationStyles(element, options) {
+ applyAnimationFromStyles(element, options);
+ applyAnimationToStyles(element, options);
+}
+
+function applyAnimationFromStyles(element, options) {
+ if (options.from) {
+ element.css(options.from);
+ options.from = null;
+ }
+}
+
+function applyAnimationToStyles(element, options) {
+ if (options.to) {
+ element.css(options.to);
+ options.to = null;
+ }
+}
+
+function mergeAnimationOptions(element, target, newOptions) {
+ var toAdd = (target.addClass || '') + ' ' + (newOptions.addClass || '');
+ var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || '');
+ var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove);
+
+ extend(target, newOptions);
+
+ if (classes.addClass) {
+ target.addClass = classes.addClass;
+ } else {
+ target.addClass = null;
+ }
+
+ if (classes.removeClass) {
+ target.removeClass = classes.removeClass;
+ } else {
+ target.removeClass = null;
+ }
+
+ return target;
+}
+
+function resolveElementClasses(existing, toAdd, toRemove) {
+ var ADD_CLASS = 1;
+ var REMOVE_CLASS = -1;
+
+ var flags = {};
+ existing = splitClassesToLookup(existing);
+
+ toAdd = splitClassesToLookup(toAdd);
+ forEach(toAdd, function(value, key) {
+ flags[key] = ADD_CLASS;
+ });
+
+ toRemove = splitClassesToLookup(toRemove);
+ forEach(toRemove, function(value, key) {
+ flags[key] = flags[key] === ADD_CLASS ? null : REMOVE_CLASS;
+ });
+
+ var classes = {
+ addClass: '',
+ removeClass: ''
+ };
+
+ forEach(flags, function(val, klass) {
+ var prop, allow;
+ if (val === ADD_CLASS) {
+ prop = 'addClass';
+ allow = !existing[klass];
+ } else if (val === REMOVE_CLASS) {
+ prop = 'removeClass';
+ allow = existing[klass];
+ }
+ if (allow) {
+ if (classes[prop].length) {
+ classes[prop] += ' ';
+ }
+ classes[prop] += klass;
+ }
+ });
+
+ function splitClassesToLookup(classes) {
+ if (isString(classes)) {
+ classes = classes.split(' ');
+ }
+
+ var obj = {};
+ forEach(classes, function(klass) {
+ // sometimes the split leaves empty string values
+ // incase extra spaces were applied to the options
+ if (klass.length) {
+ obj[klass] = true;
+ }
+ });
+ return obj;
+ }
+
+ return classes;
+}
+
+function getDomNode(element) {
+ return (element instanceof angular.element) ? element[0] : element;
+}
+
+var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
+ var tickQueue = [];
+ var cancelFn;
+
+ function scheduler(tasks) {
+ // we make a copy since RAFScheduler mutates the state
+ // of the passed in array variable and this would be difficult
+ // to track down on the outside code
+ tickQueue.push([].concat(tasks));
+ nextTick();
+ }
+
+ /* waitUntilQuiet does two things:
+ * 1. It will run the FINAL `fn` value only when an uncancelled RAF has passed through
+ * 2. It will delay the next wave of tasks from running until the quiet `fn` has run.
+ *
+ * The motivation here is that animation code can request more time from the scheduler
+ * before the next wave runs. This allows for certain DOM properties such as classes to
+ * be resolved in time for the next animation to run.
+ */
+ scheduler.waitUntilQuiet = function(fn) {
+ if (cancelFn) cancelFn();
+
+ cancelFn = $$rAF(function() {
+ cancelFn = null;
+ fn();
+ nextTick();
+ });
+ };
+
+ return scheduler;
+
+ function nextTick() {
+ if (!tickQueue.length) return;
+
+ var updatedQueue = [];
+ for (var i = 0; i < tickQueue.length; i++) {
+ var innerQueue = tickQueue[i];
+ runNextTask(innerQueue);
+ if (innerQueue.length) {
+ updatedQueue.push(innerQueue);
+ }
+ }
+ tickQueue = updatedQueue;
+
+ if (!cancelFn) {
+ $$rAF(function() {
+ if (!cancelFn) nextTick();
+ });
+ }
+ }
+
+ function runNextTask(tasks) {
+ var nextTask = tasks.shift();
+ nextTask();
+ }
+}];
+
+var $$AnimateChildrenDirective = [function() {
+ return function(scope, element, attrs) {
+ var val = attrs.ngAnimateChildren;
+ if (angular.isString(val) && val.length === 0) { //empty attribute
+ element.data(NG_ANIMATE_CHILDREN_DATA, true);
+ } else {
+ attrs.$observe('ngAnimateChildren', function(value) {
+ value = value === 'on' || value === 'true';
+ element.data(NG_ANIMATE_CHILDREN_DATA, value);
+ });
+ }
+ };
+}];
+
+/**
+ * @ngdoc service
+ * @name $animateCss
+ * @kind object
+ *
+ * @description
+ * The `$animateCss` service is a useful utility to trigger customized CSS-based transitions/keyframes
+ * from a JavaScript-based animation or directly from a directive. The purpose of `$animateCss` is NOT
+ * to side-step how `$animate` and ngAnimate work, but the goal is to allow pre-existing animations or
+ * directives to create more complex animations that can be purely driven using CSS code.
+ *
+ * Note that only browsers that support CSS transitions and/or keyframe animations are capable of
+ * rendering animations triggered via `$animateCss` (bad news for IE9 and lower).
+ *
+ * ## Usage
+ * Once again, `$animateCss` is designed to be used inside of a registered JavaScript animation that
+ * is powered by ngAnimate. It is possible to use `$animateCss` directly inside of a directive, however,
+ * any automatic control over cancelling animations and/or preventing animations from being run on
+ * child elements will not be handled by Angular. For this to work as expected, please use `$animate` to
+ * trigger the animation and then setup a JavaScript animation that injects `$animateCss` to trigger
+ * the CSS animation.
+ *
+ * The example below shows how we can create a folding animation on an element using `ng-if`:
+ *
+ * ```html
+ *
+ *
+ * This element will go BOOM
+ *
+ * Fold In
+ * ```
+ *
+ * Now we create the **JavaScript animation** that will trigger the CSS transition:
+ *
+ * ```js
+ * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {
+ * return {
+ * enter: function(element, doneFn) {
+ * var height = element[0].offsetHeight;
+ * return $animateCss(element, {
+ * from: { height:'0px' },
+ * to: { height:height + 'px' },
+ * duration: 1 // one second
+ * });
+ * }
+ * }
+ * }]);
+ * ```
+ *
+ * ## More Advanced Uses
+ *
+ * `$animateCss` is the underlying code that ngAnimate uses to power **CSS-based animations** behind the scenes. Therefore CSS hooks
+ * like `.ng-EVENT`, `.ng-EVENT-active`, `.ng-EVENT-stagger` are all features that can be triggered using `$animateCss` via JavaScript code.
+ *
+ * This also means that just about any combination of adding classes, removing classes, setting styles, dynamically setting a keyframe animation,
+ * applying a hardcoded duration or delay value, changing the animation easing or applying a stagger animation are all options that work with
+ * `$animateCss`. The service itself is smart enough to figure out the combination of options and examine the element styling properties in order
+ * to provide a working animation that will run in CSS.
+ *
+ * The example below showcases a more advanced version of the `.fold-animation` from the example above:
+ *
+ * ```js
+ * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {
+ * return {
+ * enter: function(element, doneFn) {
+ * var height = element[0].offsetHeight;
+ * return $animateCss(element, {
+ * addClass: 'red large-text pulse-twice',
+ * easing: 'ease-out',
+ * from: { height:'0px' },
+ * to: { height:height + 'px' },
+ * duration: 1 // one second
+ * });
+ * }
+ * }
+ * }]);
+ * ```
+ *
+ * Since we're adding/removing CSS classes then the CSS transition will also pick those up:
+ *
+ * ```css
+ * /* since a hardcoded duration value of 1 was provided in the JavaScript animation code,
+ * the CSS classes below will be transitioned despite them being defined as regular CSS classes */
+ * .red { background:red; }
+ * .large-text { font-size:20px; }
+ *
+ * /* we can also use a keyframe animation and $animateCss will make it work alongside the transition */
+ * .pulse-twice {
+ * animation: 0.5s pulse linear 2;
+ * -webkit-animation: 0.5s pulse linear 2;
+ * }
+ *
+ * @keyframes pulse {
+ * from { transform: scale(0.5); }
+ * to { transform: scale(1.5); }
+ * }
+ *
+ * @-webkit-keyframes pulse {
+ * from { -webkit-transform: scale(0.5); }
+ * to { -webkit-transform: scale(1.5); }
+ * }
+ * ```
+ *
+ * Given this complex combination of CSS classes, styles and options, `$animateCss` will figure everything out and make the animation happen.
+ *
+ * ## How the Options are handled
+ *
+ * `$animateCss` is very versatile and intelligent when it comes to figuring out what configurations to apply to the element to ensure the animation
+ * works with the options provided. Say for example we were adding a class that contained a keyframe value and we wanted to also animate some inline
+ * styles using the `from` and `to` properties.
+ *
+ * ```js
+ * var animator = $animateCss(element, {
+ * from: { background:'red' },
+ * to: { background:'blue' }
+ * });
+ * animator.start();
+ * ```
+ *
+ * ```css
+ * .rotating-animation {
+ * animation:0.5s rotate linear;
+ * -webkit-animation:0.5s rotate linear;
+ * }
+ *
+ * @keyframes rotate {
+ * from { transform: rotate(0deg); }
+ * to { transform: rotate(360deg); }
+ * }
+ *
+ * @-webkit-keyframes rotate {
+ * from { -webkit-transform: rotate(0deg); }
+ * to { -webkit-transform: rotate(360deg); }
+ * }
+ * ```
+ *
+ * The missing pieces here are that we do not have a transition set (within the CSS code nor within the `$animateCss` options) and the duration of the animation is
+ * going to be detected from what the keyframe styles on the CSS class are. In this event, `$animateCss` will automatically create an inline transition
+ * style matching the duration detected from the keyframe style (which is present in the CSS class that is being added) and then prepare both the transition
+ * and keyframe animations to run in parallel on the element. Then when the animation is underway the provided `from` and `to` CSS styles will be applied
+ * and spread across the transition and keyframe animation.
+ *
+ * ## What is returned
+ *
+ * `$animateCss` works in two stages: a preparation phase and an animation phase. Therefore when `$animateCss` is first called it will NOT actually
+ * start the animation. All that is going on here is that the element is being prepared for the animation (which means that the generated CSS classes are
+ * added and removed on the element). Once `$animateCss` is called it will return an object with the following properties:
+ *
+ * ```js
+ * var animator = $animateCss(element, { ... });
+ * ```
+ *
+ * Now what do the contents of our `animator` variable look like:
+ *
+ * ```js
+ * {
+ * // starts the animation
+ * start: Function,
+ *
+ * // ends (aborts) the animation
+ * end: Function
+ * }
+ * ```
+ *
+ * To actually start the animation we need to run `animation.start()` which will then return a promise that we can hook into to detect when the animation ends.
+ * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and stlyes may have been
+ * applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties
+ * and that changing them will not reconfigure the parameters of the animation.
+ *
+ * ### runner.done() vs runner.then()
+ * It is documented that `animation.start()` will return a promise object and this is true, however, there is also an additional method available on the
+ * runner called `.done(callbackFn)`. The done method works the same as `.finally(callbackFn)`, however, it does **not trigger a digest to occur**.
+ * Therefore, for performance reasons, it's always best to use `runner.done(callback)` instead of `runner.then()`, `runner.catch()` or `runner.finally()`
+ * unless you really need a digest to kick off afterwards.
+ *
+ * Keep in mind that, to make this easier, ngAnimate has tweaked the JS animations API to recognize when a runner instance is returned from $animateCss
+ * (so there is no need to call `runner.done(doneFn)` inside of your JavaScript animation code). Check the [animation code above](#usage) to see how this works.
+ *
+ * @param {DOMElement} element the element that will be animated
+ * @param {object} options the animation-related options that will be applied during the animation
+ *
+ * * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied
+ * to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.)
+ * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both).
+ * * `transition` - The raw CSS transition style that will be used (e.g. `1s linear all`).
+ * * `keyframe` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).
+ * * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation.
+ * * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition.
+ * * `addClass` - A space separated list of CSS classes that will be added to the element and spread across the animation.
+ * * `removeClass` - A space separated list of CSS classes that will be removed from the element and spread across the animation.
+ * * `duration` - A number value representing the total duration of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `0`
+ * is provided then the animation will be skipped entirely.
+ * * `delay` - A number value representing the total delay of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `true` is
+ * used then whatever delay value is detected from the CSS classes will be mirrored on the elements styles (e.g. by setting delay true then the style value
+ * of the element will be `transition-delay: DETECTED_VALUE`). Using `true` is useful when you want the CSS classes and inline styles to all share the same
+ * CSS delay value.
+ * * `stagger` - A numeric time value representing the delay between successively animated elements
+ * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.})
+ * * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a
+ * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)
+ * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occuring on the classes being added and removed.)
+ *
+ * @return {object} an object with start and end methods and details about the animation.
+ *
+ * * `start` - The method to start the animation. This will return a `Promise` when called.
+ * * `end` - This method will cancel the animation and remove all applied CSS classes and styles.
+ */
+
+// Detect proper transitionend/animationend event names.
+var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;
+
+// If unprefixed events are not supported but webkit-prefixed are, use the latter.
+// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.
+// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`
+// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.
+// Register both events in case `window.onanimationend` is not supported because of that,
+// do the same for `transitionend` as Safari is likely to exhibit similar behavior.
+// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit
+// therefore there is no reason to test anymore for other vendor prefixes:
+// http://caniuse.com/#search=transition
+if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {
+ CSS_PREFIX = '-webkit-';
+ TRANSITION_PROP = 'WebkitTransition';
+ TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';
+} else {
+ TRANSITION_PROP = 'transition';
+ TRANSITIONEND_EVENT = 'transitionend';
+}
+
+if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {
+ CSS_PREFIX = '-webkit-';
+ ANIMATION_PROP = 'WebkitAnimation';
+ ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';
+} else {
+ ANIMATION_PROP = 'animation';
+ ANIMATIONEND_EVENT = 'animationend';
+}
+
+var DURATION_KEY = 'Duration';
+var PROPERTY_KEY = 'Property';
+var DELAY_KEY = 'Delay';
+var TIMING_KEY = 'TimingFunction';
+var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';
+var ANIMATION_PLAYSTATE_KEY = 'PlayState';
+var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
+var CLOSING_TIME_BUFFER = 1.5;
+var ONE_SECOND = 1000;
+var BASE_TEN = 10;
+
+var SAFE_FAST_FORWARD_DURATION_VALUE = 9999;
+
+var ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY;
+var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY;
+
+var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY;
+var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY;
+
+var DETECT_CSS_PROPERTIES = {
+ transitionDuration: TRANSITION_DURATION_PROP,
+ transitionDelay: TRANSITION_DELAY_PROP,
+ transitionProperty: TRANSITION_PROP + PROPERTY_KEY,
+ animationDuration: ANIMATION_DURATION_PROP,
+ animationDelay: ANIMATION_DELAY_PROP,
+ animationIterationCount: ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY
+};
+
+var DETECT_STAGGER_CSS_PROPERTIES = {
+ transitionDuration: TRANSITION_DURATION_PROP,
+ transitionDelay: TRANSITION_DELAY_PROP,
+ animationDuration: ANIMATION_DURATION_PROP,
+ animationDelay: ANIMATION_DELAY_PROP
+};
+
+function computeCssStyles($window, element, properties) {
+ var styles = Object.create(null);
+ var detectedStyles = $window.getComputedStyle(element) || {};
+ forEach(properties, function(formalStyleName, actualStyleName) {
+ var val = detectedStyles[formalStyleName];
+ if (val) {
+ var c = val.charAt(0);
+
+ // only numerical-based values have a negative sign or digit as the first value
+ if (c === '-' || c === '+' || c >= 0) {
+ val = parseMaxTime(val);
+ }
+
+ // by setting this to null in the event that the delay is not set or is set directly as 0
+ // then we can still allow for zegative values to be used later on and not mistake this
+ // value for being greater than any other negative value.
+ if (val === 0) {
+ val = null;
+ }
+ styles[actualStyleName] = val;
+ }
+ });
+
+ return styles;
+}
+
+function parseMaxTime(str) {
+ var maxValue = 0;
+ var values = str.split(/\s*,\s*/);
+ forEach(values, function(value) {
+ // it's always safe to consider only second values and omit `ms` values since
+ // getComputedStyle will always handle the conversion for us
+ if (value.charAt(value.length - 1) == 's') {
+ value = value.substring(0, value.length - 1);
+ }
+ value = parseFloat(value) || 0;
+ maxValue = maxValue ? Math.max(value, maxValue) : value;
+ });
+ return maxValue;
+}
+
+function truthyTimingValue(val) {
+ return val === 0 || val != null;
+}
+
+function getCssTransitionDurationStyle(duration, applyOnlyDuration) {
+ var style = TRANSITION_PROP;
+ var value = duration + 's';
+ if (applyOnlyDuration) {
+ style += DURATION_KEY;
+ } else {
+ value += ' linear all';
+ }
+ return [style, value];
+}
+
+function getCssKeyframeDurationStyle(duration) {
+ return [ANIMATION_DURATION_PROP, duration + 's'];
+}
+
+function getCssDelayStyle(delay, isKeyframeAnimation) {
+ var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP;
+ return [prop, delay + 's'];
+}
+
+function blockTransitions(node, duration) {
+ // we use a negative delay value since it performs blocking
+ // yet it doesn't kill any existing transitions running on the
+ // same element which makes this safe for class-based animations
+ var value = duration ? '-' + duration + 's' : '';
+ applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]);
+ return [TRANSITION_DELAY_PROP, value];
+}
+
+function blockKeyframeAnimations(node, applyBlock) {
+ var value = applyBlock ? 'paused' : '';
+ var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY;
+ applyInlineStyle(node, [key, value]);
+ return [key, value];
+}
+
+function applyInlineStyle(node, styleTuple) {
+ var prop = styleTuple[0];
+ var value = styleTuple[1];
+ node.style[prop] = value;
+}
+
+function createLocalCacheLookup() {
+ var cache = Object.create(null);
+ return {
+ flush: function() {
+ cache = Object.create(null);
+ },
+
+ count: function(key) {
+ var entry = cache[key];
+ return entry ? entry.total : 0;
+ },
+
+ get: function(key) {
+ var entry = cache[key];
+ return entry && entry.value;
+ },
+
+ put: function(key, value) {
+ if (!cache[key]) {
+ cache[key] = { total: 1, value: value };
+ } else {
+ cache[key].total++;
+ }
+ }
+ };
+}
+
+var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
+ var gcsLookup = createLocalCacheLookup();
+ var gcsStaggerLookup = createLocalCacheLookup();
+
+ this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout',
+ '$document', '$sniffer', '$$rAFScheduler',
+ function($window, $$jqLite, $$AnimateRunner, $timeout,
+ $document, $sniffer, $$rAFScheduler) {
+
+ var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
+ var parentCounter = 0;
+ function gcsHashFn(node, extraClasses) {
+ var KEY = "$$ngAnimateParentKey";
+ var parentNode = node.parentNode;
+ var parentID = parentNode[KEY] || (parentNode[KEY] = ++parentCounter);
+ return parentID + '-' + node.getAttribute('class') + '-' + extraClasses;
+ }
+
+ function computeCachedCssStyles(node, className, cacheKey, properties) {
+ var timings = gcsLookup.get(cacheKey);
+
+ if (!timings) {
+ timings = computeCssStyles($window, node, properties);
+ if (timings.animationIterationCount === 'infinite') {
+ timings.animationIterationCount = 1;
+ }
+ }
+
+ // we keep putting this in multiple times even though the value and the cacheKey are the same
+ // because we're keeping an interal tally of how many duplicate animations are detected.
+ gcsLookup.put(cacheKey, timings);
+ return timings;
+ }
+
+ function computeCachedCssStaggerStyles(node, className, cacheKey, properties) {
+ var stagger;
+
+ // if we have one or more existing matches of matching elements
+ // containing the same parent + CSS styles (which is how cacheKey works)
+ // then staggering is possible
+ if (gcsLookup.count(cacheKey) > 0) {
+ stagger = gcsStaggerLookup.get(cacheKey);
+
+ if (!stagger) {
+ var staggerClassName = pendClasses(className, '-stagger');
+
+ $$jqLite.addClass(node, staggerClassName);
+
+ stagger = computeCssStyles($window, node, properties);
+
+ // force the conversion of a null value to zero incase not set
+ stagger.animationDuration = Math.max(stagger.animationDuration, 0);
+ stagger.transitionDuration = Math.max(stagger.transitionDuration, 0);
+
+ $$jqLite.removeClass(node, staggerClassName);
+
+ gcsStaggerLookup.put(cacheKey, stagger);
+ }
+ }
+
+ return stagger || {};
+ }
+
+ var bod = getDomNode($document).body;
+ var rafWaitQueue = [];
+ function waitUntilQuiet(callback) {
+ rafWaitQueue.push(callback);
+ $$rAFScheduler.waitUntilQuiet(function() {
+ gcsLookup.flush();
+ gcsStaggerLookup.flush();
+
+ //the line below will force the browser to perform a repaint so
+ //that all the animated elements within the animation frame will
+ //be properly updated and drawn on screen. This is required to
+ //ensure that the preparation animation is properly flushed so that
+ //the active state picks up from there. DO NOT REMOVE THIS LINE.
+ //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH
+ //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND
+ //WILL TAKE YEARS AWAY FROM YOUR LIFE.
+ var width = bod.offsetWidth + 1;
+
+ // we use a for loop to ensure that if the queue is changed
+ // during this looping then it will consider new requests
+ for (var i = 0; i < rafWaitQueue.length; i++) {
+ rafWaitQueue[i](width);
+ }
+ rafWaitQueue.length = 0;
+ });
+ }
+
+ return init;
+
+ function computeTimings(node, className, cacheKey) {
+ var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES);
+ var aD = timings.animationDelay;
+ var tD = timings.transitionDelay;
+ timings.maxDelay = aD && tD
+ ? Math.max(aD, tD)
+ : (aD || tD);
+ timings.maxDuration = Math.max(
+ timings.animationDuration * timings.animationIterationCount,
+ timings.transitionDuration);
+
+ return timings;
+ }
+
+ function init(element, options) {
+ var node = getDomNode(element);
+ options = prepareAnimationOptions(options);
+
+ var temporaryStyles = [];
+ var classes = element.attr('class');
+ var styles = packageStyles(options);
+ var animationClosed;
+ var animationPaused;
+ var animationCompleted;
+ var runner;
+ var runnerHost;
+ var maxDelay;
+ var maxDelayTime;
+ var maxDuration;
+ var maxDurationTime;
+
+ if (options.duration === 0 || (!$sniffer.animations && !$sniffer.transitions)) {
+ return closeAndReturnNoopAnimator();
+ }
+
+ var method = options.event && isArray(options.event)
+ ? options.event.join(' ')
+ : options.event;
+
+ var isStructural = method && options.structural;
+ var structuralClassName = '';
+ var addRemoveClassName = '';
+
+ if (isStructural) {
+ structuralClassName = pendClasses(method, 'ng-', true);
+ } else if (method) {
+ structuralClassName = method;
+ }
+
+ if (options.addClass) {
+ addRemoveClassName += pendClasses(options.addClass, '-add');
+ }
+
+ if (options.removeClass) {
+ if (addRemoveClassName.length) {
+ addRemoveClassName += ' ';
+ }
+ addRemoveClassName += pendClasses(options.removeClass, '-remove');
+ }
+
+ // there may be a situation where a structural animation is combined together
+ // with CSS classes that need to resolve before the animation is computed.
+ // However this means that there is no explicit CSS code to block the animation
+ // from happening (by setting 0s none in the class name). If this is the case
+ // we need to apply the classes before the first rAF so we know to continue if
+ // there actually is a detected transition or keyframe animation
+ if (options.applyClassesEarly && addRemoveClassName.length) {
+ applyAnimationClasses(element, options);
+ addRemoveClassName = '';
+ }
+
+ var setupClasses = [structuralClassName, addRemoveClassName].join(' ').trim();
+ var fullClassName = classes + ' ' + setupClasses;
+ var activeClasses = pendClasses(setupClasses, '-active');
+ var hasToStyles = styles.to && Object.keys(styles.to).length > 0;
+
+ // there is no way we can trigger an animation since no styles and
+ // no classes are being applied which would then trigger a transition
+ if (!hasToStyles && !setupClasses) {
+ return closeAndReturnNoopAnimator();
+ }
+
+ var cacheKey, stagger;
+ if (options.stagger > 0) {
+ var staggerVal = parseFloat(options.stagger);
+ stagger = {
+ transitionDelay: staggerVal,
+ animationDelay: staggerVal,
+ transitionDuration: 0,
+ animationDuration: 0
+ };
+ } else {
+ cacheKey = gcsHashFn(node, fullClassName);
+ stagger = computeCachedCssStaggerStyles(node, setupClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES);
+ }
+
+ $$jqLite.addClass(element, setupClasses);
+
+ var applyOnlyDuration;
+
+ if (options.transitionStyle) {
+ var transitionStyle = [TRANSITION_PROP, options.transitionStyle];
+ applyInlineStyle(node, transitionStyle);
+ temporaryStyles.push(transitionStyle);
+ }
+
+ if (options.duration >= 0) {
+ applyOnlyDuration = node.style[TRANSITION_PROP].length > 0;
+ var durationStyle = getCssTransitionDurationStyle(options.duration, applyOnlyDuration);
+
+ // we set the duration so that it will be picked up by getComputedStyle later
+ applyInlineStyle(node, durationStyle);
+ temporaryStyles.push(durationStyle);
+ }
+
+ if (options.keyframeStyle) {
+ var keyframeStyle = [ANIMATION_PROP, options.keyframeStyle];
+ applyInlineStyle(node, keyframeStyle);
+ temporaryStyles.push(keyframeStyle);
+ }
+
+ var itemIndex = stagger
+ ? options.staggerIndex >= 0
+ ? options.staggerIndex
+ : gcsLookup.count(cacheKey)
+ : 0;
+
+ var isFirst = itemIndex === 0;
+
+ // this is a pre-emptive way of forcing the setup classes to be added and applied INSTANTLY
+ // without causing any combination of transitions to kick in. By adding a negative delay value
+ // it forces the setup class' transition to end immediately. We later then remove the negative
+ // transition delay to allow for the transition to naturally do it's thing. The beauty here is
+ // that if there is no transition defined then nothing will happen and this will also allow
+ // other transitions to be stacked on top of each other without any chopping them out.
+ if (isFirst) {
+ blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE);
+ }
+
+ var timings = computeTimings(node, fullClassName, cacheKey);
+ var relativeDelay = timings.maxDelay;
+ maxDelay = Math.max(relativeDelay, 0);
+ maxDuration = timings.maxDuration;
+
+ var flags = {};
+ flags.hasTransitions = timings.transitionDuration > 0;
+ flags.hasAnimations = timings.animationDuration > 0;
+ flags.hasTransitionAll = flags.hasTransitions && timings.transitionProperty == 'all';
+ flags.applyTransitionDuration = hasToStyles && (
+ (flags.hasTransitions && !flags.hasTransitionAll)
+ || (flags.hasAnimations && !flags.hasTransitions));
+ flags.applyAnimationDuration = options.duration && flags.hasAnimations;
+ flags.applyTransitionDelay = truthyTimingValue(options.delay) && (flags.applyTransitionDuration || flags.hasTransitions);
+ flags.applyAnimationDelay = truthyTimingValue(options.delay) && flags.hasAnimations;
+ flags.recalculateTimingStyles = addRemoveClassName.length > 0;
+
+ if (flags.applyTransitionDuration || flags.applyAnimationDuration) {
+ maxDuration = options.duration ? parseFloat(options.duration) : maxDuration;
+
+ if (flags.applyTransitionDuration) {
+ flags.hasTransitions = true;
+ timings.transitionDuration = maxDuration;
+ applyOnlyDuration = node.style[TRANSITION_PROP + PROPERTY_KEY].length > 0;
+ temporaryStyles.push(getCssTransitionDurationStyle(maxDuration, applyOnlyDuration));
+ }
+
+ if (flags.applyAnimationDuration) {
+ flags.hasAnimations = true;
+ timings.animationDuration = maxDuration;
+ temporaryStyles.push(getCssKeyframeDurationStyle(maxDuration));
+ }
+ }
+
+ if (maxDuration === 0 && !flags.recalculateTimingStyles) {
+ return closeAndReturnNoopAnimator();
+ }
+
+ // we need to recalculate the delay value since we used a pre-emptive negative
+ // delay value and the delay value is required for the final event checking. This
+ // property will ensure that this will happen after the RAF phase has passed.
+ if (options.duration == null && timings.transitionDuration > 0) {
+ flags.recalculateTimingStyles = flags.recalculateTimingStyles || isFirst;
+ }
+
+ maxDelayTime = maxDelay * ONE_SECOND;
+ maxDurationTime = maxDuration * ONE_SECOND;
+ if (!options.skipBlocking) {
+ flags.blockTransition = timings.transitionDuration > 0;
+ flags.blockKeyframeAnimation = timings.animationDuration > 0 &&
+ stagger.animationDelay > 0 &&
+ stagger.animationDuration === 0;
+ }
+
+ applyAnimationFromStyles(element, options);
+ if (!flags.blockTransition) {
+ blockTransitions(node, false);
+ }
+
+ applyBlocking(maxDuration);
+
+ // TODO(matsko): for 1.5 change this code to have an animator object for better debugging
+ return {
+ $$willAnimate: true,
+ end: endFn,
+ start: function() {
+ if (animationClosed) return;
+
+ runnerHost = {
+ end: endFn,
+ cancel: cancelFn,
+ resume: null, //this will be set during the start() phase
+ pause: null
+ };
+
+ runner = new $$AnimateRunner(runnerHost);
+
+ waitUntilQuiet(start);
+
+ // we don't have access to pause/resume the animation
+ // since it hasn't run yet. AnimateRunner will therefore
+ // set noop functions for resume and pause and they will
+ // later be overridden once the animation is triggered
+ return runner;
+ }
+ };
+
+ function endFn() {
+ close();
+ }
+
+ function cancelFn() {
+ close(true);
+ }
+
+ function close(rejected) { // jshint ignore:line
+ // if the promise has been called already then we shouldn't close
+ // the animation again
+ if (animationClosed || (animationCompleted && animationPaused)) return;
+ animationClosed = true;
+ animationPaused = false;
+
+ $$jqLite.removeClass(element, setupClasses);
+ $$jqLite.removeClass(element, activeClasses);
+
+ blockKeyframeAnimations(node, false);
+ blockTransitions(node, false);
+
+ forEach(temporaryStyles, function(entry) {
+ // There is only one way to remove inline style properties entirely from elements.
+ // By using `removeProperty` this works, but we need to convert camel-cased CSS
+ // styles down to hyphenated values.
+ node.style[entry[0]] = '';
+ });
+
+ applyAnimationClasses(element, options);
+ applyAnimationStyles(element, options);
+
+ // the reason why we have this option is to allow a synchronous closing callback
+ // that is fired as SOON as the animation ends (when the CSS is removed) or if
+ // the animation never takes off at all. A good example is a leave animation since
+ // the element must be removed just after the animation is over or else the element
+ // will appear on screen for one animation frame causing an overbearing flicker.
+ if (options.onDone) {
+ options.onDone();
+ }
+
+ // if the preparation function fails then the promise is not setup
+ if (runner) {
+ runner.complete(!rejected);
+ }
+ }
+
+ function applyBlocking(duration) {
+ if (flags.blockTransition) {
+ blockTransitions(node, duration);
+ }
+
+ if (flags.blockKeyframeAnimation) {
+ blockKeyframeAnimations(node, !!duration);
+ }
+ }
+
+ function closeAndReturnNoopAnimator() {
+ runner = new $$AnimateRunner({
+ end: endFn,
+ cancel: cancelFn
+ });
+
+ close();
+
+ return {
+ $$willAnimate: false,
+ start: function() {
+ return runner;
+ },
+ end: endFn
+ };
+ }
+
+ function start() {
+ if (animationClosed) return;
+
+ var startTime, events = [];
+
+ // even though we only pause keyframe animations here the pause flag
+ // will still happen when transitions are used. Only the transition will
+ // not be paused since that is not possible. If the animation ends when
+ // paused then it will not complete until unpaused or cancelled.
+ var playPause = function(playAnimation) {
+ if (!animationCompleted) {
+ animationPaused = !playAnimation;
+ if (timings.animationDuration) {
+ var value = blockKeyframeAnimations(node, animationPaused);
+ animationPaused
+ ? temporaryStyles.push(value)
+ : removeFromArray(temporaryStyles, value);
+ }
+ } else if (animationPaused && playAnimation) {
+ animationPaused = false;
+ close();
+ }
+ };
+
+ // checking the stagger duration prevents an accidently cascade of the CSS delay style
+ // being inherited from the parent. If the transition duration is zero then we can safely
+ // rely that the delay value is an intential stagger delay style.
+ var maxStagger = itemIndex > 0
+ && ((timings.transitionDuration && stagger.transitionDuration === 0) ||
+ (timings.animationDuration && stagger.animationDuration === 0))
+ && Math.max(stagger.animationDelay, stagger.transitionDelay);
+ if (maxStagger) {
+ $timeout(triggerAnimationStart,
+ Math.floor(maxStagger * itemIndex * ONE_SECOND),
+ false);
+ } else {
+ triggerAnimationStart();
+ }
+
+ // this will decorate the existing promise runner with pause/resume methods
+ runnerHost.resume = function() {
+ playPause(true);
+ };
+
+ runnerHost.pause = function() {
+ playPause(false);
+ };
+
+ function triggerAnimationStart() {
+ // just incase a stagger animation kicks in when the animation
+ // itself was cancelled entirely
+ if (animationClosed) return;
+
+ applyBlocking(false);
+
+ forEach(temporaryStyles, function(entry) {
+ var key = entry[0];
+ var value = entry[1];
+ node.style[key] = value;
+ });
+
+ applyAnimationClasses(element, options);
+ $$jqLite.addClass(element, activeClasses);
+
+ if (flags.recalculateTimingStyles) {
+ fullClassName = node.className + ' ' + setupClasses;
+ cacheKey = gcsHashFn(node, fullClassName);
+
+ timings = computeTimings(node, fullClassName, cacheKey);
+ relativeDelay = timings.maxDelay;
+ maxDelay = Math.max(relativeDelay, 0);
+ maxDuration = timings.maxDuration;
+
+ if (maxDuration === 0) {
+ close();
+ return;
+ }
+
+ flags.hasTransitions = timings.transitionDuration > 0;
+ flags.hasAnimations = timings.animationDuration > 0;
+ }
+
+ if (flags.applyTransitionDelay || flags.applyAnimationDelay) {
+ relativeDelay = typeof options.delay !== "boolean" && truthyTimingValue(options.delay)
+ ? parseFloat(options.delay)
+ : relativeDelay;
+
+ maxDelay = Math.max(relativeDelay, 0);
+
+ var delayStyle;
+ if (flags.applyTransitionDelay) {
+ timings.transitionDelay = relativeDelay;
+ delayStyle = getCssDelayStyle(relativeDelay);
+ temporaryStyles.push(delayStyle);
+ node.style[delayStyle[0]] = delayStyle[1];
+ }
+
+ if (flags.applyAnimationDelay) {
+ timings.animationDelay = relativeDelay;
+ delayStyle = getCssDelayStyle(relativeDelay, true);
+ temporaryStyles.push(delayStyle);
+ node.style[delayStyle[0]] = delayStyle[1];
+ }
+ }
+
+ maxDelayTime = maxDelay * ONE_SECOND;
+ maxDurationTime = maxDuration * ONE_SECOND;
+
+ if (options.easing) {
+ var easeProp, easeVal = options.easing;
+ if (flags.hasTransitions) {
+ easeProp = TRANSITION_PROP + TIMING_KEY;
+ temporaryStyles.push([easeProp, easeVal]);
+ node.style[easeProp] = easeVal;
+ }
+ if (flags.hasAnimations) {
+ easeProp = ANIMATION_PROP + TIMING_KEY;
+ temporaryStyles.push([easeProp, easeVal]);
+ node.style[easeProp] = easeVal;
+ }
+ }
+
+ if (timings.transitionDuration) {
+ events.push(TRANSITIONEND_EVENT);
+ }
+
+ if (timings.animationDuration) {
+ events.push(ANIMATIONEND_EVENT);
+ }
+
+ startTime = Date.now();
+ element.on(events.join(' '), onAnimationProgress);
+ $timeout(onAnimationExpired, maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime);
+
+ applyAnimationToStyles(element, options);
+ }
+
+ function onAnimationExpired() {
+ // although an expired animation is a failed animation, getting to
+ // this outcome is very easy if the CSS code screws up. Therefore we
+ // should still continue normally as if the animation completed correctly.
+ close();
+ }
+
+ function onAnimationProgress(event) {
+ event.stopPropagation();
+ var ev = event.originalEvent || event;
+ var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now();
+
+ /* Firefox (or possibly just Gecko) likes to not round values up
+ * when a ms measurement is used for the animation */
+ var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));
+
+ /* $manualTimeStamp is a mocked timeStamp value which is set
+ * within browserTrigger(). This is only here so that tests can
+ * mock animations properly. Real events fallback to event.timeStamp,
+ * or, if they don't, then a timeStamp is automatically created for them.
+ * We're checking to see if the timeStamp surpasses the expected delay,
+ * but we're using elapsedTime instead of the timeStamp on the 2nd
+ * pre-condition since animations sometimes close off early */
+ if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {
+ // we set this flag to ensure that if the transition is paused then, when resumed,
+ // the animation will automatically close itself since transitions cannot be paused.
+ animationCompleted = true;
+ close();
+ }
+ }
+ }
+ }
+ }];
+}];
+
+var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationProvider) {
+ $$animationProvider.drivers.push('$$animateCssDriver');
+
+ var NG_ANIMATE_SHIM_CLASS_NAME = 'ng-animate-shim';
+ var NG_ANIMATE_ANCHOR_CLASS_NAME = 'ng-anchor';
+
+ var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out';
+ var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in';
+
+ this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$document', '$sniffer',
+ function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $document, $sniffer) {
+
+ // only browsers that support these properties can render animations
+ if (!$sniffer.animations && !$sniffer.transitions) return noop;
+
+ var bodyNode = getDomNode($document).body;
+ var rootNode = getDomNode($rootElement);
+
+ var rootBodyElement = jqLite(bodyNode.parentNode === rootNode ? bodyNode : rootNode);
+
+ return function initDriverFn(animationDetails) {
+ return animationDetails.from && animationDetails.to
+ ? prepareFromToAnchorAnimation(animationDetails.from,
+ animationDetails.to,
+ animationDetails.classes,
+ animationDetails.anchors)
+ : prepareRegularAnimation(animationDetails);
+ };
+
+ function filterCssClasses(classes) {
+ //remove all the `ng-` stuff
+ return classes.replace(/\bng-\S+\b/g, '');
+ }
+
+ function getUniqueValues(a, b) {
+ if (isString(a)) a = a.split(' ');
+ if (isString(b)) b = b.split(' ');
+ return a.filter(function(val) {
+ return b.indexOf(val) === -1;
+ }).join(' ');
+ }
+
+ function prepareAnchoredAnimation(classes, outAnchor, inAnchor) {
+ var clone = jqLite(getDomNode(outAnchor).cloneNode(true));
+ var startingClasses = filterCssClasses(getClassVal(clone));
+
+ outAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);
+ inAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);
+
+ clone.addClass(NG_ANIMATE_ANCHOR_CLASS_NAME);
+
+ rootBodyElement.append(clone);
+
+ var animatorIn, animatorOut = prepareOutAnimation();
+
+ // the user may not end up using the `out` animation and
+ // only making use of the `in` animation or vice-versa.
+ // In either case we should allow this and not assume the
+ // animation is over unless both animations are not used.
+ if (!animatorOut) {
+ animatorIn = prepareInAnimation();
+ if (!animatorIn) {
+ return end();
+ }
+ }
+
+ var startingAnimator = animatorOut || animatorIn;
+
+ return {
+ start: function() {
+ var runner;
+
+ var currentAnimation = startingAnimator.start();
+ currentAnimation.done(function() {
+ currentAnimation = null;
+ if (!animatorIn) {
+ animatorIn = prepareInAnimation();
+ if (animatorIn) {
+ currentAnimation = animatorIn.start();
+ currentAnimation.done(function() {
+ currentAnimation = null;
+ end();
+ runner.complete();
+ });
+ return currentAnimation;
+ }
+ }
+ // in the event that there is no `in` animation
+ end();
+ runner.complete();
+ });
+
+ runner = new $$AnimateRunner({
+ end: endFn,
+ cancel: endFn
+ });
+
+ return runner;
+
+ function endFn() {
+ if (currentAnimation) {
+ currentAnimation.end();
+ }
+ }
+ }
+ };
+
+ function calculateAnchorStyles(anchor) {
+ var styles = {};
+
+ var coords = getDomNode(anchor).getBoundingClientRect();
+
+ // we iterate directly since safari messes up and doesn't return
+ // all the keys for the coods object when iterated
+ forEach(['width','height','top','left'], function(key) {
+ var value = coords[key];
+ switch (key) {
+ case 'top':
+ value += bodyNode.scrollTop;
+ break;
+ case 'left':
+ value += bodyNode.scrollLeft;
+ break;
+ }
+ styles[key] = Math.floor(value) + 'px';
+ });
+ return styles;
+ }
+
+ function prepareOutAnimation() {
+ var animator = $animateCss(clone, {
+ addClass: NG_OUT_ANCHOR_CLASS_NAME,
+ delay: true,
+ from: calculateAnchorStyles(outAnchor)
+ });
+
+ // read the comment within `prepareRegularAnimation` to understand
+ // why this check is necessary
+ return animator.$$willAnimate ? animator : null;
+ }
+
+ function getClassVal(element) {
+ return element.attr('class') || '';
+ }
+
+ function prepareInAnimation() {
+ var endingClasses = filterCssClasses(getClassVal(inAnchor));
+ var toAdd = getUniqueValues(endingClasses, startingClasses);
+ var toRemove = getUniqueValues(startingClasses, endingClasses);
+
+ var animator = $animateCss(clone, {
+ to: calculateAnchorStyles(inAnchor),
+ addClass: NG_IN_ANCHOR_CLASS_NAME + ' ' + toAdd,
+ removeClass: NG_OUT_ANCHOR_CLASS_NAME + ' ' + toRemove,
+ delay: true
+ });
+
+ // read the comment within `prepareRegularAnimation` to understand
+ // why this check is necessary
+ return animator.$$willAnimate ? animator : null;
+ }
+
+ function end() {
+ clone.remove();
+ outAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);
+ inAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);
+ }
+ }
+
+ function prepareFromToAnchorAnimation(from, to, classes, anchors) {
+ var fromAnimation = prepareRegularAnimation(from);
+ var toAnimation = prepareRegularAnimation(to);
+
+ var anchorAnimations = [];
+ forEach(anchors, function(anchor) {
+ var outElement = anchor['out'];
+ var inElement = anchor['in'];
+ var animator = prepareAnchoredAnimation(classes, outElement, inElement);
+ if (animator) {
+ anchorAnimations.push(animator);
+ }
+ });
+
+ // no point in doing anything when there are no elements to animate
+ if (!fromAnimation && !toAnimation && anchorAnimations.length === 0) return;
+
+ return {
+ start: function() {
+ var animationRunners = [];
+
+ if (fromAnimation) {
+ animationRunners.push(fromAnimation.start());
+ }
+
+ if (toAnimation) {
+ animationRunners.push(toAnimation.start());
+ }
+
+ forEach(anchorAnimations, function(animation) {
+ animationRunners.push(animation.start());
+ });
+
+ var runner = new $$AnimateRunner({
+ end: endFn,
+ cancel: endFn // CSS-driven animations cannot be cancelled, only ended
+ });
+
+ $$AnimateRunner.all(animationRunners, function(status) {
+ runner.complete(status);
+ });
+
+ return runner;
+
+ function endFn() {
+ forEach(animationRunners, function(runner) {
+ runner.end();
+ });
+ }
+ }
+ };
+ }
+
+ function prepareRegularAnimation(animationDetails) {
+ var element = animationDetails.element;
+ var options = animationDetails.options || {};
+
+ if (animationDetails.structural) {
+ // structural animations ensure that the CSS classes are always applied
+ // before the detection starts.
+ options.structural = options.applyClassesEarly = true;
+
+ // we special case the leave animation since we want to ensure that
+ // the element is removed as soon as the animation is over. Otherwise
+ // a flicker might appear or the element may not be removed at all
+ options.event = animationDetails.event;
+ if (options.event === 'leave') {
+ options.onDone = options.domOperation;
+ }
+ } else {
+ options.event = null;
+ }
+
+ var animator = $animateCss(element, options);
+
+ // the driver lookup code inside of $$animation attempts to spawn a
+ // driver one by one until a driver returns a.$$willAnimate animator object.
+ // $animateCss will always return an object, however, it will pass in
+ // a flag as a hint as to whether an animation was detected or not
+ return animator.$$willAnimate ? animator : null;
+ }
+ }];
+}];
+
+// TODO(matsko): use caching here to speed things up for detection
+// TODO(matsko): add documentation
+// by the time...
+
+var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
+ this.$get = ['$injector', '$$AnimateRunner', '$$rAFMutex', '$$jqLite',
+ function($injector, $$AnimateRunner, $$rAFMutex, $$jqLite) {
+
+ var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+ // $animateJs(element, 'enter');
+ return function(element, event, classes, options) {
+ // the `classes` argument is optional and if it is not used
+ // then the classes will be resolved from the element's className
+ // property as well as options.addClass/options.removeClass.
+ if (arguments.length === 3 && isObject(classes)) {
+ options = classes;
+ classes = null;
+ }
+
+ options = prepareAnimationOptions(options);
+ if (!classes) {
+ classes = element.attr('class') || '';
+ if (options.addClass) {
+ classes += ' ' + options.addClass;
+ }
+ if (options.removeClass) {
+ classes += ' ' + options.removeClass;
+ }
+ }
+
+ var classesToAdd = options.addClass;
+ var classesToRemove = options.removeClass;
+
+ // the lookupAnimations function returns a series of animation objects that are
+ // matched up with one or more of the CSS classes. These animation objects are
+ // defined via the module.animation factory function. If nothing is detected then
+ // we don't return anything which then makes $animation query the next driver.
+ var animations = lookupAnimations(classes);
+ var before, after;
+ if (animations.length) {
+ var afterFn, beforeFn;
+ if (event == 'leave') {
+ beforeFn = 'leave';
+ afterFn = 'afterLeave'; // TODO(matsko): get rid of this
+ } else {
+ beforeFn = 'before' + event.charAt(0).toUpperCase() + event.substr(1);
+ afterFn = event;
+ }
+
+ if (event !== 'enter' && event !== 'move') {
+ before = packageAnimations(element, event, options, animations, beforeFn);
+ }
+ after = packageAnimations(element, event, options, animations, afterFn);
+ }
+
+ // no matching animations
+ if (!before && !after) return;
+
+ function applyOptions() {
+ options.domOperation();
+ applyAnimationClasses(element, options);
+ }
+
+ return {
+ start: function() {
+ var closeActiveAnimations;
+ var chain = [];
+
+ if (before) {
+ chain.push(function(fn) {
+ closeActiveAnimations = before(fn);
+ });
+ }
+
+ if (chain.length) {
+ chain.push(function(fn) {
+ applyOptions();
+ fn(true);
+ });
+ } else {
+ applyOptions();
+ }
+
+ if (after) {
+ chain.push(function(fn) {
+ closeActiveAnimations = after(fn);
+ });
+ }
+
+ var animationClosed = false;
+ var runner = new $$AnimateRunner({
+ end: function() {
+ endAnimations();
+ },
+ cancel: function() {
+ endAnimations(true);
+ }
+ });
+
+ $$AnimateRunner.chain(chain, onComplete);
+ return runner;
+
+ function onComplete(success) {
+ animationClosed = true;
+ applyOptions();
+ applyAnimationStyles(element, options);
+ runner.complete(success);
+ }
+
+ function endAnimations(cancelled) {
+ if (!animationClosed) {
+ (closeActiveAnimations || noop)(cancelled);
+ onComplete(cancelled);
+ }
+ }
+ }
+ };
+
+ function executeAnimationFn(fn, element, event, options, onDone) {
+ var args;
+ switch (event) {
+ case 'animate':
+ args = [element, options.from, options.to, onDone];
+ break;
+
+ case 'setClass':
+ args = [element, classesToAdd, classesToRemove, onDone];
+ break;
+
+ case 'addClass':
+ args = [element, classesToAdd, onDone];
+ break;
+
+ case 'removeClass':
+ args = [element, classesToRemove, onDone];
+ break;
+
+ default:
+ args = [element, onDone];
+ break;
+ }
+
+ args.push(options);
+
+ var value = fn.apply(fn, args);
+ if (value) {
+ if (isFunction(value.start)) {
+ value = value.start();
+ }
+
+ if (value instanceof $$AnimateRunner) {
+ value.done(onDone);
+ } else if (isFunction(value)) {
+ // optional onEnd / onCancel callback
+ return value;
+ }
+ }
+
+ return noop;
+ }
+
+ function groupEventedAnimations(element, event, options, animations, fnName) {
+ var operations = [];
+ forEach(animations, function(ani) {
+ var animation = ani[fnName];
+ if (!animation) return;
+
+ // note that all of these animations will run in parallel
+ operations.push(function() {
+ var runner;
+ var endProgressCb;
+
+ var resolved = false;
+ var onAnimationComplete = function(rejected) {
+ if (!resolved) {
+ resolved = true;
+ (endProgressCb || noop)(rejected);
+ runner.complete(!rejected);
+ }
+ };
+
+ runner = new $$AnimateRunner({
+ end: function() {
+ onAnimationComplete();
+ },
+ cancel: function() {
+ onAnimationComplete(true);
+ }
+ });
+
+ endProgressCb = executeAnimationFn(animation, element, event, options, function(result) {
+ var cancelled = result === false;
+ onAnimationComplete(cancelled);
+ });
+
+ return runner;
+ });
+ });
+
+ return operations;
+ }
+
+ function packageAnimations(element, event, options, animations, fnName) {
+ var operations = groupEventedAnimations(element, event, options, animations, fnName);
+ if (operations.length === 0) {
+ var a,b;
+ if (fnName === 'beforeSetClass') {
+ a = groupEventedAnimations(element, 'removeClass', options, animations, 'beforeRemoveClass');
+ b = groupEventedAnimations(element, 'addClass', options, animations, 'beforeAddClass');
+ } else if (fnName === 'setClass') {
+ a = groupEventedAnimations(element, 'removeClass', options, animations, 'removeClass');
+ b = groupEventedAnimations(element, 'addClass', options, animations, 'addClass');
+ }
+
+ if (a) {
+ operations = operations.concat(a);
+ }
+ if (b) {
+ operations = operations.concat(b);
+ }
+ }
+
+ if (operations.length === 0) return;
+
+ // TODO(matsko): add documentation
+ return function startAnimation(callback) {
+ var runners = [];
+ if (operations.length) {
+ forEach(operations, function(animateFn) {
+ runners.push(animateFn());
+ });
+ }
+
+ runners.length ? $$AnimateRunner.all(runners, callback) : callback();
+
+ return function endFn(reject) {
+ forEach(runners, function(runner) {
+ reject ? runner.cancel() : runner.end();
+ });
+ };
+ };
+ }
+ };
+
+ function lookupAnimations(classes) {
+ classes = isArray(classes) ? classes : classes.split(' ');
+ var matches = [], flagMap = {};
+ for (var i=0; i < classes.length; i++) {
+ var klass = classes[i],
+ animationFactory = $animateProvider.$$registeredAnimations[klass];
+ if (animationFactory && !flagMap[klass]) {
+ matches.push($injector.get(animationFactory));
+ flagMap[klass] = true;
+ }
+ }
+ return matches;
+ }
+ }];
+}];
+
+var $$AnimateJsDriverProvider = ['$$animationProvider', function($$animationProvider) {
+ $$animationProvider.drivers.push('$$animateJsDriver');
+ this.$get = ['$$animateJs', '$$AnimateRunner', function($$animateJs, $$AnimateRunner) {
+ return function initDriverFn(animationDetails) {
+ if (animationDetails.from && animationDetails.to) {
+ var fromAnimation = prepareAnimation(animationDetails.from);
+ var toAnimation = prepareAnimation(animationDetails.to);
+ if (!fromAnimation && !toAnimation) return;
+
+ return {
+ start: function() {
+ var animationRunners = [];
+
+ if (fromAnimation) {
+ animationRunners.push(fromAnimation.start());
+ }
+
+ if (toAnimation) {
+ animationRunners.push(toAnimation.start());
+ }
+
+ $$AnimateRunner.all(animationRunners, done);
+
+ var runner = new $$AnimateRunner({
+ end: endFnFactory(),
+ cancel: endFnFactory()
+ });
+
+ return runner;
+
+ function endFnFactory() {
+ return function() {
+ forEach(animationRunners, function(runner) {
+ // at this point we cannot cancel animations for groups just yet. 1.5+
+ runner.end();
+ });
+ };
+ }
+
+ function done(status) {
+ runner.complete(status);
+ }
+ }
+ };
+ } else {
+ return prepareAnimation(animationDetails);
+ }
+ };
+
+ function prepareAnimation(animationDetails) {
+ // TODO(matsko): make sure to check for grouped animations and delegate down to normal animations
+ var element = animationDetails.element;
+ var event = animationDetails.event;
+ var options = animationDetails.options;
+ var classes = animationDetails.classes;
+ return $$animateJs(element, event, classes, options);
+ }
+ }];
+}];
+
+var NG_ANIMATE_ATTR_NAME = 'data-ng-animate';
+var NG_ANIMATE_PIN_DATA = '$ngAnimatePin';
+var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
+ var PRE_DIGEST_STATE = 1;
+ var RUNNING_STATE = 2;
+
+ var rules = this.rules = {
+ skip: [],
+ cancel: [],
+ join: []
+ };
+
+ function isAllowed(ruleType, element, currentAnimation, previousAnimation) {
+ return rules[ruleType].some(function(fn) {
+ return fn(element, currentAnimation, previousAnimation);
+ });
+ }
+
+ function hasAnimationClasses(options, and) {
+ options = options || {};
+ var a = (options.addClass || '').length > 0;
+ var b = (options.removeClass || '').length > 0;
+ return and ? a && b : a || b;
+ }
+
+ rules.join.push(function(element, newAnimation, currentAnimation) {
+ // if the new animation is class-based then we can just tack that on
+ return !newAnimation.structural && hasAnimationClasses(newAnimation.options);
+ });
+
+ rules.skip.push(function(element, newAnimation, currentAnimation) {
+ // there is no need to animate anything if no classes are being added and
+ // there is no structural animation that will be triggered
+ return !newAnimation.structural && !hasAnimationClasses(newAnimation.options);
+ });
+
+ rules.skip.push(function(element, newAnimation, currentAnimation) {
+ // why should we trigger a new structural animation if the element will
+ // be removed from the DOM anyway?
+ return currentAnimation.event == 'leave' && newAnimation.structural;
+ });
+
+ rules.skip.push(function(element, newAnimation, currentAnimation) {
+ // if there is a current animation then skip the class-based animation
+ return currentAnimation.structural && !newAnimation.structural;
+ });
+
+ rules.cancel.push(function(element, newAnimation, currentAnimation) {
+ // there can never be two structural animations running at the same time
+ return currentAnimation.structural && newAnimation.structural;
+ });
+
+ rules.cancel.push(function(element, newAnimation, currentAnimation) {
+ // if the previous animation is already running, but the new animation will
+ // be triggered, but the new animation is structural
+ return currentAnimation.state === RUNNING_STATE && newAnimation.structural;
+ });
+
+ rules.cancel.push(function(element, newAnimation, currentAnimation) {
+ var nO = newAnimation.options;
+ var cO = currentAnimation.options;
+
+ // if the exact same CSS class is added/removed then it's safe to cancel it
+ return (nO.addClass && nO.addClass === cO.removeClass) || (nO.removeClass && nO.removeClass === cO.addClass);
+ });
+
+ this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap',
+ '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite',
+ function($$rAF, $rootScope, $rootElement, $document, $$HashMap,
+ $$animation, $$AnimateRunner, $templateRequest, $$jqLite) {
+
+ var activeAnimationsLookup = new $$HashMap();
+ var disabledElementsLookup = new $$HashMap();
+
+ var animationsEnabled = null;
+
+ // Wait until all directive and route-related templates are downloaded and
+ // compiled. The $templateRequest.totalPendingRequests variable keeps track of
+ // all of the remote templates being currently downloaded. If there are no
+ // templates currently downloading then the watcher will still fire anyway.
+ var deregisterWatch = $rootScope.$watch(
+ function() { return $templateRequest.totalPendingRequests === 0; },
+ function(isEmpty) {
+ if (!isEmpty) return;
+ deregisterWatch();
+
+ // Now that all templates have been downloaded, $animate will wait until
+ // the post digest queue is empty before enabling animations. By having two
+ // calls to $postDigest calls we can ensure that the flag is enabled at the
+ // very end of the post digest queue. Since all of the animations in $animate
+ // use $postDigest, it's important that the code below executes at the end.
+ // This basically means that the page is fully downloaded and compiled before
+ // any animations are triggered.
+ $rootScope.$$postDigest(function() {
+ $rootScope.$$postDigest(function() {
+ // we check for null directly in the event that the application already called
+ // .enabled() with whatever arguments that it provided it with
+ if (animationsEnabled === null) {
+ animationsEnabled = true;
+ }
+ });
+ });
+ }
+ );
+
+ var bodyElement = jqLite($document[0].body);
+
+ var callbackRegistry = {};
+
+ // remember that the classNameFilter is set during the provider/config
+ // stage therefore we can optimize here and setup a helper function
+ var classNameFilter = $animateProvider.classNameFilter();
+ var isAnimatableClassName = !classNameFilter
+ ? function() { return true; }
+ : function(className) {
+ return classNameFilter.test(className);
+ };
+
+ var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
+ function normalizeAnimationOptions(element, options) {
+ return mergeAnimationOptions(element, options, {});
+ }
+
+ function findCallbacks(element, event) {
+ var targetNode = getDomNode(element);
+
+ var matches = [];
+ var entries = callbackRegistry[event];
+ if (entries) {
+ forEach(entries, function(entry) {
+ if (entry.node.contains(targetNode)) {
+ matches.push(entry.callback);
+ }
+ });
+ }
+
+ return matches;
+ }
+
+ function triggerCallback(event, element, phase, data) {
+ $$rAF(function() {
+ forEach(findCallbacks(element, event), function(callback) {
+ callback(element, phase, data);
+ });
+ });
+ }
+
+ return {
+ on: function(event, container, callback) {
+ var node = extractElementNode(container);
+ callbackRegistry[event] = callbackRegistry[event] || [];
+ callbackRegistry[event].push({
+ node: node,
+ callback: callback
+ });
+ },
+
+ off: function(event, container, callback) {
+ var entries = callbackRegistry[event];
+ if (!entries) return;
+
+ callbackRegistry[event] = arguments.length === 1
+ ? null
+ : filterFromRegistry(entries, container, callback);
+
+ function filterFromRegistry(list, matchContainer, matchCallback) {
+ var containerNode = extractElementNode(matchContainer);
+ return list.filter(function(entry) {
+ var isMatch = entry.node === containerNode &&
+ (!matchCallback || entry.callback === matchCallback);
+ return !isMatch;
+ });
+ }
+ },
+
+ pin: function(element, parentElement) {
+ assertArg(isElement(element), 'element', 'not an element');
+ assertArg(isElement(parentElement), 'parentElement', 'not an element');
+ element.data(NG_ANIMATE_PIN_DATA, parentElement);
+ },
+
+ push: function(element, event, options, domOperation) {
+ options = options || {};
+ options.domOperation = domOperation;
+ return queueAnimation(element, event, options);
+ },
+
+ // this method has four signatures:
+ // () - global getter
+ // (bool) - global setter
+ // (element) - element getter
+ // (element, bool) - element setter
+ enabled: function(element, bool) {
+ var argCount = arguments.length;
+
+ if (argCount === 0) {
+ // () - Global getter
+ bool = !!animationsEnabled;
+ } else {
+ var hasElement = isElement(element);
+
+ if (!hasElement) {
+ // (bool) - Global setter
+ bool = animationsEnabled = !!element;
+ } else {
+ var node = getDomNode(element);
+ var recordExists = disabledElementsLookup.get(node);
+
+ if (argCount === 1) {
+ // (element) - Element getter
+ bool = !recordExists;
+ } else {
+ // (element, bool) - Element setter
+ bool = !!bool;
+ if (!bool) {
+ disabledElementsLookup.put(node, true);
+ } else if (recordExists) {
+ disabledElementsLookup.remove(node);
+ }
+ }
+ }
+ }
+
+ return bool;
+ }
+ };
+
+ function queueAnimation(element, event, options) {
+ var node, parent;
+ element = stripCommentsFromElement(element);
+ if (element) {
+ node = getDomNode(element);
+ parent = element.parent();
+ }
+
+ options = prepareAnimationOptions(options);
+
+ // we create a fake runner with a working promise.
+ // These methods will become available after the digest has passed
+ var runner = new $$AnimateRunner();
+
+ // there are situations where a directive issues an animation for
+ // a jqLite wrapper that contains only comment nodes... If this
+ // happens then there is no way we can perform an animation
+ if (!node) {
+ close();
+ return runner;
+ }
+
+ if (isArray(options.addClass)) {
+ options.addClass = options.addClass.join(' ');
+ }
+
+ if (isArray(options.removeClass)) {
+ options.removeClass = options.removeClass.join(' ');
+ }
+
+ if (options.from && !isObject(options.from)) {
+ options.from = null;
+ }
+
+ if (options.to && !isObject(options.to)) {
+ options.to = null;
+ }
+
+ var className = [node.className, options.addClass, options.removeClass].join(' ');
+ if (!isAnimatableClassName(className)) {
+ close();
+ return runner;
+ }
+
+ var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;
+
+ // this is a hard disable of all animations for the application or on
+ // the element itself, therefore there is no need to continue further
+ // past this point if not enabled
+ var skipAnimations = !animationsEnabled || disabledElementsLookup.get(node);
+ var existingAnimation = (!skipAnimations && activeAnimationsLookup.get(node)) || {};
+ var hasExistingAnimation = !!existingAnimation.state;
+
+ // there is no point in traversing the same collection of parent ancestors if a followup
+ // animation will be run on the same element that already did all that checking work
+ if (!skipAnimations && (!hasExistingAnimation || existingAnimation.state != PRE_DIGEST_STATE)) {
+ skipAnimations = !areAnimationsAllowed(element, parent, event);
+ }
+
+ if (skipAnimations) {
+ close();
+ return runner;
+ }
+
+ if (isStructural) {
+ closeChildAnimations(element);
+ }
+
+ var newAnimation = {
+ structural: isStructural,
+ element: element,
+ event: event,
+ close: close,
+ options: options,
+ runner: runner
+ };
+
+ if (hasExistingAnimation) {
+ var skipAnimationFlag = isAllowed('skip', element, newAnimation, existingAnimation);
+ if (skipAnimationFlag) {
+ if (existingAnimation.state === RUNNING_STATE) {
+ close();
+ return runner;
+ } else {
+ mergeAnimationOptions(element, existingAnimation.options, options);
+ return existingAnimation.runner;
+ }
+ }
+
+ var cancelAnimationFlag = isAllowed('cancel', element, newAnimation, existingAnimation);
+ if (cancelAnimationFlag) {
+ if (existingAnimation.state === RUNNING_STATE) {
+ // this will end the animation right away and it is safe
+ // to do so since the animation is already running and the
+ // runner callback code will run in async
+ existingAnimation.runner.end();
+ } else if (existingAnimation.structural) {
+ // this means that the animation is queued into a digest, but
+ // hasn't started yet. Therefore it is safe to run the close
+ // method which will call the runner methods in async.
+ existingAnimation.close();
+ } else {
+ // this will merge the existing animation options into this new follow-up animation
+ mergeAnimationOptions(element, newAnimation.options, existingAnimation.options);
+ }
+ } else {
+ // a joined animation means that this animation will take over the existing one
+ // so an example would involve a leave animation taking over an enter. Then when
+ // the postDigest kicks in the enter will be ignored.
+ var joinAnimationFlag = isAllowed('join', element, newAnimation, existingAnimation);
+ if (joinAnimationFlag) {
+ if (existingAnimation.state === RUNNING_STATE) {
+ normalizeAnimationOptions(element, options);
+ } else {
+ event = newAnimation.event = existingAnimation.event;
+ options = mergeAnimationOptions(element, existingAnimation.options, newAnimation.options);
+ return runner;
+ }
+ }
+ }
+ } else {
+ // normalization in this case means that it removes redundant CSS classes that
+ // already exist (addClass) or do not exist (removeClass) on the element
+ normalizeAnimationOptions(element, options);
+ }
+
+ // when the options are merged and cleaned up we may end up not having to do
+ // an animation at all, therefore we should check this before issuing a post
+ // digest callback. Structural animations will always run no matter what.
+ var isValidAnimation = newAnimation.structural;
+ if (!isValidAnimation) {
+ // animate (from/to) can be quickly checked first, otherwise we check if any classes are present
+ isValidAnimation = (newAnimation.event === 'animate' && Object.keys(newAnimation.options.to || {}).length > 0)
+ || hasAnimationClasses(newAnimation.options);
+ }
+
+ if (!isValidAnimation) {
+ close();
+ clearElementAnimationState(element);
+ return runner;
+ }
+
+ if (isStructural) {
+ closeParentClassBasedAnimations(parent);
+ }
+
+ // the counter keeps track of cancelled animations
+ var counter = (existingAnimation.counter || 0) + 1;
+ newAnimation.counter = counter;
+
+ markElementAnimationState(element, PRE_DIGEST_STATE, newAnimation);
+
+ $rootScope.$$postDigest(function() {
+ var animationDetails = activeAnimationsLookup.get(node);
+ var animationCancelled = !animationDetails;
+ animationDetails = animationDetails || {};
+
+ // if addClass/removeClass is called before something like enter then the
+ // registered parent element may not be present. The code below will ensure
+ // that a final value for parent element is obtained
+ var parentElement = element.parent() || [];
+
+ // animate/structural/class-based animations all have requirements. Otherwise there
+ // is no point in performing an animation. The parent node must also be set.
+ var isValidAnimation = parentElement.length > 0
+ && (animationDetails.event === 'animate'
+ || animationDetails.structural
+ || hasAnimationClasses(animationDetails.options));
+
+ // this means that the previous animation was cancelled
+ // even if the follow-up animation is the same event
+ if (animationCancelled || animationDetails.counter !== counter || !isValidAnimation) {
+ // if another animation did not take over then we need
+ // to make sure that the domOperation and options are
+ // handled accordingly
+ if (animationCancelled) {
+ applyAnimationClasses(element, options);
+ applyAnimationStyles(element, options);
+ }
+
+ // if the event changed from something like enter to leave then we do
+ // it, otherwise if it's the same then the end result will be the same too
+ if (animationCancelled || (isStructural && animationDetails.event !== event)) {
+ options.domOperation();
+ runner.end();
+ }
+
+ // in the event that the element animation was not cancelled or a follow-up animation
+ // isn't allowed to animate from here then we need to clear the state of the element
+ // so that any future animations won't read the expired animation data.
+ if (!isValidAnimation) {
+ clearElementAnimationState(element);
+ }
+
+ return;
+ }
+
+ // this combined multiple class to addClass / removeClass into a setClass event
+ // so long as a structural event did not take over the animation
+ event = !animationDetails.structural && hasAnimationClasses(animationDetails.options, true)
+ ? 'setClass'
+ : animationDetails.event;
+
+ if (animationDetails.structural) {
+ closeParentClassBasedAnimations(parentElement);
+ }
+
+ markElementAnimationState(element, RUNNING_STATE);
+ var realRunner = $$animation(element, event, animationDetails.options);
+ realRunner.done(function(status) {
+ close(!status);
+ var animationDetails = activeAnimationsLookup.get(node);
+ if (animationDetails && animationDetails.counter === counter) {
+ clearElementAnimationState(getDomNode(element));
+ }
+ notifyProgress(runner, event, 'close', {});
+ });
+
+ // this will update the runner's flow-control events based on
+ // the `realRunner` object.
+ runner.setHost(realRunner);
+ notifyProgress(runner, event, 'start', {});
+ });
+
+ return runner;
+
+ function notifyProgress(runner, event, phase, data) {
+ triggerCallback(event, element, phase, data);
+ runner.progress(event, phase, data);
+ }
+
+ function close(reject) { // jshint ignore:line
+ applyAnimationClasses(element, options);
+ applyAnimationStyles(element, options);
+ options.domOperation();
+ runner.complete(!reject);
+ }
+ }
+
+ function closeChildAnimations(element) {
+ var node = getDomNode(element);
+ var children = node.querySelectorAll('[' + NG_ANIMATE_ATTR_NAME + ']');
+ forEach(children, function(child) {
+ var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME));
+ var animationDetails = activeAnimationsLookup.get(child);
+ switch (state) {
+ case RUNNING_STATE:
+ animationDetails.runner.end();
+ /* falls through */
+ case PRE_DIGEST_STATE:
+ if (animationDetails) {
+ activeAnimationsLookup.remove(child);
+ }
+ break;
+ }
+ });
+ }
+
+ function clearElementAnimationState(element) {
+ var node = getDomNode(element);
+ node.removeAttribute(NG_ANIMATE_ATTR_NAME);
+ activeAnimationsLookup.remove(node);
+ }
+
+ function isMatchingElement(nodeOrElmA, nodeOrElmB) {
+ return getDomNode(nodeOrElmA) === getDomNode(nodeOrElmB);
+ }
+
+ function closeParentClassBasedAnimations(startingElement) {
+ var parentNode = getDomNode(startingElement);
+ do {
+ if (!parentNode || parentNode.nodeType !== ELEMENT_NODE) break;
+
+ var animationDetails = activeAnimationsLookup.get(parentNode);
+ if (animationDetails) {
+ examineParentAnimation(parentNode, animationDetails);
+ }
+
+ parentNode = parentNode.parentNode;
+ } while (true);
+
+ // since animations are detected from CSS classes, we need to flush all parent
+ // class-based animations so that the parent classes are all present for child
+ // animations to properly function (otherwise any CSS selectors may not work)
+ function examineParentAnimation(node, animationDetails) {
+ // enter/leave/move always have priority
+ if (animationDetails.structural || !hasAnimationClasses(animationDetails.options)) return;
+
+ if (animationDetails.state === RUNNING_STATE) {
+ animationDetails.runner.end();
+ }
+ clearElementAnimationState(node);
+ }
+ }
+
+ function areAnimationsAllowed(element, parentElement, event) {
+ var bodyElementDetected = false;
+ var rootElementDetected = false;
+ var parentAnimationDetected = false;
+ var animateChildren;
+
+ var parentHost = element.data(NG_ANIMATE_PIN_DATA);
+ if (parentHost) {
+ parentElement = parentHost;
+ }
+
+ while (parentElement && parentElement.length) {
+ if (!rootElementDetected) {
+ // angular doesn't want to attempt to animate elements outside of the application
+ // therefore we need to ensure that the rootElement is an ancestor of the current element
+ rootElementDetected = isMatchingElement(parentElement, $rootElement);
+ }
+
+ var parentNode = parentElement[0];
+ if (parentNode.nodeType !== ELEMENT_NODE) {
+ // no point in inspecting the #document element
+ break;
+ }
+
+ var details = activeAnimationsLookup.get(parentNode) || {};
+ // either an enter, leave or move animation will commence
+ // therefore we can't allow any animations to take place
+ // but if a parent animation is class-based then that's ok
+ if (!parentAnimationDetected) {
+ parentAnimationDetected = details.structural || disabledElementsLookup.get(parentNode);
+ }
+
+ if (isUndefined(animateChildren) || animateChildren === true) {
+ var value = parentElement.data(NG_ANIMATE_CHILDREN_DATA);
+ if (isDefined(value)) {
+ animateChildren = value;
+ }
+ }
+
+ // there is no need to continue traversing at this point
+ if (parentAnimationDetected && animateChildren === false) break;
+
+ if (!rootElementDetected) {
+ // angular doesn't want to attempt to animate elements outside of the application
+ // therefore we need to ensure that the rootElement is an ancestor of the current element
+ rootElementDetected = isMatchingElement(parentElement, $rootElement);
+ if (!rootElementDetected) {
+ parentHost = parentElement.data(NG_ANIMATE_PIN_DATA);
+ if (parentHost) {
+ parentElement = parentHost;
+ }
+ }
+ }
+
+ if (!bodyElementDetected) {
+ // we also need to ensure that the element is or will be apart of the body element
+ // otherwise it is pointless to even issue an animation to be rendered
+ bodyElementDetected = isMatchingElement(parentElement, bodyElement);
+ }
+
+ parentElement = parentElement.parent();
+ }
+
+ var allowAnimation = !parentAnimationDetected || animateChildren;
+ return allowAnimation && rootElementDetected && bodyElementDetected;
+ }
+
+ function markElementAnimationState(element, state, details) {
+ details = details || {};
+ details.state = state;
+
+ var node = getDomNode(element);
+ node.setAttribute(NG_ANIMATE_ATTR_NAME, state);
+
+ var oldValue = activeAnimationsLookup.get(node);
+ var newValue = oldValue
+ ? extend(oldValue, details)
+ : details;
+ activeAnimationsLookup.put(node, newValue);
+ }
+ }];
+}];
+
+var $$rAFMutexFactory = ['$$rAF', function($$rAF) {
+ return function() {
+ var passed = false;
+ $$rAF(function() {
+ passed = true;
+ });
+ return function(fn) {
+ passed ? fn() : $$rAF(fn);
+ };
+ };
+}];
+
+var $$AnimateRunnerFactory = ['$q', '$$rAFMutex', function($q, $$rAFMutex) {
+ var INITIAL_STATE = 0;
+ var DONE_PENDING_STATE = 1;
+ var DONE_COMPLETE_STATE = 2;
+
+ AnimateRunner.chain = function(chain, callback) {
+ var index = 0;
+
+ next();
+ function next() {
+ if (index === chain.length) {
+ callback(true);
+ return;
+ }
+
+ chain[index](function(response) {
+ if (response === false) {
+ callback(false);
+ return;
+ }
+ index++;
+ next();
+ });
+ }
+ };
+
+ AnimateRunner.all = function(runners, callback) {
+ var count = 0;
+ var status = true;
+ forEach(runners, function(runner) {
+ runner.done(onProgress);
+ });
+
+ function onProgress(response) {
+ status = status && response;
+ if (++count === runners.length) {
+ callback(status);
+ }
+ }
+ };
+
+ function AnimateRunner(host) {
+ this.setHost(host);
+
+ this._doneCallbacks = [];
+ this._runInAnimationFrame = $$rAFMutex();
+ this._state = 0;
+ }
+
+ AnimateRunner.prototype = {
+ setHost: function(host) {
+ this.host = host || {};
+ },
+
+ done: function(fn) {
+ if (this._state === DONE_COMPLETE_STATE) {
+ fn();
+ } else {
+ this._doneCallbacks.push(fn);
+ }
+ },
+
+ progress: noop,
+
+ getPromise: function() {
+ if (!this.promise) {
+ var self = this;
+ this.promise = $q(function(resolve, reject) {
+ self.done(function(status) {
+ status === false ? reject() : resolve();
+ });
+ });
+ }
+ return this.promise;
+ },
+
+ then: function(resolveHandler, rejectHandler) {
+ return this.getPromise().then(resolveHandler, rejectHandler);
+ },
+
+ 'catch': function(handler) {
+ return this.getPromise()['catch'](handler);
+ },
+
+ 'finally': function(handler) {
+ return this.getPromise()['finally'](handler);
+ },
+
+ pause: function() {
+ if (this.host.pause) {
+ this.host.pause();
+ }
+ },
+
+ resume: function() {
+ if (this.host.resume) {
+ this.host.resume();
+ }
+ },
+
+ end: function() {
+ if (this.host.end) {
+ this.host.end();
+ }
+ this._resolve(true);
+ },
+
+ cancel: function() {
+ if (this.host.cancel) {
+ this.host.cancel();
+ }
+ this._resolve(false);
+ },
+
+ complete: function(response) {
+ var self = this;
+ if (self._state === INITIAL_STATE) {
+ self._state = DONE_PENDING_STATE;
+ self._runInAnimationFrame(function() {
+ self._resolve(response);
+ });
+ }
+ },
+
+ _resolve: function(response) {
+ if (this._state !== DONE_COMPLETE_STATE) {
+ forEach(this._doneCallbacks, function(fn) {
+ fn(response);
+ });
+ this._doneCallbacks.length = 0;
+ this._state = DONE_COMPLETE_STATE;
+ }
+ }
+ };
+
+ return AnimateRunner;
+}];
+
+var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
+ var NG_ANIMATE_REF_ATTR = 'ng-animate-ref';
+
+ var drivers = this.drivers = [];
+
+ var RUNNER_STORAGE_KEY = '$$animationRunner';
+
+ function setRunner(element, runner) {
+ element.data(RUNNER_STORAGE_KEY, runner);
+ }
+
+ function removeRunner(element) {
+ element.removeData(RUNNER_STORAGE_KEY);
+ }
+
+ function getRunner(element) {
+ return element.data(RUNNER_STORAGE_KEY);
+ }
+
+ this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$rAFScheduler',
+ function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$rAFScheduler) {
+
+ var animationQueue = [];
+ var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
+ var totalPendingClassBasedAnimations = 0;
+ var totalActiveClassBasedAnimations = 0;
+ var classBasedAnimationsQueue = [];
+
+ // TODO(matsko): document the signature in a better way
+ return function(element, event, options) {
+ options = prepareAnimationOptions(options);
+ var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;
+
+ // there is no animation at the current moment, however
+ // these runner methods will get later updated with the
+ // methods leading into the driver's end/cancel methods
+ // for now they just stop the animation from starting
+ var runner = new $$AnimateRunner({
+ end: function() { close(); },
+ cancel: function() { close(true); }
+ });
+
+ if (!drivers.length) {
+ close();
+ return runner;
+ }
+
+ setRunner(element, runner);
+
+ var classes = mergeClasses(element.attr('class'), mergeClasses(options.addClass, options.removeClass));
+ var tempClasses = options.tempClasses;
+ if (tempClasses) {
+ classes += ' ' + tempClasses;
+ options.tempClasses = null;
+ }
+
+ var classBasedIndex;
+ if (!isStructural) {
+ classBasedIndex = totalPendingClassBasedAnimations;
+ totalPendingClassBasedAnimations += 1;
+ }
+
+ animationQueue.push({
+ // this data is used by the postDigest code and passed into
+ // the driver step function
+ element: element,
+ classes: classes,
+ event: event,
+ classBasedIndex: classBasedIndex,
+ structural: isStructural,
+ options: options,
+ beforeStart: beforeStart,
+ close: close
+ });
+
+ element.on('$destroy', handleDestroyedElement);
+
+ // we only want there to be one function called within the post digest
+ // block. This way we can group animations for all the animations that
+ // were apart of the same postDigest flush call.
+ if (animationQueue.length > 1) return runner;
+
+ $rootScope.$$postDigest(function() {
+ totalActiveClassBasedAnimations = totalPendingClassBasedAnimations;
+ totalPendingClassBasedAnimations = 0;
+ classBasedAnimationsQueue.length = 0;
+
+ var animations = [];
+ forEach(animationQueue, function(entry) {
+ // the element was destroyed early on which removed the runner
+ // form its storage. This means we can't animate this element
+ // at all and it already has been closed due to destruction.
+ if (getRunner(entry.element)) {
+ animations.push(entry);
+ }
+ });
+
+ // now any future animations will be in another postDigest
+ animationQueue.length = 0;
+
+ forEach(groupAnimations(animations), function(animationEntry) {
+ if (animationEntry.structural) {
+ triggerAnimationStart();
+ } else {
+ classBasedAnimationsQueue.push({
+ node: getDomNode(animationEntry.element),
+ fn: triggerAnimationStart
+ });
+
+ if (animationEntry.classBasedIndex === totalActiveClassBasedAnimations - 1) {
+ // we need to sort each of the animations in order of parent to child
+ // relationships. This ensures that the child classes are applied at the
+ // right time.
+ classBasedAnimationsQueue = classBasedAnimationsQueue.sort(function(a,b) {
+ return b.node.contains(a.node);
+ }).map(function(entry) {
+ return entry.fn;
+ });
+
+ $$rAFScheduler(classBasedAnimationsQueue);
+ }
+ }
+
+ function triggerAnimationStart() {
+ // it's important that we apply the `ng-animate` CSS class and the
+ // temporary classes before we do any driver invoking since these
+ // CSS classes may be required for proper CSS detection.
+ animationEntry.beforeStart();
+
+ var startAnimationFn, closeFn = animationEntry.close;
+
+ // in the event that the element was removed before the digest runs or
+ // during the RAF sequencing then we should not trigger the animation.
+ var targetElement = animationEntry.anchors
+ ? (animationEntry.from.element || animationEntry.to.element)
+ : animationEntry.element;
+
+ if (getRunner(targetElement)) {
+ var operation = invokeFirstDriver(animationEntry);
+ if (operation) {
+ startAnimationFn = operation.start;
+ }
+ }
+
+ if (!startAnimationFn) {
+ closeFn();
+ } else {
+ var animationRunner = startAnimationFn();
+ animationRunner.done(function(status) {
+ closeFn(!status);
+ });
+ updateAnimationRunners(animationEntry, animationRunner);
+ }
+ }
+ });
+ });
+
+ return runner;
+
+ // TODO(matsko): change to reference nodes
+ function getAnchorNodes(node) {
+ var SELECTOR = '[' + NG_ANIMATE_REF_ATTR + ']';
+ var items = node.hasAttribute(NG_ANIMATE_REF_ATTR)
+ ? [node]
+ : node.querySelectorAll(SELECTOR);
+ var anchors = [];
+ forEach(items, function(node) {
+ var attr = node.getAttribute(NG_ANIMATE_REF_ATTR);
+ if (attr && attr.length) {
+ anchors.push(node);
+ }
+ });
+ return anchors;
+ }
+
+ function groupAnimations(animations) {
+ var preparedAnimations = [];
+ var refLookup = {};
+ forEach(animations, function(animation, index) {
+ var element = animation.element;
+ var node = getDomNode(element);
+ var event = animation.event;
+ var enterOrMove = ['enter', 'move'].indexOf(event) >= 0;
+ var anchorNodes = animation.structural ? getAnchorNodes(node) : [];
+
+ if (anchorNodes.length) {
+ var direction = enterOrMove ? 'to' : 'from';
+
+ forEach(anchorNodes, function(anchor) {
+ var key = anchor.getAttribute(NG_ANIMATE_REF_ATTR);
+ refLookup[key] = refLookup[key] || {};
+ refLookup[key][direction] = {
+ animationID: index,
+ element: jqLite(anchor)
+ };
+ });
+ } else {
+ preparedAnimations.push(animation);
+ }
+ });
+
+ var usedIndicesLookup = {};
+ var anchorGroups = {};
+ forEach(refLookup, function(operations, key) {
+ var from = operations.from;
+ var to = operations.to;
+
+ if (!from || !to) {
+ // only one of these is set therefore we can't have an
+ // anchor animation since all three pieces are required
+ var index = from ? from.animationID : to.animationID;
+ var indexKey = index.toString();
+ if (!usedIndicesLookup[indexKey]) {
+ usedIndicesLookup[indexKey] = true;
+ preparedAnimations.push(animations[index]);
+ }
+ return;
+ }
+
+ var fromAnimation = animations[from.animationID];
+ var toAnimation = animations[to.animationID];
+ var lookupKey = from.animationID.toString();
+ if (!anchorGroups[lookupKey]) {
+ var group = anchorGroups[lookupKey] = {
+ structural: true,
+ beforeStart: function() {
+ fromAnimation.beforeStart();
+ toAnimation.beforeStart();
+ },
+ close: function() {
+ fromAnimation.close();
+ toAnimation.close();
+ },
+ classes: cssClassesIntersection(fromAnimation.classes, toAnimation.classes),
+ from: fromAnimation,
+ to: toAnimation,
+ anchors: [] // TODO(matsko): change to reference nodes
+ };
+
+ // the anchor animations require that the from and to elements both have at least
+ // one shared CSS class which effictively marries the two elements together to use
+ // the same animation driver and to properly sequence the anchor animation.
+ if (group.classes.length) {
+ preparedAnimations.push(group);
+ } else {
+ preparedAnimations.push(fromAnimation);
+ preparedAnimations.push(toAnimation);
+ }
+ }
+
+ anchorGroups[lookupKey].anchors.push({
+ 'out': from.element, 'in': to.element
+ });
+ });
+
+ return preparedAnimations;
+ }
+
+ function cssClassesIntersection(a,b) {
+ a = a.split(' ');
+ b = b.split(' ');
+ var matches = [];
+
+ for (var i = 0; i < a.length; i++) {
+ var aa = a[i];
+ if (aa.substring(0,3) === 'ng-') continue;
+
+ for (var j = 0; j < b.length; j++) {
+ if (aa === b[j]) {
+ matches.push(aa);
+ break;
+ }
+ }
+ }
+
+ return matches.join(' ');
+ }
+
+ function invokeFirstDriver(animationDetails) {
+ // we loop in reverse order since the more general drivers (like CSS and JS)
+ // may attempt more elements, but custom drivers are more particular
+ for (var i = drivers.length - 1; i >= 0; i--) {
+ var driverName = drivers[i];
+ if (!$injector.has(driverName)) continue; // TODO(matsko): remove this check
+
+ var factory = $injector.get(driverName);
+ var driver = factory(animationDetails);
+ if (driver) {
+ return driver;
+ }
+ }
+ }
+
+ function beforeStart() {
+ element.addClass(NG_ANIMATE_CLASSNAME);
+ if (tempClasses) {
+ $$jqLite.addClass(element, tempClasses);
+ }
+ }
+
+ function updateAnimationRunners(animation, newRunner) {
+ if (animation.from && animation.to) {
+ update(animation.from.element);
+ update(animation.to.element);
+ } else {
+ update(animation.element);
+ }
+
+ function update(element) {
+ getRunner(element).setHost(newRunner);
+ }
+ }
+
+ function handleDestroyedElement() {
+ var runner = getRunner(element);
+ if (runner && (event !== 'leave' || !options.$$domOperationFired)) {
+ runner.end();
+ }
+ }
+
+ function close(rejected) { // jshint ignore:line
+ element.off('$destroy', handleDestroyedElement);
+ removeRunner(element);
+
+ applyAnimationClasses(element, options);
+ applyAnimationStyles(element, options);
+ options.domOperation();
+
+ if (tempClasses) {
+ $$jqLite.removeClass(element, tempClasses);
+ }
+
+ element.removeClass(NG_ANIMATE_CLASSNAME);
+ runner.complete(!rejected);
+ }
+ };
+ }];
+}];
+
+/* global angularAnimateModule: true,
+
+ $$rAFMutexFactory,
+ $$rAFSchedulerFactory,
+ $$AnimateChildrenDirective,
+ $$AnimateRunnerFactory,
+ $$AnimateQueueProvider,
+ $$AnimationProvider,
+ $AnimateCssProvider,
+ $$AnimateCssDriverProvider,
+ $$AnimateJsProvider,
+ $$AnimateJsDriverProvider,
+*/
+
+/**
+ * @ngdoc module
+ * @name ngAnimate
+ * @description
+ *
+ * The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via
+ * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` then the animation hooks are enabled for an Angular app.
+ *
+ *
+ *
+ * # Usage
+ * Simply put, there are two ways to make use of animations when ngAnimate is used: by using **CSS** and **JavaScript**. The former works purely based
+ * using CSS (by using matching CSS selectors/styles) and the latter triggers animations that are registered via `module.animation()`. For
+ * both CSS and JS animations the sole requirement is to have a matching `CSS class` that exists both in the registered animation and within
+ * the HTML element that the animation will be triggered on.
+ *
+ * ## Directive Support
+ * The following directives are "animation aware":
+ *
+ * | Directive | Supported Animations |
+ * |----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|
+ * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave and move |
+ * | {@link ngRoute.directive:ngView#animations ngView} | enter and leave |
+ * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave |
+ * | {@link ng.directive:ngSwitch#animations ngSwitch} | enter and leave |
+ * | {@link ng.directive:ngIf#animations ngIf} | enter and leave |
+ * | {@link ng.directive:ngClass#animations ngClass} | add and remove (the CSS class(es) present) |
+ * | {@link ng.directive:ngShow#animations ngShow} & {@link ng.directive:ngHide#animations ngHide} | add and remove (the ng-hide class value) |
+ * | {@link ng.directive:form#animation-hooks form} & {@link ng.directive:ngModel#animation-hooks ngModel} | add and remove (dirty, pristine, valid, invalid & all other validations) |
+ * | {@link module:ngMessages#animations ngMessages} | add and remove (ng-active & ng-inactive) |
+ * | {@link module:ngMessages#animations ngMessage} | enter and leave |
+ *
+ * (More information can be found by visiting each the documentation associated with each directive.)
+ *
+ * ## CSS-based Animations
+ *
+ * CSS-based animations with ngAnimate are unique since they require no JavaScript code at all. By using a CSS class that we reference between our HTML
+ * and CSS code we can create an animation that will be picked up by Angular when an the underlying directive performs an operation.
+ *
+ * The example below shows how an `enter` animation can be made possible on a element using `ng-if`:
+ *
+ * ```html
+ *
+ * Fade me in out
+ *
+ * Fade In!
+ * Fade Out!
+ * ```
+ *
+ * Notice the CSS class **fade**? We can now create the CSS transition code that references this class:
+ *
+ * ```css
+ * /* The starting CSS styles for the enter animation */
+ * .fade.ng-enter {
+ * transition:0.5s linear all;
+ * opacity:0;
+ * }
+ *
+ * /* The starting CSS styles for the enter animation */
+ * .fade.ng-enter.ng-enter-active {
+ * opacity:1;
+ * }
+ * ```
+ *
+ * The key thing to remember here is that, depending on the animation event (which each of the directives above trigger depending on what's going on) two
+ * generated CSS classes will be applied to the element; in the example above we have `.ng-enter` and `.ng-enter-active`. For CSS transitions, the transition
+ * code **must** be defined within the starting CSS class (in this case `.ng-enter`). The destination class is what the transition will animate towards.
+ *
+ * If for example we wanted to create animations for `leave` and `move` (ngRepeat triggers move) then we can do so using the same CSS naming conventions:
+ *
+ * ```css
+ * /* now the element will fade out before it is removed from the DOM */
+ * .fade.ng-leave {
+ * transition:0.5s linear all;
+ * opacity:1;
+ * }
+ * .fade.ng-leave.ng-leave-active {
+ * opacity:0;
+ * }
+ * ```
+ *
+ * We can also make use of **CSS Keyframes** by referencing the keyframe animation within the starting CSS class:
+ *
+ * ```css
+ * /* there is no need to define anything inside of the destination
+ * CSS class since the keyframe will take charge of the animation */
+ * .fade.ng-leave {
+ * animation: my_fade_animation 0.5s linear;
+ * -webkit-animation: my_fade_animation 0.5s linear;
+ * }
+ *
+ * @keyframes my_fade_animation {
+ * from { opacity:1; }
+ * to { opacity:0; }
+ * }
+ *
+ * @-webkit-keyframes my_fade_animation {
+ * from { opacity:1; }
+ * to { opacity:0; }
+ * }
+ * ```
+ *
+ * Feel free also mix transitions and keyframes together as well as any other CSS classes on the same element.
+ *
+ * ### CSS Class-based Animations
+ *
+ * Class-based animations (animations that are triggered via `ngClass`, `ngShow`, `ngHide` and some other directives) have a slightly different
+ * naming convention. Class-based animations are basic enough that a standard transition or keyframe can be referenced on the class being added
+ * and removed.
+ *
+ * For example if we wanted to do a CSS animation for `ngHide` then we place an animation on the `.ng-hide` CSS class:
+ *
+ * ```html
+ *
+ * Show and hide me
+ *
+ * Toggle
+ *
+ *
+ * ```
+ *
+ * All that is going on here with ngShow/ngHide behind the scenes is the `.ng-hide` class is added/removed (when the hidden state is valid). Since
+ * ngShow and ngHide are animation aware then we can match up a transition and ngAnimate handles the rest.
+ *
+ * In addition the addition and removal of the CSS class, ngAnimate also provides two helper methods that we can use to further decorate the animation
+ * with CSS styles.
+ *
+ * ```html
+ *
+ * Highlight this box
+ *
+ * Toggle
+ *
+ *
+ * ```
+ *
+ * We can also make use of CSS keyframes by placing them within the CSS classes.
+ *
+ *
+ * ### CSS Staggering Animations
+ * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a
+ * curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be
+ * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for
+ * the animation. The style property expected within the stagger class can either be a **transition-delay** or an
+ * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).
+ *
+ * ```css
+ * .my-animation.ng-enter {
+ * /* standard transition code */
+ * transition: 1s linear all;
+ * opacity:0;
+ * }
+ * .my-animation.ng-enter-stagger {
+ * /* this will have a 100ms delay between each successive leave animation */
+ * transition-delay: 0.1s;
+ *
+ * /* in case the stagger doesn't work then the duration value
+ * must be set to 0 to avoid an accidental CSS inheritance */
+ * transition-duration: 0s;
+ * }
+ * .my-animation.ng-enter.ng-enter-active {
+ * /* standard transition styles */
+ * opacity:1;
+ * }
+ * ```
+ *
+ * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations
+ * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this
+ * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation
+ * will also be reset if one or more animation frames have passed since the multiple calls to `$animate` were fired.
+ *
+ * The following code will issue the **ng-leave-stagger** event on the element provided:
+ *
+ * ```js
+ * var kids = parent.children();
+ *
+ * $animate.leave(kids[0]); //stagger index=0
+ * $animate.leave(kids[1]); //stagger index=1
+ * $animate.leave(kids[2]); //stagger index=2
+ * $animate.leave(kids[3]); //stagger index=3
+ * $animate.leave(kids[4]); //stagger index=4
+ *
+ * window.requestAnimationFrame(function() {
+ * //stagger has reset itself
+ * $animate.leave(kids[5]); //stagger index=0
+ * $animate.leave(kids[6]); //stagger index=1
+ *
+ * $scope.$digest();
+ * });
+ * ```
+ *
+ * Stagger animations are currently only supported within CSS-defined animations.
+ *
+ * ### The `ng-animate` CSS class
+ *
+ * When ngAnimate is animating an element it will apply the `ng-animate` CSS class to the element for the duration of the animation.
+ * This is a temporary CSS class and it will be removed once the animation is over (for both JavaScript and CSS-based animations).
+ *
+ * Therefore, animations can be applied to an element using this temporary class directly via CSS.
+ *
+ * ```css
+ * .zipper.ng-animate {
+ * transition:0.5s linear all;
+ * }
+ * .zipper.ng-enter {
+ * opacity:0;
+ * }
+ * .zipper.ng-enter.ng-enter-active {
+ * opacity:1;
+ * }
+ * .zipper.ng-leave {
+ * opacity:1;
+ * }
+ * .zipper.ng-leave.ng-leave-active {
+ * opacity:0;
+ * }
+ * ```
+ *
+ * (Note that the `ng-animate` CSS class is reserved and it cannot be applied on an element directly since ngAnimate will always remove
+ * the CSS class once an animation has completed.)
+ *
+ *
+ * ## JavaScript-based Animations
+ *
+ * ngAnimate also allows for animations to be consumed by JavaScript code. The approach is similar to CSS-based animations (where there is a shared
+ * CSS class that is referenced in our HTML code) but in addition we need to register the JavaScript animation on the module. By making use of the
+ * `module.animation()` module function we can register the ainmation.
+ *
+ * Let's see an example of a enter/leave animation using `ngRepeat`:
+ *
+ * ```html
+ *
+ * {{ item }}
+ *
+ * ```
+ *
+ * See the **slide** CSS class? Let's use that class to define an animation that we'll structure in our module code by using `module.animation`:
+ *
+ * ```js
+ * myModule.animation('.slide', [function() {
+ * return {
+ * // make note that other events (like addClass/removeClass)
+ * // have different function input parameters
+ * enter: function(element, doneFn) {
+ * jQuery(element).fadeIn(1000, doneFn);
+ *
+ * // remember to call doneFn so that angular
+ * // knows that the animation has concluded
+ * },
+ *
+ * move: function(element, doneFn) {
+ * jQuery(element).fadeIn(1000, doneFn);
+ * },
+ *
+ * leave: function(element, doneFn) {
+ * jQuery(element).fadeOut(1000, doneFn);
+ * }
+ * }
+ * }]
+ * ```
+ *
+ * The nice thing about JS-based animations is that we can inject other services and make use of advanced animation libraries such as
+ * greensock.js and velocity.js.
+ *
+ * If our animation code class-based (meaning that something like `ngClass`, `ngHide` and `ngShow` triggers it) then we can still define
+ * our animations inside of the same registered animation, however, the function input arguments are a bit different:
+ *
+ * ```html
+ *
+ * this box is moody
+ *
+ * Change to red
+ * Change to blue
+ * Change to green
+ * ```
+ *
+ * ```js
+ * myModule.animation('.colorful', [function() {
+ * return {
+ * addClass: function(element, className, doneFn) {
+ * // do some cool animation and call the doneFn
+ * },
+ * removeClass: function(element, className, doneFn) {
+ * // do some cool animation and call the doneFn
+ * },
+ * setClass: function(element, addedClass, removedClass, doneFn) {
+ * // do some cool animation and call the doneFn
+ * }
+ * }
+ * }]
+ * ```
+ *
+ * ## CSS + JS Animations Together
+ *
+ * AngularJS 1.4 and higher has taken steps to make the amalgamation of CSS and JS animations more flexible. However, unlike earlier versions of Angular,
+ * defining CSS and JS animations to work off of the same CSS class will not work anymore. Therefore example below will only result in **JS animations taking
+ * charge of the animation**:
+ *
+ * ```html
+ *
+ * Slide in and out
+ *
+ * ```
+ *
+ * ```js
+ * myModule.animation('.slide', [function() {
+ * return {
+ * enter: function(element, doneFn) {
+ * jQuery(element).slideIn(1000, doneFn);
+ * }
+ * }
+ * }]
+ * ```
+ *
+ * ```css
+ * .slide.ng-enter {
+ * transition:0.5s linear all;
+ * transform:translateY(-100px);
+ * }
+ * .slide.ng-enter.ng-enter-active {
+ * transform:translateY(0);
+ * }
+ * ```
+ *
+ * Does this mean that CSS and JS animations cannot be used together? Do JS-based animations always have higher priority? We can suppliment for the
+ * lack of CSS animations by making use of the `$animateCss` service to trigger our own tweaked-out, CSS-based animations directly from
+ * our own JS-based animation code:
+ *
+ * ```js
+ * myModule.animation('.slide', ['$animateCss', function($animateCss) {
+ * return {
+ * enter: function(element, doneFn) {
+* // this will trigger `.slide.ng-enter` and `.slide.ng-enter-active`.
+ * var runner = $animateCss(element, {
+ * event: 'enter',
+ * structural: true
+ * }).start();
+* runner.done(doneFn);
+ * }
+ * }
+ * }]
+ * ```
+ *
+ * The nice thing here is that we can save bandwidth by sticking to our CSS-based animation code and we don't need to rely on a 3rd-party animation framework.
+ *
+ * The `$animateCss` service is very powerful since we can feed in all kinds of extra properties that will be evaluated and fed into a CSS transition or
+ * keyframe animation. For example if we wanted to animate the height of an element while adding and removing classes then we can do so by providing that
+ * data into `$animateCss` directly:
+ *
+ * ```js
+ * myModule.animation('.slide', ['$animateCss', function($animateCss) {
+ * return {
+ * enter: function(element, doneFn) {
+ * var runner = $animateCss(element, {
+ * event: 'enter',
+ * addClass: 'maroon-setting',
+ * from: { height:0 },
+ * to: { height: 200 }
+ * }).start();
+ *
+ * runner.done(doneFn);
+ * }
+ * }
+ * }]
+ * ```
+ *
+ * Now we can fill in the rest via our transition CSS code:
+ *
+ * ```css
+ * /* the transition tells ngAnimate to make the animation happen */
+ * .slide.ng-enter { transition:0.5s linear all; }
+ *
+ * /* this extra CSS class will be absorbed into the transition
+ * since the $animateCss code is adding the class */
+ * .maroon-setting { background:red; }
+ * ```
+ *
+ * And `$animateCss` will figure out the rest. Just make sure to have the `done()` callback fire the `doneFn` function to signal when the animation is over.
+ *
+ * To learn more about what's possible be sure to visit the {@link ngAnimate.$animateCss $animateCss service}.
+ *
+ * ## Animation Anchoring (via `ng-animate-ref`)
+ *
+ * ngAnimate in AngularJS 1.4 comes packed with the ability to cross-animate elements between
+ * structural areas of an application (like views) by pairing up elements using an attribute
+ * called `ng-animate-ref`.
+ *
+ * Let's say for example we have two views that are managed by `ng-view` and we want to show
+ * that there is a relationship between two components situated in within these views. By using the
+ * `ng-animate-ref` attribute we can identify that the two components are paired together and we
+ * can then attach an animation, which is triggered when the view changes.
+ *
+ * Say for example we have the following template code:
+ *
+ * ```html
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * ```
+ *
+ * Now, when the view changes (once the link is clicked), ngAnimate will examine the
+ * HTML contents to see if there is a match reference between any components in the view
+ * that is leaving and the view that is entering. It will scan both the view which is being
+ * removed (leave) and inserted (enter) to see if there are any paired DOM elements that
+ * contain a matching ref value.
+ *
+ * The two images match since they share the same ref value. ngAnimate will now create a
+ * transport element (which is a clone of the first image element) and it will then attempt
+ * to animate to the position of the second image element in the next view. For the animation to
+ * work a special CSS class called `ng-anchor` will be added to the transported element.
+ *
+ * We can now attach a transition onto the `.banner.ng-anchor` CSS class and then
+ * ngAnimate will handle the entire transition for us as well as the addition and removal of
+ * any changes of CSS classes between the elements:
+ *
+ * ```css
+ * .banner.ng-anchor {
+ * /* this animation will last for 1 second since there are
+ * two phases to the animation (an `in` and an `out` phase) */
+ * transition:0.5s linear all;
+ * }
+ * ```
+ *
+ * We also **must** include animations for the views that are being entered and removed
+ * (otherwise anchoring wouldn't be possible since the new view would be inserted right away).
+ *
+ * ```css
+ * .view-animation.ng-enter, .view-animation.ng-leave {
+ * transition:0.5s linear all;
+ * position:fixed;
+ * left:0;
+ * top:0;
+ * width:100%;
+ * }
+ * .view-animation.ng-enter {
+ * transform:translateX(100%);
+ * }
+ * .view-animation.ng-leave,
+ * .view-animation.ng-enter.ng-enter-active {
+ * transform:translateX(0%);
+ * }
+ * .view-animation.ng-leave.ng-leave-active {
+ * transform:translateX(-100%);
+ * }
+ * ```
+ *
+ * Now we can jump back to the anchor animation. When the animation happens, there are two stages that occur:
+ * an `out` and an `in` stage. The `out` stage happens first and that is when the element is animated away
+ * from its origin. Once that animation is over then the `in` stage occurs which animates the
+ * element to its destination. The reason why there are two animations is to give enough time
+ * for the enter animation on the new element to be ready.
+ *
+ * The example above sets up a transition for both the in and out phases, but we can also target the out or
+ * in phases directly via `ng-anchor-out` and `ng-anchor-in`.
+ *
+ * ```css
+ * .banner.ng-anchor-out {
+ * transition: 0.5s linear all;
+ *
+ * /* the scale will be applied during the out animation,
+ * but will be animated away when the in animation runs */
+ * transform: scale(1.2);
+ * }
+ *
+ * .banner.ng-anchor-in {
+ * transition: 1s linear all;
+ * }
+ * ```
+ *
+ *
+ *
+ *
+ * ### Anchoring Demo
+ *
+
+
+ Home
+
+
+
+
+ .record {
+ display:block;
+ font-size:20px;
+ }
+ .profile {
+ background:black;
+ color:white;
+ font-size:100px;
+ }
+ .view-container {
+ position:relative;
+ }
+ .view-container > .view.ng-animate {
+ position:absolute;
+ top:0;
+ left:0;
+ width:100%;
+ min-height:500px;
+ }
+ .view.ng-enter, .view.ng-leave,
+ .record.ng-anchor {
+ transition:0.5s linear all;
+ }
+ .view.ng-enter {
+ transform:translateX(100%);
+ }
+ .view.ng-enter.ng-enter-active, .view.ng-leave {
+ transform:translateX(0%);
+ }
+ .view.ng-leave.ng-leave-active {
+ transform:translateX(-100%);
+ }
+ .record.ng-anchor-out {
+ background:red;
+ }
+
+
+ *
+ * ### How is the element transported?
+ *
+ * When an anchor animation occurs, ngAnimate will clone the starting element and position it exactly where the starting
+ * element is located on screen via absolute positioning. The cloned element will be placed inside of the root element
+ * of the application (where ng-app was defined) and all of the CSS classes of the starting element will be applied. The
+ * element will then animate into the `out` and `in` animations and will eventually reach the coordinates and match
+ * the dimensions of the destination element. During the entire animation a CSS class of `.ng-animate-shim` will be applied
+ * to both the starting and destination elements in order to hide them from being visible (the CSS styling for the class
+ * is: `visibility:hidden`). Once the anchor reaches its destination then it will be removed and the destination element
+ * will become visible since the shim class will be removed.
+ *
+ * ### How is the morphing handled?
+ *
+ * CSS Anchoring relies on transitions and keyframes and the internal code is intelligent enough to figure out
+ * what CSS classes differ between the starting element and the destination element. These different CSS classes
+ * will be added/removed on the anchor element and a transition will be applied (the transition that is provided
+ * in the anchor class). Long story short, ngAnimate will figure out what classes to add and remove which will
+ * make the transition of the element as smooth and automatic as possible. Be sure to use simple CSS classes that
+ * do not rely on DOM nesting structure so that the anchor element appears the same as the starting element (since
+ * the cloned element is placed inside of root element which is likely close to the body element).
+ *
+ * Note that if the root element is on the `` element then the cloned node will be placed inside of body.
+ *
+ *
+ * ## Using $animate in your directive code
+ *
+ * So far we've explored how to feed in animations into an Angular application, but how do we trigger animations within our own directives in our application?
+ * By injecting the `$animate` service into our directive code, we can trigger structural and class-based hooks which can then be consumed by animations. Let's
+ * imagine we have a greeting box that shows and hides itself when the data changes
+ *
+ * ```html
+ * Hi there
+ * ```
+ *
+ * ```js
+ * ngModule.directive('greetingBox', ['$animate', function($animate) {
+ * return function(scope, element, attrs) {
+ * attrs.$observe('active', function(value) {
+ * value ? $animate.addClass(element, 'on') ? $animate.removeClass(element, 'on');
+ * });
+ * });
+ * }]);
+ * ```
+ *
+ * Now the `on` CSS class is added and removed on the greeting box component. Now if we add a CSS class on top of the greeting box element
+ * in our HTML code then we can trigger a CSS or JS animation to happen.
+ *
+ * ```css
+ * /* normally we would create a CSS class to reference on the element */
+ * [greeting-box].on { transition:0.5s linear all; background:green; color:white; }
+ * ```
+ *
+ * The `$animate` service contains a variety of other methods like `enter`, `leave`, `animate` and `setClass`. To learn more about what's
+ * possible be sure to visit the {@link ng.$animate $animate service API page}.
+ *
+ *
+ * ### Preventing Collisions With Third Party Libraries
+ *
+ * Some third-party frameworks place animation duration defaults across many element or className
+ * selectors in order to make their code small and reuseable. This can lead to issues with ngAnimate, which
+ * is expecting actual animations on these elements and has to wait for their completion.
+ *
+ * You can prevent this unwanted behavior by using a prefix on all your animation classes:
+ *
+ * ```css
+ * /* prefixed with animate- */
+ * .animate-fade-add.animate-fade-add-active {
+ * transition:1s linear all;
+ * opacity:0;
+ * }
+ * ```
+ *
+ * You then configure `$animate` to enforce this prefix:
+ *
+ * ```js
+ * $animateProvider.classNameFilter(/animate-/);
+ * ```
+ *
+ * This also may provide your application with a speed boost since only specific elements containing CSS class prefix
+ * will be evaluated for animation when any DOM changes occur in the application.
+ *
+ * ## Callbacks and Promises
+ *
+ * When `$animate` is called it returns a promise that can be used to capture when the animation has ended. Therefore if we were to trigger
+ * an animation (within our directive code) then we can continue performing directive and scope related activities after the animation has
+ * ended by chaining onto the returned promise that animation method returns.
+ *
+ * ```js
+ * // somewhere within the depths of the directive
+ * $animate.enter(element, parent).then(function() {
+ * //the animation has completed
+ * });
+ * ```
+ *
+ * (Note that earlier versions of Angular prior to v1.4 required the promise code to be wrapped using `$scope.$apply(...)`. This is not the case
+ * anymore.)
+ *
+ * In addition to the animation promise, we can also make use of animation-related callbacks within our directives and controller code by registering
+ * an event listener using the `$animate` service. Let's say for example that an animation was triggered on our view
+ * routing controller to hook into that:
+ *
+ * ```js
+ * ngModule.controller('HomePageController', ['$animate', function($animate) {
+ * $animate.on('enter', ngViewElement, function(element) {
+ * // the animation for this route has completed
+ * }]);
+ * }])
+ * ```
+ *
+ * (Note that you will need to trigger a digest within the callback to get angular to notice any scope-related changes.)
+ */
+
+/**
+ * @ngdoc service
+ * @name $animate
+ * @kind object
+ *
+ * @description
+ * The ngAnimate `$animate` service documentation is the same for the core `$animate` service.
+ *
+ * Click here {@link ng.$animate $animate to learn more about animations with `$animate`}.
+ */
+angular.module('ngAnimate', [])
+ .directive('ngAnimateChildren', $$AnimateChildrenDirective)
+
+ .factory('$$rAFMutex', $$rAFMutexFactory)
+ .factory('$$rAFScheduler', $$rAFSchedulerFactory)
+
+ .factory('$$AnimateRunner', $$AnimateRunnerFactory)
+
+ .provider('$$animateQueue', $$AnimateQueueProvider)
+ .provider('$$animation', $$AnimationProvider)
+
+ .provider('$animateCss', $AnimateCssProvider)
+ .provider('$$animateCssDriver', $$AnimateCssDriverProvider)
+
+ .provider('$$animateJs', $$AnimateJsProvider)
+ .provider('$$animateJsDriver', $$AnimateJsDriverProvider);
+
+
+})(window, window.angular);
diff --git a/turtles/app/lib/bower_components/angular-animate/angular-animate.min.js b/turtles/app/lib/bower_components/angular-animate/angular-animate.min.js
new file mode 100644
index 000000000..d6791a123
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular-animate/angular-animate.min.js
@@ -0,0 +1,52 @@
+/*
+ AngularJS v1.4.0
+ (c) 2010-2015 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(F,t,W){'use strict';function ua(a,b,c){if(!a)throw ngMinErr("areq",b||"?",c||"required");return a}function va(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;X(a)&&(a=a.join(" "));X(b)&&(b=b.join(" "));return a+" "+b}function Ea(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function ba(a,b,c){var d="";a=X(a)?a:a&&U(a)&&a.length?a.split(/\s+/):[];u(a,function(a,s){a&&0=F&&b>=J&&(C=!0,h())}if(!K){var x,p=[],l=function(a){if(C)D&&a&&(D=!1,h());else if(D=!a,y.animationDuration)if(a=ma(k,D),D)m.push(a);else{var b=m,c=b.indexOf(a);0<=a&&b.splice(c,1)}},r=0<
+U&&(y.transitionDuration&&0===T.transitionDuration||y.animationDuration&&0===T.animationDuration)&&Math.max(T.animationDelay,T.transitionDelay);r?n(b,Math.floor(r*U*1E3),!1):b();t.resume=function(){l(!0)};t.pause=function(){l(!1)}}}var k=A(a);c=ia(c);var m=[],r=a.attr("class"),v=Ea(c),K,D,C,p,t,H,F,J,G;if(0===c.duration||!l.animations&&!l.transitions)return x();var aa=c.event&&X(c.event)?c.event.join(" "):c.event,R="",N="";aa&&c.structural?R=ba(aa,"ng-",!0):aa&&(R=aa);c.addClass&&(N+=ba(c.addClass,
+"-add"));c.removeClass&&(N.length&&(N+=" "),N+=ba(c.removeClass,"-remove"));c.applyClassesEarly&&N.length&&(B(a,c),N="");var Y=[R,N].join(" ").trim(),fa=r+" "+Y,W=ba(Y,"-active"),r=v.to&&0",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/angular/angular.js/issues"
+ },
+ "homepage": "http://angularjs.org"
+}
diff --git a/turtles/app/lib/bower_components/angular-bootstrap/.bower.json b/turtles/app/lib/bower_components/angular-bootstrap/.bower.json
new file mode 100644
index 000000000..7fa81554d
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular-bootstrap/.bower.json
@@ -0,0 +1,32 @@
+{
+ "author": {
+ "name": "https://github.com/angular-ui/bootstrap/graphs/contributors"
+ },
+ "name": "angular-bootstrap",
+ "keywords": [
+ "angular",
+ "angular-ui",
+ "bootstrap"
+ ],
+ "license": "MIT",
+ "ignore": [],
+ "description": "Native AngularJS (Angular) directives for Bootstrap.",
+ "version": "0.13.0",
+ "main": [
+ "./ui-bootstrap-tpls.js"
+ ],
+ "dependencies": {
+ "angular": ">=1.3.0"
+ },
+ "homepage": "https://github.com/angular-ui/bootstrap-bower",
+ "_release": "0.13.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "0.13.0",
+ "commit": "a75d899addcafb73344b724bec647620adeebc9a"
+ },
+ "_source": "git://github.com/angular-ui/bootstrap-bower.git",
+ "_target": "~0.13.0",
+ "_originalSource": "angular-bootstrap",
+ "_direct": true
+}
\ No newline at end of file
diff --git a/turtles/app/lib/bower_components/angular-bootstrap/bower.json b/turtles/app/lib/bower_components/angular-bootstrap/bower.json
new file mode 100644
index 000000000..ea65aadd5
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular-bootstrap/bower.json
@@ -0,0 +1,19 @@
+{
+ "author": {
+ "name": "https://github.com/angular-ui/bootstrap/graphs/contributors"
+ },
+ "name": "angular-bootstrap",
+ "keywords": [
+ "angular",
+ "angular-ui",
+ "bootstrap"
+ ],
+ "license": "MIT",
+ "ignore": [],
+ "description": "Native AngularJS (Angular) directives for Bootstrap.",
+ "version": "0.13.0",
+ "main": ["./ui-bootstrap-tpls.js"],
+ "dependencies": {
+ "angular": ">=1.3.0"
+ }
+}
diff --git a/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap-csp.css b/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap-csp.css
new file mode 100644
index 000000000..d772f786d
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap-csp.css
@@ -0,0 +1,6 @@
+/* Include this file in your html if you are using the CSP mode. */
+
+.ng-animate.item:not(.left):not(.right) {
+ -webkit-transition: 0s ease-in-out left;
+ transition: 0s ease-in-out left
+}
\ No newline at end of file
diff --git a/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap-tpls.js b/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap-tpls.js
new file mode 100644
index 000000000..611966115
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap-tpls.js
@@ -0,0 +1,4840 @@
+/*
+ * angular-ui-bootstrap
+ * http://angular-ui.github.io/bootstrap/
+
+ * Version: 0.13.0 - 2015-05-02
+ * License: MIT
+ */
+angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.transition","ui.bootstrap.typeahead"]);
+angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/day.html","template/datepicker/month.html","template/datepicker/popup.html","template/datepicker/year.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-popup.html","template/tooltip/tooltip-html-unsafe-popup.html","template/tooltip/tooltip-popup.html","template/tooltip/tooltip-template-popup.html","template/popover/popover-template.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/progressbar/progressbar.html","template/rating/rating.html","template/tabs/tab.html","template/tabs/tabset.html","template/timepicker/timepicker.html","template/typeahead/typeahead-match.html","template/typeahead/typeahead-popup.html"]);
+angular.module('ui.bootstrap.collapse', [])
+
+ .directive('collapse', ['$animate', function ($animate) {
+
+ return {
+ link: function (scope, element, attrs) {
+ function expand() {
+ element.removeClass('collapse').addClass('collapsing');
+ $animate.addClass(element, 'in', {
+ to: { height: element[0].scrollHeight + 'px' }
+ }).then(expandDone);
+ }
+
+ function expandDone() {
+ element.removeClass('collapsing');
+ element.css({height: 'auto'});
+ }
+
+ function collapse() {
+ element
+ // IMPORTANT: The height must be set before adding "collapsing" class.
+ // Otherwise, the browser attempts to animate from height 0 (in
+ // collapsing class) to the given height here.
+ .css({height: element[0].scrollHeight + 'px'})
+ // initially all panel collapse have the collapse class, this removal
+ // prevents the animation from jumping to collapsed state
+ .removeClass('collapse')
+ .addClass('collapsing');
+
+ $animate.removeClass(element, 'in', {
+ to: {height: '0'}
+ }).then(collapseDone);
+ }
+
+ function collapseDone() {
+ element.css({height: '0'}); // Required so that collapse works when animation is disabled
+ element.removeClass('collapsing');
+ element.addClass('collapse');
+ }
+
+ scope.$watch(attrs.collapse, function (shouldCollapse) {
+ if (shouldCollapse) {
+ collapse();
+ } else {
+ expand();
+ }
+ });
+ }
+ };
+ }]);
+
+angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
+
+.constant('accordionConfig', {
+ closeOthers: true
+})
+
+.controller('AccordionController', ['$scope', '$attrs', 'accordionConfig', function ($scope, $attrs, accordionConfig) {
+
+ // This array keeps track of the accordion groups
+ this.groups = [];
+
+ // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to
+ this.closeOthers = function(openGroup) {
+ var closeOthers = angular.isDefined($attrs.closeOthers) ? $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;
+ if ( closeOthers ) {
+ angular.forEach(this.groups, function (group) {
+ if ( group !== openGroup ) {
+ group.isOpen = false;
+ }
+ });
+ }
+ };
+
+ // This is called from the accordion-group directive to add itself to the accordion
+ this.addGroup = function(groupScope) {
+ var that = this;
+ this.groups.push(groupScope);
+
+ groupScope.$on('$destroy', function (event) {
+ that.removeGroup(groupScope);
+ });
+ };
+
+ // This is called from the accordion-group directive when to remove itself
+ this.removeGroup = function(group) {
+ var index = this.groups.indexOf(group);
+ if ( index !== -1 ) {
+ this.groups.splice(index, 1);
+ }
+ };
+
+}])
+
+// The accordion directive simply sets up the directive controller
+// and adds an accordion CSS class to itself element.
+.directive('accordion', function () {
+ return {
+ restrict:'EA',
+ controller:'AccordionController',
+ transclude: true,
+ replace: false,
+ templateUrl: 'template/accordion/accordion.html'
+ };
+})
+
+// The accordion-group directive indicates a block of html that will expand and collapse in an accordion
+.directive('accordionGroup', function() {
+ return {
+ require:'^accordion', // We need this directive to be inside an accordion
+ restrict:'EA',
+ transclude:true, // It transcludes the contents of the directive into the template
+ replace: true, // The element containing the directive will be replaced with the template
+ templateUrl:'template/accordion/accordion-group.html',
+ scope: {
+ heading: '@', // Interpolate the heading attribute onto this scope
+ isOpen: '=?',
+ isDisabled: '=?'
+ },
+ controller: function() {
+ this.setHeading = function(element) {
+ this.heading = element;
+ };
+ },
+ link: function(scope, element, attrs, accordionCtrl) {
+ accordionCtrl.addGroup(scope);
+
+ scope.$watch('isOpen', function(value) {
+ if ( value ) {
+ accordionCtrl.closeOthers(scope);
+ }
+ });
+
+ scope.toggleOpen = function() {
+ if ( !scope.isDisabled ) {
+ scope.isOpen = !scope.isOpen;
+ }
+ };
+ }
+ };
+})
+
+// Use accordion-heading below an accordion-group to provide a heading containing HTML
+//
+// Heading containing HTML -
+//
+.directive('accordionHeading', function() {
+ return {
+ restrict: 'EA',
+ transclude: true, // Grab the contents to be used as the heading
+ template: '', // In effect remove this element!
+ replace: true,
+ require: '^accordionGroup',
+ link: function(scope, element, attr, accordionGroupCtrl, transclude) {
+ // Pass the heading to the accordion-group controller
+ // so that it can be transcluded into the right place in the template
+ // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]
+ accordionGroupCtrl.setHeading(transclude(scope, angular.noop));
+ }
+ };
+})
+
+// Use in the accordion-group template to indicate where you want the heading to be transcluded
+// You must provide the property on the accordion-group controller that will hold the transcluded element
+//
\n')}]),!angular.$$csp()&&angular.element(document).find("head").prepend('');
\ No newline at end of file
diff --git a/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap.js b/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap.js
new file mode 100644
index 000000000..0f31fe499
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap.js
@@ -0,0 +1,4461 @@
+/*
+ * angular-ui-bootstrap
+ * http://angular-ui.github.io/bootstrap/
+
+ * Version: 0.13.0 - 2015-05-02
+ * License: MIT
+ */
+angular.module("ui.bootstrap", ["ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.transition","ui.bootstrap.typeahead"]);
+angular.module('ui.bootstrap.collapse', [])
+
+ .directive('collapse', ['$animate', function ($animate) {
+
+ return {
+ link: function (scope, element, attrs) {
+ function expand() {
+ element.removeClass('collapse').addClass('collapsing');
+ $animate.addClass(element, 'in', {
+ to: { height: element[0].scrollHeight + 'px' }
+ }).then(expandDone);
+ }
+
+ function expandDone() {
+ element.removeClass('collapsing');
+ element.css({height: 'auto'});
+ }
+
+ function collapse() {
+ element
+ // IMPORTANT: The height must be set before adding "collapsing" class.
+ // Otherwise, the browser attempts to animate from height 0 (in
+ // collapsing class) to the given height here.
+ .css({height: element[0].scrollHeight + 'px'})
+ // initially all panel collapse have the collapse class, this removal
+ // prevents the animation from jumping to collapsed state
+ .removeClass('collapse')
+ .addClass('collapsing');
+
+ $animate.removeClass(element, 'in', {
+ to: {height: '0'}
+ }).then(collapseDone);
+ }
+
+ function collapseDone() {
+ element.css({height: '0'}); // Required so that collapse works when animation is disabled
+ element.removeClass('collapsing');
+ element.addClass('collapse');
+ }
+
+ scope.$watch(attrs.collapse, function (shouldCollapse) {
+ if (shouldCollapse) {
+ collapse();
+ } else {
+ expand();
+ }
+ });
+ }
+ };
+ }]);
+
+angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
+
+.constant('accordionConfig', {
+ closeOthers: true
+})
+
+.controller('AccordionController', ['$scope', '$attrs', 'accordionConfig', function ($scope, $attrs, accordionConfig) {
+
+ // This array keeps track of the accordion groups
+ this.groups = [];
+
+ // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to
+ this.closeOthers = function(openGroup) {
+ var closeOthers = angular.isDefined($attrs.closeOthers) ? $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;
+ if ( closeOthers ) {
+ angular.forEach(this.groups, function (group) {
+ if ( group !== openGroup ) {
+ group.isOpen = false;
+ }
+ });
+ }
+ };
+
+ // This is called from the accordion-group directive to add itself to the accordion
+ this.addGroup = function(groupScope) {
+ var that = this;
+ this.groups.push(groupScope);
+
+ groupScope.$on('$destroy', function (event) {
+ that.removeGroup(groupScope);
+ });
+ };
+
+ // This is called from the accordion-group directive when to remove itself
+ this.removeGroup = function(group) {
+ var index = this.groups.indexOf(group);
+ if ( index !== -1 ) {
+ this.groups.splice(index, 1);
+ }
+ };
+
+}])
+
+// The accordion directive simply sets up the directive controller
+// and adds an accordion CSS class to itself element.
+.directive('accordion', function () {
+ return {
+ restrict:'EA',
+ controller:'AccordionController',
+ transclude: true,
+ replace: false,
+ templateUrl: 'template/accordion/accordion.html'
+ };
+})
+
+// The accordion-group directive indicates a block of html that will expand and collapse in an accordion
+.directive('accordionGroup', function() {
+ return {
+ require:'^accordion', // We need this directive to be inside an accordion
+ restrict:'EA',
+ transclude:true, // It transcludes the contents of the directive into the template
+ replace: true, // The element containing the directive will be replaced with the template
+ templateUrl:'template/accordion/accordion-group.html',
+ scope: {
+ heading: '@', // Interpolate the heading attribute onto this scope
+ isOpen: '=?',
+ isDisabled: '=?'
+ },
+ controller: function() {
+ this.setHeading = function(element) {
+ this.heading = element;
+ };
+ },
+ link: function(scope, element, attrs, accordionCtrl) {
+ accordionCtrl.addGroup(scope);
+
+ scope.$watch('isOpen', function(value) {
+ if ( value ) {
+ accordionCtrl.closeOthers(scope);
+ }
+ });
+
+ scope.toggleOpen = function() {
+ if ( !scope.isDisabled ) {
+ scope.isOpen = !scope.isOpen;
+ }
+ };
+ }
+ };
+})
+
+// Use accordion-heading below an accordion-group to provide a heading containing HTML
+//
+// Heading containing HTML -
+//
+.directive('accordionHeading', function() {
+ return {
+ restrict: 'EA',
+ transclude: true, // Grab the contents to be used as the heading
+ template: '', // In effect remove this element!
+ replace: true,
+ require: '^accordionGroup',
+ link: function(scope, element, attr, accordionGroupCtrl, transclude) {
+ // Pass the heading to the accordion-group controller
+ // so that it can be transcluded into the right place in the template
+ // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]
+ accordionGroupCtrl.setHeading(transclude(scope, angular.noop));
+ }
+ };
+})
+
+// Use in the accordion-group template to indicate where you want the heading to be transcluded
+// You must provide the property on the accordion-group controller that will hold the transcluded element
+//
+.directive('accordionTransclude', function() {
+ return {
+ require: '^accordionGroup',
+ link: function(scope, element, attr, controller) {
+ scope.$watch(function() { return controller[attr.accordionTransclude]; }, function(heading) {
+ if ( heading ) {
+ element.html('');
+ element.append(heading);
+ }
+ });
+ }
+ };
+})
+
+;
+
+angular.module('ui.bootstrap.alert', [])
+
+.controller('AlertController', ['$scope', '$attrs', function ($scope, $attrs) {
+ $scope.closeable = 'close' in $attrs;
+ this.close = $scope.close;
+}])
+
+.directive('alert', function () {
+ return {
+ restrict:'EA',
+ controller:'AlertController',
+ templateUrl:'template/alert/alert.html',
+ transclude:true,
+ replace:true,
+ scope: {
+ type: '@',
+ close: '&'
+ }
+ };
+})
+
+.directive('dismissOnTimeout', ['$timeout', function($timeout) {
+ return {
+ require: 'alert',
+ link: function(scope, element, attrs, alertCtrl) {
+ $timeout(function(){
+ alertCtrl.close();
+ }, parseInt(attrs.dismissOnTimeout, 10));
+ }
+ };
+}]);
+
+angular.module('ui.bootstrap.bindHtml', [])
+
+ .directive('bindHtmlUnsafe', function () {
+ return function (scope, element, attr) {
+ element.addClass('ng-binding').data('$binding', attr.bindHtmlUnsafe);
+ scope.$watch(attr.bindHtmlUnsafe, function bindHtmlUnsafeWatchAction(value) {
+ element.html(value || '');
+ });
+ };
+ });
+angular.module('ui.bootstrap.buttons', [])
+
+.constant('buttonConfig', {
+ activeClass: 'active',
+ toggleEvent: 'click'
+})
+
+.controller('ButtonsController', ['buttonConfig', function(buttonConfig) {
+ this.activeClass = buttonConfig.activeClass || 'active';
+ this.toggleEvent = buttonConfig.toggleEvent || 'click';
+}])
+
+.directive('btnRadio', function () {
+ return {
+ require: ['btnRadio', 'ngModel'],
+ controller: 'ButtonsController',
+ link: function (scope, element, attrs, ctrls) {
+ var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+ //model -> UI
+ ngModelCtrl.$render = function () {
+ element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio)));
+ };
+
+ //ui->model
+ element.bind(buttonsCtrl.toggleEvent, function () {
+ var isActive = element.hasClass(buttonsCtrl.activeClass);
+
+ if (!isActive || angular.isDefined(attrs.uncheckable)) {
+ scope.$apply(function () {
+ ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.btnRadio));
+ ngModelCtrl.$render();
+ });
+ }
+ });
+ }
+ };
+})
+
+.directive('btnCheckbox', function () {
+ return {
+ require: ['btnCheckbox', 'ngModel'],
+ controller: 'ButtonsController',
+ link: function (scope, element, attrs, ctrls) {
+ var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+ function getTrueValue() {
+ return getCheckboxValue(attrs.btnCheckboxTrue, true);
+ }
+
+ function getFalseValue() {
+ return getCheckboxValue(attrs.btnCheckboxFalse, false);
+ }
+
+ function getCheckboxValue(attributeValue, defaultValue) {
+ var val = scope.$eval(attributeValue);
+ return angular.isDefined(val) ? val : defaultValue;
+ }
+
+ //model -> UI
+ ngModelCtrl.$render = function () {
+ element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
+ };
+
+ //ui->model
+ element.bind(buttonsCtrl.toggleEvent, function () {
+ scope.$apply(function () {
+ ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
+ ngModelCtrl.$render();
+ });
+ });
+ }
+ };
+});
+
+/**
+* @ngdoc overview
+* @name ui.bootstrap.carousel
+*
+* @description
+* AngularJS version of an image carousel.
+*
+*/
+angular.module('ui.bootstrap.carousel', [])
+.controller('CarouselController', ['$scope', '$interval', '$animate', function ($scope, $interval, $animate) {
+ var self = this,
+ slides = self.slides = $scope.slides = [],
+ currentIndex = -1,
+ currentInterval, isPlaying;
+ self.currentSlide = null;
+
+ var destroyed = false;
+ /* direction: "prev" or "next" */
+ self.select = $scope.select = function(nextSlide, direction) {
+ var nextIndex = self.indexOfSlide(nextSlide);
+ //Decide direction if it's not given
+ if (direction === undefined) {
+ direction = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';
+ }
+ if (nextSlide && nextSlide !== self.currentSlide) {
+ goNext();
+ }
+ function goNext() {
+ // Scope has been destroyed, stop here.
+ if (destroyed) { return; }
+
+ angular.extend(nextSlide, {direction: direction, active: true});
+ angular.extend(self.currentSlide || {}, {direction: direction, active: false});
+ if ($animate.enabled() && !$scope.noTransition && nextSlide.$element) {
+ $scope.$currentTransition = true;
+ nextSlide.$element.one('$animate:close', function closeFn() {
+ $scope.$currentTransition = null;
+ });
+ }
+
+ self.currentSlide = nextSlide;
+ currentIndex = nextIndex;
+ //every time you change slides, reset the timer
+ restartTimer();
+ }
+ };
+ $scope.$on('$destroy', function () {
+ destroyed = true;
+ });
+
+ function getSlideByIndex(index) {
+ if (angular.isUndefined(slides[index].index)) {
+ return slides[index];
+ }
+ var i, len = slides.length;
+ for (i = 0; i < slides.length; ++i) {
+ if (slides[i].index == index) {
+ return slides[i];
+ }
+ }
+ }
+
+ self.getCurrentIndex = function() {
+ if (self.currentSlide && angular.isDefined(self.currentSlide.index)) {
+ return +self.currentSlide.index;
+ }
+ return currentIndex;
+ };
+
+ /* Allow outside people to call indexOf on slides array */
+ self.indexOfSlide = function(slide) {
+ return angular.isDefined(slide.index) ? +slide.index : slides.indexOf(slide);
+ };
+
+ $scope.next = function() {
+ var newIndex = (self.getCurrentIndex() + 1) % slides.length;
+
+ //Prevent this user-triggered transition from occurring if there is already one in progress
+ if (!$scope.$currentTransition) {
+ return self.select(getSlideByIndex(newIndex), 'next');
+ }
+ };
+
+ $scope.prev = function() {
+ var newIndex = self.getCurrentIndex() - 1 < 0 ? slides.length - 1 : self.getCurrentIndex() - 1;
+
+ //Prevent this user-triggered transition from occurring if there is already one in progress
+ if (!$scope.$currentTransition) {
+ return self.select(getSlideByIndex(newIndex), 'prev');
+ }
+ };
+
+ $scope.isActive = function(slide) {
+ return self.currentSlide === slide;
+ };
+
+ $scope.$watch('interval', restartTimer);
+ $scope.$on('$destroy', resetTimer);
+
+ function restartTimer() {
+ resetTimer();
+ var interval = +$scope.interval;
+ if (!isNaN(interval) && interval > 0) {
+ currentInterval = $interval(timerFn, interval);
+ }
+ }
+
+ function resetTimer() {
+ if (currentInterval) {
+ $interval.cancel(currentInterval);
+ currentInterval = null;
+ }
+ }
+
+ function timerFn() {
+ var interval = +$scope.interval;
+ if (isPlaying && !isNaN(interval) && interval > 0) {
+ $scope.next();
+ } else {
+ $scope.pause();
+ }
+ }
+
+ $scope.play = function() {
+ if (!isPlaying) {
+ isPlaying = true;
+ restartTimer();
+ }
+ };
+ $scope.pause = function() {
+ if (!$scope.noPause) {
+ isPlaying = false;
+ resetTimer();
+ }
+ };
+
+ self.addSlide = function(slide, element) {
+ slide.$element = element;
+ slides.push(slide);
+ //if this is the first slide or the slide is set to active, select it
+ if(slides.length === 1 || slide.active) {
+ self.select(slides[slides.length-1]);
+ if (slides.length == 1) {
+ $scope.play();
+ }
+ } else {
+ slide.active = false;
+ }
+ };
+
+ self.removeSlide = function(slide) {
+ if (angular.isDefined(slide.index)) {
+ slides.sort(function(a, b) {
+ return +a.index > +b.index;
+ });
+ }
+ //get the index of the slide inside the carousel
+ var index = slides.indexOf(slide);
+ slides.splice(index, 1);
+ if (slides.length > 0 && slide.active) {
+ if (index >= slides.length) {
+ self.select(slides[index-1]);
+ } else {
+ self.select(slides[index]);
+ }
+ } else if (currentIndex > index) {
+ currentIndex--;
+ }
+ };
+
+}])
+
+/**
+ * @ngdoc directive
+ * @name ui.bootstrap.carousel.directive:carousel
+ * @restrict EA
+ *
+ * @description
+ * Carousel is the outer container for a set of image 'slides' to showcase.
+ *
+ * @param {number=} interval The time, in milliseconds, that it will take the carousel to go to the next slide.
+ * @param {boolean=} noTransition Whether to disable transitions on the carousel.
+ * @param {boolean=} noPause Whether to disable pausing on the carousel (by default, the carousel interval pauses on hover).
+ *
+ * @example
+
+
+
+
+
+
+
Beautiful!
+
+
+
+
+
+
D'aww!
+
+
+
+
+
+ .carousel-indicators {
+ top: auto;
+ bottom: 15px;
+ }
+
+
+ */
+.directive('carousel', [function() {
+ return {
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ controller: 'CarouselController',
+ require: 'carousel',
+ templateUrl: 'template/carousel/carousel.html',
+ scope: {
+ interval: '=',
+ noTransition: '=',
+ noPause: '='
+ }
+ };
+}])
+
+/**
+ * @ngdoc directive
+ * @name ui.bootstrap.carousel.directive:slide
+ * @restrict EA
+ *
+ * @description
+ * Creates a slide inside a {@link ui.bootstrap.carousel.directive:carousel carousel}. Must be placed as a child of a carousel element.
+ *
+ * @param {boolean=} active Model binding, whether or not this slide is currently active.
+ * @param {number=} index The index of the slide. The slides will be sorted by this parameter.
+ *
+ * @example
+
+
+
+
+
+
+
+
Slide {{$index}}
+
{{slide.text}}
+
+
+
+ Interval, in milliseconds:
+ Enter a negative number to stop the interval.
+
+
+
+function CarouselDemoCtrl($scope) {
+ $scope.myInterval = 5000;
+}
+
+
+ .carousel-indicators {
+ top: auto;
+ bottom: 15px;
+ }
+
+
+*/
+
+.directive('slide', function() {
+ return {
+ require: '^carousel',
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ templateUrl: 'template/carousel/slide.html',
+ scope: {
+ active: '=?',
+ index: '=?'
+ },
+ link: function (scope, element, attrs, carouselCtrl) {
+ carouselCtrl.addSlide(scope, element);
+ //when the scope is destroyed then remove the slide from the current slides array
+ scope.$on('$destroy', function() {
+ carouselCtrl.removeSlide(scope);
+ });
+
+ scope.$watch('active', function(active) {
+ if (active) {
+ carouselCtrl.select(scope);
+ }
+ });
+ }
+ };
+})
+
+.animation('.item', [
+ '$animate',
+function ($animate) {
+ return {
+ beforeAddClass: function (element, className, done) {
+ // Due to transclusion, noTransition property is on parent's scope
+ if (className == 'active' && element.parent() &&
+ !element.parent().scope().noTransition) {
+ var stopped = false;
+ var direction = element.isolateScope().direction;
+ var directionClass = direction == 'next' ? 'left' : 'right';
+ element.addClass(direction);
+ $animate.addClass(element, directionClass).then(function () {
+ if (!stopped) {
+ element.removeClass(directionClass + ' ' + direction);
+ }
+ done();
+ });
+
+ return function () {
+ stopped = true;
+ };
+ }
+ done();
+ },
+ beforeRemoveClass: function (element, className, done) {
+ // Due to transclusion, noTransition property is on parent's scope
+ if (className == 'active' && element.parent() &&
+ !element.parent().scope().noTransition) {
+ var stopped = false;
+ var direction = element.isolateScope().direction;
+ var directionClass = direction == 'next' ? 'left' : 'right';
+ $animate.addClass(element, directionClass).then(function () {
+ if (!stopped) {
+ element.removeClass(directionClass);
+ }
+ done();
+ });
+ return function () {
+ stopped = true;
+ };
+ }
+ done();
+ }
+ };
+
+}])
+
+
+;
+
+angular.module('ui.bootstrap.dateparser', [])
+
+.service('dateParser', ['$locale', 'orderByFilter', function($locale, orderByFilter) {
+ // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js
+ var SPECIAL_CHARACTERS_REGEXP = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
+
+ this.parsers = {};
+
+ var formatCodeToRegex = {
+ 'yyyy': {
+ regex: '\\d{4}',
+ apply: function(value) { this.year = +value; }
+ },
+ 'yy': {
+ regex: '\\d{2}',
+ apply: function(value) { this.year = +value + 2000; }
+ },
+ 'y': {
+ regex: '\\d{1,4}',
+ apply: function(value) { this.year = +value; }
+ },
+ 'MMMM': {
+ regex: $locale.DATETIME_FORMATS.MONTH.join('|'),
+ apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); }
+ },
+ 'MMM': {
+ regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),
+ apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); }
+ },
+ 'MM': {
+ regex: '0[1-9]|1[0-2]',
+ apply: function(value) { this.month = value - 1; }
+ },
+ 'M': {
+ regex: '[1-9]|1[0-2]',
+ apply: function(value) { this.month = value - 1; }
+ },
+ 'dd': {
+ regex: '[0-2][0-9]{1}|3[0-1]{1}',
+ apply: function(value) { this.date = +value; }
+ },
+ 'd': {
+ regex: '[1-2]?[0-9]{1}|3[0-1]{1}',
+ apply: function(value) { this.date = +value; }
+ },
+ 'EEEE': {
+ regex: $locale.DATETIME_FORMATS.DAY.join('|')
+ },
+ 'EEE': {
+ regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|')
+ },
+ 'HH': {
+ regex: '(?:0|1)[0-9]|2[0-3]',
+ apply: function(value) { this.hours = +value; }
+ },
+ 'H': {
+ regex: '1?[0-9]|2[0-3]',
+ apply: function(value) { this.hours = +value; }
+ },
+ 'mm': {
+ regex: '[0-5][0-9]',
+ apply: function(value) { this.minutes = +value; }
+ },
+ 'm': {
+ regex: '[0-9]|[1-5][0-9]',
+ apply: function(value) { this.minutes = +value; }
+ },
+ 'sss': {
+ regex: '[0-9][0-9][0-9]',
+ apply: function(value) { this.milliseconds = +value; }
+ },
+ 'ss': {
+ regex: '[0-5][0-9]',
+ apply: function(value) { this.seconds = +value; }
+ },
+ 's': {
+ regex: '[0-9]|[1-5][0-9]',
+ apply: function(value) { this.seconds = +value; }
+ }
+ };
+
+ function createParser(format) {
+ var map = [], regex = format.split('');
+
+ angular.forEach(formatCodeToRegex, function(data, code) {
+ var index = format.indexOf(code);
+
+ if (index > -1) {
+ format = format.split('');
+
+ regex[index] = '(' + data.regex + ')';
+ format[index] = '$'; // Custom symbol to define consumed part of format
+ for (var i = index + 1, n = index + code.length; i < n; i++) {
+ regex[i] = '';
+ format[i] = '$';
+ }
+ format = format.join('');
+
+ map.push({ index: index, apply: data.apply });
+ }
+ });
+
+ return {
+ regex: new RegExp('^' + regex.join('') + '$'),
+ map: orderByFilter(map, 'index')
+ };
+ }
+
+ this.parse = function(input, format, baseDate) {
+ if ( !angular.isString(input) || !format ) {
+ return input;
+ }
+
+ format = $locale.DATETIME_FORMATS[format] || format;
+ format = format.replace(SPECIAL_CHARACTERS_REGEXP, '\\$&');
+
+ if ( !this.parsers[format] ) {
+ this.parsers[format] = createParser(format);
+ }
+
+ var parser = this.parsers[format],
+ regex = parser.regex,
+ map = parser.map,
+ results = input.match(regex);
+
+ if ( results && results.length ) {
+ var fields, dt;
+ if (baseDate) {
+ fields = {
+ year: baseDate.getFullYear(),
+ month: baseDate.getMonth(),
+ date: baseDate.getDate(),
+ hours: baseDate.getHours(),
+ minutes: baseDate.getMinutes(),
+ seconds: baseDate.getSeconds(),
+ milliseconds: baseDate.getMilliseconds()
+ };
+ } else {
+ fields = { year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };
+ }
+
+ for( var i = 1, n = results.length; i < n; i++ ) {
+ var mapper = map[i-1];
+ if ( mapper.apply ) {
+ mapper.apply.call(fields, results[i]);
+ }
+ }
+
+ if ( isValid(fields.year, fields.month, fields.date) ) {
+ dt = new Date(fields.year, fields.month, fields.date, fields.hours, fields.minutes, fields.seconds,
+ fields.milliseconds || 0);
+ }
+
+ return dt;
+ }
+ };
+
+ // Check if date is valid for specific month (and year for February).
+ // Month: 0 = Jan, 1 = Feb, etc
+ function isValid(year, month, date) {
+ if (date < 1) {
+ return false;
+ }
+
+ if ( month === 1 && date > 28) {
+ return date === 29 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);
+ }
+
+ if ( month === 3 || month === 5 || month === 8 || month === 10) {
+ return date < 31;
+ }
+
+ return true;
+ }
+}]);
+
+angular.module('ui.bootstrap.position', [])
+
+/**
+ * A set of utility methods that can be use to retrieve position of DOM elements.
+ * It is meant to be used where we need to absolute-position DOM elements in
+ * relation to other, existing elements (this is the case for tooltips, popovers,
+ * typeahead suggestions etc.).
+ */
+ .factory('$position', ['$document', '$window', function ($document, $window) {
+
+ function getStyle(el, cssprop) {
+ if (el.currentStyle) { //IE
+ return el.currentStyle[cssprop];
+ } else if ($window.getComputedStyle) {
+ return $window.getComputedStyle(el)[cssprop];
+ }
+ // finally try and get inline style
+ return el.style[cssprop];
+ }
+
+ /**
+ * Checks if a given element is statically positioned
+ * @param element - raw DOM element
+ */
+ function isStaticPositioned(element) {
+ return (getStyle(element, 'position') || 'static' ) === 'static';
+ }
+
+ /**
+ * returns the closest, non-statically positioned parentOffset of a given element
+ * @param element
+ */
+ var parentOffsetEl = function (element) {
+ var docDomEl = $document[0];
+ var offsetParent = element.offsetParent || docDomEl;
+ while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent || docDomEl;
+ };
+
+ return {
+ /**
+ * Provides read-only equivalent of jQuery's position function:
+ * http://api.jquery.com/position/
+ */
+ position: function (element) {
+ var elBCR = this.offset(element);
+ var offsetParentBCR = { top: 0, left: 0 };
+ var offsetParentEl = parentOffsetEl(element[0]);
+ if (offsetParentEl != $document[0]) {
+ offsetParentBCR = this.offset(angular.element(offsetParentEl));
+ offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;
+ offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;
+ }
+
+ var boundingClientRect = element[0].getBoundingClientRect();
+ return {
+ width: boundingClientRect.width || element.prop('offsetWidth'),
+ height: boundingClientRect.height || element.prop('offsetHeight'),
+ top: elBCR.top - offsetParentBCR.top,
+ left: elBCR.left - offsetParentBCR.left
+ };
+ },
+
+ /**
+ * Provides read-only equivalent of jQuery's offset function:
+ * http://api.jquery.com/offset/
+ */
+ offset: function (element) {
+ var boundingClientRect = element[0].getBoundingClientRect();
+ return {
+ width: boundingClientRect.width || element.prop('offsetWidth'),
+ height: boundingClientRect.height || element.prop('offsetHeight'),
+ top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop),
+ left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft)
+ };
+ },
+
+ /**
+ * Provides coordinates for the targetEl in relation to hostEl
+ */
+ positionElements: function (hostEl, targetEl, positionStr, appendToBody) {
+
+ var positionStrParts = positionStr.split('-');
+ var pos0 = positionStrParts[0], pos1 = positionStrParts[1] || 'center';
+
+ var hostElPos,
+ targetElWidth,
+ targetElHeight,
+ targetElPos;
+
+ hostElPos = appendToBody ? this.offset(hostEl) : this.position(hostEl);
+
+ targetElWidth = targetEl.prop('offsetWidth');
+ targetElHeight = targetEl.prop('offsetHeight');
+
+ var shiftWidth = {
+ center: function () {
+ return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2;
+ },
+ left: function () {
+ return hostElPos.left;
+ },
+ right: function () {
+ return hostElPos.left + hostElPos.width;
+ }
+ };
+
+ var shiftHeight = {
+ center: function () {
+ return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2;
+ },
+ top: function () {
+ return hostElPos.top;
+ },
+ bottom: function () {
+ return hostElPos.top + hostElPos.height;
+ }
+ };
+
+ switch (pos0) {
+ case 'right':
+ targetElPos = {
+ top: shiftHeight[pos1](),
+ left: shiftWidth[pos0]()
+ };
+ break;
+ case 'left':
+ targetElPos = {
+ top: shiftHeight[pos1](),
+ left: hostElPos.left - targetElWidth
+ };
+ break;
+ case 'bottom':
+ targetElPos = {
+ top: shiftHeight[pos0](),
+ left: shiftWidth[pos1]()
+ };
+ break;
+ default:
+ targetElPos = {
+ top: hostElPos.top - targetElHeight,
+ left: shiftWidth[pos1]()
+ };
+ break;
+ }
+
+ return targetElPos;
+ }
+ };
+ }]);
+
+angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position'])
+
+.constant('datepickerConfig', {
+ formatDay: 'dd',
+ formatMonth: 'MMMM',
+ formatYear: 'yyyy',
+ formatDayHeader: 'EEE',
+ formatDayTitle: 'MMMM yyyy',
+ formatMonthTitle: 'yyyy',
+ datepickerMode: 'day',
+ minMode: 'day',
+ maxMode: 'year',
+ showWeeks: true,
+ startingDay: 0,
+ yearRange: 20,
+ minDate: null,
+ maxDate: null,
+ shortcutPropagation: false
+})
+
+.controller('DatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$timeout', '$log', 'dateFilter', 'datepickerConfig', function($scope, $attrs, $parse, $interpolate, $timeout, $log, dateFilter, datepickerConfig) {
+ var self = this,
+ ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl;
+
+ // Modes chain
+ this.modes = ['day', 'month', 'year'];
+
+ // Configuration attributes
+ angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle',
+ 'minMode', 'maxMode', 'showWeeks', 'startingDay', 'yearRange', 'shortcutPropagation'], function( key, index ) {
+ self[key] = angular.isDefined($attrs[key]) ? (index < 8 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key];
+ });
+
+ // Watchable date attributes
+ angular.forEach(['minDate', 'maxDate'], function( key ) {
+ if ( $attrs[key] ) {
+ $scope.$parent.$watch($parse($attrs[key]), function(value) {
+ self[key] = value ? new Date(value) : null;
+ self.refreshView();
+ });
+ } else {
+ self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null;
+ }
+ });
+
+ $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode;
+ $scope.maxMode = self.maxMode;
+ $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);
+
+ if(angular.isDefined($attrs.initDate)) {
+ this.activeDate = $scope.$parent.$eval($attrs.initDate) || new Date();
+ $scope.$parent.$watch($attrs.initDate, function(initDate){
+ if(initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)){
+ self.activeDate = initDate;
+ self.refreshView();
+ }
+ });
+ } else {
+ this.activeDate = new Date();
+ }
+
+ $scope.isActive = function(dateObject) {
+ if (self.compare(dateObject.date, self.activeDate) === 0) {
+ $scope.activeDateId = dateObject.uid;
+ return true;
+ }
+ return false;
+ };
+
+ this.init = function( ngModelCtrl_ ) {
+ ngModelCtrl = ngModelCtrl_;
+
+ ngModelCtrl.$render = function() {
+ self.render();
+ };
+ };
+
+ this.render = function() {
+ if ( ngModelCtrl.$viewValue ) {
+ var date = new Date( ngModelCtrl.$viewValue ),
+ isValid = !isNaN(date);
+
+ if ( isValid ) {
+ this.activeDate = date;
+ } else {
+ $log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
+ }
+ ngModelCtrl.$setValidity('date', isValid);
+ }
+ this.refreshView();
+ };
+
+ this.refreshView = function() {
+ if ( this.element ) {
+ this._refreshView();
+
+ var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
+ ngModelCtrl.$setValidity('date-disabled', !date || (this.element && !this.isDisabled(date)));
+ }
+ };
+
+ this.createDateObject = function(date, format) {
+ var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
+ return {
+ date: date,
+ label: dateFilter(date, format),
+ selected: model && this.compare(date, model) === 0,
+ disabled: this.isDisabled(date),
+ current: this.compare(date, new Date()) === 0,
+ customClass: this.customClass(date)
+ };
+ };
+
+ this.isDisabled = function( date ) {
+ return ((this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0) || ($attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode})));
+ };
+
+ this.customClass = function( date ) {
+ return $scope.customClass({date: date, mode: $scope.datepickerMode});
+ };
+
+ // Split array into smaller arrays
+ this.split = function(arr, size) {
+ var arrays = [];
+ while (arr.length > 0) {
+ arrays.push(arr.splice(0, size));
+ }
+ return arrays;
+ };
+
+ $scope.select = function( date ) {
+ if ( $scope.datepickerMode === self.minMode ) {
+ var dt = ngModelCtrl.$viewValue ? new Date( ngModelCtrl.$viewValue ) : new Date(0, 0, 0, 0, 0, 0, 0);
+ dt.setFullYear( date.getFullYear(), date.getMonth(), date.getDate() );
+ ngModelCtrl.$setViewValue( dt );
+ ngModelCtrl.$render();
+ } else {
+ self.activeDate = date;
+ $scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) - 1 ];
+ }
+ };
+
+ $scope.move = function( direction ) {
+ var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),
+ month = self.activeDate.getMonth() + direction * (self.step.months || 0);
+ self.activeDate.setFullYear(year, month, 1);
+ self.refreshView();
+ };
+
+ $scope.toggleMode = function( direction ) {
+ direction = direction || 1;
+
+ if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) {
+ return;
+ }
+
+ $scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) + direction ];
+ };
+
+ // Key event mapper
+ $scope.keys = { 13:'enter', 32:'space', 33:'pageup', 34:'pagedown', 35:'end', 36:'home', 37:'left', 38:'up', 39:'right', 40:'down' };
+
+ var focusElement = function() {
+ $timeout(function() {
+ self.element[0].focus();
+ }, 0 , false);
+ };
+
+ // Listen for focus requests from popup directive
+ $scope.$on('datepicker.focus', focusElement);
+
+ $scope.keydown = function( evt ) {
+ var key = $scope.keys[evt.which];
+
+ if ( !key || evt.shiftKey || evt.altKey ) {
+ return;
+ }
+
+ evt.preventDefault();
+ if(!self.shortcutPropagation){
+ evt.stopPropagation();
+ }
+
+ if (key === 'enter' || key === 'space') {
+ if ( self.isDisabled(self.activeDate)) {
+ return; // do nothing
+ }
+ $scope.select(self.activeDate);
+ focusElement();
+ } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {
+ $scope.toggleMode(key === 'up' ? 1 : -1);
+ focusElement();
+ } else {
+ self.handleKeyDown(key, evt);
+ self.refreshView();
+ }
+ };
+}])
+
+.directive( 'datepicker', function () {
+ return {
+ restrict: 'EA',
+ replace: true,
+ templateUrl: 'template/datepicker/datepicker.html',
+ scope: {
+ datepickerMode: '=?',
+ dateDisabled: '&',
+ customClass: '&',
+ shortcutPropagation: '&?'
+ },
+ require: ['datepicker', '?^ngModel'],
+ controller: 'DatepickerController',
+ link: function(scope, element, attrs, ctrls) {
+ var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+ if ( ngModelCtrl ) {
+ datepickerCtrl.init( ngModelCtrl );
+ }
+ }
+ };
+})
+
+.directive('daypicker', ['dateFilter', function (dateFilter) {
+ return {
+ restrict: 'EA',
+ replace: true,
+ templateUrl: 'template/datepicker/day.html',
+ require: '^datepicker',
+ link: function(scope, element, attrs, ctrl) {
+ scope.showWeeks = ctrl.showWeeks;
+
+ ctrl.step = { months: 1 };
+ ctrl.element = element;
+
+ var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+ function getDaysInMonth( year, month ) {
+ return ((month === 1) && (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month];
+ }
+
+ function getDates(startDate, n) {
+ var dates = new Array(n), current = new Date(startDate), i = 0;
+ current.setHours(12); // Prevent repeated dates because of timezone bug
+ while ( i < n ) {
+ dates[i++] = new Date(current);
+ current.setDate( current.getDate() + 1 );
+ }
+ return dates;
+ }
+
+ ctrl._refreshView = function() {
+ var year = ctrl.activeDate.getFullYear(),
+ month = ctrl.activeDate.getMonth(),
+ firstDayOfMonth = new Date(year, month, 1),
+ difference = ctrl.startingDay - firstDayOfMonth.getDay(),
+ numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : - difference,
+ firstDate = new Date(firstDayOfMonth);
+
+ if ( numDisplayedFromPreviousMonth > 0 ) {
+ firstDate.setDate( - numDisplayedFromPreviousMonth + 1 );
+ }
+
+ // 42 is the number of days on a six-month calendar
+ var days = getDates(firstDate, 42);
+ for (var i = 0; i < 42; i ++) {
+ days[i] = angular.extend(ctrl.createDateObject(days[i], ctrl.formatDay), {
+ secondary: days[i].getMonth() !== month,
+ uid: scope.uniqueId + '-' + i
+ });
+ }
+
+ scope.labels = new Array(7);
+ for (var j = 0; j < 7; j++) {
+ scope.labels[j] = {
+ abbr: dateFilter(days[j].date, ctrl.formatDayHeader),
+ full: dateFilter(days[j].date, 'EEEE')
+ };
+ }
+
+ scope.title = dateFilter(ctrl.activeDate, ctrl.formatDayTitle);
+ scope.rows = ctrl.split(days, 7);
+
+ if ( scope.showWeeks ) {
+ scope.weekNumbers = [];
+ var thursdayIndex = (4 + 7 - ctrl.startingDay) % 7,
+ numWeeks = scope.rows.length;
+ for (var curWeek = 0; curWeek < numWeeks; curWeek++) {
+ scope.weekNumbers.push(
+ getISO8601WeekNumber( scope.rows[curWeek][thursdayIndex].date ));
+ }
+ }
+ };
+
+ ctrl.compare = function(date1, date2) {
+ return (new Date( date1.getFullYear(), date1.getMonth(), date1.getDate() ) - new Date( date2.getFullYear(), date2.getMonth(), date2.getDate() ) );
+ };
+
+ function getISO8601WeekNumber(date) {
+ var checkDate = new Date(date);
+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday
+ var time = checkDate.getTime();
+ checkDate.setMonth(0); // Compare with Jan 1
+ checkDate.setDate(1);
+ return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+ }
+
+ ctrl.handleKeyDown = function( key, evt ) {
+ var date = ctrl.activeDate.getDate();
+
+ if (key === 'left') {
+ date = date - 1; // up
+ } else if (key === 'up') {
+ date = date - 7; // down
+ } else if (key === 'right') {
+ date = date + 1; // down
+ } else if (key === 'down') {
+ date = date + 7;
+ } else if (key === 'pageup' || key === 'pagedown') {
+ var month = ctrl.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);
+ ctrl.activeDate.setMonth(month, 1);
+ date = Math.min(getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()), date);
+ } else if (key === 'home') {
+ date = 1;
+ } else if (key === 'end') {
+ date = getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth());
+ }
+ ctrl.activeDate.setDate(date);
+ };
+
+ ctrl.refreshView();
+ }
+ };
+}])
+
+.directive('monthpicker', ['dateFilter', function (dateFilter) {
+ return {
+ restrict: 'EA',
+ replace: true,
+ templateUrl: 'template/datepicker/month.html',
+ require: '^datepicker',
+ link: function(scope, element, attrs, ctrl) {
+ ctrl.step = { years: 1 };
+ ctrl.element = element;
+
+ ctrl._refreshView = function() {
+ var months = new Array(12),
+ year = ctrl.activeDate.getFullYear();
+
+ for ( var i = 0; i < 12; i++ ) {
+ months[i] = angular.extend(ctrl.createDateObject(new Date(year, i, 1), ctrl.formatMonth), {
+ uid: scope.uniqueId + '-' + i
+ });
+ }
+
+ scope.title = dateFilter(ctrl.activeDate, ctrl.formatMonthTitle);
+ scope.rows = ctrl.split(months, 3);
+ };
+
+ ctrl.compare = function(date1, date2) {
+ return new Date( date1.getFullYear(), date1.getMonth() ) - new Date( date2.getFullYear(), date2.getMonth() );
+ };
+
+ ctrl.handleKeyDown = function( key, evt ) {
+ var date = ctrl.activeDate.getMonth();
+
+ if (key === 'left') {
+ date = date - 1; // up
+ } else if (key === 'up') {
+ date = date - 3; // down
+ } else if (key === 'right') {
+ date = date + 1; // down
+ } else if (key === 'down') {
+ date = date + 3;
+ } else if (key === 'pageup' || key === 'pagedown') {
+ var year = ctrl.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);
+ ctrl.activeDate.setFullYear(year);
+ } else if (key === 'home') {
+ date = 0;
+ } else if (key === 'end') {
+ date = 11;
+ }
+ ctrl.activeDate.setMonth(date);
+ };
+
+ ctrl.refreshView();
+ }
+ };
+}])
+
+.directive('yearpicker', ['dateFilter', function (dateFilter) {
+ return {
+ restrict: 'EA',
+ replace: true,
+ templateUrl: 'template/datepicker/year.html',
+ require: '^datepicker',
+ link: function(scope, element, attrs, ctrl) {
+ var range = ctrl.yearRange;
+
+ ctrl.step = { years: range };
+ ctrl.element = element;
+
+ function getStartingYear( year ) {
+ return parseInt((year - 1) / range, 10) * range + 1;
+ }
+
+ ctrl._refreshView = function() {
+ var years = new Array(range);
+
+ for ( var i = 0, start = getStartingYear(ctrl.activeDate.getFullYear()); i < range; i++ ) {
+ years[i] = angular.extend(ctrl.createDateObject(new Date(start + i, 0, 1), ctrl.formatYear), {
+ uid: scope.uniqueId + '-' + i
+ });
+ }
+
+ scope.title = [years[0].label, years[range - 1].label].join(' - ');
+ scope.rows = ctrl.split(years, 5);
+ };
+
+ ctrl.compare = function(date1, date2) {
+ return date1.getFullYear() - date2.getFullYear();
+ };
+
+ ctrl.handleKeyDown = function( key, evt ) {
+ var date = ctrl.activeDate.getFullYear();
+
+ if (key === 'left') {
+ date = date - 1; // up
+ } else if (key === 'up') {
+ date = date - 5; // down
+ } else if (key === 'right') {
+ date = date + 1; // down
+ } else if (key === 'down') {
+ date = date + 5;
+ } else if (key === 'pageup' || key === 'pagedown') {
+ date += (key === 'pageup' ? - 1 : 1) * ctrl.step.years;
+ } else if (key === 'home') {
+ date = getStartingYear( ctrl.activeDate.getFullYear() );
+ } else if (key === 'end') {
+ date = getStartingYear( ctrl.activeDate.getFullYear() ) + range - 1;
+ }
+ ctrl.activeDate.setFullYear(date);
+ };
+
+ ctrl.refreshView();
+ }
+ };
+}])
+
+.constant('datepickerPopupConfig', {
+ datepickerPopup: 'yyyy-MM-dd',
+ html5Types: {
+ date: 'yyyy-MM-dd',
+ 'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',
+ 'month': 'yyyy-MM'
+ },
+ currentText: 'Today',
+ clearText: 'Clear',
+ closeText: 'Done',
+ closeOnDateSelection: true,
+ appendToBody: false,
+ showButtonBar: true
+})
+
+.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig',
+function ($compile, $parse, $document, $position, dateFilter, dateParser, datepickerPopupConfig) {
+ return {
+ restrict: 'EA',
+ require: 'ngModel',
+ scope: {
+ isOpen: '=?',
+ currentText: '@',
+ clearText: '@',
+ closeText: '@',
+ dateDisabled: '&',
+ customClass: '&'
+ },
+ link: function(scope, element, attrs, ngModel) {
+ var dateFormat,
+ closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection,
+ appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;
+
+ scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;
+
+ scope.getText = function( key ) {
+ return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];
+ };
+
+ var isHtml5DateInput = false;
+ if (datepickerPopupConfig.html5Types[attrs.type]) {
+ dateFormat = datepickerPopupConfig.html5Types[attrs.type];
+ isHtml5DateInput = true;
+ } else {
+ dateFormat = attrs.datepickerPopup || datepickerPopupConfig.datepickerPopup;
+ attrs.$observe('datepickerPopup', function(value, oldValue) {
+ var newDateFormat = value || datepickerPopupConfig.datepickerPopup;
+ // Invalidate the $modelValue to ensure that formatters re-run
+ // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764
+ if (newDateFormat !== dateFormat) {
+ dateFormat = newDateFormat;
+ ngModel.$modelValue = null;
+
+ if (!dateFormat) {
+ throw new Error('datepickerPopup must have a date format specified.');
+ }
+ }
+ });
+ }
+
+ if (!dateFormat) {
+ throw new Error('datepickerPopup must have a date format specified.');
+ }
+
+ if (isHtml5DateInput && attrs.datepickerPopup) {
+ throw new Error('HTML5 date input types do not support custom formats.');
+ }
+
+ // popup element used to display calendar
+ var popupEl = angular.element('
');
+ popupEl.attr({
+ 'ng-model': 'date',
+ 'ng-change': 'dateSelection()'
+ });
+
+ function cameltoDash( string ){
+ return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });
+ }
+
+ // datepicker element
+ var datepickerEl = angular.element(popupEl.children()[0]);
+ if (isHtml5DateInput) {
+ if (attrs.type == 'month') {
+ datepickerEl.attr('datepicker-mode', '"month"');
+ datepickerEl.attr('min-mode', 'month');
+ }
+ }
+
+ if ( attrs.datepickerOptions ) {
+ var options = scope.$parent.$eval(attrs.datepickerOptions);
+ if(options.initDate) {
+ scope.initDate = options.initDate;
+ datepickerEl.attr( 'init-date', 'initDate' );
+ delete options.initDate;
+ }
+ angular.forEach(options, function( value, option ) {
+ datepickerEl.attr( cameltoDash(option), value );
+ });
+ }
+
+ scope.watchData = {};
+ angular.forEach(['minDate', 'maxDate', 'datepickerMode', 'initDate', 'shortcutPropagation'], function( key ) {
+ if ( attrs[key] ) {
+ var getAttribute = $parse(attrs[key]);
+ scope.$parent.$watch(getAttribute, function(value){
+ scope.watchData[key] = value;
+ });
+ datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
+
+ // Propagate changes from datepicker to outside
+ if ( key === 'datepickerMode' ) {
+ var setAttribute = getAttribute.assign;
+ scope.$watch('watchData.' + key, function(value, oldvalue) {
+ if ( value !== oldvalue ) {
+ setAttribute(scope.$parent, value);
+ }
+ });
+ }
+ }
+ });
+ if (attrs.dateDisabled) {
+ datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })');
+ }
+
+ if (attrs.showWeeks) {
+ datepickerEl.attr('show-weeks', attrs.showWeeks);
+ }
+
+ if (attrs.customClass){
+ datepickerEl.attr('custom-class', 'customClass({ date: date, mode: mode })');
+ }
+
+ function parseDate(viewValue) {
+ if (angular.isNumber(viewValue)) {
+ // presumably timestamp to date object
+ viewValue = new Date(viewValue);
+ }
+
+ if (!viewValue) {
+ return null;
+ } else if (angular.isDate(viewValue) && !isNaN(viewValue)) {
+ return viewValue;
+ } else if (angular.isString(viewValue)) {
+ var date = dateParser.parse(viewValue, dateFormat, scope.date) || new Date(viewValue);
+ if (isNaN(date)) {
+ return undefined;
+ } else {
+ return date;
+ }
+ } else {
+ return undefined;
+ }
+ }
+
+ function validator(modelValue, viewValue) {
+ var value = modelValue || viewValue;
+ if (angular.isNumber(value)) {
+ value = new Date(value);
+ }
+ if (!value) {
+ return true;
+ } else if (angular.isDate(value) && !isNaN(value)) {
+ return true;
+ } else if (angular.isString(value)) {
+ var date = dateParser.parse(value, dateFormat) || new Date(value);
+ return !isNaN(date);
+ } else {
+ return false;
+ }
+ }
+
+ if (!isHtml5DateInput) {
+ // Internal API to maintain the correct ng-invalid-[key] class
+ ngModel.$$parserName = 'date';
+ ngModel.$validators.date = validator;
+ ngModel.$parsers.unshift(parseDate);
+ ngModel.$formatters.push(function (value) {
+ scope.date = value;
+ return ngModel.$isEmpty(value) ? value : dateFilter(value, dateFormat);
+ });
+ }
+ else {
+ ngModel.$formatters.push(function (value) {
+ scope.date = value;
+ return value;
+ });
+ }
+
+ // Inner change
+ scope.dateSelection = function(dt) {
+ if (angular.isDefined(dt)) {
+ scope.date = dt;
+ }
+ var date = scope.date ? dateFilter(scope.date, dateFormat) : '';
+ element.val(date);
+ ngModel.$setViewValue(date);
+
+ if ( closeOnDateSelection ) {
+ scope.isOpen = false;
+ element[0].focus();
+ }
+ };
+
+ // Detect changes in the view from the text box
+ ngModel.$viewChangeListeners.push(function () {
+ scope.date = dateParser.parse(ngModel.$viewValue, dateFormat, scope.date) || new Date(ngModel.$viewValue);
+ });
+
+ var documentClickBind = function(event) {
+ if (scope.isOpen && event.target !== element[0]) {
+ scope.$apply(function() {
+ scope.isOpen = false;
+ });
+ }
+ };
+
+ var keydown = function(evt, noApply) {
+ scope.keydown(evt);
+ };
+ element.bind('keydown', keydown);
+
+ scope.keydown = function(evt) {
+ if (evt.which === 27) {
+ evt.preventDefault();
+ if (scope.isOpen) {
+ evt.stopPropagation();
+ }
+ scope.close();
+ } else if (evt.which === 40 && !scope.isOpen) {
+ scope.isOpen = true;
+ }
+ };
+
+ scope.$watch('isOpen', function(value) {
+ if (value) {
+ scope.$broadcast('datepicker.focus');
+ scope.position = appendToBody ? $position.offset(element) : $position.position(element);
+ scope.position.top = scope.position.top + element.prop('offsetHeight');
+
+ $document.bind('click', documentClickBind);
+ } else {
+ $document.unbind('click', documentClickBind);
+ }
+ });
+
+ scope.select = function( date ) {
+ if (date === 'today') {
+ var today = new Date();
+ if (angular.isDate(scope.date)) {
+ date = new Date(scope.date);
+ date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());
+ } else {
+ date = new Date(today.setHours(0, 0, 0, 0));
+ }
+ }
+ scope.dateSelection( date );
+ };
+
+ scope.close = function() {
+ scope.isOpen = false;
+ element[0].focus();
+ };
+
+ var $popup = $compile(popupEl)(scope);
+ // Prevent jQuery cache memory leak (template is now redundant after linking)
+ popupEl.remove();
+
+ if ( appendToBody ) {
+ $document.find('body').append($popup);
+ } else {
+ element.after($popup);
+ }
+
+ scope.$on('$destroy', function() {
+ $popup.remove();
+ element.unbind('keydown', keydown);
+ $document.unbind('click', documentClickBind);
+ });
+ }
+ };
+}])
+
+.directive('datepickerPopupWrap', function() {
+ return {
+ restrict:'EA',
+ replace: true,
+ transclude: true,
+ templateUrl: 'template/datepicker/popup.html',
+ link:function (scope, element, attrs) {
+ element.bind('click', function(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ });
+ }
+ };
+});
+
+angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
+
+.constant('dropdownConfig', {
+ openClass: 'open'
+})
+
+.service('dropdownService', ['$document', '$rootScope', function($document, $rootScope) {
+ var openScope = null;
+
+ this.open = function( dropdownScope ) {
+ if ( !openScope ) {
+ $document.bind('click', closeDropdown);
+ $document.bind('keydown', escapeKeyBind);
+ }
+
+ if ( openScope && openScope !== dropdownScope ) {
+ openScope.isOpen = false;
+ }
+
+ openScope = dropdownScope;
+ };
+
+ this.close = function( dropdownScope ) {
+ if ( openScope === dropdownScope ) {
+ openScope = null;
+ $document.unbind('click', closeDropdown);
+ $document.unbind('keydown', escapeKeyBind);
+ }
+ };
+
+ var closeDropdown = function( evt ) {
+ // This method may still be called during the same mouse event that
+ // unbound this event handler. So check openScope before proceeding.
+ if (!openScope) { return; }
+
+ if( evt && openScope.getAutoClose() === 'disabled' ) { return ; }
+
+ var toggleElement = openScope.getToggleElement();
+ if ( evt && toggleElement && toggleElement[0].contains(evt.target) ) {
+ return;
+ }
+
+ var $element = openScope.getElement();
+ if( evt && openScope.getAutoClose() === 'outsideClick' && $element && $element[0].contains(evt.target) ) {
+ return;
+ }
+
+ openScope.isOpen = false;
+
+ if (!$rootScope.$$phase) {
+ openScope.$apply();
+ }
+ };
+
+ var escapeKeyBind = function( evt ) {
+ if ( evt.which === 27 ) {
+ openScope.focusToggleElement();
+ closeDropdown();
+ }
+ };
+}])
+
+.controller('DropdownController', ['$scope', '$attrs', '$parse', 'dropdownConfig', 'dropdownService', '$animate', '$position', '$document', function($scope, $attrs, $parse, dropdownConfig, dropdownService, $animate, $position, $document) {
+ var self = this,
+ scope = $scope.$new(), // create a child scope so we are not polluting original one
+ openClass = dropdownConfig.openClass,
+ getIsOpen,
+ setIsOpen = angular.noop,
+ toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop,
+ appendToBody = false;
+
+ this.init = function( element ) {
+ self.$element = element;
+
+ if ( $attrs.isOpen ) {
+ getIsOpen = $parse($attrs.isOpen);
+ setIsOpen = getIsOpen.assign;
+
+ $scope.$watch(getIsOpen, function(value) {
+ scope.isOpen = !!value;
+ });
+ }
+
+ appendToBody = angular.isDefined($attrs.dropdownAppendToBody);
+
+ if ( appendToBody && self.dropdownMenu ) {
+ $document.find('body').append( self.dropdownMenu );
+ element.on('$destroy', function handleDestroyEvent() {
+ self.dropdownMenu.remove();
+ });
+ }
+ };
+
+ this.toggle = function( open ) {
+ return scope.isOpen = arguments.length ? !!open : !scope.isOpen;
+ };
+
+ // Allow other directives to watch status
+ this.isOpen = function() {
+ return scope.isOpen;
+ };
+
+ scope.getToggleElement = function() {
+ return self.toggleElement;
+ };
+
+ scope.getAutoClose = function() {
+ return $attrs.autoClose || 'always'; //or 'outsideClick' or 'disabled'
+ };
+
+ scope.getElement = function() {
+ return self.$element;
+ };
+
+ scope.focusToggleElement = function() {
+ if ( self.toggleElement ) {
+ self.toggleElement[0].focus();
+ }
+ };
+
+ scope.$watch('isOpen', function( isOpen, wasOpen ) {
+ if ( appendToBody && self.dropdownMenu ) {
+ var pos = $position.positionElements(self.$element, self.dropdownMenu, 'bottom-left', true);
+ self.dropdownMenu.css({
+ top: pos.top + 'px',
+ left: pos.left + 'px',
+ display: isOpen ? 'block' : 'none'
+ });
+ }
+
+ $animate[isOpen ? 'addClass' : 'removeClass'](self.$element, openClass);
+
+ if ( isOpen ) {
+ scope.focusToggleElement();
+ dropdownService.open( scope );
+ } else {
+ dropdownService.close( scope );
+ }
+
+ setIsOpen($scope, isOpen);
+ if (angular.isDefined(isOpen) && isOpen !== wasOpen) {
+ toggleInvoker($scope, { open: !!isOpen });
+ }
+ });
+
+ $scope.$on('$locationChangeSuccess', function() {
+ scope.isOpen = false;
+ });
+
+ $scope.$on('$destroy', function() {
+ scope.$destroy();
+ });
+}])
+
+.directive('dropdown', function() {
+ return {
+ controller: 'DropdownController',
+ link: function(scope, element, attrs, dropdownCtrl) {
+ dropdownCtrl.init( element );
+ }
+ };
+})
+
+.directive('dropdownMenu', function() {
+ return {
+ restrict: 'AC',
+ require: '?^dropdown',
+ link: function(scope, element, attrs, dropdownCtrl) {
+ if ( !dropdownCtrl ) {
+ return;
+ }
+ dropdownCtrl.dropdownMenu = element;
+ }
+ };
+})
+
+.directive('dropdownToggle', function() {
+ return {
+ require: '?^dropdown',
+ link: function(scope, element, attrs, dropdownCtrl) {
+ if ( !dropdownCtrl ) {
+ return;
+ }
+
+ dropdownCtrl.toggleElement = element;
+
+ var toggleDropdown = function(event) {
+ event.preventDefault();
+
+ if ( !element.hasClass('disabled') && !attrs.disabled ) {
+ scope.$apply(function() {
+ dropdownCtrl.toggle();
+ });
+ }
+ };
+
+ element.bind('click', toggleDropdown);
+
+ // WAI-ARIA
+ element.attr({ 'aria-haspopup': true, 'aria-expanded': false });
+ scope.$watch(dropdownCtrl.isOpen, function( isOpen ) {
+ element.attr('aria-expanded', !!isOpen);
+ });
+
+ scope.$on('$destroy', function() {
+ element.unbind('click', toggleDropdown);
+ });
+ }
+ };
+});
+
+angular.module('ui.bootstrap.modal', [])
+
+/**
+ * A helper, internal data structure that acts as a map but also allows getting / removing
+ * elements in the LIFO order
+ */
+ .factory('$$stackedMap', function () {
+ return {
+ createNew: function () {
+ var stack = [];
+
+ return {
+ add: function (key, value) {
+ stack.push({
+ key: key,
+ value: value
+ });
+ },
+ get: function (key) {
+ for (var i = 0; i < stack.length; i++) {
+ if (key == stack[i].key) {
+ return stack[i];
+ }
+ }
+ },
+ keys: function() {
+ var keys = [];
+ for (var i = 0; i < stack.length; i++) {
+ keys.push(stack[i].key);
+ }
+ return keys;
+ },
+ top: function () {
+ return stack[stack.length - 1];
+ },
+ remove: function (key) {
+ var idx = -1;
+ for (var i = 0; i < stack.length; i++) {
+ if (key == stack[i].key) {
+ idx = i;
+ break;
+ }
+ }
+ return stack.splice(idx, 1)[0];
+ },
+ removeTop: function () {
+ return stack.splice(stack.length - 1, 1)[0];
+ },
+ length: function () {
+ return stack.length;
+ }
+ };
+ }
+ };
+ })
+
+/**
+ * A helper directive for the $modal service. It creates a backdrop element.
+ */
+ .directive('modalBackdrop', ['$timeout', function ($timeout) {
+ return {
+ restrict: 'EA',
+ replace: true,
+ templateUrl: 'template/modal/backdrop.html',
+ compile: function (tElement, tAttrs) {
+ tElement.addClass(tAttrs.backdropClass);
+ return linkFn;
+ }
+ };
+
+ function linkFn(scope, element, attrs) {
+ scope.animate = false;
+
+ //trigger CSS transitions
+ $timeout(function () {
+ scope.animate = true;
+ });
+ }
+ }])
+
+ .directive('modalWindow', ['$modalStack', '$q', function ($modalStack, $q) {
+ return {
+ restrict: 'EA',
+ scope: {
+ index: '@',
+ animate: '='
+ },
+ replace: true,
+ transclude: true,
+ templateUrl: function(tElement, tAttrs) {
+ return tAttrs.templateUrl || 'template/modal/window.html';
+ },
+ link: function (scope, element, attrs) {
+ element.addClass(attrs.windowClass || '');
+ scope.size = attrs.size;
+
+ scope.close = function (evt) {
+ var modal = $modalStack.getTop();
+ if (modal && modal.value.backdrop && modal.value.backdrop != 'static' && (evt.target === evt.currentTarget)) {
+ evt.preventDefault();
+ evt.stopPropagation();
+ $modalStack.dismiss(modal.key, 'backdrop click');
+ }
+ };
+
+ // This property is only added to the scope for the purpose of detecting when this directive is rendered.
+ // We can detect that by using this property in the template associated with this directive and then use
+ // {@link Attribute#$observe} on it. For more details please see {@link TableColumnResize}.
+ scope.$isRendered = true;
+
+ // Deferred object that will be resolved when this modal is render.
+ var modalRenderDeferObj = $q.defer();
+ // Observe function will be called on next digest cycle after compilation, ensuring that the DOM is ready.
+ // In order to use this way of finding whether DOM is ready, we need to observe a scope property used in modal's template.
+ attrs.$observe('modalRender', function (value) {
+ if (value == 'true') {
+ modalRenderDeferObj.resolve();
+ }
+ });
+
+ modalRenderDeferObj.promise.then(function () {
+ // trigger CSS transitions
+ scope.animate = true;
+
+ var inputsWithAutofocus = element[0].querySelectorAll('[autofocus]');
+ /**
+ * Auto-focusing of a freshly-opened modal element causes any child elements
+ * with the autofocus attribute to lose focus. This is an issue on touch
+ * based devices which will show and then hide the onscreen keyboard.
+ * Attempts to refocus the autofocus element via JavaScript will not reopen
+ * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus
+ * the modal element if the modal does not contain an autofocus element.
+ */
+ if (inputsWithAutofocus.length) {
+ inputsWithAutofocus[0].focus();
+ } else {
+ element[0].focus();
+ }
+
+ // Notify {@link $modalStack} that modal is rendered.
+ var modal = $modalStack.getTop();
+ if (modal) {
+ $modalStack.modalRendered(modal.key);
+ }
+ });
+ }
+ };
+ }])
+
+ .directive('modalAnimationClass', [
+ function () {
+ return {
+ compile: function (tElement, tAttrs) {
+ if (tAttrs.modalAnimation) {
+ tElement.addClass(tAttrs.modalAnimationClass);
+ }
+ }
+ };
+ }])
+
+ .directive('modalTransclude', function () {
+ return {
+ link: function($scope, $element, $attrs, controller, $transclude) {
+ $transclude($scope.$parent, function(clone) {
+ $element.empty();
+ $element.append(clone);
+ });
+ }
+ };
+ })
+
+ .factory('$modalStack', ['$animate', '$timeout', '$document', '$compile', '$rootScope', '$$stackedMap',
+ function ($animate, $timeout, $document, $compile, $rootScope, $$stackedMap) {
+
+ var OPENED_MODAL_CLASS = 'modal-open';
+
+ var backdropDomEl, backdropScope;
+ var openedWindows = $$stackedMap.createNew();
+ var $modalStack = {};
+
+ function backdropIndex() {
+ var topBackdropIndex = -1;
+ var opened = openedWindows.keys();
+ for (var i = 0; i < opened.length; i++) {
+ if (openedWindows.get(opened[i]).value.backdrop) {
+ topBackdropIndex = i;
+ }
+ }
+ return topBackdropIndex;
+ }
+
+ $rootScope.$watch(backdropIndex, function(newBackdropIndex){
+ if (backdropScope) {
+ backdropScope.index = newBackdropIndex;
+ }
+ });
+
+ function removeModalWindow(modalInstance) {
+
+ var body = $document.find('body').eq(0);
+ var modalWindow = openedWindows.get(modalInstance).value;
+
+ //clean up the stack
+ openedWindows.remove(modalInstance);
+
+ //remove window DOM element
+ removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {
+ body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0);
+ checkRemoveBackdrop();
+ });
+ }
+
+ function checkRemoveBackdrop() {
+ //remove backdrop if no longer needed
+ if (backdropDomEl && backdropIndex() == -1) {
+ var backdropScopeRef = backdropScope;
+ removeAfterAnimate(backdropDomEl, backdropScope, function () {
+ backdropScopeRef = null;
+ });
+ backdropDomEl = undefined;
+ backdropScope = undefined;
+ }
+ }
+
+ function removeAfterAnimate(domEl, scope, done) {
+ // Closing animation
+ scope.animate = false;
+
+ if (domEl.attr('modal-animation') && $animate.enabled()) {
+ // transition out
+ domEl.one('$animate:close', function closeFn() {
+ $rootScope.$evalAsync(afterAnimating);
+ });
+ } else {
+ // Ensure this call is async
+ $timeout(afterAnimating);
+ }
+
+ function afterAnimating() {
+ if (afterAnimating.done) {
+ return;
+ }
+ afterAnimating.done = true;
+
+ domEl.remove();
+ scope.$destroy();
+ if (done) {
+ done();
+ }
+ }
+ }
+
+ $document.bind('keydown', function (evt) {
+ var modal;
+
+ if (evt.which === 27) {
+ modal = openedWindows.top();
+ if (modal && modal.value.keyboard) {
+ evt.preventDefault();
+ $rootScope.$apply(function () {
+ $modalStack.dismiss(modal.key, 'escape key press');
+ });
+ }
+ }
+ });
+
+ $modalStack.open = function (modalInstance, modal) {
+
+ var modalOpener = $document[0].activeElement;
+
+ openedWindows.add(modalInstance, {
+ deferred: modal.deferred,
+ renderDeferred: modal.renderDeferred,
+ modalScope: modal.scope,
+ backdrop: modal.backdrop,
+ keyboard: modal.keyboard
+ });
+
+ var body = $document.find('body').eq(0),
+ currBackdropIndex = backdropIndex();
+
+ if (currBackdropIndex >= 0 && !backdropDomEl) {
+ backdropScope = $rootScope.$new(true);
+ backdropScope.index = currBackdropIndex;
+ var angularBackgroundDomEl = angular.element('');
+ angularBackgroundDomEl.attr('backdrop-class', modal.backdropClass);
+ if (modal.animation) {
+ angularBackgroundDomEl.attr('modal-animation', 'true');
+ }
+ backdropDomEl = $compile(angularBackgroundDomEl)(backdropScope);
+ body.append(backdropDomEl);
+ }
+
+ var angularDomEl = angular.element('');
+ angularDomEl.attr({
+ 'template-url': modal.windowTemplateUrl,
+ 'window-class': modal.windowClass,
+ 'size': modal.size,
+ 'index': openedWindows.length() - 1,
+ 'animate': 'animate'
+ }).html(modal.content);
+ if (modal.animation) {
+ angularDomEl.attr('modal-animation', 'true');
+ }
+
+ var modalDomEl = $compile(angularDomEl)(modal.scope);
+ openedWindows.top().value.modalDomEl = modalDomEl;
+ openedWindows.top().value.modalOpener = modalOpener;
+ body.append(modalDomEl);
+ body.addClass(OPENED_MODAL_CLASS);
+ };
+
+ function broadcastClosing(modalWindow, resultOrReason, closing) {
+ return !modalWindow.value.modalScope.$broadcast('modal.closing', resultOrReason, closing).defaultPrevented;
+ }
+
+ $modalStack.close = function (modalInstance, result) {
+ var modalWindow = openedWindows.get(modalInstance);
+ if (modalWindow && broadcastClosing(modalWindow, result, true)) {
+ modalWindow.value.deferred.resolve(result);
+ removeModalWindow(modalInstance);
+ modalWindow.value.modalOpener.focus();
+ return true;
+ }
+ return !modalWindow;
+ };
+
+ $modalStack.dismiss = function (modalInstance, reason) {
+ var modalWindow = openedWindows.get(modalInstance);
+ if (modalWindow && broadcastClosing(modalWindow, reason, false)) {
+ modalWindow.value.deferred.reject(reason);
+ removeModalWindow(modalInstance);
+ modalWindow.value.modalOpener.focus();
+ return true;
+ }
+ return !modalWindow;
+ };
+
+ $modalStack.dismissAll = function (reason) {
+ var topModal = this.getTop();
+ while (topModal && this.dismiss(topModal.key, reason)) {
+ topModal = this.getTop();
+ }
+ };
+
+ $modalStack.getTop = function () {
+ return openedWindows.top();
+ };
+
+ $modalStack.modalRendered = function (modalInstance) {
+ var modalWindow = openedWindows.get(modalInstance);
+ if (modalWindow) {
+ modalWindow.value.renderDeferred.resolve();
+ }
+ };
+
+ return $modalStack;
+ }])
+
+ .provider('$modal', function () {
+
+ var $modalProvider = {
+ options: {
+ animation: true,
+ backdrop: true, //can also be false or 'static'
+ keyboard: true
+ },
+ $get: ['$injector', '$rootScope', '$q', '$templateRequest', '$controller', '$modalStack',
+ function ($injector, $rootScope, $q, $templateRequest, $controller, $modalStack) {
+
+ var $modal = {};
+
+ function getTemplatePromise(options) {
+ return options.template ? $q.when(options.template) :
+ $templateRequest(angular.isFunction(options.templateUrl) ? (options.templateUrl)() : options.templateUrl);
+ }
+
+ function getResolvePromises(resolves) {
+ var promisesArr = [];
+ angular.forEach(resolves, function (value) {
+ if (angular.isFunction(value) || angular.isArray(value)) {
+ promisesArr.push($q.when($injector.invoke(value)));
+ }
+ });
+ return promisesArr;
+ }
+
+ $modal.open = function (modalOptions) {
+
+ var modalResultDeferred = $q.defer();
+ var modalOpenedDeferred = $q.defer();
+ var modalRenderDeferred = $q.defer();
+
+ //prepare an instance of a modal to be injected into controllers and returned to a caller
+ var modalInstance = {
+ result: modalResultDeferred.promise,
+ opened: modalOpenedDeferred.promise,
+ rendered: modalRenderDeferred.promise,
+ close: function (result) {
+ return $modalStack.close(modalInstance, result);
+ },
+ dismiss: function (reason) {
+ return $modalStack.dismiss(modalInstance, reason);
+ }
+ };
+
+ //merge and clean up options
+ modalOptions = angular.extend({}, $modalProvider.options, modalOptions);
+ modalOptions.resolve = modalOptions.resolve || {};
+
+ //verify options
+ if (!modalOptions.template && !modalOptions.templateUrl) {
+ throw new Error('One of template or templateUrl options is required.');
+ }
+
+ var templateAndResolvePromise =
+ $q.all([getTemplatePromise(modalOptions)].concat(getResolvePromises(modalOptions.resolve)));
+
+
+ templateAndResolvePromise.then(function resolveSuccess(tplAndVars) {
+
+ var modalScope = (modalOptions.scope || $rootScope).$new();
+ modalScope.$close = modalInstance.close;
+ modalScope.$dismiss = modalInstance.dismiss;
+
+ var ctrlInstance, ctrlLocals = {};
+ var resolveIter = 1;
+
+ //controllers
+ if (modalOptions.controller) {
+ ctrlLocals.$scope = modalScope;
+ ctrlLocals.$modalInstance = modalInstance;
+ angular.forEach(modalOptions.resolve, function (value, key) {
+ ctrlLocals[key] = tplAndVars[resolveIter++];
+ });
+
+ ctrlInstance = $controller(modalOptions.controller, ctrlLocals);
+ if (modalOptions.controllerAs) {
+ modalScope[modalOptions.controllerAs] = ctrlInstance;
+ }
+ }
+
+ $modalStack.open(modalInstance, {
+ scope: modalScope,
+ deferred: modalResultDeferred,
+ renderDeferred: modalRenderDeferred,
+ content: tplAndVars[0],
+ animation: modalOptions.animation,
+ backdrop: modalOptions.backdrop,
+ keyboard: modalOptions.keyboard,
+ backdropClass: modalOptions.backdropClass,
+ windowClass: modalOptions.windowClass,
+ windowTemplateUrl: modalOptions.windowTemplateUrl,
+ size: modalOptions.size
+ });
+
+ }, function resolveError(reason) {
+ modalResultDeferred.reject(reason);
+ });
+
+ templateAndResolvePromise.then(function () {
+ modalOpenedDeferred.resolve(true);
+ }, function (reason) {
+ modalOpenedDeferred.reject(reason);
+ });
+
+ return modalInstance;
+ };
+
+ return $modal;
+ }]
+ };
+
+ return $modalProvider;
+ });
+
+angular.module('ui.bootstrap.pagination', [])
+
+.controller('PaginationController', ['$scope', '$attrs', '$parse', function ($scope, $attrs, $parse) {
+ var self = this,
+ ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
+ setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;
+
+ this.init = function(ngModelCtrl_, config) {
+ ngModelCtrl = ngModelCtrl_;
+ this.config = config;
+
+ ngModelCtrl.$render = function() {
+ self.render();
+ };
+
+ if ($attrs.itemsPerPage) {
+ $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) {
+ self.itemsPerPage = parseInt(value, 10);
+ $scope.totalPages = self.calculateTotalPages();
+ });
+ } else {
+ this.itemsPerPage = config.itemsPerPage;
+ }
+
+ $scope.$watch('totalItems', function() {
+ $scope.totalPages = self.calculateTotalPages();
+ });
+
+ $scope.$watch('totalPages', function(value) {
+ setNumPages($scope.$parent, value); // Readonly variable
+
+ if ( $scope.page > value ) {
+ $scope.selectPage(value);
+ } else {
+ ngModelCtrl.$render();
+ }
+ });
+ };
+
+ this.calculateTotalPages = function() {
+ var totalPages = this.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / this.itemsPerPage);
+ return Math.max(totalPages || 0, 1);
+ };
+
+ this.render = function() {
+ $scope.page = parseInt(ngModelCtrl.$viewValue, 10) || 1;
+ };
+
+ $scope.selectPage = function(page, evt) {
+ if ( $scope.page !== page && page > 0 && page <= $scope.totalPages) {
+ if (evt && evt.target) {
+ evt.target.blur();
+ }
+ ngModelCtrl.$setViewValue(page);
+ ngModelCtrl.$render();
+ }
+ };
+
+ $scope.getText = function( key ) {
+ return $scope[key + 'Text'] || self.config[key + 'Text'];
+ };
+ $scope.noPrevious = function() {
+ return $scope.page === 1;
+ };
+ $scope.noNext = function() {
+ return $scope.page === $scope.totalPages;
+ };
+}])
+
+.constant('paginationConfig', {
+ itemsPerPage: 10,
+ boundaryLinks: false,
+ directionLinks: true,
+ firstText: 'First',
+ previousText: 'Previous',
+ nextText: 'Next',
+ lastText: 'Last',
+ rotate: true
+})
+
+.directive('pagination', ['$parse', 'paginationConfig', function($parse, paginationConfig) {
+ return {
+ restrict: 'EA',
+ scope: {
+ totalItems: '=',
+ firstText: '@',
+ previousText: '@',
+ nextText: '@',
+ lastText: '@'
+ },
+ require: ['pagination', '?ngModel'],
+ controller: 'PaginationController',
+ templateUrl: 'template/pagination/pagination.html',
+ replace: true,
+ link: function(scope, element, attrs, ctrls) {
+ var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+ if (!ngModelCtrl) {
+ return; // do nothing if no ng-model
+ }
+
+ // Setup configuration parameters
+ var maxSize = angular.isDefined(attrs.maxSize) ? scope.$parent.$eval(attrs.maxSize) : paginationConfig.maxSize,
+ rotate = angular.isDefined(attrs.rotate) ? scope.$parent.$eval(attrs.rotate) : paginationConfig.rotate;
+ scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : paginationConfig.boundaryLinks;
+ scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : paginationConfig.directionLinks;
+
+ paginationCtrl.init(ngModelCtrl, paginationConfig);
+
+ if (attrs.maxSize) {
+ scope.$parent.$watch($parse(attrs.maxSize), function(value) {
+ maxSize = parseInt(value, 10);
+ paginationCtrl.render();
+ });
+ }
+
+ // Create page object used in template
+ function makePage(number, text, isActive) {
+ return {
+ number: number,
+ text: text,
+ active: isActive
+ };
+ }
+
+ function getPages(currentPage, totalPages) {
+ var pages = [];
+
+ // Default page limits
+ var startPage = 1, endPage = totalPages;
+ var isMaxSized = ( angular.isDefined(maxSize) && maxSize < totalPages );
+
+ // recompute if maxSize
+ if ( isMaxSized ) {
+ if ( rotate ) {
+ // Current page is displayed in the middle of the visible ones
+ startPage = Math.max(currentPage - Math.floor(maxSize/2), 1);
+ endPage = startPage + maxSize - 1;
+
+ // Adjust if limit is exceeded
+ if (endPage > totalPages) {
+ endPage = totalPages;
+ startPage = endPage - maxSize + 1;
+ }
+ } else {
+ // Visible pages are paginated with maxSize
+ startPage = ((Math.ceil(currentPage / maxSize) - 1) * maxSize) + 1;
+
+ // Adjust last page if limit is exceeded
+ endPage = Math.min(startPage + maxSize - 1, totalPages);
+ }
+ }
+
+ // Add page number links
+ for (var number = startPage; number <= endPage; number++) {
+ var page = makePage(number, number, number === currentPage);
+ pages.push(page);
+ }
+
+ // Add links to move between page sets
+ if ( isMaxSized && ! rotate ) {
+ if ( startPage > 1 ) {
+ var previousPageSet = makePage(startPage - 1, '...', false);
+ pages.unshift(previousPageSet);
+ }
+
+ if ( endPage < totalPages ) {
+ var nextPageSet = makePage(endPage + 1, '...', false);
+ pages.push(nextPageSet);
+ }
+ }
+
+ return pages;
+ }
+
+ var originalRender = paginationCtrl.render;
+ paginationCtrl.render = function() {
+ originalRender();
+ if (scope.page > 0 && scope.page <= scope.totalPages) {
+ scope.pages = getPages(scope.page, scope.totalPages);
+ }
+ };
+ }
+ };
+}])
+
+.constant('pagerConfig', {
+ itemsPerPage: 10,
+ previousText: '« Previous',
+ nextText: 'Next »',
+ align: true
+})
+
+.directive('pager', ['pagerConfig', function(pagerConfig) {
+ return {
+ restrict: 'EA',
+ scope: {
+ totalItems: '=',
+ previousText: '@',
+ nextText: '@'
+ },
+ require: ['pager', '?ngModel'],
+ controller: 'PaginationController',
+ templateUrl: 'template/pagination/pager.html',
+ replace: true,
+ link: function(scope, element, attrs, ctrls) {
+ var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+ if (!ngModelCtrl) {
+ return; // do nothing if no ng-model
+ }
+
+ scope.align = angular.isDefined(attrs.align) ? scope.$parent.$eval(attrs.align) : pagerConfig.align;
+ paginationCtrl.init(ngModelCtrl, pagerConfig);
+ }
+ };
+}]);
+
+/**
+ * The following features are still outstanding: animation as a
+ * function, placement as a function, inside, support for more triggers than
+ * just mouse enter/leave, html tooltips, and selector delegation.
+ */
+angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap.bindHtml' ] )
+
+/**
+ * The $tooltip service creates tooltip- and popover-like directives as well as
+ * houses global options for them.
+ */
+.provider( '$tooltip', function () {
+ // The default options tooltip and popover.
+ var defaultOptions = {
+ placement: 'top',
+ animation: true,
+ popupDelay: 0,
+ useContentExp: false
+ };
+
+ // Default hide triggers for each show trigger
+ var triggerMap = {
+ 'mouseenter': 'mouseleave',
+ 'click': 'click',
+ 'focus': 'blur'
+ };
+
+ // The options specified to the provider globally.
+ var globalOptions = {};
+
+ /**
+ * `options({})` allows global configuration of all tooltips in the
+ * application.
+ *
+ * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {
+ * // place tooltips left instead of top by default
+ * $tooltipProvider.options( { placement: 'left' } );
+ * });
+ */
+ this.options = function( value ) {
+ angular.extend( globalOptions, value );
+ };
+
+ /**
+ * This allows you to extend the set of trigger mappings available. E.g.:
+ *
+ * $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' );
+ */
+ this.setTriggers = function setTriggers ( triggers ) {
+ angular.extend( triggerMap, triggers );
+ };
+
+ /**
+ * This is a helper function for translating camel-case to snake-case.
+ */
+ function snake_case(name){
+ var regexp = /[A-Z]/g;
+ var separator = '-';
+ return name.replace(regexp, function(letter, pos) {
+ return (pos ? separator : '') + letter.toLowerCase();
+ });
+ }
+
+ /**
+ * Returns the actual instance of the $tooltip service.
+ * TODO support multiple triggers
+ */
+ this.$get = [ '$window', '$compile', '$timeout', '$document', '$position', '$interpolate', function ( $window, $compile, $timeout, $document, $position, $interpolate ) {
+ return function $tooltip ( type, prefix, defaultTriggerShow, options ) {
+ options = angular.extend( {}, defaultOptions, globalOptions, options );
+
+ /**
+ * Returns an object of show and hide triggers.
+ *
+ * If a trigger is supplied,
+ * it is used to show the tooltip; otherwise, it will use the `trigger`
+ * option passed to the `$tooltipProvider.options` method; else it will
+ * default to the trigger supplied to this directive factory.
+ *
+ * The hide trigger is based on the show trigger. If the `trigger` option
+ * was passed to the `$tooltipProvider.options` method, it will use the
+ * mapped trigger from `triggerMap` or the passed trigger if the map is
+ * undefined; otherwise, it uses the `triggerMap` value of the show
+ * trigger; else it will just use the show trigger.
+ */
+ function getTriggers ( trigger ) {
+ var show = trigger || options.trigger || defaultTriggerShow;
+ var hide = triggerMap[show] || show;
+ return {
+ show: show,
+ hide: hide
+ };
+ }
+
+ var directiveName = snake_case( type );
+
+ var startSym = $interpolate.startSymbol();
+ var endSym = $interpolate.endSymbol();
+ var template =
+ '
'+
+ '
';
+
+ return {
+ restrict: 'EA',
+ compile: function (tElem, tAttrs) {
+ var tooltipLinker = $compile( template );
+
+ return function link ( scope, element, attrs, tooltipCtrl ) {
+ var tooltip;
+ var tooltipLinkedScope;
+ var transitionTimeout;
+ var popupTimeout;
+ var appendToBody = angular.isDefined( options.appendToBody ) ? options.appendToBody : false;
+ var triggers = getTriggers( undefined );
+ var hasEnableExp = angular.isDefined(attrs[prefix+'Enable']);
+ var ttScope = scope.$new(true);
+
+ var positionTooltip = function () {
+ if (!tooltip) { return; }
+
+ var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);
+ ttPosition.top += 'px';
+ ttPosition.left += 'px';
+
+ // Now set the calculated positioning.
+ tooltip.css( ttPosition );
+ };
+
+ // Set up the correct scope to allow transclusion later
+ ttScope.origScope = scope;
+
+ // By default, the tooltip is not open.
+ // TODO add ability to start tooltip opened
+ ttScope.isOpen = false;
+
+ function toggleTooltipBind () {
+ if ( ! ttScope.isOpen ) {
+ showTooltipBind();
+ } else {
+ hideTooltipBind();
+ }
+ }
+
+ // Show the tooltip with delay if specified, otherwise show it immediately
+ function showTooltipBind() {
+ if(hasEnableExp && !scope.$eval(attrs[prefix+'Enable'])) {
+ return;
+ }
+
+ prepareTooltip();
+
+ if ( ttScope.popupDelay ) {
+ // Do nothing if the tooltip was already scheduled to pop-up.
+ // This happens if show is triggered multiple times before any hide is triggered.
+ if (!popupTimeout) {
+ popupTimeout = $timeout( show, ttScope.popupDelay, false );
+ popupTimeout.then(function(reposition){reposition();});
+ }
+ } else {
+ show()();
+ }
+ }
+
+ function hideTooltipBind () {
+ scope.$apply(function () {
+ hide();
+ });
+ }
+
+ // Show the tooltip popup element.
+ function show() {
+
+ popupTimeout = null;
+
+ // If there is a pending remove transition, we must cancel it, lest the
+ // tooltip be mysteriously removed.
+ if ( transitionTimeout ) {
+ $timeout.cancel( transitionTimeout );
+ transitionTimeout = null;
+ }
+
+ // Don't show empty tooltips.
+ if ( !(options.useContentExp ? ttScope.contentExp() : ttScope.content) ) {
+ return angular.noop;
+ }
+
+ createTooltip();
+
+ // Set the initial positioning.
+ tooltip.css({ top: 0, left: 0, display: 'block' });
+ ttScope.$digest();
+
+ positionTooltip();
+
+ // And show the tooltip.
+ ttScope.isOpen = true;
+ ttScope.$apply(); // digest required as $apply is not called
+
+ // Return positioning function as promise callback for correct
+ // positioning after draw.
+ return positionTooltip;
+ }
+
+ // Hide the tooltip popup element.
+ function hide() {
+ // First things first: we don't show it anymore.
+ ttScope.isOpen = false;
+
+ //if tooltip is going to be shown after delay, we must cancel this
+ $timeout.cancel( popupTimeout );
+ popupTimeout = null;
+
+ // And now we remove it from the DOM. However, if we have animation, we
+ // need to wait for it to expire beforehand.
+ // FIXME: this is a placeholder for a port of the transitions library.
+ if ( ttScope.animation ) {
+ if (!transitionTimeout) {
+ transitionTimeout = $timeout(removeTooltip, 500);
+ }
+ } else {
+ removeTooltip();
+ }
+ }
+
+ function createTooltip() {
+ // There can only be one tooltip element per directive shown at once.
+ if (tooltip) {
+ removeTooltip();
+ }
+ tooltipLinkedScope = ttScope.$new();
+ tooltip = tooltipLinker(tooltipLinkedScope, function (tooltip) {
+ if ( appendToBody ) {
+ $document.find( 'body' ).append( tooltip );
+ } else {
+ element.after( tooltip );
+ }
+ });
+
+ tooltipLinkedScope.$watch(function () {
+ $timeout(positionTooltip, 0, false);
+ });
+
+ if (options.useContentExp) {
+ tooltipLinkedScope.$watch('contentExp()', function (val) {
+ if (!val && ttScope.isOpen ) {
+ hide();
+ }
+ });
+ }
+ }
+
+ function removeTooltip() {
+ transitionTimeout = null;
+ if (tooltip) {
+ tooltip.remove();
+ tooltip = null;
+ }
+ if (tooltipLinkedScope) {
+ tooltipLinkedScope.$destroy();
+ tooltipLinkedScope = null;
+ }
+ }
+
+ function prepareTooltip() {
+ prepPopupClass();
+ prepPlacement();
+ prepPopupDelay();
+ }
+
+ ttScope.contentExp = function () {
+ return scope.$eval(attrs[type]);
+ };
+
+ /**
+ * Observe the relevant attributes.
+ */
+ if (!options.useContentExp) {
+ attrs.$observe( type, function ( val ) {
+ ttScope.content = val;
+
+ if (!val && ttScope.isOpen ) {
+ hide();
+ }
+ });
+ }
+
+ attrs.$observe( 'disabled', function ( val ) {
+ if (val && ttScope.isOpen ) {
+ hide();
+ }
+ });
+
+ attrs.$observe( prefix+'Title', function ( val ) {
+ ttScope.title = val;
+ });
+
+ function prepPopupClass() {
+ ttScope.popupClass = attrs[prefix + 'Class'];
+ }
+
+ function prepPlacement() {
+ var val = attrs[ prefix + 'Placement' ];
+ ttScope.placement = angular.isDefined( val ) ? val : options.placement;
+ }
+
+ function prepPopupDelay() {
+ var val = attrs[ prefix + 'PopupDelay' ];
+ var delay = parseInt( val, 10 );
+ ttScope.popupDelay = ! isNaN(delay) ? delay : options.popupDelay;
+ }
+
+ var unregisterTriggers = function () {
+ element.unbind(triggers.show, showTooltipBind);
+ element.unbind(triggers.hide, hideTooltipBind);
+ };
+
+ function prepTriggers() {
+ var val = attrs[ prefix + 'Trigger' ];
+ unregisterTriggers();
+
+ triggers = getTriggers( val );
+
+ if ( triggers.show === triggers.hide ) {
+ element.bind( triggers.show, toggleTooltipBind );
+ } else {
+ element.bind( triggers.show, showTooltipBind );
+ element.bind( triggers.hide, hideTooltipBind );
+ }
+ }
+ prepTriggers();
+
+ var animation = scope.$eval(attrs[prefix + 'Animation']);
+ ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;
+
+ var appendToBodyVal = scope.$eval(attrs[prefix + 'AppendToBody']);
+ appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;
+
+ // if a tooltip is attached to we need to remove it on
+ // location change as its parent scope will probably not be destroyed
+ // by the change.
+ if ( appendToBody ) {
+ scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess () {
+ if ( ttScope.isOpen ) {
+ hide();
+ }
+ });
+ }
+
+ // Make sure tooltip is destroyed and removed.
+ scope.$on('$destroy', function onDestroyTooltip() {
+ $timeout.cancel( transitionTimeout );
+ $timeout.cancel( popupTimeout );
+ unregisterTriggers();
+ removeTooltip();
+ ttScope = null;
+ });
+ };
+ }
+ };
+ };
+ }];
+})
+
+// This is mostly ngInclude code but with a custom scope
+.directive( 'tooltipTemplateTransclude', [
+ '$animate', '$sce', '$compile', '$templateRequest',
+function ($animate , $sce , $compile , $templateRequest) {
+ return {
+ link: function ( scope, elem, attrs ) {
+ var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);
+
+ var changeCounter = 0,
+ currentScope,
+ previousElement,
+ currentElement;
+
+ var cleanupLastIncludeContent = function() {
+ if (previousElement) {
+ previousElement.remove();
+ previousElement = null;
+ }
+ if (currentScope) {
+ currentScope.$destroy();
+ currentScope = null;
+ }
+ if (currentElement) {
+ $animate.leave(currentElement).then(function() {
+ previousElement = null;
+ });
+ previousElement = currentElement;
+ currentElement = null;
+ }
+ };
+
+ scope.$watch($sce.parseAsResourceUrl(attrs.tooltipTemplateTransclude), function (src) {
+ var thisChangeId = ++changeCounter;
+
+ if (src) {
+ //set the 2nd param to true to ignore the template request error so that the inner
+ //contents and scope can be cleaned up.
+ $templateRequest(src, true).then(function(response) {
+ if (thisChangeId !== changeCounter) { return; }
+ var newScope = origScope.$new();
+ var template = response;
+
+ var clone = $compile(template)(newScope, function(clone) {
+ cleanupLastIncludeContent();
+ $animate.enter(clone, elem);
+ });
+
+ currentScope = newScope;
+ currentElement = clone;
+
+ currentScope.$emit('$includeContentLoaded', src);
+ }, function() {
+ if (thisChangeId === changeCounter) {
+ cleanupLastIncludeContent();
+ scope.$emit('$includeContentError', src);
+ }
+ });
+ scope.$emit('$includeContentRequested', src);
+ } else {
+ cleanupLastIncludeContent();
+ }
+ });
+
+ scope.$on('$destroy', cleanupLastIncludeContent);
+ }
+ };
+}])
+
+/**
+ * Note that it's intentional that these classes are *not* applied through $animate.
+ * They must not be animated as they're expected to be present on the tooltip on
+ * initialization.
+ */
+.directive('tooltipClasses', function () {
+ return {
+ restrict: 'A',
+ link: function (scope, element, attrs) {
+ if (scope.placement) {
+ element.addClass(scope.placement);
+ }
+ if (scope.popupClass) {
+ element.addClass(scope.popupClass);
+ }
+ if (scope.animation()) {
+ element.addClass(attrs.tooltipAnimationClass);
+ }
+ }
+ };
+})
+
+.directive( 'tooltipPopup', function () {
+ return {
+ restrict: 'EA',
+ replace: true,
+ scope: { content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+ templateUrl: 'template/tooltip/tooltip-popup.html'
+ };
+})
+
+.directive( 'tooltip', [ '$tooltip', function ( $tooltip ) {
+ return $tooltip( 'tooltip', 'tooltip', 'mouseenter' );
+}])
+
+.directive( 'tooltipTemplatePopup', function () {
+ return {
+ restrict: 'EA',
+ replace: true,
+ scope: { contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
+ originScope: '&' },
+ templateUrl: 'template/tooltip/tooltip-template-popup.html'
+ };
+})
+
+.directive( 'tooltipTemplate', [ '$tooltip', function ( $tooltip ) {
+ return $tooltip('tooltipTemplate', 'tooltip', 'mouseenter', {
+ useContentExp: true
+ });
+}])
+
+.directive( 'tooltipHtmlPopup', function () {
+ return {
+ restrict: 'EA',
+ replace: true,
+ scope: { contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+ templateUrl: 'template/tooltip/tooltip-html-popup.html'
+ };
+})
+
+.directive( 'tooltipHtml', [ '$tooltip', function ( $tooltip ) {
+ return $tooltip('tooltipHtml', 'tooltip', 'mouseenter', {
+ useContentExp: true
+ });
+}])
+
+/*
+Deprecated
+*/
+.directive( 'tooltipHtmlUnsafePopup', function () {
+ return {
+ restrict: 'EA',
+ replace: true,
+ scope: { content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+ templateUrl: 'template/tooltip/tooltip-html-unsafe-popup.html'
+ };
+})
+
+.value('tooltipHtmlUnsafeSuppressDeprecated', false)
+.directive( 'tooltipHtmlUnsafe', [
+ '$tooltip', 'tooltipHtmlUnsafeSuppressDeprecated', '$log',
+function ( $tooltip , tooltipHtmlUnsafeSuppressDeprecated , $log) {
+ if (!tooltipHtmlUnsafeSuppressDeprecated) {
+ $log.warn('tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead.');
+ }
+ return $tooltip( 'tooltipHtmlUnsafe', 'tooltip', 'mouseenter' );
+}]);
+
+/**
+ * The following features are still outstanding: popup delay, animation as a
+ * function, placement as a function, inside, support for more triggers than
+ * just mouse enter/leave, html popovers, and selector delegatation.
+ */
+angular.module( 'ui.bootstrap.popover', [ 'ui.bootstrap.tooltip' ] )
+
+.directive( 'popoverTemplatePopup', function () {
+ return {
+ restrict: 'EA',
+ replace: true,
+ scope: { title: '@', contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
+ originScope: '&' },
+ templateUrl: 'template/popover/popover-template.html'
+ };
+})
+
+.directive( 'popoverTemplate', [ '$tooltip', function ( $tooltip ) {
+ return $tooltip( 'popoverTemplate', 'popover', 'click', {
+ useContentExp: true
+ } );
+}])
+
+.directive( 'popoverPopup', function () {
+ return {
+ restrict: 'EA',
+ replace: true,
+ scope: { title: '@', content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+ templateUrl: 'template/popover/popover.html'
+ };
+})
+
+.directive( 'popover', [ '$tooltip', function ( $tooltip ) {
+ return $tooltip( 'popover', 'popover', 'click' );
+}]);
+
+angular.module('ui.bootstrap.progressbar', [])
+
+.constant('progressConfig', {
+ animate: true,
+ max: 100
+})
+
+.controller('ProgressController', ['$scope', '$attrs', 'progressConfig', function($scope, $attrs, progressConfig) {
+ var self = this,
+ animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;
+
+ this.bars = [];
+ $scope.max = angular.isDefined($scope.max) ? $scope.max : progressConfig.max;
+
+ this.addBar = function(bar, element) {
+ if ( !animate ) {
+ element.css({'transition': 'none'});
+ }
+
+ this.bars.push(bar);
+
+ bar.$watch('value', function( value ) {
+ bar.percent = +(100 * value / $scope.max).toFixed(2);
+ });
+
+ bar.$on('$destroy', function() {
+ element = null;
+ self.removeBar(bar);
+ });
+ };
+
+ this.removeBar = function(bar) {
+ this.bars.splice(this.bars.indexOf(bar), 1);
+ };
+}])
+
+.directive('progress', function() {
+ return {
+ restrict: 'EA',
+ replace: true,
+ transclude: true,
+ controller: 'ProgressController',
+ require: 'progress',
+ scope: {},
+ templateUrl: 'template/progressbar/progress.html'
+ };
+})
+
+.directive('bar', function() {
+ return {
+ restrict: 'EA',
+ replace: true,
+ transclude: true,
+ require: '^progress',
+ scope: {
+ value: '=',
+ max: '=?',
+ type: '@'
+ },
+ templateUrl: 'template/progressbar/bar.html',
+ link: function(scope, element, attrs, progressCtrl) {
+ progressCtrl.addBar(scope, element);
+ }
+ };
+})
+
+.directive('progressbar', function() {
+ return {
+ restrict: 'EA',
+ replace: true,
+ transclude: true,
+ controller: 'ProgressController',
+ scope: {
+ value: '=',
+ max: '=?',
+ type: '@'
+ },
+ templateUrl: 'template/progressbar/progressbar.html',
+ link: function(scope, element, attrs, progressCtrl) {
+ progressCtrl.addBar(scope, angular.element(element.children()[0]));
+ }
+ };
+});
+
+angular.module('ui.bootstrap.rating', [])
+
+.constant('ratingConfig', {
+ max: 5,
+ stateOn: null,
+ stateOff: null
+})
+
+.controller('RatingController', ['$scope', '$attrs', 'ratingConfig', function($scope, $attrs, ratingConfig) {
+ var ngModelCtrl = { $setViewValue: angular.noop };
+
+ this.init = function(ngModelCtrl_) {
+ ngModelCtrl = ngModelCtrl_;
+ ngModelCtrl.$render = this.render;
+
+ ngModelCtrl.$formatters.push(function(value) {
+ if (angular.isNumber(value) && value << 0 !== value) {
+ value = Math.round(value);
+ }
+ return value;
+ });
+
+ this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;
+ this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;
+
+ var ratingStates = angular.isDefined($attrs.ratingStates) ? $scope.$parent.$eval($attrs.ratingStates) :
+ new Array( angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max );
+ $scope.range = this.buildTemplateObjects(ratingStates);
+ };
+
+ this.buildTemplateObjects = function(states) {
+ for (var i = 0, n = states.length; i < n; i++) {
+ states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff }, states[i]);
+ }
+ return states;
+ };
+
+ $scope.rate = function(value) {
+ if ( !$scope.readonly && value >= 0 && value <= $scope.range.length ) {
+ ngModelCtrl.$setViewValue(value);
+ ngModelCtrl.$render();
+ }
+ };
+
+ $scope.enter = function(value) {
+ if ( !$scope.readonly ) {
+ $scope.value = value;
+ }
+ $scope.onHover({value: value});
+ };
+
+ $scope.reset = function() {
+ $scope.value = ngModelCtrl.$viewValue;
+ $scope.onLeave();
+ };
+
+ $scope.onKeydown = function(evt) {
+ if (/(37|38|39|40)/.test(evt.which)) {
+ evt.preventDefault();
+ evt.stopPropagation();
+ $scope.rate( $scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1) );
+ }
+ };
+
+ this.render = function() {
+ $scope.value = ngModelCtrl.$viewValue;
+ };
+}])
+
+.directive('rating', function() {
+ return {
+ restrict: 'EA',
+ require: ['rating', 'ngModel'],
+ scope: {
+ readonly: '=?',
+ onHover: '&',
+ onLeave: '&'
+ },
+ controller: 'RatingController',
+ templateUrl: 'template/rating/rating.html',
+ replace: true,
+ link: function(scope, element, attrs, ctrls) {
+ var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+ ratingCtrl.init( ngModelCtrl );
+ }
+ };
+});
+
+/**
+ * @ngdoc overview
+ * @name ui.bootstrap.tabs
+ *
+ * @description
+ * AngularJS version of the tabs directive.
+ */
+
+angular.module('ui.bootstrap.tabs', [])
+
+.controller('TabsetController', ['$scope', function TabsetCtrl($scope) {
+ var ctrl = this,
+ tabs = ctrl.tabs = $scope.tabs = [];
+
+ ctrl.select = function(selectedTab) {
+ angular.forEach(tabs, function(tab) {
+ if (tab.active && tab !== selectedTab) {
+ tab.active = false;
+ tab.onDeselect();
+ }
+ });
+ selectedTab.active = true;
+ selectedTab.onSelect();
+ };
+
+ ctrl.addTab = function addTab(tab) {
+ tabs.push(tab);
+ // we can't run the select function on the first tab
+ // since that would select it twice
+ if (tabs.length === 1 && tab.active !== false) {
+ tab.active = true;
+ } else if (tab.active) {
+ ctrl.select(tab);
+ }
+ else {
+ tab.active = false;
+ }
+ };
+
+ ctrl.removeTab = function removeTab(tab) {
+ var index = tabs.indexOf(tab);
+ //Select a new tab if the tab to be removed is selected and not destroyed
+ if (tab.active && tabs.length > 1 && !destroyed) {
+ //If this is the last tab, select the previous tab. else, the next tab.
+ var newActiveIndex = index == tabs.length - 1 ? index - 1 : index + 1;
+ ctrl.select(tabs[newActiveIndex]);
+ }
+ tabs.splice(index, 1);
+ };
+
+ var destroyed;
+ $scope.$on('$destroy', function() {
+ destroyed = true;
+ });
+}])
+
+/**
+ * @ngdoc directive
+ * @name ui.bootstrap.tabs.directive:tabset
+ * @restrict EA
+ *
+ * @description
+ * Tabset is the outer container for the tabs directive
+ *
+ * @param {boolean=} vertical Whether or not to use vertical styling for the tabs.
+ * @param {boolean=} justified Whether or not to use justified styling for the tabs.
+ *
+ * @example
+
+
+
+ First Content!
+ Second Content!
+
+
+
+ First Vertical Content!
+ Second Vertical Content!
+
+
+ First Justified Content!
+ Second Justified Content!
+
+
+
+ */
+.directive('tabset', function() {
+ return {
+ restrict: 'EA',
+ transclude: true,
+ replace: true,
+ scope: {
+ type: '@'
+ },
+ controller: 'TabsetController',
+ templateUrl: 'template/tabs/tabset.html',
+ link: function(scope, element, attrs) {
+ scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false;
+ scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false;
+ }
+ };
+})
+
+/**
+ * @ngdoc directive
+ * @name ui.bootstrap.tabs.directive:tab
+ * @restrict EA
+ *
+ * @param {string=} heading The visible heading, or title, of the tab. Set HTML headings with {@link ui.bootstrap.tabs.directive:tabHeading tabHeading}.
+ * @param {string=} select An expression to evaluate when the tab is selected.
+ * @param {boolean=} active A binding, telling whether or not this tab is selected.
+ * @param {boolean=} disabled A binding, telling whether or not this tab is disabled.
+ *
+ * @description
+ * Creates a tab with a heading and content. Must be placed within a {@link ui.bootstrap.tabs.directive:tabset tabset}.
+ *
+ * @example
+
+
+
+
+ Select item 1, using active binding
+
+
+ Enable/disable item 2, using disabled binding
+
+
+
+ First Tab
+
+ Alert me!
+ Second Tab, with alert callback and html heading!
+
+
+ {{item.content}}
+
+
+
+
+
+ function TabsDemoCtrl($scope) {
+ $scope.items = [
+ { title:"Dynamic Title 1", content:"Dynamic Item 0" },
+ { title:"Dynamic Title 2", content:"Dynamic Item 1", disabled: true }
+ ];
+
+ $scope.alertMe = function() {
+ setTimeout(function() {
+ alert("You've selected the alert tab!");
+ });
+ };
+ };
+
+
+ */
+
+/**
+ * @ngdoc directive
+ * @name ui.bootstrap.tabs.directive:tabHeading
+ * @restrict EA
+ *
+ * @description
+ * Creates an HTML heading for a {@link ui.bootstrap.tabs.directive:tab tab}. Must be placed as a child of a tab element.
+ *
+ * @example
+
+
+
+
+ HTML in my titles?!
+ And some content, too!
+
+
+ Icon heading?!?
+ That's right.
+
+
+
+
+ */
+.directive('tab', ['$parse', '$log', function($parse, $log) {
+ return {
+ require: '^tabset',
+ restrict: 'EA',
+ replace: true,
+ templateUrl: 'template/tabs/tab.html',
+ transclude: true,
+ scope: {
+ active: '=?',
+ heading: '@',
+ onSelect: '&select', //This callback is called in contentHeadingTransclude
+ //once it inserts the tab's content into the dom
+ onDeselect: '&deselect'
+ },
+ controller: function() {
+ //Empty controller so other directives can require being 'under' a tab
+ },
+ compile: function(elm, attrs, transclude) {
+ return function postLink(scope, elm, attrs, tabsetCtrl) {
+ scope.$watch('active', function(active) {
+ if (active) {
+ tabsetCtrl.select(scope);
+ }
+ });
+
+ scope.disabled = false;
+ if ( attrs.disable ) {
+ scope.$parent.$watch($parse(attrs.disable), function(value) {
+ scope.disabled = !! value;
+ });
+ }
+
+ // Deprecation support of "disabled" parameter
+ // fix(tab): IE9 disabled attr renders grey text on enabled tab #2677
+ // This code is duplicated from the lines above to make it easy to remove once
+ // the feature has been completely deprecated
+ if ( attrs.disabled ) {
+ $log.warn('Use of "disabled" attribute has been deprecated, please use "disable"');
+ scope.$parent.$watch($parse(attrs.disabled), function(value) {
+ scope.disabled = !! value;
+ });
+ }
+
+ scope.select = function() {
+ if ( !scope.disabled ) {
+ scope.active = true;
+ }
+ };
+
+ tabsetCtrl.addTab(scope);
+ scope.$on('$destroy', function() {
+ tabsetCtrl.removeTab(scope);
+ });
+
+ //We need to transclude later, once the content container is ready.
+ //when this link happens, we're inside a tab heading.
+ scope.$transcludeFn = transclude;
+ };
+ }
+ };
+}])
+
+.directive('tabHeadingTransclude', [function() {
+ return {
+ restrict: 'A',
+ require: '^tab',
+ link: function(scope, elm, attrs, tabCtrl) {
+ scope.$watch('headingElement', function updateHeadingElement(heading) {
+ if (heading) {
+ elm.html('');
+ elm.append(heading);
+ }
+ });
+ }
+ };
+}])
+
+.directive('tabContentTransclude', function() {
+ return {
+ restrict: 'A',
+ require: '^tabset',
+ link: function(scope, elm, attrs) {
+ var tab = scope.$eval(attrs.tabContentTransclude);
+
+ //Now our tab is ready to be transcluded: both the tab heading area
+ //and the tab content area are loaded. Transclude 'em both.
+ tab.$transcludeFn(tab.$parent, function(contents) {
+ angular.forEach(contents, function(node) {
+ if (isTabHeading(node)) {
+ //Let tabHeadingTransclude know.
+ tab.headingElement = node;
+ } else {
+ elm.append(node);
+ }
+ });
+ });
+ }
+ };
+ function isTabHeading(node) {
+ return node.tagName && (
+ node.hasAttribute('tab-heading') ||
+ node.hasAttribute('data-tab-heading') ||
+ node.tagName.toLowerCase() === 'tab-heading' ||
+ node.tagName.toLowerCase() === 'data-tab-heading'
+ );
+ }
+})
+
+;
+
+angular.module('ui.bootstrap.timepicker', [])
+
+.constant('timepickerConfig', {
+ hourStep: 1,
+ minuteStep: 1,
+ showMeridian: true,
+ meridians: null,
+ readonlyInput: false,
+ mousewheel: true,
+ arrowkeys: true
+})
+
+.controller('TimepickerController', ['$scope', '$attrs', '$parse', '$log', '$locale', 'timepickerConfig', function($scope, $attrs, $parse, $log, $locale, timepickerConfig) {
+ var selected = new Date(),
+ ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
+ meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS;
+
+ this.init = function( ngModelCtrl_, inputs ) {
+ ngModelCtrl = ngModelCtrl_;
+ ngModelCtrl.$render = this.render;
+
+ ngModelCtrl.$formatters.unshift(function (modelValue) {
+ return modelValue ? new Date( modelValue ) : null;
+ });
+
+ var hoursInputEl = inputs.eq(0),
+ minutesInputEl = inputs.eq(1);
+
+ var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;
+ if ( mousewheel ) {
+ this.setupMousewheelEvents( hoursInputEl, minutesInputEl );
+ }
+
+ var arrowkeys = angular.isDefined($attrs.arrowkeys) ? $scope.$parent.$eval($attrs.arrowkeys) : timepickerConfig.arrowkeys;
+ if (arrowkeys) {
+ this.setupArrowkeyEvents( hoursInputEl, minutesInputEl );
+ }
+
+ $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;
+ this.setupInputEvents( hoursInputEl, minutesInputEl );
+ };
+
+ var hourStep = timepickerConfig.hourStep;
+ if ($attrs.hourStep) {
+ $scope.$parent.$watch($parse($attrs.hourStep), function(value) {
+ hourStep = parseInt(value, 10);
+ });
+ }
+
+ var minuteStep = timepickerConfig.minuteStep;
+ if ($attrs.minuteStep) {
+ $scope.$parent.$watch($parse($attrs.minuteStep), function(value) {
+ minuteStep = parseInt(value, 10);
+ });
+ }
+
+ // 12H / 24H mode
+ $scope.showMeridian = timepickerConfig.showMeridian;
+ if ($attrs.showMeridian) {
+ $scope.$parent.$watch($parse($attrs.showMeridian), function(value) {
+ $scope.showMeridian = !!value;
+
+ if ( ngModelCtrl.$error.time ) {
+ // Evaluate from template
+ var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate();
+ if (angular.isDefined( hours ) && angular.isDefined( minutes )) {
+ selected.setHours( hours );
+ refresh();
+ }
+ } else {
+ updateTemplate();
+ }
+ });
+ }
+
+ // Get $scope.hours in 24H mode if valid
+ function getHoursFromTemplate ( ) {
+ var hours = parseInt( $scope.hours, 10 );
+ var valid = ( $scope.showMeridian ) ? (hours > 0 && hours < 13) : (hours >= 0 && hours < 24);
+ if ( !valid ) {
+ return undefined;
+ }
+
+ if ( $scope.showMeridian ) {
+ if ( hours === 12 ) {
+ hours = 0;
+ }
+ if ( $scope.meridian === meridians[1] ) {
+ hours = hours + 12;
+ }
+ }
+ return hours;
+ }
+
+ function getMinutesFromTemplate() {
+ var minutes = parseInt($scope.minutes, 10);
+ return ( minutes >= 0 && minutes < 60 ) ? minutes : undefined;
+ }
+
+ function pad( value ) {
+ return ( angular.isDefined(value) && value.toString().length < 2 ) ? '0' + value : value.toString();
+ }
+
+ // Respond on mousewheel spin
+ this.setupMousewheelEvents = function( hoursInputEl, minutesInputEl ) {
+ var isScrollingUp = function(e) {
+ if (e.originalEvent) {
+ e = e.originalEvent;
+ }
+ //pick correct delta variable depending on event
+ var delta = (e.wheelDelta) ? e.wheelDelta : -e.deltaY;
+ return (e.detail || delta > 0);
+ };
+
+ hoursInputEl.bind('mousewheel wheel', function(e) {
+ $scope.$apply( (isScrollingUp(e)) ? $scope.incrementHours() : $scope.decrementHours() );
+ e.preventDefault();
+ });
+
+ minutesInputEl.bind('mousewheel wheel', function(e) {
+ $scope.$apply( (isScrollingUp(e)) ? $scope.incrementMinutes() : $scope.decrementMinutes() );
+ e.preventDefault();
+ });
+
+ };
+
+ // Respond on up/down arrowkeys
+ this.setupArrowkeyEvents = function( hoursInputEl, minutesInputEl ) {
+ hoursInputEl.bind('keydown', function(e) {
+ if ( e.which === 38 ) { // up
+ e.preventDefault();
+ $scope.incrementHours();
+ $scope.$apply();
+ }
+ else if ( e.which === 40 ) { // down
+ e.preventDefault();
+ $scope.decrementHours();
+ $scope.$apply();
+ }
+ });
+
+ minutesInputEl.bind('keydown', function(e) {
+ if ( e.which === 38 ) { // up
+ e.preventDefault();
+ $scope.incrementMinutes();
+ $scope.$apply();
+ }
+ else if ( e.which === 40 ) { // down
+ e.preventDefault();
+ $scope.decrementMinutes();
+ $scope.$apply();
+ }
+ });
+ };
+
+ this.setupInputEvents = function( hoursInputEl, minutesInputEl ) {
+ if ( $scope.readonlyInput ) {
+ $scope.updateHours = angular.noop;
+ $scope.updateMinutes = angular.noop;
+ return;
+ }
+
+ var invalidate = function(invalidHours, invalidMinutes) {
+ ngModelCtrl.$setViewValue( null );
+ ngModelCtrl.$setValidity('time', false);
+ if (angular.isDefined(invalidHours)) {
+ $scope.invalidHours = invalidHours;
+ }
+ if (angular.isDefined(invalidMinutes)) {
+ $scope.invalidMinutes = invalidMinutes;
+ }
+ };
+
+ $scope.updateHours = function() {
+ var hours = getHoursFromTemplate();
+
+ if ( angular.isDefined(hours) ) {
+ selected.setHours( hours );
+ refresh( 'h' );
+ } else {
+ invalidate(true);
+ }
+ };
+
+ hoursInputEl.bind('blur', function(e) {
+ if ( !$scope.invalidHours && $scope.hours < 10) {
+ $scope.$apply( function() {
+ $scope.hours = pad( $scope.hours );
+ });
+ }
+ });
+
+ $scope.updateMinutes = function() {
+ var minutes = getMinutesFromTemplate();
+
+ if ( angular.isDefined(minutes) ) {
+ selected.setMinutes( minutes );
+ refresh( 'm' );
+ } else {
+ invalidate(undefined, true);
+ }
+ };
+
+ minutesInputEl.bind('blur', function(e) {
+ if ( !$scope.invalidMinutes && $scope.minutes < 10 ) {
+ $scope.$apply( function() {
+ $scope.minutes = pad( $scope.minutes );
+ });
+ }
+ });
+
+ };
+
+ this.render = function() {
+ var date = ngModelCtrl.$viewValue;
+
+ if ( isNaN(date) ) {
+ ngModelCtrl.$setValidity('time', false);
+ $log.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
+ } else {
+ if ( date ) {
+ selected = date;
+ }
+ makeValid();
+ updateTemplate();
+ }
+ };
+
+ // Call internally when we know that model is valid.
+ function refresh( keyboardChange ) {
+ makeValid();
+ ngModelCtrl.$setViewValue( new Date(selected) );
+ updateTemplate( keyboardChange );
+ }
+
+ function makeValid() {
+ ngModelCtrl.$setValidity('time', true);
+ $scope.invalidHours = false;
+ $scope.invalidMinutes = false;
+ }
+
+ function updateTemplate( keyboardChange ) {
+ var hours = selected.getHours(), minutes = selected.getMinutes();
+
+ if ( $scope.showMeridian ) {
+ hours = ( hours === 0 || hours === 12 ) ? 12 : hours % 12; // Convert 24 to 12 hour system
+ }
+
+ $scope.hours = keyboardChange === 'h' ? hours : pad(hours);
+ if (keyboardChange !== 'm') {
+ $scope.minutes = pad(minutes);
+ }
+ $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];
+ }
+
+ function addMinutes( minutes ) {
+ var dt = new Date( selected.getTime() + minutes * 60000 );
+ selected.setHours( dt.getHours(), dt.getMinutes() );
+ refresh();
+ }
+
+ $scope.incrementHours = function() {
+ addMinutes( hourStep * 60 );
+ };
+ $scope.decrementHours = function() {
+ addMinutes( - hourStep * 60 );
+ };
+ $scope.incrementMinutes = function() {
+ addMinutes( minuteStep );
+ };
+ $scope.decrementMinutes = function() {
+ addMinutes( - minuteStep );
+ };
+ $scope.toggleMeridian = function() {
+ addMinutes( 12 * 60 * (( selected.getHours() < 12 ) ? 1 : -1) );
+ };
+}])
+
+.directive('timepicker', function () {
+ return {
+ restrict: 'EA',
+ require: ['timepicker', '?^ngModel'],
+ controller:'TimepickerController',
+ replace: true,
+ scope: {},
+ templateUrl: 'template/timepicker/timepicker.html',
+ link: function(scope, element, attrs, ctrls) {
+ var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+ if ( ngModelCtrl ) {
+ timepickerCtrl.init( ngModelCtrl, element.find('input') );
+ }
+ }
+ };
+});
+
+angular.module('ui.bootstrap.transition', [])
+
+.value('$transitionSuppressDeprecated', false)
+/**
+ * $transition service provides a consistent interface to trigger CSS 3 transitions and to be informed when they complete.
+ * @param {DOMElement} element The DOMElement that will be animated.
+ * @param {string|object|function} trigger The thing that will cause the transition to start:
+ * - As a string, it represents the css class to be added to the element.
+ * - As an object, it represents a hash of style attributes to be applied to the element.
+ * - As a function, it represents a function to be called that will cause the transition to occur.
+ * @return {Promise} A promise that is resolved when the transition finishes.
+ */
+.factory('$transition', [
+ '$q', '$timeout', '$rootScope', '$log', '$transitionSuppressDeprecated',
+function($q , $timeout , $rootScope , $log , $transitionSuppressDeprecated) {
+
+ if (!$transitionSuppressDeprecated) {
+ $log.warn('$transition is now deprecated. Use $animate from ngAnimate instead.');
+ }
+
+ var $transition = function(element, trigger, options) {
+ options = options || {};
+ var deferred = $q.defer();
+ var endEventName = $transition[options.animation ? 'animationEndEventName' : 'transitionEndEventName'];
+
+ var transitionEndHandler = function(event) {
+ $rootScope.$apply(function() {
+ element.unbind(endEventName, transitionEndHandler);
+ deferred.resolve(element);
+ });
+ };
+
+ if (endEventName) {
+ element.bind(endEventName, transitionEndHandler);
+ }
+
+ // Wrap in a timeout to allow the browser time to update the DOM before the transition is to occur
+ $timeout(function() {
+ if ( angular.isString(trigger) ) {
+ element.addClass(trigger);
+ } else if ( angular.isFunction(trigger) ) {
+ trigger(element);
+ } else if ( angular.isObject(trigger) ) {
+ element.css(trigger);
+ }
+ //If browser does not support transitions, instantly resolve
+ if ( !endEventName ) {
+ deferred.resolve(element);
+ }
+ });
+
+ // Add our custom cancel function to the promise that is returned
+ // We can call this if we are about to run a new transition, which we know will prevent this transition from ending,
+ // i.e. it will therefore never raise a transitionEnd event for that transition
+ deferred.promise.cancel = function() {
+ if ( endEventName ) {
+ element.unbind(endEventName, transitionEndHandler);
+ }
+ deferred.reject('Transition cancelled');
+ };
+
+ return deferred.promise;
+ };
+
+ // Work out the name of the transitionEnd event
+ var transElement = document.createElement('trans');
+ var transitionEndEventNames = {
+ 'WebkitTransition': 'webkitTransitionEnd',
+ 'MozTransition': 'transitionend',
+ 'OTransition': 'oTransitionEnd',
+ 'transition': 'transitionend'
+ };
+ var animationEndEventNames = {
+ 'WebkitTransition': 'webkitAnimationEnd',
+ 'MozTransition': 'animationend',
+ 'OTransition': 'oAnimationEnd',
+ 'transition': 'animationend'
+ };
+ function findEndEventName(endEventNames) {
+ for (var name in endEventNames){
+ if (transElement.style[name] !== undefined) {
+ return endEventNames[name];
+ }
+ }
+ }
+ $transition.transitionEndEventName = findEndEventName(transitionEndEventNames);
+ $transition.animationEndEventName = findEndEventName(animationEndEventNames);
+ return $transition;
+}]);
+
+angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap.bindHtml'])
+
+/**
+ * A helper service that can parse typeahead's syntax (string provided by users)
+ * Extracted to a separate service for ease of unit testing
+ */
+ .factory('typeaheadParser', ['$parse', function ($parse) {
+
+ // 00000111000000000000022200000000000000003333333333333330000000000044000
+ var TYPEAHEAD_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;
+
+ return {
+ parse:function (input) {
+
+ var match = input.match(TYPEAHEAD_REGEXP);
+ if (!match) {
+ throw new Error(
+ 'Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_"' +
+ ' but got "' + input + '".');
+ }
+
+ return {
+ itemName:match[3],
+ source:$parse(match[4]),
+ viewMapper:$parse(match[2] || match[1]),
+ modelMapper:$parse(match[1])
+ };
+ }
+ };
+}])
+
+ .directive('typeahead', ['$compile', '$parse', '$q', '$timeout', '$document', '$position', 'typeaheadParser',
+ function ($compile, $parse, $q, $timeout, $document, $position, typeaheadParser) {
+
+ var HOT_KEYS = [9, 13, 27, 38, 40];
+
+ return {
+ require:'ngModel',
+ link:function (originalScope, element, attrs, modelCtrl) {
+
+ //SUPPORTED ATTRIBUTES (OPTIONS)
+
+ //minimal no of characters that needs to be entered before typeahead kicks-in
+ var minSearch = originalScope.$eval(attrs.typeaheadMinLength) || 1;
+
+ //minimal wait time after last character typed before typeahead kicks-in
+ var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;
+
+ //should it restrict model values to the ones selected from the popup only?
+ var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;
+
+ //binding to a variable that indicates if matches are being retrieved asynchronously
+ var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;
+
+ //a callback executed when a match is selected
+ var onSelectCallback = $parse(attrs.typeaheadOnSelect);
+
+ var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;
+
+ var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;
+
+ var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;
+
+ //INTERNAL VARIABLES
+
+ //model setter executed upon match selection
+ var $setModelValue = $parse(attrs.ngModel).assign;
+
+ //expressions used by typeahead
+ var parserResult = typeaheadParser.parse(attrs.typeahead);
+
+ var hasFocus;
+
+ //create a child scope for the typeahead directive so we are not polluting original scope
+ //with typeahead-specific data (matches, query etc.)
+ var scope = originalScope.$new();
+ originalScope.$on('$destroy', function(){
+ scope.$destroy();
+ });
+
+ // WAI-ARIA
+ var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);
+ element.attr({
+ 'aria-autocomplete': 'list',
+ 'aria-expanded': false,
+ 'aria-owns': popupId
+ });
+
+ //pop-up element used to display matches
+ var popUpEl = angular.element('');
+ popUpEl.attr({
+ id: popupId,
+ matches: 'matches',
+ active: 'activeIdx',
+ select: 'select(activeIdx)',
+ query: 'query',
+ position: 'position'
+ });
+ //custom item template
+ if (angular.isDefined(attrs.typeaheadTemplateUrl)) {
+ popUpEl.attr('template-url', attrs.typeaheadTemplateUrl);
+ }
+
+ var resetMatches = function() {
+ scope.matches = [];
+ scope.activeIdx = -1;
+ element.attr('aria-expanded', false);
+ };
+
+ var getMatchId = function(index) {
+ return popupId + '-option-' + index;
+ };
+
+ // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.
+ // This attribute is added or removed automatically when the `activeIdx` changes.
+ scope.$watch('activeIdx', function(index) {
+ if (index < 0) {
+ element.removeAttr('aria-activedescendant');
+ } else {
+ element.attr('aria-activedescendant', getMatchId(index));
+ }
+ });
+
+ var getMatchesAsync = function(inputValue) {
+
+ var locals = {$viewValue: inputValue};
+ isLoadingSetter(originalScope, true);
+ $q.when(parserResult.source(originalScope, locals)).then(function(matches) {
+
+ //it might happen that several async queries were in progress if a user were typing fast
+ //but we are interested only in responses that correspond to the current view value
+ var onCurrentRequest = (inputValue === modelCtrl.$viewValue);
+ if (onCurrentRequest && hasFocus) {
+ if (matches && matches.length > 0) {
+
+ scope.activeIdx = focusFirst ? 0 : -1;
+ scope.matches.length = 0;
+
+ //transform labels
+ for(var i=0; i= minSearch) {
+ if (waitTime > 0) {
+ cancelPreviousTimeout();
+ scheduleSearchWithTimeout(inputValue);
+ } else {
+ getMatchesAsync(inputValue);
+ }
+ } else {
+ isLoadingSetter(originalScope, false);
+ cancelPreviousTimeout();
+ resetMatches();
+ }
+
+ if (isEditable) {
+ return inputValue;
+ } else {
+ if (!inputValue) {
+ // Reset in case user had typed something previously.
+ modelCtrl.$setValidity('editable', true);
+ return inputValue;
+ } else {
+ modelCtrl.$setValidity('editable', false);
+ return undefined;
+ }
+ }
+ });
+
+ modelCtrl.$formatters.push(function (modelValue) {
+
+ var candidateViewValue, emptyViewValue;
+ var locals = {};
+
+ // The validity may be set to false via $parsers (see above) if
+ // the model is restricted to selected values. If the model
+ // is set manually it is considered to be valid.
+ if (!isEditable) {
+ modelCtrl.$setValidity('editable', true);
+ }
+
+ if (inputFormatter) {
+
+ locals.$model = modelValue;
+ return inputFormatter(originalScope, locals);
+
+ } else {
+
+ //it might happen that we don't have enough info to properly render input value
+ //we need to check for this situation and simply return model value if we can't apply custom formatting
+ locals[parserResult.itemName] = modelValue;
+ candidateViewValue = parserResult.viewMapper(originalScope, locals);
+ locals[parserResult.itemName] = undefined;
+ emptyViewValue = parserResult.viewMapper(originalScope, locals);
+
+ return candidateViewValue!== emptyViewValue ? candidateViewValue : modelValue;
+ }
+ });
+
+ scope.select = function (activeIdx) {
+ //called from within the $digest() cycle
+ var locals = {};
+ var model, item;
+
+ locals[parserResult.itemName] = item = scope.matches[activeIdx].model;
+ model = parserResult.modelMapper(originalScope, locals);
+ $setModelValue(originalScope, model);
+ modelCtrl.$setValidity('editable', true);
+ modelCtrl.$setValidity('parse', true);
+
+ onSelectCallback(originalScope, {
+ $item: item,
+ $model: model,
+ $label: parserResult.viewMapper(originalScope, locals)
+ });
+
+ resetMatches();
+
+ //return focus to the input element if a match was selected via a mouse click event
+ // use timeout to avoid $rootScope:inprog error
+ $timeout(function() { element[0].focus(); }, 0, false);
+ };
+
+ //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)
+ element.bind('keydown', function (evt) {
+
+ //typeahead is open and an "interesting" key was pressed
+ if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {
+ return;
+ }
+
+ // if there's nothing selected (i.e. focusFirst) and enter is hit, don't do anything
+ if (scope.activeIdx == -1 && (evt.which === 13 || evt.which === 9)) {
+ return;
+ }
+
+ evt.preventDefault();
+
+ if (evt.which === 40) {
+ scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
+ scope.$digest();
+
+ } else if (evt.which === 38) {
+ scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;
+ scope.$digest();
+
+ } else if (evt.which === 13 || evt.which === 9) {
+ scope.$apply(function () {
+ scope.select(scope.activeIdx);
+ });
+
+ } else if (evt.which === 27) {
+ evt.stopPropagation();
+
+ resetMatches();
+ scope.$digest();
+ }
+ });
+
+ element.bind('blur', function (evt) {
+ hasFocus = false;
+ });
+
+ // Keep reference to click handler to unbind it.
+ var dismissClickHandler = function (evt) {
+ if (element[0] !== evt.target) {
+ resetMatches();
+ scope.$digest();
+ }
+ };
+
+ $document.bind('click', dismissClickHandler);
+
+ originalScope.$on('$destroy', function(){
+ $document.unbind('click', dismissClickHandler);
+ if (appendToBody) {
+ $popup.remove();
+ }
+ // Prevent jQuery cache memory leak
+ popUpEl.remove();
+ });
+
+ var $popup = $compile(popUpEl)(scope);
+
+ if (appendToBody) {
+ $document.find('body').append($popup);
+ } else {
+ element.after($popup);
+ }
+ }
+ };
+
+}])
+
+ .directive('typeaheadPopup', function () {
+ return {
+ restrict:'EA',
+ scope:{
+ matches:'=',
+ query:'=',
+ active:'=',
+ position:'=',
+ select:'&'
+ },
+ replace:true,
+ templateUrl:'template/typeahead/typeahead-popup.html',
+ link:function (scope, element, attrs) {
+
+ scope.templateUrl = attrs.templateUrl;
+
+ scope.isOpen = function () {
+ return scope.matches.length > 0;
+ };
+
+ scope.isActive = function (matchIdx) {
+ return scope.active == matchIdx;
+ };
+
+ scope.selectActive = function (matchIdx) {
+ scope.active = matchIdx;
+ };
+
+ scope.selectMatch = function (activeIdx) {
+ scope.select({activeIdx:activeIdx});
+ };
+ }
+ };
+ })
+
+ .directive('typeaheadMatch', ['$templateRequest', '$compile', '$parse', function ($templateRequest, $compile, $parse) {
+ return {
+ restrict:'EA',
+ scope:{
+ index:'=',
+ match:'=',
+ query:'='
+ },
+ link:function (scope, element, attrs) {
+ var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'template/typeahead/typeahead-match.html';
+ $templateRequest(tplUrl).then(function(tplContent) {
+ $compile(tplContent.trim())(scope, function(clonedElement){
+ element.replaceWith(clonedElement);
+ });
+ });
+ }
+ };
+ }])
+
+ .filter('typeaheadHighlight', function() {
+
+ function escapeRegexp(queryToEscape) {
+ return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
+ }
+
+ return function(matchItem, query) {
+ return query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem;
+ };
+ });
+!angular.$$csp() && angular.element(document).find('head').prepend('');
\ No newline at end of file
diff --git a/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap.min.js b/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap.min.js
new file mode 100644
index 000000000..c3f5c2403
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular-bootstrap/ui-bootstrap.min.js
@@ -0,0 +1,9 @@
+/*
+ * angular-ui-bootstrap
+ * http://angular-ui.github.io/bootstrap/
+
+ * Version: 0.13.0 - 2015-05-02
+ * License: MIT
+ */
+angular.module("ui.bootstrap",["ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.transition","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.collapse",[]).directive("collapse",["$animate",function(a){return{link:function(b,c,d){function e(){c.removeClass("collapse").addClass("collapsing"),a.addClass(c,"in",{to:{height:c[0].scrollHeight+"px"}}).then(f)}function f(){c.removeClass("collapsing"),c.css({height:"auto"})}function g(){c.css({height:c[0].scrollHeight+"px"}).removeClass("collapse").addClass("collapsing"),a.removeClass(c,"in",{to:{height:"0"}}).then(h)}function h(){c.css({height:"0"}),c.removeClass("collapsing"),c.addClass("collapse")}b.$watch(d.collapse,function(a){a?g():e()})}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("accordionConfig",{closeOthers:!0}).controller("AccordionController",["$scope","$attrs","accordionConfig",function(a,b,c){this.groups=[],this.closeOthers=function(d){var e=angular.isDefined(b.closeOthers)?a.$eval(b.closeOthers):c.closeOthers;e&&angular.forEach(this.groups,function(a){a!==d&&(a.isOpen=!1)})},this.addGroup=function(a){var b=this;this.groups.push(a),a.$on("$destroy",function(){b.removeGroup(a)})},this.removeGroup=function(a){var b=this.groups.indexOf(a);-1!==b&&this.groups.splice(b,1)}}]).directive("accordion",function(){return{restrict:"EA",controller:"AccordionController",transclude:!0,replace:!1,templateUrl:"template/accordion/accordion.html"}}).directive("accordionGroup",function(){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/accordion/accordion-group.html",scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(a){this.heading=a}},link:function(a,b,c,d){d.addGroup(a),a.$watch("isOpen",function(b){b&&d.closeOthers(a)}),a.toggleOpen=function(){a.isDisabled||(a.isOpen=!a.isOpen)}}}}).directive("accordionHeading",function(){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",link:function(a,b,c,d,e){d.setHeading(e(a,angular.noop))}}}).directive("accordionTransclude",function(){return{require:"^accordionGroup",link:function(a,b,c,d){a.$watch(function(){return d[c.accordionTransclude]},function(a){a&&(b.html(""),b.append(a))})}}}),angular.module("ui.bootstrap.alert",[]).controller("AlertController",["$scope","$attrs",function(a,b){a.closeable="close"in b,this.close=a.close}]).directive("alert",function(){return{restrict:"EA",controller:"AlertController",templateUrl:"template/alert/alert.html",transclude:!0,replace:!0,scope:{type:"@",close:"&"}}}).directive("dismissOnTimeout",["$timeout",function(a){return{require:"alert",link:function(b,c,d,e){a(function(){e.close()},parseInt(d.dismissOnTimeout,10))}}}]),angular.module("ui.bootstrap.bindHtml",[]).directive("bindHtmlUnsafe",function(){return function(a,b,c){b.addClass("ng-binding").data("$binding",c.bindHtmlUnsafe),a.$watch(c.bindHtmlUnsafe,function(a){b.html(a||"")})}}),angular.module("ui.bootstrap.buttons",[]).constant("buttonConfig",{activeClass:"active",toggleEvent:"click"}).controller("ButtonsController",["buttonConfig",function(a){this.activeClass=a.activeClass||"active",this.toggleEvent=a.toggleEvent||"click"}]).directive("btnRadio",function(){return{require:["btnRadio","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){var e=d[0],f=d[1];f.$render=function(){b.toggleClass(e.activeClass,angular.equals(f.$modelValue,a.$eval(c.btnRadio)))},b.bind(e.toggleEvent,function(){var d=b.hasClass(e.activeClass);(!d||angular.isDefined(c.uncheckable))&&a.$apply(function(){f.$setViewValue(d?null:a.$eval(c.btnRadio)),f.$render()})})}}}).directive("btnCheckbox",function(){return{require:["btnCheckbox","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){function e(){return g(c.btnCheckboxTrue,!0)}function f(){return g(c.btnCheckboxFalse,!1)}function g(b,c){var d=a.$eval(b);return angular.isDefined(d)?d:c}var h=d[0],i=d[1];i.$render=function(){b.toggleClass(h.activeClass,angular.equals(i.$modelValue,e()))},b.bind(h.toggleEvent,function(){a.$apply(function(){i.$setViewValue(b.hasClass(h.activeClass)?f():e()),i.$render()})})}}}),angular.module("ui.bootstrap.carousel",[]).controller("CarouselController",["$scope","$interval","$animate",function(a,b,c){function d(a){if(angular.isUndefined(k[a].index))return k[a];{var b;k.length}for(b=0;b0&&(h=b(g,c))}function f(){h&&(b.cancel(h),h=null)}function g(){var b=+a.interval;i&&!isNaN(b)&&b>0?a.next():a.pause()}var h,i,j=this,k=j.slides=a.slides=[],l=-1;j.currentSlide=null;var m=!1;j.select=a.select=function(b,d){function f(){m||(angular.extend(b,{direction:d,active:!0}),angular.extend(j.currentSlide||{},{direction:d,active:!1}),c.enabled()&&!a.noTransition&&b.$element&&(a.$currentTransition=!0,b.$element.one("$animate:close",function(){a.$currentTransition=null})),j.currentSlide=b,l=g,e())}var g=j.indexOfSlide(b);void 0===d&&(d=g>j.getCurrentIndex()?"next":"prev"),b&&b!==j.currentSlide&&f()},a.$on("$destroy",function(){m=!0}),j.getCurrentIndex=function(){return j.currentSlide&&angular.isDefined(j.currentSlide.index)?+j.currentSlide.index:l},j.indexOfSlide=function(a){return angular.isDefined(a.index)?+a.index:k.indexOf(a)},a.next=function(){var b=(j.getCurrentIndex()+1)%k.length;return a.$currentTransition?void 0:j.select(d(b),"next")},a.prev=function(){var b=j.getCurrentIndex()-1<0?k.length-1:j.getCurrentIndex()-1;return a.$currentTransition?void 0:j.select(d(b),"prev")},a.isActive=function(a){return j.currentSlide===a},a.$watch("interval",e),a.$on("$destroy",f),a.play=function(){i||(i=!0,e())},a.pause=function(){a.noPause||(i=!1,f())},j.addSlide=function(b,c){b.$element=c,k.push(b),1===k.length||b.active?(j.select(k[k.length-1]),1==k.length&&a.play()):b.active=!1},j.removeSlide=function(a){angular.isDefined(a.index)&&k.sort(function(a,b){return+a.index>+b.index});var b=k.indexOf(a);k.splice(b,1),k.length>0&&a.active?j.select(b>=k.length?k[b-1]:k[b]):l>b&&l--}}]).directive("carousel",[function(){return{restrict:"EA",transclude:!0,replace:!0,controller:"CarouselController",require:"carousel",templateUrl:"template/carousel/carousel.html",scope:{interval:"=",noTransition:"=",noPause:"="}}}]).directive("slide",function(){return{require:"^carousel",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/carousel/slide.html",scope:{active:"=?",index:"=?"},link:function(a,b,c,d){d.addSlide(a,b),a.$on("$destroy",function(){d.removeSlide(a)}),a.$watch("active",function(b){b&&d.select(a)})}}}).animation(".item",["$animate",function(a){return{beforeAddClass:function(b,c,d){if("active"==c&&b.parent()&&!b.parent().scope().noTransition){var e=!1,f=b.isolateScope().direction,g="next"==f?"left":"right";return b.addClass(f),a.addClass(b,g).then(function(){e||b.removeClass(g+" "+f),d()}),function(){e=!0}}d()},beforeRemoveClass:function(b,c,d){if("active"==c&&b.parent()&&!b.parent().scope().noTransition){var e=!1,f=b.isolateScope().direction,g="next"==f?"left":"right";return a.addClass(b,g).then(function(){e||b.removeClass(g),d()}),function(){e=!0}}d()}}}]),angular.module("ui.bootstrap.dateparser",[]).service("dateParser",["$locale","orderByFilter",function(a,b){function c(a){var c=[],d=a.split("");return angular.forEach(f,function(b,e){var f=a.indexOf(e);if(f>-1){a=a.split(""),d[f]="("+b.regex+")",a[f]="$";for(var g=f+1,h=f+e.length;h>g;g++)d[g]="",a[g]="$";a=a.join(""),c.push({index:f,apply:b.apply})}}),{regex:new RegExp("^"+d.join("")+"$"),map:b(c,"index")}}function d(a,b,c){return 1>c?!1:1===b&&c>28?29===c&&(a%4===0&&a%100!==0||a%400===0):3===b||5===b||8===b||10===b?31>c:!0}var e=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;this.parsers={};var f={yyyy:{regex:"\\d{4}",apply:function(a){this.year=+a}},yy:{regex:"\\d{2}",apply:function(a){this.year=+a+2e3}},y:{regex:"\\d{1,4}",apply:function(a){this.year=+a}},MMMM:{regex:a.DATETIME_FORMATS.MONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.MONTH.indexOf(b)}},MMM:{regex:a.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.SHORTMONTH.indexOf(b)}},MM:{regex:"0[1-9]|1[0-2]",apply:function(a){this.month=a-1}},M:{regex:"[1-9]|1[0-2]",apply:function(a){this.month=a-1}},dd:{regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},d:{regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},EEEE:{regex:a.DATETIME_FORMATS.DAY.join("|")},EEE:{regex:a.DATETIME_FORMATS.SHORTDAY.join("|")},HH:{regex:"(?:0|1)[0-9]|2[0-3]",apply:function(a){this.hours=+a}},H:{regex:"1?[0-9]|2[0-3]",apply:function(a){this.hours=+a}},mm:{regex:"[0-5][0-9]",apply:function(a){this.minutes=+a}},m:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.minutes=+a}},sss:{regex:"[0-9][0-9][0-9]",apply:function(a){this.milliseconds=+a}},ss:{regex:"[0-5][0-9]",apply:function(a){this.seconds=+a}},s:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.seconds=+a}}};this.parse=function(b,f,g){if(!angular.isString(b)||!f)return b;f=a.DATETIME_FORMATS[f]||f,f=f.replace(e,"\\$&"),this.parsers[f]||(this.parsers[f]=c(f));var h=this.parsers[f],i=h.regex,j=h.map,k=b.match(i);if(k&&k.length){var l,m;l=g?{year:g.getFullYear(),month:g.getMonth(),date:g.getDate(),hours:g.getHours(),minutes:g.getMinutes(),seconds:g.getSeconds(),milliseconds:g.getMilliseconds()}:{year:1900,month:0,date:1,hours:0,minutes:0,seconds:0,milliseconds:0};for(var n=1,o=k.length;o>n;n++){var p=j[n-1];p.apply&&p.apply.call(l,k[n])}return d(l.year,l.month,l.date)&&(m=new Date(l.year,l.month,l.date,l.hours,l.minutes,l.seconds,l.milliseconds||0)),m}}}]),angular.module("ui.bootstrap.position",[]).factory("$position",["$document","$window",function(a,b){function c(a,c){return a.currentStyle?a.currentStyle[c]:b.getComputedStyle?b.getComputedStyle(a)[c]:a.style[c]}function d(a){return"static"===(c(a,"position")||"static")}var e=function(b){for(var c=a[0],e=b.offsetParent||c;e&&e!==c&&d(e);)e=e.offsetParent;return e||c};return{position:function(b){var c=this.offset(b),d={top:0,left:0},f=e(b[0]);f!=a[0]&&(d=this.offset(angular.element(f)),d.top+=f.clientTop-f.scrollTop,d.left+=f.clientLeft-f.scrollLeft);var g=b[0].getBoundingClientRect();return{width:g.width||b.prop("offsetWidth"),height:g.height||b.prop("offsetHeight"),top:c.top-d.top,left:c.left-d.left}},offset:function(c){var d=c[0].getBoundingClientRect();return{width:d.width||c.prop("offsetWidth"),height:d.height||c.prop("offsetHeight"),top:d.top+(b.pageYOffset||a[0].documentElement.scrollTop),left:d.left+(b.pageXOffset||a[0].documentElement.scrollLeft)}},positionElements:function(a,b,c,d){var e,f,g,h,i=c.split("-"),j=i[0],k=i[1]||"center";e=d?this.offset(a):this.position(a),f=b.prop("offsetWidth"),g=b.prop("offsetHeight");var l={center:function(){return e.left+e.width/2-f/2},left:function(){return e.left},right:function(){return e.left+e.width}},m={center:function(){return e.top+e.height/2-g/2},top:function(){return e.top},bottom:function(){return e.top+e.height}};switch(j){case"right":h={top:m[k](),left:l[j]()};break;case"left":h={top:m[k](),left:e.left-f};break;case"bottom":h={top:m[j](),left:l[k]()};break;default:h={top:e.top-g,left:l[k]()}}return h}}}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.position"]).constant("datepickerConfig",{formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",datepickerMode:"day",minMode:"day",maxMode:"year",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null,shortcutPropagation:!1}).controller("DatepickerController",["$scope","$attrs","$parse","$interpolate","$timeout","$log","dateFilter","datepickerConfig",function(a,b,c,d,e,f,g,h){var i=this,j={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","minMode","maxMode","showWeeks","startingDay","yearRange","shortcutPropagation"],function(c,e){i[c]=angular.isDefined(b[c])?8>e?d(b[c])(a.$parent):a.$parent.$eval(b[c]):h[c]}),angular.forEach(["minDate","maxDate"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){i[d]=a?new Date(a):null,i.refreshView()}):i[d]=h[d]?new Date(h[d]):null}),a.datepickerMode=a.datepickerMode||h.datepickerMode,a.maxMode=i.maxMode,a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),angular.isDefined(b.initDate)?(this.activeDate=a.$parent.$eval(b.initDate)||new Date,a.$parent.$watch(b.initDate,function(a){a&&(j.$isEmpty(j.$modelValue)||j.$invalid)&&(i.activeDate=a,i.refreshView())})):this.activeDate=new Date,a.isActive=function(b){return 0===i.compare(b.date,i.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(a){j=a,j.$render=function(){i.render()}},this.render=function(){if(j.$viewValue){var a=new Date(j.$viewValue),b=!isNaN(a);b?this.activeDate=a:f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'),j.$setValidity("date",b)}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=j.$viewValue?new Date(j.$viewValue):null;j.$setValidity("date-disabled",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(a,b){var c=j.$viewValue?new Date(j.$viewValue):null;return{date:a,label:g(a,b),selected:c&&0===this.compare(a,c),disabled:this.isDisabled(a),current:0===this.compare(a,new Date),customClass:this.customClass(a)}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.customClass=function(b){return a.customClass({date:b,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},a.select=function(b){if(a.datepickerMode===i.minMode){var c=j.$viewValue?new Date(j.$viewValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),j.$setViewValue(c),j.$render()}else i.activeDate=b,a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=i.activeDate.getFullYear()+a*(i.step.years||0),c=i.activeDate.getMonth()+a*(i.step.months||0);i.activeDate.setFullYear(b,c,1),i.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===i.maxMode&&1===b||a.datepickerMode===i.minMode&&-1===b||(a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)+b])},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var k=function(){e(function(){i.element[0].focus()},0,!1)};a.$on("datepicker.focus",k),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),i.shortcutPropagation||b.stopPropagation(),"enter"===c||"space"===c){if(i.isDisabled(i.activeDate))return;a.select(i.activeDate),k()}else!b.ctrlKey||"up"!==c&&"down"!==c?(i.handleKeyDown(c,b),i.refreshView()):(a.toggleMode("up"===c?1:-1),k())}}]).directive("datepicker",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/datepicker.html",scope:{datepickerMode:"=?",dateDisabled:"&",customClass:"&",shortcutPropagation:"&?"},require:["datepicker","?^ngModel"],controller:"DatepickerController",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f)}}}).directive("daypicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/day.html",require:"^datepicker",link:function(b,c,d,e){function f(a,b){return 1!==b||a%4!==0||a%100===0&&a%400!==0?i[b]:29}function g(a,b){var c=new Array(b),d=new Date(a),e=0;for(d.setHours(12);b>e;)c[e++]=new Date(d),d.setDate(d.getDate()+1);return c}function h(a){var b=new Date(a);b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1}b.showWeeks=e.showWeeks,e.step={months:1},e.element=c;var i=[31,28,31,30,31,30,31,31,30,31,30,31];e._refreshView=function(){var c=e.activeDate.getFullYear(),d=e.activeDate.getMonth(),f=new Date(c,d,1),i=e.startingDay-f.getDay(),j=i>0?7-i:-i,k=new Date(f);j>0&&k.setDate(-j+1);for(var l=g(k,42),m=0;42>m;m++)l[m]=angular.extend(e.createDateObject(l[m],e.formatDay),{secondary:l[m].getMonth()!==d,uid:b.uniqueId+"-"+m});b.labels=new Array(7);for(var n=0;7>n;n++)b.labels[n]={abbr:a(l[n].date,e.formatDayHeader),full:a(l[n].date,"EEEE")};if(b.title=a(e.activeDate,e.formatDayTitle),b.rows=e.split(l,7),b.showWeeks){b.weekNumbers=[];for(var o=(11-e.startingDay)%7,p=b.rows.length,q=0;p>q;q++)b.weekNumbers.push(h(b.rows[q][o].date))}},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth(),a.getDate())-new Date(b.getFullYear(),b.getMonth(),b.getDate())},e.handleKeyDown=function(a){var b=e.activeDate.getDate();if("left"===a)b-=1;else if("up"===a)b-=7;else if("right"===a)b+=1;else if("down"===a)b+=7;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getMonth()+("pageup"===a?-1:1);e.activeDate.setMonth(c,1),b=Math.min(f(e.activeDate.getFullYear(),e.activeDate.getMonth()),b)}else"home"===a?b=1:"end"===a&&(b=f(e.activeDate.getFullYear(),e.activeDate.getMonth()));e.activeDate.setDate(b)},e.refreshView()}}}]).directive("monthpicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/month.html",require:"^datepicker",link:function(b,c,d,e){e.step={years:1},e.element=c,e._refreshView=function(){for(var c=new Array(12),d=e.activeDate.getFullYear(),f=0;12>f;f++)c[f]=angular.extend(e.createDateObject(new Date(d,f,1),e.formatMonth),{uid:b.uniqueId+"-"+f});b.title=a(e.activeDate,e.formatMonthTitle),b.rows=e.split(c,3)},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth())-new Date(b.getFullYear(),b.getMonth())},e.handleKeyDown=function(a){var b=e.activeDate.getMonth();if("left"===a)b-=1;else if("up"===a)b-=3;else if("right"===a)b+=1;else if("down"===a)b+=3;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getFullYear()+("pageup"===a?-1:1);e.activeDate.setFullYear(c)}else"home"===a?b=0:"end"===a&&(b=11);e.activeDate.setMonth(b)},e.refreshView()}}}]).directive("yearpicker",["dateFilter",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/year.html",require:"^datepicker",link:function(a,b,c,d){function e(a){return parseInt((a-1)/f,10)*f+1}var f=d.yearRange;d.step={years:f},d.element=b,d._refreshView=function(){for(var b=new Array(f),c=0,g=e(d.activeDate.getFullYear());f>c;c++)b[c]=angular.extend(d.createDateObject(new Date(g+c,0,1),d.formatYear),{uid:a.uniqueId+"-"+c});a.title=[b[0].label,b[f-1].label].join(" - "),a.rows=d.split(b,5)},d.compare=function(a,b){return a.getFullYear()-b.getFullYear()},d.handleKeyDown=function(a){var b=d.activeDate.getFullYear();"left"===a?b-=1:"up"===a?b-=5:"right"===a?b+=1:"down"===a?b+=5:"pageup"===a||"pagedown"===a?b+=("pageup"===a?-1:1)*d.step.years:"home"===a?b=e(d.activeDate.getFullYear()):"end"===a&&(b=e(d.activeDate.getFullYear())+f-1),d.activeDate.setFullYear(b)},d.refreshView()}}}]).constant("datepickerPopupConfig",{datepickerPopup:"yyyy-MM-dd",html5Types:{date:"yyyy-MM-dd","datetime-local":"yyyy-MM-ddTHH:mm:ss.sss",month:"yyyy-MM"},currentText:"Today",clearText:"Clear",closeText:"Done",closeOnDateSelection:!0,appendToBody:!1,showButtonBar:!0}).directive("datepickerPopup",["$compile","$parse","$document","$position","dateFilter","dateParser","datepickerPopupConfig",function(a,b,c,d,e,f,g){return{restrict:"EA",require:"ngModel",scope:{isOpen:"=?",currentText:"@",clearText:"@",closeText:"@",dateDisabled:"&",customClass:"&"},link:function(h,i,j,k){function l(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function m(a){if(angular.isNumber(a)&&(a=new Date(a)),a){if(angular.isDate(a)&&!isNaN(a))return a;if(angular.isString(a)){var b=f.parse(a,o,h.date)||new Date(a);return isNaN(b)?void 0:b}return void 0}return null}function n(a,b){var c=a||b;if(angular.isNumber(c)&&(c=new Date(c)),c){if(angular.isDate(c)&&!isNaN(c))return!0;if(angular.isString(c)){var d=f.parse(c,o)||new Date(c);return!isNaN(d)}return!1}return!0}var o,p=angular.isDefined(j.closeOnDateSelection)?h.$parent.$eval(j.closeOnDateSelection):g.closeOnDateSelection,q=angular.isDefined(j.datepickerAppendToBody)?h.$parent.$eval(j.datepickerAppendToBody):g.appendToBody;h.showButtonBar=angular.isDefined(j.showButtonBar)?h.$parent.$eval(j.showButtonBar):g.showButtonBar,h.getText=function(a){return h[a+"Text"]||g[a+"Text"]};var r=!1;if(g.html5Types[j.type]?(o=g.html5Types[j.type],r=!0):(o=j.datepickerPopup||g.datepickerPopup,j.$observe("datepickerPopup",function(a){var b=a||g.datepickerPopup;if(b!==o&&(o=b,k.$modelValue=null,!o))throw new Error("datepickerPopup must have a date format specified.")})),!o)throw new Error("datepickerPopup must have a date format specified.");if(r&&j.datepickerPopup)throw new Error("HTML5 date input types do not support custom formats.");var s=angular.element("
");s.attr({"ng-model":"date","ng-change":"dateSelection()"});var t=angular.element(s.children()[0]);if(r&&"month"==j.type&&(t.attr("datepicker-mode",'"month"'),t.attr("min-mode","month")),j.datepickerOptions){var u=h.$parent.$eval(j.datepickerOptions);u.initDate&&(h.initDate=u.initDate,t.attr("init-date","initDate"),delete u.initDate),angular.forEach(u,function(a,b){t.attr(l(b),a)})}h.watchData={},angular.forEach(["minDate","maxDate","datepickerMode","initDate","shortcutPropagation"],function(a){if(j[a]){var c=b(j[a]);if(h.$parent.$watch(c,function(b){h.watchData[a]=b}),t.attr(l(a),"watchData."+a),"datepickerMode"===a){var d=c.assign;h.$watch("watchData."+a,function(a,b){a!==b&&d(h.$parent,a)})}}}),j.dateDisabled&&t.attr("date-disabled","dateDisabled({ date: date, mode: mode })"),j.showWeeks&&t.attr("show-weeks",j.showWeeks),j.customClass&&t.attr("custom-class","customClass({ date: date, mode: mode })"),r?k.$formatters.push(function(a){return h.date=a,a}):(k.$$parserName="date",k.$validators.date=n,k.$parsers.unshift(m),k.$formatters.push(function(a){return h.date=a,k.$isEmpty(a)?a:e(a,o)})),h.dateSelection=function(a){angular.isDefined(a)&&(h.date=a);var b=h.date?e(h.date,o):"";i.val(b),k.$setViewValue(b),p&&(h.isOpen=!1,i[0].focus())},k.$viewChangeListeners.push(function(){h.date=f.parse(k.$viewValue,o,h.date)||new Date(k.$viewValue)});var v=function(a){h.isOpen&&a.target!==i[0]&&h.$apply(function(){h.isOpen=!1})},w=function(a){h.keydown(a)};i.bind("keydown",w),h.keydown=function(a){27===a.which?(a.preventDefault(),h.isOpen&&a.stopPropagation(),h.close()):40!==a.which||h.isOpen||(h.isOpen=!0)},h.$watch("isOpen",function(a){a?(h.$broadcast("datepicker.focus"),h.position=q?d.offset(i):d.position(i),h.position.top=h.position.top+i.prop("offsetHeight"),c.bind("click",v)):c.unbind("click",v)}),h.select=function(a){if("today"===a){var b=new Date;angular.isDate(h.date)?(a=new Date(h.date),a.setFullYear(b.getFullYear(),b.getMonth(),b.getDate())):a=new Date(b.setHours(0,0,0,0))}h.dateSelection(a)},h.close=function(){h.isOpen=!1,i[0].focus()};var x=a(s)(h);s.remove(),q?c.find("body").append(x):i.after(x),h.$on("$destroy",function(){x.remove(),i.unbind("keydown",w),c.unbind("click",v)})}}}]).directive("datepickerPopupWrap",function(){return{restrict:"EA",replace:!0,transclude:!0,templateUrl:"template/datepicker/popup.html",link:function(a,b){b.bind("click",function(a){a.preventDefault(),a.stopPropagation()})}}}),angular.module("ui.bootstrap.dropdown",["ui.bootstrap.position"]).constant("dropdownConfig",{openClass:"open"}).service("dropdownService",["$document","$rootScope",function(a,b){var c=null;this.open=function(b){c||(a.bind("click",d),a.bind("keydown",e)),c&&c!==b&&(c.isOpen=!1),c=b},this.close=function(b){c===b&&(c=null,a.unbind("click",d),a.unbind("keydown",e))};var d=function(a){if(c&&(!a||"disabled"!==c.getAutoClose())){var d=c.getToggleElement();if(!(a&&d&&d[0].contains(a.target))){var e=c.getElement();a&&"outsideClick"===c.getAutoClose()&&e&&e[0].contains(a.target)||(c.isOpen=!1,b.$$phase||c.$apply())}}},e=function(a){27===a.which&&(c.focusToggleElement(),d())}}]).controller("DropdownController",["$scope","$attrs","$parse","dropdownConfig","dropdownService","$animate","$position","$document",function(a,b,c,d,e,f,g,h){var i,j=this,k=a.$new(),l=d.openClass,m=angular.noop,n=b.onToggle?c(b.onToggle):angular.noop,o=!1;this.init=function(d){j.$element=d,b.isOpen&&(i=c(b.isOpen),m=i.assign,a.$watch(i,function(a){k.isOpen=!!a})),o=angular.isDefined(b.dropdownAppendToBody),o&&j.dropdownMenu&&(h.find("body").append(j.dropdownMenu),d.on("$destroy",function(){j.dropdownMenu.remove()}))},this.toggle=function(a){return k.isOpen=arguments.length?!!a:!k.isOpen},this.isOpen=function(){return k.isOpen},k.getToggleElement=function(){return j.toggleElement},k.getAutoClose=function(){return b.autoClose||"always"},k.getElement=function(){return j.$element},k.focusToggleElement=function(){j.toggleElement&&j.toggleElement[0].focus()},k.$watch("isOpen",function(b,c){if(o&&j.dropdownMenu){var d=g.positionElements(j.$element,j.dropdownMenu,"bottom-left",!0);j.dropdownMenu.css({top:d.top+"px",left:d.left+"px",display:b?"block":"none"})}f[b?"addClass":"removeClass"](j.$element,l),b?(k.focusToggleElement(),e.open(k)):e.close(k),m(a,b),angular.isDefined(b)&&b!==c&&n(a,{open:!!b})}),a.$on("$locationChangeSuccess",function(){k.isOpen=!1}),a.$on("$destroy",function(){k.$destroy()})}]).directive("dropdown",function(){return{controller:"DropdownController",link:function(a,b,c,d){d.init(b)}}}).directive("dropdownMenu",function(){return{restrict:"AC",require:"?^dropdown",link:function(a,b,c,d){d&&(d.dropdownMenu=b)}}}).directive("dropdownToggle",function(){return{require:"?^dropdown",link:function(a,b,c,d){if(d){d.toggleElement=b;var e=function(e){e.preventDefault(),b.hasClass("disabled")||c.disabled||a.$apply(function(){d.toggle()})};b.bind("click",e),b.attr({"aria-haspopup":!0,"aria-expanded":!1}),a.$watch(d.isOpen,function(a){b.attr("aria-expanded",!!a)}),a.$on("$destroy",function(){b.unbind("click",e)})}}}}),angular.module("ui.bootstrap.modal",[]).factory("$$stackedMap",function(){return{createNew:function(){var a=[];return{add:function(b,c){a.push({key:b,value:c})},get:function(b){for(var c=0;c0),i()})}function i(){if(l&&-1==g()){var a=m;j(l,m,function(){a=null}),l=void 0,m=void 0}}function j(c,d,f){function g(){g.done||(g.done=!0,c.remove(),d.$destroy(),f&&f())}d.animate=!1,c.attr("modal-animation")&&a.enabled()?c.one("$animate:close",function(){e.$evalAsync(g)}):b(g)}function k(a,b,c){return!a.value.modalScope.$broadcast("modal.closing",b,c).defaultPrevented}var l,m,n="modal-open",o=f.createNew(),p={};return e.$watch(g,function(a){m&&(m.index=a)}),c.bind("keydown",function(a){var b;27===a.which&&(b=o.top(),b&&b.value.keyboard&&(a.preventDefault(),e.$apply(function(){p.dismiss(b.key,"escape key press")})))}),p.open=function(a,b){var f=c[0].activeElement;o.add(a,{deferred:b.deferred,renderDeferred:b.renderDeferred,modalScope:b.scope,backdrop:b.backdrop,keyboard:b.keyboard});var h=c.find("body").eq(0),i=g();if(i>=0&&!l){m=e.$new(!0),m.index=i;var j=angular.element('');j.attr("backdrop-class",b.backdropClass),b.animation&&j.attr("modal-animation","true"),l=d(j)(m),h.append(l)}var k=angular.element('');k.attr({"template-url":b.windowTemplateUrl,"window-class":b.windowClass,size:b.size,index:o.length()-1,animate:"animate"}).html(b.content),b.animation&&k.attr("modal-animation","true");var p=d(k)(b.scope);o.top().value.modalDomEl=p,o.top().value.modalOpener=f,h.append(p),h.addClass(n)},p.close=function(a,b){var c=o.get(a);return c&&k(c,b,!0)?(c.value.deferred.resolve(b),h(a),c.value.modalOpener.focus(),!0):!c},p.dismiss=function(a,b){var c=o.get(a);return c&&k(c,b,!1)?(c.value.deferred.reject(b),h(a),c.value.modalOpener.focus(),!0):!c},p.dismissAll=function(a){for(var b=this.getTop();b&&this.dismiss(b.key,a);)b=this.getTop()},p.getTop=function(){return o.top()},p.modalRendered=function(a){var b=o.get(a);b&&b.value.renderDeferred.resolve()},p}]).provider("$modal",function(){var a={options:{animation:!0,backdrop:!0,keyboard:!0},$get:["$injector","$rootScope","$q","$templateRequest","$controller","$modalStack",function(b,c,d,e,f,g){function h(a){return a.template?d.when(a.template):e(angular.isFunction(a.templateUrl)?a.templateUrl():a.templateUrl)}function i(a){var c=[];return angular.forEach(a,function(a){(angular.isFunction(a)||angular.isArray(a))&&c.push(d.when(b.invoke(a)))}),c}var j={};return j.open=function(b){var e=d.defer(),j=d.defer(),k=d.defer(),l={result:e.promise,opened:j.promise,rendered:k.promise,close:function(a){return g.close(l,a)},dismiss:function(a){return g.dismiss(l,a)}};if(b=angular.extend({},a.options,b),b.resolve=b.resolve||{},!b.template&&!b.templateUrl)throw new Error("One of template or templateUrl options is required.");var m=d.all([h(b)].concat(i(b.resolve)));return m.then(function(a){var d=(b.scope||c).$new();d.$close=l.close,d.$dismiss=l.dismiss;var h,i={},j=1;b.controller&&(i.$scope=d,i.$modalInstance=l,angular.forEach(b.resolve,function(b,c){i[c]=a[j++]}),h=f(b.controller,i),b.controllerAs&&(d[b.controllerAs]=h)),g.open(l,{scope:d,deferred:e,renderDeferred:k,content:a[0],animation:b.animation,backdrop:b.backdrop,keyboard:b.keyboard,backdropClass:b.backdropClass,windowClass:b.windowClass,windowTemplateUrl:b.windowTemplateUrl,size:b.size})},function(a){e.reject(a)}),m.then(function(){j.resolve(!0)},function(a){j.reject(a)}),l},j}]};return a}),angular.module("ui.bootstrap.pagination",[]).controller("PaginationController",["$scope","$attrs","$parse",function(a,b,c){var d=this,e={$setViewValue:angular.noop},f=b.numPages?c(b.numPages).assign:angular.noop;
+this.init=function(g,h){e=g,this.config=h,e.$render=function(){d.render()},b.itemsPerPage?a.$parent.$watch(c(b.itemsPerPage),function(b){d.itemsPerPage=parseInt(b,10),a.totalPages=d.calculateTotalPages()}):this.itemsPerPage=h.itemsPerPage,a.$watch("totalItems",function(){a.totalPages=d.calculateTotalPages()}),a.$watch("totalPages",function(b){f(a.$parent,b),a.page>b?a.selectPage(b):e.$render()})},this.calculateTotalPages=function(){var b=this.itemsPerPage<1?1:Math.ceil(a.totalItems/this.itemsPerPage);return Math.max(b||0,1)},this.render=function(){a.page=parseInt(e.$viewValue,10)||1},a.selectPage=function(b,c){a.page!==b&&b>0&&b<=a.totalPages&&(c&&c.target&&c.target.blur(),e.$setViewValue(b),e.$render())},a.getText=function(b){return a[b+"Text"]||d.config[b+"Text"]},a.noPrevious=function(){return 1===a.page},a.noNext=function(){return a.page===a.totalPages}}]).constant("paginationConfig",{itemsPerPage:10,boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0}).directive("pagination",["$parse","paginationConfig",function(a,b){return{restrict:"EA",scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@"},require:["pagination","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pagination.html",replace:!0,link:function(c,d,e,f){function g(a,b,c){return{number:a,text:b,active:c}}function h(a,b){var c=[],d=1,e=b,f=angular.isDefined(k)&&b>k;f&&(l?(d=Math.max(a-Math.floor(k/2),1),e=d+k-1,e>b&&(e=b,d=e-k+1)):(d=(Math.ceil(a/k)-1)*k+1,e=Math.min(d+k-1,b)));for(var h=d;e>=h;h++){var i=g(h,h,h===a);c.push(i)}if(f&&!l){if(d>1){var j=g(d-1,"...",!1);c.unshift(j)}if(b>e){var m=g(e+1,"...",!1);c.push(m)}}return c}var i=f[0],j=f[1];if(j){var k=angular.isDefined(e.maxSize)?c.$parent.$eval(e.maxSize):b.maxSize,l=angular.isDefined(e.rotate)?c.$parent.$eval(e.rotate):b.rotate;c.boundaryLinks=angular.isDefined(e.boundaryLinks)?c.$parent.$eval(e.boundaryLinks):b.boundaryLinks,c.directionLinks=angular.isDefined(e.directionLinks)?c.$parent.$eval(e.directionLinks):b.directionLinks,i.init(j,b),e.maxSize&&c.$parent.$watch(a(e.maxSize),function(a){k=parseInt(a,10),i.render()});var m=i.render;i.render=function(){m(),c.page>0&&c.page<=c.totalPages&&(c.pages=h(c.page,c.totalPages))}}}}}]).constant("pagerConfig",{itemsPerPage:10,previousText:"« Previous",nextText:"Next »",align:!0}).directive("pager",["pagerConfig",function(a){return{restrict:"EA",scope:{totalItems:"=",previousText:"@",nextText:"@"},require:["pager","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pager.html",replace:!0,link:function(b,c,d,e){var f=e[0],g=e[1];g&&(b.align=angular.isDefined(d.align)?b.$parent.$eval(d.align):a.align,f.init(g,a))}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).provider("$tooltip",function(){function a(a){var b=/[A-Z]/g,c="-";return a.replace(b,function(a,b){return(b?c:"")+a.toLowerCase()})}var b={placement:"top",animation:!0,popupDelay:0,useContentExp:!1},c={mouseenter:"mouseleave",click:"click",focus:"blur"},d={};this.options=function(a){angular.extend(d,a)},this.setTriggers=function(a){angular.extend(c,a)},this.$get=["$window","$compile","$timeout","$document","$position","$interpolate",function(e,f,g,h,i,j){return function(e,k,l,m){function n(a){var b=a||m.trigger||l,d=c[b]||b;return{show:b,hide:d}}m=angular.extend({},b,d,m);var o=a(e),p=j.startSymbol(),q=j.endSymbol(),r="';return{restrict:"EA",compile:function(){var a=f(r);return function(b,c,d){function f(){E.isOpen?l():j()}function j(){(!D||b.$eval(d[k+"Enable"]))&&(s(),E.popupDelay?A||(A=g(o,E.popupDelay,!1),A.then(function(a){a()})):o()())}function l(){b.$apply(function(){p()})}function o(){return A=null,z&&(g.cancel(z),z=null),(m.useContentExp?E.contentExp():E.content)?(q(),x.css({top:0,left:0,display:"block"}),E.$digest(),F(),E.isOpen=!0,E.$apply(),F):angular.noop}function p(){E.isOpen=!1,g.cancel(A),A=null,E.animation?z||(z=g(r,500)):r()}function q(){x&&r(),y=E.$new(),x=a(y,function(a){B?h.find("body").append(a):c.after(a)}),y.$watch(function(){g(F,0,!1)}),m.useContentExp&&y.$watch("contentExp()",function(a){!a&&E.isOpen&&p()})}function r(){z=null,x&&(x.remove(),x=null),y&&(y.$destroy(),y=null)}function s(){t(),u(),v()}function t(){E.popupClass=d[k+"Class"]}function u(){var a=d[k+"Placement"];E.placement=angular.isDefined(a)?a:m.placement}function v(){var a=d[k+"PopupDelay"],b=parseInt(a,10);E.popupDelay=isNaN(b)?m.popupDelay:b}function w(){var a=d[k+"Trigger"];G(),C=n(a),C.show===C.hide?c.bind(C.show,f):(c.bind(C.show,j),c.bind(C.hide,l))}var x,y,z,A,B=angular.isDefined(m.appendToBody)?m.appendToBody:!1,C=n(void 0),D=angular.isDefined(d[k+"Enable"]),E=b.$new(!0),F=function(){if(x){var a=i.positionElements(c,x,E.placement,B);a.top+="px",a.left+="px",x.css(a)}};E.origScope=b,E.isOpen=!1,E.contentExp=function(){return b.$eval(d[e])},m.useContentExp||d.$observe(e,function(a){E.content=a,!a&&E.isOpen&&p()}),d.$observe("disabled",function(a){a&&E.isOpen&&p()}),d.$observe(k+"Title",function(a){E.title=a});var G=function(){c.unbind(C.show,j),c.unbind(C.hide,l)};w();var H=b.$eval(d[k+"Animation"]);E.animation=angular.isDefined(H)?!!H:m.animation;var I=b.$eval(d[k+"AppendToBody"]);B=angular.isDefined(I)?I:B,B&&b.$on("$locationChangeSuccess",function(){E.isOpen&&p()}),b.$on("$destroy",function(){g.cancel(z),g.cancel(A),G(),r(),E=null})}}}}}]}).directive("tooltipTemplateTransclude",["$animate","$sce","$compile","$templateRequest",function(a,b,c,d){return{link:function(e,f,g){var h,i,j,k=e.$eval(g.tooltipTemplateTranscludeScope),l=0,m=function(){i&&(i.remove(),i=null),h&&(h.$destroy(),h=null),j&&(a.leave(j).then(function(){i=null}),i=j,j=null)};e.$watch(b.parseAsResourceUrl(g.tooltipTemplateTransclude),function(b){var g=++l;b?(d(b,!0).then(function(d){if(g===l){var e=k.$new(),i=d,n=c(i)(e,function(b){m(),a.enter(b,f)});h=e,j=n,h.$emit("$includeContentLoaded",b)}},function(){g===l&&(m(),e.$emit("$includeContentError",b))}),e.$emit("$includeContentRequested",b)):m()}),e.$on("$destroy",m)}}}]).directive("tooltipClasses",function(){return{restrict:"A",link:function(a,b,c){a.placement&&b.addClass(a.placement),a.popupClass&&b.addClass(a.popupClass),a.animation()&&b.addClass(c.tooltipAnimationClass)}}}).directive("tooltipPopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-popup.html"}}).directive("tooltip",["$tooltip",function(a){return a("tooltip","tooltip","mouseenter")}]).directive("tooltipTemplatePopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/tooltip/tooltip-template-popup.html"}}).directive("tooltipTemplate",["$tooltip",function(a){return a("tooltipTemplate","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlPopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-popup.html"}}).directive("tooltipHtml",["$tooltip",function(a){return a("tooltipHtml","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlUnsafePopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-unsafe-popup.html"}}).value("tooltipHtmlUnsafeSuppressDeprecated",!1).directive("tooltipHtmlUnsafe",["$tooltip","tooltipHtmlUnsafeSuppressDeprecated","$log",function(a,b,c){return b||c.warn("tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead."),a("tooltipHtmlUnsafe","tooltip","mouseenter")}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("popoverTemplatePopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/popover/popover-template.html"}}).directive("popoverTemplate",["$tooltip",function(a){return a("popoverTemplate","popover","click",{useContentExp:!0})}]).directive("popoverPopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover.html"}}).directive("popover",["$tooltip",function(a){return a("popover","popover","click")}]),angular.module("ui.bootstrap.progressbar",[]).constant("progressConfig",{animate:!0,max:100}).controller("ProgressController",["$scope","$attrs","progressConfig",function(a,b,c){var d=this,e=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=angular.isDefined(a.max)?a.max:c.max,this.addBar=function(b,c){e||c.css({transition:"none"}),this.bars.push(b),b.$watch("value",function(c){b.percent=+(100*c/a.max).toFixed(2)}),b.$on("$destroy",function(){c=null,d.removeBar(b)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1)}}]).directive("progress",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",require:"progress",scope:{},templateUrl:"template/progressbar/progress.html"}}).directive("bar",function(){return{restrict:"EA",replace:!0,transclude:!0,require:"^progress",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/bar.html",link:function(a,b,c,d){d.addBar(a,b)}}}).directive("progressbar",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/progressbar.html",link:function(a,b,c,d){d.addBar(a,angular.element(b.children()[0]))}}}),angular.module("ui.bootstrap.rating",[]).constant("ratingConfig",{max:5,stateOn:null,stateOff:null}).controller("RatingController",["$scope","$attrs","ratingConfig",function(a,b,c){var d={$setViewValue:angular.noop};this.init=function(e){d=e,d.$render=this.render,d.$formatters.push(function(a){return angular.isNumber(a)&&a<<0!==a&&(a=Math.round(a)),a}),this.stateOn=angular.isDefined(b.stateOn)?a.$parent.$eval(b.stateOn):c.stateOn,this.stateOff=angular.isDefined(b.stateOff)?a.$parent.$eval(b.stateOff):c.stateOff;var f=angular.isDefined(b.ratingStates)?a.$parent.$eval(b.ratingStates):new Array(angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max);a.range=this.buildTemplateObjects(f)},this.buildTemplateObjects=function(a){for(var b=0,c=a.length;c>b;b++)a[b]=angular.extend({index:b},{stateOn:this.stateOn,stateOff:this.stateOff},a[b]);return a},a.rate=function(b){!a.readonly&&b>=0&&b<=a.range.length&&(d.$setViewValue(b),d.$render())},a.enter=function(b){a.readonly||(a.value=b),a.onHover({value:b})},a.reset=function(){a.value=d.$viewValue,a.onLeave()},a.onKeydown=function(b){/(37|38|39|40)/.test(b.which)&&(b.preventDefault(),b.stopPropagation(),a.rate(a.value+(38===b.which||39===b.which?1:-1)))},this.render=function(){a.value=d.$viewValue}}]).directive("rating",function(){return{restrict:"EA",require:["rating","ngModel"],scope:{readonly:"=?",onHover:"&",onLeave:"&"},controller:"RatingController",templateUrl:"template/rating/rating.html",replace:!0,link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}),angular.module("ui.bootstrap.tabs",[]).controller("TabsetController",["$scope",function(a){var b=this,c=b.tabs=a.tabs=[];b.select=function(a){angular.forEach(c,function(b){b.active&&b!==a&&(b.active=!1,b.onDeselect())}),a.active=!0,a.onSelect()},b.addTab=function(a){c.push(a),1===c.length&&a.active!==!1?a.active=!0:a.active?b.select(a):a.active=!1},b.removeTab=function(a){var e=c.indexOf(a);if(a.active&&c.length>1&&!d){var f=e==c.length-1?e-1:e+1;b.select(c[f])}c.splice(e,1)};var d;a.$on("$destroy",function(){d=!0})}]).directive("tabset",function(){return{restrict:"EA",transclude:!0,replace:!0,scope:{type:"@"},controller:"TabsetController",templateUrl:"template/tabs/tabset.html",link:function(a,b,c){a.vertical=angular.isDefined(c.vertical)?a.$parent.$eval(c.vertical):!1,a.justified=angular.isDefined(c.justified)?a.$parent.$eval(c.justified):!1}}}).directive("tab",["$parse","$log",function(a,b){return{require:"^tabset",restrict:"EA",replace:!0,templateUrl:"template/tabs/tab.html",transclude:!0,scope:{active:"=?",heading:"@",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},compile:function(c,d,e){return function(c,d,f,g){c.$watch("active",function(a){a&&g.select(c)}),c.disabled=!1,f.disable&&c.$parent.$watch(a(f.disable),function(a){c.disabled=!!a}),f.disabled&&(b.warn('Use of "disabled" attribute has been deprecated, please use "disable"'),c.$parent.$watch(a(f.disabled),function(a){c.disabled=!!a})),c.select=function(){c.disabled||(c.active=!0)},g.addTab(c),c.$on("$destroy",function(){g.removeTab(c)}),c.$transcludeFn=e}}}}]).directive("tabHeadingTransclude",[function(){return{restrict:"A",require:"^tab",link:function(a,b){a.$watch("headingElement",function(a){a&&(b.html(""),b.append(a))})}}}]).directive("tabContentTransclude",function(){function a(a){return a.tagName&&(a.hasAttribute("tab-heading")||a.hasAttribute("data-tab-heading")||"tab-heading"===a.tagName.toLowerCase()||"data-tab-heading"===a.tagName.toLowerCase())}return{restrict:"A",require:"^tabset",link:function(b,c,d){var e=b.$eval(d.tabContentTransclude);e.$transcludeFn(e.$parent,function(b){angular.forEach(b,function(b){a(b)?e.headingElement=b:c.append(b)})})}}}),angular.module("ui.bootstrap.timepicker",[]).constant("timepickerConfig",{hourStep:1,minuteStep:1,showMeridian:!0,meridians:null,readonlyInput:!1,mousewheel:!0,arrowkeys:!0}).controller("TimepickerController",["$scope","$attrs","$parse","$log","$locale","timepickerConfig",function(a,b,c,d,e,f){function g(){var b=parseInt(a.hours,10),c=a.showMeridian?b>0&&13>b:b>=0&&24>b;return c?(a.showMeridian&&(12===b&&(b=0),a.meridian===p[1]&&(b+=12)),b):void 0}function h(){var b=parseInt(a.minutes,10);return b>=0&&60>b?b:void 0}function i(a){return angular.isDefined(a)&&a.toString().length<2?"0"+a:a.toString()}function j(a){k(),o.$setViewValue(new Date(n)),l(a)}function k(){o.$setValidity("time",!0),a.invalidHours=!1,a.invalidMinutes=!1}function l(b){var c=n.getHours(),d=n.getMinutes();a.showMeridian&&(c=0===c||12===c?12:c%12),a.hours="h"===b?c:i(c),"m"!==b&&(a.minutes=i(d)),a.meridian=n.getHours()<12?p[0]:p[1]}function m(a){var b=new Date(n.getTime()+6e4*a);n.setHours(b.getHours(),b.getMinutes()),j()}var n=new Date,o={$setViewValue:angular.noop},p=angular.isDefined(b.meridians)?a.$parent.$eval(b.meridians):f.meridians||e.DATETIME_FORMATS.AMPMS;this.init=function(c,d){o=c,o.$render=this.render,o.$formatters.unshift(function(a){return a?new Date(a):null});var e=d.eq(0),g=d.eq(1),h=angular.isDefined(b.mousewheel)?a.$parent.$eval(b.mousewheel):f.mousewheel;h&&this.setupMousewheelEvents(e,g);var i=angular.isDefined(b.arrowkeys)?a.$parent.$eval(b.arrowkeys):f.arrowkeys;i&&this.setupArrowkeyEvents(e,g),a.readonlyInput=angular.isDefined(b.readonlyInput)?a.$parent.$eval(b.readonlyInput):f.readonlyInput,this.setupInputEvents(e,g)};var q=f.hourStep;b.hourStep&&a.$parent.$watch(c(b.hourStep),function(a){q=parseInt(a,10)});var r=f.minuteStep;b.minuteStep&&a.$parent.$watch(c(b.minuteStep),function(a){r=parseInt(a,10)}),a.showMeridian=f.showMeridian,b.showMeridian&&a.$parent.$watch(c(b.showMeridian),function(b){if(a.showMeridian=!!b,o.$error.time){var c=g(),d=h();angular.isDefined(c)&&angular.isDefined(d)&&(n.setHours(c),j())}else l()}),this.setupMousewheelEvents=function(b,c){var d=function(a){a.originalEvent&&(a=a.originalEvent);var b=a.wheelDelta?a.wheelDelta:-a.deltaY;return a.detail||b>0};b.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementHours():a.decrementHours()),b.preventDefault()}),c.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementMinutes():a.decrementMinutes()),b.preventDefault()})},this.setupArrowkeyEvents=function(b,c){b.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementHours(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementHours(),a.$apply())}),c.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementMinutes(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementMinutes(),a.$apply())})},this.setupInputEvents=function(b,c){if(a.readonlyInput)return a.updateHours=angular.noop,void(a.updateMinutes=angular.noop);var d=function(b,c){o.$setViewValue(null),o.$setValidity("time",!1),angular.isDefined(b)&&(a.invalidHours=b),angular.isDefined(c)&&(a.invalidMinutes=c)};a.updateHours=function(){var a=g();angular.isDefined(a)?(n.setHours(a),j("h")):d(!0)},b.bind("blur",function(){!a.invalidHours&&a.hours<10&&a.$apply(function(){a.hours=i(a.hours)})}),a.updateMinutes=function(){var a=h();angular.isDefined(a)?(n.setMinutes(a),j("m")):d(void 0,!0)},c.bind("blur",function(){!a.invalidMinutes&&a.minutes<10&&a.$apply(function(){a.minutes=i(a.minutes)})})},this.render=function(){var a=o.$viewValue;isNaN(a)?(o.$setValidity("time",!1),d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(a&&(n=a),k(),l())},a.incrementHours=function(){m(60*q)},a.decrementHours=function(){m(60*-q)},a.incrementMinutes=function(){m(r)},a.decrementMinutes=function(){m(-r)},a.toggleMeridian=function(){m(720*(n.getHours()<12?1:-1))}}]).directive("timepicker",function(){return{restrict:"EA",require:["timepicker","?^ngModel"],controller:"TimepickerController",replace:!0,scope:{},templateUrl:"template/timepicker/timepicker.html",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f,b.find("input"))}}}),angular.module("ui.bootstrap.transition",[]).value("$transitionSuppressDeprecated",!1).factory("$transition",["$q","$timeout","$rootScope","$log","$transitionSuppressDeprecated",function(a,b,c,d,e){function f(a){for(var b in a)if(void 0!==h.style[b])return a[b]}e||d.warn("$transition is now deprecated. Use $animate from ngAnimate instead.");var g=function(d,e,f){f=f||{};var h=a.defer(),i=g[f.animation?"animationEndEventName":"transitionEndEventName"],j=function(){c.$apply(function(){d.unbind(i,j),h.resolve(d)})};return i&&d.bind(i,j),b(function(){angular.isString(e)?d.addClass(e):angular.isFunction(e)?e(d):angular.isObject(e)&&d.css(e),i||h.resolve(d)}),h.promise.cancel=function(){i&&d.unbind(i,j),h.reject("Transition cancelled")},h.promise},h=document.createElement("trans"),i={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"},j={WebkitTransition:"webkitAnimationEnd",MozTransition:"animationend",OTransition:"oAnimationEnd",transition:"animationend"};return g.transitionEndEventName=f(i),g.animationEndEventName=f(j),g}]),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).factory("typeaheadParser",["$parse",function(a){var b=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;return{parse:function(c){var d=c.match(b);if(!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "'+c+'".');return{itemName:d[3],source:a(d[4]),viewMapper:a(d[2]||d[1]),modelMapper:a(d[1])}}}}]).directive("typeahead",["$compile","$parse","$q","$timeout","$document","$position","typeaheadParser",function(a,b,c,d,e,f,g){var h=[9,13,27,38,40];return{require:"ngModel",link:function(i,j,k,l){var m,n=i.$eval(k.typeaheadMinLength)||1,o=i.$eval(k.typeaheadWaitMs)||0,p=i.$eval(k.typeaheadEditable)!==!1,q=b(k.typeaheadLoading).assign||angular.noop,r=b(k.typeaheadOnSelect),s=k.typeaheadInputFormatter?b(k.typeaheadInputFormatter):void 0,t=k.typeaheadAppendToBody?i.$eval(k.typeaheadAppendToBody):!1,u=i.$eval(k.typeaheadFocusFirst)!==!1,v=b(k.ngModel).assign,w=g.parse(k.typeahead),x=i.$new();i.$on("$destroy",function(){x.$destroy()});var y="typeahead-"+x.$id+"-"+Math.floor(1e4*Math.random());j.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":y});var z=angular.element("");z.attr({id:y,matches:"matches",active:"activeIdx",select:"select(activeIdx)",query:"query",position:"position"}),angular.isDefined(k.typeaheadTemplateUrl)&&z.attr("template-url",k.typeaheadTemplateUrl);var A=function(){x.matches=[],x.activeIdx=-1,j.attr("aria-expanded",!1)},B=function(a){return y+"-option-"+a};x.$watch("activeIdx",function(a){0>a?j.removeAttr("aria-activedescendant"):j.attr("aria-activedescendant",B(a))});var C=function(a){var b={$viewValue:a};q(i,!0),c.when(w.source(i,b)).then(function(c){var d=a===l.$viewValue;if(d&&m)if(c&&c.length>0){x.activeIdx=u?0:-1,x.matches.length=0;for(var e=0;e=n?o>0?(F(),E(a)):C(a):(q(i,!1),F(),A()),p?a:a?void l.$setValidity("editable",!1):(l.$setValidity("editable",!0),a)}),l.$formatters.push(function(a){var b,c,d={};return p||l.$setValidity("editable",!0),s?(d.$model=a,s(i,d)):(d[w.itemName]=a,b=w.viewMapper(i,d),d[w.itemName]=void 0,c=w.viewMapper(i,d),b!==c?b:a)}),x.select=function(a){var b,c,e={};e[w.itemName]=c=x.matches[a].model,b=w.modelMapper(i,e),v(i,b),l.$setValidity("editable",!0),l.$setValidity("parse",!0),r(i,{$item:c,$model:b,$label:w.viewMapper(i,e)}),A(),d(function(){j[0].focus()},0,!1)},j.bind("keydown",function(a){0!==x.matches.length&&-1!==h.indexOf(a.which)&&(-1!=x.activeIdx||13!==a.which&&9!==a.which)&&(a.preventDefault(),40===a.which?(x.activeIdx=(x.activeIdx+1)%x.matches.length,x.$digest()):38===a.which?(x.activeIdx=(x.activeIdx>0?x.activeIdx:x.matches.length)-1,x.$digest()):13===a.which||9===a.which?x.$apply(function(){x.select(x.activeIdx)}):27===a.which&&(a.stopPropagation(),A(),x.$digest()))}),j.bind("blur",function(){m=!1});var G=function(a){j[0]!==a.target&&(A(),x.$digest())};e.bind("click",G),i.$on("$destroy",function(){e.unbind("click",G),t&&H.remove(),z.remove()});var H=a(z)(x);t?e.find("body").append(H):j.after(H)}}}]).directive("typeaheadPopup",function(){return{restrict:"EA",scope:{matches:"=",query:"=",active:"=",position:"=",select:"&"},replace:!0,templateUrl:"template/typeahead/typeahead-popup.html",link:function(a,b,c){a.templateUrl=c.templateUrl,a.isOpen=function(){return a.matches.length>0},a.isActive=function(b){return a.active==b},a.selectActive=function(b){a.active=b},a.selectMatch=function(b){a.select({activeIdx:b})}}}}).directive("typeaheadMatch",["$templateRequest","$compile","$parse",function(a,b,c){return{restrict:"EA",scope:{index:"=",match:"=",query:"="},link:function(d,e,f){var g=c(f.templateUrl)(d.$parent)||"template/typeahead/typeahead-match.html";a(g).then(function(a){b(a.trim())(d,function(a){e.replaceWith(a)})})}}}]).filter("typeaheadHighlight",function(){function a(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}return function(b,c){return c?(""+b).replace(new RegExp(a(c),"gi"),"$&"):b}}),!angular.$$csp()&&angular.element(document).find("head").prepend('');
\ No newline at end of file
diff --git a/turtles/app/lib/bower_components/angular/.bower.json b/turtles/app/lib/bower_components/angular/.bower.json
new file mode 100644
index 000000000..8a311ecca
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular/.bower.json
@@ -0,0 +1,17 @@
+{
+ "name": "angular",
+ "version": "1.4.0",
+ "main": "./angular.js",
+ "ignore": [],
+ "dependencies": {},
+ "homepage": "https://github.com/angular/bower-angular",
+ "_release": "1.4.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.4.0",
+ "commit": "e2f2cf7dc4a3ef1859ab28e657eca0e9edb588ba"
+ },
+ "_source": "git://github.com/angular/bower-angular.git",
+ "_target": ">=1.3.0",
+ "_originalSource": "angular"
+}
\ No newline at end of file
diff --git a/turtles/app/lib/bower_components/angular/README.md b/turtles/app/lib/bower_components/angular/README.md
new file mode 100644
index 000000000..d1bc0eddf
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular/README.md
@@ -0,0 +1,64 @@
+# packaged angular
+
+This repo is for distribution on `npm` and `bower`. The source for this module is in the
+[main AngularJS repo](https://github.com/angular/angular.js).
+Please file issues and pull requests against that repo.
+
+## Install
+
+You can install this package either with `npm` or with `bower`.
+
+### npm
+
+```shell
+npm install angular
+```
+
+Then add a `
+```
+
+Or `require('angular')` from your code.
+
+### bower
+
+```shell
+bower install angular
+```
+
+Then add a `
+```
+
+## Documentation
+
+Documentation is available on the
+[AngularJS docs site](http://docs.angularjs.org/).
+
+## License
+
+The MIT License
+
+Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/turtles/app/lib/bower_components/angular/angular-csp.css b/turtles/app/lib/bower_components/angular/angular-csp.css
new file mode 100644
index 000000000..f3cd926cb
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular/angular-csp.css
@@ -0,0 +1,21 @@
+/* Include this file in your html if you are using the CSP mode. */
+
+@charset "UTF-8";
+
+[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],
+.ng-cloak, .x-ng-cloak,
+.ng-hide:not(.ng-hide-animate) {
+ display: none !important;
+}
+
+ng\:form {
+ display: block;
+}
+
+.ng-animate-shim {
+ visibility:hidden;
+}
+
+.ng-anchor {
+ position:absolute;
+}
diff --git a/turtles/app/lib/bower_components/angular/angular.js b/turtles/app/lib/bower_components/angular/angular.js
new file mode 100644
index 000000000..af94745a9
--- /dev/null
+++ b/turtles/app/lib/bower_components/angular/angular.js
@@ -0,0 +1,28133 @@
+/**
+ * @license AngularJS v1.4.0
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, document, undefined) {'use strict';
+
+/**
+ * @description
+ *
+ * This object provides a utility for producing rich Error messages within
+ * Angular. It can be called as follows:
+ *
+ * var exampleMinErr = minErr('example');
+ * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
+ *
+ * The above creates an instance of minErr in the example namespace. The
+ * resulting error will have a namespaced error code of example.one. The
+ * resulting error will replace {0} with the value of foo, and {1} with the
+ * value of bar. The object is not restricted in the number of arguments it can
+ * take.
+ *
+ * If fewer arguments are specified than necessary for interpolation, the extra
+ * interpolation markers will be preserved in the final string.
+ *
+ * Since data will be parsed statically during a build step, some restrictions
+ * are applied with respect to how minErr instances are created and called.
+ * Instances should have names of the form namespaceMinErr for a minErr created
+ * using minErr('namespace') . Error codes, namespaces and template strings
+ * should all be static strings, not variables or general expressions.
+ *
+ * @param {string} module The namespace to use for the new minErr instance.
+ * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning
+ * error from returned function, for cases when a particular type of error is useful.
+ * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance
+ */
+
+function minErr(module, ErrorConstructor) {
+ ErrorConstructor = ErrorConstructor || Error;
+ return function() {
+ var SKIP_INDEXES = 2;
+
+ var templateArgs = arguments,
+ code = templateArgs[0],
+ message = '[' + (module ? module + ':' : '') + code + '] ',
+ template = templateArgs[1],
+ paramPrefix, i;
+
+ message += template.replace(/\{\d+\}/g, function(match) {
+ var index = +match.slice(1, -1),
+ shiftedIndex = index + SKIP_INDEXES;
+
+ if (shiftedIndex < templateArgs.length) {
+ return toDebugString(templateArgs[shiftedIndex]);
+ }
+
+ return match;
+ });
+
+ message += '\nhttp://errors.angularjs.org/1.4.0/' +
+ (module ? module + '/' : '') + code;
+
+ for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
+ message += paramPrefix + 'p' + (i - SKIP_INDEXES) + '=' +
+ encodeURIComponent(toDebugString(templateArgs[i]));
+ }
+
+ return new ErrorConstructor(message);
+ };
+}
+
+/* We need to tell jshint what variables are being exported */
+/* global angular: true,
+ msie: true,
+ jqLite: true,
+ jQuery: true,
+ slice: true,
+ splice: true,
+ push: true,
+ toString: true,
+ ngMinErr: true,
+ angularModule: true,
+ uid: true,
+ REGEX_STRING_REGEXP: true,
+ VALIDITY_STATE_PROPERTY: true,
+
+ lowercase: true,
+ uppercase: true,
+ manualLowercase: true,
+ manualUppercase: true,
+ nodeName_: true,
+ isArrayLike: true,
+ forEach: true,
+ forEachSorted: true,
+ reverseParams: true,
+ nextUid: true,
+ setHashKey: true,
+ extend: true,
+ toInt: true,
+ inherit: true,
+ merge: true,
+ noop: true,
+ identity: true,
+ valueFn: true,
+ isUndefined: true,
+ isDefined: true,
+ isObject: true,
+ isBlankObject: true,
+ isString: true,
+ isNumber: true,
+ isDate: true,
+ isArray: true,
+ isFunction: true,
+ isRegExp: true,
+ isWindow: true,
+ isScope: true,
+ isFile: true,
+ isFormData: true,
+ isBlob: true,
+ isBoolean: true,
+ isPromiseLike: true,
+ trim: true,
+ escapeForRegexp: true,
+ isElement: true,
+ makeMap: true,
+ includes: true,
+ arrayRemove: true,
+ copy: true,
+ shallowCopy: true,
+ equals: true,
+ csp: true,
+ jq: true,
+ concat: true,
+ sliceArgs: true,
+ bind: true,
+ toJsonReplacer: true,
+ toJson: true,
+ fromJson: true,
+ convertTimezoneToLocal: true,
+ timezoneToOffset: true,
+ startingTag: true,
+ tryDecodeURIComponent: true,
+ parseKeyValue: true,
+ toKeyValue: true,
+ encodeUriSegment: true,
+ encodeUriQuery: true,
+ angularInit: true,
+ bootstrap: true,
+ getTestability: true,
+ snake_case: true,
+ bindJQuery: true,
+ assertArg: true,
+ assertArgFn: true,
+ assertNotHasOwnProperty: true,
+ getter: true,
+ getBlockNodes: true,
+ hasOwnProperty: true,
+ createMap: true,
+
+ NODE_TYPE_ELEMENT: true,
+ NODE_TYPE_ATTRIBUTE: true,
+ NODE_TYPE_TEXT: true,
+ NODE_TYPE_COMMENT: true,
+ NODE_TYPE_DOCUMENT: true,
+ NODE_TYPE_DOCUMENT_FRAGMENT: true,
+*/
+
+////////////////////////////////////
+
+/**
+ * @ngdoc module
+ * @name ng
+ * @module ng
+ * @description
+ *
+ * # ng (core module)
+ * The ng module is loaded by default when an AngularJS application is started. The module itself
+ * contains the essential components for an AngularJS application to function. The table below
+ * lists a high level breakdown of each of the services/factories, filters, directives and testing
+ * components available within this core module.
+ *
+ *
+ */
+
+var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/;
+
+// The name of a form control's ValidityState property.
+// This is used so that it's possible for internal tests to create mock ValidityStates.
+var VALIDITY_STATE_PROPERTY = 'validity';
+
+/**
+ * @ngdoc function
+ * @name angular.lowercase
+ * @module ng
+ * @kind function
+ *
+ * @description Converts the specified string to lowercase.
+ * @param {string} string String to be converted to lowercase.
+ * @returns {string} Lowercased string.
+ */
+var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+/**
+ * @ngdoc function
+ * @name angular.uppercase
+ * @module ng
+ * @kind function
+ *
+ * @description Converts the specified string to uppercase.
+ * @param {string} string String to be converted to uppercase.
+ * @returns {string} Uppercased string.
+ */
+var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};
+
+
+var manualLowercase = function(s) {
+ /* jshint bitwise: false */
+ return isString(s)
+ ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
+ : s;
+};
+var manualUppercase = function(s) {
+ /* jshint bitwise: false */
+ return isString(s)
+ ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
+ : s;
+};
+
+
+// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
+// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
+// with correct but slower alternatives.
+if ('i' !== 'I'.toLowerCase()) {
+ lowercase = manualLowercase;
+ uppercase = manualUppercase;
+}
+
+
+var
+ msie, // holds major version number for IE, or NaN if UA is not IE.
+ jqLite, // delay binding since jQuery could be loaded after us.
+ jQuery, // delay binding
+ slice = [].slice,
+ splice = [].splice,
+ push = [].push,
+ toString = Object.prototype.toString,
+ getPrototypeOf = Object.getPrototypeOf,
+ ngMinErr = minErr('ng'),
+
+ /** @name angular */
+ angular = window.angular || (window.angular = {}),
+ angularModule,
+ uid = 0;
+
+/**
+ * documentMode is an IE-only property
+ * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
+ */
+msie = document.documentMode;
+
+
+/**
+ * @private
+ * @param {*} obj
+ * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,
+ * String ...)
+ */
+function isArrayLike(obj) {
+ if (obj == null || isWindow(obj)) {
+ return false;
+ }
+
+ // Support: iOS 8.2 (not reproducible in simulator)
+ // "length" in obj used to prevent JIT error (gh-11508)
+ var length = "length" in Object(obj) && obj.length;
+
+ if (obj.nodeType === NODE_TYPE_ELEMENT && length) {
+ return true;
+ }
+
+ return isString(obj) || isArray(obj) || length === 0 ||
+ typeof length === 'number' && length > 0 && (length - 1) in obj;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.forEach
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Invokes the `iterator` function once for each item in `obj` collection, which can be either an
+ * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`
+ * is the value of an object property or an array element, `key` is the object property key or
+ * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.
+ *
+ * It is worth noting that `.forEach` does not iterate over inherited properties because it filters
+ * using the `hasOwnProperty` method.
+ *
+ * Unlike ES262's
+ * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),
+ * Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just
+ * return the value provided.
+ *
+ ```js
+ var values = {name: 'misko', gender: 'male'};
+ var log = [];
+ angular.forEach(values, function(value, key) {
+ this.push(key + ': ' + value);
+ }, log);
+ expect(log).toEqual(['name: misko', 'gender: male']);
+ ```
+ *
+ * @param {Object|Array} obj Object to iterate over.
+ * @param {Function} iterator Iterator function.
+ * @param {Object=} context Object to become context (`this`) for the iterator function.
+ * @returns {Object|Array} Reference to `obj`.
+ */
+
+function forEach(obj, iterator, context) {
+ var key, length;
+ if (obj) {
+ if (isFunction(obj)) {
+ for (key in obj) {
+ // Need to check if hasOwnProperty exists,
+ // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
+ if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
+ iterator.call(context, obj[key], key, obj);
+ }
+ }
+ } else if (isArray(obj) || isArrayLike(obj)) {
+ var isPrimitive = typeof obj !== 'object';
+ for (key = 0, length = obj.length; key < length; key++) {
+ if (isPrimitive || key in obj) {
+ iterator.call(context, obj[key], key, obj);
+ }
+ }
+ } else if (obj.forEach && obj.forEach !== forEach) {
+ obj.forEach(iterator, context, obj);
+ } else if (isBlankObject(obj)) {
+ // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
+ for (key in obj) {
+ iterator.call(context, obj[key], key, obj);
+ }
+ } else if (typeof obj.hasOwnProperty === 'function') {
+ // Slow path for objects inheriting Object.prototype, hasOwnProperty check needed
+ for (key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ iterator.call(context, obj[key], key, obj);
+ }
+ }
+ } else {
+ // Slow path for objects which do not have a method `hasOwnProperty`
+ for (key in obj) {
+ if (hasOwnProperty.call(obj, key)) {
+ iterator.call(context, obj[key], key, obj);
+ }
+ }
+ }
+ }
+ return obj;
+}
+
+function forEachSorted(obj, iterator, context) {
+ var keys = Object.keys(obj).sort();
+ for (var i = 0; i < keys.length; i++) {
+ iterator.call(context, obj[keys[i]], keys[i]);
+ }
+ return keys;
+}
+
+
+/**
+ * when using forEach the params are value, key, but it is often useful to have key, value.
+ * @param {function(string, *)} iteratorFn
+ * @returns {function(*, string)}
+ */
+function reverseParams(iteratorFn) {
+ return function(value, key) { iteratorFn(key, value); };
+}
+
+/**
+ * A consistent way of creating unique IDs in angular.
+ *
+ * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before
+ * we hit number precision issues in JavaScript.
+ *
+ * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M
+ *
+ * @returns {number} an unique alpha-numeric string
+ */
+function nextUid() {
+ return ++uid;
+}
+
+
+/**
+ * Set or clear the hashkey for an object.
+ * @param obj object
+ * @param h the hashkey (!truthy to delete the hashkey)
+ */
+function setHashKey(obj, h) {
+ if (h) {
+ obj.$$hashKey = h;
+ } else {
+ delete obj.$$hashKey;
+ }
+}
+
+
+function baseExtend(dst, objs, deep) {
+ var h = dst.$$hashKey;
+
+ for (var i = 0, ii = objs.length; i < ii; ++i) {
+ var obj = objs[i];
+ if (!isObject(obj) && !isFunction(obj)) continue;
+ var keys = Object.keys(obj);
+ for (var j = 0, jj = keys.length; j < jj; j++) {
+ var key = keys[j];
+ var src = obj[key];
+
+ if (deep && isObject(src)) {
+ if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};
+ baseExtend(dst[key], [src], true);
+ } else {
+ dst[key] = src;
+ }
+ }
+ }
+
+ setHashKey(dst, h);
+ return dst;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.extend
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
+ * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
+ * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.
+ *
+ * **Note:** Keep in mind that `angular.extend` does not support recursive merge (deep copy). Use
+ * {@link angular.merge} for this.
+ *
+ * @param {Object} dst Destination object.
+ * @param {...Object} src Source object(s).
+ * @returns {Object} Reference to `dst`.
+ */
+function extend(dst) {
+ return baseExtend(dst, slice.call(arguments, 1), false);
+}
+
+
+/**
+* @ngdoc function
+* @name angular.merge
+* @module ng
+* @kind function
+*
+* @description
+* Deeply extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
+* to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
+* by passing an empty object as the target: `var object = angular.merge({}, object1, object2)`.
+*
+* Unlike {@link angular.extend extend()}, `merge()` recursively descends into object properties of source
+* objects, performing a deep copy.
+*
+* @param {Object} dst Destination object.
+* @param {...Object} src Source object(s).
+* @returns {Object} Reference to `dst`.
+*/
+function merge(dst) {
+ return baseExtend(dst, slice.call(arguments, 1), true);
+}
+
+
+
+function toInt(str) {
+ return parseInt(str, 10);
+}
+
+
+function inherit(parent, extra) {
+ return extend(Object.create(parent), extra);
+}
+
+/**
+ * @ngdoc function
+ * @name angular.noop
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * A function that performs no operations. This function can be useful when writing code in the
+ * functional style.
+ ```js
+ function foo(callback) {
+ var result = calculateResult();
+ (callback || angular.noop)(result);
+ }
+ ```
+ */
+function noop() {}
+noop.$inject = [];
+
+
+/**
+ * @ngdoc function
+ * @name angular.identity
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * A function that returns its first argument. This function is useful when writing code in the
+ * functional style.
+ *
+ ```js
+ function transformer(transformationFn, value) {
+ return (transformationFn || angular.identity)(value);
+ };
+ ```
+ * @param {*} value to be returned.
+ * @returns {*} the value passed in.
+ */
+function identity($) {return $;}
+identity.$inject = [];
+
+
+function valueFn(value) {return function() {return value;};}
+
+/**
+ * @ngdoc function
+ * @name angular.isUndefined
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is undefined.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is undefined.
+ */
+function isUndefined(value) {return typeof value === 'undefined';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isDefined
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is defined.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is defined.
+ */
+function isDefined(value) {return typeof value !== 'undefined';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isObject
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not
+ * considered to be objects. Note that JavaScript arrays are objects.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Object` but not `null`.
+ */
+function isObject(value) {
+ // http://jsperf.com/isobject4
+ return value !== null && typeof value === 'object';
+}
+
+
+/**
+ * Determine if a value is an object with a null prototype
+ *
+ * @returns {boolean} True if `value` is an `Object` with a null prototype
+ */
+function isBlankObject(value) {
+ return value !== null && typeof value === 'object' && !getPrototypeOf(value);
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isString
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `String`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `String`.
+ */
+function isString(value) {return typeof value === 'string';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isNumber
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `Number`.
+ *
+ * This includes the "special" numbers `NaN`, `+Infinity` and `-Infinity`.
+ *
+ * If you wish to exclude these then you can use the native
+ * [`isFinite'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite)
+ * method.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Number`.
+ */
+function isNumber(value) {return typeof value === 'number';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isDate
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a value is a date.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Date`.
+ */
+function isDate(value) {
+ return toString.call(value) === '[object Date]';
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isArray
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is an `Array`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Array`.
+ */
+var isArray = Array.isArray;
+
+/**
+ * @ngdoc function
+ * @name angular.isFunction
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `Function`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Function`.
+ */
+function isFunction(value) {return typeof value === 'function';}
+
+
+/**
+ * Determines if a value is a regular expression object.
+ *
+ * @private
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `RegExp`.
+ */
+function isRegExp(value) {
+ return toString.call(value) === '[object RegExp]';
+}
+
+
+/**
+ * Checks if `obj` is a window object.
+ *
+ * @private
+ * @param {*} obj Object to check
+ * @returns {boolean} True if `obj` is a window obj.
+ */
+function isWindow(obj) {
+ return obj && obj.window === obj;
+}
+
+
+function isScope(obj) {
+ return obj && obj.$evalAsync && obj.$watch;
+}
+
+
+function isFile(obj) {
+ return toString.call(obj) === '[object File]';
+}
+
+
+function isFormData(obj) {
+ return toString.call(obj) === '[object FormData]';
+}
+
+
+function isBlob(obj) {
+ return toString.call(obj) === '[object Blob]';
+}
+
+
+function isBoolean(value) {
+ return typeof value === 'boolean';
+}
+
+
+function isPromiseLike(obj) {
+ return obj && isFunction(obj.then);
+}
+
+
+var TYPED_ARRAY_REGEXP = /^\[object (Uint8(Clamped)?)|(Uint16)|(Uint32)|(Int8)|(Int16)|(Int32)|(Float(32)|(64))Array\]$/;
+function isTypedArray(value) {
+ return TYPED_ARRAY_REGEXP.test(toString.call(value));
+}
+
+
+var trim = function(value) {
+ return isString(value) ? value.trim() : value;
+};
+
+// Copied from:
+// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021
+// Prereq: s is a string.
+var escapeForRegexp = function(s) {
+ return s.replace(/([-()\[\]{}+?*.$\^|,:#= 0) {
+ array.splice(index, 1);
+ }
+ return index;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.copy
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Creates a deep copy of `source`, which should be an object or an array.
+ *
+ * * If no destination is supplied, a copy of the object or array is created.
+ * * If a destination is provided, all of its elements (for arrays) or properties (for objects)
+ * are deleted and then all elements/properties from the source are copied to it.
+ * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
+ * * If `source` is identical to 'destination' an exception will be thrown.
+ *
+ * @param {*} source The source that will be used to make a copy.
+ * Can be any type, including primitives, `null`, and `undefined`.
+ * @param {(Object|Array)=} destination Destination into which the source is copied. If
+ * provided, must be of the same type as `source`.
+ * @returns {*} The copy or updated `destination`, if `destination` was specified.
+ *
+ * @example
+
+
+
+
+
form = {{user | json}}
+
master = {{master | json}}
+
+
+
+
+
+ */
+function copy(source, destination, stackSource, stackDest) {
+ if (isWindow(source) || isScope(source)) {
+ throw ngMinErr('cpws',
+ "Can't copy! Making copies of Window or Scope instances is not supported.");
+ }
+ if (isTypedArray(destination)) {
+ throw ngMinErr('cpta',
+ "Can't copy! TypedArray destination cannot be mutated.");
+ }
+
+ if (!destination) {
+ destination = source;
+ if (source) {
+ if (isArray(source)) {
+ destination = copy(source, [], stackSource, stackDest);
+ } else if (isTypedArray(source)) {
+ destination = new source.constructor(source);
+ } else if (isDate(source)) {
+ destination = new Date(source.getTime());
+ } else if (isRegExp(source)) {
+ destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
+ destination.lastIndex = source.lastIndex;
+ } else if (isObject(source)) {
+ var emptyObject = Object.create(getPrototypeOf(source));
+ destination = copy(source, emptyObject, stackSource, stackDest);
+ }
+ }
+ } else {
+ if (source === destination) throw ngMinErr('cpi',
+ "Can't copy! Source and destination are identical.");
+
+ stackSource = stackSource || [];
+ stackDest = stackDest || [];
+
+ if (isObject(source)) {
+ var index = stackSource.indexOf(source);
+ if (index !== -1) return stackDest[index];
+
+ stackSource.push(source);
+ stackDest.push(destination);
+ }
+
+ var result, key;
+ if (isArray(source)) {
+ destination.length = 0;
+ for (var i = 0; i < source.length; i++) {
+ result = copy(source[i], null, stackSource, stackDest);
+ if (isObject(source[i])) {
+ stackSource.push(source[i]);
+ stackDest.push(result);
+ }
+ destination.push(result);
+ }
+ } else {
+ var h = destination.$$hashKey;
+ if (isArray(destination)) {
+ destination.length = 0;
+ } else {
+ forEach(destination, function(value, key) {
+ delete destination[key];
+ });
+ }
+ if (isBlankObject(source)) {
+ // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
+ for (key in source) {
+ putValue(key, source[key], destination, stackSource, stackDest);
+ }
+ } else if (source && typeof source.hasOwnProperty === 'function') {
+ // Slow path, which must rely on hasOwnProperty
+ for (key in source) {
+ if (source.hasOwnProperty(key)) {
+ putValue(key, source[key], destination, stackSource, stackDest);
+ }
+ }
+ } else {
+ // Slowest path --- hasOwnProperty can't be called as a method
+ for (key in source) {
+ if (hasOwnProperty.call(source, key)) {
+ putValue(key, source[key], destination, stackSource, stackDest);
+ }
+ }
+ }
+ setHashKey(destination,h);
+ }
+ }
+ return destination;
+
+ function putValue(key, val, destination, stackSource, stackDest) {
+ // No context allocation, trivial outer scope, easily inlined
+ var result = copy(val, null, stackSource, stackDest);
+ if (isObject(val)) {
+ stackSource.push(val);
+ stackDest.push(result);
+ }
+ destination[key] = result;
+ }
+}
+
+/**
+ * Creates a shallow copy of an object, an array or a primitive.
+ *
+ * Assumes that there are no proto properties for objects.
+ */
+function shallowCopy(src, dst) {
+ if (isArray(src)) {
+ dst = dst || [];
+
+ for (var i = 0, ii = src.length; i < ii; i++) {
+ dst[i] = src[i];
+ }
+ } else if (isObject(src)) {
+ dst = dst || {};
+
+ for (var key in src) {
+ if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
+ dst[key] = src[key];
+ }
+ }
+ }
+
+ return dst || src;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.equals
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if two objects or two values are equivalent. Supports value types, regular
+ * expressions, arrays and objects.
+ *
+ * Two objects or values are considered equivalent if at least one of the following is true:
+ *
+ * * Both objects or values pass `===` comparison.
+ * * Both objects or values are of the same type and all of their properties are equal by
+ * comparing them with `angular.equals`.
+ * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)
+ * * Both values represent the same regular expression (In JavaScript,
+ * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
+ * representation matches).
+ *
+ * During a property comparison, properties of `function` type and properties with names
+ * that begin with `$` are ignored.
+ *
+ * Scope and DOMWindow objects are being compared only by identify (`===`).
+ *
+ * @param {*} o1 Object or value to compare.
+ * @param {*} o2 Object or value to compare.
+ * @returns {boolean} True if arguments are equal.
+ */
+function equals(o1, o2) {
+ if (o1 === o2) return true;
+ if (o1 === null || o2 === null) return false;
+ if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
+ var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
+ if (t1 == t2) {
+ if (t1 == 'object') {
+ if (isArray(o1)) {
+ if (!isArray(o2)) return false;
+ if ((length = o1.length) == o2.length) {
+ for (key = 0; key < length; key++) {
+ if (!equals(o1[key], o2[key])) return false;
+ }
+ return true;
+ }
+ } else if (isDate(o1)) {
+ if (!isDate(o2)) return false;
+ return equals(o1.getTime(), o2.getTime());
+ } else if (isRegExp(o1)) {
+ return isRegExp(o2) ? o1.toString() == o2.toString() : false;
+ } else {
+ if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) ||
+ isArray(o2) || isDate(o2) || isRegExp(o2)) return false;
+ keySet = createMap();
+ for (key in o1) {
+ if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
+ if (!equals(o1[key], o2[key])) return false;
+ keySet[key] = true;
+ }
+ for (key in o2) {
+ if (!(key in keySet) &&
+ key.charAt(0) !== '$' &&
+ o2[key] !== undefined &&
+ !isFunction(o2[key])) return false;
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+var csp = function() {
+ if (isDefined(csp.isActive_)) return csp.isActive_;
+
+ var active = !!(document.querySelector('[ng-csp]') ||
+ document.querySelector('[data-ng-csp]'));
+
+ if (!active) {
+ try {
+ /* jshint -W031, -W054 */
+ new Function('');
+ /* jshint +W031, +W054 */
+ } catch (e) {
+ active = true;
+ }
+ }
+
+ return (csp.isActive_ = active);
+};
+
+/**
+ * @ngdoc directive
+ * @module ng
+ * @name ngJq
+ *
+ * @element ANY
+ * @param {string=} ngJq the name of the library available under `window`
+ * to be used for angular.element
+ * @description
+ * Use this directive to force the angular.element library. This should be
+ * used to force either jqLite by leaving ng-jq blank or setting the name of
+ * the jquery variable under window (eg. jQuery).
+ *
+ * Since angular looks for this directive when it is loaded (doesn't wait for the
+ * DOMContentLoaded event), it must be placed on an element that comes before the script
+ * which loads angular. Also, only the first instance of `ng-jq` will be used and all
+ * others ignored.
+ *
+ * @example
+ * This example shows how to force jqLite using the `ngJq` directive to the `html` tag.
+ ```html
+
+
+ ...
+ ...
+
+ ```
+ * @example
+ * This example shows how to use a jQuery based library of a different name.
+ * The library name must be available at the top most 'window'.
+ ```html
+
+
+ ...
+ ...
+
+ ```
+ */
+var jq = function() {
+ if (isDefined(jq.name_)) return jq.name_;
+ var el;
+ var i, ii = ngAttrPrefixes.length, prefix, name;
+ for (i = 0; i < ii; ++i) {
+ prefix = ngAttrPrefixes[i];
+ if (el = document.querySelector('[' + prefix.replace(':', '\\:') + 'jq]')) {
+ name = el.getAttribute(prefix + 'jq');
+ break;
+ }
+ }
+
+ return (jq.name_ = name);
+};
+
+function concat(array1, array2, index) {
+ return array1.concat(slice.call(array2, index));
+}
+
+function sliceArgs(args, startIndex) {
+ return slice.call(args, startIndex || 0);
+}
+
+
+/* jshint -W101 */
+/**
+ * @ngdoc function
+ * @name angular.bind
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for
+ * `fn`). You can supply optional `args` that are prebound to the function. This feature is also
+ * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as
+ * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).
+ *
+ * @param {Object} self Context which `fn` should be evaluated in.
+ * @param {function()} fn Function to be bound.
+ * @param {...*} args Optional arguments to be prebound to the `fn` function call.
+ * @returns {function()} Function that wraps the `fn` with all the specified bindings.
+ */
+/* jshint +W101 */
+function bind(self, fn) {
+ var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
+ if (isFunction(fn) && !(fn instanceof RegExp)) {
+ return curryArgs.length
+ ? function() {
+ return arguments.length
+ ? fn.apply(self, concat(curryArgs, arguments, 0))
+ : fn.apply(self, curryArgs);
+ }
+ : function() {
+ return arguments.length
+ ? fn.apply(self, arguments)
+ : fn.call(self);
+ };
+ } else {
+ // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
+ return fn;
+ }
+}
+
+
+function toJsonReplacer(key, value) {
+ var val = value;
+
+ if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
+ val = undefined;
+ } else if (isWindow(value)) {
+ val = '$WINDOW';
+ } else if (value && document === value) {
+ val = '$DOCUMENT';
+ } else if (isScope(value)) {
+ val = '$SCOPE';
+ }
+
+ return val;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.toJson
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be
+ * stripped since angular uses this notation internally.
+ *
+ * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
+ * @param {boolean|number} [pretty=2] If set to true, the JSON output will contain newlines and whitespace.
+ * If set to an integer, the JSON output will contain that many spaces per indentation.
+ * @returns {string|undefined} JSON-ified string representing `obj`.
+ */
+function toJson(obj, pretty) {
+ if (typeof obj === 'undefined') return undefined;
+ if (!isNumber(pretty)) {
+ pretty = pretty ? 2 : null;
+ }
+ return JSON.stringify(obj, toJsonReplacer, pretty);
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.fromJson
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Deserializes a JSON string.
+ *
+ * @param {string} json JSON string to deserialize.
+ * @returns {Object|Array|string|number} Deserialized JSON string.
+ */
+function fromJson(json) {
+ return isString(json)
+ ? JSON.parse(json)
+ : json;
+}
+
+
+function timezoneToOffset(timezone, fallback) {
+ var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
+ return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
+}
+
+
+function addDateMinutes(date, minutes) {
+ date = new Date(date.getTime());
+ date.setMinutes(date.getMinutes() + minutes);
+ return date;
+}
+
+
+function convertTimezoneToLocal(date, timezone, reverse) {
+ reverse = reverse ? -1 : 1;
+ var timezoneOffset = timezoneToOffset(timezone, date.getTimezoneOffset());
+ return addDateMinutes(date, reverse * (timezoneOffset - date.getTimezoneOffset()));
+}
+
+
+/**
+ * @returns {string} Returns the string representation of the element.
+ */
+function startingTag(element) {
+ element = jqLite(element).clone();
+ try {
+ // turns out IE does not let you set .html() on elements which
+ // are not allowed to have children. So we just ignore it.
+ element.empty();
+ } catch (e) {}
+ var elemHtml = jqLite('
').append(element).html();
+ try {
+ return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
+ elemHtml.
+ match(/^(<[^>]+>)/)[1].
+ replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
+ } catch (e) {
+ return lowercase(elemHtml);
+ }
+
+}
+
+
+/////////////////////////////////////////////////
+
+/**
+ * Tries to decode the URI component without throwing an exception.
+ *
+ * @private
+ * @param str value potential URI component to check.
+ * @returns {boolean} True if `value` can be decoded
+ * with the decodeURIComponent function.
+ */
+function tryDecodeURIComponent(value) {
+ try {
+ return decodeURIComponent(value);
+ } catch (e) {
+ // Ignore any invalid uri component
+ }
+}
+
+
+/**
+ * Parses an escaped url query string into key-value pairs.
+ * @returns {Object.}
+ */
+function parseKeyValue(/**string*/keyValue) {
+ var obj = {}, key_value, key;
+ forEach((keyValue || "").split('&'), function(keyValue) {
+ if (keyValue) {
+ key_value = keyValue.replace(/\+/g,'%20').split('=');
+ key = tryDecodeURIComponent(key_value[0]);
+ if (isDefined(key)) {
+ var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
+ if (!hasOwnProperty.call(obj, key)) {
+ obj[key] = val;
+ } else if (isArray(obj[key])) {
+ obj[key].push(val);
+ } else {
+ obj[key] = [obj[key],val];
+ }
+ }
+ }
+ });
+ return obj;
+}
+
+function toKeyValue(obj) {
+ var parts = [];
+ forEach(obj, function(value, key) {
+ if (isArray(value)) {
+ forEach(value, function(arrayValue) {
+ parts.push(encodeUriQuery(key, true) +
+ (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
+ });
+ } else {
+ parts.push(encodeUriQuery(key, true) +
+ (value === true ? '' : '=' + encodeUriQuery(value, true)));
+ }
+ });
+ return parts.length ? parts.join('&') : '';
+}
+
+
+/**
+ * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
+ * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
+ * segments:
+ * segment = *pchar
+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
+ * pct-encoded = "%" HEXDIG HEXDIG
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
+ * / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriSegment(val) {
+ return encodeUriQuery(val, true).
+ replace(/%26/gi, '&').
+ replace(/%3D/gi, '=').
+ replace(/%2B/gi, '+');
+}
+
+
+/**
+ * This method is intended for encoding *key* or *value* parts of query component. We need a custom
+ * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
+ * encoded per http://tools.ietf.org/html/rfc3986:
+ * query = *( pchar / "/" / "?" )
+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ * pct-encoded = "%" HEXDIG HEXDIG
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
+ * / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriQuery(val, pctEncodeSpaces) {
+ return encodeURIComponent(val).
+ replace(/%40/gi, '@').
+ replace(/%3A/gi, ':').
+ replace(/%24/g, '$').
+ replace(/%2C/gi, ',').
+ replace(/%3B/gi, ';').
+ replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
+}
+
+var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];
+
+function getNgAttribute(element, ngAttr) {
+ var attr, i, ii = ngAttrPrefixes.length;
+ for (i = 0; i < ii; ++i) {
+ attr = ngAttrPrefixes[i] + ngAttr;
+ if (isString(attr = element.getAttribute(attr))) {
+ return attr;
+ }
+ }
+ return null;
+}
+
+/**
+ * @ngdoc directive
+ * @name ngApp
+ * @module ng
+ *
+ * @element ANY
+ * @param {angular.Module} ngApp an optional application
+ * {@link angular.module module} name to load.
+ * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be
+ * created in "strict-di" mode. This means that the application will fail to invoke functions which
+ * do not use explicit function annotation (and are thus unsuitable for minification), as described
+ * in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in
+ * tracking down the root of these bugs.
+ *
+ * @description
+ *
+ * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive
+ * designates the **root element** of the application and is typically placed near the root element
+ * of the page - e.g. on the `` or `` tags.
+ *
+ * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
+ * found in the document will be used to define the root element to auto-bootstrap as an
+ * application. To run multiple applications in an HTML document you must manually bootstrap them using
+ * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
+ *
+ * You can specify an **AngularJS module** to be used as the root module for the application. This
+ * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It
+ * should contain the application code needed or have dependencies on other modules that will
+ * contain the code. See {@link angular.module} for more information.
+ *
+ * In the example below if the `ngApp` directive were not placed on the `html` element then the
+ * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
+ * would not be resolved to `3`.
+ *
+ * `ngApp` is the easiest, and most common way to bootstrap an application.
+ *
+
+
+
+ I can add: {{a}} + {{b}} = {{ a+b }}
+
+
+
+ angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
+ $scope.a = 1;
+ $scope.b = 2;
+ });
+
+
+ *
+ * Using `ngStrictDi`, you would see something like this:
+ *
+
+
+
+
+ I can add: {{a}} + {{b}} = {{ a+b }}
+
+
This renders because the controller does not fail to
+ instantiate, by using explicit annotation style (see
+ script.js for details)
+
+
+
+
+ Name:
+ Hello, {{name}}!
+
+
This renders because the controller does not fail to
+ instantiate, by using explicit annotation style
+ (see script.js for details)
+
+
+
+
+ I can add: {{a}} + {{b}} = {{ a+b }}
+
+
The controller could not be instantiated, due to relying
+ on automatic function annotations (which are disabled in
+ strict mode). As such, the content of this section is not
+ interpolated, and there should be an error in your web console.
+
+
+
+
+
+ angular.module('ngAppStrictDemo', [])
+ // BadController will fail to instantiate, due to relying on automatic function annotation,
+ // rather than an explicit annotation
+ .controller('BadController', function($scope) {
+ $scope.a = 1;
+ $scope.b = 2;
+ })
+ // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,
+ // due to using explicit annotations using the array style and $inject property, respectively.
+ .controller('GoodController1', ['$scope', function($scope) {
+ $scope.a = 1;
+ $scope.b = 2;
+ }])
+ .controller('GoodController2', GoodController2);
+ function GoodController2($scope) {
+ $scope.name = "World";
+ }
+ GoodController2.$inject = ['$scope'];
+
+
+ div[ng-controller] {
+ margin-bottom: 1em;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ border: 1px solid;
+ padding: .5em;
+ }
+ div[ng-controller^=Good] {
+ border-color: #d6e9c6;
+ background-color: #dff0d8;
+ color: #3c763d;
+ }
+ div[ng-controller^=Bad] {
+ border-color: #ebccd1;
+ background-color: #f2dede;
+ color: #a94442;
+ margin-bottom: 0;
+ }
+
+
+ */
+function angularInit(element, bootstrap) {
+ var appElement,
+ module,
+ config = {};
+
+ // The element `element` has priority over any other element
+ forEach(ngAttrPrefixes, function(prefix) {
+ var name = prefix + 'app';
+
+ if (!appElement && element.hasAttribute && element.hasAttribute(name)) {
+ appElement = element;
+ module = element.getAttribute(name);
+ }
+ });
+ forEach(ngAttrPrefixes, function(prefix) {
+ var name = prefix + 'app';
+ var candidate;
+
+ if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) {
+ appElement = candidate;
+ module = candidate.getAttribute(name);
+ }
+ });
+ if (appElement) {
+ config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
+ bootstrap(appElement, module ? [module] : [], config);
+ }
+}
+
+/**
+ * @ngdoc function
+ * @name angular.bootstrap
+ * @module ng
+ * @description
+ * Use this function to manually start up angular application.
+ *
+ * See: {@link guide/bootstrap Bootstrap}
+ *
+ * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.
+ * They must use {@link ng.directive:ngApp ngApp}.
+ *
+ * Angular will detect if it has been loaded into the browser more than once and only allow the
+ * first loaded script to be bootstrapped and will report a warning to the browser console for
+ * each of the subsequent scripts. This prevents strange results in applications, where otherwise
+ * multiple instances of Angular try to work on the DOM.
+ *
+ * ```html
+ *
+ *
+ *
+ *
+ * {{greeting}}
+ *
+ *
+ *
+ *
+ *
+ *
+ * ```
+ *
+ * @param {DOMElement} element DOM element which is the root of angular application.
+ * @param {Array=} modules an array of modules to load into the application.
+ * Each item in the array should be the name of a predefined module or a (DI annotated)
+ * function that will be invoked by the injector as a `config` block.
+ * See: {@link angular.module modules}
+ * @param {Object=} config an object for defining configuration options for the application. The
+ * following keys are supported:
+ *
+ * * `strictDi` - disable automatic function annotation for the application. This is meant to
+ * assist in finding bugs which break minified code. Defaults to `false`.
+ *
+ * @returns {auto.$injector} Returns the newly created injector for this app.
+ */
+function bootstrap(element, modules, config) {
+ if (!isObject(config)) config = {};
+ var defaultConfig = {
+ strictDi: false
+ };
+ config = extend(defaultConfig, config);
+ var doBootstrap = function() {
+ element = jqLite(element);
+
+ if (element.injector()) {
+ var tag = (element[0] === document) ? 'document' : startingTag(element);
+ //Encode angle brackets to prevent input from being sanitized to empty string #8683
+ throw ngMinErr(
+ 'btstrpd',
+ "App Already Bootstrapped with this Element '{0}'",
+ tag.replace(/,'<').replace(/>/,'>'));
+ }
+
+ modules = modules || [];
+ modules.unshift(['$provide', function($provide) {
+ $provide.value('$rootElement', element);
+ }]);
+
+ if (config.debugInfoEnabled) {
+ // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.
+ modules.push(['$compileProvider', function($compileProvider) {
+ $compileProvider.debugInfoEnabled(true);
+ }]);
+ }
+
+ modules.unshift('ng');
+ var injector = createInjector(modules, config.strictDi);
+ injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
+ function bootstrapApply(scope, element, compile, injector) {
+ scope.$apply(function() {
+ element.data('$injector', injector);
+ compile(element)(scope);
+ });
+ }]
+ );
+ return injector;
+ };
+
+ var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;
+ var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
+
+ if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {
+ config.debugInfoEnabled = true;
+ window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');
+ }
+
+ if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
+ return doBootstrap();
+ }
+
+ window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
+ angular.resumeBootstrap = function(extraModules) {
+ forEach(extraModules, function(module) {
+ modules.push(module);
+ });
+ return doBootstrap();
+ };
+
+ if (isFunction(angular.resumeDeferredBootstrap)) {
+ angular.resumeDeferredBootstrap();
+ }
+}
+
+/**
+ * @ngdoc function
+ * @name angular.reloadWithDebugInfo
+ * @module ng
+ * @description
+ * Use this function to reload the current application with debug information turned on.
+ * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.
+ *
+ * See {@link ng.$compileProvider#debugInfoEnabled} for more.
+ */
+function reloadWithDebugInfo() {
+ window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;
+ window.location.reload();
+}
+
+/**
+ * @name angular.getTestability
+ * @module ng
+ * @description
+ * Get the testability service for the instance of Angular on the given
+ * element.
+ * @param {DOMElement} element DOM element which is the root of angular application.
+ */
+function getTestability(rootElement) {
+ var injector = angular.element(rootElement).injector();
+ if (!injector) {
+ throw ngMinErr('test',
+ 'no injector found for element argument to getTestability');
+ }
+ return injector.get('$$testability');
+}
+
+var SNAKE_CASE_REGEXP = /[A-Z]/g;
+function snake_case(name, separator) {
+ separator = separator || '_';
+ return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
+ return (pos ? separator : '') + letter.toLowerCase();
+ });
+}
+
+var bindJQueryFired = false;
+var skipDestroyOnNextJQueryCleanData;
+function bindJQuery() {
+ var originalCleanData;
+
+ if (bindJQueryFired) {
+ return;
+ }
+
+ // bind to jQuery if present;
+ var jqName = jq();
+ jQuery = window.jQuery; // use default jQuery.
+ if (isDefined(jqName)) { // `ngJq` present
+ jQuery = jqName === null ? undefined : window[jqName]; // if empty; use jqLite. if not empty, use jQuery specified by `ngJq`.
+ }
+
+ // Use jQuery if it exists with proper functionality, otherwise default to us.
+ // Angular 1.2+ requires jQuery 1.7+ for on()/off() support.
+ // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older
+ // versions. It will not work for sure with jQuery <1.7, though.
+ if (jQuery && jQuery.fn.on) {
+ jqLite = jQuery;
+ extend(jQuery.fn, {
+ scope: JQLitePrototype.scope,
+ isolateScope: JQLitePrototype.isolateScope,
+ controller: JQLitePrototype.controller,
+ injector: JQLitePrototype.injector,
+ inheritedData: JQLitePrototype.inheritedData
+ });
+
+ // All nodes removed from the DOM via various jQuery APIs like .remove()
+ // are passed through jQuery.cleanData. Monkey-patch this method to fire
+ // the $destroy event on all removed nodes.
+ originalCleanData = jQuery.cleanData;
+ jQuery.cleanData = function(elems) {
+ var events;
+ if (!skipDestroyOnNextJQueryCleanData) {
+ for (var i = 0, elem; (elem = elems[i]) != null; i++) {
+ events = jQuery._data(elem, "events");
+ if (events && events.$destroy) {
+ jQuery(elem).triggerHandler('$destroy');
+ }
+ }
+ } else {
+ skipDestroyOnNextJQueryCleanData = false;
+ }
+ originalCleanData(elems);
+ };
+ } else {
+ jqLite = JQLite;
+ }
+
+ angular.element = jqLite;
+
+ // Prevent double-proxying.
+ bindJQueryFired = true;
+}
+
+/**
+ * throw error if the argument is falsy.
+ */
+function assertArg(arg, name, reason) {
+ if (!arg) {
+ throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
+ }
+ return arg;
+}
+
+function assertArgFn(arg, name, acceptArrayAnnotation) {
+ if (acceptArrayAnnotation && isArray(arg)) {
+ arg = arg[arg.length - 1];
+ }
+
+ assertArg(isFunction(arg), name, 'not a function, got ' +
+ (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));
+ return arg;
+}
+
+/**
+ * throw error if the name given is hasOwnProperty
+ * @param {String} name the name to test
+ * @param {String} context the context in which the name is used, such as module or directive
+ */
+function assertNotHasOwnProperty(name, context) {
+ if (name === 'hasOwnProperty') {
+ throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context);
+ }
+}
+
+/**
+ * Return the value accessible from the object by path. Any undefined traversals are ignored
+ * @param {Object} obj starting object
+ * @param {String} path path to traverse
+ * @param {boolean} [bindFnToScope=true]
+ * @returns {Object} value as accessible by path
+ */
+//TODO(misko): this function needs to be removed
+function getter(obj, path, bindFnToScope) {
+ if (!path) return obj;
+ var keys = path.split('.');
+ var key;
+ var lastInstance = obj;
+ var len = keys.length;
+
+ for (var i = 0; i < len; i++) {
+ key = keys[i];
+ if (obj) {
+ obj = (lastInstance = obj)[key];
+ }
+ }
+ if (!bindFnToScope && isFunction(obj)) {
+ return bind(lastInstance, obj);
+ }
+ return obj;
+}
+
+/**
+ * Return the DOM siblings between the first and last node in the given array.
+ * @param {Array} array like object
+ * @returns {jqLite} jqLite collection containing the nodes
+ */
+function getBlockNodes(nodes) {
+ // TODO(perf): just check if all items in `nodes` are siblings and if they are return the original
+ // collection, otherwise update the original collection.
+ var node = nodes[0];
+ var endNode = nodes[nodes.length - 1];
+ var blockNodes = [node];
+
+ do {
+ node = node.nextSibling;
+ if (!node) break;
+ blockNodes.push(node);
+ } while (node !== endNode);
+
+ return jqLite(blockNodes);
+}
+
+
+/**
+ * Creates a new object without a prototype. This object is useful for lookup without having to
+ * guard against prototypically inherited properties via hasOwnProperty.
+ *
+ * Related micro-benchmarks:
+ * - http://jsperf.com/object-create2
+ * - http://jsperf.com/proto-map-lookup/2
+ * - http://jsperf.com/for-in-vs-object-keys2
+ *
+ * @returns {Object}
+ */
+function createMap() {
+ return Object.create(null);
+}
+
+var NODE_TYPE_ELEMENT = 1;
+var NODE_TYPE_ATTRIBUTE = 2;
+var NODE_TYPE_TEXT = 3;
+var NODE_TYPE_COMMENT = 8;
+var NODE_TYPE_DOCUMENT = 9;
+var NODE_TYPE_DOCUMENT_FRAGMENT = 11;
+
+/**
+ * @ngdoc type
+ * @name angular.Module
+ * @module ng
+ * @description
+ *
+ * Interface for configuring angular {@link angular.module modules}.
+ */
+
+function setupModuleLoader(window) {
+
+ var $injectorMinErr = minErr('$injector');
+ var ngMinErr = minErr('ng');
+
+ function ensure(obj, name, factory) {
+ return obj[name] || (obj[name] = factory());
+ }
+
+ var angular = ensure(window, 'angular', Object);
+
+ // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
+ angular.$$minErr = angular.$$minErr || minErr;
+
+ return ensure(angular, 'module', function() {
+ /** @type {Object.} */
+ var modules = {};
+
+ /**
+ * @ngdoc function
+ * @name angular.module
+ * @module ng
+ * @description
+ *
+ * The `angular.module` is a global place for creating, registering and retrieving Angular
+ * modules.
+ * All modules (angular core or 3rd party) that should be available to an application must be
+ * registered using this mechanism.
+ *
+ * When passed two or more arguments, a new module is created. If passed only one argument, an
+ * existing module (the name passed as the first argument to `module`) is retrieved.
+ *
+ *
+ * # Module
+ *
+ * A module is a collection of services, directives, controllers, filters, and configuration information.
+ * `angular.module` is used to configure the {@link auto.$injector $injector}.
+ *
+ * ```js
+ * // Create a new module
+ * var myModule = angular.module('myModule', []);
+ *
+ * // register a new service
+ * myModule.value('appName', 'MyCoolApp');
+ *
+ * // configure existing services inside initialization blocks.
+ * myModule.config(['$locationProvider', function($locationProvider) {
+ * // Configure existing providers
+ * $locationProvider.hashPrefix('!');
+ * }]);
+ * ```
+ *
+ * Then you can create an injector and load your modules like this:
+ *
+ * ```js
+ * var injector = angular.injector(['ng', 'myModule'])
+ * ```
+ *
+ * However it's more likely that you'll just use
+ * {@link ng.directive:ngApp ngApp} or
+ * {@link angular.bootstrap} to simplify this process for you.
+ *
+ * @param {!string} name The name of the module to create or retrieve.
+ * @param {!Array.=} requires If specified then new module is being created. If
+ * unspecified then the module is being retrieved for further configuration.
+ * @param {Function=} configFn Optional configuration function for the module. Same as
+ * {@link angular.Module#config Module#config()}.
+ * @returns {module} new module with the {@link angular.Module} api.
+ */
+ return function module(name, requires, configFn) {
+ var assertNotHasOwnProperty = function(name, context) {
+ if (name === 'hasOwnProperty') {
+ throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
+ }
+ };
+
+ assertNotHasOwnProperty(name, 'module');
+ if (requires && modules.hasOwnProperty(name)) {
+ modules[name] = null;
+ }
+ return ensure(modules, name, function() {
+ if (!requires) {
+ throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
+ "the module name or forgot to load it. If registering a module ensure that you " +
+ "specify the dependencies as the second argument.", name);
+ }
+
+ /** @type {!Array.>} */
+ var invokeQueue = [];
+
+ /** @type {!Array.} */
+ var configBlocks = [];
+
+ /** @type {!Array.} */
+ var runBlocks = [];
+
+ var config = invokeLater('$injector', 'invoke', 'push', configBlocks);
+
+ /** @type {angular.Module} */
+ var moduleInstance = {
+ // Private state
+ _invokeQueue: invokeQueue,
+ _configBlocks: configBlocks,
+ _runBlocks: runBlocks,
+
+ /**
+ * @ngdoc property
+ * @name angular.Module#requires
+ * @module ng
+ *
+ * @description
+ * Holds the list of modules which the injector will load before the current module is
+ * loaded.
+ */
+ requires: requires,
+
+ /**
+ * @ngdoc property
+ * @name angular.Module#name
+ * @module ng
+ *
+ * @description
+ * Name of the module.
+ */
+ name: name,
+
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#provider
+ * @module ng
+ * @param {string} name service name
+ * @param {Function} providerType Construction function for creating new instance of the
+ * service.
+ * @description
+ * See {@link auto.$provide#provider $provide.provider()}.
+ */
+ provider: invokeLater('$provide', 'provider'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#factory
+ * @module ng
+ * @param {string} name service name
+ * @param {Function} providerFunction Function for creating new instance of the service.
+ * @description
+ * See {@link auto.$provide#factory $provide.factory()}.
+ */
+ factory: invokeLater('$provide', 'factory'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#service
+ * @module ng
+ * @param {string} name service name
+ * @param {Function} constructor A constructor function that will be instantiated.
+ * @description
+ * See {@link auto.$provide#service $provide.service()}.
+ */
+ service: invokeLater('$provide', 'service'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#value
+ * @module ng
+ * @param {string} name service name
+ * @param {*} object Service instance object.
+ * @description
+ * See {@link auto.$provide#value $provide.value()}.
+ */
+ value: invokeLater('$provide', 'value'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#constant
+ * @module ng
+ * @param {string} name constant name
+ * @param {*} object Constant value.
+ * @description
+ * Because the constant are fixed, they get applied before other provide methods.
+ * See {@link auto.$provide#constant $provide.constant()}.
+ */
+ constant: invokeLater('$provide', 'constant', 'unshift'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#decorator
+ * @module ng
+ * @param {string} The name of the service to decorate.
+ * @param {Function} This function will be invoked when the service needs to be
+ * instantiated and should return the decorated service instance.
+ * @description
+ * See {@link auto.$provide#decorator $provide.decorator()}.
+ */
+ decorator: invokeLater('$provide', 'decorator'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#animation
+ * @module ng
+ * @param {string} name animation name
+ * @param {Function} animationFactory Factory function for creating new instance of an
+ * animation.
+ * @description
+ *
+ * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
+ *
+ *
+ * Defines an animation hook that can be later used with
+ * {@link $animate $animate} service and directives that use this service.
+ *
+ * ```js
+ * module.animation('.animation-name', function($inject1, $inject2) {
+ * return {
+ * eventName : function(element, done) {
+ * //code to run the animation
+ * //once complete, then run done()
+ * return function cancellationFunction(element) {
+ * //code to cancel the animation
+ * }
+ * }
+ * }
+ * })
+ * ```
+ *
+ * See {@link ng.$animateProvider#register $animateProvider.register()} and
+ * {@link ngAnimate ngAnimate module} for more information.
+ */
+ animation: invokeLater('$animateProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#filter
+ * @module ng
+ * @param {string} name Filter name - this must be a valid angular expression identifier
+ * @param {Function} filterFactory Factory function for creating new instance of filter.
+ * @description
+ * See {@link ng.$filterProvider#register $filterProvider.register()}.
+ *
+ *
+ * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.
+ * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
+ * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
+ * (`myapp_subsection_filterx`).
+ *
+ */
+ filter: invokeLater('$filterProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#controller
+ * @module ng
+ * @param {string|Object} name Controller name, or an object map of controllers where the
+ * keys are the names and the values are the constructors.
+ * @param {Function} constructor Controller constructor function.
+ * @description
+ * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
+ */
+ controller: invokeLater('$controllerProvider', 'register'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#directive
+ * @module ng
+ * @param {string|Object} name Directive name, or an object map of directives where the
+ * keys are the names and the values are the factories.
+ * @param {Function} directiveFactory Factory function for creating new instance of
+ * directives.
+ * @description
+ * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
+ */
+ directive: invokeLater('$compileProvider', 'directive'),
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#config
+ * @module ng
+ * @param {Function} configFn Execute this function on module load. Useful for service
+ * configuration.
+ * @description
+ * Use this method to register work which needs to be performed on module loading.
+ * For more about how to configure services, see
+ * {@link providers#provider-recipe Provider Recipe}.
+ */
+ config: config,
+
+ /**
+ * @ngdoc method
+ * @name angular.Module#run
+ * @module ng
+ * @param {Function} initializationFn Execute this function after injector creation.
+ * Useful for application initialization.
+ * @description
+ * Use this method to register work which should be performed when the injector is done
+ * loading all modules.
+ */
+ run: function(block) {
+ runBlocks.push(block);
+ return this;
+ }
+ };
+
+ if (configFn) {
+ config(configFn);
+ }
+
+ return moduleInstance;
+
+ /**
+ * @param {string} provider
+ * @param {string} method
+ * @param {String=} insertMethod
+ * @returns {angular.Module}
+ */
+ function invokeLater(provider, method, insertMethod, queue) {
+ if (!queue) queue = invokeQueue;
+ return function() {
+ queue[insertMethod || 'push']([provider, method, arguments]);
+ return moduleInstance;
+ };
+ }
+ });
+ };
+ });
+
+}
+
+/* global: toDebugString: true */
+
+function serializeObject(obj) {
+ var seen = [];
+
+ return JSON.stringify(obj, function(key, val) {
+ val = toJsonReplacer(key, val);
+ if (isObject(val)) {
+
+ if (seen.indexOf(val) >= 0) return '<>';
+
+ seen.push(val);
+ }
+ return val;
+ });
+}
+
+function toDebugString(obj) {
+ if (typeof obj === 'function') {
+ return obj.toString().replace(/ \{[\s\S]*$/, '');
+ } else if (typeof obj === 'undefined') {
+ return 'undefined';
+ } else if (typeof obj !== 'string') {
+ return serializeObject(obj);
+ }
+ return obj;
+}
+
+/* global angularModule: true,
+ version: true,
+
+ $LocaleProvider,
+ $CompileProvider,
+
+ htmlAnchorDirective,
+ inputDirective,
+ inputDirective,
+ formDirective,
+ scriptDirective,
+ selectDirective,
+ styleDirective,
+ optionDirective,
+ ngBindDirective,
+ ngBindHtmlDirective,
+ ngBindTemplateDirective,
+ ngClassDirective,
+ ngClassEvenDirective,
+ ngClassOddDirective,
+ ngCspDirective,
+ ngCloakDirective,
+ ngControllerDirective,
+ ngFormDirective,
+ ngHideDirective,
+ ngIfDirective,
+ ngIncludeDirective,
+ ngIncludeFillContentDirective,
+ ngInitDirective,
+ ngNonBindableDirective,
+ ngPluralizeDirective,
+ ngRepeatDirective,
+ ngShowDirective,
+ ngStyleDirective,
+ ngSwitchDirective,
+ ngSwitchWhenDirective,
+ ngSwitchDefaultDirective,
+ ngOptionsDirective,
+ ngTranscludeDirective,
+ ngModelDirective,
+ ngListDirective,
+ ngChangeDirective,
+ patternDirective,
+ patternDirective,
+ requiredDirective,
+ requiredDirective,
+ minlengthDirective,
+ minlengthDirective,
+ maxlengthDirective,
+ maxlengthDirective,
+ ngValueDirective,
+ ngModelOptionsDirective,
+ ngAttributeAliasDirectives,
+ ngEventDirectives,
+
+ $AnchorScrollProvider,
+ $AnimateProvider,
+ $$CoreAnimateQueueProvider,
+ $$CoreAnimateRunnerProvider,
+ $BrowserProvider,
+ $CacheFactoryProvider,
+ $ControllerProvider,
+ $DocumentProvider,
+ $ExceptionHandlerProvider,
+ $FilterProvider,
+ $InterpolateProvider,
+ $IntervalProvider,
+ $$HashMapProvider,
+ $HttpProvider,
+ $HttpParamSerializerProvider,
+ $HttpParamSerializerJQLikeProvider,
+ $HttpBackendProvider,
+ $LocationProvider,
+ $LogProvider,
+ $ParseProvider,
+ $RootScopeProvider,
+ $QProvider,
+ $$QProvider,
+ $$SanitizeUriProvider,
+ $SceProvider,
+ $SceDelegateProvider,
+ $SnifferProvider,
+ $TemplateCacheProvider,
+ $TemplateRequestProvider,
+ $$TestabilityProvider,
+ $TimeoutProvider,
+ $$RAFProvider,
+ $$AsyncCallbackProvider,
+ $WindowProvider,
+ $$jqLiteProvider,
+ $$CookieReaderProvider
+*/
+
+
+/**
+ * @ngdoc object
+ * @name angular.version
+ * @module ng
+ * @description
+ * An object that contains information about the current AngularJS version. This object has the
+ * following properties:
+ *
+ * - `full` – `{string}` – Full version string, such as "0.9.18".
+ * - `major` – `{number}` – Major version number, such as "0".
+ * - `minor` – `{number}` – Minor version number, such as "9".
+ * - `dot` – `{number}` – Dot version number, such as "18".
+ * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
+ */
+var version = {
+ full: '1.4.0', // all of these placeholder strings will be replaced by grunt's
+ major: 1, // package task
+ minor: 4,
+ dot: 0,
+ codeName: 'jaracimrman-existence'
+};
+
+
+function publishExternalAPI(angular) {
+ extend(angular, {
+ 'bootstrap': bootstrap,
+ 'copy': copy,
+ 'extend': extend,
+ 'merge': merge,
+ 'equals': equals,
+ 'element': jqLite,
+ 'forEach': forEach,
+ 'injector': createInjector,
+ 'noop': noop,
+ 'bind': bind,
+ 'toJson': toJson,
+ 'fromJson': fromJson,
+ 'identity': identity,
+ 'isUndefined': isUndefined,
+ 'isDefined': isDefined,
+ 'isString': isString,
+ 'isFunction': isFunction,
+ 'isObject': isObject,
+ 'isNumber': isNumber,
+ 'isElement': isElement,
+ 'isArray': isArray,
+ 'version': version,
+ 'isDate': isDate,
+ 'lowercase': lowercase,
+ 'uppercase': uppercase,
+ 'callbacks': {counter: 0},
+ 'getTestability': getTestability,
+ '$$minErr': minErr,
+ '$$csp': csp,
+ 'reloadWithDebugInfo': reloadWithDebugInfo
+ });
+
+ angularModule = setupModuleLoader(window);
+ try {
+ angularModule('ngLocale');
+ } catch (e) {
+ angularModule('ngLocale', []).provider('$locale', $LocaleProvider);
+ }
+
+ angularModule('ng', ['ngLocale'], ['$provide',
+ function ngModule($provide) {
+ // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.
+ $provide.provider({
+ $$sanitizeUri: $$SanitizeUriProvider
+ });
+ $provide.provider('$compile', $CompileProvider).
+ directive({
+ a: htmlAnchorDirective,
+ input: inputDirective,
+ textarea: inputDirective,
+ form: formDirective,
+ script: scriptDirective,
+ select: selectDirective,
+ style: styleDirective,
+ option: optionDirective,
+ ngBind: ngBindDirective,
+ ngBindHtml: ngBindHtmlDirective,
+ ngBindTemplate: ngBindTemplateDirective,
+ ngClass: ngClassDirective,
+ ngClassEven: ngClassEvenDirective,
+ ngClassOdd: ngClassOddDirective,
+ ngCloak: ngCloakDirective,
+ ngController: ngControllerDirective,
+ ngForm: ngFormDirective,
+ ngHide: ngHideDirective,
+ ngIf: ngIfDirective,
+ ngInclude: ngIncludeDirective,
+ ngInit: ngInitDirective,
+ ngNonBindable: ngNonBindableDirective,
+ ngPluralize: ngPluralizeDirective,
+ ngRepeat: ngRepeatDirective,
+ ngShow: ngShowDirective,
+ ngStyle: ngStyleDirective,
+ ngSwitch: ngSwitchDirective,
+ ngSwitchWhen: ngSwitchWhenDirective,
+ ngSwitchDefault: ngSwitchDefaultDirective,
+ ngOptions: ngOptionsDirective,
+ ngTransclude: ngTranscludeDirective,
+ ngModel: ngModelDirective,
+ ngList: ngListDirective,
+ ngChange: ngChangeDirective,
+ pattern: patternDirective,
+ ngPattern: patternDirective,
+ required: requiredDirective,
+ ngRequired: requiredDirective,
+ minlength: minlengthDirective,
+ ngMinlength: minlengthDirective,
+ maxlength: maxlengthDirective,
+ ngMaxlength: maxlengthDirective,
+ ngValue: ngValueDirective,
+ ngModelOptions: ngModelOptionsDirective
+ }).
+ directive({
+ ngInclude: ngIncludeFillContentDirective
+ }).
+ directive(ngAttributeAliasDirectives).
+ directive(ngEventDirectives);
+ $provide.provider({
+ $anchorScroll: $AnchorScrollProvider,
+ $animate: $AnimateProvider,
+ $$animateQueue: $$CoreAnimateQueueProvider,
+ $$AnimateRunner: $$CoreAnimateRunnerProvider,
+ $browser: $BrowserProvider,
+ $cacheFactory: $CacheFactoryProvider,
+ $controller: $ControllerProvider,
+ $document: $DocumentProvider,
+ $exceptionHandler: $ExceptionHandlerProvider,
+ $filter: $FilterProvider,
+ $interpolate: $InterpolateProvider,
+ $interval: $IntervalProvider,
+ $http: $HttpProvider,
+ $httpParamSerializer: $HttpParamSerializerProvider,
+ $httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider,
+ $httpBackend: $HttpBackendProvider,
+ $location: $LocationProvider,
+ $log: $LogProvider,
+ $parse: $ParseProvider,
+ $rootScope: $RootScopeProvider,
+ $q: $QProvider,
+ $$q: $$QProvider,
+ $sce: $SceProvider,
+ $sceDelegate: $SceDelegateProvider,
+ $sniffer: $SnifferProvider,
+ $templateCache: $TemplateCacheProvider,
+ $templateRequest: $TemplateRequestProvider,
+ $$testability: $$TestabilityProvider,
+ $timeout: $TimeoutProvider,
+ $window: $WindowProvider,
+ $$rAF: $$RAFProvider,
+ $$asyncCallback: $$AsyncCallbackProvider,
+ $$jqLite: $$jqLiteProvider,
+ $$HashMap: $$HashMapProvider,
+ $$cookieReader: $$CookieReaderProvider
+ });
+ }
+ ]);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Any commits to this file should be reviewed with security in mind. *
+ * Changes to this file can potentially create security vulnerabilities. *
+ * An approval from 2 Core members with history of modifying *
+ * this file is required. *
+ * *
+ * Does the change somehow allow for arbitrary javascript to be executed? *
+ * Or allows for someone to change the prototype of built-in objects? *
+ * Or gives undesired access to variables likes document or window? *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* global JQLitePrototype: true,
+ addEventListenerFn: true,
+ removeEventListenerFn: true,
+ BOOLEAN_ATTR: true,
+ ALIASED_ATTR: true,
+*/
+
+//////////////////////////////////
+//JQLite
+//////////////////////////////////
+
+/**
+ * @ngdoc function
+ * @name angular.element
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.
+ *
+ * If jQuery is available, `angular.element` is an alias for the
+ * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`
+ * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite."
+ *
+ *
jqLite is a tiny, API-compatible subset of jQuery that allows
+ * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most
+ * commonly needed functionality with the goal of having a very small footprint.
+ *
+ * To use `jQuery`, simply ensure it is loaded before the `angular.js` file.
+ *
+ *
**Note:** all element references in Angular are always wrapped with jQuery or
+ * jqLite; they are never raw DOM references.
+ *
+ * ## Angular's jqLite
+ * jqLite provides only the following jQuery methods:
+ *
+ * - [`addClass()`](http://api.jquery.com/addClass/)
+ * - [`after()`](http://api.jquery.com/after/)
+ * - [`append()`](http://api.jquery.com/append/)
+ * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters
+ * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
+ * - [`children()`](http://api.jquery.com/children/) - Does not support selectors
+ * - [`clone()`](http://api.jquery.com/clone/)
+ * - [`contents()`](http://api.jquery.com/contents/)
+ * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`. As a setter, does not convert numbers to strings or append 'px'.
+ * - [`data()`](http://api.jquery.com/data/)
+ * - [`detach()`](http://api.jquery.com/detach/)
+ * - [`empty()`](http://api.jquery.com/empty/)
+ * - [`eq()`](http://api.jquery.com/eq/)
+ * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name
+ * - [`hasClass()`](http://api.jquery.com/hasClass/)
+ * - [`html()`](http://api.jquery.com/html/)
+ * - [`next()`](http://api.jquery.com/next/) - Does not support selectors
+ * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
+ * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors
+ * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors
+ * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors
+ * - [`prepend()`](http://api.jquery.com/prepend/)
+ * - [`prop()`](http://api.jquery.com/prop/)
+ * - [`ready()`](http://api.jquery.com/ready/)
+ * - [`remove()`](http://api.jquery.com/remove/)
+ * - [`removeAttr()`](http://api.jquery.com/removeAttr/)
+ * - [`removeClass()`](http://api.jquery.com/removeClass/)
+ * - [`removeData()`](http://api.jquery.com/removeData/)
+ * - [`replaceWith()`](http://api.jquery.com/replaceWith/)
+ * - [`text()`](http://api.jquery.com/text/)
+ * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
+ * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
+ * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces
+ * - [`val()`](http://api.jquery.com/val/)
+ * - [`wrap()`](http://api.jquery.com/wrap/)
+ *
+ * ## jQuery/jqLite Extras
+ * Angular also provides the following additional methods and events to both jQuery and jqLite:
+ *
+ * ### Events
+ * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
+ * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM
+ * element before it is removed.
+ *
+ * ### Methods
+ * - `controller(name)` - retrieves the controller of the current element or its parent. By default
+ * retrieves controller associated with the `ngController` directive. If `name` is provided as
+ * camelCase directive name, then the controller for this directive will be retrieved (e.g.
+ * `'ngModel'`).
+ * - `injector()` - retrieves the injector of the current element or its parent.
+ * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current
+ * element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to
+ * be enabled.
+ * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the
+ * current element. This getter should be used only on elements that contain a directive which starts a new isolate
+ * scope. Calling `scope()` on this element always returns the original non-isolate scope.
+ * Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.
+ * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
+ * parent element is reached.
+ *
+ * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
+ * @returns {Object} jQuery object.
+ */
+
+JQLite.expando = 'ng339';
+
+var jqCache = JQLite.cache = {},
+ jqId = 1,
+ addEventListenerFn = function(element, type, fn) {
+ element.addEventListener(type, fn, false);
+ },
+ removeEventListenerFn = function(element, type, fn) {
+ element.removeEventListener(type, fn, false);
+ };
+
+/*
+ * !!! This is an undocumented "private" function !!!
+ */
+JQLite._data = function(node) {
+ //jQuery always returns an object on cache miss
+ return this.cache[node[this.expando]] || {};
+};
+
+function jqNextId() { return ++jqId; }
+
+
+var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
+var MOZ_HACK_REGEXP = /^moz([A-Z])/;
+var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"};
+var jqLiteMinErr = minErr('jqLite');
+
+/**
+ * Converts snake_case to camelCase.
+ * Also there is special case for Moz prefix starting with upper case letter.
+ * @param name Name to normalize
+ */
+function camelCase(name) {
+ return name.
+ replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
+ return offset ? letter.toUpperCase() : letter;
+ }).
+ replace(MOZ_HACK_REGEXP, 'Moz$1');
+}
+
+var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;
+var HTML_REGEXP = /<|?\w+;/;
+var TAG_NAME_REGEXP = /<([\w:]+)/;
+var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi;
+
+var wrapMap = {
+ 'option': [1, ''],
+
+ 'thead': [1, '
', '
'],
+ 'col': [2, '
', '
'],
+ 'tr': [2, '
', '
'],
+ 'td': [3, '
', '
'],
+ '_default': [0, "", ""]
+};
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function jqLiteIsTextNode(html) {
+ return !HTML_REGEXP.test(html);
+}
+
+function jqLiteAcceptsData(node) {
+ // The window object can accept data but has no nodeType
+ // Otherwise we are only interested in elements (1) and documents (9)
+ var nodeType = node.nodeType;
+ return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT;
+}
+
+function jqLiteBuildFragment(html, context) {
+ var tmp, tag, wrap,
+ fragment = context.createDocumentFragment(),
+ nodes = [], i;
+
+ if (jqLiteIsTextNode(html)) {
+ // Convert non-html into a text node
+ nodes.push(context.createTextNode(html));
+ } else {
+ // Convert html into DOM nodes
+ tmp = tmp || fragment.appendChild(context.createElement("div"));
+ tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase();
+ wrap = wrapMap[tag] || wrapMap._default;
+ tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1>$2>") + wrap[2];
+
+ // Descend through wrappers to the right content
+ i = wrap[0];
+ while (i--) {
+ tmp = tmp.lastChild;
+ }
+
+ nodes = concat(nodes, tmp.childNodes);
+
+ tmp = fragment.firstChild;
+ tmp.textContent = "";
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+ fragment.innerHTML = ""; // Clear inner HTML
+ forEach(nodes, function(node) {
+ fragment.appendChild(node);
+ });
+
+ return fragment;
+}
+
+function jqLiteParseHTML(html, context) {
+ context = context || document;
+ var parsed;
+
+ if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {
+ return [context.createElement(parsed[1])];
+ }
+
+ if ((parsed = jqLiteBuildFragment(html, context))) {
+ return parsed.childNodes;
+ }
+
+ return [];
+}
+
+/////////////////////////////////////////////
+function JQLite(element) {
+ if (element instanceof JQLite) {
+ return element;
+ }
+
+ var argIsString;
+
+ if (isString(element)) {
+ element = trim(element);
+ argIsString = true;
+ }
+ if (!(this instanceof JQLite)) {
+ if (argIsString && element.charAt(0) != '<') {
+ throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');
+ }
+ return new JQLite(element);
+ }
+
+ if (argIsString) {
+ jqLiteAddNodes(this, jqLiteParseHTML(element));
+ } else {
+ jqLiteAddNodes(this, element);
+ }
+}
+
+function jqLiteClone(element) {
+ return element.cloneNode(true);
+}
+
+function jqLiteDealoc(element, onlyDescendants) {
+ if (!onlyDescendants) jqLiteRemoveData(element);
+
+ if (element.querySelectorAll) {
+ var descendants = element.querySelectorAll('*');
+ for (var i = 0, l = descendants.length; i < l; i++) {
+ jqLiteRemoveData(descendants[i]);
+ }
+ }
+}
+
+function jqLiteOff(element, type, fn, unsupported) {
+ if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');
+
+ var expandoStore = jqLiteExpandoStore(element);
+ var events = expandoStore && expandoStore.events;
+ var handle = expandoStore && expandoStore.handle;
+
+ if (!handle) return; //no listeners registered
+
+ if (!type) {
+ for (type in events) {
+ if (type !== '$destroy') {
+ removeEventListenerFn(element, type, handle);
+ }
+ delete events[type];
+ }
+ } else {
+ forEach(type.split(' '), function(type) {
+ if (isDefined(fn)) {
+ var listenerFns = events[type];
+ arrayRemove(listenerFns || [], fn);
+ if (listenerFns && listenerFns.length > 0) {
+ return;
+ }
+ }
+
+ removeEventListenerFn(element, type, handle);
+ delete events[type];
+ });
+ }
+}
+
+function jqLiteRemoveData(element, name) {
+ var expandoId = element.ng339;
+ var expandoStore = expandoId && jqCache[expandoId];
+
+ if (expandoStore) {
+ if (name) {
+ delete expandoStore.data[name];
+ return;
+ }
+
+ if (expandoStore.handle) {
+ if (expandoStore.events.$destroy) {
+ expandoStore.handle({}, '$destroy');
+ }
+ jqLiteOff(element);
+ }
+ delete jqCache[expandoId];
+ element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it
+ }
+}
+
+
+function jqLiteExpandoStore(element, createIfNecessary) {
+ var expandoId = element.ng339,
+ expandoStore = expandoId && jqCache[expandoId];
+
+ if (createIfNecessary && !expandoStore) {
+ element.ng339 = expandoId = jqNextId();
+ expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined};
+ }
+
+ return expandoStore;
+}
+
+
+function jqLiteData(element, key, value) {
+ if (jqLiteAcceptsData(element)) {
+
+ var isSimpleSetter = isDefined(value);
+ var isSimpleGetter = !isSimpleSetter && key && !isObject(key);
+ var massGetter = !key;
+ var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter);
+ var data = expandoStore && expandoStore.data;
+
+ if (isSimpleSetter) { // data('key', value)
+ data[key] = value;
+ } else {
+ if (massGetter) { // data()
+ return data;
+ } else {
+ if (isSimpleGetter) { // data('key')
+ // don't force creation of expandoStore if it doesn't exist yet
+ return data && data[key];
+ } else { // mass-setter: data({key1: val1, key2: val2})
+ extend(data, key);
+ }
+ }
+ }
+ }
+}
+
+function jqLiteHasClass(element, selector) {
+ if (!element.getAttribute) return false;
+ return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
+ indexOf(" " + selector + " ") > -1);
+}
+
+function jqLiteRemoveClass(element, cssClasses) {
+ if (cssClasses && element.setAttribute) {
+ forEach(cssClasses.split(' '), function(cssClass) {
+ element.setAttribute('class', trim(
+ (" " + (element.getAttribute('class') || '') + " ")
+ .replace(/[\n\t]/g, " ")
+ .replace(" " + trim(cssClass) + " ", " "))
+ );
+ });
+ }
+}
+
+function jqLiteAddClass(element, cssClasses) {
+ if (cssClasses && element.setAttribute) {
+ var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
+ .replace(/[\n\t]/g, " ");
+
+ forEach(cssClasses.split(' '), function(cssClass) {
+ cssClass = trim(cssClass);
+ if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {
+ existingClasses += cssClass + ' ';
+ }
+ });
+
+ element.setAttribute('class', trim(existingClasses));
+ }
+}
+
+
+function jqLiteAddNodes(root, elements) {
+ // THIS CODE IS VERY HOT. Don't make changes without benchmarking.
+
+ if (elements) {
+
+ // if a Node (the most common case)
+ if (elements.nodeType) {
+ root[root.length++] = elements;
+ } else {
+ var length = elements.length;
+
+ // if an Array or NodeList and not a Window
+ if (typeof length === 'number' && elements.window !== elements) {
+ if (length) {
+ for (var i = 0; i < length; i++) {
+ root[root.length++] = elements[i];
+ }
+ }
+ } else {
+ root[root.length++] = elements;
+ }
+ }
+ }
+}
+
+
+function jqLiteController(element, name) {
+ return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller');
+}
+
+function jqLiteInheritedData(element, name, value) {
+ // if element is the document object work with the html element instead
+ // this makes $(document).scope() possible
+ if (element.nodeType == NODE_TYPE_DOCUMENT) {
+ element = element.documentElement;
+ }
+ var names = isArray(name) ? name : [name];
+
+ while (element) {
+ for (var i = 0, ii = names.length; i < ii; i++) {
+ if ((value = jqLite.data(element, names[i])) !== undefined) return value;
+ }
+
+ // If dealing with a document fragment node with a host element, and no parent, use the host
+ // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM
+ // to lookup parent controllers.
+ element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host);
+ }
+}
+
+function jqLiteEmpty(element) {
+ jqLiteDealoc(element, true);
+ while (element.firstChild) {
+ element.removeChild(element.firstChild);
+ }
+}
+
+function jqLiteRemove(element, keepData) {
+ if (!keepData) jqLiteDealoc(element);
+ var parent = element.parentNode;
+ if (parent) parent.removeChild(element);
+}
+
+
+function jqLiteDocumentLoaded(action, win) {
+ win = win || window;
+ if (win.document.readyState === 'complete') {
+ // Force the action to be run async for consistent behaviour
+ // from the action's point of view
+ // i.e. it will definitely not be in a $apply
+ win.setTimeout(action);
+ } else {
+ // No need to unbind this handler as load is only ever called once
+ jqLite(win).on('load', action);
+ }
+}
+
+//////////////////////////////////////////
+// Functions which are declared directly.
+//////////////////////////////////////////
+var JQLitePrototype = JQLite.prototype = {
+ ready: function(fn) {
+ var fired = false;
+
+ function trigger() {
+ if (fired) return;
+ fired = true;
+ fn();
+ }
+
+ // check if document is already loaded
+ if (document.readyState === 'complete') {
+ setTimeout(trigger);
+ } else {
+ this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
+ // we can not use jqLite since we are not done loading and jQuery could be loaded later.
+ // jshint -W064
+ JQLite(window).on('load', trigger); // fallback to window.onload for others
+ // jshint +W064
+ }
+ },
+ toString: function() {
+ var value = [];
+ forEach(this, function(e) { value.push('' + e);});
+ return '[' + value.join(', ') + ']';
+ },
+
+ eq: function(index) {
+ return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);
+ },
+
+ length: 0,
+ push: push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+//////////////////////////////////////////
+// Functions iterating getter/setters.
+// these functions return self on setter and
+// value on get.
+//////////////////////////////////////////
+var BOOLEAN_ATTR = {};
+forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {
+ BOOLEAN_ATTR[lowercase(value)] = value;
+});
+var BOOLEAN_ELEMENTS = {};
+forEach('input,select,option,textarea,button,form,details'.split(','), function(value) {
+ BOOLEAN_ELEMENTS[value] = true;
+});
+var ALIASED_ATTR = {
+ 'ngMinlength': 'minlength',
+ 'ngMaxlength': 'maxlength',
+ 'ngMin': 'min',
+ 'ngMax': 'max',
+ 'ngPattern': 'pattern'
+};
+
+function getBooleanAttrName(element, name) {
+ // check dom last since we will most likely fail on name
+ var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];
+
+ // booleanAttr is here twice to minimize DOM access
+ return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr;
+}
+
+function getAliasedAttrName(element, name) {
+ var nodeName = element.nodeName;
+ return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name];
+}
+
+forEach({
+ data: jqLiteData,
+ removeData: jqLiteRemoveData
+}, function(fn, name) {
+ JQLite[name] = fn;
+});
+
+forEach({
+ data: jqLiteData,
+ inheritedData: jqLiteInheritedData,
+
+ scope: function(element) {
+ // Can't use jqLiteData here directly so we stay compatible with jQuery!
+ return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);
+ },
+
+ isolateScope: function(element) {
+ // Can't use jqLiteData here directly so we stay compatible with jQuery!
+ return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate');
+ },
+
+ controller: jqLiteController,
+
+ injector: function(element) {
+ return jqLiteInheritedData(element, '$injector');
+ },
+
+ removeAttr: function(element, name) {
+ element.removeAttribute(name);
+ },
+
+ hasClass: jqLiteHasClass,
+
+ css: function(element, name, value) {
+ name = camelCase(name);
+
+ if (isDefined(value)) {
+ element.style[name] = value;
+ } else {
+ return element.style[name];
+ }
+ },
+
+ attr: function(element, name, value) {
+ var nodeType = element.nodeType;
+ if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT) {
+ return;
+ }
+ var lowercasedName = lowercase(name);
+ if (BOOLEAN_ATTR[lowercasedName]) {
+ if (isDefined(value)) {
+ if (!!value) {
+ element[name] = true;
+ element.setAttribute(name, lowercasedName);
+ } else {
+ element[name] = false;
+ element.removeAttribute(lowercasedName);
+ }
+ } else {
+ return (element[name] ||
+ (element.attributes.getNamedItem(name) || noop).specified)
+ ? lowercasedName
+ : undefined;
+ }
+ } else if (isDefined(value)) {
+ element.setAttribute(name, value);
+ } else if (element.getAttribute) {
+ // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code
+ // some elements (e.g. Document) don't have get attribute, so return undefined
+ var ret = element.getAttribute(name, 2);
+ // normalize non-existing attributes to undefined (as jQuery)
+ return ret === null ? undefined : ret;
+ }
+ },
+
+ prop: function(element, name, value) {
+ if (isDefined(value)) {
+ element[name] = value;
+ } else {
+ return element[name];
+ }
+ },
+
+ text: (function() {
+ getText.$dv = '';
+ return getText;
+
+ function getText(element, value) {
+ if (isUndefined(value)) {
+ var nodeType = element.nodeType;
+ return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : '';
+ }
+ element.textContent = value;
+ }
+ })(),
+
+ val: function(element, value) {
+ if (isUndefined(value)) {
+ if (element.multiple && nodeName_(element) === 'select') {
+ var result = [];
+ forEach(element.options, function(option) {
+ if (option.selected) {
+ result.push(option.value || option.text);
+ }
+ });
+ return result.length === 0 ? null : result;
+ }
+ return element.value;
+ }
+ element.value = value;
+ },
+
+ html: function(element, value) {
+ if (isUndefined(value)) {
+ return element.innerHTML;
+ }
+ jqLiteDealoc(element, true);
+ element.innerHTML = value;
+ },
+
+ empty: jqLiteEmpty
+}, function(fn, name) {
+ /**
+ * Properties: writes return selection, reads return first value
+ */
+ JQLite.prototype[name] = function(arg1, arg2) {
+ var i, key;
+ var nodeCount = this.length;
+
+ // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it
+ // in a way that survives minification.
+ // jqLiteEmpty takes no arguments but is a setter.
+ if (fn !== jqLiteEmpty &&
+ (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {
+ if (isObject(arg1)) {
+
+ // we are a write, but the object properties are the key/values
+ for (i = 0; i < nodeCount; i++) {
+ if (fn === jqLiteData) {
+ // data() takes the whole object in jQuery
+ fn(this[i], arg1);
+ } else {
+ for (key in arg1) {
+ fn(this[i], key, arg1[key]);
+ }
+ }
+ }
+ // return self for chaining
+ return this;
+ } else {
+ // we are a read, so read the first child.
+ // TODO: do we still need this?
+ var value = fn.$dv;
+ // Only if we have $dv do we iterate over all, otherwise it is just the first element.
+ var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount;
+ for (var j = 0; j < jj; j++) {
+ var nodeValue = fn(this[j], arg1, arg2);
+ value = value ? value + nodeValue : nodeValue;
+ }
+ return value;
+ }
+ } else {
+ // we are a write, so apply to all children
+ for (i = 0; i < nodeCount; i++) {
+ fn(this[i], arg1, arg2);
+ }
+ // return self for chaining
+ return this;
+ }
+ };
+});
+
+function createEventHandler(element, events) {
+ var eventHandler = function(event, type) {
+ // jQuery specific api
+ event.isDefaultPrevented = function() {
+ return event.defaultPrevented;
+ };
+
+ var eventFns = events[type || event.type];
+ var eventFnsLength = eventFns ? eventFns.length : 0;
+
+ if (!eventFnsLength) return;
+
+ if (isUndefined(event.immediatePropagationStopped)) {
+ var originalStopImmediatePropagation = event.stopImmediatePropagation;
+ event.stopImmediatePropagation = function() {
+ event.immediatePropagationStopped = true;
+
+ if (event.stopPropagation) {
+ event.stopPropagation();
+ }
+
+ if (originalStopImmediatePropagation) {
+ originalStopImmediatePropagation.call(event);
+ }
+ };
+ }
+
+ event.isImmediatePropagationStopped = function() {
+ return event.immediatePropagationStopped === true;
+ };
+
+ // Copy event handlers in case event handlers array is modified during execution.
+ if ((eventFnsLength > 1)) {
+ eventFns = shallowCopy(eventFns);
+ }
+
+ for (var i = 0; i < eventFnsLength; i++) {
+ if (!event.isImmediatePropagationStopped()) {
+ eventFns[i].call(element, event);
+ }
+ }
+ };
+
+ // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all
+ // events on `element`
+ eventHandler.elem = element;
+ return eventHandler;
+}
+
+//////////////////////////////////////////
+// Functions iterating traversal.
+// These functions chain results into a single
+// selector.
+//////////////////////////////////////////
+forEach({
+ removeData: jqLiteRemoveData,
+
+ on: function jqLiteOn(element, type, fn, unsupported) {
+ if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');
+
+ // Do not add event handlers to non-elements because they will not be cleaned up.
+ if (!jqLiteAcceptsData(element)) {
+ return;
+ }
+
+ var expandoStore = jqLiteExpandoStore(element, true);
+ var events = expandoStore.events;
+ var handle = expandoStore.handle;
+
+ if (!handle) {
+ handle = expandoStore.handle = createEventHandler(element, events);
+ }
+
+ // http://jsperf.com/string-indexof-vs-split
+ var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type];
+ var i = types.length;
+
+ while (i--) {
+ type = types[i];
+ var eventFns = events[type];
+
+ if (!eventFns) {
+ events[type] = [];
+
+ if (type === 'mouseenter' || type === 'mouseleave') {
+ // Refer to jQuery's implementation of mouseenter & mouseleave
+ // Read about mouseenter and mouseleave:
+ // http://www.quirksmode.org/js/events_mouse.html#link8
+
+ jqLiteOn(element, MOUSE_EVENT_MAP[type], function(event) {
+ var target = this, related = event.relatedTarget;
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if (!related || (related !== target && !target.contains(related))) {
+ handle(event, type);
+ }
+ });
+
+ } else {
+ if (type !== '$destroy') {
+ addEventListenerFn(element, type, handle);
+ }
+ }
+ eventFns = events[type];
+ }
+ eventFns.push(fn);
+ }
+ },
+
+ off: jqLiteOff,
+
+ one: function(element, type, fn) {
+ element = jqLite(element);
+
+ //add the listener twice so that when it is called
+ //you can remove the original function and still be
+ //able to call element.off(ev, fn) normally
+ element.on(type, function onFn() {
+ element.off(type, fn);
+ element.off(type, onFn);
+ });
+ element.on(type, fn);
+ },
+
+ replaceWith: function(element, replaceNode) {
+ var index, parent = element.parentNode;
+ jqLiteDealoc(element);
+ forEach(new JQLite(replaceNode), function(node) {
+ if (index) {
+ parent.insertBefore(node, index.nextSibling);
+ } else {
+ parent.replaceChild(node, element);
+ }
+ index = node;
+ });
+ },
+
+ children: function(element) {
+ var children = [];
+ forEach(element.childNodes, function(element) {
+ if (element.nodeType === NODE_TYPE_ELEMENT) {
+ children.push(element);
+ }
+ });
+ return children;
+ },
+
+ contents: function(element) {
+ return element.contentDocument || element.childNodes || [];
+ },
+
+ append: function(element, node) {
+ var nodeType = element.nodeType;
+ if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return;
+
+ node = new JQLite(node);
+
+ for (var i = 0, ii = node.length; i < ii; i++) {
+ var child = node[i];
+ element.appendChild(child);
+ }
+ },
+
+ prepend: function(element, node) {
+ if (element.nodeType === NODE_TYPE_ELEMENT) {
+ var index = element.firstChild;
+ forEach(new JQLite(node), function(child) {
+ element.insertBefore(child, index);
+ });
+ }
+ },
+
+ wrap: function(element, wrapNode) {
+ wrapNode = jqLite(wrapNode).eq(0).clone()[0];
+ var parent = element.parentNode;
+ if (parent) {
+ parent.replaceChild(wrapNode, element);
+ }
+ wrapNode.appendChild(element);
+ },
+
+ remove: jqLiteRemove,
+
+ detach: function(element) {
+ jqLiteRemove(element, true);
+ },
+
+ after: function(element, newElement) {
+ var index = element, parent = element.parentNode;
+ newElement = new JQLite(newElement);
+
+ for (var i = 0, ii = newElement.length; i < ii; i++) {
+ var node = newElement[i];
+ parent.insertBefore(node, index.nextSibling);
+ index = node;
+ }
+ },
+
+ addClass: jqLiteAddClass,
+ removeClass: jqLiteRemoveClass,
+
+ toggleClass: function(element, selector, condition) {
+ if (selector) {
+ forEach(selector.split(' '), function(className) {
+ var classCondition = condition;
+ if (isUndefined(classCondition)) {
+ classCondition = !jqLiteHasClass(element, className);
+ }
+ (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);
+ });
+ }
+ },
+
+ parent: function(element) {
+ var parent = element.parentNode;
+ return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null;
+ },
+
+ next: function(element) {
+ return element.nextElementSibling;
+ },
+
+ find: function(element, selector) {
+ if (element.getElementsByTagName) {
+ return element.getElementsByTagName(selector);
+ } else {
+ return [];
+ }
+ },
+
+ clone: jqLiteClone,
+
+ triggerHandler: function(element, event, extraParameters) {
+
+ var dummyEvent, eventFnsCopy, handlerArgs;
+ var eventName = event.type || event;
+ var expandoStore = jqLiteExpandoStore(element);
+ var events = expandoStore && expandoStore.events;
+ var eventFns = events && events[eventName];
+
+ if (eventFns) {
+ // Create a dummy event to pass to the handlers
+ dummyEvent = {
+ preventDefault: function() { this.defaultPrevented = true; },
+ isDefaultPrevented: function() { return this.defaultPrevented === true; },
+ stopImmediatePropagation: function() { this.immediatePropagationStopped = true; },
+ isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; },
+ stopPropagation: noop,
+ type: eventName,
+ target: element
+ };
+
+ // If a custom event was provided then extend our dummy event with it
+ if (event.type) {
+ dummyEvent = extend(dummyEvent, event);
+ }
+
+ // Copy event handlers in case event handlers array is modified during execution.
+ eventFnsCopy = shallowCopy(eventFns);
+ handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent];
+
+ forEach(eventFnsCopy, function(fn) {
+ if (!dummyEvent.isImmediatePropagationStopped()) {
+ fn.apply(element, handlerArgs);
+ }
+ });
+ }
+ }
+}, function(fn, name) {
+ /**
+ * chaining functions
+ */
+ JQLite.prototype[name] = function(arg1, arg2, arg3) {
+ var value;
+
+ for (var i = 0, ii = this.length; i < ii; i++) {
+ if (isUndefined(value)) {
+ value = fn(this[i], arg1, arg2, arg3);
+ if (isDefined(value)) {
+ // any function which returns a value needs to be wrapped
+ value = jqLite(value);
+ }
+ } else {
+ jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));
+ }
+ }
+ return isDefined(value) ? value : this;
+ };
+
+ // bind legacy bind/unbind to on/off
+ JQLite.prototype.bind = JQLite.prototype.on;
+ JQLite.prototype.unbind = JQLite.prototype.off;
+});
+
+
+// Provider for private $$jqLite service
+function $$jqLiteProvider() {
+ this.$get = function $$jqLite() {
+ return extend(JQLite, {
+ hasClass: function(node, classes) {
+ if (node.attr) node = node[0];
+ return jqLiteHasClass(node, classes);
+ },
+ addClass: function(node, classes) {
+ if (node.attr) node = node[0];
+ return jqLiteAddClass(node, classes);
+ },
+ removeClass: function(node, classes) {
+ if (node.attr) node = node[0];
+ return jqLiteRemoveClass(node, classes);
+ }
+ });
+ };
+}
+
+/**
+ * Computes a hash of an 'obj'.
+ * Hash of a:
+ * string is string
+ * number is number as string
+ * object is either result of calling $$hashKey function on the object or uniquely generated id,
+ * that is also assigned to the $$hashKey property of the object.
+ *
+ * @param obj
+ * @returns {string} hash string such that the same input will have the same hash string.
+ * The resulting string key is in 'type:hashKey' format.
+ */
+function hashKey(obj, nextUidFn) {
+ var key = obj && obj.$$hashKey;
+
+ if (key) {
+ if (typeof key === 'function') {
+ key = obj.$$hashKey();
+ }
+ return key;
+ }
+
+ var objType = typeof obj;
+ if (objType == 'function' || (objType == 'object' && obj !== null)) {
+ key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();
+ } else {
+ key = objType + ':' + obj;
+ }
+
+ return key;
+}
+
+/**
+ * HashMap which can use objects as keys
+ */
+function HashMap(array, isolatedUid) {
+ if (isolatedUid) {
+ var uid = 0;
+ this.nextUid = function() {
+ return ++uid;
+ };
+ }
+ forEach(array, this.put, this);
+}
+HashMap.prototype = {
+ /**
+ * Store key value pair
+ * @param key key to store can be any type
+ * @param value value to store can be any type
+ */
+ put: function(key, value) {
+ this[hashKey(key, this.nextUid)] = value;
+ },
+
+ /**
+ * @param key
+ * @returns {Object} the value for the key
+ */
+ get: function(key) {
+ return this[hashKey(key, this.nextUid)];
+ },
+
+ /**
+ * Remove the key/value pair
+ * @param key
+ */
+ remove: function(key) {
+ var value = this[key = hashKey(key, this.nextUid)];
+ delete this[key];
+ return value;
+ }
+};
+
+var $$HashMapProvider = [function() {
+ this.$get = [function() {
+ return HashMap;
+ }];
+}];
+
+/**
+ * @ngdoc function
+ * @module ng
+ * @name angular.injector
+ * @kind function
+ *
+ * @description
+ * Creates an injector object that can be used for retrieving services as well as for
+ * dependency injection (see {@link guide/di dependency injection}).
+ *
+ * @param {Array.} modules A list of module functions or their aliases. See
+ * {@link angular.module}. The `ng` module must be explicitly added.
+ * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which
+ * disallows argument name annotation inference.
+ * @returns {injector} Injector object. See {@link auto.$injector $injector}.
+ *
+ * @example
+ * Typical usage
+ * ```js
+ * // create an injector
+ * var $injector = angular.injector(['ng']);
+ *
+ * // use the injector to kick off your application
+ * // use the type inference to auto inject arguments, or use implicit injection
+ * $injector.invoke(function($rootScope, $compile, $document) {
+ * $compile($document)($rootScope);
+ * $rootScope.$digest();
+ * });
+ * ```
+ *
+ * Sometimes you want to get access to the injector of a currently running Angular app
+ * from outside Angular. Perhaps, you want to inject and compile some markup after the
+ * application has been bootstrapped. You can do this using the extra `injector()` added
+ * to JQuery/jqLite elements. See {@link angular.element}.
+ *
+ * *This is fairly rare but could be the case if a third party library is injecting the
+ * markup.*
+ *
+ * In the following example a new block of HTML containing a `ng-controller`
+ * directive is added to the end of the document body by JQuery. We then compile and link
+ * it into the current AngularJS scope.
+ *
+ * ```js
+ * var $div = $('
{{content.label}}
');
+ * $(document.body).append($div);
+ *
+ * angular.element(document).injector().invoke(function($compile) {
+ * var scope = angular.element($div).scope();
+ * $compile($div)(scope);
+ * });
+ * ```
+ */
+
+
+/**
+ * @ngdoc module
+ * @name auto
+ * @description
+ *
+ * Implicit module which gets automatically added to each {@link auto.$injector $injector}.
+ */
+
+var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
+var FN_ARG_SPLIT = /,/;
+var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
+var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
+var $injectorMinErr = minErr('$injector');
+
+function anonFn(fn) {
+ // For anonymous functions, showing at the very least the function signature can help in
+ // debugging.
+ var fnText = fn.toString().replace(STRIP_COMMENTS, ''),
+ args = fnText.match(FN_ARGS);
+ if (args) {
+ return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')';
+ }
+ return 'fn';
+}
+
+function annotate(fn, strictDi, name) {
+ var $inject,
+ fnText,
+ argDecl,
+ last;
+
+ if (typeof fn === 'function') {
+ if (!($inject = fn.$inject)) {
+ $inject = [];
+ if (fn.length) {
+ if (strictDi) {
+ if (!isString(name) || !name) {
+ name = fn.name || anonFn(fn);
+ }
+ throw $injectorMinErr('strictdi',
+ '{0} is not using explicit annotation and cannot be invoked in strict mode', name);
+ }
+ fnText = fn.toString().replace(STRIP_COMMENTS, '');
+ argDecl = fnText.match(FN_ARGS);
+ forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
+ arg.replace(FN_ARG, function(all, underscore, name) {
+ $inject.push(name);
+ });
+ });
+ }
+ fn.$inject = $inject;
+ }
+ } else if (isArray(fn)) {
+ last = fn.length - 1;
+ assertArgFn(fn[last], 'fn');
+ $inject = fn.slice(0, last);
+ } else {
+ assertArgFn(fn, 'fn', true);
+ }
+ return $inject;
+}
+
+///////////////////////////////////////
+
+/**
+ * @ngdoc service
+ * @name $injector
+ *
+ * @description
+ *
+ * `$injector` is used to retrieve object instances as defined by
+ * {@link auto.$provide provider}, instantiate types, invoke methods,
+ * and load modules.
+ *
+ * The following always holds true:
+ *
+ * ```js
+ * var $injector = angular.injector();
+ * expect($injector.get('$injector')).toBe($injector);
+ * expect($injector.invoke(function($injector) {
+ * return $injector;
+ * })).toBe($injector);
+ * ```
+ *
+ * # Injection Function Annotation
+ *
+ * JavaScript does not have annotations, and annotations are needed for dependency injection. The
+ * following are all valid ways of annotating function with injection arguments and are equivalent.
+ *
+ * ```js
+ * // inferred (only works if code not minified/obfuscated)
+ * $injector.invoke(function(serviceA){});
+ *
+ * // annotated
+ * function explicit(serviceA) {};
+ * explicit.$inject = ['serviceA'];
+ * $injector.invoke(explicit);
+ *
+ * // inline
+ * $injector.invoke(['serviceA', function(serviceA){}]);
+ * ```
+ *
+ * ## Inference
+ *
+ * In JavaScript calling `toString()` on a function returns the function definition. The definition
+ * can then be parsed and the function arguments can be extracted. This method of discovering
+ * annotations is disallowed when the injector is in strict mode.
+ * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the
+ * argument names.
+ *
+ * ## `$inject` Annotation
+ * By adding an `$inject` property onto a function the injection parameters can be specified.
+ *
+ * ## Inline
+ * As an array of injection names, where the last item in the array is the function to call.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#get
+ *
+ * @description
+ * Return an instance of the service.
+ *
+ * @param {string} name The name of the instance to retrieve.
+ * @param {string=} caller An optional string to provide the origin of the function call for error messages.
+ * @return {*} The instance.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#invoke
+ *
+ * @description
+ * Invoke the method and supply the method arguments from the `$injector`.
+ *
+ * @param {Function|Array.} fn The injectable function to invoke. Function parameters are
+ * injected according to the {@link guide/di $inject Annotation} rules.
+ * @param {Object=} self The `this` for the invoked method.
+ * @param {Object=} locals Optional object. If preset then any argument names are read from this
+ * object first, before the `$injector` is consulted.
+ * @returns {*} the value returned by the invoked `fn` function.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#has
+ *
+ * @description
+ * Allows the user to query if the particular service exists.
+ *
+ * @param {string} name Name of the service to query.
+ * @returns {boolean} `true` if injector has given service.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#instantiate
+ * @description
+ * Create a new instance of JS type. The method takes a constructor function, invokes the new
+ * operator, and supplies all of the arguments to the constructor function as specified by the
+ * constructor annotation.
+ *
+ * @param {Function} Type Annotated constructor function.
+ * @param {Object=} locals Optional object. If preset then any argument names are read from this
+ * object first, before the `$injector` is consulted.
+ * @returns {Object} new instance of `Type`.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#annotate
+ *
+ * @description
+ * Returns an array of service names which the function is requesting for injection. This API is
+ * used by the injector to determine which services need to be injected into the function when the
+ * function is invoked. There are three ways in which the function can be annotated with the needed
+ * dependencies.
+ *
+ * # Argument names
+ *
+ * The simplest form is to extract the dependencies from the arguments of the function. This is done
+ * by converting the function into a string using `toString()` method and extracting the argument
+ * names.
+ * ```js
+ * // Given
+ * function MyController($scope, $route) {
+ * // ...
+ * }
+ *
+ * // Then
+ * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
+ * ```
+ *
+ * You can disallow this method by using strict injection mode.
+ *
+ * This method does not work with code minification / obfuscation. For this reason the following
+ * annotation strategies are supported.
+ *
+ * # The `$inject` property
+ *
+ * If a function has an `$inject` property and its value is an array of strings, then the strings
+ * represent names of services to be injected into the function.
+ * ```js
+ * // Given
+ * var MyController = function(obfuscatedScope, obfuscatedRoute) {
+ * // ...
+ * }
+ * // Define function dependencies
+ * MyController['$inject'] = ['$scope', '$route'];
+ *
+ * // Then
+ * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
+ * ```
+ *
+ * # The array notation
+ *
+ * It is often desirable to inline Injected functions and that's when setting the `$inject` property
+ * is very inconvenient. In these situations using the array notation to specify the dependencies in
+ * a way that survives minification is a better choice:
+ *
+ * ```js
+ * // We wish to write this (not minification / obfuscation safe)
+ * injector.invoke(function($compile, $rootScope) {
+ * // ...
+ * });
+ *
+ * // We are forced to write break inlining
+ * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {
+ * // ...
+ * };
+ * tmpFn.$inject = ['$compile', '$rootScope'];
+ * injector.invoke(tmpFn);
+ *
+ * // To better support inline function the inline annotation is supported
+ * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {
+ * // ...
+ * }]);
+ *
+ * // Therefore
+ * expect(injector.annotate(
+ * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])
+ * ).toEqual(['$compile', '$rootScope']);
+ * ```
+ *
+ * @param {Function|Array.} fn Function for which dependent service names need to
+ * be retrieved as described above.
+ *
+ * @param {boolean=} [strictDi=false] Disallow argument name annotation inference.
+ *
+ * @returns {Array.} The names of the services which the function requires.
+ */
+
+
+
+
+/**
+ * @ngdoc service
+ * @name $provide
+ *
+ * @description
+ *
+ * The {@link auto.$provide $provide} service has a number of methods for registering components
+ * with the {@link auto.$injector $injector}. Many of these functions are also exposed on
+ * {@link angular.Module}.
+ *
+ * An Angular **service** is a singleton object created by a **service factory**. These **service
+ * factories** are functions which, in turn, are created by a **service provider**.
+ * The **service providers** are constructor functions. When instantiated they must contain a
+ * property called `$get`, which holds the **service factory** function.
+ *
+ * When you request a service, the {@link auto.$injector $injector} is responsible for finding the
+ * correct **service provider**, instantiating it and then calling its `$get` **service factory**
+ * function to get the instance of the **service**.
+ *
+ * Often services have no configuration options and there is no need to add methods to the service
+ * provider. The provider will be no more than a constructor function with a `$get` property. For
+ * these cases the {@link auto.$provide $provide} service has additional helper methods to register
+ * services without specifying a provider.
+ *
+ * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the
+ * {@link auto.$injector $injector}
+ * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by
+ * providers and services.
+ * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by
+ * services, not providers.
+ * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,
+ * that will be wrapped in a **service provider** object, whose `$get` property will contain the
+ * given factory function.
+ * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`
+ * that will be wrapped in a **service provider** object, whose `$get` property will instantiate
+ * a new object using the given constructor function.
+ *
+ * See the individual methods for more information and examples.
+ */
+
+/**
+ * @ngdoc method
+ * @name $provide#provider
+ * @description
+ *
+ * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions
+ * are constructor functions, whose instances are responsible for "providing" a factory for a
+ * service.
+ *
+ * Service provider names start with the name of the service they provide followed by `Provider`.
+ * For example, the {@link ng.$log $log} service has a provider called
+ * {@link ng.$logProvider $logProvider}.
+ *
+ * Service provider objects can have additional methods which allow configuration of the provider
+ * and its service. Importantly, you can configure what kind of service is created by the `$get`
+ * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a
+ * method {@link ng.$logProvider#debugEnabled debugEnabled}
+ * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the
+ * console or not.
+ *
+ * @param {string} name The name of the instance. NOTE: the provider will be available under `name +
+ 'Provider'` key.
+ * @param {(Object|function())} provider If the provider is:
+ *
+ * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using
+ * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.
+ * - `Constructor`: a new instance of the provider will be created using
+ * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.
+ *
+ * @returns {Object} registered provider instance
+
+ * @example
+ *
+ * The following example shows how to create a simple event tracking service and register it using
+ * {@link auto.$provide#provider $provide.provider()}.
+ *
+ * ```js
+ * // Define the eventTracker provider
+ * function EventTrackerProvider() {
+ * var trackingUrl = '/track';
+ *
+ * // A provider method for configuring where the tracked events should been saved
+ * this.setTrackingUrl = function(url) {
+ * trackingUrl = url;
+ * };
+ *
+ * // The service factory function
+ * this.$get = ['$http', function($http) {
+ * var trackedEvents = {};
+ * return {
+ * // Call this to track an event
+ * event: function(event) {
+ * var count = trackedEvents[event] || 0;
+ * count += 1;
+ * trackedEvents[event] = count;
+ * return count;
+ * },
+ * // Call this to save the tracked events to the trackingUrl
+ * save: function() {
+ * $http.post(trackingUrl, trackedEvents);
+ * }
+ * };
+ * }];
+ * }
+ *
+ * describe('eventTracker', function() {
+ * var postSpy;
+ *
+ * beforeEach(module(function($provide) {
+ * // Register the eventTracker provider
+ * $provide.provider('eventTracker', EventTrackerProvider);
+ * }));
+ *
+ * beforeEach(module(function(eventTrackerProvider) {
+ * // Configure eventTracker provider
+ * eventTrackerProvider.setTrackingUrl('/custom-track');
+ * }));
+ *
+ * it('tracks events', inject(function(eventTracker) {
+ * expect(eventTracker.event('login')).toEqual(1);
+ * expect(eventTracker.event('login')).toEqual(2);
+ * }));
+ *
+ * it('saves to the tracking url', inject(function(eventTracker, $http) {
+ * postSpy = spyOn($http, 'post');
+ * eventTracker.event('login');
+ * eventTracker.save();
+ * expect(postSpy).toHaveBeenCalled();
+ * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');
+ * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');
+ * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });
+ * }));
+ * });
+ * ```
+ */
+
+/**
+ * @ngdoc method
+ * @name $provide#factory
+ * @description
+ *
+ * Register a **service factory**, which will be called to return the service instance.
+ * This is short for registering a service where its provider consists of only a `$get` property,
+ * which is the given service factory function.
+ * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to
+ * configure your service in a provider.
+ *
+ * @param {string} name The name of the instance.
+ * @param {Function|Array.} $getFn The injectable $getFn for the instance creation.
+ * Internally this is a short hand for `$provide.provider(name, {$get: $getFn})`.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here is an example of registering a service
+ * ```js
+ * $provide.factory('ping', ['$http', function($http) {
+ * return function ping() {
+ * return $http.send('/ping');
+ * };
+ * }]);
+ * ```
+ * You would then inject and use this service like this:
+ * ```js
+ * someModule.controller('Ctrl', ['ping', function(ping) {
+ * ping();
+ * }]);
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#service
+ * @description
+ *
+ * Register a **service constructor**, which will be invoked with `new` to create the service
+ * instance.
+ * This is short for registering a service where its provider's `$get` property is the service
+ * constructor function that will be used to instantiate the service instance.
+ *
+ * You should use {@link auto.$provide#service $provide.service(class)} if you define your service
+ * as a type/class.
+ *
+ * @param {string} name The name of the instance.
+ * @param {Function|Array.} constructor An injectable class (constructor function)
+ * that will be instantiated.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here is an example of registering a service using
+ * {@link auto.$provide#service $provide.service(class)}.
+ * ```js
+ * var Ping = function($http) {
+ * this.$http = $http;
+ * };
+ *
+ * Ping.$inject = ['$http'];
+ *
+ * Ping.prototype.send = function() {
+ * return this.$http.get('/ping');
+ * };
+ * $provide.service('ping', Ping);
+ * ```
+ * You would then inject and use this service like this:
+ * ```js
+ * someModule.controller('Ctrl', ['ping', function(ping) {
+ * ping.send();
+ * }]);
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#value
+ * @description
+ *
+ * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a
+ * number, an array, an object or a function. This is short for registering a service where its
+ * provider's `$get` property is a factory function that takes no arguments and returns the **value
+ * service**.
+ *
+ * Value services are similar to constant services, except that they cannot be injected into a
+ * module configuration function (see {@link angular.Module#config}) but they can be overridden by
+ * an Angular
+ * {@link auto.$provide#decorator decorator}.
+ *
+ * @param {string} name The name of the instance.
+ * @param {*} value The value.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here are some examples of creating value services.
+ * ```js
+ * $provide.value('ADMIN_USER', 'admin');
+ *
+ * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });
+ *
+ * $provide.value('halfOf', function(value) {
+ * return value / 2;
+ * });
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#constant
+ * @description
+ *
+ * Register a **constant service**, such as a string, a number, an array, an object or a function,
+ * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be
+ * injected into a module configuration function (see {@link angular.Module#config}) and it cannot
+ * be overridden by an Angular {@link auto.$provide#decorator decorator}.
+ *
+ * @param {string} name The name of the constant.
+ * @param {*} value The constant value.
+ * @returns {Object} registered instance
+ *
+ * @example
+ * Here a some examples of creating constants:
+ * ```js
+ * $provide.constant('SHARD_HEIGHT', 306);
+ *
+ * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);
+ *
+ * $provide.constant('double', function(value) {
+ * return value * 2;
+ * });
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#decorator
+ * @description
+ *
+ * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator
+ * intercepts the creation of a service, allowing it to override or modify the behaviour of the
+ * service. The object returned by the decorator may be the original service, or a new service
+ * object which replaces or wraps and delegates to the original service.
+ *
+ * @param {string} name The name of the service to decorate.
+ * @param {Function|Array.} decorator This function will be invoked when the service needs to be
+ * instantiated and should return the decorated service instance. The function is called using
+ * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
+ * Local injection arguments:
+ *
+ * * `$delegate` - The original service instance, which can be monkey patched, configured,
+ * decorated or delegated to.
+ *
+ * @example
+ * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting
+ * calls to {@link ng.$log#error $log.warn()}.
+ * ```js
+ * $provide.decorator('$log', ['$delegate', function($delegate) {
+ * $delegate.warn = $delegate.error;
+ * return $delegate;
+ * }]);
+ * ```
+ */
+
+
+function createInjector(modulesToLoad, strictDi) {
+ strictDi = (strictDi === true);
+ var INSTANTIATING = {},
+ providerSuffix = 'Provider',
+ path = [],
+ loadedModules = new HashMap([], true),
+ providerCache = {
+ $provide: {
+ provider: supportObject(provider),
+ factory: supportObject(factory),
+ service: supportObject(service),
+ value: supportObject(value),
+ constant: supportObject(constant),
+ decorator: decorator
+ }
+ },
+ providerInjector = (providerCache.$injector =
+ createInternalInjector(providerCache, function(serviceName, caller) {
+ if (angular.isString(caller)) {
+ path.push(caller);
+ }
+ throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
+ })),
+ instanceCache = {},
+ instanceInjector = (instanceCache.$injector =
+ createInternalInjector(instanceCache, function(serviceName, caller) {
+ var provider = providerInjector.get(serviceName + providerSuffix, caller);
+ return instanceInjector.invoke(provider.$get, provider, undefined, serviceName);
+ }));
+
+
+ forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });
+
+ return instanceInjector;
+
+ ////////////////////////////////////
+ // $provider
+ ////////////////////////////////////
+
+ function supportObject(delegate) {
+ return function(key, value) {
+ if (isObject(key)) {
+ forEach(key, reverseParams(delegate));
+ } else {
+ return delegate(key, value);
+ }
+ };
+ }
+
+ function provider(name, provider_) {
+ assertNotHasOwnProperty(name, 'service');
+ if (isFunction(provider_) || isArray(provider_)) {
+ provider_ = providerInjector.instantiate(provider_);
+ }
+ if (!provider_.$get) {
+ throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name);
+ }
+ return providerCache[name + providerSuffix] = provider_;
+ }
+
+ function enforceReturnValue(name, factory) {
+ return function enforcedReturnValue() {
+ var result = instanceInjector.invoke(factory, this);
+ if (isUndefined(result)) {
+ throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name);
+ }
+ return result;
+ };
+ }
+
+ function factory(name, factoryFn, enforce) {
+ return provider(name, {
+ $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
+ });
+ }
+
+ function service(name, constructor) {
+ return factory(name, ['$injector', function($injector) {
+ return $injector.instantiate(constructor);
+ }]);
+ }
+
+ function value(name, val) { return factory(name, valueFn(val), false); }
+
+ function constant(name, value) {
+ assertNotHasOwnProperty(name, 'constant');
+ providerCache[name] = value;
+ instanceCache[name] = value;
+ }
+
+ function decorator(serviceName, decorFn) {
+ var origProvider = providerInjector.get(serviceName + providerSuffix),
+ orig$get = origProvider.$get;
+
+ origProvider.$get = function() {
+ var origInstance = instanceInjector.invoke(orig$get, origProvider);
+ return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});
+ };
+ }
+
+ ////////////////////////////////////
+ // Module Loading
+ ////////////////////////////////////
+ function loadModules(modulesToLoad) {
+ var runBlocks = [], moduleFn;
+ forEach(modulesToLoad, function(module) {
+ if (loadedModules.get(module)) return;
+ loadedModules.put(module, true);
+
+ function runInvokeQueue(queue) {
+ var i, ii;
+ for (i = 0, ii = queue.length; i < ii; i++) {
+ var invokeArgs = queue[i],
+ provider = providerInjector.get(invokeArgs[0]);
+
+ provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
+ }
+ }
+
+ try {
+ if (isString(module)) {
+ moduleFn = angularModule(module);
+ runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
+ runInvokeQueue(moduleFn._invokeQueue);
+ runInvokeQueue(moduleFn._configBlocks);
+ } else if (isFunction(module)) {
+ runBlocks.push(providerInjector.invoke(module));
+ } else if (isArray(module)) {
+ runBlocks.push(providerInjector.invoke(module));
+ } else {
+ assertArgFn(module, 'module');
+ }
+ } catch (e) {
+ if (isArray(module)) {
+ module = module[module.length - 1];
+ }
+ if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {
+ // Safari & FF's stack traces don't contain error.message content
+ // unlike those of Chrome and IE
+ // So if stack doesn't contain message, we create a new string that contains both.
+ // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.
+ /* jshint -W022 */
+ e = e.message + '\n' + e.stack;
+ }
+ throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}",
+ module, e.stack || e.message || e);
+ }
+ });
+ return runBlocks;
+ }
+
+ ////////////////////////////////////
+ // internal Injector
+ ////////////////////////////////////
+
+ function createInternalInjector(cache, factory) {
+
+ function getService(serviceName, caller) {
+ if (cache.hasOwnProperty(serviceName)) {
+ if (cache[serviceName] === INSTANTIATING) {
+ throw $injectorMinErr('cdep', 'Circular dependency found: {0}',
+ serviceName + ' <- ' + path.join(' <- '));
+ }
+ return cache[serviceName];
+ } else {
+ try {
+ path.unshift(serviceName);
+ cache[serviceName] = INSTANTIATING;
+ return cache[serviceName] = factory(serviceName, caller);
+ } catch (err) {
+ if (cache[serviceName] === INSTANTIATING) {
+ delete cache[serviceName];
+ }
+ throw err;
+ } finally {
+ path.shift();
+ }
+ }
+ }
+
+ function invoke(fn, self, locals, serviceName) {
+ if (typeof locals === 'string') {
+ serviceName = locals;
+ locals = null;
+ }
+
+ var args = [],
+ $inject = createInjector.$$annotate(fn, strictDi, serviceName),
+ length, i,
+ key;
+
+ for (i = 0, length = $inject.length; i < length; i++) {
+ key = $inject[i];
+ if (typeof key !== 'string') {
+ throw $injectorMinErr('itkn',
+ 'Incorrect injection token! Expected service name as string, got {0}', key);
+ }
+ args.push(
+ locals && locals.hasOwnProperty(key)
+ ? locals[key]
+ : getService(key, serviceName)
+ );
+ }
+ if (isArray(fn)) {
+ fn = fn[length];
+ }
+
+ // http://jsperf.com/angularjs-invoke-apply-vs-switch
+ // #5388
+ return fn.apply(self, args);
+ }
+
+ function instantiate(Type, locals, serviceName) {
+ // Check if Type is annotated and use just the given function at n-1 as parameter
+ // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
+ // Object creation: http://jsperf.com/create-constructor/2
+ var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype || null);
+ var returnedValue = invoke(Type, instance, locals, serviceName);
+
+ return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
+ }
+
+ return {
+ invoke: invoke,
+ instantiate: instantiate,
+ get: getService,
+ annotate: createInjector.$$annotate,
+ has: function(name) {
+ return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);
+ }
+ };
+ }
+}
+
+createInjector.$$annotate = annotate;
+
+/**
+ * @ngdoc provider
+ * @name $anchorScrollProvider
+ *
+ * @description
+ * Use `$anchorScrollProvider` to disable automatic scrolling whenever
+ * {@link ng.$location#hash $location.hash()} changes.
+ */
+function $AnchorScrollProvider() {
+
+ var autoScrollingEnabled = true;
+
+ /**
+ * @ngdoc method
+ * @name $anchorScrollProvider#disableAutoScrolling
+ *
+ * @description
+ * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to
+ * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.
+ * Use this method to disable automatic scrolling.
+ *
+ * If automatic scrolling is disabled, one must explicitly call
+ * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the
+ * current hash.
+ */
+ this.disableAutoScrolling = function() {
+ autoScrollingEnabled = false;
+ };
+
+ /**
+ * @ngdoc service
+ * @name $anchorScroll
+ * @kind function
+ * @requires $window
+ * @requires $location
+ * @requires $rootScope
+ *
+ * @description
+ * When called, it scrolls to the element related to the specified `hash` or (if omitted) to the
+ * current value of {@link ng.$location#hash $location.hash()}, according to the rules specified
+ * in the
+ * [HTML5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).
+ *
+ * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to
+ * match any anchor whenever it changes. This can be disabled by calling
+ * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}.
+ *
+ * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a
+ * vertical scroll-offset (either fixed or dynamic).
+ *
+ * @param {string=} hash The hash specifying the element to scroll to. If omitted, the value of
+ * {@link ng.$location#hash $location.hash()} will be used.
+ *
+ * @property {(number|function|jqLite)} yOffset
+ * If set, specifies a vertical scroll-offset. This is often useful when there are fixed
+ * positioned elements at the top of the page, such as navbars, headers etc.
+ *
+ * `yOffset` can be specified in various ways:
+ * - **number**: A fixed number of pixels to be used as offset.
+ * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return
+ * a number representing the offset (in pixels).
+ * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from
+ * the top of the page to the element's bottom will be used as offset.
+ * **Note**: The element will be taken into account only as long as its `position` is set to
+ * `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust
+ * their height and/or positioning according to the viewport's size.
+ *
+ *
+ *
+ * In order for `yOffset` to work properly, scrolling should take place on the document's root and
+ * not some child element.
+ *
+
+
+ angular.module('anchorScrollOffsetExample', [])
+ .run(['$anchorScroll', function($anchorScroll) {
+ $anchorScroll.yOffset = 50; // always scroll by 50 extra pixels
+ }])
+ .controller('headerCtrl', ['$anchorScroll', '$location', '$scope',
+ function ($anchorScroll, $location, $scope) {
+ $scope.gotoAnchor = function(x) {
+ var newHash = 'anchor' + x;
+ if ($location.hash() !== newHash) {
+ // set the $location.hash to `newHash` and
+ // $anchorScroll will automatically scroll to it
+ $location.hash('anchor' + x);
+ } else {
+ // call $anchorScroll() explicitly,
+ // since $location.hash hasn't changed
+ $anchorScroll();
+ }
+ };
+ }
+ ]);
+
+
+ body {
+ padding-top: 50px;
+ }
+
+ .anchor {
+ border: 2px dashed DarkOrchid;
+ padding: 10px 10px 200px 10px;
+ }
+
+ .fixed-header {
+ background-color: rgba(0, 0, 0, 0.2);
+ height: 50px;
+ position: fixed;
+ top: 0; left: 0; right: 0;
+ }
+
+ .fixed-header > a {
+ display: inline-block;
+ margin: 5px 15px;
+ }
+
+
+ */
+ this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {
+ var document = $window.document;
+
+ // Helper function to get first anchor from a NodeList
+ // (using `Array#some()` instead of `angular#forEach()` since it's more performant
+ // and working in all supported browsers.)
+ function getFirstAnchor(list) {
+ var result = null;
+ Array.prototype.some.call(list, function(element) {
+ if (nodeName_(element) === 'a') {
+ result = element;
+ return true;
+ }
+ });
+ return result;
+ }
+
+ function getYOffset() {
+
+ var offset = scroll.yOffset;
+
+ if (isFunction(offset)) {
+ offset = offset();
+ } else if (isElement(offset)) {
+ var elem = offset[0];
+ var style = $window.getComputedStyle(elem);
+ if (style.position !== 'fixed') {
+ offset = 0;
+ } else {
+ offset = elem.getBoundingClientRect().bottom;
+ }
+ } else if (!isNumber(offset)) {
+ offset = 0;
+ }
+
+ return offset;
+ }
+
+ function scrollTo(elem) {
+ if (elem) {
+ elem.scrollIntoView();
+
+ var offset = getYOffset();
+
+ if (offset) {
+ // `offset` is the number of pixels we should scroll UP in order to align `elem` properly.
+ // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the
+ // top of the viewport.
+ //
+ // IF the number of pixels from the top of `elem` to the end of the page's content is less
+ // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some
+ // way down the page.
+ //
+ // This is often the case for elements near the bottom of the page.
+ //
+ // In such cases we do not need to scroll the whole `offset` up, just the difference between
+ // the top of the element and the offset, which is enough to align the top of `elem` at the
+ // desired position.
+ var elemTop = elem.getBoundingClientRect().top;
+ $window.scrollBy(0, elemTop - offset);
+ }
+ } else {
+ $window.scrollTo(0, 0);
+ }
+ }
+
+ function scroll(hash) {
+ hash = isString(hash) ? hash : $location.hash();
+ var elm;
+
+ // empty hash, scroll to the top of the page
+ if (!hash) scrollTo(null);
+
+ // element with given id
+ else if ((elm = document.getElementById(hash))) scrollTo(elm);
+
+ // first anchor with given name :-D
+ else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm);
+
+ // no element and hash == 'top', scroll to the top of the page
+ else if (hash === 'top') scrollTo(null);
+ }
+
+ // does not scroll when user clicks on anchor link that is currently on
+ // (no url change, no $location.hash() change), browser native does scroll
+ if (autoScrollingEnabled) {
+ $rootScope.$watch(function autoScrollWatch() {return $location.hash();},
+ function autoScrollWatchAction(newVal, oldVal) {
+ // skip the initial scroll if $location.hash is empty
+ if (newVal === oldVal && newVal === '') return;
+
+ jqLiteDocumentLoaded(function() {
+ $rootScope.$evalAsync(scroll);
+ });
+ });
+ }
+
+ return scroll;
+ }];
+}
+
+var $animateMinErr = minErr('$animate');
+var ELEMENT_NODE = 1;
+var NG_ANIMATE_CLASSNAME = 'ng-animate';
+
+function mergeClasses(a,b) {
+ if (!a && !b) return '';
+ if (!a) return b;
+ if (!b) return a;
+ if (isArray(a)) a = a.join(' ');
+ if (isArray(b)) b = b.join(' ');
+ return a + ' ' + b;
+}
+
+function extractElementNode(element) {
+ for (var i = 0; i < element.length; i++) {
+ var elm = element[i];
+ if (elm.nodeType === ELEMENT_NODE) {
+ return elm;
+ }
+ }
+}
+
+function splitClasses(classes) {
+ if (isString(classes)) {
+ classes = classes.split(' ');
+ }
+
+ // Use createMap() to prevent class assumptions involving property names in
+ // Object.prototype
+ var obj = createMap();
+ forEach(classes, function(klass) {
+ // sometimes the split leaves empty string values
+ // incase extra spaces were applied to the options
+ if (klass.length) {
+ obj[klass] = true;
+ }
+ });
+ return obj;
+}
+
+// if any other type of options value besides an Object value is
+// passed into the $animate.method() animation then this helper code
+// will be run which will ignore it. While this patch is not the
+// greatest solution to this, a lot of existing plugins depend on
+// $animate to either call the callback (< 1.2) or return a promise
+// that can be changed. This helper function ensures that the options
+// are wiped clean incase a callback function is provided.
+function prepareAnimateOptions(options) {
+ return isObject(options)
+ ? options
+ : {};
+}
+
+var $$CoreAnimateRunnerProvider = function() {
+ this.$get = ['$q', '$$rAF', function($q, $$rAF) {
+ function AnimateRunner() {}
+ AnimateRunner.all = noop;
+ AnimateRunner.chain = noop;
+ AnimateRunner.prototype = {
+ end: noop,
+ cancel: noop,
+ resume: noop,
+ pause: noop,
+ complete: noop,
+ then: function(pass, fail) {
+ return $q(function(resolve) {
+ $$rAF(function() {
+ resolve();
+ });
+ }).then(pass, fail);
+ }
+ };
+ return AnimateRunner;
+ }];
+};
+
+// this is prefixed with Core since it conflicts with
+// the animateQueueProvider defined in ngAnimate/animateQueue.js
+var $$CoreAnimateQueueProvider = function() {
+ var postDigestQueue = new HashMap();
+ var postDigestElements = [];
+
+ this.$get = ['$$AnimateRunner', '$rootScope',
+ function($$AnimateRunner, $rootScope) {
+ return {
+ enabled: noop,
+ on: noop,
+ off: noop,
+ pin: noop,
+
+ push: function(element, event, options, domOperation) {
+ domOperation && domOperation();
+
+ options = options || {};
+ options.from && element.css(options.from);
+ options.to && element.css(options.to);
+
+ if (options.addClass || options.removeClass) {
+ addRemoveClassesPostDigest(element, options.addClass, options.removeClass);
+ }
+
+ return new $$AnimateRunner(); // jshint ignore:line
+ }
+ };
+
+ function addRemoveClassesPostDigest(element, add, remove) {
+ var data = postDigestQueue.get(element);
+ var classVal;
+
+ if (!data) {
+ postDigestQueue.put(element, data = {});
+ postDigestElements.push(element);
+ }
+
+ if (add) {
+ forEach(add.split(' '), function(className) {
+ if (className) {
+ data[className] = true;
+ }
+ });
+ }
+
+ if (remove) {
+ forEach(remove.split(' '), function(className) {
+ if (className) {
+ data[className] = false;
+ }
+ });
+ }
+
+ if (postDigestElements.length > 1) return;
+
+ $rootScope.$$postDigest(function() {
+ forEach(postDigestElements, function(element) {
+ var data = postDigestQueue.get(element);
+ if (data) {
+ var existing = splitClasses(element.attr('class'));
+ var toAdd = '';
+ var toRemove = '';
+ forEach(data, function(status, className) {
+ var hasClass = !!existing[className];
+ if (status !== hasClass) {
+ if (status) {
+ toAdd += (toAdd.length ? ' ' : '') + className;
+ } else {
+ toRemove += (toRemove.length ? ' ' : '') + className;
+ }
+ }
+ });
+
+ forEach(element, function(elm) {
+ toAdd && jqLiteAddClass(elm, toAdd);
+ toRemove && jqLiteRemoveClass(elm, toRemove);
+ });
+ postDigestQueue.remove(element);
+ }
+ });
+
+ postDigestElements.length = 0;
+ });
+ }
+ }];
+};
+
+/**
+ * @ngdoc provider
+ * @name $animateProvider
+ *
+ * @description
+ * Default implementation of $animate that doesn't perform any animations, instead just
+ * synchronously performs DOM updates and resolves the returned runner promise.
+ *
+ * In order to enable animations the `ngAnimate` module has to be loaded.
+ *
+ * To see the functional implementation check out `src/ngAnimate/animate.js`.
+ */
+var $AnimateProvider = ['$provide', function($provide) {
+ var provider = this;
+
+ this.$$registeredAnimations = Object.create(null);
+
+ /**
+ * @ngdoc method
+ * @name $animateProvider#register
+ *
+ * @description
+ * Registers a new injectable animation factory function. The factory function produces the
+ * animation object which contains callback functions for each event that is expected to be
+ * animated.
+ *
+ * * `eventFn`: `function(element, ... , doneFunction, options)`
+ * The element to animate, the `doneFunction` and the options fed into the animation. Depending
+ * on the type of animation additional arguments will be injected into the animation function. The
+ * list below explains the function signatures for the different animation methods:
+ *
+ * - setClass: function(element, addedClasses, removedClasses, doneFunction, options)
+ * - addClass: function(element, addedClasses, doneFunction, options)
+ * - removeClass: function(element, removedClasses, doneFunction, options)
+ * - enter, leave, move: function(element, doneFunction, options)
+ * - animate: function(element, fromStyles, toStyles, doneFunction, options)
+ *
+ * Make sure to trigger the `doneFunction` once the animation is fully complete.
+ *
+ * ```js
+ * return {
+ * //enter, leave, move signature
+ * eventFn : function(element, done, options) {
+ * //code to run the animation
+ * //once complete, then run done()
+ * return function endFunction(wasCancelled) {
+ * //code to cancel the animation
+ * }
+ * }
+ * }
+ * ```
+ *
+ * @param {string} name The name of the animation (this is what the class-based CSS value will be compared to).
+ * @param {Function} factory The factory function that will be executed to return the animation
+ * object.
+ */
+ this.register = function(name, factory) {
+ if (name && name.charAt(0) !== '.') {
+ throw $animateMinErr('notcsel', "Expecting class selector starting with '.' got '{0}'.", name);
+ }
+
+ var key = name + '-animation';
+ provider.$$registeredAnimations[name.substr(1)] = key;
+ $provide.factory(key, factory);
+ };
+
+ /**
+ * @ngdoc method
+ * @name $animateProvider#classNameFilter
+ *
+ * @description
+ * Sets and/or returns the CSS class regular expression that is checked when performing
+ * an animation. Upon bootstrap the classNameFilter value is not set at all and will
+ * therefore enable $animate to attempt to perform an animation on any element that is triggered.
+ * When setting the `classNameFilter` value, animations will only be performed on elements
+ * that successfully match the filter expression. This in turn can boost performance
+ * for low-powered devices as well as applications containing a lot of structural operations.
+ * @param {RegExp=} expression The className expression which will be checked against all animations
+ * @return {RegExp} The current CSS className expression value. If null then there is no expression value
+ */
+ this.classNameFilter = function(expression) {
+ if (arguments.length === 1) {
+ this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
+ if (this.$$classNameFilter) {
+ var reservedRegex = new RegExp("(\\s+|\\/)" + NG_ANIMATE_CLASSNAME + "(\\s+|\\/)");
+ if (reservedRegex.test(this.$$classNameFilter.toString())) {
+ throw $animateMinErr('nongcls','$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.', NG_ANIMATE_CLASSNAME);
+
+ }
+ }
+ }
+ return this.$$classNameFilter;
+ };
+
+ this.$get = ['$$animateQueue', function($$animateQueue) {
+ function domInsert(element, parentElement, afterElement) {
+ // if for some reason the previous element was removed
+ // from the dom sometime before this code runs then let's
+ // just stick to using the parent element as the anchor
+ if (afterElement) {
+ var afterNode = extractElementNode(afterElement);
+ if (afterNode && !afterNode.parentNode && !afterNode.previousElementSibling) {
+ afterElement = null;
+ }
+ }
+ afterElement ? afterElement.after(element) : parentElement.prepend(element);
+ }
+
+ /**
+ * @ngdoc service
+ * @name $animate
+ * @description The $animate service exposes a series of DOM utility methods that provide support
+ * for animation hooks. The default behavior is the application of DOM operations, however,
+ * when an animation is detected (and animations are enabled), $animate will do the heavy lifting
+ * to ensure that animation runs with the triggered DOM operation.
+ *
+ * By default $animate doesn't trigger an animations. This is because the `ngAnimate` module isn't
+ * included and only when it is active then the animation hooks that `$animate` triggers will be
+ * functional. Once active then all structural `ng-` directives will trigger animations as they perform
+ * their DOM-related operations (enter, leave and move). Other directives such as `ngClass`,
+ * `ngShow`, `ngHide` and `ngMessages` also provide support for animations.
+ *
+ * It is recommended that the`$animate` service is always used when executing DOM-related procedures within directives.
+ *
+ * To learn more about enabling animation support, click here to visit the
+ * {@link ngAnimate ngAnimate module page}.
+ */
+ return {
+ // we don't call it directly since non-existant arguments may
+ // be interpreted as null within the sub enabled function
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#on
+ * @kind function
+ * @description Sets up an event listener to fire whenever the animation event (enter, leave, move, etc...)
+ * has fired on the given element or among any of its children. Once the listener is fired, the provided callback
+ * is fired with the following params:
+ *
+ * ```js
+ * $animate.on('enter', container,
+ * function callback(element, phase) {
+ * // cool we detected an enter animation within the container
+ * }
+ * );
+ * ```
+ *
+ * @param {string} event the animation event that will be captured (e.g. enter, leave, move, addClass, removeClass, etc...)
+ * @param {DOMElement} container the container element that will capture each of the animation events that are fired on itself
+ * as well as among its children
+ * @param {Function} callback the callback function that will be fired when the listener is triggered
+ *
+ * The arguments present in the callback function are:
+ * * `element` - The captured DOM element that the animation was fired on.
+ * * `phase` - The phase of the animation. The two possible phases are **start** (when the animation starts) and **close** (when it ends).
+ */
+ on: $$animateQueue.on,
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#off
+ * @kind function
+ * @description Deregisters an event listener based on the event which has been associated with the provided element. This method
+ * can be used in three different ways depending on the arguments:
+ *
+ * ```js
+ * // remove all the animation event listeners listening for `enter`
+ * $animate.off('enter');
+ *
+ * // remove all the animation event listeners listening for `enter` on the given element and its children
+ * $animate.off('enter', container);
+ *
+ * // remove the event listener function provided by `listenerFn` that is set
+ * // to listen for `enter` on the given `element` as well as its children
+ * $animate.off('enter', container, callback);
+ * ```
+ *
+ * @param {string} event the animation event (e.g. enter, leave, move, addClass, removeClass, etc...)
+ * @param {DOMElement=} container the container element the event listener was placed on
+ * @param {Function=} callback the callback function that was registered as the listener
+ */
+ off: $$animateQueue.off,
+
+ /**
+ * @ngdoc method
+ * @name $animate#pin
+ * @kind function
+ * @description Associates the provided element with a host parent element to allow the element to be animated even if it exists
+ * outside of the DOM structure of the Angular application. By doing so, any animation triggered via `$animate` can be issued on the
+ * element despite being outside the realm of the application or within another application. Say for example if the application
+ * was bootstrapped on an element that is somewhere inside of the `` tag, but we wanted to allow for an element to be situated
+ * as a direct child of `document.body`, then this can be achieved by pinning the element via `$animate.pin(element)`. Keep in mind
+ * that calling `$animate.pin(element, parentElement)` will not actually insert into the DOM anywhere; it will just create the association.
+ *
+ * Note that this feature is only active when the `ngAnimate` module is used.
+ *
+ * @param {DOMElement} element the external element that will be pinned
+ * @param {DOMElement} parentElement the host parent element that will be associated with the external element
+ */
+ pin: $$animateQueue.pin,
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#enabled
+ * @kind function
+ * @description Used to get and set whether animations are enabled or not on the entire application or on an element and its children. This
+ * function can be called in four ways:
+ *
+ * ```js
+ * // returns true or false
+ * $animate.enabled();
+ *
+ * // changes the enabled state for all animations
+ * $animate.enabled(false);
+ * $animate.enabled(true);
+ *
+ * // returns true or false if animations are enabled for an element
+ * $animate.enabled(element);
+ *
+ * // changes the enabled state for an element and its children
+ * $animate.enabled(element, true);
+ * $animate.enabled(element, false);
+ * ```
+ *
+ * @param {DOMElement=} element the element that will be considered for checking/setting the enabled state
+ * @param {boolean=} enabled whether or not the animations will be enabled for the element
+ *
+ * @return {boolean} whether or not animations are enabled
+ */
+ enabled: $$animateQueue.enabled,
+
+ /**
+ * @ngdoc method
+ * @name $animate#cancel
+ * @kind function
+ * @description Cancels the provided animation.
+ *
+ * @param {Promise} animationPromise The animation promise that is returned when an animation is started.
+ */
+ cancel: function(runner) {
+ runner.end && runner.end();
+ },
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#enter
+ * @kind function
+ * @description Inserts the element into the DOM either after the `after` element (if provided) or
+ * as the first child within the `parent` element and then triggers an animation.
+ * A promise is returned that will be resolved during the next digest once the animation
+ * has completed.
+ *
+ * @param {DOMElement} element the element which will be inserted into the DOM
+ * @param {DOMElement} parent the parent element which will append the element as
+ * a child (so long as the after element is not present)
+ * @param {DOMElement=} after the sibling element after which the element will be appended
+ * @param {object=} options an optional collection of options/styles that will be applied to the element
+ *
+ * @return {Promise} the animation callback promise
+ */
+ enter: function(element, parent, after, options) {
+ parent = parent && jqLite(parent);
+ after = after && jqLite(after);
+ parent = parent || after.parent();
+ domInsert(element, parent, after);
+ return $$animateQueue.push(element, 'enter', prepareAnimateOptions(options));
+ },
+
+ /**
+ *
+ * @ngdoc method
+ * @name $animate#move
+ * @kind function
+ * @description Inserts (moves) the element into its new position in the DOM either after
+ * the `after` element (if provided) or as the first child within the `parent` element
+ * and then triggers an animation. A promise is returned that will be resolved
+ * during the next digest once the animation has completed.
+ *
+ * @param {DOMElement} element the element which will be moved into the new DOM position
+ * @param {DOMElement} parent the parent element which will append the element as
+ * a child (so long as the after element is not present)
+ * @param {DOMElement=} after the sibling element after which the element will be appended
+ * @param {object=} options an optional collection of options/styles that will be applied to the element
+ *
+ * @return {Promise} the animation callback promise
+ */
+ move: function(element, parent, after, options) {
+ parent = parent && jqLite(parent);
+ after = after && jqLite(after);
+ parent = parent || after.parent();
+ domInsert(element, parent, after);
+ return $$animateQueue.push(element, 'move', prepareAnimateOptions(options));
+ },
+
+ /**
+ * @ngdoc method
+ * @name $animate#leave
+ * @kind function
+ * @description Triggers an animation and then removes the element from the DOM.
+ * When the function is called a promise is returned that will be resolved during the next
+ * digest once the animation has completed.
+ *
+ * @param {DOMElement} element the element which will be removed from the DOM
+ * @param {object=} options an optional collection of options/styles that will be applied to the element
+ *
+ * @return {Promise} the animation callback promise
+ */
+ leave: function(element, options) {
+ return $$animateQueue.push(element, 'leave', prepareAnimateOptions(options), function() {
+ element.remove();
+ });
+ },
+
+ /**
+ * @ngdoc method
+ * @name $animate#addClass
+ * @kind function
+ *
+ * @description Triggers an addClass animation surrounding the addition of the provided CSS class(es). Upon
+ * execution, the addClass operation will only be handled after the next digest and it will not trigger an
+ * animation if element already contains the CSS class or if the class is removed at a later step.
+ * Note that class-based animations are treated differently compared to structural animations
+ * (like enter, move and leave) since the CSS classes may be added/removed at different points
+ * depending if CSS or JavaScript animations are used.
+ *
+ * @param {DOMElement} element the element which the CSS classes will be applied to
+ * @param {string} className the CSS class(es) that will be added (multiple classes are separated via spaces)
+ * @param {object=} options an optional collection of options/styles that will be applied to the element
+ *
+ * @return {Promise} the animation callback promise
+ */
+ addClass: function(element, className, options) {
+ options = prepareAnimateOptions(options);
+ options.addClass = mergeClasses(options.addclass, className);
+ return $$animateQueue.push(element, 'addClass', options);
+ },
+
+ /**
+ * @ngdoc method
+ * @name $animate#removeClass
+ * @kind function
+ *
+ * @description Triggers a removeClass animation surrounding the removal of the provided CSS class(es). Upon
+ * execution, the removeClass operation will only be handled after the next digest and it will not trigger an
+ * animation if element does not contain the CSS class or if the class is added at a later step.
+ * Note that class-based animations are treated differently compared to structural animations
+ * (like enter, move and leave) since the CSS classes may be added/removed at different points
+ * depending if CSS or JavaScript animations are used.
+ *
+ * @param {DOMElement} element the element which the CSS classes will be applied to
+ * @param {string} className the CSS class(es) that will be removed (multiple classes are separated via spaces)
+ * @param {object=} options an optional collection of options/styles that will be applied to the element
+ *
+ * @return {Promise} the animation callback promise
+ */
+ removeClass: function(element, className, options) {
+ options = prepareAnimateOptions(options);
+ options.removeClass = mergeClasses(options.removeClass, className);
+ return $$animateQueue.push(element, 'removeClass', options);
+ },
+
+ /**
+ * @ngdoc method
+ * @name $animate#setClass
+ * @kind function
+ *
+ * @description Performs both the addition and removal of a CSS classes on an element and (during the process)
+ * triggers an animation surrounding the class addition/removal. Much like `$animate.addClass` and
+ * `$animate.removeClass`, `setClass` will only evaluate the classes being added/removed once a digest has
+ * passed. Note that class-based animations are treated differently compared to structural animations
+ * (like enter, move and leave) since the CSS classes may be added/removed at different points
+ * depending if CSS or JavaScript animations are used.
+ *
+ * @param {DOMElement} element the element which the CSS classes will be applied to
+ * @param {string} add the CSS class(es) that will be added (multiple classes are separated via spaces)
+ * @param {string} remove the CSS class(es) that will be removed (multiple classes are separated via spaces)
+ * @param {object=} options an optional collection of options/styles that will be applied to the element
+ *
+ * @return {Promise} the animation callback promise
+ */
+ setClass: function(element, add, remove, options) {
+ options = prepareAnimateOptions(options);
+ options.addClass = mergeClasses(options.addClass, add);
+ options.removeClass = mergeClasses(options.removeClass, remove);
+ return $$animateQueue.push(element, 'setClass', options);
+ },
+
+ /**
+ * @ngdoc method
+ * @name $animate#animate
+ * @kind function
+ *
+ * @description Performs an inline animation on the element which applies the provided to and from CSS styles to the element.
+ * If any detected CSS transition, keyframe or JavaScript matches the provided className value then the animation will take
+ * on the provided styles. For example, if a transition animation is set for the given className then the provided from and
+ * to styles will be applied alongside the given transition. If a JavaScript animation is detected then the provided styles
+ * will be given in as function paramters into the `animate` method (or as apart of the `options` parameter).
+ *
+ * @param {DOMElement} element the element which the CSS styles will be applied to
+ * @param {object} from the from (starting) CSS styles that will be applied to the element and across the animation.
+ * @param {object} to the to (destination) CSS styles that will be applied to the element and across the animation.
+ * @param {string=} className an optional CSS class that will be applied to the element for the duration of the animation. If
+ * this value is left as empty then a CSS class of `ng-inline-animate` will be applied to the element.
+ * (Note that if no animation is detected then this value will not be appplied to the element.)
+ * @param {object=} options an optional collection of options/styles that will be applied to the element
+ *
+ * @return {Promise} the animation callback promise
+ */
+ animate: function(element, from, to, className, options) {
+ options = prepareAnimateOptions(options);
+ options.from = options.from ? extend(options.from, from) : from;
+ options.to = options.to ? extend(options.to, to) : to;
+
+ className = className || 'ng-inline-animate';
+ options.tempClasses = mergeClasses(options.tempClasses, className);
+ return $$animateQueue.push(element, 'animate', options);
+ }
+ };
+ }];
+}];
+
+function $$AsyncCallbackProvider() {
+ this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {
+ return $$rAF.supported
+ ? function(fn) { return $$rAF(fn); }
+ : function(fn) {
+ return $timeout(fn, 0, false);
+ };
+ }];
+}
+
+/* global stripHash: true */
+
+/**
+ * ! This is a private undocumented service !
+ *
+ * @name $browser
+ * @requires $log
+ * @description
+ * This object has two goals:
+ *
+ * - hide all the global state in the browser caused by the window object
+ * - abstract away all the browser specific features and inconsistencies
+ *
+ * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`
+ * service, which can be used for convenient testing of the application without the interaction with
+ * the real browser apis.
+ */
+/**
+ * @param {object} window The global window object.
+ * @param {object} document jQuery wrapped document.
+ * @param {object} $log window.console or an object with the same interface.
+ * @param {object} $sniffer $sniffer service
+ */
+function Browser(window, document, $log, $sniffer) {
+ var self = this,
+ rawDocument = document[0],
+ location = window.location,
+ history = window.history,
+ setTimeout = window.setTimeout,
+ clearTimeout = window.clearTimeout,
+ pendingDeferIds = {};
+
+ self.isMock = false;
+
+ var outstandingRequestCount = 0;
+ var outstandingRequestCallbacks = [];
+
+ // TODO(vojta): remove this temporary api
+ self.$$completeOutstandingRequest = completeOutstandingRequest;
+ self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };
+
+ /**
+ * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`
+ * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.
+ */
+ function completeOutstandingRequest(fn) {
+ try {
+ fn.apply(null, sliceArgs(arguments, 1));
+ } finally {
+ outstandingRequestCount--;
+ if (outstandingRequestCount === 0) {
+ while (outstandingRequestCallbacks.length) {
+ try {
+ outstandingRequestCallbacks.pop()();
+ } catch (e) {
+ $log.error(e);
+ }
+ }
+ }
+ }
+ }
+
+ function getHash(url) {
+ var index = url.indexOf('#');
+ return index === -1 ? '' : url.substr(index + 1);
+ }
+
+ /**
+ * @private
+ * Note: this method is used only by scenario runner
+ * TODO(vojta): prefix this method with $$ ?
+ * @param {function()} callback Function that will be called when no outstanding request
+ */
+ self.notifyWhenNoOutstandingRequests = function(callback) {
+ if (outstandingRequestCount === 0) {
+ callback();
+ } else {
+ outstandingRequestCallbacks.push(callback);
+ }
+ };
+
+ //////////////////////////////////////////////////////////////
+ // URL API
+ //////////////////////////////////////////////////////////////
+
+ var cachedState, lastHistoryState,
+ lastBrowserUrl = location.href,
+ baseElement = document.find('base'),
+ reloadLocation = null;
+
+ cacheState();
+ lastHistoryState = cachedState;
+
+ /**
+ * @name $browser#url
+ *
+ * @description
+ * GETTER:
+ * Without any argument, this method just returns current value of location.href.
+ *
+ * SETTER:
+ * With at least one argument, this method sets url to new value.
+ * If html5 history api supported, pushState/replaceState is used, otherwise
+ * location.href/location.replace is used.
+ * Returns its own instance to allow chaining
+ *
+ * NOTE: this api is intended for use only by the $location service. Please use the
+ * {@link ng.$location $location service} to change url.
+ *
+ * @param {string} url New url (when used as setter)
+ * @param {boolean=} replace Should new url replace current history record?
+ * @param {object=} state object to use with pushState/replaceState
+ */
+ self.url = function(url, replace, state) {
+ // In modern browsers `history.state` is `null` by default; treating it separately
+ // from `undefined` would cause `$browser.url('/foo')` to change `history.state`
+ // to undefined via `pushState`. Instead, let's change `undefined` to `null` here.
+ if (isUndefined(state)) {
+ state = null;
+ }
+
+ // Android Browser BFCache causes location, history reference to become stale.
+ if (location !== window.location) location = window.location;
+ if (history !== window.history) history = window.history;
+
+ // setter
+ if (url) {
+ var sameState = lastHistoryState === state;
+
+ // Don't change anything if previous and current URLs and states match. This also prevents
+ // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.
+ // See https://github.com/angular/angular.js/commit/ffb2701
+ if (lastBrowserUrl === url && (!$sniffer.history || sameState)) {
+ return self;
+ }
+ var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);
+ lastBrowserUrl = url;
+ lastHistoryState = state;
+ // Don't use history API if only the hash changed
+ // due to a bug in IE10/IE11 which leads
+ // to not firing a `hashchange` nor `popstate` event
+ // in some cases (see #9143).
+ if ($sniffer.history && (!sameBase || !sameState)) {
+ history[replace ? 'replaceState' : 'pushState'](state, '', url);
+ cacheState();
+ // Do the assignment again so that those two variables are referentially identical.
+ lastHistoryState = cachedState;
+ } else {
+ if (!sameBase) {
+ reloadLocation = url;
+ }
+ if (replace) {
+ location.replace(url);
+ } else if (!sameBase) {
+ location.href = url;
+ } else {
+ location.hash = getHash(url);
+ }
+ }
+ return self;
+ // getter
+ } else {
+ // - reloadLocation is needed as browsers don't allow to read out
+ // the new location.href if a reload happened.
+ // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
+ return reloadLocation || location.href.replace(/%27/g,"'");
+ }
+ };
+
+ /**
+ * @name $browser#state
+ *
+ * @description
+ * This method is a getter.
+ *
+ * Return history.state or null if history.state is undefined.
+ *
+ * @returns {object} state
+ */
+ self.state = function() {
+ return cachedState;
+ };
+
+ var urlChangeListeners = [],
+ urlChangeInit = false;
+
+ function cacheStateAndFireUrlChange() {
+ cacheState();
+ fireUrlChange();
+ }
+
+ function getCurrentState() {
+ try {
+ return history.state;
+ } catch (e) {
+ // MSIE can reportedly throw when there is no state (UNCONFIRMED).
+ }
+ }
+
+ // This variable should be used *only* inside the cacheState function.
+ var lastCachedState = null;
+ function cacheState() {
+ // This should be the only place in $browser where `history.state` is read.
+ cachedState = getCurrentState();
+ cachedState = isUndefined(cachedState) ? null : cachedState;
+
+ // Prevent callbacks fo fire twice if both hashchange & popstate were fired.
+ if (equals(cachedState, lastCachedState)) {
+ cachedState = lastCachedState;
+ }
+ lastCachedState = cachedState;
+ }
+
+ function fireUrlChange() {
+ if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) {
+ return;
+ }
+
+ lastBrowserUrl = self.url();
+ lastHistoryState = cachedState;
+ forEach(urlChangeListeners, function(listener) {
+ listener(self.url(), cachedState);
+ });
+ }
+
+ /**
+ * @name $browser#onUrlChange
+ *
+ * @description
+ * Register callback function that will be called, when url changes.
+ *
+ * It's only called when the url is changed from outside of angular:
+ * - user types different url into address bar
+ * - user clicks on history (forward/back) button
+ * - user clicks on a link
+ *
+ * It's not called when url is changed by $browser.url() method
+ *
+ * The listener gets called with new url as parameter.
+ *
+ * NOTE: this api is intended for use only by the $location service. Please use the
+ * {@link ng.$location $location service} to monitor url changes in angular apps.
+ *
+ * @param {function(string)} listener Listener function to be called when url changes.
+ * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.
+ */
+ self.onUrlChange = function(callback) {
+ // TODO(vojta): refactor to use node's syntax for events
+ if (!urlChangeInit) {
+ // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)
+ // don't fire popstate when user change the address bar and don't fire hashchange when url
+ // changed by push/replaceState
+
+ // html5 history api - popstate event
+ if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange);
+ // hashchange event
+ jqLite(window).on('hashchange', cacheStateAndFireUrlChange);
+
+ urlChangeInit = true;
+ }
+
+ urlChangeListeners.push(callback);
+ return callback;
+ };
+
+ /**
+ * @private
+ * Remove popstate and hashchange handler from window.
+ *
+ * NOTE: this api is intended for use only by $rootScope.
+ */
+ self.$$applicationDestroyed = function() {
+ jqLite(window).off('hashchange popstate', cacheStateAndFireUrlChange);
+ };
+
+ /**
+ * Checks whether the url has changed outside of Angular.
+ * Needs to be exported to be able to check for changes that have been done in sync,
+ * as hashchange/popstate events fire in async.
+ */
+ self.$$checkUrlChange = fireUrlChange;
+
+ //////////////////////////////////////////////////////////////
+ // Misc API
+ //////////////////////////////////////////////////////////////
+
+ /**
+ * @name $browser#baseHref
+ *
+ * @description
+ * Returns current
+ * (always relative - without domain)
+ *
+ * @returns {string} The current base href
+ */
+ self.baseHref = function() {
+ var href = baseElement.attr('href');
+ return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
+ };
+
+ /**
+ * @name $browser#defer
+ * @param {function()} fn A function, who's execution should be deferred.
+ * @param {number=} [delay=0] of milliseconds to defer the function execution.
+ * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.
+ *
+ * @description
+ * Executes a fn asynchronously via `setTimeout(fn, delay)`.
+ *
+ * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using
+ * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed
+ * via `$browser.defer.flush()`.
+ *
+ */
+ self.defer = function(fn, delay) {
+ var timeoutId;
+ outstandingRequestCount++;
+ timeoutId = setTimeout(function() {
+ delete pendingDeferIds[timeoutId];
+ completeOutstandingRequest(fn);
+ }, delay || 0);
+ pendingDeferIds[timeoutId] = true;
+ return timeoutId;
+ };
+
+
+ /**
+ * @name $browser#defer.cancel
+ *
+ * @description
+ * Cancels a deferred task identified with `deferId`.
+ *
+ * @param {*} deferId Token returned by the `$browser.defer` function.
+ * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
+ * canceled.
+ */
+ self.defer.cancel = function(deferId) {
+ if (pendingDeferIds[deferId]) {
+ delete pendingDeferIds[deferId];
+ clearTimeout(deferId);
+ completeOutstandingRequest(noop);
+ return true;
+ }
+ return false;
+ };
+
+}
+
+function $BrowserProvider() {
+ this.$get = ['$window', '$log', '$sniffer', '$document',
+ function($window, $log, $sniffer, $document) {
+ return new Browser($window, $document, $log, $sniffer);
+ }];
+}
+
+/**
+ * @ngdoc service
+ * @name $cacheFactory
+ *
+ * @description
+ * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to
+ * them.
+ *
+ * ```js
+ *
+ * var cache = $cacheFactory('cacheId');
+ * expect($cacheFactory.get('cacheId')).toBe(cache);
+ * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
+ *
+ * cache.put("key", "value");
+ * cache.put("another key", "another value");
+ *
+ * // We've specified no options on creation
+ * expect(cache.info()).toEqual({id: 'cacheId', size: 2});
+ *
+ * ```
+ *
+ *
+ * @param {string} cacheId Name or id of the newly created cache.
+ * @param {object=} options Options object that specifies the cache behavior. Properties:
+ *
+ * - `{number=}` `capacity` — turns the cache into LRU cache.
+ *
+ * @returns {object} Newly created cache object with the following set of methods:
+ *
+ * - `{object}` `info()` — Returns id, size, and options of cache.
+ * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns
+ * it.
+ * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.
+ * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.
+ * - `{void}` `removeAll()` — Removes all cached values.
+ * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.
+ *
+ * @example
+
+
+
+
+
+ Cache
+
+
Cached Values
+
+
+ :
+
+
+
+
Cache Info
+
+
+ :
+
+
+
+
+
+ angular.module('cacheExampleApp', []).
+ controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {
+ $scope.keys = [];
+ $scope.cache = $cacheFactory('cacheId');
+ $scope.put = function(key, value) {
+ if ($scope.cache.get(key) === undefined) {
+ $scope.keys.push(key);
+ }
+ $scope.cache.put(key, value === undefined ? null : value);
+ };
+ }]);
+
+
+ p {
+ margin: 10px 0 3px;
+ }
+
+
+ */
+function $CacheFactoryProvider() {
+
+ this.$get = function() {
+ var caches = {};
+
+ function cacheFactory(cacheId, options) {
+ if (cacheId in caches) {
+ throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId);
+ }
+
+ var size = 0,
+ stats = extend({}, options, {id: cacheId}),
+ data = {},
+ capacity = (options && options.capacity) || Number.MAX_VALUE,
+ lruHash = {},
+ freshEnd = null,
+ staleEnd = null;
+
+ /**
+ * @ngdoc type
+ * @name $cacheFactory.Cache
+ *
+ * @description
+ * A cache object used to store and retrieve data, primarily used by
+ * {@link $http $http} and the {@link ng.directive:script script} directive to cache
+ * templates and other data.
+ *
+ * ```js
+ * angular.module('superCache')
+ * .factory('superCache', ['$cacheFactory', function($cacheFactory) {
+ * return $cacheFactory('super-cache');
+ * }]);
+ * ```
+ *
+ * Example test:
+ *
+ * ```js
+ * it('should behave like a cache', inject(function(superCache) {
+ * superCache.put('key', 'value');
+ * superCache.put('another key', 'another value');
+ *
+ * expect(superCache.info()).toEqual({
+ * id: 'super-cache',
+ * size: 2
+ * });
+ *
+ * superCache.remove('another key');
+ * expect(superCache.get('another key')).toBeUndefined();
+ *
+ * superCache.removeAll();
+ * expect(superCache.info()).toEqual({
+ * id: 'super-cache',
+ * size: 0
+ * });
+ * }));
+ * ```
+ */
+ return caches[cacheId] = {
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#put
+ * @kind function
+ *
+ * @description
+ * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be
+ * retrieved later, and incrementing the size of the cache if the key was not already
+ * present in the cache. If behaving like an LRU cache, it will also remove stale
+ * entries from the set.
+ *
+ * It will not insert undefined values into the cache.
+ *
+ * @param {string} key the key under which the cached data is stored.
+ * @param {*} value the value to store alongside the key. If it is undefined, the key
+ * will not be stored.
+ * @returns {*} the value stored.
+ */
+ put: function(key, value) {
+ if (isUndefined(value)) return;
+ if (capacity < Number.MAX_VALUE) {
+ var lruEntry = lruHash[key] || (lruHash[key] = {key: key});
+
+ refresh(lruEntry);
+ }
+
+ if (!(key in data)) size++;
+ data[key] = value;
+
+ if (size > capacity) {
+ this.remove(staleEnd.key);
+ }
+
+ return value;
+ },
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#get
+ * @kind function
+ *
+ * @description
+ * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.
+ *
+ * @param {string} key the key of the data to be retrieved
+ * @returns {*} the value stored.
+ */
+ get: function(key) {
+ if (capacity < Number.MAX_VALUE) {
+ var lruEntry = lruHash[key];
+
+ if (!lruEntry) return;
+
+ refresh(lruEntry);
+ }
+
+ return data[key];
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#remove
+ * @kind function
+ *
+ * @description
+ * Removes an entry from the {@link $cacheFactory.Cache Cache} object.
+ *
+ * @param {string} key the key of the entry to be removed
+ */
+ remove: function(key) {
+ if (capacity < Number.MAX_VALUE) {
+ var lruEntry = lruHash[key];
+
+ if (!lruEntry) return;
+
+ if (lruEntry == freshEnd) freshEnd = lruEntry.p;
+ if (lruEntry == staleEnd) staleEnd = lruEntry.n;
+ link(lruEntry.n,lruEntry.p);
+
+ delete lruHash[key];
+ }
+
+ delete data[key];
+ size--;
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#removeAll
+ * @kind function
+ *
+ * @description
+ * Clears the cache object of any entries.
+ */
+ removeAll: function() {
+ data = {};
+ size = 0;
+ lruHash = {};
+ freshEnd = staleEnd = null;
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#destroy
+ * @kind function
+ *
+ * @description
+ * Destroys the {@link $cacheFactory.Cache Cache} object entirely,
+ * removing it from the {@link $cacheFactory $cacheFactory} set.
+ */
+ destroy: function() {
+ data = null;
+ stats = null;
+ lruHash = null;
+ delete caches[cacheId];
+ },
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory.Cache#info
+ * @kind function
+ *
+ * @description
+ * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.
+ *
+ * @returns {object} an object with the following properties:
+ *
+ *
**id**: the id of the cache instance
+ *
**size**: the number of entries kept in the cache instance
+ *
**...**: any additional properties from the options object when creating the
+ * cache.
+ *
+ */
+ info: function() {
+ return extend({}, stats, {size: size});
+ }
+ };
+
+
+ /**
+ * makes the `entry` the freshEnd of the LRU linked list
+ */
+ function refresh(entry) {
+ if (entry != freshEnd) {
+ if (!staleEnd) {
+ staleEnd = entry;
+ } else if (staleEnd == entry) {
+ staleEnd = entry.n;
+ }
+
+ link(entry.n, entry.p);
+ link(entry, freshEnd);
+ freshEnd = entry;
+ freshEnd.n = null;
+ }
+ }
+
+
+ /**
+ * bidirectionally links two entries of the LRU linked list
+ */
+ function link(nextEntry, prevEntry) {
+ if (nextEntry != prevEntry) {
+ if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify
+ if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify
+ }
+ }
+ }
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory#info
+ *
+ * @description
+ * Get information about all the caches that have been created
+ *
+ * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`
+ */
+ cacheFactory.info = function() {
+ var info = {};
+ forEach(caches, function(cache, cacheId) {
+ info[cacheId] = cache.info();
+ });
+ return info;
+ };
+
+
+ /**
+ * @ngdoc method
+ * @name $cacheFactory#get
+ *
+ * @description
+ * Get access to a cache object by the `cacheId` used when it was created.
+ *
+ * @param {string} cacheId Name or id of a cache to access.
+ * @returns {object} Cache object identified by the cacheId or undefined if no such cache.
+ */
+ cacheFactory.get = function(cacheId) {
+ return caches[cacheId];
+ };
+
+
+ return cacheFactory;
+ };
+}
+
+/**
+ * @ngdoc service
+ * @name $templateCache
+ *
+ * @description
+ * The first time a template is used, it is loaded in the template cache for quick retrieval. You
+ * can load templates directly into the cache in a `script` tag, or by consuming the
+ * `$templateCache` service directly.
+ *
+ * Adding via the `script` tag:
+ *
+ * ```html
+ *
+ * ```
+ *
+ * **Note:** the `script` tag containing the template does not need to be included in the `head` of
+ * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE,
+ * element with ng-app attribute), otherwise the template will be ignored.
+ *
+ * Adding via the `$templateCache` service:
+ *
+ * ```js
+ * var myApp = angular.module('myApp', []);
+ * myApp.run(function($templateCache) {
+ * $templateCache.put('templateId.html', 'This is the content of the template');
+ * });
+ * ```
+ *
+ * To retrieve the template later, simply use it in your HTML:
+ * ```html
+ *
+ * ```
+ *
+ * or get it via Javascript:
+ * ```js
+ * $templateCache.get('templateId.html')
+ * ```
+ *
+ * See {@link ng.$cacheFactory $cacheFactory}.
+ *
+ */
+function $TemplateCacheProvider() {
+ this.$get = ['$cacheFactory', function($cacheFactory) {
+ return $cacheFactory('templates');
+ }];
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Any commits to this file should be reviewed with security in mind. *
+ * Changes to this file can potentially create security vulnerabilities. *
+ * An approval from 2 Core members with history of modifying *
+ * this file is required. *
+ * *
+ * Does the change somehow allow for arbitrary javascript to be executed? *
+ * Or allows for someone to change the prototype of built-in objects? *
+ * Or gives undesired access to variables likes document or window? *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!
+ *
+ * DOM-related variables:
+ *
+ * - "node" - DOM Node
+ * - "element" - DOM Element or Node
+ * - "$node" or "$element" - jqLite-wrapped node or element
+ *
+ *
+ * Compiler related stuff:
+ *
+ * - "linkFn" - linking fn of a single directive
+ * - "nodeLinkFn" - function that aggregates all linking fns for a particular node
+ * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node
+ * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList)
+ */
+
+
+/**
+ * @ngdoc service
+ * @name $compile
+ * @kind function
+ *
+ * @description
+ * Compiles an HTML string or DOM into a template and produces a template function, which
+ * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.
+ *
+ * The compilation is a process of walking the DOM tree and matching DOM elements to
+ * {@link ng.$compileProvider#directive directives}.
+ *
+ *
+ * **Note:** This document is an in-depth reference of all directive options.
+ * For a gentle introduction to directives with examples of common use cases,
+ * see the {@link guide/directive directive guide}.
+ *
+ *
+ * ## Comprehensive Directive API
+ *
+ * There are many different options for a directive.
+ *
+ * The difference resides in the return value of the factory function.
+ * You can either return a "Directive Definition Object" (see below) that defines the directive properties,
+ * or just the `postLink` function (all other properties will have the default values).
+ *
+ *
+ * **Best Practice:** It's recommended to use the "directive definition object" form.
+ *
+ * **Note:** Any unspecified options will use the default value. You can see the default values below.
+ *
+ *
+ * Therefore the above can be simplified as:
+ *
+ * ```js
+ * var myModule = angular.module(...);
+ *
+ * myModule.directive('directiveName', function factory(injectables) {
+ * var directiveDefinitionObject = {
+ * link: function postLink(scope, iElement, iAttrs) { ... }
+ * };
+ * return directiveDefinitionObject;
+ * // or
+ * // return function postLink(scope, iElement, iAttrs) { ... }
+ * });
+ * ```
+ *
+ *
+ *
+ * ### Directive Definition Object
+ *
+ * The directive definition object provides instructions to the {@link ng.$compile
+ * compiler}. The attributes are:
+ *
+ * #### `multiElement`
+ * When this property is set to true, the HTML compiler will collect DOM nodes between
+ * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them
+ * together as the directive elements. It is recommended that this feature be used on directives
+ * which are not strictly behavioural (such as {@link ngClick}), and which
+ * do not manipulate or replace child nodes (such as {@link ngInclude}).
+ *
+ * #### `priority`
+ * When there are multiple directives defined on a single DOM element, sometimes it
+ * is necessary to specify the order in which the directives are applied. The `priority` is used
+ * to sort the directives before their `compile` functions get called. Priority is defined as a
+ * number. Directives with greater numerical `priority` are compiled first. Pre-link functions
+ * are also run in priority order, but post-link functions are run in reverse order. The order
+ * of directives with the same priority is undefined. The default priority is `0`.
+ *
+ * #### `terminal`
+ * If set to true then the current `priority` will be the last set of directives
+ * which will execute (any directives at the current priority will still execute
+ * as the order of execution on same `priority` is undefined). Note that expressions
+ * and other directives used in the directive's template will also be excluded from execution.
+ *
+ * #### `scope`
+ * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the
+ * same element request a new scope, only one new scope is created. The new scope rule does not
+ * apply for the root of the template since the root of the template always gets a new scope.
+ *
+ * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from
+ * normal scope in that it does not prototypically inherit from the parent scope. This is useful
+ * when creating reusable components, which should not accidentally read or modify data in the
+ * parent scope.
+ *
+ * The 'isolate' scope takes an object hash which defines a set of local scope properties
+ * derived from the parent scope. These local properties are useful for aliasing values for
+ * templates. Locals definition is a hash of local scope property to its source:
+ *
+ * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is
+ * always a string since DOM attributes are strings. If no `attr` name is specified then the
+ * attribute name is assumed to be the same as the local name.
+ * Given `` and widget definition
+ * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect
+ * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the
+ * `localName` property on the widget scope. The `name` is read from the parent scope (not
+ * component scope).
+ *
+ * * `=` or `=attr` - set up bi-directional binding between a local scope property and the
+ * parent scope property of name defined via the value of the `attr` attribute. If no `attr`
+ * name is specified then the attribute name is assumed to be the same as the local name.
+ * Given `` and widget definition of
+ * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the
+ * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected
+ * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent
+ * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You
+ * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If
+ * you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use
+ * `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional).
+ *
+ * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.
+ * If no `attr` name is specified then the attribute name is assumed to be the same as the
+ * local name. Given `` and widget definition of
+ * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to
+ * a function wrapper for the `count = count + value` expression. Often it's desirable to
+ * pass data from the isolated scope via an expression to the parent scope, this can be
+ * done by passing a map of local variable names and values into the expression wrapper fn.
+ * For example, if the expression is `increment(amount)` then we can specify the amount value
+ * by calling the `localFn` as `localFn({amount: 22})`.
+ *
+ *
+ * #### `bindToController`
+ * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will
+ * allow a component to have its properties bound to the controller, rather than to scope. When the controller
+ * is instantiated, the initial values of the isolate scope bindings are already available.
+ *
+ * #### `controller`
+ * Controller constructor function. The controller is instantiated before the
+ * pre-linking phase and it is shared with other directives (see
+ * `require` attribute). This allows the directives to communicate with each other and augment
+ * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:
+ *
+ * * `$scope` - Current scope associated with the element
+ * * `$element` - Current element
+ * * `$attrs` - Current attributes object for the element
+ * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:
+ * `function([scope], cloneLinkingFn, futureParentElement)`.
+ * * `scope`: optional argument to override the scope.
+ * * `cloneLinkingFn`: optional argument to create clones of the original transcluded content.
+ * * `futureParentElement`:
+ * * defines the parent to which the `cloneLinkingFn` will add the cloned elements.
+ * * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.
+ * * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)
+ * and when the `cloneLinkinFn` is passed,
+ * as those elements need to created and cloned in a special way when they are defined outside their
+ * usual containers (e.g. like `