// ==UserScript==
// @name xpd
// @namespace http://d.hatena.ne.jp/gengar/
// @description GLCのパーティ構築システムの一括変更を使いやすくするスクリプト
// @include http://psense.lib.net/_/PDINPUT.cgi*
//
// ==/UserScript==
/*
* version 1.5.0
* Copyright (C) 2009-2011 kaki
*/
var xpd = {
version: "1.5.0"
};
function getWrappedJSObject(obj) {
if (obj.wrappedJSObject) {
return obj.wrappedJSObject;
}
else {
return obj;
}
}
var $w = window.wrappedJSObject || window;
var $d = document.wrappedJSObject || document;
var $f = getWrappedJSObject(document.forms[0]);
if (!$f.S2) throw "一括変更で使用して下さい.";
if ($w.xpd) {
alert("二重に実行しようとしました.");
throw "二重に実行しようとしました.";
}
$d.title += "/xpd";
$w.xpd = xpd;
var browser = {
camino: false,
firefox: false,
safari: false,
msie: false
};
if (navigator.userAgent.indexOf("Camino") != -1) {
browser.camino = true;
}
else if (navigator.userAgent.indexOf("Firefox") != -1) {
browser.firefox = true;
}
else if (navigator.userAgent.indexOf("Safari") != -1) {
browser.safari = true;
}
else if (navigator.userAgent.indexOf("MSIE") != -1) {
browser.msie = true;
}
var platform = {
windows: false,
macosx: false
};
if (navigator.userAgent.indexOf("Windows") != -1) {
platform.windows = true;
}
else if (navigator.userAgent.indexOf("Mac OS X") != -1) {
platform.macosx = true;
}
xpd.pref = {};
// --- Data ---
function PokeData(name, hp, spd, female) {
this.name = name;
this.hp = hp;
this.spd = spd;
this.female = female;
}
var pokelist = new Array;
pokelist[1] = new PokeData("フシギダネ", 45, 45, 2);
pokelist[2] = new PokeData("フシギソウ", 60, 60, 2);
pokelist[3] = new PokeData("フシギバナ", 80, 80, 2);
pokelist[4] = new PokeData("ヒトカゲ", 39, 65, 2);
pokelist[5] = new PokeData("リザード", 58, 80, 2);
pokelist[6] = new PokeData("リザードン", 78, 100, 2);
pokelist[7] = new PokeData("ゼニガメ", 44, 43, 2);
pokelist[8] = new PokeData("カメール", 59, 58, 2);
pokelist[9] = new PokeData("カメックス", 79, 78, 2);
pokelist[10] = new PokeData("キャタピー", 45, 45, 8);
pokelist[11] = new PokeData("トランセル", 50, 30, 8);
pokelist[12] = new PokeData("バタフリー", 60, 70, 8);
pokelist[13] = new PokeData("ビードル", 40, 50, 8);
pokelist[14] = new PokeData("コクーン", 45, 35, 8);
pokelist[15] = new PokeData("スピアー", 65, 75, 8);
pokelist[16] = new PokeData("ポッポ", 40, 56, 8);
pokelist[17] = new PokeData("ピジョン", 63, 71, 8);
pokelist[18] = new PokeData("ピジョット", 83, 91, 8);
pokelist[19] = new PokeData("コラッタ", 30, 72, 8);
pokelist[20] = new PokeData("ラッタ", 55, 97, 8);
pokelist[21] = new PokeData("オニスズメ", 40, 70, 8);
pokelist[22] = new PokeData("オニドリル", 65, 100, 8);
pokelist[23] = new PokeData("アーボ", 35, 55, 8);
pokelist[24] = new PokeData("アーボック", 60, 80, 8);
pokelist[25] = new PokeData("ピカチュウ", 35, 90, 8);
pokelist[26] = new PokeData("ライチュウ", 60, 100, 8);
pokelist[27] = new PokeData("サンド", 50, 40, 8);
pokelist[28] = new PokeData("サンドパン", 75, 65, 8);
pokelist[29] = new PokeData("ニドラン♀", 55, 41, 16);
pokelist[30] = new PokeData("ニドリーナ", 70, 56, 16);
pokelist[31] = new PokeData("ニドクイン", 90, 76, 16);
pokelist[32] = new PokeData("ニドラン♂", 46, 50, 0);
pokelist[33] = new PokeData("ニドリーノ", 61, 65, 0);
pokelist[34] = new PokeData("ニドキング", 81, 85, 0);
pokelist[35] = new PokeData("ピッピ", 70, 35, 12);
pokelist[36] = new PokeData("ピクシー", 95, 60, 12);
pokelist[37] = new PokeData("ロコン", 38, 65, 12);
pokelist[38] = new PokeData("キュウコン", 73, 100, 12);
pokelist[39] = new PokeData("プリン", 115, 20, 12);
pokelist[40] = new PokeData("プクリン", 140, 45, 12);
pokelist[41] = new PokeData("ズバット", 40, 55, 8);
pokelist[42] = new PokeData("ゴルバット", 75, 90, 8);
pokelist[43] = new PokeData("ナゾノクサ", 45, 30, 8);
pokelist[44] = new PokeData("クサイハナ", 60, 40, 8);
pokelist[45] = new PokeData("ラフレシア", 75, 50, 8);
pokelist[46] = new PokeData("パラス", 35, 25, 8);
pokelist[47] = new PokeData("パラセクト", 60, 30, 8);
pokelist[48] = new PokeData("コンパン", 60, 45, 8);
pokelist[49] = new PokeData("モルフォン", 70, 90, 8);
pokelist[50] = new PokeData("ディグダ", 10, 95, 8);
pokelist[51] = new PokeData("ダグトリオ", 35, 120, 8);
pokelist[52] = new PokeData("ニャース", 40, 90, 8);
pokelist[53] = new PokeData("ペルシアン", 65, 115, 8);
pokelist[54] = new PokeData("コダック", 50, 55, 8);
pokelist[55] = new PokeData("ゴルダック", 80, 85, 8);
pokelist[56] = new PokeData("マンキー", 40, 70, 8);
pokelist[57] = new PokeData("オコリザル", 65, 95, 8);
pokelist[58] = new PokeData("ガーディ", 55, 60, 4);
pokelist[59] = new PokeData("ウインディ", 90, 95, 4);
pokelist[60] = new PokeData("ニョロモ", 40, 90, 8);
pokelist[61] = new PokeData("ニョロゾ", 65, 90, 8);
pokelist[62] = new PokeData("ニョロボン", 90, 70, 8);
pokelist[63] = new PokeData("ケーシィ", 25, 90, 4);
pokelist[64] = new PokeData("ユンゲラー", 40, 105, 4);
pokelist[65] = new PokeData("フーディン", 55, 120, 4);
pokelist[66] = new PokeData("ワンリキー", 70, 35, 4);
pokelist[67] = new PokeData("ゴーリキー", 80, 45, 4);
pokelist[68] = new PokeData("カイリキー", 90, 55, 4);
pokelist[69] = new PokeData("マダツボミ", 50, 40, 8);
pokelist[70] = new PokeData("ウツドン", 65, 55, 8);
pokelist[71] = new PokeData("ウツボット", 80, 70, 8);
pokelist[72] = new PokeData("メノクラゲ", 40, 70, 8);
pokelist[73] = new PokeData("ドククラゲ", 80, 100, 8);
pokelist[74] = new PokeData("イシツブテ", 40, 20, 8);
pokelist[75] = new PokeData("ゴローン", 55, 35, 8);
pokelist[76] = new PokeData("ゴローニャ", 80, 45, 8);
pokelist[77] = new PokeData("ポニータ", 50, 90, 8);
pokelist[78] = new PokeData("ギャロップ", 65, 105, 8);
pokelist[79] = new PokeData("ヤドン", 90, 15, 8);
pokelist[80] = new PokeData("ヤドラン", 95, 30, 8);
pokelist[81] = new PokeData("コイル", 25, 45, -1);
pokelist[82] = new PokeData("レアコイル", 50, 70, -1);
pokelist[83] = new PokeData("カモネギ", 52, 60, 8);
pokelist[84] = new PokeData("ドードー", 35, 75, 8);
pokelist[85] = new PokeData("ドードリオ", 60, 100, 8);
pokelist[86] = new PokeData("パウワウ", 65, 45, 8);
pokelist[87] = new PokeData("ジュゴン", 90, 70, 8);
pokelist[88] = new PokeData("ベトベター", 80, 25, 8);
pokelist[89] = new PokeData("ベトベトン", 105, 50, 8);
pokelist[90] = new PokeData("シェルダー", 30, 40, 8);
pokelist[91] = new PokeData("パルシェン", 50, 70, 8);
pokelist[92] = new PokeData("ゴース", 30, 80, 8);
pokelist[93] = new PokeData("ゴースト", 45, 95, 8);
pokelist[94] = new PokeData("ゲンガー", 60, 110, 8);
pokelist[95] = new PokeData("イワーク", 35, 70, 8);
pokelist[96] = new PokeData("スリープ", 60, 42, 8);
pokelist[97] = new PokeData("スリーパー", 85, 67, 8);
pokelist[98] = new PokeData("クラブ", 30, 50, 8);
pokelist[99] = new PokeData("キングラー", 55, 75, 8);
pokelist[100] = new PokeData("ビリリダマ", 40, 100, -1);
pokelist[101] = new PokeData("マルマイン", 60, 140, -1);
pokelist[102] = new PokeData("タマタマ", 60, 40, 8);
pokelist[103] = new PokeData("ナッシー", 95, 55, 8);
pokelist[104] = new PokeData("カラカラ", 50, 35, 8);
pokelist[105] = new PokeData("ガラガラ", 60, 45, 8);
pokelist[106] = new PokeData("サワムラー", 50, 87, 0);
pokelist[107] = new PokeData("エビワラー", 50, 76, 0);
pokelist[108] = new PokeData("ベロリンガ", 90, 30, 8);
pokelist[109] = new PokeData("ドガース", 40, 35, 8);
pokelist[110] = new PokeData("マタドガス", 65, 60, 8);
pokelist[111] = new PokeData("サイホーン", 80, 25, 8);
pokelist[112] = new PokeData("サイドン", 105, 40, 8);
pokelist[113] = new PokeData("ラッキー", 250, 50, 16);
pokelist[114] = new PokeData("モンジャラ", 65, 60, 8);
pokelist[115] = new PokeData("ガルーラ", 105, 90, 16);
pokelist[116] = new PokeData("タッツー", 30, 60, 8);
pokelist[117] = new PokeData("シードラ", 55, 85, 8);
pokelist[118] = new PokeData("トサキント", 45, 63, 8);
pokelist[119] = new PokeData("アズマオウ", 80, 68, 8);
pokelist[120] = new PokeData("ヒトデマン", 30, 85, -1);
pokelist[121] = new PokeData("スターミー", 60, 115, -1);
pokelist[122] = new PokeData("バリヤード", 40, 90, 8);
pokelist[123] = new PokeData("ストライク", 70, 105, 8);
pokelist[124] = new PokeData("ルージュラ", 65, 95, 16);
pokelist[125] = new PokeData("エレブー", 65, 105, 4);
pokelist[126] = new PokeData("ブーバー", 65, 93, 4);
pokelist[127] = new PokeData("カイロス", 65, 85, 8);
pokelist[128] = new PokeData("ケンタロス", 75, 110, 0);
pokelist[129] = new PokeData("コイキング", 20, 80, 8);
pokelist[130] = new PokeData("ギャラドス", 95, 81, 8);
pokelist[131] = new PokeData("ラプラス", 130, 60, 8);
pokelist[132] = new PokeData("メタモン", 48, 48, -1);
pokelist[133] = new PokeData("イーブイ", 55, 55, 2);
pokelist[134] = new PokeData("シャワーズ", 130, 65, 2);
pokelist[135] = new PokeData("サンダース", 65, 130, 2);
pokelist[136] = new PokeData("ブースター", 65, 65, 2);
pokelist[137] = new PokeData("ポリゴン", 65, 40, -1);
pokelist[138] = new PokeData("オムナイト", 35, 35, 2);
pokelist[139] = new PokeData("オムスター", 70, 55, 2);
pokelist[140] = new PokeData("カブト", 30, 55, 2);
pokelist[141] = new PokeData("カブトプス", 60, 80, 2);
pokelist[142] = new PokeData("プテラ", 80, 130, 2);
pokelist[143] = new PokeData("カビゴン", 160, 30, 2);
pokelist[144] = new PokeData("フリーザー", 90, 85, -1);
pokelist[145] = new PokeData("サンダー", 90, 100, -1);
pokelist[146] = new PokeData("ファイヤー", 90, 90, -1);
pokelist[147] = new PokeData("ミニリュウ", 41, 50, 8);
pokelist[148] = new PokeData("ハクリュー", 61, 70, 8);
pokelist[149] = new PokeData("カイリュー", 91, 80, 8);
pokelist[150] = new PokeData("ミュウツー", 106, 130, -1);
pokelist[151] = new PokeData("ミュウ", 100, 100, -1);
pokelist[152] = new PokeData("チコリータ", 45, 45, 2);
pokelist[153] = new PokeData("ベイリーフ", 60, 60, 2);
pokelist[154] = new PokeData("メガニウム", 80, 80, 2);
pokelist[155] = new PokeData("ヒノアラシ", 39, 65, 2);
pokelist[156] = new PokeData("マグマラシ", 58, 80, 2);
pokelist[157] = new PokeData("バクフーン", 78, 100, 2);
pokelist[158] = new PokeData("ワニノコ", 50, 43, 2);
pokelist[159] = new PokeData("アリゲイツ", 65, 58, 2);
pokelist[160] = new PokeData("オーダイル", 85, 78, 2);
pokelist[161] = new PokeData("オタチ", 35, 20, 8);
pokelist[162] = new PokeData("オオタチ", 85, 90, 8);
pokelist[163] = new PokeData("ホーホー", 60, 50, 8);
pokelist[164] = new PokeData("ヨルノズク", 100, 70, 8);
pokelist[165] = new PokeData("レディバ", 40, 55, 8);
pokelist[166] = new PokeData("レディアン", 55, 85, 8);
pokelist[167] = new PokeData("イトマル", 40, 30, 8);
pokelist[168] = new PokeData("アリアドス", 70, 40, 8);
pokelist[169] = new PokeData("クロバット", 85, 130, 8);
pokelist[170] = new PokeData("チョンチー", 75, 67, 8);
pokelist[171] = new PokeData("ランターン", 125, 67, 8);
pokelist[172] = new PokeData("ピチュー", 20, 60, 8);
pokelist[173] = new PokeData("ピィ", 50, 15, 12);
pokelist[174] = new PokeData("ププリン", 90, 15, 12);
pokelist[175] = new PokeData("トゲピー", 35, 20, 2);
pokelist[176] = new PokeData("トゲチック", 55, 40, 2);
pokelist[177] = new PokeData("ネイティ", 40, 70, 8);
pokelist[178] = new PokeData("ネイティオ", 65, 95, 8);
pokelist[179] = new PokeData("メリープ", 55, 35, 8);
pokelist[180] = new PokeData("モココ", 70, 45, 8);
pokelist[181] = new PokeData("デンリュウ", 90, 55, 8);
pokelist[182] = new PokeData("キレイハナ", 75, 50, 8);
pokelist[183] = new PokeData("マリル", 70, 40, 8);
pokelist[184] = new PokeData("マリルリ", 100, 50, 8);
pokelist[185] = new PokeData("ウソッキー", 70, 30, 8);
pokelist[186] = new PokeData("ニョロトノ", 90, 70, 8);
pokelist[187] = new PokeData("ハネッコ", 35, 50, 8);
pokelist[188] = new PokeData("ポポッコ", 55, 80, 8);
pokelist[189] = new PokeData("ワタッコ", 75, 110, 8);
pokelist[190] = new PokeData("エイパム", 55, 85, 8);
pokelist[191] = new PokeData("ヒマナッツ", 30, 30, 8);
pokelist[192] = new PokeData("キマワリ", 75, 30, 8);
pokelist[193] = new PokeData("ヤンヤンマ", 65, 95, 8);
pokelist[194] = new PokeData("ウパー", 55, 15, 8);
pokelist[195] = new PokeData("ヌオー", 95, 35, 8);
pokelist[196] = new PokeData("エーフィ", 65, 110, 2);
pokelist[197] = new PokeData("ブラッキー", 95, 65, 2);
pokelist[198] = new PokeData("ヤミカラス", 60, 91, 8);
pokelist[199] = new PokeData("ヤドキング", 95, 30, 8);
pokelist[200] = new PokeData("ムウマ", 60, 85, 8);
pokelist[201] = new PokeData("アンノーン", 48, 48, -1);
pokelist[202] = new PokeData("ソーナンス", 190, 33, 8);
pokelist[203] = new PokeData("キリンリキ", 70, 85, 8);
pokelist[204] = new PokeData("クヌギダマ", 50, 15, 8);
pokelist[205] = new PokeData("フォレトス", 75, 40, 8);
pokelist[206] = new PokeData("ノコッチ", 100, 45, 8);
pokelist[207] = new PokeData("グライガー", 65, 85, 8);
pokelist[208] = new PokeData("ハガネール", 75, 30, 8);
pokelist[209] = new PokeData("ブルー", 60, 30, 12);
pokelist[210] = new PokeData("グランブル", 90, 45, 12);
pokelist[211] = new PokeData("ハリーセン", 65, 85, 8);
pokelist[212] = new PokeData("ハッサム", 70, 65, 8);
pokelist[213] = new PokeData("ツボツボ", 20, 5, 8);
pokelist[214] = new PokeData("ヘラクロス", 80, 85, 8);
pokelist[215] = new PokeData("ニューラ", 55, 115, 8);
pokelist[216] = new PokeData("ヒメグマ", 60, 40, 8);
pokelist[217] = new PokeData("リングマ", 90, 55, 8);
pokelist[218] = new PokeData("マグマッグ", 40, 20, 8);
pokelist[219] = new PokeData("マグカルゴ", 50, 30, 8);
pokelist[220] = new PokeData("ウリムー", 50, 50, 8);
pokelist[221] = new PokeData("イノムー", 100, 50, 8);
pokelist[222] = new PokeData("サニーゴ", 55, 35, 12);
pokelist[223] = new PokeData("テッポウオ", 35, 65, 8);
pokelist[224] = new PokeData("オクタン", 75, 45, 8);
pokelist[225] = new PokeData("デリバード", 45, 75, 8);
pokelist[226] = new PokeData("マンタイン", 65, 70, 8);
pokelist[227] = new PokeData("エアームド", 65, 70, 8);
pokelist[228] = new PokeData("デルビル", 45, 65, 8);
pokelist[229] = new PokeData("ヘルガー", 75, 95, 8);
pokelist[230] = new PokeData("キングドラ", 75, 85, 8);
pokelist[231] = new PokeData("ゴマゾウ", 90, 40, 8);
pokelist[232] = new PokeData("ドンファン", 90, 50, 8);
pokelist[233] = new PokeData("ポリゴン2", 85, 60, -1);
pokelist[234] = new PokeData("オドシシ", 73, 85, 8);
pokelist[235] = new PokeData("ドーブル", 55, 75, 8);
pokelist[236] = new PokeData("バルキー", 35, 35, 0);
pokelist[237] = new PokeData("カポエラー", 50, 70, 0);
pokelist[238] = new PokeData("ムチュール", 45, 65, 16);
pokelist[239] = new PokeData("エレキッド", 45, 95, 4);
pokelist[240] = new PokeData("ブビィ", 45, 83, 4);
pokelist[241] = new PokeData("ミルタンク", 95, 100, 16);
pokelist[242] = new PokeData("ハピナス", 255, 55, 16);
pokelist[243] = new PokeData("ライコウ", 90, 115, -1);
pokelist[244] = new PokeData("エンテイ", 115, 100, -1);
pokelist[245] = new PokeData("スイクン", 100, 85, -1);
pokelist[246] = new PokeData("ヨーギラス", 50, 41, 8);
pokelist[247] = new PokeData("サナギラス", 70, 51, 8);
pokelist[248] = new PokeData("バンギラス", 100, 61, 8);
pokelist[249] = new PokeData("ルギア", 106, 110, -1);
pokelist[250] = new PokeData("ホウオウ", 106, 90, -1);
pokelist[251] = new PokeData("セレビィ", 100, 100, -1);
function MoveData(name, pp) {
this.name = name;
this.pp = pp;
}
var movelist = new Array;
movelist[0] = new MoveData("", 0);
movelist[2] = new MoveData("はたく", 35);
movelist[3] = new MoveData("からてチョップ", 25);
movelist[4] = new MoveData("おうふくビンタ", 20);
movelist[5] = new MoveData("れんぞくパンチ", 15);
movelist[6] = new MoveData("メガトンパンチ", 20);
movelist[7] = new MoveData("ネコにこばん", 20);
movelist[8] = new MoveData("ほのおのパンチ", 15);
movelist[9] = new MoveData("れいとうパンチ", 15);
movelist[10] = new MoveData("かみなりパンチ", 15);
movelist[11] = new MoveData("ひっかく", 35);
movelist[12] = new MoveData("はさむ", 30);
movelist[13] = new MoveData("ハサミギロチン", 5);
movelist[14] = new MoveData("かまいたち", 10);
movelist[15] = new MoveData("つるぎのまい", 30);
movelist[16] = new MoveData("いあいぎり", 30);
movelist[17] = new MoveData("かぜおこし", 35);
movelist[18] = new MoveData("つばさでうつ", 35);
movelist[19] = new MoveData("ふきとばし", 20);
movelist[20] = new MoveData("そらをとぶ", 15);
movelist[21] = new MoveData("しめつける", 20);
movelist[22] = new MoveData("たたきつける", 20);
movelist[23] = new MoveData("つるのムチ", 10);
movelist[24] = new MoveData("ふみつけ", 20);
movelist[25] = new MoveData("にどげり", 30);
movelist[26] = new MoveData("メガトンキック", 5);
movelist[27] = new MoveData("とびげり", 25);
movelist[28] = new MoveData("まわしげり", 15);
movelist[29] = new MoveData("すなかけ", 15);
movelist[30] = new MoveData("ずつき", 15);
movelist[31] = new MoveData("つのでつく", 25);
movelist[32] = new MoveData("みだれづき", 20);
movelist[33] = new MoveData("つのドリル", 5);
movelist[34] = new MoveData("たいあたり", 35);
movelist[35] = new MoveData("のしかかり", 15);
movelist[36] = new MoveData("まきつく", 20);
movelist[37] = new MoveData("とっしん", 20);
movelist[38] = new MoveData("あばれる", 20);
movelist[39] = new MoveData("すてみタックル", 15);
movelist[40] = new MoveData("しっぽをふる", 30);
movelist[41] = new MoveData("どくばり", 35);
movelist[42] = new MoveData("ダブルニードル", 20);
movelist[43] = new MoveData("ミサイルばり", 20);
movelist[44] = new MoveData("にらみつける", 30);
movelist[45] = new MoveData("かみつく", 25);
movelist[46] = new MoveData("なきごえ", 40);
movelist[47] = new MoveData("ほえる", 20);
movelist[48] = new MoveData("うたう", 15);
movelist[49] = new MoveData("ちょうおんぱ", 20);
movelist[50] = new MoveData("ソニックブーム", 20);
movelist[51] = new MoveData("かなしばり", 20);
movelist[52] = new MoveData("ようかいえき", 30);
movelist[53] = new MoveData("ひのこ", 25);
movelist[54] = new MoveData("かえんほうしゃ", 15);
movelist[55] = new MoveData("しろいきり", 30);
movelist[56] = new MoveData("みずでっぽう", 25);
movelist[57] = new MoveData("ハイドロポンプ", 5);
movelist[58] = new MoveData("なみのり", 15);
movelist[59] = new MoveData("れいとうビーム", 10);
movelist[60] = new MoveData("ふぶき", 5);
movelist[61] = new MoveData("サイケこうせん", 20);
movelist[62] = new MoveData("バブルこうせん", 20);
movelist[63] = new MoveData("オーロラビーム", 20);
movelist[64] = new MoveData("はかいこうせん", 5);
movelist[65] = new MoveData("つつく", 35);
movelist[66] = new MoveData("ドリルくちばし", 20);
movelist[67] = new MoveData("じごくぐるま", 25);
movelist[68] = new MoveData("けたぐり", 20);
movelist[69] = new MoveData("カウンター", 20);
movelist[70] = new MoveData("ちきゅうなげ", 20);
movelist[71] = new MoveData("かいりき", 15);
movelist[72] = new MoveData("すいとる", 20);
movelist[73] = new MoveData("メガドレイン", 10);
movelist[74] = new MoveData("やどりぎのタネ", 10);
movelist[75] = new MoveData("せいちょう", 40);
movelist[76] = new MoveData("はっぱカッター", 25);
movelist[77] = new MoveData("ソーラービーム", 10);
movelist[78] = new MoveData("どくのこな", 35);
movelist[79] = new MoveData("しびれごな", 30);
movelist[80] = new MoveData("ねむりごな", 15);
movelist[81] = new MoveData("はなびらのまい", 20);
movelist[82] = new MoveData("いとをはく", 40);
movelist[83] = new MoveData("りゅうのいかり", 10);
movelist[84] = new MoveData("ほのおのうず", 15);
movelist[85] = new MoveData("でんきショック", 30);
movelist[86] = new MoveData("10まんボルト", 15);
movelist[87] = new MoveData("でんじは", 20);
movelist[88] = new MoveData("かみなり", 10);
movelist[89] = new MoveData("いわおとし", 15);
movelist[90] = new MoveData("じしん", 10);
movelist[91] = new MoveData("じわれ", 5);
movelist[92] = new MoveData("あなをほる", 10);
movelist[93] = new MoveData("どくどく", 10);
movelist[94] = new MoveData("ねんりき", 25);
movelist[95] = new MoveData("サイコキネシス", 10);
movelist[96] = new MoveData("さいみんじゅつ", 20);
movelist[97] = new MoveData("ヨガのポーズ", 40);
movelist[98] = new MoveData("こうそくいどう", 30);
movelist[99] = new MoveData("でんこうせっか", 30);
movelist[100] = new MoveData("いかり", 20);
movelist[101] = new MoveData("テレポート", 20);
movelist[102] = new MoveData("ナイトヘッド", 15);
movelist[103] = new MoveData("ものまね", 10);
movelist[104] = new MoveData("いやなおと", 40);
movelist[105] = new MoveData("かげぶんしん", 15);
movelist[106] = new MoveData("じこさいせい", 20);
movelist[107] = new MoveData("かたくなる", 30);
movelist[108] = new MoveData("ちいさくなる", 20);
movelist[109] = new MoveData("えんまく", 20);
movelist[110] = new MoveData("あやしいひかり", 15);
movelist[111] = new MoveData("からにこもる", 40);
movelist[112] = new MoveData("まるくなる", 40);
movelist[113] = new MoveData("バリアー", 30);
movelist[114] = new MoveData("ひかりのかべ", 30);
movelist[115] = new MoveData("くろいきり", 30);
movelist[116] = new MoveData("リフレクター", 20);
movelist[117] = new MoveData("きあいだめ", 30);
movelist[118] = new MoveData("がまん", 10);
movelist[119] = new MoveData("ゆびをふる", 10);
movelist[120] = new MoveData("オウムがえし", 20);
movelist[121] = new MoveData("じばく", 5);
movelist[122] = new MoveData("タマゴばくだん", 10);
movelist[123] = new MoveData("したでなめる", 30);
movelist[124] = new MoveData("スモッグ", 20);
movelist[125] = new MoveData("ヘドロこうげき", 20);
movelist[126] = new MoveData("ホネこんぼう", 20);
movelist[127] = new MoveData("だいもんじ", 5);
movelist[128] = new MoveData("たきのぼり", 15);
movelist[129] = new MoveData("からではさむ", 10);
movelist[130] = new MoveData("スピードスター", 20);
movelist[131] = new MoveData("ロケットずつき", 15);
movelist[132] = new MoveData("とげキャノン", 15);
movelist[133] = new MoveData("からみつく", 35);
movelist[134] = new MoveData("ドわすれ", 20);
movelist[135] = new MoveData("スプーンまげ", 15);
movelist[136] = new MoveData("タマゴうみ", 10);
movelist[137] = new MoveData("とびひざげり", 20);
movelist[138] = new MoveData("へびにらみ", 30);
movelist[139] = new MoveData("ゆめくい", 15);
movelist[140] = new MoveData("どくガス", 40);
movelist[141] = new MoveData("たまなげ", 20);
movelist[142] = new MoveData("きゅうけつ", 15);
movelist[143] = new MoveData("あくまのキッス", 10);
movelist[144] = new MoveData("ゴッドバード", 5);
movelist[145] = new MoveData("へんしん", 10);
movelist[146] = new MoveData("あわ", 30);
movelist[147] = new MoveData("ピヨピヨパンチ", 10);
movelist[148] = new MoveData("キノコのほうし", 15);
movelist[149] = new MoveData("フラッシュ", 20);
movelist[150] = new MoveData("サイコウェーブ", 15);
movelist[151] = new MoveData("はねる", 40);
movelist[152] = new MoveData("とける", 40);
movelist[153] = new MoveData("クラブハンマー", 10);
movelist[154] = new MoveData("だいばくはつ", 5);
movelist[155] = new MoveData("みだれひっかき", 15);
movelist[156] = new MoveData("ホネブーメラン", 10);
movelist[157] = new MoveData("ねむる", 10);
movelist[158] = new MoveData("いわなだれ", 10);
movelist[159] = new MoveData("ひっさつまえば", 15);
movelist[160] = new MoveData("かくばる", 30);
movelist[161] = new MoveData("テクスチャー", 30);
movelist[162] = new MoveData("トライアタック", 10);
movelist[163] = new MoveData("いかりのまえば", 10);
movelist[164] = new MoveData("きりさく", 20);
movelist[165] = new MoveData("みがわり", 10);
movelist[166] = new MoveData("わるあがき", -1);
movelist[167] = new MoveData("スケッチ", 1);
movelist[168] = new MoveData("トリプルキック", 10);
movelist[169] = new MoveData("どろぼう", 10);
movelist[170] = new MoveData("クモのす", 15);
movelist[171] = new MoveData("こころのめ", 5);
movelist[172] = new MoveData("あくむ", 15);
movelist[173] = new MoveData("かえんぐるま", 25);
movelist[174] = new MoveData("いびき", 15);
movelist[175] = new MoveData("のろい", 10);
movelist[176] = new MoveData("じたばた", 15);
movelist[177] = new MoveData("テクスチャー2", 30);
movelist[178] = new MoveData("エアロブラスト", 5);
movelist[179] = new MoveData("わたほうし", 40);
movelist[180] = new MoveData("きしかいせい", 15);
movelist[181] = new MoveData("うらみ", 10);
movelist[182] = new MoveData("こなゆき", 25);
movelist[183] = new MoveData("まもる", 10);
movelist[184] = new MoveData("マッハパンチ", 30);
movelist[185] = new MoveData("こわいかお", 10);
movelist[186] = new MoveData("だましうち", 20);
movelist[187] = new MoveData("てんしのキッス", 10);
movelist[188] = new MoveData("はらだいこ", 10);
movelist[189] = new MoveData("ヘドロばくだん", 10);
movelist[190] = new MoveData("どろかけ", 10);
movelist[191] = new MoveData("オクタンほう", 10);
movelist[192] = new MoveData("まきびし", 20);
movelist[193] = new MoveData("でんじほう", 5);
movelist[194] = new MoveData("みやぶる", 40);
movelist[195] = new MoveData("みちづれ", 5);
movelist[196] = new MoveData("ほろびのうた", 5);
movelist[197] = new MoveData("こごえるかぜ", 15);
movelist[198] = new MoveData("みきり", 5);
movelist[199] = new MoveData("ボーンラッシュ", 10);
movelist[200] = new MoveData("ロックオン", 5);
movelist[201] = new MoveData("げきりん", 15);
movelist[202] = new MoveData("すなあらし", 10);
movelist[203] = new MoveData("ギガドレイン", 5);
movelist[204] = new MoveData("こらえる", 10);
movelist[205] = new MoveData("あまえる", 20);
movelist[206] = new MoveData("ころがる", 20);
movelist[207] = new MoveData("みねうち", 40);
movelist[208] = new MoveData("いばる", 10);
movelist[209] = new MoveData("ミルクのみ", 10);
movelist[210] = new MoveData("スパーク", 20);
movelist[211] = new MoveData("れんぞくぎり", 20);
movelist[212] = new MoveData("はがねのつばさ", 25);
movelist[213] = new MoveData("くろいまなざし", 5);
movelist[214] = new MoveData("メロメロ", 15);
movelist[215] = new MoveData("ねごと", 10);
movelist[216] = new MoveData("いやしのすず", 5);
movelist[217] = new MoveData("おんがえし", 20);
movelist[218] = new MoveData("プレゼント", 15);
movelist[219] = new MoveData("やつあたり", 20);
movelist[220] = new MoveData("しんぴのまもり", 25);
movelist[221] = new MoveData("いたみわけ", 20);
movelist[222] = new MoveData("せいなるほのお", 5);
movelist[223] = new MoveData("マグニチュード", 30);
movelist[224] = new MoveData("ばくれつパンチ", 5);
movelist[225] = new MoveData("メガホーン", 10);
movelist[226] = new MoveData("りゅうのいぶき", 20);
movelist[227] = new MoveData("バトンタッチ", 40);
movelist[228] = new MoveData("アンコール", 5);
movelist[229] = new MoveData("おいうち", 20);
movelist[230] = new MoveData("こうそくスピン", 40);
movelist[231] = new MoveData("あまいかおり", 20);
movelist[232] = new MoveData("アイアンテール", 15);
movelist[233] = new MoveData("メタルクロー", 30);
movelist[234] = new MoveData("あてみなげ", 10);
movelist[235] = new MoveData("あさのひざし", 5);
movelist[236] = new MoveData("こうごうせい", 5);
movelist[237] = new MoveData("つきのひかり", 5);
movelist[238] = new MoveData("めざめるパワー", 15);
movelist[239] = new MoveData("クロスチョップ", 5);
movelist[240] = new MoveData("たつまき", 20);
movelist[241] = new MoveData("あまごい", 5);
movelist[242] = new MoveData("にほんばれ", 5);
movelist[243] = new MoveData("かみくだく", 15);
movelist[244] = new MoveData("ミラーコート", 20);
movelist[245] = new MoveData("じこあんじ", 10);
movelist[246] = new MoveData("しんそく", 5);
movelist[247] = new MoveData("げんしのちから", 5);
movelist[248] = new MoveData("シャドーボール", 15);
movelist[249] = new MoveData("みらいよち", 15);
movelist[250] = new MoveData("いわくだき", 15);
movelist[251] = new MoveData("うずしお", 15);
movelist[252] = new MoveData("ふくろだたき", 10);
function ItemData(name, effective) {
this.name = name;
this.effective = effective;
}
var itemlist = new Array;
itemlist[0] = new ItemData("", false);
itemlist[2] = new ItemData("マスターボール", false);
itemlist[3] = new ItemData("ハイパーボール", false);
itemlist[4] = new ItemData("ひかりのこな", true);
itemlist[5] = new ItemData("スーパーボール", false);
itemlist[6] = new ItemData("モンスターボール", false);
itemlist[7] = new ItemData("カビチュウ", false);
itemlist[8] = new ItemData("じてんしゃ", false);
itemlist[9] = new ItemData("つきのいし", false);
itemlist[10] = new ItemData("どくけし", false);
itemlist[11] = new ItemData("やけどなおし", false);
itemlist[12] = new ItemData("こおりなおし", false);
itemlist[13] = new ItemData("ねむけざまし", false);
itemlist[14] = new ItemData("まひなおし", false);
itemlist[15] = new ItemData("かいふくのくすり", false);
itemlist[16] = new ItemData("まんたんのくすり", false);
itemlist[17] = new ItemData("すごいキズぐすり", false);
itemlist[18] = new ItemData("いいキズぐすり", false);
itemlist[19] = new ItemData("キズぐすり", false);
itemlist[20] = new ItemData("あなぬけのヒモ", false);
itemlist[21] = new ItemData("むしよけスプレー", false);
itemlist[22] = new ItemData("ピーピーマックス", false);
itemlist[23] = new ItemData("ほのおのいし", false);
itemlist[24] = new ItemData("かみなりのいし", false);
itemlist[25] = new ItemData("みずのいし", false);
itemlist[27] = new ItemData("マックスアップ", false);
itemlist[28] = new ItemData("タウリン", false);
itemlist[29] = new ItemData("ブロムヘキシン", false);
itemlist[30] = new ItemData("インドメタシン", false);
itemlist[31] = new ItemData("ラッキーパンチ", false);
itemlist[32] = new ItemData("リゾチウム", false);
itemlist[33] = new ItemData("ふしぎなアメ", false);
itemlist[34] = new ItemData("ヨクアタール", false);
itemlist[35] = new ItemData("リーフのいし", false);
itemlist[36] = new ItemData("メタルパウダー", true);
itemlist[37] = new ItemData("きんのたま", false);
itemlist[38] = new ItemData("ピッピにんぎょう", false);
itemlist[39] = new ItemData("なんでもなおし", false);
itemlist[40] = new ItemData("げんきのかけら", false);
itemlist[41] = new ItemData("げんきのかたまり", false);
itemlist[42] = new ItemData("エフェクトガード", false);
itemlist[43] = new ItemData("シルバースプレー", false);
itemlist[44] = new ItemData("ゴールドスプレー", false);
itemlist[45] = new ItemData("クリティカッター", false);
itemlist[47] = new ItemData("おいしいみず", false);
itemlist[48] = new ItemData("サイコソーダ", false);
itemlist[49] = new ItemData("ミックスオレ", false);
itemlist[50] = new ItemData("プラスパワー", false);
itemlist[52] = new ItemData("ディフェンダー", false);
itemlist[53] = new ItemData("スピーダー", false);
itemlist[54] = new ItemData("スペシャルアップ", false);
itemlist[55] = new ItemData("コインケース", false);
itemlist[56] = new ItemData("ダウジングマシン", false);
itemlist[58] = new ItemData("がくしゅうそうち", false);
itemlist[59] = new ItemData("ぼろのつりざお", false);
itemlist[60] = new ItemData("いいつりざお", false);
itemlist[61] = new ItemData("ぎんのはっぱ", false);
itemlist[62] = new ItemData("すごいつりざお", false);
itemlist[63] = new ItemData("ポイントアップ", false);
itemlist[64] = new ItemData("ピーピーエイド", false);
itemlist[65] = new ItemData("ピーピーリカバー", false);
itemlist[66] = new ItemData("ピーピーエイダー", false);
itemlist[67] = new ItemData("あかいウロコ", false);
itemlist[68] = new ItemData("ひでんのくすり", false);
itemlist[69] = new ItemData("ふねのチケット", false);
itemlist[70] = new ItemData("ふしぎなタマゴ", false);
itemlist[72] = new ItemData("ぎんいろのはね", false);
itemlist[73] = new ItemData("モーモーミルク", false);
itemlist[74] = new ItemData("せんせいのツメ", true);
itemlist[75] = new ItemData("どくけしのみ", true);
itemlist[76] = new ItemData("きんのはっぱ", false);
itemlist[77] = new ItemData("やわらかいすな", true);
itemlist[78] = new ItemData("するどいくちばし", true);
itemlist[79] = new ItemData("まひなおしのみ", true);
itemlist[80] = new ItemData("やけたきのみ", true);
itemlist[81] = new ItemData("こおったきのみ", true);
itemlist[82] = new ItemData("どくバリ", true);
itemlist[83] = new ItemData("おうじゃのしるし", true);
itemlist[84] = new ItemData("にがいきのみ", true);
itemlist[85] = new ItemData("はっかのみ", true);
itemlist[86] = new ItemData("あかぼんぐり", false);
itemlist[87] = new ItemData("ちいさなキノコ", false);
itemlist[88] = new ItemData("おおきなキノコ", false);
itemlist[89] = new ItemData("ぎんのこな", true);
itemlist[90] = new ItemData("あおぼんぐり", false);
itemlist[92] = new ItemData("おまもりこばん", false);
itemlist[93] = new ItemData("きぼんぐり", false);
itemlist[94] = new ItemData("みどぼんぐり", false);
itemlist[95] = new ItemData("きよめのおふだ", false);
itemlist[96] = new ItemData("しんぴのしずく", true);
itemlist[97] = new ItemData("まがったスプーン", true);
itemlist[98] = new ItemData("しろぼんぐり", false);
itemlist[99] = new ItemData("くろおび", true);
itemlist[100] = new ItemData("くろぼんぐり", false);
itemlist[102] = new ItemData("ももぼんぐり", false);
itemlist[103] = new ItemData("くろいめがね", true);
itemlist[104] = new ItemData("おいしいシッポ", false);
itemlist[105] = new ItemData("ピンクのリボン", true);
itemlist[106] = new ItemData("ながねぎ", true);
itemlist[107] = new ItemData("けむりだま", false);
itemlist[108] = new ItemData("とけないこおり", true);
itemlist[109] = new ItemData("じしゃく", true);
itemlist[110] = new ItemData("きせきのみ", true);
itemlist[111] = new ItemData("しんじゅ", false);
itemlist[112] = new ItemData("おおきなしんじゅ", false);
itemlist[113] = new ItemData("かわらずのいし", false);
itemlist[114] = new ItemData("のろいのおふだ", true);
itemlist[115] = new ItemData("いかりまんじゅう", false);
itemlist[118] = new ItemData("きせきのタネ", true);
itemlist[119] = new ItemData("ふといホネ", true);
itemlist[120] = new ItemData("きあいのハチマキ", true);
itemlist[122] = new ItemData("ちからのこな", false);
itemlist[123] = new ItemData("ちからねっこ", false);
itemlist[124] = new ItemData("ばんのうごな", false);
itemlist[125] = new ItemData("ふっかつそう", false);
itemlist[126] = new ItemData("かたいいし", true);
itemlist[127] = new ItemData("しあわせタマゴ", false);
itemlist[128] = new ItemData("カードキー", false);
itemlist[129] = new ItemData("きかいのぶひん", false);
itemlist[131] = new ItemData("おとしもの", false);
itemlist[132] = new ItemData("ほしのすな", false);
itemlist[133] = new ItemData("ほしのかけら", false);
itemlist[134] = new ItemData("ちかのカギ", false);
itemlist[135] = new ItemData("ていきけん", false);
itemlist[139] = new ItemData("もくたん", true);
itemlist[140] = new ItemData("きのみジュース", true);
itemlist[141] = new ItemData("ピントレンズ", true);
itemlist[144] = new ItemData("メタルコート", true);
itemlist[145] = new ItemData("りゅうのキバ", false);
itemlist[147] = new ItemData("たべのこし", true);
itemlist[151] = new ItemData("ふしぎなきのみ", true);
itemlist[152] = new ItemData("りゅうのウロコ", true);
itemlist[153] = new ItemData("はかいのいでんし", true);
itemlist[157] = new ItemData("せいなるはい", false);
itemlist[158] = new ItemData("ヘビーボール", false);
itemlist[159] = new ItemData("はながらメール", false);
itemlist[160] = new ItemData("レベルボール", false);
itemlist[161] = new ItemData("ルアーボール", false);
itemlist[162] = new ItemData("スピードボール", false);
itemlist[164] = new ItemData("でんきだま", true);
itemlist[165] = new ItemData("フレンドボール", false);
itemlist[166] = new ItemData("ムーンボール", false);
itemlist[167] = new ItemData("ラブラブボール", false);
itemlist[168] = new ItemData("きのはこ", false);
itemlist[169] = new ItemData("きりのはこ", false);
itemlist[170] = new ItemData("たいようのいし", false);
itemlist[171] = new ItemData("みずたまリボン", true);
itemlist[173] = new ItemData("アップグレード", false);
itemlist[174] = new ItemData("きのみ", true);
itemlist[175] = new ItemData("おうごんのみ", true);
itemlist[176] = new ItemData("ゼニガメじょうろ", false);
itemlist[178] = new ItemData("パークボール", false);
itemlist[179] = new ItemData("にじいろのはね", false);
itemlist[181] = new ItemData("かわらのかけら", false);
itemlist[182] = new ItemData("なみのりメール", false);
itemlist[183] = new ItemData("みずいろメール", false);
itemlist[184] = new ItemData("にがおえメール", false);
itemlist[185] = new ItemData("ラブリーメール", false);
itemlist[186] = new ItemData("ブイブイメール", false);
itemlist[187] = new ItemData("へんしんメール", false);
itemlist[188] = new ItemData("あおぞらメール", false);
itemlist[189] = new ItemData("おんぷメール", false);
itemlist[190] = new ItemData("まぼろしメール", false);
itemlist[192] = new ItemData("わざましん01", false);
itemlist[193] = new ItemData("わざましん02", false);
itemlist[194] = new ItemData("わざましん03", false);
itemlist[195] = new ItemData("わざましん04", false);
itemlist[197] = new ItemData("わざましん05", false);
itemlist[198] = new ItemData("わざましん06", false);
itemlist[199] = new ItemData("わざましん07", false);
itemlist[200] = new ItemData("わざましん08", false);
itemlist[201] = new ItemData("わざましん09", false);
itemlist[202] = new ItemData("わざましん10", false);
itemlist[203] = new ItemData("わざましん11", false);
itemlist[204] = new ItemData("わざましん12", false);
itemlist[205] = new ItemData("わざましん13", false);
itemlist[206] = new ItemData("わざましん14", false);
itemlist[207] = new ItemData("わざましん15", false);
itemlist[208] = new ItemData("わざましん16", false);
itemlist[209] = new ItemData("わざましん17", false);
itemlist[210] = new ItemData("わざましん18", false);
itemlist[211] = new ItemData("わざましん19", false);
itemlist[212] = new ItemData("わざましん20", false);
itemlist[213] = new ItemData("わざましん21", false);
itemlist[214] = new ItemData("わざましん22", false);
itemlist[215] = new ItemData("わざましん23", false);
itemlist[216] = new ItemData("わざましん24", false);
itemlist[217] = new ItemData("わざましん25", false);
itemlist[218] = new ItemData("わざましん26", false);
itemlist[219] = new ItemData("わざましん27", false);
itemlist[220] = new ItemData("わざましん28", false);
itemlist[222] = new ItemData("わざましん29", false);
itemlist[223] = new ItemData("わざましん30", false);
itemlist[224] = new ItemData("わざましん31", false);
itemlist[227] = new ItemData("わざましん50", false);
itemlist[228] = new ItemData("ひでんましん01", false);
itemlist[229] = new ItemData("ひでんましん02", false);
itemlist[230] = new ItemData("ひでんましん03", false);
itemlist[231] = new ItemData("ひでんましん04", false);
itemlist[232] = new ItemData("ひでんましん05", false);
itemlist[233] = new ItemData("ひでんましん06", false);
itemlist[234] = new ItemData("ひでんましん07", false);
var effectiveItems = [];
(function() {
for (var i in itemlist) {
var s = itemlist[i];
s.effective && (effectiveItems[i] = s);
}
})();
// --- Roma ---
function roma(str) {
var re = /(([b-df-hj-mp-tv-z])\2*(?=\2))|((?:[b-df-hj-np-tv-z]|[cw]h|[b-df-hj-npr-tvxz]y|[bdgkmpstz][hw]|ts|)[aiueo]|[-0-9])|(xts?u)|(nn?)/gi;
function f(sub, gs1, _, s, gs2, sn) {
if (gs1) {
if (gs1.length == 1) {
return "[っッ]";
}
else {
return "[っッ]{" + gs1.length + "}";
}
}
else if (s) {
return roma.table[s];
}
else if (gs2) {
return "[っッ]";
}
else if (sn) {
return "[んン]";
}
else {
throw new Error("implementation error! " + sub);
}
}
return str.replace(re, f);
}
roma.table = {
a: "[あア]", i: "[いイ]", u: "[うウ]", e: "[えエ]", o: "[おオ]",
ba: "[ばバ]", bi: "[びビ]", bu: "[ぶブ]", be: "[べベ]", bo: "[ぼボ]",
bya: "[びビ][ゃャ]", byi: "[びビ][ぃィ]", byu: "[びビ][ゅュ]", bye: "[びビ][ぇェ]", byo: "[びビ][ょョ]",
bha: "[ばバ][ぁァ]", bhi: "[ばバ][ぃィ]", bhu: "[ばバ][ぅゥ]", bhe: "[ばバ][ぃィ]", bho: "[ばバ][ぃィ]",
bwa: "[びビ][ゎヮ]", bwi: "[びビ][ぃィ]", bwu: "[びビ][ぅゥ]", bwe: "[びビ][ぇェ]", bwo: "[びビ][ぉォ]",
ca: "[かカ]", ci: "[しシ]", cu: "[くク]", ce: "[せセ]", co: "[こコ]",
cya: "[ちチ][ゃャ]", cyi: "[ちチ][ぃィ]", cyu: "[ちチ][ゅュ]", cye: "[ちチ][ぇェ]", cyo: "[ちチ][ょョ]",
cha: "[ちチ][ゃャ]", chi: "[ちチ]", chu: "[ちチ][ゅュ]", che: "[ちチ][ぇェ]", cho: "[ちチ][ょョ]",
da: "[だダ]", di: "[ぢヂ]", du: "[づヅ]", de: "[でデ]", "do": "[どド]",
dya: "[ぢヂ][ゃャ]", dyi: "[ぢヂ][ぃィ]", dyu: "[ぢヂ][ゅュ]", dye: "[ぢヂ][ぇェ]", dyo: "[ぢヂ][ょョ]",
dha: "[でデ][ゃャ]", dhi: "[でデ][ぃィ]", dhu: "[でデ][ゅュ]", dhe: "[でデ][ぇェ]", dho: "[でデ][ょョ]",
dwa: "[どド][ぁァ]", dwi: "[どド][ぃィ]", dwu: "[どド][ぅゥ]", dwe: "[どド][ぇェ]", dwo: "[どド][ぉォ]",
fa: "[ふフ][ぁァ]", fi: "[ふフ][ぃィ]", fu: "[ふフ]", fe: "[ふフ][ぇェ]", fo: "[ふフ][ぉォ]",
fya: "[ふフ][ゃャ]", fyi: "[ふフ][ぃィ]", fyu: "[ふフ][ゅュ]", fye: "[ふフ][ぇェ]", fyo: "[ふフ][ょョ]",
ga: "[がガ]", gi: "[ぎギ]", gu: "[ぐグ]", ge: "[げゲ]", go: "[ごゴ]",
gya: "[ぎギ][ゃャ]", gyi: "[ぎギ][ぃィ]", gyu: "[ぎギ][ゅュ]", gye: "[ぎギ][ぇェ]", gyo: "[ぎギ][ょョ]",
gha: "[ぐグ][ぁァ]", ghi: "[ぐグ][ぃィ]", ghu: "[ぐグ][ぅゥ]", ghe: "[ぐグ][ぇェ]", gho: "[ぐグ][ぉォ]",
gwa: "[ぐグ][ぁァ]", gwi: "[ぐグ][ぃィ]", gwu: "[ぐグ][ぅゥ]", gwe: "[ぐグ][ぇェ]", gwo: "[ぐグ][ぉォ]",
ha: "[はハ]", hi: "[ひヒ]", hu: "[ふフ]", he: "[へヘ]", ho: "[ほホ]",
hya: "[ひヒ][ゃャ]", hyi: "[ひヒ][ぃィ]", hyu: "[ひヒ][ゅュ]", hye: "[ひヒ][ぇェ]", hyo: "[ひヒ][ょョ]",
ja: "[じジ][ゃャ]", ji: "[じジ]", ju: "[じジ][ゅュ]", je: "[じジ][ぇェ]", jo: "[じジ][ょョ]",
jya: "[じジ][ゃャ]", jyi: "[じジ][ぃィ]", jyu: "[じジ][ゅュ]", jye: "[じジ][ぇェ]", jyo: "[じジ][ょョ]",
ka: "[かカ]", ki: "[きキ]", ku: "[くク]", ke: "[けケ]", ko: "[こコ]",
kya: "[きキ][ゃャ]", kyi: "[きキ][ぃィ]", kyu: "[きキ][ゅュ]", kye: "[きキ][ぇェ]", kyo: "[きキ][ょョ]",
kha: "[くク][ぁァ]", khi: "[くク][ぃィ]", khu: "[くク][ぅゥ]", khe: "[くク][ぇェ]", kho: "[くク][ぉォ]",
kwa: "[くク][ぁァ]", kwi: "[くク][ぃィ]", kwu: "[くク][ぅゥ]", kwe: "[くク][ぇェ]", kwo: "[くク][ぉォ]",
la: "[らラ]", li: "[りリ]", lu: "[るル]", le: "[れレ]", lo: "[ろロ]",
lya: "[りリ][ゃャ]", lyi: "[りリ][ぃィ]", lyu: "[りリ][ゅュ]", lye: "[りリ][ぇェ]", lyo: "[りリ][ょョ]",
ma: "[まマ]", mi: "[みミ]", mu: "[むム]", me: "[めメ]", mo: "[もモ]",
mya: "[みミ][ゃャ]", myi: "[みミ][ぃィ]", myu: "[みミ][ゅュ]", mye: "[みミ][ぇェ]", myo: "[みミ][ょョ]",
mha: "[むム][ぁァ]", mhi: "[むム][ぃィ]", mhu: "[むム][ぅゥ]", mhe: "[むム][ぇェ]", mho: "[むム][ぉォ]",
mwa: "[むム][ゎヮ]", mwi: "[むム][ぃィ]", mwu: "[むム][ぅゥ]", mwe: "[むム][ぇェ]", mwo: "[むム][ぉォ]",
na: "[なナ]", ni: "[にニ]", nu: "[ぬヌ]", ne: "[ねネ]", no: "[のノ]",
nya: "[にニ][ゃャ]", nyi: "[にニ][ぃィ]", nyu: "[にニ][ゅュ]", nye: "[にニ][ぇェ]", nyo: "[にニ][ょョ]",
pa: "[ぱパ]", pi: "[ぴピ]", pu: "[ぷプ]", pe: "[ぺペ]", po: "[ぽポ]",
pya: "[ぴピ][ゃャ]", pyi: "[ぴピ][ぃィ]", pyu: "[ぴピ][ゅュ]", pye: "[ぴピ][ぇェ]", pyo: "[ぴピ][ょョ]",
pha: "[ぷプ][ぁァ]", phi: "[ぷプ][ぃィ]", phu: "[ぷプ][ぅゥ]", phe: "[ぷプ][ぇェ]", pho: "[ぷプ][ぉォ]",
pwa: "[ぷプ][ゎヮ]", pwi: "[ぷプ][ぃィ]", pwu: "[ぷプ][ぅゥ]", pwe: "[ぷプ][ぇェ]", pwo: "[ぷプ][ぉォ]",
qa: "[くク][ぁァ]", qi: "[くク][ぃィ]", qu: "[くク][ぅゥ]", qe: "[くク][ぇェ]", qo: "[くク][ぉォ]",
ra: "[らラ]", ri: "[りリ]", ru: "[るル]", re: "[れレ]", ro: "[ろロ]",
rya: "[りリ][ゃャ]", ryi: "[りリ][ぃィ]", ryu: "[りリ][ゅュ]", rye: "[りリ][ぇェ]", ryo: "[りリ][ょョ]",
sa: "[さサ]", si: "[しシ]", su: "[すス]", se: "[せセ]", so: "[そソ]",
sya: "[しシ][ゃャ]", syi: "[しシ][ぃィ]", syu: "[しシ][ゅュ]", sye: "[しシ][ぇェ]", syo: "[しシ][ょョ]",
sha: "[しシ][ゃャ]", shi: "[しシ]", shu: "[しシ][ゅュ]", she: "[しシ][ぇェ]", sho: "[しシ][ょョ]",
swa: "[すス][ぁァ]", swi: "[すス][ぃィ]", swu: "[すス][ぅゥ]", swe: "[すス][ぇェ]", swo: "[すス][ぉォ]",
ta: "[たタ]", ti: "[ちチ]", tu: "[つツ]", te: "[てテ]", to: "[とト]",
tya: "[ちチ][ゃャ]", tyi: "[ちチ][ぃィ]", tyu: "[ちチ][ゅュ]", tye: "[ちチ][ぇェ]", tyo: "[ちチ][ょョ]",
tha: "[てテ][ゃャ]", thi: "[てテ][ぃィ]", thu: "[てテ][ゅュ]", the: "[てテ][ぇェ]", tho: "[てテ][ょョ]",
twa: "[とト][ぁァ]", twi: "[とト][ぃィ]", twu: "[とト][ぅゥ]", twe: "[とト][ぇェ]", two: "[とト][ぉォ]",
va: "[ゔヴ][ぁァ]", vi: "[ゔヴ][ぃィ]", vu: "[ゔヴ]", ve: "[ゔヴ][ぇェ]", vo: "[ゔヴ][ぉォ]",
vya: "[ゔヴ][ゃャ]", vyi: "[ゔヴ][ぃィ]", vyu: "[ゔヴ][ゅュ]", vye: "[ゔヴ][ぇェ]", vyo: "[ゔヴ][ょョ]",
wa: "[わワ]", wi: "[うウ][ぃィ]", wu: "[うウ]", we: "[うウ][ぇェ]", wo: "[をヲ]", wyi: "[ゐヰ]", wye: "[ゑヱ]",
wha: "[うウ][ぁァ]", whi: "[うウ][ぃィ]", whu: "[うウ]", whe: "[うウ][ぇェ]", who: "[うウ][ぉォ]",
xa: "[ぁァ]", xi: "[ぃィ]", xu: "[ぅゥ]", xe: "[ぇェ]", xo: "[ぉォ]",
xya: "[ゃャ]", xyi: "[ぃィ]", xyu: "[ゅュ]", xye: "[ぇェ]", xyo: "[ょョ]",
ya: "[やヤ]", yi: "[いイ]", yu: "[ゆユ]", ye: "[いイ][ぇェ]", yo: "[よヨ]",
za: "[ざザ]", zi: "[じジ]", zu: "[ずズ]", ze: "[ぜゼ]", zo: "[ぞゾ]",
zya: "[じジ][ゃャ]", zyi: "[じジ][ぃィ]", zyu: "[じジ][ゅュ]", zye: "[じジ][ぇェ]", zyo: "[じジ][ょョ]",
zha: "[ずズ][ぁァ]", zhi: "[ずズ][ぃィ]", zhu: "[ずズ][ぅゥ]", zhe: "[ずズ][ぇェ]", zho: "[ずズ][ぉォ]",
zwa: "[ずズ][ゎヮ]", zwi: "[ずズ][ぃィ]", zwu: "[ずズ][ぅゥ]", zwe: "[ずズ][ぇェ]", zwo: "[ずズ][ぉォ]",
tsa: "[つツ][ぁァ]", tsi: "[つツ][ぃィ]", tsu: "[つツ]", tse: "[つツ][ぇェ]", tso: "[つツ][ぉォ]",
0: "0", 1: "1", 2: "2", 3: "3", 4: "4", 5: "5", 6: "6", 7: "7", 8: "8", 9: "9", "-": "ー"
};
// --- DoubleLinkedHashMap ---
function DoubleLinkedHashMapEntry(value, key, next, prev) {
this.value = value;
this.key = key;
this.next = next || this;
this.prev = prev || this;
}
function DoubleLinkedHashMap () {
this.table = {};
this.table.__proto__ = null;
this.pos = null;
}
DoubleLinkedHashMap.prototype.noEmpty = function() {
if (!this.pos) {
throw new Error("No empty HashMap");
}
};
DoubleLinkedHashMap.prototype.next = function() {
this.noEmpty();
return this.pos.next.value;
};
DoubleLinkedHashMap.prototype.previous = function() {
this.noEmpty();
return this.pos.prev.value;
};
DoubleLinkedHashMap.prototype.get = function (k) {
var entry = this.table[k];
return entry && entry.value;
};
DoubleLinkedHashMap.prototype.getHead = function () {
this.noEmpty();
return this.pos.value;
};
DoubleLinkedHashMap.prototype.setHead = function (k) {
var entry = this.table[k];
if (entry) {
this.pos = entry;
}
else {
throw new Error("Key not found: " + k);
}
};
DoubleLinkedHashMap.prototype.push = function (k, v) {
var entry;
if (this.table[k]) {
throw new Error("Already exist key: " + k);
}
if (this.pos) {
entry = new DoubleLinkedHashMapEntry(v, k, this.pos, this.pos.prev);
entry.next.prev = entry;
entry.prev.next = entry;
}
else {
entry = new DoubleLinkedHashMapEntry(v, k);
}
this.pos = this.table[k] = entry;
};
DoubleLinkedHashMap.prototype.pushBack = function (k, v) {
this.push(k, v);
this.pos = this.pos.next;
};
DoubleLinkedHashMap.prototype.remove = function(k) {
var entry = this.table[k];
if (entry) {
if (entry.next == entry) {
this.pos = null;
}
else {
if (this.pos == entry) {
this.pos = entry.next;
}
entry.next.prev = entry.prev;
entry.prev.next = entry.next;
}
delete this.table[k];
}
else {
throw new Error("Key not found: " + k);
}
};
DoubleLinkedHashMap.prototype.forEach = function(f) {
var start = this.pos;
if (start) {
var entry = start;
do {
f(entry.value, entry.key);
entry = entry.next;
} while (!(entry == start));
}
};
DoubleLinkedHashMap.prototype.some = function(f) {
var start = this.pos;
if (start) {
var entry = start;
do {
if (f(entry.value, entry.key)) {
return true;
};
entry = entry.next;
} while (!(entry == start));
return false;
}
else {
return true;
}
};
DoubleLinkedHashMap.prototype.map = function (f) {
var res = [];
this.forEach(function (v, k) { res.push(f(v, k)); });
return res;
};
DoubleLinkedHashMap.prototype.toString = function() {
return "DoubleLinkedHashMap(" + this.map(function (v, k) { return k + ": " + v; }).join(", ") + ")";
};
// --- Error ---
function getBacktrace(er, n) {
return er.stack.replace(/^((?:[$a-zA-Z_][$a-zA-Z0-9_]*)?\(.*\))?@.*:(\d+)$/mg,
function(_, $1, $2) {
return $1 + "@" + ($2 - backtrace.baseLineNumber);
}).split("\n").slice((n || 0));
}
function backtrace(n) {
return getBacktrace(new Error, n + 1);
}
backtrace.baseLineNumber = NaN;
function initializeError() {
backtrace.baseLineNumber = parseInt(/\d+\n$/((new Error).stack)[0]) + 1;
}
function XPDError(message) {
this.name = this.constructor.name;
this.message = message;
var stack = backtrace(1);
var re = RegExp("^" + this.name);
for (var i = 0; i < stack.length; i++) {
if (re.test(stack[i])) {
break;
}
}
this.backtrace = stack.slice(i + 1);
}
XPDError.prototype.__proto__ = Error.prototype;
function ImplementationError(message) {
XPDError.call(this, message);
}
ImplementationError.prototype.__proto__ = XPDError.prototype;
function NoPartyError(no) {
this.no = no;
ImplementationError.call(this, "party " + no + " doesn't exist");
}
NoPartyError.prototype.__proto__ = ImplementationError.prototype;
/*
function NoBufferError(name) {
this.name = name;
ImplementationError.call(this, "buffer " + name + " doesn't exist");
}
NoBufferError.prototype.__proto__ = ImplementationError.prototype;
*/
function UserError(message) {
XPDError.call(this, message);
}
UserError.prototype.__proto__ = XPDError.prototype;
function PartyNotFound(no) {
this.no = no;
UserError.call(this, "パーティ " + no + " はありません.");
}
PartyNotFound.prototype.__proto__ = UserError.prototype;
function BufferNotFound(name) {
this.name = name;
UserError.call(this, "バッファ " + name + " はありません.");
}
BufferNotFound.prototype.__proto__ = UserError.prototype;
function WrongNumberOfPoke() {
UserError.call(this, "ポケモンの数が6匹ではありません");
}
WrongNumberOfPoke.prototype.__proto__ = UserError.prototype;
function InvalidInput(message) {
UserError.call(this, message);
}
InvalidInput.prototype.__proto__ = UserError.prototype;
function InvalidValueOfTextbox(message, textbox) {
InvalidInput.call(this, message);
this.textbox = textbox;
}
InvalidValueOfTextbox.prototype.__proto__ = InvalidInput.prototype;
function HTTPError(message) {
XPDError.call(this, message);
}
HTTPError.prototype.__proto__ = XPDError.prototype;
function BadHTTPResponse(message, response) {
HTTPError.call(this, message + "\nstatus: " + response.status);
this.response = response;
}
BadHTTPResponse.prototype.__proto__ = HTTPError.prototype;
// --- System ---
var initializeHooks = [];
function getNumber() {
return $f.CBAN.value-0;
}
function setNumber(n) {
return $f.CBAN.value = n;
}
function getCookie(n) {
var a = $d.cookie.split(";");
for (var i = 0; i < a.length; i++) {
if (new RegExp("PD" + (n - 1) + "=(.+)").exec(a[i])) {
if (RegExp.$1 == "2") {
return null;
}
return RegExp.$1.slice(4).split("_x_");
}
}
return null;
}
function getCookies() {
var a = $d.cookie.split(";");
var ary = new Array(a.length);
for (var i = 0; i < a.length; i++) {
if (new RegExp("PD(\\d+)" + "=(.+)").exec(a[i])) {
if (RegExp.$2 != "2") {
ary[RegExp.$1] = RegExp.$2.slice(4).split("_x_");
}
}
}
return ary;
}
function setCookie(name, value) {
var expires = (new Date).toGMTString().replace(/\d\d\d\d/, function (s) { return parseInt(s) + 5; });
$d.cookie = name + "=" + value + "; expires=" + expires + ";";
}
function deleteCookie(name) {
$d.cookie = name + "=; expires=" + (new Date((new Date()) - 3600)).toGMTString() + ";";
}
function extendCookiesDeadline(cookie) {
var a = (cookie || $d.cookie).split(";");
a.forEach(function (s) {
var ma = /(.+?)=(.+)/(s);
setCookie(ma[1], ma[2]);
});
}
function Poke() {}
/*PDの形式からポケモンオブジェクトを生成する*/
Poke.fromPD = function(pd_str, force) {
/* format check */
if(!force && !/^(?:\d{1,3}_){2}(?:[0-9a-f]_){4}(?:\d{1,2}_){5}(?:\d{1,3}_){4}(?:\d{1,2}_){4}(?:[0-3]_){4}\d{1,3}_0?_\d{1,3}$/i(pd_str)) {
throw new ImplementationError("wrong pd format: " + pd_str);
}
var a = pd_str.split("_");
var poke = new Poke();
poke.no = a[0];
poke.lv = a[1];
poke.id = [a[2], a[3], a[4], a[5]];
poke.ef = [a[6], a[7], a[8], a[9], a[10]];
poke.mv = [a[11], a[12], a[13], a[14]];
poke.pp = [a[15], a[16], a[17], a[18]];
poke.p_up = [a[19], a[20], a[21], a[22]];
poke.hp = a[23];
poke.item = a[25];
/* validation check */
if (!(pokelist[poke.no] && poke.lv >= 1 && poke.lv <= 100 &&
poke.ef.every(function (i) { return i >= 0 && i <= 63; }) &&
poke.mv.every(function (i) { return movelist[i]; }) &&
poke.p_up.every(function (i) { return i >= 0 && i <= 3; }) &&
itemlist[poke.item])) {
throw new ImplementationError("wrong pd format: " + pd_str);
}
return poke;
};
/*
Poke.prototype.equals = function (that) {
function eq(x, y) {
if (x instanceof Array && y instanceof Array) {
return x.length == y.length && x.every(function (k, i) { return k == y[i]; });
}
else {
return x == y;
}
}
var ary = [];
for (var i in this) { // 手抜き
ary.push(i);
}
return ary.every(function (i) { return eq(this[i], that[i]); });
};*/
var consPoke = function (i) { return Poke.fromPD(i); };
function initLoadParty() {
var pd = $f.PD.value;
var pd_ary = pd ? pd.split("_x_") : getCookie(getNumber());
if (pd_ary.length != 6) {
throw new WrongNumberOfPoke;
}
return pd_ary.map(function (pd_str) { return Poke.fromPD(pd_str, true); });
}
function loadParty(i) {
var pd = $f.PD.value;
var a = i == null ? (pd ? pd.split("_x_") : getCookie(getNumber())) : getCookie(i);
if (a == null) {
throw new NoPartyError(i);
}
if (a.length != 6) {
throw new WrongNumberOfPoke;
}
return a.map(consPoke);
}
function loadParties() {
return getCookies().map(function (i) { return i.map(consPoke); });
}
/*
function partyEquals(x, y) {
return x.length == y.length && y.every(function (poke, i) { return poke.equals(x[i]); });
}
*/
function partyReflectForm(poke) {
var len = getPokeNum();
var form = $f;
for (var i = 0; i < len; i++) {
form["POKE" + i].value = pokelist[poke[i].no].name;
form["LV" + i].value = poke[i].lv;
form["KO" + i].value = poke[i].id.join("");
for (var j = 0; j < 5; j++) {
form["EF" + i + "_" + j].value = poke[i].ef[j];
}
for (j = 0; j < 4; j++) {
form["WAZA" + i + "_" + j].value = movelist[poke[i].mv[j]].name;
}
form["ITEM" + i].value = itemlist[poke[i].item].name;
}
formRefresh();
}
var bufferMap = new DoubleLinkedHashMap;
function Buffer(name, party) {
this.name = name; /* 特殊 */
//this.changed = false; /* 特殊 */
this.party = party; /* バッファローカル */
this.pref = {}; /* バッファローカル */
this.pref.__proto__ = xpd.pref;
this.pd = ""; /* 退避 */
this.form = null; /* 退避 */
}
Buffer.getTexts = function () {
return Array.prototype.filter.call($d.getElementsByTagName("input"),
function (t) { return t.type == "text"; });
};
Buffer.prototype.saveForm = function () {
var texts = Buffer.getTexts();
this.form = texts.map(function (t) { return t.value; });
this.pd = $f.PD.value;
};
Buffer.prototype.restoreForm = function () {
setNumber(this.name);
$f.PD.value = this.pd;
var form = this.form;
if (form) {
var texts = Buffer.getTexts();
texts.forEach(function (t, i) { t.value = form[i]; });
}
else {
partyReflectForm(this.party);
}
drawModeLine();
formRefresh();
};
Buffer.prototype.changes = function() {
//return this.changed || getPD() == getCookie(
if (this == currentBuffer()) this.saveForm();
var n = Number(this.name);
var texts = Buffer.getTexts();
var form = {};
var thisform = this.form;
texts.forEach(function (t, i) {
form[t.name] = { value: thisform[i] };
});
try {
setPoke(form, this);
var pd = getPD(this.party);
return getCookie(n).join("_x_") != pd;
}
catch (e) {
if (e instanceof InvalidValueOfTextbox) {
return true;
}
else {
throw e;
}
}
};
function currentBuffer() {
return bufferMap.getHead();
}
function getBuffer(name) {
return bufferMap.get(name);
}
function initialBuffer(name, party) {
bufferMap.push(name, new Buffer(name, party));
}
function makeBuffer(name, party) {
var buf;
if (buf = getBuffer(name)) {
}
else {
bufferMap.pushBack(name, buf = new Buffer(name, party));
}
return buf;
}
function selectBuffer(buf) {
var name = buf.name;
if (getBuffer(name)) {
currentBuffer().saveForm();
bufferMap.setHead(name);
currentBuffer().restoreForm();
}
else {
throw new ImplementationError("Buffer `" + buf.toSource() + "' is not in bufferMap");
}
}
function killBuffer0(buf) {
var pos = bufferMap.pos;
if (pos && pos != pos.next) {
if (buf == currentBuffer()) {
selectBuffer(pos.next.value);
}
bufferMap.remove(buf.name);
}
else {
throw new UserError("バッファが少なすぎます.");
}
}
/* "−" -> "ー" */
function nobashi(str) {
return str.replace(/−|-/g, "ー").replace(/10/g, "10");
}
function nameToIndex(name) {
name = nobashi(name);
for (var i = 0; i < pokelist.length; i++) {
if (pokelist[i] && name == pokelist[i].name) return i;
}
return -1;
}
function moveToIndex(move) {
move = nobashi(move);
for (var i = 0; i < movelist.length; i++) {
if (movelist[i] && move == movelist[i].name) return i;
}
return -1;
}
function itemToIndex(item) {
item = nobashi(item);
for (var i = 0; i < itemlist.length; i++) {
if (itemlist[i] && item == itemlist[i].name) return i;
}
return -1;
}
function getPokeNum() {
return $d.getElementsByTagName('table')[0].rows.length - 1;
}
function calcHp(no, lv, hp_id, hp_ef) {
return Math.floor(((pokelist[no].hp + hp_id) * 2 + hp_ef) * lv / 100) + lv + 10;
}
function calcHpId(id) {
var result = 0;
for (var i = 0; i < 4; i++) {
result += (parseInt("0x" + id[i]) % 2) * Math.pow(2, 3 - i);
}
return result;
}
function getId(n, form) {
form = form || $f;
var box = form["KO" + n];
var ko = box.value;
if (ko.length != 4 || isNaN(parseInt("0x" + ko))) {
throw new InvalidValueOfTextbox((parseInt(n) + 1) + "匹目の個体値が不正です.", box);
}
return ko.split("");
}
function setPoke(form, buffer) {
var poke_num = getPokeNum();
form = form || $f;
var poke = (buffer || currentBuffer()).party;
for (var i = 0; i < poke_num; i++) {
var lv_box = form["LV" + i];
var lv = parseInt(lv_box.value);
if (isNaN(lv) || lv < 1 || lv > 100) {
throw new InvalidValueOfTextbox((i + 1) + "匹目のレベルが不正です.", lv_box);
}
poke[i].lv = lv;
var no_box = form["POKE" + i];
var no = nameToIndex(no_box.value);
if (!pokelist[no]) {
throw new InvalidValueOfTextbox((i + 1) + "匹目の種族名が不正です.", no_box);
}
poke[i].no = no;
for (var j = 0; j < 4; j++) {
var mv_box = form["WAZA" + i + "_" + j];
var mv = moveToIndex(mv_box.value);
if (!movelist[mv]) {
throw new InvalidValueOfTextbox((i + 1) + "匹目の技" + (j + 1) + "が不正です.", mv_box);
}
poke[i].mv[j] = mv;
poke[i].pp[j] = movelist[mv].pp * (5 + Number(poke[i].p_up[j])) / 5;
}
poke[i].id = getId(i, form);
for (j = 0; j < 5; j++) {
var ef_box = form["EF" + i + "_" + j];
var ef = Number(ef_box.value);
if (isNaN(ef) || ef < 0 || ef > 63) {
throw new InvalidValueOfTextbox((i + 1) + "匹目の努力値が不正です.", ef_box);
}
poke[i].ef[j] = ef;
}
var item_box = form["ITEM" + i];
var item = itemToIndex(item_box.value);
if (itemlist[item] == undefined) {
throw new InvalidValueOfTextbox((i + 1) + "匹目のアイテム名が不正です.", item_box);
}
poke[i].item = item;
with(poke[i]) {
poke[i].hp = calcHp(no, lv, calcHpId(id), parseInt(ef[0]));
}
}
//currentBuffer().changed = false;
}
/*pokeの状態からPDに値をget*/
function getPD(party) {
party = party || currentBuffer().party;
function f(ary) {
return ary.join("_");
}
var poke_num = getPokeNum();
var ary = new Array(poke_num);
for (var i = 0; i < poke_num; i++) {
with(party[i]) {
ary[i] = f([no, lv, f(id), f(ef), f(mv), f(pp), f(p_up), hp, 0, item]);
}
}
return ary.join("_x_");
}
/*pokeの状態からPDに値をset*/
function setPD() {
var pd = getPD();
$f.PD.value = pd;
}
// --- DOM ---
function createInput(attr) {
var input = getWrappedJSObject($d.createElement("input"));
for (var i in attr) {
if (/^on/.test(i)) input[i] = attr[i];//input.addEventListener(i, attr[i], false);
else input.setAttribute(i, attr[i]);
}
return input;
}
// --- Echo Area ---
function createEchoArea() {
var buf = $d.createElement("div");
buf.id = "echo-area";
buf.setAttribute("style", "margin-left: 2em; background-color: inherit");
$d.body.appendChild(buf);
return true;
}
function message(obj) {
var echoArea = $d.getElementById("echo-area");
if (obj.appendChild) {
echoArea.innerHTML = "";
echoArea.appendChild(obj);
}
else {
echoArea.innerHTML = obj;
}
}
function messageText(str) {
$d.getElementById("echo-area").innerHTML = str.replace("\n", "
");
}
function getMessage() {
return $d.getElementById("echo-area").innerHTML;
}
function messageWithTextbox(str) {
message('');
var box = $d.getElementById("message-textbox");
box.value = str;
box.select();
}
// --- Error Handler ---
function maybeBug(mes, stack) {
message([mes,
"これはxpdのバグかもしれません.",
,
"version: " + xpd.version,
"stack trace:"].concat(stack).join("
"));
}
function handleInteractiveError(er) {
if (er instanceof Error) {
if (er instanceof ImplementationError) {
maybeBug(er, er.backtrace);
}
else if (er instanceof XPDError) {
messageText(er.message);
}
else {
maybeBug(er, getBacktrace(er));
}
}
else {
message(er);
}
}
// --- Command System ---
xpd.command = {};
function functionNameToCommandName(name) {
return name.replace(/([A-Z]+(?:(?=[A-Z][a-z])|$)|[A-Z][a-z]*)/g, "-$1").toLowerCase();
}
function interactive(f, doc) {
if (doc) {
f.document = doc;
}
if (f.commandName) {
xpd.command[f.commandName] = f;
}
else if (f.name) {
var name = functionNameToCommandName(f.name);
f.commandName = name;
xpd.command[name] = f;
}
else {
throw new ImplementationError("anonymous function is invalid");
}
}
function interactiveInsideForm(f, doc) {
f.onlyInsideForm = true;
interactive(f, doc);
}
function commandExists(command) {
return xpd.command.hasOwnProperty(command);
}
function callInteractively(command, e) {
if (commandExists(command)) {
return xpd.command[command](e);
}
else {
throw new XPDError("command `" + command + "' is not defined");
}
}
function isInnerEvent(e) {
return e.target.form && getWrappedJSObject(e.target.form) === $f;
}
function getFontSize() {
var span = $d.createElement("span");
span.innerHTML = " ";
$d.body.appendChild(span);
var height = span.offsetHeight;
$d.body.removeChild(span);
return height;
}
xpd.pref.modeLineColor = "d0d0d0";
function createModeLine() {
var height = getFontSize();
var base = $d.createElement("div");
base.id = "mode-line-background";
base.setAttribute("style", "position: fixed; z-index: -1; width: 100%; left: 0em; bottom: 1em; white-space: pre");
base.style.fontFamily = "Monaco, monospace";
var pref = currentBuffer().pref;
base.style.backgroundColor = pref.modeLineColor;
if (pref.descriptiveMode) {
base.title = "有効になっているモードの略称が表示されます";
}
base.style.lineHeight = height + 2 + "px";
var div = $d.createElement("span");
div.id = "mode-line";
div.setAttribute("style", "margin-left: 3em");
base.appendChild(div);
$d.body.appendChild(base);
}
var modeTable = {};
function defineMode(f, lighter, doc) {
var isFunc = typeof(f) == "function";
var name = isFunc ? f.name.slice(1) : f;
var commandName = functionNameToCommandName(name);
modeTable[name] = lighter;
var init = function () {
var pref = currentBuffer().pref;
isFunc && f(pref[name]);
};
var g = function (on) {
var pref = currentBuffer().pref;
pref[name] = on == null ? !pref[name] : Boolean(on);
init();
drawModeLine();
};
var h = function () {
var pref = currentBuffer().pref;
g();
message(commandName + " " + (pref[name] ? "enabled" : "disabled"));
};
initializeHooks.push(init);
h.commandName = commandName;
interactive(h, doc);
return g;
}
xpd.pref.modeLineMode = true;
function _modeLineMode(on) {
$d.getElementById("mode-line").style.display = on ? "" : "none";
}
var modeLineMode = defineMode(_modeLineMode, null, "モード行を表示するモード");
function drawModeLine() {
if (currentBuffer().pref.modeLineMode) {
var ary = [];
var pref = currentBuffer().pref;
for (var name in modeTable) {
var lighter = modeTable[name];
if (lighter && pref[name]) {
ary.push(lighter);
}
}
$d.getElementById("mode-line").textContent = "No." + getNumber() + " (" + ary.reverse().join(" ") + ")";
}
}
// --- Command Input Command ---
var isMinibuffer;
function createMiniBuffer() {
var mini = createInput({id: "mini-buffer", name: "minibuffer", type: "text", size: 32});
isMinibuffer = function(obj) { return obj === mini; };
mini.style.display = "none";
$f.appendChild(mini);
$d.styleSheets[0].insertRule("#mini-buffer{margin-left: 1em}", 0);
}
var commandTarget = null;
function displayMinibuffer(e) {
var mini = $d.getElementById("mini-buffer");
mini.value = "";
mini.style.display = "";
mini.focus();
commandTarget = e.target;
}
function blurIfHtmlElement(element) {
if (element == document.documentElement) {
element.blur();
}
}
function quitCommand(e) {
if (commandTarget) {
commandTarget.focus();
var mini = $d.getElementById("mini-buffer");
mini.style.display = "none";
blurIfHtmlElement(commandTarget);
commandTarget = null;
}
message("Quit");
}
function executeCommand(e) {
var mini = $d.getElementById("mini-buffer");
if (mini == e.target) {
if (commandExists(mini.value)) {
var event = {target: commandTarget};
mini.style.display = "none";
commandTarget.focus();
callInteractively(mini.value, event);
blurIfHtmlElement(commandTarget);
commandTarget = null;
}
else {
complete({target: mini});
}
}
return false;
}
// --- Key ---
var Key = {};
Key.shift = 65536;
Key.ctrl = Key.shift << 1;
Key.alt = Key.ctrl << 1;
Key.meta = Key.alt << 1;
Key.special = {
TAB: 9,
RET: 13,
SPC: 32
};
(function (obj) {
for (var i in obj) {
obj[obj[i]] = i;
}
})(Key.special);
function kbd(str) {
var ma = /^(C-)?(M-)?(A-)?(S-)?(?:(TAB|RET|SPC)|(.))$/(str);
if (!ma) throw new XPDError('wrong argument for kbd("' + str + '")');
var [_, c, m, a, s, sp, key] = ma;
return (c ? Key.ctrl : 0) +
(m ? Key.meta : 0) +
(a ? Key.alt : 0) +
(s ? Key.shift : 0) + (sp ? Key.special[sp] : key.charCodeAt(0));
}
function keyToString(n) {
var m = Key.shift - 1 & n;
return (Key.ctrl & n ? "C-" : "") +
(Key.meta & n ? "M-" : "") +
(Key.alt & n ? "A-" : "") +
(Key.shift & n ? "S-" : "") +
(Key.special[m] || String.fromCharCode(m));
}
// --- Keymap ---
function Keymap(name, parent, table) {
this.name = name || null;
this.parent = parent || null;
this.table = table || {};
}
Keymap.prototype.get = function(n) {
return this.table[n] || (this.parent ? this.parent.get(n) : undefined);
};
var keybindCache = false;
Keymap.prototype.define = function(str, command) {
keybindCache = false;
this.table[kbd(str)] = command;
};
Keymap.prototype.remove = function(str) {
keybindCache = false;
this.table[kbd(str)] = undefined;
};
Keymap.prototype.makeSubKeymap = function(name, parent, obj) {
return this.table[kbd(name)] = new Keymap(name, parent, obj);
};
// --- Keybind ---
var currentMap = null;
var keyupmap = {};
var keydownmap = {};
var keyupIgnoreMap = {}; /* keyCode ベース */
var globalKeymap = xpd.globalKeymap = new Keymap();
var keymap = xpd.keymap = new Keymap(null, globalKeymap);
var macOptionKeymap = {
229: 97, /* a */
8747: 98, /* b */
402: 102, /* f */
730: 107, /* k */
8224: 116, /* t */
8776: 120 /* x */
};
function keyNumber(e) {
var n = e.charCode || e.keyCode;
var m;
if (platform.macosx && (m = macOptionKeymap[n])) {
return Key.alt + m;
}
if (e.shiftKey) {
if (e.charCode && n >= 65 && n <= 90) {
n += 32;
}
n += Key.shift;
}
if (e.ctrlKey) n += Key.ctrl;
if (e.altKey) n += Key.alt;
if (e.metaKey) n += Key.meta;
return n;
}
var previousCommand;
function runCommand(f, e) {
if (typeof(f) == "function") {
message("");
try {
return Boolean(f(e));
}
catch (er) {
handleInteractiveError(er);
return false;
}
finally {
previousCommand = f;
currentMap = null;
}
}
else if (typeof(f) == "object") {
if (currentMap == null) {
message(f.name);
}
else {
message(getMessage() + " " + f.name);
}
currentMap = f;
return false;
}
else if (typeof(f) == "undefined" && currentMap != null) {
currentMap = null;
quitCommand(e);
message("Undefined key");
return false;
}
else {
return true;
}
}
var modifierKeyList = [16, 17, 18, 91, 92, 224];
function isModifierKey(e) {
return modifierKeyList.indexOf(e.keyCode) >= 0;
}
function ignoreChar(c) {
keyupIgnoreMap[c >= 97 && c <= 122 ? c - 32 : c] = true;
}
function setIgnoreKey(e) {
var c = e.charCode;
if (macOptionKeymap[c]) {
keyupIgnoreMap[18] = true;
keyupIgnoreMap[macOptionKeymap[c] - 32] = true;
}
else if (c && (e.ctrlKey || e.altKey)) {
keyupIgnoreMap[e.ctrlKey ? 17 : 18] = true;
ignoreChar(c);
}
else if (currentMap) {
ignoreChar(c);
}
}
function onKeyUp(e) {
if (keyupIgnoreMap[e.keyCode]) {
keyupIgnoreMap[e.keyCode] = false;
return true;
}
else {
return currentMap ? false : runCommand(keyupmap[keyNumber(e)], e);
}
}
function onKeyDown(e) {
return currentMap ? false : runCommand(keydownmap[keyNumber(e)], e);
}
function globalOnKeyPress(e) {
setIgnoreKey(e);
var n = keyNumber(e);
return runCommand((currentMap || (isInnerEvent(e) ? keymap : globalKeymap)).get(keyNumber(e)), e);
}
// --- GUI Hooks ---
function setHp() {
for (var i = 0; i < 6; i++) {
var no = nameToIndex($f["POKE" + i].value);
var hp;
if (no >= 0) {
var lv = parseInt($f["LV" + i].value, 10);
var ef = parseInt($f["EF" + i + "_" + 0].value, 10);
if (isNaN(lv) || lv < 1 || lv > 100 || isNaN(ef)) {
hp = "";
}
else {
hp = calcHp(no, lv, calcHpId(getId(i)), ef);
}
}
else {
hp = "";
}
$d.getElementById("hp" + i).innerHTML = hp;
}
}
function setSex() {
var form = $f;
for (var i = 0; i < 6; i++) {
var str;
try {
var female = pokelist[nameToIndex(form["POKE" + i].value)].female;
if (female < 0) {
str = " ";
}
else if (female > Number("0x" + form["KO" + i].value.slice(0, 1))) {
str = "♀";
}
else {
str = "♂";
}
}
catch (e) {
str = " ";
}
$d.getElementById("sex" + i).innerHTML = str;
}
}
function getMove(i, j) {
return $f["WAZA" + i + "_" + j].value;
}
function getMoves(i) {
var form = $f;
var ary = new Array(4);
for (var j = 0; j < ary.length; j++) {
ary[j] = getMove(i, j);
}
return ary;
}
xpd.pref.hiddenpowerColofulMode = true;
xpd.pref.hiddenpowerNames = ["格","飛","毒","地","岩","虫","霊","鋼","炎","水","草","電","エ","氷","竜","悪"];
xpd.pref.hiddenpowerColors = ["#d0a0a0", "#d0ffd0", "#c080ff", "#f0a060", "#d0d0a0", "#80d080", "#b0a0e0", "#e0e0e0", "#ffa0a0", "#a0a0ff", "#a0ffa0", "#ffffa0", "#ffa0ff", "#c0c0ff", "#ffa060", "#909090"];
function setHiddenpower() {
var pref = currentBuffer().pref;
var form = $f;
for (var i = 0; i < 6; i++) {
var str = " ";
var color = "c0c0c0";
try {
if (getMoves(i).map(moveToIndex).some(function (i) { return i == 238; })) {
/* 個体値から計算 */
var ary = getId(i);
str = pref.hiddenpowerNames[parseInt(ary[0], 16) % 4 * 4 + parseInt(ary[1], 16) % 4];
if (pref.hiddenpowerColofulMode) {
color = pref.hiddenpowerColors[parseInt(ary[0], 16) % 4 * 4 + parseInt(ary[1], 16) % 4];
}
}
}
catch (e) {
handleInteractiveError(e);
}
var hid = $d.getElementById("hiddenpower" + i);
hid.innerHTML = str;
hid.bgColor = color;
}
}
function setStatus() {
try {
setSex();
setHp();
}
catch (e) {
message(e);
}
}
function formRefresh() {
setStatus();
setHiddenpower();
}
function change() {
try {
setPoke();
setPD();
} catch (e) {
handleInteractiveError(e);
return false;
}
return true;
}
/*
* cookieの上限は8192ぐらい
* 一つのパーティが占めるcookieの長さの最大は487
* 2000のパなら481
* 削除されたパで6
* 通常は460程度
*/
function newPartyButton() {
if ($d.cookie.length > 7700) {
message("パーティが多すぎます");
return;
}
if (change()) {
var i;
for (i = 1; getCookie(i); i++);
setCookie("PD" + (i - 1), "1_x_" + getPD());
message("Saved No." + i);
}
}
/*
function saveSomeBuffers() {
}*/
function save() {
if (change()) {
setCookie("PD" + (getNumber() - 1), "1_x_" + getPD());
message("Saved No." + getNumber());
}
return false;
}
// --- GUI Hooks:Rearrenge ---
function swapValue(a, b) {
var temp = a.value;
a.value = b.value;
b.value = temp;
}
function swapPoke() {
var ary = [];
for (var i = 0; i < 6; i++) {
if ($f["swap" + i].checked) ary.push(i);
}
if (ary.length == 2) {
var f = $f;
var attrs = ["LV", "POKE", "ITEM", "KO"];
for (i = 0; i < attrs.length; i++) {
swapValue(f[attrs[i] + ary[0]], f[attrs[i] + ary[1]]);
}
for (i = 0; i < 4; i++) {
swapValue(f["WAZA" + ary[0] + "_" + i], f["WAZA" + ary[1] + "_" + i]);
}
for (i = 0; i < 5; i++) {
swapValue(f["EF" + ary[0] + "_" + i], f["EF" + ary[1] + "_" + i]);
}
formRefresh();
for (i = 0; i < 6; i++) {
$f["swap" + i].checked = false;
}
}
}
// --- GUI ---
xpd.pref.descriptiveMode = true;
function getTable() {
return $d.getElementsByTagName('table')[0];
}
xpd.pref.formPokeSize = 10 - platform.macosx * 2 - browser.firefox;
function createPokeInput(text, no){
var input = $d.createElement('input');
input.value = text;
input.size = currentBuffer().pref.formPokeSize;
input.setAttribute("name", "POKE" + no);
return input;
}
function setInputs() {
var table = getTable();
for (var i = 1; i < 7; i++){
var row = table.rows[i].cells;
var cell = table.rows[i].cells[1];
cell.replaceChild(createPokeInput(cell.innerHTML, i - 1), cell.firstChild);
}
}
function setButtonAttr(b, fn, value, title) {
b = getWrappedJSObject(b);
b.onclick = fn;
if (value) {
b.value = value;
}
if (currentBuffer().pref.descriptiveMode) {
b.title = title || "undocumented";
}
}
function setButtons() {
var b = $d.getElementsByName("submit");
b[0].type = "button";
setButtonAttr(b[0], change);
b[1].type = "button";
b[2].type = "button";
setButtonAttr(b[1], save, "上書保存", "パーティを保存します.");
setButtonAttr(b[2], newPartyButton, "新規保存", "新規保存");
$f.appendChild(createInput({type: "hidden", name: "C", value: ""}));
}
function setOnChange() {
var form = $f;
for (var i = 0; i < 6; i++) {
getWrappedJSObject(form["POKE" + i]).onblur = setStatus;
getWrappedJSObject(form["KO" + i]).onblur = formRefresh;
getWrappedJSObject(form["LV" + i]).onblur = setHp;
getWrappedJSObject(form["EF" + i + "_0"]).onblur = setHp;
for (var j = 0; j < 4; j++) {
getWrappedJSObject(form["WAZA" + i + "_" + j]).onblur = setHiddenpower;
}
}
}
xpd.pref.formEffortSize = 2 - (platform.macosx && browser.firefox);
function createEffortColumn() {
var table = getTable();
table.rows[0].insertCell(-1);
table.rows[0].cells[8].innerHTML = "HPこぼすと";
for (var i = 0; i < 6; i++) {
var row = table.rows[i + 1];
row.insertCell(8);
for (var j = 0; j < 5; j++) {
row.cells[8].appendChild(createInput({
value: currentBuffer().party[i].ef[j],
name: "EF" + i + "_" + j,
size: currentBuffer().pref.formEffortSize,
maxLength: 2
}));
}
}
}
function createHiddenpowerColumn() {
var table = getTable();
table.rows[0].insertCell(7);
table.rows[0].cells[7].innerHTML = "め";
for (var i = 1; i < 7; i++) {
var row = table.rows[i];
row.insertCell(7);
row.cells[7].id = "hiddenpower" + (i - 1);
row.cells[7].bgColor = "c0c0c0";
}
}
function createHPColumn() {
var table = getTable();
table.rows[0].insertCell(7);
table.rows[0].cells[7].innerHTML = "HP";
for (var i = 1; i < 7; i++) {
var row = table.rows[i];
row.insertCell(7);
row.cells[7].id = "hp" + (i - 1);
row.cells[7].bgColor = "c0c0c0";
}
}
function createSexColumn() {
var table = getTable();
table.rows[0].insertCell(2);
table.rows[0].cells[2].innerHTML = " ";
for (var i = 1; i < 7; i++) {
var row = table.rows[i];
row.insertCell(2);
row.cells[2].id = "sex" + (i - 1);
row.cells[2].bgColor = "c0c0c0";
}
}
function createSwapCheckBox() {
var table = getTable();
table.rows[0].insertCell(0);
table.rows[0].cells[0].innerHTML = "";
table.rows[0].cells[0].bgColor = "snow";
for (var i = 0; i < 6; i++) {
var row = table.rows[i + 1];
row.insertCell(0);
var attr = {
type: "checkbox",
name: "swap" + i,
onchange: swapPoke
};
if (currentBuffer().pref.descriptiveMode) {
attr.title = "2つチェックすると,それらの行を入れ替えます.";
}
row.cells[0].appendChild(createInput(attr));
table.rows[i + 1].cells[0].bgColor = "snow";
}
}
function stripTableHeader() {
var table = getTable();
for (var k = 1; k < 7; k++) {
var cell = table.rows[0].cells[k];
cell.innerHTML = cell.innerHTML.replace(/ /g, "");
}
}
xpd.pref.formLvSize = 3 - (platform.macosx && browser.firefox);
function fixLvSize() {
var pref = currentBuffer().pref;
if (pref.formLvSize != $f.LV0.size) {
for (var i = 0; i < 6; i++) {
$f["LV" + i].size = pref.formLvSize;
}
}
}
xpd.pref.formKoSize = 4 - (platform.macosx && browser.firefox);
function fixKoSize() {
var pref = currentBuffer().pref;
if (pref.formKoSize != $f.KO0.size) {
for (var i = 0; i < 6; i++) {
$f["KO" + i].size = pref.formKoSize;
}
}
}
xpd.pref.formItemSize = 14 - (platform.macosx && (browser.firefox ? 2 : 1));
function fixItemSize() {
var pref = currentBuffer().pref;
if (pref.formItemSize != $f.ITEM0.size) {
for (var i = 0; i < 6; i++) {
$f["ITEM" + i].size = pref.formItemSize;
}
}
}
xpd.pref.formMoveSize = 13 - (platform.macosx && (browser.firefox ? 3 : 1));
function fixMoveSize() {
var pref = currentBuffer().pref;
if (pref.formMoveSize != $f.WAZA0_0.size) {
for (var i = 0; i < 6; i++) {
for (var j = 0; j < 4; j++) {
$f["WAZA" + i + "_" + j].size = pref.formMoveSize;
}
}
}
}
function fixFormSizes() {
fixLvSize();
fixKoSize();
fixItemSize();
fixMoveSize();
}
function setTableStyleNowrap() {
var element = $d.createElement('style');
element.appendChild($d.createTextNode(''));
$d.getElementsByTagName('head')[0].appendChild(element);
if (browser.msie) {
element.sheet.addRule("td", "white-space:nowrap", 0);
}
else if (!browser.camino) {
element.sheet.insertRule("td{white-space:nowrap;}", 0);
}
}
// --- Command ---
function getLineNumber(input) {
var n = /\d/.exec(input.name);
if (n === null) {
throw new ImplementationError("wrong argument: " + input + "(" + input.name + ")");
}
else {
return Number(n[0]);
}
}
// --- Command:System ---
function version() {
message(xpd.version);
}
interactive(version, "バージョンを表示");
var backButton;
function back() {
backButton && backButton.click();
return false;
}
interactive(back, "前画面へ戻る");
function initializeBackButton() {
var buttons = $d.getElementsByName("submit");
for (var i = 0; i < buttons.length; i++) {
if (buttons[i].value == "戻る") {
backButton = buttons[i];
return;
}
}
message("warning: 戻るボタンが見つかりません");
backButton = null;
}
interactive(save, "保存");
function quit() {
if (bufferMap.some(function (buf) { return buf.changes(); })) {
if (!confirm("編集されています.終了しますか?")) {
return false;
}
}
$d.location = "http://psense.lib.net/_/PDINPUT.cgi";
return false;
}
interactive(quit, "パーティ一覧に戻る");
function newParty() {
var b = $d.getElementsByName("submit")[2];
if (b.value != "再現") {
throw new ImplementationError("再現ボタンがみつかりません(value=\"" + b.value + "\")");
}
b.click();
return false;
}
interactive(newParty, "新規保存");
function deleteAllParties() {
if (confirm("パーティを全て削除します.よろしいですか?\n(No.1のパーティは残されます.対応するバッファも削除されます))")) {
findParty0(1);
getCookies().forEach(function(_, i) {
if (i > 0) {
var name = i + 1;
getBuffer(name) && bufferMap.remove(name);
deleteCookie("PD" + i);
}
});
}
}
interactive(deleteAllParties, "全てのパーティを削除");
function revert() {
if (confirm("編集を破棄して保存時の状態を復帰します.よろしいですか?")) {
partyReflectForm(loadParty(getNumber()));
}
}
interactive(revert, "保存時の状態を復帰");
/*export*/
function exportPD() {
setPoke();
messageWithTextbox(getPD());
}
interactive(exportPD, "PD値を書き出す");
/*import*/
function pdToParty(pd) {
var poke = new Array(getPokeNum());
var ary = pd.split("_x_");
for (var i = 0; i < poke.length; i++) {
poke[i] = Poke.fromPD(ary[i]);
}
return poke;
}
function importPD() {
var pd = prompt("PD-string");
if (pd) {
var ma;
if (ma = /^1_x_(.*)$/(pd)) {
pd = ma[1];
}
if (!/^1(?:_x_(?:\d{1,3}_){2}(?:[0-9a-f]_){4}(?:\d{1,2}_){5}(?:\d{1,3}_){4}(?:\d{1,2}_){4}(?:[0-3]_){4}\d{1,3}_0_\d{1,3}){6}/i("1_x_" + pd)) {
throw new InvalidInput("PD値が正しくありません");
}
partyReflectForm(pdToParty(pd));
}
}
interactive(importPD, "PD値を読み込む");
function partiesToTable(parties) {
function tr(s) { return '