import random def main(): ## 設定(0=GB, 1=N64, 2=PBS) gamemode = 2 ## 試行回数 trial = 10000 ## ポケモン p1_pokemon = "ゲンガー" p2_pokemon = "サンダー" ## レベル(1~100) p1_level = 55 p2_level = 55 ## 個体値(0~15) [攻撃, 防御, 素早さ, 特殊] F=15, E=14, D=13, C=12, B=11, A=10 p1_kotai = [15, 15, 15, 15] p2_kotai = [11, 13, 15, 15] ## 努力値(0~63) [HP, 攻撃, 防御, 素早さ, 特殊] p1_doryoku = [63, 63, 63, 63, 63] p2_doryoku = [63, 0, 63, 63, 63] ## 持ち物 p1_item = "きせきのみ" p2_item = "たべのこし" ## 繰り出す技 p1_waza = ["れいとうパンチ", "れいとうパンチ", "れいとうパンチ", "れいとうパンチ"] p2_waza = ["かみなり", "かみなり", "かみなり", "かみなり"] ## 能力変化のアドバンテージ (攻撃, 防御, 特攻, 特防, 素早さ, 回避率, 命中率, 急所率) p1_advantage = [0, 0, 0, 0, 0, 0, 0, 0] p2_advantage = [0, 0, 0, 0, 0, 0, 0, 0] ## 寝言 p1_negoto = ["すてみタックル", "のろい", "ねむる"] p2_negoto = ["すてみタックル", "のろい", "ねむる"] ## テクスチャー p1_texture = ["サイコキネシス", "れいとうビーム", "のろい", "じこさいせい"] p2_texture = ["サイコキネシス", "れいとうビーム", "のろい", "じこさいせい"] ## まきびし # 1 で足元に撒かれます p1_70, p2_70 = 0, 0 ## AI # 1 で起きている寝言,身代わり状態の身代わりの無駄行動を代替します ai = 0 ## 整数のみ入力 [自分の HP が n % 以上,相手の HP が n % 以下] p1_ai = [40, 20] p2_ai = [40, 20] ## 身代わり # AI = 1 で代替します # 後述にtipsあります p1_migawari = ["きしかいせい", "ヨガのポーズ"] p2_migawari = ["きしかいせい", "ヨガのポーズ"] # tips # 寝言 # px_negoto # 自分の HP が n % 以上 or 同速以上かつ,相手の HP が n % 以下 で 技1,それ以外を 眠る # 身代わり # px_migawari # 同速以上かつ,身代わり(1)かつ 相手の混乱(0)で 技2,HP 1/4 + 1 以上かつ,身代わり(0)で 身代わり # 同速未満かつ,自分の HP が n % より大きいかつ,身代わり(0) で 身代わり,それ以外を 技1 # 光の粉に期待した身代わり*4なら身代わり*5以上を並べてください # 終了 # 種族値表 [HP, 攻撃, 防御, 特攻, 特防, 素早さ, タイプ1, タイプ2, 性別] pokemon_id = { "フシギダネ": [45, 49, 49, 65, 65, 45, 22, 3, 2], "フシギソウ": [60, 62, 63, 80, 80, 60, 22, 3, 2], "フシギバナ": [80, 82, 83, 100, 100, 80, 22, 3, 2], "ヒトカゲ": [39, 52, 43, 60, 50, 65, 20, 99, 2], "リザード": [58, 64, 58, 80, 65, 80, 20, 99, 2], "リザードン": [78, 84, 78, 109, 85, 100, 20, 2, 2], "ゼニガメ": [44, 48, 65, 50, 64, 43, 21, 99, 2], "カメール": [59, 63, 80, 65, 80, 58, 21, 99, 2], "カメックス": [79, 83, 100, 85, 105, 78, 21, 99, 2], "キャタピー": [45, 30, 35, 20, 20, 45, 7, 99, 8], "トランセル": [50, 20, 55, 25, 25, 30, 7, 99, 8], "バタフリー": [60, 45, 50, 80, 80, 70, 7, 2, 8], "ビードル": [40, 35, 30, 20, 20, 50, 7, 3, 8], "コクーン": [45, 25, 50, 25, 25, 35, 7, 3, 8], "スピアー": [65, 80, 40, 45, 80, 75, 7, 3, 8], "ポッポ": [40, 45, 40, 35, 35, 56, 0, 2, 8], "ピジョン": [63, 60, 55, 50, 50, 71, 0, 2, 8], "ピジョット": [83, 80, 75, 70, 70, 91, 0, 2, 8], "コラッタ": [30, 56, 35, 25, 35, 72, 0, 99, 8], "ラッタ": [55, 81, 60, 50, 70, 97, 0, 99, 8], "オニスズメ": [40, 60, 30, 31, 31, 70, 0, 2, 8], "オニドリル": [65, 90, 65, 61, 61, 100, 0, 2, 8], "アーボ": [35, 60, 44, 40, 54, 55, 3, 99, 8], "アーボック": [60, 85, 69, 65, 79, 80, 3, 99, 8], "ピカチュウ": [35, 55, 30, 50, 40, 90, 23, 99, 8], "ライチュウ": [60, 90, 55, 90, 80, 100, 23, 99, 8], "サンド": [50, 75, 85, 20, 30, 40, 4, 99, 8], "サンドパン": [75, 100, 110, 45, 55, 65, 4, 99, 8], "ニドラン♀": [55, 47, 52, 40, 40, 41, 3, 99, 50], "ニドリーナ": [70, 62, 67, 55, 55, 56, 3, 99, 50], "ニドクイン": [90, 82, 87, 75, 85, 76, 3, 4, 50], "ニドラン♂": [46, 57, 40, 40, 40, 50, 3, 99, 0], "ニドリーノ": [61, 72, 57, 55, 55, 65, 3, 99, 0], "ニドキング": [81, 92, 77, 85, 75, 85, 3, 4, 0], "ピッピ": [70, 45, 48, 60, 65, 35, 0, 99, 12], "ピクシー": [95, 70, 73, 85, 90, 60, 0, 99, 12], "ロコン": [38, 41, 40, 50, 65, 65, 20, 99, 12], "キュウコン": [73, 76, 75, 81, 100, 100, 20, 99, 12], "プリン": [115, 45, 20, 45, 25, 20, 0, 99, 12], "プクリン": [140, 70, 45, 75, 50, 45, 0, 99, 12], "ズバット": [40, 45, 35, 30, 40, 55, 3, 2, 8], "ゴルバット": [75, 80, 70, 65, 75, 90, 3, 2, 8], "ナゾノクサ": [45, 50, 55, 75, 65, 30, 22, 3, 8], "クサイハナ": [60, 65, 70, 85, 75, 40, 22, 3, 8], "ラフレシア": [75, 80, 85, 100, 90, 50, 22, 3, 8], "パラス": [35, 70, 55, 45, 55, 25, 7, 22, 8], "パラセクト": [60, 95, 80, 60, 80, 30, 7, 22, 8], "コンパン": [60, 55, 50, 40, 55, 45, 7, 3, 8], "モルフォン": [70, 65, 60, 90, 75, 90, 7, 3, 8], "ディグダ": [10, 55, 25, 35, 45, 95, 4, 99, 8], "ダグトリオ": [35, 80, 50, 50, 70, 120, 4, 99, 8], "ニャース": [40, 45, 35, 40, 40, 90, 0, 99, 8], "ペルシアン": [65, 70, 60, 65, 65, 115, 0, 99, 8], "コダック": [50, 52, 48, 65, 50, 55, 21, 99, 8], "ゴルダック": [80, 82, 78, 95, 80, 85, 21, 99, 8], "マンキー": [40, 80, 35, 35, 45, 70, 1, 99, 8], "オコリザル": [65, 105, 60, 60, 70, 95, 1, 99, 8], "ガーディ": [55, 70, 45, 70, 50, 60, 20, 99, 4], "ウインディ": [90, 110, 80, 100, 80, 95, 20, 99, 4], "ニョロモ": [40, 50, 40, 40, 40, 90, 21, 99, 8], "ニョロゾ": [65, 65, 65, 50, 50, 90, 21, 99, 8], "ニョロボン": [90, 85, 95, 70, 90, 70, 21, 1, 8], "ケーシィ": [25, 20, 15, 105, 55, 90, 24, 99, 4], "ユンゲラー": [40, 35, 30, 120, 70, 105, 24, 99, 4], "フーディン": [55, 50, 45, 135, 85, 120, 24, 99, 4], "ワンリキー": [70, 80, 50, 35, 35, 35, 1, 99, 4], "ゴーリキー": [80, 100, 70, 50, 60, 45, 1, 99, 4], "カイリキー": [90, 130, 80, 65, 85, 55, 1, 99, 4], "マダツボミ": [50, 75, 35, 70, 30, 40, 22, 3, 8], "ウツドン": [65, 90, 50, 85, 45, 55, 22, 3, 8], "ウツボット": [80, 105, 65, 100, 60, 70, 22, 3, 8], "メノクラゲ": [40, 40, 35, 50, 100, 70, 21, 3, 8], "ドククラゲ": [80, 70, 65, 80, 120, 100, 21, 3, 8], "イシツブテ": [40, 80, 100, 30, 30, 20, 5, 4, 8], "ゴローン": [55, 95, 115, 45, 45, 35, 5, 4, 8], "ゴローニャ": [80, 110, 130, 55, 65, 45, 5, 4, 8], "ポニータ": [50, 85, 55, 65, 65, 90, 20, 99, 8], "ギャロップ": [65, 100, 70, 80, 80, 105, 20, 99, 8], "ヤドン": [90, 65, 65, 40, 40, 15, 21, 24, 8], "ヤドラン": [95, 75, 110, 100, 80, 30, 21, 24, 8], "コイル": [25, 35, 70, 95, 55, 45, 23, 9, 99], "レアコイル": [50, 60, 95, 120, 70, 70, 23, 9, 99], "カモネギ": [52, 65, 55, 58, 62, 60, 0, 2, 8], "ドードー": [35, 85, 45, 35, 35, 75, 0, 2, 8], "ドードリオ": [60, 110, 70, 60, 60, 100, 0, 2, 8], "パウワウ": [65, 45, 55, 45, 70, 45, 21, 99, 8], "ジュゴン": [90, 70, 80, 70, 95, 70, 21, 25, 8], "ベトベター": [80, 80, 50, 40, 50, 25, 3, 99, 8], "ベトベトン": [105, 105, 75, 65, 100, 50, 3, 99, 8], "シェルダー": [30, 65, 100, 45, 25, 40, 21, 99, 8], "パルシェン": [50, 95, 180, 85, 45, 70, 21, 25, 8], "ゴース": [30, 35, 30, 100, 35, 80, 8, 3, 8], "ゴースト": [45, 50, 45, 115, 55, 95, 8, 3, 8], "ゲンガー": [60, 65, 60, 130, 75, 110, 8, 3, 8], "イワーク": [35, 45, 160, 30, 45, 70, 5, 4, 8], "スリープ": [60, 48, 45, 43, 90, 42, 24, 99, 8], "スリーパー": [85, 73, 70, 73, 115, 67, 24, 99, 8], "クラブ": [30, 105, 90, 25, 25, 50, 21, 99, 8], "キングラー": [55, 130, 115, 50, 50, 75, 21, 99, 8], "ビリリダマ": [40, 30, 50, 55, 55, 100, 23, 99, 99], "マルマイン": [60, 50, 70, 80, 80, 140, 23, 99, 99], "タマタマ": [60, 40, 80, 60, 45, 40, 22, 24, 8], "ナッシー": [95, 95, 85, 125, 65, 55, 22, 24, 8], "カラカラ": [50, 50, 95, 40, 50, 35, 4, 99, 8], "ガラガラ": [60, 80, 110, 50, 80, 45, 4, 99, 8], "サワムラー": [50, 120, 53, 35, 110, 87, 1, 99, 0], "エビワラー": [50, 105, 79, 35, 110, 76, 1, 99, 0], "ベロリンガ": [90, 55, 75, 60, 75, 30, 0, 99, 8], "ドガース": [40, 65, 95, 60, 45, 35, 3, 99, 8], "マタドガス": [65, 90, 120, 85, 70, 60, 3, 99, 8], "サイホーン": [80, 85, 95, 30, 30, 25, 4, 5, 8], "サイドン": [105, 130, 120, 45, 45, 40, 4, 5, 8], "ラッキー": [250, 5, 5, 35, 105, 50, 0, 99, 50], "モンジャラ": [65, 55, 115, 100, 40, 60, 22, 99, 8], "ガルーラ": [105, 95, 80, 40, 80, 90, 0, 99, 50], "タッツー": [30, 40, 70, 70, 25, 60, 21, 99, 8], "シードラ": [55, 65, 95, 95, 45, 85, 21, 99, 8], "トサキント": [45, 67, 60, 35, 50, 63, 21, 99, 8], "アズマオウ": [80, 92, 65, 65, 80, 68, 21, 99, 8], "ヒトデマン": [30, 45, 55, 70, 55, 85, 21, 99, 99], "スターミー": [60, 75, 85, 100, 85, 115, 21, 24, 99], "バリヤード": [40, 45, 65, 100, 120, 90, 24, 99, 8], "ストライク": [70, 110, 80, 55, 80, 105, 7, 2, 8], "ルージュラ": [65, 50, 35, 115, 95, 95, 25, 24, 50], "エレブー": [65, 83, 57, 95, 85, 105, 23, 99, 4], "ブーバー": [65, 95, 57, 100, 85, 93, 20, 99, 4], "カイロス": [65, 125, 100, 55, 70, 85, 7, 99, 8], "ケンタロス": [75, 100, 95, 40, 70, 110, 0, 99, 0], "コイキング": [20, 10, 55, 15, 20, 80, 21, 99, 8], "ギャラドス": [95, 125, 79, 60, 100, 81, 21, 2, 8], "ラプラス": [130, 85, 80, 85, 95, 60, 21, 25, 8], "メタモン": [48, 48, 48, 48, 48, 48, 0, 99, 99], "イーブイ": [55, 55, 50, 45, 65, 55, 0, 99, 2], "シャワーズ": [130, 65, 60, 110, 95, 65, 21, 99, 2], "サンダース": [65, 65, 60, 110, 95, 130, 23, 99, 2], "ブースター": [65, 130, 60, 95, 110, 65, 20, 99, 2], "ポリゴン": [65, 60, 70, 85, 75, 40, 0, 99, 99], "オムナイト": [35, 40, 100, 90, 55, 35, 5, 21, 2], "オムスター": [70, 60, 125, 115, 70, 55, 5, 21, 2], "カブト": [30, 80, 90, 55, 45, 55, 5, 21, 2], "カブトプス": [60, 115, 105, 65, 70, 80, 5, 21, 2], "プテラ": [80, 105, 65, 60, 75, 130, 5, 2, 2], "カビゴン": [160, 110, 65, 65, 110, 30, 0, 99, 2], "フリーザー": [90, 85, 100, 95, 125, 85, 25, 2, 99], "サンダー": [90, 90, 85, 125, 90, 100, 23, 2, 99], "ファイヤー": [90, 100, 90, 125, 85, 90, 20, 2, 99], "ミニリュウ": [41, 64, 45, 50, 50, 50, 26, 99, 8], "ハクリュー": [61, 84, 65, 70, 70, 70, 26, 99, 8], "カイリュー": [91, 134, 95, 100, 100, 80, 26, 2, 8], "ミュウツー": [106, 110, 90, 154, 90, 130, 24, 99, 99], "ミュウ": [100, 100, 100, 100, 100, 100, 24, 99, 99], "チコリータ": [45, 49, 65, 49, 65, 45, 22, 99, 2], "ベイリーフ": [60, 62, 80, 63, 80, 60, 22, 99, 2], "メガニウム": [80, 82, 100, 83, 100, 80, 22, 99, 2], "ヒノアラシ": [39, 52, 43, 60, 50, 65, 20, 99, 2], "マグマラシ": [58, 64, 58, 80, 65, 80, 20, 99, 2], "バクフーン": [78, 84, 78, 109, 85, 100, 20, 99, 2], "ワニノコ": [50, 65, 64, 44, 48, 43, 21, 99, 2], "アリゲイツ": [65, 80, 80, 59, 63, 58, 21, 99, 2], "オーダイル": [85, 105, 100, 79, 83, 78, 21, 99, 2], "オタチ": [35, 46, 34, 35, 45, 20, 0, 99, 8], "オオタチ": [85, 76, 64, 45, 55, 90, 0, 99, 8], "ホーホー": [60, 30, 30, 36, 56, 50, 0, 2, 8], "ヨルノズク": [100, 50, 50, 76, 96, 70, 0, 2, 8], "レディバ": [40, 20, 30, 40, 80, 55, 7, 2, 8], "レディアン": [55, 35, 50, 55, 110, 85, 7, 2, 8], "イトマル": [40, 60, 40, 40, 40, 30, 7, 3, 8], "アリアドス": [70, 90, 70, 60, 60, 40, 7, 3, 8], "クロバット": [85, 90, 80, 70, 80, 130, 3, 2, 8], "チョンチー": [75, 38, 38, 56, 56, 67, 21, 23, 8], "ランターン": [125, 58, 58, 76, 76, 67, 21, 23, 8], "ピチュー": [20, 40, 15, 35, 35, 60, 23, 99, 8], "ピィ": [50, 25, 28, 45, 55, 15, 0, 99, 12], "ププリン": [90, 30, 15, 40, 20, 15, 0, 99, 12], "トゲピー": [35, 20, 65, 40, 65, 20, 0, 99, 2], "トゲチック": [55, 40, 85, 80, 105, 40, 0, 2, 2], "ネイティ": [40, 50, 45, 70, 45, 70, 24, 2, 8], "ネイティオ": [65, 75, 70, 95, 70, 95, 24, 2, 8], "メリープ": [55, 40, 40, 65, 45, 35, 23, 99, 8], "モココ": [70, 55, 55, 80, 60, 45, 23, 99, 8], "デンリュウ": [90, 75, 75, 115, 90, 55, 23, 99, 8], "キレイハナ": [75, 80, 85, 90, 100, 50, 22, 99, 8], "マリル": [70, 20, 50, 20, 50, 40, 21, 99, 8], "マリルリ": [100, 50, 80, 50, 80, 50, 21, 99, 8], "ウソッキー": [70, 100, 115, 30, 65, 30, 5, 99, 8], "ニョロトノ": [90, 75, 75, 90, 100, 70, 21, 99, 8], "ハネッコ": [35, 35, 40, 35, 55, 50, 22, 2, 8], "ポポッコ": [55, 45, 50, 45, 65, 80, 22, 2, 8], "ワタッコ": [75, 55, 70, 55, 85, 110, 22, 2, 8], "エイパム": [55, 70, 55, 40, 55, 85, 0, 99, 8], "ヒマナッツ": [30, 30, 30, 30, 30, 30, 22, 99, 8], "キマワリ": [75, 75, 55, 105, 85, 30, 22, 99, 8], "ヤンヤンマ": [65, 65, 45, 75, 45, 95, 7, 2, 8], "ウパー": [55, 45, 45, 25, 25, 15, 21, 4, 8], "ヌオー": [95, 85, 85, 65, 65, 35, 21, 4, 8], "エーフィ": [65, 65, 60, 130, 95, 110, 24, 99, 2], "ブラッキー": [95, 65, 110, 60, 130, 65, 27, 99, 2], "ヤミカラス": [60, 85, 42, 85, 42, 91, 27, 2, 8], "ヤドキング": [95, 75, 80, 100, 110, 30, 21, 24, 8], "ムウマ": [60, 60, 60, 85, 85, 85, 8, 99, 8], "アンノーン": [48, 72, 48, 72, 48, 48, 24, 99, 99], "ソーナンス": [190, 33, 58, 33, 58, 33, 24, 99, 8], "キリンリキ": [70, 80, 65, 90, 65, 85, 0, 24, 8], "クヌギダマ": [50, 65, 90, 35, 35, 15, 7, 99, 8], "フォレトス": [75, 90, 140, 60, 60, 40, 7, 9, 8], "ノコッチ": [100, 70, 70, 65, 65, 45, 0, 99, 8], "グライガー": [65, 75, 105, 35, 65, 85, 4, 2, 8], "ハガネール": [75, 85, 200, 55, 65, 30, 9, 4, 8], "ブルー": [60, 80, 50, 40, 40, 30, 0, 99, 12], "グランブル": [90, 120, 75, 60, 60, 45, 0, 99, 12], "ハリーセン": [65, 95, 75, 55, 55, 85, 21, 3, 8], "ハッサム": [70, 130, 100, 55, 80, 65, 7, 9, 8], "ツボツボ": [20, 10, 230, 10, 230, 5, 7, 5, 8], "ヘラクロス": [80, 125, 75, 40, 95, 85, 7, 1, 8], "ニューラ": [55, 95, 55, 35, 75, 115, 27, 25, 8], "ヒメグマ": [60, 80, 50, 50, 50, 40, 0, 99, 8], "リングマ": [90, 130, 75, 75, 75, 55, 0, 99, 8], "マグマッグ": [40, 40, 40, 70, 40, 20, 20, 99, 8], "マグカルゴ": [50, 50, 120, 80, 80, 30, 20, 5, 8], "ウリムー": [50, 50, 40, 30, 30, 50, 25, 4, 8], "イノムー": [100, 100, 80, 60, 60, 50, 25, 4, 8], "サニーゴ": [55, 55, 85, 65, 85, 35, 21, 5, 12], "テッポウオ": [35, 65, 35, 65, 35, 65, 21, 99, 8], "オクタン": [75, 105, 75, 105, 75, 45, 21, 99, 8], "デリバード": [45, 55, 45, 65, 45, 75, 25, 2, 8], "マンタイン": [65, 40, 70, 80, 140, 70, 21, 2, 8], "エアームド": [65, 80, 140, 40, 70, 70, 9, 2, 8], "デルビル": [45, 60, 30, 80, 50, 65, 27, 20, 8], "ヘルガー": [75, 90, 50, 110, 80, 95, 27, 20, 8], "キングドラ": [75, 95, 95, 95, 95, 85, 21, 26, 8], "ゴマゾウ": [90, 60, 60, 40, 40, 40, 4, 99, 8], "ドンファン": [90, 120, 120, 60, 60, 50, 4, 99, 8], "ポリゴン2": [85, 80, 90, 105, 95, 60, 0, 99, 99], "オドシシ": [73, 95, 62, 85, 65, 85, 0, 99, 8], "ドーブル": [55, 20, 35, 20, 45, 75, 0, 99, 8], "バルキー": [35, 35, 35, 35, 35, 35, 1, 99, 0], "カポエラー": [50, 95, 95, 35, 110, 70, 1, 99, 0], "ムチュール": [45, 30, 15, 85, 65, 65, 25, 24, 50], "エレキッド": [45, 63, 37, 65, 55, 95, 23, 99, 4], "ブビィ": [45, 75, 37, 70, 55, 83, 20, 99, 4], "ミルタンク": [95, 80, 105, 40, 70, 100, 0, 99, 50], "ハピナス": [255, 10, 10, 75, 135, 55, 0, 99, 50], "ライコウ": [90, 85, 75, 115, 100, 115, 23, 99, 99], "エンテイ": [115, 115, 85, 90, 75, 100, 20, 99, 99], "スイクン": [100, 75, 115, 90, 115, 85, 21, 99, 99], "ヨーギラス": [50, 64, 50, 45, 50, 41, 5, 4, 8], "サナギラス": [70, 84, 70, 65, 70, 51, 5, 4, 8], "バンギラス": [100, 134, 110, 95, 100, 61, 5, 27, 8], "ルギア": [106, 90, 130, 90, 154, 110, 24, 2, 99], "ホウオウ": [106, 130, 90, 110, 154, 90, 20, 2, 99], "セレビィ": [100, 100, 100, 100, 100, 100, 24, 22, 99] } # めざめるパワーのタイプ決定 p1_mezapa_type, p2_mezapa_type = None, None mezapa_map = { (15, 11, 7, 3): [27, 26, 25, 24], # 毒, 竜, 氷, 超 (14, 10, 6, 2): [23, 22, 21, 20], # 電, 草, 水, 炎 (13, 9, 5, 1): [9, 8, 7, 5], # 鋼, 霊, 虫, 岩 (12, 8, 4, 0): [4, 3, 2, 1] # 地, 毒, 飛, 闘 } for key, values in mezapa_map.items(): if p1_kotai[0] in key: p1_mezapa_type = values[[15, 11, 7, 3, 14, 10, 6, 2, 13, 9, 5, 1, 12, 8, 4, 0].index(p1_kotai[1]) % 3] if p2_kotai[0] in key: p2_mezapa_type = values[[15, 11, 7, 3, 14, 10, 6, 2, 13, 9, 5, 1, 12, 8, 4, 0].index(p2_kotai[1]) % 3] # めざめるパワーの威力決定 p1_mezapa_iryoku, p2_mezapa_iryoku, p1_mezapa_x, p2_mezapa_x, p1_mezapa_y, p2_mezapa_y = 0, 0, 0, 0, 0, 0 for i, value in enumerate([8, 4, 2, 1]): if p1_kotai[i] >= 8: p1_mezapa_x += value if p2_kotai[i] >= 8: p2_mezapa_x += value p1_mezapa_y, p2_mezapa_y = ( p1_kotai[3] % 4, p2_kotai[3] % 4 ) # めざめるパワーの威力計算式 p1_mezapa_iryoku, p2_mezapa_iryoku = ( (p1_mezapa_x * 5 + p1_mezapa_y) // 2 + 31, (p2_mezapa_x * 5 + p2_mezapa_y) // 2 + 31 ) # HP個体値の決定 p1_kotai.insert(0, 0), p2_kotai.insert(0, 0) # kotai[0]にHP個体値を挿入 for i, value in enumerate([8, 4, 2, 1]): # kotai[1]から計算 if p1_kotai[i+1] % 2 == 1: p1_kotai[0] += value if p2_kotai[i+1] % 2 == 1: p2_kotai[0] += value # 種族値表から参照 def set_pokemon(pokemon): return pokemon_id.get(pokemon, (None, None, None, None, None, None, None, None, None)) # HP実数値 def set_h(data, kotai, doryoku, level): return int(((data + kotai) * 2 + doryoku) * level // 100) + level + 10 # ABCDS実数値 def set_abcds(data, kotai, doryoku, level): return int(((data + kotai) * 2 + doryoku) * level // 100) + 5 # 性別判定 (0=F, 1=M, 99=None) def set_sex(data, kotai): return 1 if data <= kotai else 2 if data == 99 else 0 # ランクの超過修正 def rank_base_fix(rank_base): rank_base[:6] = [min(6, max(-6, x)) for x in rank_base[:6]] rank_base[6] = max(-6, min(0, rank_base[6])) rank_base[7] = min(4, max(0, rank_base[7])) return rank_base # 能力変化テーブル (攻撃, 防御, 特攻, 特防, 素早さ) def rank_abcds(rank_base): abcds = { 6: 4, 5: 3.5, 4: 3, 3: 2.5, 2: 2, 1: 1.5, 0: 1, -1: 2/3 if gamemode == 2 else 0.66, -2: 0.5, -3: 0.4, -4: 2/6 if gamemode == 2 else 0.33, -5: 2/7 if gamemode == 2 else 0.28, -6: 0.25 } return abcds.get(rank_base, 0) # 能力変化テーブル (回避率) def rank_eva(rank_base): eva = { 6: 3/9 if gamemode == 2 else 0.33, 5: 3/8 if gamemode == 2 else 0.36, 4: 3/7 if gamemode == 2 else 0.43, 3: 3/6, 2: 3/5, 1: 3/4, 0: 1, -1: 4/3 if gamemode == 2 else 1.33, -2: 5/3 if gamemode == 2 else 1.66, -3: 2, -4: 7/3 if gamemode == 2 else 2.33, -5: 8/3 if gamemode == 2 else 2.66, -6: 3 } return eva.get(rank_base, 0) # 能力変化テーブル (命中率) def rank_accuracy(rank_base): accuracy = { 0: 1, -1: 3/4, -2: 3/5, -3: 3/6, -4: 3/7 if gamemode == 2 else 0.43, -5: 3/8 if gamemode == 2 else 0.36, -6: 3/9 if gamemode == 2 else 0.33 } return accuracy.get(rank_base, 0) # 能力変化テーブル (急所率) def rank_q(rank_base): q = { 4: 128, 3: 76, 2: 64, 1: 32, 0: 17 } return q.get(rank_base, 0) # ランク補正 def rank_hosei(rank_base, your_rank_base, rank_rate, waza_data, pokemon, item, my_27, my_2f): # p1_waza_data[i] rank_base = rank_base_fix(rank_base) # ランク超過修正 rank_rate[:5] = [rank_abcds(r) for r in rank_base[:5]] # 倍率に変換 rank_rate[5] = rank_accuracy(rank_base[6]) * rank_eva(your_rank_base[5]) # 命中率の倍率 if waza_data[5] == '00-B' or waza_data[5] == '27': # 急所+2 rank_base[7] += 2 rank_base[7] += (my_2f > 0) + (item == 605) # きあいだめ・ピントレンズ true, false = 1, 0 if (pokemon, item) in (("カモネギ, 701"), ("ラッキー", 704)): # ながねぎ・ラッキーパンチ rank_base[7] = 2 rank_rate[6] = rank_q(rank_base[7]) rank_base[7] = 0 # 急所を初期化 return rank_base, rank_rate # タイプ相性テーブル, [攻撃, 被タイプ1, 被タイプ2] # [無, 闘, 飛, 毒, 地, 岩, 虫, 霊, 鋼, 炎, 水, 草, 電, 超, 氷, 竜, 悪, None] def type_aisho(waza_data, your_status_base): # p1_waza_data[i] type_table = { 0: [1, 1, 1, 1, 1, 0.5, 1, 0, 0.5, 1, 1, 1, 1, 1, 1, 1, 1, 1], 1: [2, 1, 0.5, 0.5, 1, 2, 0.5, 0, 2, 1, 1, 1, 1, 0.5, 2, 1, 2, 1], 2: [1, 2, 1, 1, 1, 0.5, 2, 1, 0.5, 1, 1, 2, 0.5, 1, 1, 1, 1, 1], 3: [1, 1, 1, 0.5, 0.5, 0.5, 1, 0.5, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1], 4: [1, 1, 0, 2, 1, 2, 0.5, 1, 2, 2, 1, 0.5, 2, 1, 1, 1, 1, 1], 5: [1, 0.5, 2, 1, 0.5, 1, 2, 1, 0.5, 2, 1, 1, 1, 1, 2, 1, 1, 1], 7: [1, 0.5, 0.5, 0.5, 1, 1, 1, 0.5, 0.5, 0.5, 1, 2, 1, 2, 1, 1, 2, 1], 8: [0, 1, 1, 1, 1, 1, 1, 2, 0.5, 1, 1, 1, 1, 2, 1, 1, 0.5, 1], 9: [1, 1, 1, 1, 1, 2, 1, 1, 0.5, 0.5, 0.5, 1, 0.5, 1, 2, 1, 1, 1], 20: [1, 1, 1, 1, 1, 0.5, 2, 1, 2, 0.5, 0.5, 2, 1, 1, 2, 0.5, 1, 1], 21: [1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 0.5, 0.5, 1, 1, 1, 0.5, 1, 1], 22: [1, 1, 0.5, 0.5, 2, 2, 0.5, 1, 0.5, 0.5, 2, 0.5, 1, 1, 1, 0.5, 1, 1], 23: [1, 1, 2, 1, 0, 1, 1, 1, 1, 1, 2, 0.5, 0.5, 1, 1, 0.5, 1, 1], 24: [1, 2, 1, 2, 1, 1, 1, 1, 0.5, 1, 1, 1, 1, 0.5, 1, 1, 0, 1], 25: [1, 1, 2, 1, 2, 1, 1, 1, 0.5, 0.5, 0.5, 2, 1, 1, 0.5, 2, 1, 1], 26: [1, 1, 1, 1, 1, 1, 1, 1, 0.5, 1, 1, 1, 1, 1, 1, 2, 1, 1], 27: [1, 0.5, 1, 1, 1, 1, 1, 2, 0.5, 1, 1, 1, 1, 2, 1, 1, 0.5, 1], 99: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] } type_index = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 7: 6, 8: 7, 9: 8, 20: 9, 21: 10, 22: 11, 23: 12, 24: 13, 25: 14, 26: 15, 27: 16, 99: 17 } return type_table[waza_data[0]][type_index[your_status_base[6]]] * type_table[waza_data[0]][type_index[your_status_base[7]]] # 技表 [タイプ, 威力, 命中率, 追加効果の確率, 王者, 追加効果] waza_id = { "はたく": [0, 40, 255, 0, 1, '00-A'], "メガトンパンチ": [0, 80, 216, 0, 1, '00-A'], "ひっかく": [0, 40, 255, 0, 1, '00-A'], "はさむ": [0, 55, 255, 0, 1, '00-A'], "いあいぎり": [0, 50, 242, 0, 1, '00-A'], "つばさでうつ": [2, 60, 255, 0, 1, '00-A'], "たたきつける": [0, 80, 191, 0, 1, '00-A'], "つるのムチ": [22, 35, 255, 0, 1, '00-A'], "メガトンキック": [0, 120, 191, 0, 1, '00-A'], "つのでつく": [0, 65, 255, 0, 1, '00-A'], "たいあたり": [0, 35, 242, 0, 1, '00-A'], "みずでっぽう": [21, 40, 255, 0, 1, '00-A'], "ハイドロポンプ": [21, 120, 204, 0, 1, '00-A'], "なみのり": [21, 95, 255, 0, 1, '00-A'], "つつく": [2, 35, 255, 0, 1, '00-A'], "ドリルくちばし": [2, 80, 255, 0, 1, '00-A'], "かいりき": [0, 80, 255, 0, 1, '00-A'], "いわおとし": [5, 50, 229, 0, 1, '00-A'], "タマゴばくだん": [0, 100, 191, 0, 1, '00-A'], "たきのぼり": [21, 80, 255, 0, 1, '00-A'], "メガホーン": [7, 120, 216, 0, 1, '00-A'], "からてチョップ": [1, 50, 255, 0, 1, '00-B'], "はっぱカッター": [22, 55, 242, 0, 1, '00-B'], "クラブハンマー": [21, 90, 216, 0, 1, '00-B'], "きりさく": [0, 70, 255, 0, 1, '00-B'], "エアロブラスト": [2, 100, 242, 0, 1, '00-B'], "クロスチョップ": [1, 100, 204, 0, 1, '00-B'], "うたう": [0, 0, 140, 0, 0, '01'], "ねむりごな": [22, 0, 191, 0, 0, '01'], "さいみんじゅつ": [24, 0, 153, 0, 0, '01'], "あくまのキッス": [0, 0, 191, 0, 0, '01'], "キノコのほうし": [22, 0, 255, 0, 0, '01'], "どくばり": [3, 15, 255, 76, 0, '02'], "スモッグ": [3, 20, 178, 102, 0, '02'], "ヘドロこうげき": [3, 65, 255, 76, 0, '02'], "ヘドロばくだん": [3, 90, 255, 76, 0, '02'], "すいとる": [22, 20, 255, 0, 1, '03'], "メガドレイン": [22, 40, 255, 0, 1, '03'], "きゅうけつ": [7, 20, 255, 0, 1, '03'], "ギガドレイン": [22, 60, 255, 0, 1, '03'], "ほのおのパンチ": [20, 75, 255, 25, 0, '04'], "ひのこ": [20, 40, 255, 25, 0, '04'], "かえんほうしゃ": [20, 95, 255, 25, 0, '04'], "だいもんじ": [20, 120, 216, 25, 0, '04'], "れいとうパンチ": [25, 75, 255, 25, 0, '05'], "れいとうビーム": [25, 95, 255, 25, 0, '05'], "ふぶき": [25, 120, 178, 25, 0, '05'], "こなゆき": [25, 40, 255, 25, 0, '05'], "かみなりパンチ": [23, 75, 255, 25, 0, '06'], "のしかかり": [0, 85, 255, 76, 0, '06'], "でんきショック": [23, 40, 255, 25, 0, '06'], "10まんボルト": [23, 95, 255, 25, 0, '06'], "したでなめる": [8, 20, 255, 76, 0, '06'], "でんじほう": [23, 100, 127, 255, 0, '06'], "スパーク": [23, 65, 255, 76, 0, '06'], "りゅうのいぶき": [26, 60, 255, 76, 0, '06'], "じばく": [0, 200, 255, 0, 1, '07'], "だいばくはつ": [0, 250, 255, 0, 1, '07'], "ゆめくい": [24, 100, 255, 0, 0, '08'], "オウムがえし": [2, 0, 0, 0, 0, '09'], "ヨガのポーズ": [24, 0, 0, 0, 0, '0A'], "かくばる": [0, 0, 0, 0, 0, '0A'], "かたくなる": [0, 0, 0, 0, 0, '0B'], "からにこもる": [21, 0, 0, 0, 0, '0B'], "せいちょう": [0, 0, 0, 0, 0, '0D'], "かげぶんしん": [0, 0, 0, 0, 0, '10'], "ちいさくなる": [0, 0, 0, 1, 0, '10'], "スピードスター": [0, 60, 2560, 0, 1, '11-A'], "だましうち": [27, 60, 2560, 0, 1, '11-A'], "あてみなげ": [1, 70, 2560, 0, 1, '11-B'], "なきごえ": [0, 0, 255, 0, 0, '12'], "しっぽをふる": [0, 0, 255, 0, 0, '13'], "にらみつける": [0, 0, 255, 0, 0, '13'], "いとをはく": [7, 0, 242, 0, 0, '14'], "すなかけ": [4, 0, 255, 0, 0, '17'], "えんまく": [0, 0, 255, 0, 0, '17'], "スプーンまげ": [24, 0, 204, 0, 0, '17'], "フラッシュ": [0, 0, 178, 0, 0, '17'], "あまいかおり": [0, 0, 255, 0, 0, '18'], "くろいきり": [25, 0, 0, 0, 0, '19'], "がまん": [0, 0, 255, 0, 1, '1A'], "あばれる": [0, 90, 255, 0, 1, '1B'], "はなびらのまい": [22, 70, 255, 0, 1, '1B'], "げきりん": [26, 90, 255, 0, 1, '1B'], "ふきとばし": [0, 0, 255, 0, 0, '1C'], "ほえる": [0, 0, 255, 0, 0, '1C'], "おうふくビンタ": [0, 15, 216, 0, 1, '1D'], "れんぞくパンチ": [0, 18, 216, 0, 1, '1D'], "みだれづき": [0, 15, 216, 0, 1, '1D'], "ミサイルばり": [7, 14, 216, 0, 1, '1D'], "とげキャノン": [0, 20, 255, 0, 1, '1D'], "たまなげ": [0, 15, 216, 0, 1, '1D'], "みだれひっかき": [0, 18, 204, 0, 1, '1D'], "ボーンラッシュ": [4, 25, 204, 0, 1, '1D'], "テクスチャー": [0, 0, 0, 0, 0, '1E'], "まわしげり": [1, 60, 216, 76, 0, '1F'], "ずつき": [0, 70, 255, 76, 0, '1F'], "かみつく": [27, 60, 255, 76, 0, '1F'], "けたぐり": [1, 50, 229, 76, 0, '1F'], "ホネこんぼう": [4, 65, 216, 25, 0, '1F'], "いわなだれ": [5, 75, 229, 76, 0, '1F'], "ひっさつまえば": [0, 80, 229, 25, 0, '1F'], "じこさいせい": [0, 0, 0, 0, 0, '20-A'], "タマゴうみ": [0, 0, 0, 0, 0, '20-A'], "ミルクのみ": [0, 0, 0, 0, 0, '20-A'], "ねむる": [24, 0, 0, 0, 0, '20-B'], "どくどく": [3, 0, 216, 0, 0, '21'], "ネコにこばん": [0, 40, 255, 0, 1, '22'], "ひかりのかべ": [24, 0, 0, 0, 0, '23'], "トライアタック": [0, 80, 255, 51, 0, '24'], "ハサミギロチン": [0, 0, 76, 0, 0, '26'], "つのドリル": [0, 1, 76, 0, 0, '26'], "じわれ": [4, 1, 76, 0, 0, '26'], "かまいたち": [0, 80, 191, 0, 1, '27'], "いかりのまえば": [0, 1, 229, 0, 1, '28'], "ソニックブーム": [0, 20, 229, 0, 1, '29'], "りゅうのいかり": [26, 40, 255, 0, 1, '29'], "しめつける": [0, 15, 191, 0, 0, '2A'], "まきつく": [0, 15, 216, 0, 0, '2A'], "ほのおのうず": [20, 15, 178, 0, 0, '2A'], "からではさむ": [21, 35, 191, 0, 0, '2A'], "うずしお": [21, 15, 178, 0, 0, '2A'], "にどげり": [1, 30, 255, 0, 1, '2C'], "ホネブーメラン": [4, 50, 229, 0, 1, '2C'], "とびげり": [1, 70, 242, 0, 1, '2D'], "とびひざげり": [1, 85, 229, 0, 1, '2D'], "しろいきり": [25, 0, 0, 0, 0, '2E'], "きあいだめ": [0, 0, 0, 0, 0, '2F'], "とっしん": [0, 90, 216, 0, 1, '30-A'], "すてみタックル": [0, 120, 255, 0, 1, '30-A'], "じごくぐるま": [1, 80, 204, 0, 1, '30-A'], "わるあがき": [0, 50, 255, 0, 1, '30-B'], "ちょうおんぱ": [0, 0, 140, 0, 0, '31'], "あやしいひかり": [8, 0, 255, 0, 0, '31'], "てんしのキッス": [0, 0, 191, 0, 0, '31'], "つるぎのまい": [0, 0, 0, 0, 0, '32'], "バリアー": [24, 0, 0, 0, 0, '33'], "とける": [3, 0, 0, 0, 0, '33'], "こうそくいどう": [24, 0, 0, 0, 0, '34'], "ドわすれ": [24, 0, 0, 0, 0, '36'], "へんしん": [0, 0, 0, 0, 0, '39'], "あまえる": [0, 0, 255, 0, 0, '3A'], "いやなおと": [0, 0, 216, 0, 0, '3B'], "わたほうし": [22, 0, 216, 0, 0, '3C'], "こわいかお": [0, 0, 229, 0, 0, '3C'], "リフレクター": [24, 0, 0, 0, 0, '41'], "どくのこな": [3, 0, 191, 0, 0, '42'], "どくガス": [3, 0, 140, 0, 0, '42'], "しびれごな": [22, 0, 191, 0, 0, '43'], "でんじは": [23, 0, 255, 0, 0, '43'], "へびにらみ": [0, 0, 191, 0, 0, '43'], "オーロラビーム": [25, 65, 255, 25, 0, '44'], "ようかいえき": [3, 40, 255, 25, 0, '45'], "アイアンテール": [9, 100, 191, 76, 0, '45'], "いわくだき": [1, 20, 255, 127, 0, '45'], "バブルこうせん": [21, 65, 255, 25, 0, '46'], "からみつく": [0, 10, 255, 25, 0, '46'], "あわ": [21, 20, 255, 25, 0, '46'], "こごえるかぜ": [25, 55, 242, 255, 0, '46'], "サイコキネシス": [24, 90, 255, 25, 0, '48'], "かみくだく": [27, 80, 255, 51, 0, '48'], "シャドーボール": [8, 80, 255, 51, 0, '48'], "どろかけ": [4, 20, 255, 255, 0, '49'], "オクタンほう": [21, 65, 216, 127, 0, '49'], "ゴッドバード": [2, 140, 229, 0, 1, '4B'], "サイケこうせん": [24, 65, 255, 25, 0, '4C'], "ねんりき": [24, 50, 255, 25, 0, '4C'], "ピヨピヨパンチ": [0, 70, 255, 51, 0, '4C'], "ばくれつパンチ": [1, 100, 127, 255, 0, '4C'], "ダブルニードル": [7, 25, 255, 51, 1, '4D'], "みがわり": [0, 0, 0, 0, 0, '4F'], "はかいこうせん": [0, 150, 229, 0, 0, '50'], "いかり": [0, 20, 255, 0, 1, '51'], "ものまね": [0, 0, 0, 0, 0, '52'], "ゆびをふる": [0, 0, 255, 0, 0, '53'], "やどりぎのタネ": [22, 0, 229, 0, 0, '54'], "はねる": [0, 0, 0, 0, 0, '55'], "かなしばり": [0, 0, 140, 0, 0, '56'], "ちきゅうなげ": [1, 1, 255, 0, 1, '57'], "ナイトヘッド": [8, 1, 255, 0, 1, '57'], "サイコウェーブ": [24, 1, 204, 0, 1, '58'], "カウンター": [1, 1, 255, 0, 1, '59'], "アンコール": [0, 0, 255, 0, 0, '5A'], "いたみわけ": [0, 0, 255, 0, 0, '5B'], "いびき": [0, 40, 255, 76, 1, '5C'], "テクスチャー2": [0, 0, 255, 0, 0, '5D'], "こころのめ": [0, 0, 255, 0, 0, '5E'], "ロックオン": [0, 0, 255, 0, 0, '5E'], "スケッチ": [0, 0, 0, 0, 0, '5F'], "ねごと": [0, 0, 0, 0, 0, '61'], "みちづれ": [8, 0, 0, 0, 0, '62'], "じたばた": [0, 1, 255, 0, 1, '63'], "きしかいせい": [1, 1, 255, 0, 1, '63'], "うらみ": [8, 0, 255, 0, 0, '64'], "みねうち": [0, 40, 255, 0, 1, '65'], "いやしのすず": [0, 0, 0, 0, 0, '66'], "でんこうせっか": [0, 40, 255, 0, 1, '67'], "マッハパンチ": [1, 40, 255, 0, 1, '67'], "しんそく": [0, 80, 255, 0, 1, '67'], "トリプルキック": [1, 10, 229, 0, 1, '68'], "どろぼう": [27, 40, 255, 255, 1, '69'], "クモのす": [7, 0, 0, 0, 0, '6A'], "くろいまなざし": [0, 0, 0, 0, 0, '6A'], "あくむ": [8, 0, 0, 0, 0, '6B'], "かえんぐるま": [20, 60, 255, 25, 0, '6C'], "のろい": [99, 0, 0, 0, 0, '6D'], "まもる": [0, 0, 0, 0, 0, '6F'], "みきり": [1, 0, 0, 0, 0, '6F'], "まきびし": [4, 0, 0, 0, 0, '70'], "みやぶる": [0, 0, 255, 0, 0, '71'], "ほろびのうた": [0, 0, 0, 0, 0, '72'], "すなあらし": [5, 0, 0, 0, 0, '73'], "こらえる": [0, 0, 0, 0, 0, '74'], "ころがる": [5, 30, 229, 0, 1, '75'], "いばる": [0, 0, 229, 0, 0, '76'], "れんぞくぎり": [7, 10, 242, 0, 1, '77'], "メロメロ": [0, 0, 255, 0, 0, '78'], "おんがえし": [0, 102, 255, 0, 1, '79'], "プレゼント": [0, 1, 229, 0, 1, '7A'], "やつあたり": [0, 102, 255, 0, 1, '7B'], "しんぴのまもり": [0, 0, 0, 0, 0, '7C'], "せいなるほのお": [20, 100, 242, 127, 0, '7D'], "マグニチュード": [4, 1, 255, 0, 1, '7E'], "バトンタッチ": [0, 0, 0, 0, 0, '7F'], "おいうち": [27, 40, 255, 0, 1, '80'], "こうそくスピン": [0, 20, 255, 0, 1, '81'], "あさのひざし": [0, 0, 0, 0, 0, '84'], "こうごうせい": [22, 0, 0, 0, 0, '85'], "つきのひかり": [0, 0, 0, 0, 0, '86'], "めざめるパワー": [0, 1, 255, 0, 1, '87'], "あまごい": [21, 0, 0, 0, 0, '88'], "にほんばれ": [20, 0, 0, 0, 0, '89'], "はがねのつばさ": [9, 70, 229, 25, 0, '8A'], "メタルクロー": [9, 50, 242, 25, 0, '8B'], "げんしのちから": [5, 60, 255, 25, 0, '8C'], "はらだいこ": [0, 0, 0, 0, 0, '8E'], "じこあんじ": [0, 0, 0, 0, 0, '8F'], "ミラーコート": [24, 1, 255, 0, 1, '90'], "ロケットずつき": [0, 100, 255, 0, 1, '91'], "たつまき": [26, 40, 255, 51, 0, '92'], "じしん": [4, 100, 255, 0, 0, '93'], "みらいよち": [24, 80, 229, 0, 0, '94'], "かぜおこし": [2, 40, 255, 0, 0, '95'], "ふみつけ": [0, 65, 255, 76, 0, '96'], "ソーラービーム": [22, 120, 255, 0, 1, '97'], "かみなり": [23, 120, 178, 76, 0, '98'], "テレポート": [24, 0, 0, 0, 0, '99'], "ふくろだたき": [27, 10, 255, 0, 1, '9A'], "そらをとぶ": [2, 70, 242, 0, 1, '9B-A'], "あなをほる": [4, 60, 255, 0, 1, '9B-B'], "まるくなる": [0, 0, 0, 0, 0, '9C'] } # 技表から参照 def set_waza(waza): return waza_id.get(waza, (None, None, None, None, None, None)) # 使う技のデータを格納 def set_waza_data(waza): # p1_waza return [set_waza(x) for x in waza] # 持ち物を格納 def set_item(my_item): item = { "なし": 999, "きのみ": 100, "きのみジュース": 200, "おうごんのみ": 300, "きせきのみ": 400, "ふしぎなきのみ": 401, "やけたきのみ": 402, "どくけしのみ": 403, "にがいきのみ": 404, "はっかのみ": 405, "まひなおしのみ": 406, "こおったきのみ": 407, "はかいのいでんし": 500, "おうじゃのしるし": 600, "きあいのハチマキ": 601, "せんせいのツメ": 602, "たべのこし": 603, "ひかりのこな": 604, "ピントレンズ": 605, "でんきだま": 700, "ながねぎ": 701, "ふといホネ": 702, "メタルパウダー": 703, "ラッキーパンチ": 704, "ピンクのリボン": 0, "みずたまリボン": 0, "くろおび": 1, "するどいくちばし": 2, "どくばり": 3, "やわらかいすな": 4, "かたいいし": 5, "ぎんのこな": 7, "のろいのおふだ": 8, "メタルコート": 9, "もくたん": 20, "しんぴのしずく": 21, "きせきのタネ": 22, "じしゃく": 23, "まがったスプーン": 24, "とけないこおり": 25, "りゅうのウロコ": 26, "りゅうのキバ": 26, "くろいメガネ": 27 } return item.get(my_item, 999) # 持ち物の計算式 def calc_item(pokemon, item, status_now): if pokemon == "ピカチュウ" and item == 700: status_now[2] *= 2 elif pokemon in ("カラカラ","ガラガラ") and item == 702: status_now[0] *= 2 elif pokemon == "メタモン" and item == 703: status_now[1] *= int(status_now[1] * 1.5) status_now[3] *= int(status_now[3] * 1.5) return status_now # オーバーフローの計算式 def calc_overflow(my_41, my_23, pokemon, item, status_now): if my_41 > 0 and status_now[1] >= 1024: status_now[1] %= 1024 if my_23 > 0 and status_now[3] >= 1024: status_now[3] %= 1024 if pokemon == "ピカチュウ" and item == 700 and status_now[2] >= 1024: status_now[2] %= 1024 elif pokemon in ("カラカラ","ガラガラ") and item == 702 and status_now[0] >= 1024: status_now[0] %= 1024 elif pokemon == "メタモン" and item == 703: if status_now[1] >= 1024: status_now[1] %= 1024 if status_now[3] >= 1024: status_now[3] %= 1024 return status_now # 実数値の計算式 def calc_status_now(p1_status_now, p2_status_now): # 通常時のステータスの決定 for i in range(5): p1_status_now[i] = int(p1_status_base[i+1] * p1_rank_rate[i]) # 攻撃[i+1]から p2_status_now[i] = int(p2_status_base[i+1] * p2_rank_rate[i]) # 急所時のステータスの再計算 if p1_damage_hosei[1] == 2 and (p1_rank_base[0] <= p2_rank_base[1]): p1_status_now[0] = p1_status_base[1] p2_status_now[1] = p2_status_base[2] if p1_damage_hosei[1] == 2 and (p1_rank_base[3] <= p2_rank_base[4]): p1_status_now[2] = p1_status_base[3] p2_status_now[3] = p2_status_base[4] if p2_damage_hosei[1] == 2 and (p2_rank_base[0] <= p1_rank_base[1]): p2_status_now[0] = p2_status_base[1] p1_status_now[1] = p1_status_base[2] if p2_damage_hosei[1] == 2 and (p2_rank_base[3] <= p1_rank_base[4]): p2_status_now[2] = p2_status_base[3] p1_status_now[3] = p1_status_base[4] # 持ち物の算入 p1_status_now = calc_item(p1_pokemon, p1_item, p1_status_now) p2_status_now = calc_item(p2_pokemon, p2_item, p2_status_now) # 急所 p1_status_now[6] = p1_rank_rate[6] p2_status_now[6] = p2_rank_rate[6] # 壁の算入 # 急所かつ攻撃<=防御ならmy火傷とyour壁を無視 if not(p1_damage_hosei[1] == 2 and (p1_rank_base[0] <= p2_rank_base[1])): if p2_41 > 0: p2_status_now[1] *= 2 if p1_ailment[5] > 0: # 火傷の参入 p1_status_now[0] //= 2 if not(p1_damage_hosei[1] == 2 and (p1_rank_base[3] <= p2_rank_base[4])): if p2_23 > 0: p2_status_now[3] *= 2 if not(p2_damage_hosei[1] == 2 and (p2_rank_base[0] <= p1_rank_base[1])): if p1_41 > 0: p1_status_now[1] *= 2 if p2_ailment[5] > 0: p2_status_now[0] //= 2 if not(p2_damage_hosei[1] == 2 and (p2_rank_base[3] <= p1_rank_base[4])): if p1_23 > 0: p1_status_now[3] *= 2 # 麻痺の算入 if p1_ailment[4] > 0: p1_status_now[4] //= 4 if p2_ailment[4] > 0: p2_status_now[4] //= 4 # オーバーフロー・256以上を圧縮 if gamemode == 0: p1_status_now = calc_overflow(p1_41, p1_23, p1_pokemon, p1_item, p1_status_now) p2_status_now = calc_overflow(p2_41, p2_23, p2_pokemon, p2_item, p2_status_now) for i in range(5): # オーバーフローに該当しない1024以上を997にする if p1_status_now[i] >= 1024: p1_status_now[i] = 997 if p2_status_now[i] >= 1024: p2_status_now[i] = 997 for my_x, your_x in [(0, 1), (1, 0), (2, 3), (3, 2)]: # 片方が256以上で両者のステーテスを1/4圧縮 if p1_status_now[my_x] >= 256 or p2_status_now[your_x] >= 256: p1_status_now[my_x] //= 4 p2_status_now[your_x] //= 4 # オーバーフローなし else: for i in range(5): # ABCDSの999以上を997にする if p1_status_now[i] > 999: p1_status_now[i] = 997 if p2_status_now[i] > 999: p2_status_now[i] = 997 for my_x, your_x in [(0, 1), (1, 0), (2, 3), (3, 2)]: if p1_status_now[my_x] >= 256 or p2_status_now[your_x] >= 256: p1_status_now[my_x] //= 4 p2_status_now[your_x] //= 4 return p1_status_now, p2_status_now # 混乱時の実数値の再計算 def calc_status_konran_now(status_now, status_base, rank_rate, pokemon, item, my_41, ailment, my_23): # ステータスの決定 for i in range(2): status_now[i] = int(status_base[i+1] * rank_rate[i]) # 攻撃[i+1]から # 持ち物の参入 status_now = calc_item(pokemon, item, status_now) # 壁の参入 if my_41 > 0: status_now[1] *= 2 if ailment[5] > 0: # 火傷の参入 status_now[0] //= 2 # オーバーフロー・256以上を圧縮 if gamemode == 0: status_now = calc_overflow(my_41, my_23, pokemon, item, status_now) for i in range(2): # オーバーフローに該当しない1024以上を997にする if status_now[i] >= 1024: status_now[i] = 997 if status_now[0] >= 256 or status_now[1] >= 256: # 攻撃か防御が256以上で1/4圧縮 status_now[0] //= 4 status_now[1] //= 4 # オーバーフローなし else: for i in range(2): # ABCDSの999以上を997にする if status_now[i] > 999: status_now[i] = 997 if status_now[0] >= 256 or status_now[1] >= 256: # 攻撃か防御が256以上で1/4圧縮 status_now[0] //= 4 status_now[1] //= 4 return status_now # 乱数の生成 randval = random.randrange # (x,y)のyは実数+1 randbit = random.getrandbits # 1〜256は(8)+1で表現 def rand39(): # 217-255 while True: r = randbit(6) if r < 39: return r + 217 def randx(start, stop, bit): # 2^xでない乱数を生成 # 1-10は(1,11,4)で表現 while True: r = randbit(bit) + start if r < stop: return r # ダメージ補正の順序 # 強化アイテム[0] def damage_hosei_kyouka_item(waza_data, item): # p1_waza_data[i] return 1.1 if waza_data[0] == item else 1 # 急所判定[1] def damage_hosei_critical(rank_rate): # p1_rank_rate return 2 if randbit(8) + 1 <= rank_rate[6] else 1 # トリプルキックの連続補正[2] def damage_hosei_triple_kick(my_68, waza_data): # p1_waza_data[i] return my_68 if waza_data[5] == '68' else 1 # 天気補正[3] (あまごい・にほんばれ) def damage_hosei_tenki(waza_data): # p1_waza_data[i] return ({20: 0.5, 21: 1.5}.get(waza_data[0], 1) if p_88 > 0 else {20: 1.5, 21: 0.5}.get(waza_data[0], 1) if p_89 > 0 else 1) # 天気補正[4] (ソーラービーム) def damage_hosei_97(waza_data): # p1_waza_data[i] return 0.5 if p_88 > 0 and waza_data[5] == '97' else 1 # タイプ一致[5] def type_icchi(waza_data, status_base): # p1_waza_data[i] return 1.5 if waza_data[0] in status_base[6:8] else 1 # タイプ相性[6] # type_aisho(waza_data, your_status_base) # p1_waza_data[i] # ターン連続系補正[7] def damage_hosei_renzoku(waza_data, my_75, my_9c, my_77): # p1_waza_data[i] if waza_data[5] == '75': return 1 << (my_75 + my_9c) elif waza_data[5] == '77': return 1 << my_77 return 1 # ダメージ乱数[8] def damage_hosei_ransu(): return rand39() / 255 # 穴を掘る状態[9] def damage_hosei_9bb(your_9bb, waza_data): # p1_waza_data[i] return 1 if your_9bb != 1 or (waza_data[0] == '4' and waza_data[5] == '26') else 2 if your_9bb == 1 and (waza_data[5] in ('7E','93')) else 0 # 空を飛ぶ状態[10] def damage_hosei_9ba(your_9ba, waza_data): # p1_waza_data[i] return 1 if your_9ba != 1 or waza_data[5] == '98' else 2 if your_9ba == 1 and (waza_data[5] in ('92','95')) else 0 # 小さくなる状態[11] def damage_hosei_10(your_10, waza_data): # p1_waza_data[i] return 2 if your_10 > 0 and waza_data[3] == '1' and waza_data[5] == '96' else 1 # 小さくなるを追加効果の確率に1と仮置きして影分身と区別 # ダメージ計算式 def calc_damage(waza_data, level, status_now, your_status_now, damage_hosei): # p1_waza_data[i] x, y = (0, 1) if 0 <= waza_data[0] <= 9 or waza_data[0] == 99 else (2, 3) # 攻撃と特殊の分岐 base = ((level * 2 // 5 + 2) * waza_data[1] * status_now[x]) // your_status_now[y] base = base // 50 base = int(base * damage_hosei[0] * damage_hosei[1]) + 2 # 定数項+2 for i in range(2, 12): base *= damage_hosei[i] base = int(base) return base # 混乱のダメージ計算式 def calc_konran_damage(level, status_now, damage_hosei): # calc_status_konran_nowを前に書く base = ((level * 2 // 5 + 2) * 40 * status_now[0] // status_now[1]) base = base // 50 + 2 return int(base * damage_hosei[8] if gamemode == 2 else base) # PBSはダメージ乱数を含む # プレゼントのダメージ計算式 def calc_present_damage(waza_data, status_base, your_status_base, damage_hosei): # p1_waza_data[i] my_x = status_base[6 if status_base[7] == 99 else 7] # タイプ2が99ならタイプ1を参照 your_x = your_status_base[6 if your_status_base[7] == 99 else 7] my_x = 1 if my_x == 0 else my_x your_x = 1 if your_x == 0 else your_x base = (waza_data[1] * (your_x * 2 // 5 + 2) * (10 * damage_hosei[6]) // my_x) // 50 base = int(base * damage_hosei[0] * damage_hosei[1]) + 2 # 定数項+2 for i in range(2, 12): base *= damage_hosei[i] base = int(base) return base # プレゼント(PBS)の計算式 def calc_present_damage_pbs(waza_data, status_base, your_status_base, ailment, rank_rate, your_rank_rate, damage_hosei, your_41): # wa_da[i] my_x = status_base[6 if status_base[7] == 99 else 7] # タイプ2が99ならタイプ1を参照 your_x = your_status_base[6 if your_status_base[7] == 99 else 7] # 防御側のタイプ2補正 # 火傷 # 攻撃ランクは正のみ # 0 除算は計算せず 1 に置換 x = 1 if your_x == 0 else max(1, int(int(your_x * (0.5 if ailment[5] > 0 else 1)) * max(rank_rate[0], 1))) # 攻撃側のタイプ2補正 #攻撃ランクは負のみ #your防御ランクは全て # 0 除算は計算せず 1 に置換 y = 1 if my_x == 0 else max(1, int(my_x // (rank_rate[0] if rank_rate[0] < 1 else 1) * your_rank_rate[1])) z = 2 if your_41 > 0 else 1 # リフレクター damage_hosei[6] = min(damage_hosei[6], 1) # 等倍以上にならない base = int(((waza_data[1] * x) * 1 // (2 - damage_hosei[6])) // y * z // (50 / 6)) base = int(base * damage_hosei[0] * damage_hosei[1]) + 2 # 定数項+2 for i in range(2, 12): base *= damage_hosei[i] base = int(base) return base # 見破るの判定 def calc_71(waza_data, your_status_base, damage_hosei, rank_base, your_rank_base, rank_rate, your_item): # waza_data[i] if waza_data[0] in (0,1) and any(x == 8 for x in your_status_base[6:8]): # 無・闘の技が霊に有効 damage_hosei[6] = 1 if rank_base[6] < your_rank_base[5]: # 命中率 0 else 127 if p_89 > 0 else waza_data[2] return waza_data # 命中の計算式と判定 def calc_accuracy(waza_data, rank_rate, your_item): # waza_data[i] base = int(waza_data[2] * rank_rate[5]) - (20 if your_item == 604 else 0) # 光の粉 return 1 if randbit(8) + 1 <= (256 if base == 255 else base) else 0 # 1なら命中 # 追加効果の計算式と判定 def calc_secondary(waza_data): # waza_data[i] # PBSのみ補正 # 1なら命中 return 1 if randbit(8) + 1 <= (256 if gamemode == 2 and waza_data[3] == 255 else waza_data[3]) else 0 # 実数値の計算 def calc_status_base(data, kotai, doryoku, level): # HP, A, B, C, D, S, タイプ1, タイプ2, 性別 return [ set_h(data[0], kotai[0], doryoku[0], level), set_abcds(data[1], kotai[1], doryoku[1], level), set_abcds(data[2], kotai[2], doryoku[2], level), set_abcds(data[3], kotai[4], doryoku[4], level), set_abcds(data[4], kotai[4], doryoku[4], level), set_abcds(data[5], kotai[3], doryoku[3], level), data[6], data[7], set_sex(data[8], kotai[1]) ] # HP割合を計算 def calc_hp_div(base): # 2, 4, 8, 16 return [base // (1 << i) for i in range(1, 5)] # じたばたの割合を計算 def calc_hp_63(base): # 31,40はPBSの割合 ratios = [(2, 48), (5, 48), (10, 48), (17, 48), (33, 48), (31, 40)] return [base * num // denom for num, denom in ratios] # 技の優先度を指定 def waza_yusendo(waza_data): # p1_waza_data[i] return 2 if waza_data[5] in ('6F', '74') else 1 if waza_data[5] == '67' else -1 if waza_data[5] in ('11-B', '1C', '59', '90') else 0 # ダメージ補正の計算の格納 def set_damage_hosei(damage_hosei, waza_data, item, rank_rate, my_68, status_base, your_status_base, my_75, my_9c, my_77, your_9bb, your_9ba, your_10): return [ damage_hosei_kyouka_item(waza_data, item), damage_hosei_critical(rank_rate), damage_hosei_triple_kick(my_68, waza_data), damage_hosei_tenki(waza_data), damage_hosei_97(waza_data), type_icchi(waza_data, status_base), type_aisho(waza_data, your_status_base), damage_hosei_renzoku(waza_data, my_75, my_9c, my_77), damage_hosei_ransu(), damage_hosei_9bb(your_9bb, waza_data), damage_hosei_9ba(your_9ba, waza_data), damage_hosei_10(your_10, waza_data), ] # 破壊の遺伝子の処理 def set_idenshi(item, konran, rank_base): if item == 500: konran = 255 if gamemode == 0 else random.getrandbits(2) + 2 rank_base[0] += 2 # 攻撃ランク+2 item = 999 # 消費 return item, konran, rank_base # 混乱自傷ダメージと身代わりの判定 def calc_konran_damage_4f(my_4f, status_base, base): if my_4f <= 0: status_base[0] -= base else: # 身代わりが消えた際の超過分を省く my_4f = max(0, my_4f - base) return my_4f, status_base # うたう # 眠り付与 # 2-7, 2-4, 2-5 def dept_01(your_4f, your_7c, your_ailment): # your_ailment if your_4f <= 0 and your_7c <= 0 and not any(your_ailment): your_ailment[3] = randx(2,8,3) if gamemode == 0 else randx(2,5,2) if gamemode == 1 else randbit(2) + 2 return your_ailment # どくばり # 毒付与 def dept_02(your_4f, your_7c, your_status_base, your_ailment, waza_data): # 毒・鋼は無効 # your_ailment, waza_data[i] if your_4f <= 0 and your_7c <= 0 and all(x not in (3,9) for x in your_status_base[6:8]) and not any(your_ailment) and calc_secondary(waza_data) == 1: your_ailment[2] = 1 return your_ailment # すいとる # HPドレイン def dept_03(your_4f, damage, status_base, max, bit): # bit[i] if your_4f <= 0: # 身代わり・守る判定 x = damage // 2 # ダメージの1/2回復 status_base[0] = min(status_base[0] + x, max) # 最大HP超えない else: # 身代わりに攻撃無効 damage, bit = 0, 0 return damage, bit, status_base # ほのおのパンチ # かえんぐるま # せいなるほのお # 火傷付与 def dept_04(your_4f, your_7c, your_status_base, your_ailment, waza_data): # 炎は無効 # your_ailment, waza_data[i] if your_4f <= 0 and your_7c <= 0 and all(x != 20 for x in your_status_base[6:8]) and calc_secondary(waza_data) == 1: if not any(your_ailment): your_ailment[5] = 1 elif your_ailment[0] != 0: # your凍りを解除 your_ailment[0] = 0 return your_ailment # れいとうパンチ # 凍り付与 def dept_05(your_4f, your_7c, your_status_base, your_ailment, waza_data): # 氷は無効 # your_ailment, waza_data[i] if your_4f <= 0 and your_7c <= 0 and p_89 <= 0 and all(x != 25 for x in your_status_base[6:8]) and not any(your_ailment) and calc_secondary(waza_data) == 1: your_ailment[0] = 1 return your_ailment # かみなりパンチ # かみなり # 麻痺付与 def dept_06(your_4f, your_7c, your_ailment, waza_data): # 効果なし無効 # my_damage, your_ailment, waza_data[i] if your_4f <= 0 and your_7c <= 0 and not any(your_ailment) and calc_secondary(waza_data) == 1: your_ailment[4] = 1 return your_ailment # じばく # 瀕死 # ゆめくい # HPドレイン def dept_08(your_4f, your_ailment, damage, status_base, max, bit): # bit[i] if your_4f <= 0 and your_ailment[3] > 0: # 身代わり・守るとyour眠り判定 x = damage // 2 status_base[0] = min(status_base[0] + x, max) # 最大HP超えない else: # 身代わりに攻撃無効 damage, bit = 0, 0 return damage, bit, status_base # オウムがえし # ヨガのポーズ # 攻撃ランク+1 def dept_0a(rank_base): rank_base[0] += 1 return rank_base # かたくなる # 防御ランク+1 def dept_0b(rank_base): rank_base[1] += 1 return rank_base # せいちょう # 特攻ランク+1 def dept_0d(rank_base): rank_base[2] += 1 return rank_base # かげぶんしん # 回避ランク+1 def dept_10(waza_data, rank_base, my_10): # rank_base, my_10 = waza_data[i] rank_base[5] += 1 my_10 if waza_data[3] == '1' else 0 # 小さくなるフラグ return rank_base, my_10 # スピードスター # 必中 # 命中率を2550(x*0.33*0.33-20>256)に設定 # あてみなげ # 必中 # 同上 # なきごえ # your攻撃ランク-1 def dept_12(your_rank_base, your_4f, your_2e): your_rank_base[0] -= 1 if your_4f <= 0 and your_2e <= 0 else 0 return your_rank_base # しっぽをふる # your防御ランク-1 def dept_13(your_rank_base, your_4f, your_2e): your_rank_base[1] -= 1 if your_4f <= 0 and your_2e <= 0 else 0 return your_rank_base # いとをはく # your防御ランク-1 def dept_14(your_rank_base, your_4f, your_2e): your_rank_base[4] -= 1 if your_4f <= 0 and your_2e <= 0 else 0 return your_rank_base # すなかけ # your命中ランク-1 def dept_17(your_rank_base, your_4f, your_2e): your_rank_base[6] -= 1 if your_4f <= 0 and your_2e <= 0 else 0 return your_rank_base # あまいかおり # your回避ランク-1 def dept_18(your_rank_base, your_4f, your_2e): your_rank_base[5] -= 1 if your_4f <= 0 and your_2e <= 0 else 0 return your_rank_base # くろいきり # 急所を除く全員のランクをリセット def dept_19(_, __): # rank_base, your_rank_base # 急所は一時処理につき問題なし return [0] * 8, [0] * 8 # がまん # あばれる # ターン暴走・混乱 # ふきとばし # おうふくビンタ # 連続攻撃 # waza_data[i] def dept_1d(rank_rate, waza_data, level, status_now, your_status_now, damage_hosei, damage): r = randbit(3) + 1 base = 1 if r <= 3 else 2 if r <= 6 else 3 if r == 7 else 4 # 追加回数 for _ in range(base): damage_hosei[1] = damage_hosei_critical(rank_rate) # 急所再抽選 damage_hosei[8] = damage_hosei_ransu() # ダメージ乱数再抽選 damage += calc_damage(waza_data, level, status_now, your_status_now, damage_hosei) return damage # テクスチャー # タイプ変更 def dept_1e(texture, status_base): base = [set_waza(i)[0] for i in texture] base = [x for x in base if x not in (status_base[6], status_base[7], 99)] # myタイプ, 99を選択しない if base: # 空判定を書く必要なし status_base[6] = random.choice(base) status_base[7] = 99 return status_base # まわしげり # 怯み def dept_1f(waza_data): # 効果なし無効 # my_hirumi, my_damage, waza_data[i] return 1 if calc_secondary(waza_data) == 1 else 0 # じこさいせい # 1/2回復 def dept_20a(status_base, div, max): status_base[0] = min(status_base[0] + div[0], max) return status_base # ねむる # 回復 def dept_20b(status_base, max, ailment): if status_base[0] < max: status_base[0] = max ailment = [0, 0, 0, 3, 0, 0] return status_base, ailment # ねこにこばん # どくどく # 猛毒付与 def dept_21(your_4f, your_7c, your_status_base, your_ailment, waza_data, your_21): # your_ailment, your_21 = waza_data[i] if your_4f <= 0 and your_7c <= 0 and all(x not in (3,9) for x in your_status_base[6:8]) and not any(your_ailment): your_ailment[2], your_21 = 1, 1 return your_ailment, your_21 # ひかりのかべ def dept_23(my_23): return 5 if my_23 == 0 else my_23 # ターンの上書き無効 # トライアタック def dept_24(your_4f, your_7c, your_ailment, waza_data): # waza_data[i] if your_4f <= 0 and your_7c <= 0 and calc_secondary(waza_data) == 1: r = randx(1,4,2) if not any(your_ailment): if r == 1: # 凍り付与 your_ailment[0] = 1 elif r == 2: # 麻痺付与 your_ailment[4] = 1 else: # 火傷付与 your_ailment[5] = 1 elif r == 3 and your_ailment[0] != 0: # 火傷付与で凍りなら解除 your_ailment[0] = 0 return your_ailment # ハサミギロチン # 一撃必殺 def dept_26(level, your_level, damage_hosei, waza_data, rank_rate, your_item, your_4f, your_6f, damage, bit, my_26): # waza_data[i], bit[i] if level < your_level or damage_hosei[6] == 0 or your_6f != 0: # レベル未満・効果なし・守るは判定なし return 0, 0, 0 # damage, bit, my_26 waza_data[2] += (level - your_level) * 2 # 命中率をレベル差で2/256分ずつ加算 base = waza_data[2] * rank_rate[5] if gamemode == 0 else waza_data[2] base -= 20 if your_item == 604 else 0 if base >= randbit(8) + 1: return (65535, 1, 1) if your_4f <= 0 else (65535, 1, 0) # 身代わりの破壊はカウンター不可 return (0, 0, 1) if waza_data[1] == 1 else (0, 0, 0) # ハサミギロチンを除く命中判定の外れのみカウンター可 # かまいたち # 2ターン技 # 急所 def dept_27(my_27, waza_data, i, bit, damage): # 前回27選択+行動不能でない+今回命中判定でダメージ # my_27, my_damage return (1, 0) if my_27 == 0 else (0, damage) if i > 0 and waza_data[i - 1][5] == '27' and bit[i - 1] != 2 and bit[i] == 1 else (0, 0) # いかりのまえば # 現在HPの1/2ダメージ def dept_28(your_status_base): return 1 if your_status_base[0] == 1 else your_status_base[0] // 2 # ソニックブーム # 固定ダメージ def dept_29(waza_data): # my_damage = waza_data[i] return waza_data[1] # しめつける # バインド # p1_2a = .. def dept_2a(): return randbit(2) + 2 # にどげり # 2回攻撃 def dept_2c(damage_hosei, rank_rate, damage, waza_data, level, status_now, your_status_now): # waza_data[i] damage_hosei[1] = damage_hosei_critical(rank_rate) # 急所再抽選 damage_hosei[8] = damage_hosei_ransu() # ダメージ乱数再抽選 damage += calc_damage(waza_data, level, status_now, your_status_now, damage_hosei) return damage # とびげり # 外すと自傷 def dept_2d(bit, status_base, waza_data, level, status_now, your_status_now, damage_hosei): if bit == 0: damage = calc_damage(waza_data, level, status_now, your_status_now, damage_hosei) status_base[0] -= damage // (8 if gamemode != 2 else 4) # PBSは1/4 return status_base # しろいきり # 能力変化を受けない def dept_2e(): # my_2e = .. return 1 # きあいだめ # 急所ランク+1 def dept_2f(): # my_2f = .. return 1 # とっしん # 反動ダメージ def dept_30a(your_4f, status_base, damage): if not(gamemode == 2 and your_4f > 0): # 身代わりに与えたダメージは反動しない(PBS) status_base[0] -= damage // 4 return status_base # わるあがき # 反動ダメージ def dept_30b(your_4f, your_status_base, status_base, item, damage, damage_hosei, waza_data, level, status_now, your_status_now): # waza_data[i] damage_hosei[5:7] = 1, 1 # タイプ一致・相性無視 if gamemode == 2: if item == 0: # ノーマル所持による持ち物補正 damage_hosei[0] = 1.1 if 0 in status_base[6:8]: # タイプ一致補正 damage_hosei[5] = 1.5 damage = calc_damage(waza_data, level, status_now, your_status_now, damage_hosei) if gamemode != 2 or (your_4f <= 0 and 8 not in your_status_base[6:8]): # 身代わり・霊への攻撃時は反動なし status_base[0] -= damage // 4 return damage, status_base # ちょうおんぱ # 混乱付与 def dept_31(your_4f, your_7c, your_konran): if your_4f <= 0 and your_7c <= 0 and your_konran <= 0: your_konran = randbit(2) + 2 return your_konran # つるぎのまい # 攻撃ランク+2 def dept_32(rank_base): rank_base[0] += 2 return rank_base # バリアー # 防御ランク+2 def dept_33(rank_base): rank_base[1] += 2 return rank_base # こうそくいどう # 素早さ+2 def dept_34(rank_base): rank_base[4] += 2 return rank_base # ドわすれ # 特防+2 def dept_36(rank_base): rank_base[3] += 2 return rank_base # へんしん # 変身 def dept_39(your_status_base, your_rank_base, your_negoto, your_texture, your_migawari, your_mezapa_type, your_mezapa_iryoku, pokemon, your_pokemon): # status_base[1:10] if gamemode == 1: pokemon = your_pokemon return your_status_base, your_rank_base, your_negoto, your_texture, your_migawari, your_mezapa_type, your_mezapa_iryoku, pokemon # HPは代入しない # あまえる # your攻撃ランク-2 def dept_3a(your_rank_base, your_4f, your_2e): your_rank_base[0] -= 2 if your_4f <= 0 and your_2e <= 0 else 0 return your_rank_base # いやなおと # your防御ランク-2 def dept_3b(your_rank_base, your_4f, your_2e): your_rank_base[1] -= 2 if your_4f <= 0 and your_2e <= 0 else 0 return your_rank_base # わたほうし # your素早さランク-2 def dept_3c(your_rank_base, your_4f, your_2e): your_rank_base[4] -= 2 if your_4f <= 0 and your_2e <= 0 else 0 return your_rank_base # リフレクター # 防御2倍 def dept_41(my_41): return 5 if my_41 <= 0 else my_41 # どくのこな # 毒付与 def dept_42(your_4f, your_7c, your_status_base, your_ailment): # 毒・鋼は無効 # your_ailment if your_4f <= 0 and your_7c <= 0 and all(x not in (3,9) for x in your_status_base[6:8]) and not any(your_ailment): your_ailment[1] = 1 return your_ailment # しびれごな # 麻痺付与 def dept_43(your_4f, your_7c, damage_hosei, your_ailment): # your_ailment if your_4f <= 0 and your_7c <= 0 and damage_hosei[6] != 0 and not any(your_ailment): # 攻撃判定がないためタイプチェック your_ailment[4] = 1 return your_ailment # オーロラビーム # your攻撃-1 def dept_44(your_rank_base, your_4f, your_2e, waza_data): # waza_data[i] your_rank_base[0] -= 1 if your_4f <= 0 and your_2e <= 0 and calc_secondary(waza_data) == 1 else 0 return your_rank_base # ようかいえき # your防御-1 def dept_45(your_rank_base, your_4f, your_2e, damage, waza_data): # waza_data[i] if gamemode != 0: your_rank_base[1] -= 1 if your_4f <= 0 and your_2e <= 0 and calc_secondary(waza_data) == 1 else 0 else: # 身代わりの破壊時に追加効果 your_rank_base[1] -= 1 if (your_4f <= 0 or (your_4f > 0 and your_4f < damage)) and your_2e <= 0 and calc_secondary(waza_data) == 1 else 0 return your_rank_base # バブルこうせん # your素早さ-1 def dept_46(your_rank_base, your_4f, your_2e, waza_data): # waza_data[i] your_rank_base[4] -= 1 if your_4f <= 0 and your_2e <= 0 and calc_secondary(waza_data) == 1 else 0 return your_rank_base # サイコキネシス # your特防-1 def dept_48(your_rank_base, your_4f, your_2e, waza_data): # waza_data[i] your_rank_base[3] -= 1 if your_4f <= 0 and your_2e <= 0 and calc_secondary(waza_data) == 1 else 0 return your_rank_base # どろかけ # your命中率-1 def dept_49(your_rank_base, your_4f, your_2e, waza_data): # waza_data[i] your_rank_base[6] -= 1 if your_4f <= 0 and your_2e <= 0 and calc_secondary(waza_data) == 1 else 0 return your_rank_base # ゴッドバード # 2ターン技 def dept_4b(my_4b, waza_data, i, bit, damage): # 前ターンがnot4B,bit=2は無効 # my_4b, my_damage, bit = waza_data return (1, 0) if my_4b == 0 else (0, damage) if 1 > 0 and waza_data[i - 1][5] == '4B' and bit[i - 1] != 2 and bit[i] == 1 else (0, 0) # サイケこうせん # 混乱付与 def dept_4c(your_4f, your_7c, your_konran, waza_data): # your_konran = .. if your_4f <= 0 and your_7c <= 0 and your_konran <= 0 and calc_secondary(waza_data) == 1: your_konran = randbit(2) + 2 return your_konran # ダブルニードル # 2回攻撃・毒付与 # damage, your_ailment def dept_4d(damage_hosei, rank_rate, damage, waza_data, level, status_now, your_status_now, your_4f, your_7c, your_status_base, your_ailment): # p1_damage, your_ailment = ..waza_data[i] damage_hosei[1] = damage_hosei_critical(rank_rate) # 急所再抽選 damage_hosei[8] = damage_hosei_ransu() # ダメージ乱数再抽選 damage += calc_damage(waza_data, level, status_now, your_status_now, damage_hosei) if your_4f <= 0 and your_7c <= 0 and all(x != 3 for x in your_status_base[6:8]) and not any(your_ailment) and calc_secondary(waza_data) == 1: # 鋼は毒になる your_ailment[1] = 1 return damage, your_ailment # みがわり def dept_4f(my_4f, div, status_base): # my_4f = .. if my_4f <= 0 and div[1] < status_base[0]: my_4f = div[1] status_base[0] -= div[1] return my_4f, status_base # はかいこうせん def dept_50(): # my_50 = .. return 1 # やどりぎのタネ # HP1/8吸収 def dept_54(your_4f, your_54, your_status_base): # your_54 = .. if your_4f <= 0 and all(x != 22 for x in your_status_base[6:8]): your_54 = 1 return your_54 # ちきゅうなげ # 固定ダメージ def dept_57(level): # my_damage = .. return level # サイコウェーブ # 1〜レベルのダメージ def dept_58(my_58): return randval(1, my_58 + 1) # カウンター # 物理技を倍返し def dept_59(your_26, your_damage, my_4f, your_61, damage_hosei, your_waza_data): # your_waza_data[i] if gamemode == 0 and your_26 != 0 and your_61 <= 0 and damage_hosei[6] != 0: # GBの一撃カウンター return 65535 # my_damage if ( your_damage > 0 and my_4f == 0 and your_61 <= 0 and damage_hosei[6] != 0 and (0 <= your_waza_data[0] <= 9 or your_waza_data[0] == 99 or your_waza_data[5] == '87') ): # my身代わり消滅(-1)と残存・your寝言・霊タイプに対して無効,物理とめざパのみ返す return your_damage * 2 return 0 # いたみわけ # HPを折半 def dept_5b(your_4f, status_base, your_status_base, max, your_max): # status_base, your_status_base = .. if your_4f <= 0: # 霊に有効 base = (status_base[0] + your_status_base[0]) // 2 status_base[0] = min(base, max) your_status_base[0] = min(base, your_max) return status_base, your_status_base # いびき # 寝てるときに攻撃 def dept_5c(ailment, waza_data, your_hirumi, damage): # damage, your_hirumi = waza_data[i] return damage, 1 if calc_secondary(waza_data) == 1 else 0 # ねごと # 使う技を上書き def dept_61(negoto): # p1_negoto return random.choice(set_waza_data(negoto)) # じたばた # 威力変動 def dept_63(my_63, status_base, waza_data, max, damage_hosei, damage, level, status_now, your_status_now): # p1_damage = waza_data[i] x = status_base[0] waza_data[1] = ( 200 if x <= my_63[0] else 150 if x <= my_63[1] else 100 if x <= my_63[2] else 80 if x <= my_63[3] else 40 if (gamemode != 2 and x <= my_63[4]) or x <= my_63[5] else 20 ) # 40 = 17/48~33/48 or 17/48~31/40 damage_hosei[1], damage_hosei[8] = 1, 1 # 急所判定・ダメージ乱数なし return calc_damage(waza_data, level, status_now, your_status_now, damage_hosei) # みねうち # HPを1残す def dept_65(your_4f, your_status_base, damage): # my_damage = .. return your_status_base[0] - 1 if your_4f <= 0 and your_status_base[0] <= damage else damage # いやしのすず # 状態異常を治す def dept_66(ailment, konran, my_21): # ailment, konran, my_21 = .. return [0]*6, 0, 0 if gamemode == 2 else my_21 # PBSのみ猛毒ターンをリセット # トリプルキック # 1-3回攻撃 def dept_68(my_68, waza_data, rank_rate, your_item, damage, damage_hosei, level, status_now, your_status_now): # my_damage = waza_data[i] for i in (2, 3): if calc_accuracy(waza_data, rank_rate, your_item) != 1: # 外れたらループ終了 break my_68 = i # ダメージ倍率 damage_hosei[1] = damage_hosei_critical(rank_rate) # 急所判定 damage_hosei[8] = damage_hosei_ransu() # ダメージ乱数判定 damage += calc_damage(waza_data, level, status_now, your_status_now, damage_hosei) return damage, 1 if gamemode != 2 else my_68 # トリプルキックバグ(PBS) # どろぼう # 持ち物を奪う def dept_69(item, your_item, your_4f): # item, your_item = .. return (your_item, item) if item == 999 and your_4f <= 0 else (item, your_item) # あくむ # 悪夢付与 def dept_6b(your_ailment, your_4f, your_6b): # your_6b return 1 if your_ailment[3] != 0 and your_4f <= 0 else your_6b # かえんぐるま # ほのおのパンチに統合 # のろい # 攻防ランク+1・素早さランク-1,霊タイプは呪い def dept_6d(status_base, rank_base, your_4f, div): # rank_base, your_6d = .. if any(x == 8 for x in status_base[6:8]): # 霊タイプ if your_4f <= 0: # 身代わりに無効・守るに有効 status_base[0] -= div[0] # HP1/2消費,瀕死もある return rank_base, 1 return rank_base, 0 # 霊はここで処理を抜ける rank_base[0] += 1; rank_base[1] += 1; rank_base[4] -= 1 return rank_base, 0 # まもる・こらえる # まもるに統合,こらえるのPBSの仕様を無視 def dept_6f(waza_data, i, bit, my_4f, my_6f, your_6f): # my_6f, bit[i], your_6f = waza_data, bit if waza_data[i - 1][5] not in ('6F','74') or bit[i - 1] != 1: my_6f = 0 x = 255 >> my_6f # 255, 127, 63.. if my_4f <= 0 and randbit(8) <= x: # 1/256で失敗 return my_6f + 1, 1, 0 # your守るは失敗につきリセット return 0, 0, your_6f # みやぶる # 霊にノ・闘が命中する def dept_71(): # my_71 = .. # calc_71で処理 return 1 # すなあらし # スリップダメージ def dept_73(): # p_73, p_88, p_89 = .. # 天候を上書き return (5, 0, 0) if p_73 == 0 else (p_73, p_88, p_89) # こらえる # まもるに統合 # ころがる def dept_75(waza_data, i, bit, my_75): # my_75 = waza_data, bit if my_75 > 0: return my_75 + 1 if waza_data[i - 1][5] == '75' and bit[i - 1] == bit[i] == 1 and my_75 < 4 else 0 return 1 if bit[i] == 1 else 0 # いばる # 混乱付与・your攻撃ランク+2 def dept_76(your_rank_base, your_4f, your_7c, your_konran): if your_rank_base[0] < 6: # 身代わりに攻撃アップのみ貫通 your_rank_base[0] += 2 if your_4f <= 0 and your_7c <= 0 and your_konran <= 0: return your_rank_base, randbit(2) + 2 return your_rank_base, your_konran # れんぞくぎり def dept_77(waza_data, i, bit, my_77): # my_77 = waza_data, bit # 1ターン目に[-1]を参照しない,上限なし or 最大2**4まで if my_77 > 0: return my_77 + 1 if waza_data[i - 1][5] == '77' and bit[i - 1] == bit[i] == 1 and (gamemode == 2 or my_77 < 4) else 0 return 1 if bit[i] == 1 else 0 # メロメロ def dept_78(status_base, your_status_base): # your_78 return 1 if status_base[8] + your_status_base[8] == 1 else 0 # おんがえし # 威力102として未実装 # プレゼント def dept_7a( your_4f, waza_data, bit, your_status_base, your_div, your_max, damage, status_base, damage_hosei, level, status_now, your_status_now, ailment, rank_rate, your_rank_rate, your_41 ): # your_status_base, damage = waza_data[i], bit[i].. r = randx(1,11,4) if gamemode == 2 and your_4f > 0: # your身代わりなら固定 waza_data[1] = 40 else: if r <= 8: waza_data[1] = 40 if r <= 4 else 80 if r <= 7 else 120 else: your_status_base[0] = min(your_status_base[0] + (your_div[1] if gamemode != 2 else 80), your_max) if r <= 8 and bit == 1: # 攻撃かつ命中判定のとき damage = ( calc_present_damage(waza_data, status_base, your_status_base, damage_hosei) if gamemode == 0 else calc_damage(waza_data, level, status_now, your_status_now, damage_hosei) if gamemode == 1 else calc_present_damage_pbs(waza_data, status_base, your_status_base, ailment, rank_rate, your_rank_rate, damage_hosei, your_41) ) return your_status_base, damage # やつあたり # 威力102として未実装 # しんぴのまもり # 状態異常にならない def dept_7c(my_7c): return 5 if my_7c <= 0 else my_7c # せいなるほのお # ほのおのパンチに統合 # マグニチュード # 威力ランダム def dept_7e(waza_data, level, status_now, your_status_now, damage_hosei): # damage = waza_data[i] .. r = randx(1,21,5) waza_data[1] = [10, 30, 50, 70, 90, 110, 150][ 0 if r <= 1 else 1 if r <= 3 else 2 if r <= 7 else 3 if r <= 13 else 4 if r <= 17 else 5 if r <= 19 else 6 ] return calc_damage(waza_data, level, status_now, your_status_now, damage_hosei) # バトンタッチ # おいうち # こうそくスピン def dept_81(bit, your_status_base, my_2a, my_54): # 撒き菱を扱わない # 外し・霊に命中で解除しない(0,1),技を出せば解除(2) return (0, 0) if (bit == 1 and all(x != 8 for x in your_status_base[6:8])) or gamemode == 2 else (my_2a, my_54) # あさのひざし・こうごうせい・つきのひかり def dept_84(status_base, div, max): # status_base = .. status_base[0] = min(status_base[0] + (max if p_89 == 1 else div[1] if (p_73 == 1 or p_88 == 1) else div[0]), max) return status_base # めざめるパワー def dept_87(waza_data, mezapa_type, mezapa_iryoku, item, status_base, your_status_base, level, status_now, your_status_now, damage_hosei): # damage = waza_data[i] waza_data[0], waza_data[1] = mezapa_type, mezapa_iryoku damage_hosei[0] = damage_hosei_kyouka_item(waza_data, item) damage_hosei[3] = damage_hosei_tenki(waza_data) damage_hosei[5] = type_icchi(waza_data, status_base) damage_hosei[6] = type_aisho(waza_data, your_status_base) return calc_damage(waza_data, level, status_now, status_now, damage_hosei) # あまごい def dept_88(): # p_73, p_88, p_89 = .. return 0, 5, 0 # にほんばれ def dept_89(): # p_73, p_88, p_89 = .. return 0, 0, 5 # はがねのつばさ # 防御ランク+1 def dept_8a(waza_data, rank_base): # rank_base[1] = waza_data[i] rank_base[1] += 1 if calc_secondary(waza_data) == 1 else 0 return rank_base # メタルクロー # 攻撃ランク+1 def dept_8b(waza_data, rank_base): # rank_base[0] = waza_data[i] rank_base[0] += 1 if calc_secondary(waza_data) == 1 else 0 return rank_base # げんしのちから # 攻撃・防御・特攻・特防・素早さランク+1 def dept_8c(waza_data, rank_base): # rank_base[:5] = waza_data[i] if calc_secondary(waza_data) == 1: for i in range(5): rank_base[i] += 1 return rank_base # はらだいこ # 攻撃ランク最大 def dept_8e(div, status_base, rank_base): if div[0] < status_base[0]: rank_base[0] = 6 status_base[0] -= div[0] elif gamemode == 0: # HP1/2+1でないときA+2(GB) rank_base[0] += 2 return rank_base, status_base # じこあんじ # 急所ランクを除く0以外の能力変化をコピー def dept_8f(rank_base, your_rank_base): for i in range(7): if your_rank_base[i] != 0: rank_base[i] = your_rank_base[i] return rank_base # ミラーコート # 特殊技のダメージを倍に返す def dept_90(your_damage, my_4f, your_61, damage_hosei, your_waza_data): if ( your_damage > 0 and my_4f == 0 and your_61 <= 0 and damage_hosei[6] != 0 and (20 <= your_waza_data[0] <= 27 and your_waza_data[5] != '87') ): # my身代わり消滅(-1)と残存・your寝言・悪タイプに対して無効,特殊のみ返す return your_damage * 2 return 0 # ロケットずつき # 2ターン技 # 防御ランク+1 def dept_91(my_91, rank_base, waza_data, i, bit, damage): # my_91, rank_base, my_damage = waza_data if my_91 == 0: # 前ターンがnot91,bit=2は無効 rank_base[1] += 1 return 1, rank_base, 0 return (0, rank_base, damage) if i > 0 and waza_data[i - 1][5] == '91' and bit[i - 1] != 2 and bit[i] == 1 else (0, rank_base, 0) # たつまき # 怯み付与 def dept_92(waza_data): # your_hirumi = waza_data[i] return 1 if calc_secondary(waza_data) == 1 else 0 # じしん # みらいよち # 2ターン後にダメージ def dept_94(my_94, waza_data, rank_rate, your_item, damage_hosei, damage, level, status_now, your_status_now): # my_94, my_damage = waza_data[i] if my_94 == 0 and calc_accuracy(waza_data, rank_rate, your_item) == 1: # 重複なし・命中判定 damage_hosei[1], damage_hosei[5], damage_hosei[6] = 1, 1, 1 # 急所・一致・相性を無視 return 300000 + calc_damage(waza_data, level, status_now, your_status_now, damage_hosei), 0 # 30万はターンフラグ return my_94, 0 # かぜおこし # ふみつけ # 怯み付与 def dept_96(waza_data): # your_hirumi = waza_data[i] return 1 if calc_secondary(waza_data) == 1 else 0 # ソーラービーム # 2ターン技 def dept_97(my_97, damage): # my_97, my_damage = .. # 晴れ->溜める->雨半減->攻撃->else return (0, damage) if p_89 != 0 else (1, 0) if my_97 == 0 else (0, damage // 2) if p_88 != 0 and my_97 == 1 else (0, damage) if my_97 == 1 else (0, 0) # かみなり # dept_06 に統合 # calc_98で命中処理 # テレポート # ふくろだたき # そらをとぶ # 2ターン技 def dept_9ba(my_9ba, waza_data, i, bit, damage): # 前ターンがnot9B-A,bit=2は無効 # my_9ba, my_damage, = waza_data return (1, 0) if my_9ba == 0 else (0, damage) if i > 0 and waza_data[i - 1][5] == '9B-A' and bit[i - 1] != 2 and bit[i] == 1 else (0, 0) # あなをほる # 2ターン技 def dept_9bb(my_9bb, waza_data, i, bit, damage): # 前ターンがnot9B-B,bit=2は無効 # my_9bb, my_damage = waza_data return (1, 0) if my_9bb == 0 else (0, damage) if i > 0 and waza_data[i - 1][5] == '9B-B' and bit[i - 1] != 2 and bit[i] == 1 else (0, 0) # まるくなる # 防御ランク+1 def dept_9c(rank_base): # rank_base[1], my_9c = .. rank_base[1] += 1 my_9c = 1 return rank_base, my_9c # 勝敗チェック def won_check(status_base, your_count, i): if status_base[0] <= 0: your_count[i] += 1 return True return False # 状態異常のマップ recovery_map = { 0: (400, 402), # 凍り 1: (400, 403), # 毒 2: (400, 403), # 猛毒 3: (400, 405), # 眠り 4: (400, 406), # 麻痺 5: (400, 407), # 火傷 'konran': (400, 404) # 混乱 } # 状態異常の回復 def calc_recovery(ailment, konran, my_6b, item): for idx, items in recovery_map.items(): if idx == 'konran': if konran != 0 and item in items: konran, item = 0, 999 break else: if ailment[idx] != 0 and item in items: ailment[idx], item = 0, 999 if idx == 3: my_6b = 0 # 悪夢解除 break return ailment, konran, my_6b, item # 自分のターン終了時 def my_turn_end(ailment, my_21, my_54, my_6b, my_6d, status_base, your_status_base, div, your_max): if ailment[1] != 0 or ailment[5] != 0: # 毒・火傷 status_base[0] -= div[2] elif ailment[2]: # 猛毒 status_base[0] -= div[3] * ailment[2] * my_21 my_21 += 1 elif my_54 != 0: # 宿り木の種 status_base[0] -= div[2] your_status_base[0] = min(your_status_base[0] + div[3], your_max) elif my_6b != 0 or my_6d != 0: # 悪夢・呪い status_base[0] -= div[1] return status_base, your_status_base # 全体のターン終了時 # 未来予知 def turn_end_94(i, my_94, your_status_base): if my_94 >= 100000: # 2ターン分の減算 my_94 -= 100000 if my_94 < 100000: your_status_base[0] -= my_94 my_94 = 0 return your_status_base, my_94 # 砂嵐 def turn_end_73(p_73, status_base, div): # p_73, status_base # 最後のターンは処理しない if p_73 > 1 and all(x not in (4, 5, 9) for x in status_base[6:8]): # 地面・岩・鋼は受けない status_base[0] -= div[2] return status_base # 暴れる・逆鱗・花びらの舞の解除・混乱の発生 # 滅びの歌 # 締め付ける def turn_end_2a(my_2a, status_base, div): status_base[0] -= div[3] my_2a -= 1 return my_2a, status_base # 食べ残し def turn_end_item603(item, status_base, div, max): status_base[0] = min(status_base[0] + div[3], max) return status_base # 凍り解除 def turn_end_ailment0(ailment): if randbit(8) + 1 <= 25: ailment[0] = 0 return ailment # 眠り解除 def turn_end_ailment3(ailment, my_6b, konran, item): if item in (400, 405): ailment[3], my_6b = 0, 0 if item == 400: konran = 0 item = 999 return ailment, my_6b, konran, item # 木の実 def turn_end_item100(item, status_base, div, max): if status_base[0] < div[0]: status_base[0] = min(status_base[0] + {100: 10, 200: 20, 300: 30}[item], max) item = 999 return item, status_base, div # アンコール # AI みがわり # 身代わり状態の身代わりを条件代替 def ai_4f(ai_base, status_now, your_status_now, my_4f, your_konran, status_base, div, migawari): # waza_data[i] if status_now[4] >= your_status_now[4]: if my_4f > 0 and your_konran == 0: return set_waza_data(migawari)[1] if my_4f <= 0 and status_base[0] > div[1]: return [0, 0, 0, 0, 0, '4F'] elif my_4f <= 0 and status_base[0] > ai_base[0]: # 残 HP x % より大きいと身代わり return [0, 0, 0, 0, 0, '4F'] return set_waza_data(migawari)[0] # AI ねごと # 起きてる際の寝言を条件代替 def ai_61(ai_base, status_base, max, your_status_base, status_now, your_status_now, negoto): # waza_data[i] if status_base[0] >= ai_base[0] or (status_now[4] >= your_status_now[4] and your_status_base[0] <= ai_base[1]): return set_waza_data(negoto)[0] return [24, 0, 0, 0, 0, '20-B'] # ------- # 入力したポケモンの種族値を参照 p1_data = set_pokemon(p1_pokemon) p2_data = set_pokemon(p2_pokemon) # 実数値の格納 (HP, 攻撃, 防御, 特攻, 特防, 素早さ, タイプ1, タイプ2, 性別) p1_status_base = calc_status_base(p1_data, p1_kotai, p1_doryoku, p1_level) p2_status_base = calc_status_base(p2_data, p2_kotai, p2_doryoku, p2_level) # HP割合などを予め計算 p1_max, p2_max = p1_status_base[0], p2_status_base[0] # 最大HP p1_div = calc_hp_div(p1_status_base[0]) # HP割合 2, 4, 8, 16 p2_div = calc_hp_div(p2_status_base[0]) p1_63 = calc_hp_63(p1_status_base[0]) # じたばたの割合 p2_63 = calc_hp_63(p2_status_base[0]) p1_58, p2_58 = int(p1_level * 1.5), int(p2_level * 1.5) # サイコウェーブ # 素早さは能力変化するので計算しない # AI p1_ai_base = [p1_max * p1_ai[0] // 100, p2_max * p1_ai[1] // 100] p2_ai_base = [p2_max * p2_ai[0] // 100, p1_max * p2_ai[1] // 100] # 撒き菱の判定 p1_status_base[0] -= p1_div[2] if p1_70 != 0 and all(x != 2 for x in p1_status_base[6:8]) else 0 p2_status_base[0] -= p2_div[2] if p2_70 != 0 and all(x != 2 for x in p2_status_base[6:8]) else 0 # ステータスを格納 input_copy = ( p1_pokemon, p1_level, p1_kotai[:], p1_doryoku[:], p1_item, p1_waza[:], p2_pokemon, p2_level, p2_kotai[:], p2_doryoku[:], p2_item, p2_waza[:], p1_advantage[:], p1_negoto[:], p1_texture[:], p1_migawari[:], p2_advantage[:], p2_negoto[:], p2_texture[:], p2_migawari[:], p1_status_base[:], p1_mezapa_type, p1_mezapa_iryoku, p2_status_base[:], p2_mezapa_type, p2_mezapa_iryoku ) # ターンの長さを取得 length = len(p1_waza) # 勝率を格納 p1_count, p2_count = [0] * length, [0] * length for _ in range(trial): # ステータスの初期化 ( p1_pokemon, p1_level, p1_kotai[:], p1_doryoku[:], p1_item, p1_waza[:], p2_pokemon, p2_level, p2_kotai[:], p2_doryoku[:], p2_item, p2_waza[:], p1_advantage[:], p1_negoto[:], p1_texture[:], p1_migawari[:], p2_advantage[:], p2_negoto[:], p2_texture[:], p2_migawari[:], p1_status_base[:], p1_mezapa_type, p1_mezapa_iryoku, p2_status_base[:], p2_mezapa_type, p2_mezapa_iryoku ) = input_copy # ランクの格納 (攻撃, 防御, 特攻, 特防, 素早さ, 回避率, 命中率, 急所率) p1_rank_base, p2_rank_base = p1_advantage, p2_advantage # アドバンテージを上書き # ランクの倍率 (攻撃, 防御, 特攻, 特防, 素早さ, 命中率, 急所率) p1_rank_rate, p2_rank_rate = [0] * 7, [0] * 7 # 現在のステータス (攻撃, 防御, 特攻, 特防, 素早さ, 命中率, 急所率) p1_status_now, p2_status_now = [0] * 7, [0] * 7 # ダメージ補正の格納 # 強化アイテム,急所,トリプルキックの連続補正,雨乞・日本晴れ,ソーラービーム, # 一致,相性,ターン連続系補正,ダメージ乱数,穴を掘る,空を飛ぶ,小さくなる p1_damage_hosei, p2_damage_hosei = [0] * 12, [0] * 12 # 現在の状態異常 (凍り,毒,猛毒,眠り,麻痺,火傷) p1_ailment, p2_ailment = [0] * 6, [0] * 6 # 技の状態 p1_hirumi, p2_hirumi = 0, 0 p1_konran, p2_konran = 0, 0 p1_10, p2_10 = 0, 0 # ちいさくなる p1_21, p2_21 = 0, 0 # どくどく p1_23, p2_23 = 0, 0 # ひかりのかべ p1_26, p2_26 = 0, 0 # ハサミギロチン p1_27, p2_27 = 0, 0 # かまいたち p1_2a, p2_2a = 0, 0 # しめつける p1_2e, p2_2e = 0, 0 # しろいきり p1_2f, p2_2f = 0, 0 # きあいだめ p1_41, p2_41 = 0, 0 # リフレクター p1_4b, p2_4b = 0, 0 # ゴッドバード p1_4f, p2_4f = 0, 0 # みがわり p1_50, p2_50 = 0, 0 # はかいこうせん p1_54, p2_54 = 0, 0 # やどりぎのタネ p1_61, p2_61 = 0, 0 # ねごと p1_68, p2_68 = 1, 1 # トリプルキック p1_6b, p2_6b = 0, 0 # あくむ p1_6d, p2_6d = 0, 0 # のろい p1_6f, p2_6f = 0, 0 # まもる・こらえる p_73 = 0 # すなあらし p1_75, p2_75 = 0, 0 # ころがる p1_71, p2_71 = 0, 0 # みやぶる p1_77, p2_77 = 0, 0 # れんぞくぎり p1_78, p2_78 = 0, 0 # メロメロ p1_7c, p2_7c = 0, 0 # しんぴのまもり p_88 = 0 # あまごい p_89 = 0 # にほんばれ p1_91, p2_91 = 0, 0 # ロケットずつき p1_94, p2_94 = 0, 0 # みらいよち p1_97, p2_97 = 0, 0 # ソーラービーム p1_9ba, p2_9ba = 0, 0 # そらをとぶ p1_9bb, p2_9bb = 0, 0 # あなをほる p1_9c, p2_9c = 0, 0 # まるくなる # 指定した技を取り出す p1_waza_data = set_waza_data(p1_waza) p2_waza_data = set_waza_data(p2_waza) # 行動の判定 p1_bit, p2_bit = [1] * length, [1] * length # 指定した持ち物をID化 p1_item, p2_item = set_item(p1_item), set_item(p2_item) # 破壊の遺伝子の判定 p1_item, p1_konran, p1_rank_base = set_idenshi(p1_item, p1_konran, p1_rank_base) p2_item, p2_konran, p2_rank_base = set_idenshi(p2_item, p2_konran, p2_rank_base) for i in range(length): # ステータスの更新 p1_rank_base, p1_rank_rate = rank_hosei(p1_rank_base, p2_rank_base, p1_rank_rate, p1_waza_data[i], p1_pokemon, p1_item, p1_27, p1_2f) p2_rank_base, p2_rank_rate = rank_hosei(p2_rank_base, p1_rank_base, p2_rank_rate, p2_waza_data[i], p2_pokemon, p2_item, p2_27, p2_2f) p1_damage_hosei = set_damage_hosei(p1_damage_hosei, p1_waza_data[i], p1_item, p1_rank_rate, p1_68, p1_status_base, p2_status_base, p1_75, p1_9c, p1_77, p2_9bb, p2_9ba, p2_10) p2_damage_hosei = set_damage_hosei(p2_damage_hosei, p2_waza_data[i], p2_item, p2_rank_rate, p2_68, p2_status_base, p1_status_base, p2_75, p2_9c, p2_77, p1_9bb, p1_9ba, p1_10) p1_status_now, p2_status_now = calc_status_now(p1_status_now, p2_status_now) p1_damage, p2_damage = 0, 0 p1_status_recalc, p2_status_recalc = 0, 0 # 手番の決定 p1_yusendo = waza_yusendo(p1_waza_data[i]) p2_yusendo = waza_yusendo(p2_waza_data[i]) p1_sensei = (p1_item == 602 and randbit(8) + 1 <= 60) p2_sensei = (p2_item == 602 and randbit(8) + 1 <= 60) if p1_yusendo != p2_yusendo: # 優先度 turn = 0 if p1_yusendo > p2_yusendo else 1 elif p1_sensei != p2_sensei: # 先制の爪 turn = 0 if p1_sensei > p2_sensei else 1 elif p1_status_now[4] != p2_status_now[4]: # 同優先度なら turn = 0 if p1_status_now[4] > p2_status_now[4] else 1 else: # 同速なら turn = randbit(1) # 対戦 if turn == 0: # 先手P1 if p1_ailment[0] != 0: # 凍り判定 p1_bit[i] = 2 if p1_waza_data[i][5] in ('6C','7D'): # 火炎車・聖なる炎判定 p1_ailment[0], p1_bit[i] = 0, 1 elif p1_ailment[3] > 0: # 眠り判定 p1_ailment[3] -= 1 if p1_ailment[3] > 0: p1_bit[i] = 2 if p1_waza_data[i][5] == '61': # 寝言判定 p1_bit[i] = 3 elif p1_waza_data[i][5] == '5C': # いびき判定 p1_bit[i] = 1 else: p1_6b = 0 # 悪夢を解除 if p1_bit[i] != 2 and p1_50 != 0: # 反動判定 p1_50 = 0 p1_bit[i] = 2 if p1_bit[i] != 2 and p1_konran > 0: # 混乱判定 p1_konran -= 1 if p1_konran > 0 and randbit(1) == 0: # ステータスの再計算と混乱ダメージ p1_rank_base, p1_rank_rate = rank_hosei(p1_rank_base, p2_rank_base, p1_rank_rate, p1_waza_data[i], p1_pokemon, p1_item, p1_27, p1_2f) p1_status_now = calc_status_konran_now(p1_status_now, p1_status_base, p1_rank_rate, p1_pokemon, p1_item, p1_41, p1_ailment, p1_23) base = calc_konran_damage(p1_level, p1_status_now, p1_damage_hosei) p1_4f, p1_status_base = calc_konran_damage_4f(p1_4f, p1_status_base, base) # 身代わりか本体にダメージ if won_check(p1_status_base, p2_count, i): break # P2 WIN p1_bit[i] = 2 if p1_bit[i] != 2 and p1_78 != 0 and randbit(1) == 0: # メロメロ判定 p1_bit[i] = 2 if p1_bit[i] != 2 and p1_ailment[4] != 0 and randbit(2) == 0: # 麻痺判定 p1_bit[i] = 2 if p1_bit[i] == 3: # 寝言 p1_waza_data[i] = dept_61(p1_negoto) p1_61 = 1 # 寝言のフラグ p1_bit[i] = 1 p1_status_recalc = 1 if p1_bit[i] != 2: # 行動判定と命中判定 if p1_waza_data[i][5] == '4F' and ai != 0: # AI 身代わり処理 p1_waza_data[i] = ai_4f(p1_ai_base, p1_status_now, p2_status_now, p1_4f, p2_konran, p1_status_base, p1_div, p1_migawari) p1_status_recalc = 1 if p1_waza_data[i][5] == '61' and ai != 0 and p1_ailment[3] == 0: # AI 寝言処理 p1_waza_data[i] = ai_61(p1_ai_base, p1_status_base, p1_max, p2_status_base, p1_status_now, p2_status_now, p1_negoto) p1_status_recalc = 1 if p1_status_recalc == 1: # ステータスの更新 p1_rank_base, p1_rank_rate = rank_hosei(p1_rank_base, p2_rank_base, p1_rank_rate, p1_waza_data[i], p1_pokemon, p1_item, p1_27, p1_2f) p2_rank_base, p2_rank_rate = rank_hosei(p2_rank_base, p1_rank_base, p2_rank_rate, p2_waza_data[i], p2_pokemon, p2_item, p2_27, p2_2f) p1_damage_hosei = set_damage_hosei(p1_damage_hosei, p1_waza_data[i], p1_item, p1_rank_rate, p1_68, p1_status_base, p2_status_base, p1_75, p1_9c, p1_77, p2_9bb, p2_9ba, p2_10) p1_status_now, p2_status_now = calc_status_now(p1_status_now, p2_status_now) if p1_71 != 0: # 見破る判定 p1_damage_hosei, p1_rank_rate = calc_71(p1_waza_data[i], p2_status_base, p1_damage_hosei, p1_rank_base, p2_rank_base, p1_rank_rate, p2_item) if p1_waza_data[i][5] == '98': # 雷の命中変更 p1_waza_data[i] = calc_98(p1_waza_data[i]) if p2_9ba != 0 and p2_waza_data[i][5] == '9B-A' and not(p1_waza_data[i][5] in ('1C','92','95','98')): # 空を飛ぶ p1_bit[i] = 0 if p2_9bb != 0 and p2_waza_data[i][5] == '9B-B' and not((p1_waza_data[i][5] == '26' and p1_waza_data[i][0] == 4) or p1_waza_data[i][5] in ('7E','9B-B')): # 穴を掘る p1_bit[i] = 0 if p1_waza_data[i][1] > 0 and p1_damage_hosei[6] == 0: # 攻撃技の効果なし判定,変化技は別途 p1_bit[i] = 0 if calc_accuracy(p1_waza_data[i], p1_rank_rate, p2_item) != 1: # 命中判定 p1_bit[i] = 0 if p1_waza_data[i][1] > 1 and p1_bit[i] == 1: # 威力2以上で計算と保持 p1_damage = calc_damage(p1_waza_data[i], p1_level, p1_status_now, p2_status_now, p1_damage_hosei) v1 = p1_waza_data[i][5] if p1_bit[i] == 1: # 命中のみ判定 if v1 in ('00-A','00-B','11-A','11-B','23','67','80','93','95'): # 処理 pass # はたく(00-A)・rank_hoseiで処理(00-B)・スピードスター(11-A)・当て身投げ(11-B) # 猫に小判(23)・電光石火(67)・追い打ち(80)・地震(93)・風起こし(95) elif v1 in ('07','1A','1B','1C','51','53','56','5A','5D','5E','64','79','7B','99','9A'): # 未実装 pass # 自爆(07)・我慢(1A)・暴れる(1B)・吹き飛ばし(1C) # いかり(51)・指を振る(53)・金縛り(56)・アンコール(5A)・テクスチャー2(5D)・心の眼(5E)・恨み(64) # 恩返し(79)・八つ当たり(7B)・テレポート(99)・袋叩き(9A) elif v1 == '01': # 歌う等 p2_ailment = dept_01(p2_4f, p2_7c, p2_ailment) elif v1 == '02': # 毒針等 p2_ailment = dept_02(p2_4f, p2_7c, p2_status_base, p2_ailment, p1_waza_data[i]) elif v1 == '03': # 吸い取る等 p1_damage, p1_bit[i], p1_status_base = dept_03(p2_4f, p1_damage, p1_status_base, p1_max, p1_bit[i]) elif v1 in ('04','6C','7D'): # 火傷など p2_ailment = dept_04(p2_4f, p2_7c, p2_status_base, p2_ailment, p1_waza_data[i]) elif v1 == '05': # 凍りなど p2_ailment = dept_05(p2_4f, p2_7c, p2_status_base, p2_ailment, p1_waza_data[i]) elif v1 in ('06','98'): # 麻痺など p2_ailment = dept_06(p2_4f, p2_7c, p2_ailment, p1_waza_data[i]) elif v1 == '08': # 夢喰い p1_damage, p1_bit[i], p1_status_base = dept_08(p2_4f, p2_ailment, p1_damage, p1_status_base, p1_max, p1_bit[i]) elif v1 == '12': # 鳴き声 p2_rank_base = dept_12(p2_rank_base, p2_4f, p2_2e) elif v1 == '13': # 尻尾を振るなど p2_rank_base = dept_13(p2_rank_base, p2_4f, p2_2e) elif v1 == '14': # 糸を吐く p2_rank_base = dept_14(p2_rank_base, p2_4f, p2_2e) elif v1 == '17': # 砂かけなど p2_rank_base = dept_17(p2_rank_base, p2_4f, p2_2e) elif v1 == '18': # 甘い香り p2_rank_base = dept_18(p2_rank_base, p2_4f, p2_2e) elif v1 == '1D': # 往復ビンタなど p1_damage = dept_1d(p1_rank_rate, p1_waza_data[i], p1_level, p1_status_now, p2_status_now, p1_damage_hosei, p1_damage) elif v1 == '1F': # 回し蹴りなど p2_hirumi = dept_1f(p1_waza_data[i]) elif v1 == '21': # 毒々 p2_ailment, p2_21 = dept_21(p2_4f, p2_7c, p2_status_base, p2_ailment, p1_waza_data[i], p2_21) elif v1 == '24': # トライアタック p2_ailment = dept_24(p2_4f, p2_7c, p2_ailment, p1_waza_data[i]) elif v1 == '28': # 怒りの前歯 p1_damage = dept_28(p2_status_base) elif v1 == '29': # ソニックブームなど p1_damage = dept_29(p1_waza_data[i]) elif v1 == '2A': # 締め付けるなど p2_2a = dept_2a() elif v1 == '2C': # 二度蹴りなど p1_damage = dept_2c(p1_damage_hosei, p1_rank_rate, p1_damage, p1_waza_data[i], p1_level, p1_status_now, p2_status_now) elif v1 == '30-A': # 突進など p1_status_base = dept_30a(p2_4f, p1_status_base, p1_damage) elif v1 == '30-B': # わるあがき p1_damage, p1_status_base = dept_30b(p2_4f, p2_status_base, p1_status_base, p1_item, p1_damage, p1_damage_hosei, p1_waza_data[i], p1_level, p1_status_now, p2_status_now) elif v1 == '31': # 超音波など p2_konran = dept_31(p2_4f, p2_7c, p2_konran) elif v1 == '3A': # 甘える p2_rank_base = dept_3a(p2_rank_base, p2_4f, p2_2e) elif v1 == '3B': # 嫌な音 p2_rank_base = dept_3a(p2_rank_base, p2_4f, p2_2e) elif v1 == '3C': # 綿胞子など p2_rank_base = dept_3a(p2_rank_base, p2_4f, p2_2e) elif v1 == '42': # 毒の粉など p2_ailment = dept_42(p2_4f, p2_7c, p2_status_base, p2_ailment) elif v1 == '43': # 痺れ粉 p2_ailment = dept_43(p2_4f, p2_7c, p1_damage_hosei, p2_ailment) elif v1 == '44': # オーロラビーム p2_rank_base = dept_44(p2_rank_base, p2_4f, p2_2e, p1_waza_data[i]) elif v1 == '45': # 溶解液など p2_rank_base = dept_45(p2_rank_base, p2_4f, p2_2e, p1_damage, p1_waza_data[i]) elif v1 == '46': # バブル光線など p2_rank_base = dept_46(p2_rank_base, p2_4f, p2_2e, p1_waza_data[i]) elif v1 == '48': # サイコキネシスなど p2_rank_base = dept_48(p2_rank_base, p2_4f, p2_2e, p1_waza_data[i]) elif v1 == '49': # 泥かけなど p2_rank_base = dept_49(p2_rank_base, p2_4f, p2_2e, p1_waza_data[i]) elif v1 == '4C': # サイケ光線など p2_konran = dept_4c(p2_4f, p2_7c, p2_konran, p1_waza_data[i]) elif v1 == '4D': # ダブルニードル p1_damage, p2_ailment = dept_4d(p1_damage_hosei, p1_rank_rate, p1_damage, p1_waza_data[i], p1_level, p1_status_now, p2_status_now, p2_4f, p2_7c, p2_status_base, p2_ailment) elif v1 == '54': # 宿り木の種 p2_54 = dept_54(p2_4f, p2_54, p2_status_base) elif v1 == '57': # 地球投げなど p1_damage = dept_57(p1_level) elif v1 == '58': # サイコウェーブ p1_damage = dept_58(p1_58) elif v1 == '5B': # 痛み分け p1_status_base, p2_status_base = dept_5b(p2_4f, p1_status_base, p2_status_base, p1_max, p2_max) elif v1 == '5C': # いびき p1_damage, p2_hirumi = dept_5c(p1_ailment, p1_waza_data[i], p2_hirumi, p1_damage) elif v1 == '63': # じたばたなど p1_damage = dept_63(p1_63, p1_status_base, p1_waza_data[i], p1_max, p1_damage_hosei, p1_damage, p1_level, p1_status_now, p2_status_now) elif v1 == '65': # みねうち p1_damage = dept_65(p2_4f, p2_status_base, p1_damage) elif v1 == '68': # トリプルキック p1_damage, p1_68 = dept_68(p1_68, p1_waza_data[i], p1_rank_rate, p2_item, p1_damage, p1_damage_hosei, p1_level, p1_status_now, p2_status_now) elif v1 == '69': # 泥棒 p1_item, p2_item = dept_69(p1_item, p2_item, p2_4f) elif v1 == '71': # 見破る p1_71 = dept_71() elif v1 == '76': # 威張る p2_rank_base, p2_konran = dept_76(p2_rank_base, p2_4f, p2_7c, p2_konran) elif v1 == '78': # メロメロ p2_78 = dept_78(p1_status_base, p2_status_base) elif v1 == '7E': # マグニチュード p1_damage = dept_7e(p1_waza_data[i], p1_level, p1_status_now, p2_status_now, p1_damage_hosei) elif v1 == '87': # 目覚めるパワー p1_damage = dept_87( p1_waza_data[i], p1_mezapa_type, p1_mezapa_iryoku, p1_item, p1_status_base, p2_status_base, p1_level, p1_status_now, p2_status_now, p1_damage_hosei ) elif v1 == '8A': # 鋼の翼 p1_rank_base[1] = dept_8a(p1_waza_data[i], p1_rank_base) elif v1 == '8B': # メタルクロー p1_rank_base[0] = dept_8b(p1_waza_data[i], p1_rank_base) elif v1 == '8C': # 原始の力 p1_rank_base[:5] = dept_8c(p1_waza_data[i], p1_rank_base) elif v1 == '92': # 竜巻 p2_hirumi = dept_92(p1_waza_data[i]) elif v1 == '96': # 踏みつけ p2_hirumi = dept_96(p1_waza_data[i]) elif v1 == '97': # ソーラービーム p1_97, p1_damage = dept_97(p1_97, p1_damage) if p1_bit[i] in (0,1): # 外れか命中 if v1 in ('09','52','55','59','5F','62','6A','70','72','7F','90'): pass # オウム返し(09)・物真似(52)・はねる(55)・スケッチ(5F)・道連れ(62)・蜘蛛の巣(6A)・撒き菱(70)・滅びの歌(72) # バトンタッチ(7F) # 先手/カウンター(59)・ミラーコート(90) elif v1 == '0A': # ヨガのポーズなど p1_rank_base = dept_0a(p1_rank_base) elif v1 == '0B': # 固くなるなど p1_rank_base = dept_0b(p1_rank_base) elif v1 == '0D': # 成長 p1_rank_base = dept_0d(p1_rank_base) elif v1 == '10': # 影分身など p1_rank_base, p1_10 = dept_10(p1_waza_data[i], p1_rank_base, p1_10) elif v1 == '1E': # テクスチャー p1_status_base = dept_1e(p1_texture, p1_status_base) elif v1 == '19': # 黒い霧 p1_rank_base, p2_rank_base = dept_19(p1_rank_base, p2_rank_base) elif v1 == '20-A': # 自己再生など p1_status_base = dept_20a(p1_status_base, p1_div, p1_max) elif v1 == '20-B': # 眠る p1_status_base, p1_ailment = dept_20b(p1_status_base, p1_max, p1_ailment) elif v1 == '23': # 光の壁 p1_23 = dept_23(p1_23) elif v1 == '26': # ハサミギロチンなど p1_damage, p1_bit[i], p1_26 = dept_26(p1_level, p2_level, p1_damage_hosei, p1_waza_data[i], p1_rank_rate, p2_item, p2_4f, p2_6f, p1_damage, p1_bit[i], p1_26) elif v1 == '27': # かまいたち p1_27, p1_damage = dept_27(p1_27, p1_waza_data, i, p1_bit, p1_damage) elif v1 == '2D': # 飛び蹴りなど p1_status_base = dept_2d(p1_bit[i], p1_status_base, p1_waza_data[i], p1_level, p1_status_now, p2_status_now, p1_damage_hosei) elif v1 == '2E': # 白い霧 p1_2e = dept_2e() elif v1 == '2F': # 気合溜め p1_2f = dept_2f() elif v1 == '32': # 剣の舞 p1_rank_base = dept_32(p1_rank_base) elif v1 == '33': # バリアーなど p1_rank_base = dept_33(p1_rank_base) elif v1 == '34': # 高速移動 p1_rank_base = dept_34(p1_rank_base) elif v1 == '36': # 度忘れ p1_rank_base = dept_36(p1_rank_base) elif v1 == '39': # 変身 p1_status_base[1:10], p1_rank_base, p1_negoto, p1_texture, p1_migawari, p1_mezapa_type, p1_mezapa_iryoku, p1_pokemon = dept_39(p2_status_base[1:10], p2_rank_base, p2_negoto, p2_texture, p2_mezapa_type, p2_mezapa_iryoku, p1_pokemon, p2_pokemon) elif v1 == '41': # リフレクター p1_41 = dept_41(p1_41) elif v1 == '4B': # ゴッドバード p1_4b, p1_damage = dept_4b(p1_4b, p1_waza_data, i, p1_bit, p1_damage) elif v1 == '4F': # 身代わり p1_4f, p1_status_base = dept_4f(p1_4f, p1_div, p1_status_base) elif v1 == '50': # 破壊光線 p1_50 = dept_50() elif v1 == '66': # 癒しの鈴 p1_ailment, p1_konran, p1_21 = dept_66(p1_ailment, p1_konran, p1_21) elif v1 == '6B': # 悪夢 p2_6b = dept_6b(p2_ailment, p2_4f, p2_6b) elif v1 == '6D': # のろい p1_rank_base, p2_6d = dept_6d(p1_status_base, p1_rank_base, p2_4f, p1_div) elif v1 in ('6F','74'): # 守るなど・堪える p1_6f, p1_bit[i], p2_6f = dept_6f(p1_waza_data, i, p1_bit, p1_4f, p1_6f, p2_6f) elif v1 == '73': # 砂嵐 p_73, p_88, p_89 = dept_73() elif v1 == '75': # 転がる p1_75 = dept_75(p1_waza_data, i, p1_bit, p1_75) elif v1 == '77': # 連続斬り p1_77 = dept_77(p1_waza_data, i, p1_bit, p1_77) elif v1 == '7A': # プレゼント p2_status_base, p1_damage = dept_7a( p2_4f, p1_waza_data[i], p1_bit[i], p2_status_base, p2_div, p2_max, p1_damage, p1_status_base, p1_damage_hosei, p1_level, p1_status_now, p2_status_now, p1_ailment, p1_rank_rate, p2_rank_rate, p2_41 ) elif v1 == '7C': # 神秘の守り p1_7c = dept_7c(p1_7c) elif v1 == '81': # 高速スピン p1_2a, p1_54 = dept_81(p1_bit[i], p2_status_base, p1_2a, p1_54) elif v1 in ('84','85','86'): # 朝の陽射しなど p1_status_base = dept_84(p1_status_base, p1_div, p1_max) elif v1 == '88': # 雨乞い p_73, p_88, p_89 = dept_88() elif v1 == '89': # 日本晴れ p_73, p_88, p_89 = dept_89() elif v1 == '8E': # 腹太鼓 p1_rank_base, p1_status_base = dept_8e(p1_div, p1_status_base, p1_rank_base) elif v1 == '8F': # 自己暗示 p1_rank_base = dept_8f(p1_rank_base, p2_rank_base) elif v1 == '91': # ロケット頭突き p1_91, p1_rank_base, p1_damage = dept_91(p1_91, p1_rank_base, p1_waza_data, i, p1_bit, p1_damage) elif v1 == '94': # 未来予知 p1_94, p1_damage = dept_94(p1_94, p1_waza_data[i], p1_rank_rate, p2_item, p1_damage_hosei, p1_damage, p1_level, p1_status_now, p2_status_now) elif v1 == '9B-A': # 空を飛ぶ p1_9ba, p1_damage = dept_9ba(p1_9ba, p1_waza_data, i, p1_bit, p1_damage) elif v1 == '9B-B': # 穴を掘る p1_9bb, p1_damage = dept_9bb(p1_9bb, p1_waza_data, i, p1_bit, p1_damage) elif v1 == '9C': # 丸くなる p1_rank_base, p1_9c = dept_9c(p1_rank_base) # ダメージ計算 if p1_bit[i] == 1 and p1_damage > 0: if p2_4f <= 0: # 本体にダメージ p2_status_base[0] -= p1_damage else: # 身代わりにダメージ p2_4f -= p1_damage if p2_4f <= 0: p2_4f = -1 # 身代わり破壊フラグ if p1_item == 600 and p1_waza_data[i][4] == 1 and randbit(8) + 1 <= 30: # 王者の抽選 p2_hirumi = 1 if p2_item == 601 and p2_status_base[0] <= 0 and randbit(8) + 1 <= 30: # 鉢巻の抽選 p2_status_base[0] = 1 if won_check(p2_status_base, p1_count, i): break # P1 WIN if won_check(p1_status_base, p2_count, i): break # P2 WIN if any(p2_ailment) or p2_konran != 0: # P2の状態異常の判定 p2_ailment, p2_konran, p2_6b, p2_item = calc_recovery(p2_ailment, p2_konran, p2_6b, p2_item) # 自分のターン終了時 p1_status_base, p2_status_base = my_turn_end(p1_ailment, p1_21, p1_54, p1_6b, p1_6d, p1_status_base, p2_status_base, p1_div, p2_max) if won_check(p1_status_base, p2_count, i): break # P2 WIN # 後手P2 # ステータスの更新 p1_rank_base, p1_rank_rate = rank_hosei(p1_rank_base, p2_rank_base, p1_rank_rate, p1_waza_data[i], p1_pokemon, p1_item, p1_27, p1_2f) p2_rank_base, p2_rank_rate = rank_hosei(p2_rank_base, p1_rank_base, p2_rank_rate, p2_waza_data[i], p2_pokemon, p2_item, p2_27, p2_2f) p1_status_now, p2_status_now = calc_status_now(p1_status_now, p2_status_now) if gamemode == 2 and p2_hirumi != 0: # PBSの怯み p2_bit[i] = 2 if p2_bit[i] != 2 and p2_ailment[0] != 0: # 凍り判定 p2_bit[i] = 2 if p2_waza_data[i][5] in ('6C','7D'): # 火炎車・聖なる炎判定 p2_ailment[0], p2_bit[i] = 0, 1 elif p2_bit[i] != 2 and p2_ailment[3] > 0: # 眠り判定 p2_ailment[3] -= 1 if p2_ailment[3] > 0: p2_bit[i] = 2 if p2_waza_data[i][5] == '61': # 寝言判定 p2_bit[i] = 3 elif p2_waza_data[i][5] == '5C': # いびき判定 p2_bit[i] = 1 else: p2_6b = 0 # 悪夢を解除 if gamemode != 2 and p2_hirumi != 0: # 怯み判定 p2_bit[i] = 2 if p2_bit[i] != 2 and p2_50 != 0: # 反動判定 p2_50 = 0 p2_bit[i] = 2 if p2_bit[i] != 2 and p2_konran > 0: # 混乱判定 p2_konran -= 1 if p2_konran > 0 and randbit(1) == 0: # ステータスの再計算と混乱ダメージ p2_rank_base, p2_rank_rate = rank_hosei(p2_rank_base, p1_rank_base, p2_rank_rate, p2_waza_data[i], p2_pokemon, p2_item, p2_27, p2_2f) p2_status_now = calc_status_konran_now(p2_status_now, p2_status_base, p2_rank_rate, p2_pokemon, p2_item, p2_41, p2_ailment, p2_23) base = calc_konran_damage(p2_level, p2_status_now, p2_damage_hosei) p2_4f, p2_status_base = calc_konran_damage_4f(p2_4f, p2_status_base, base) # 身代わりか本体にダメージ if won_check(p2_status_base, p1_count, i): break # P1 WIN p2_bit[i] = 2 if p2_bit[i] != 2 and p2_78 != 0 and randbit(1) == 0: # メロメロ判定 p2_bit[i] = 2 if p2_bit[i] != 2 and p2_ailment[4] != 0 and randbit(2) == 0: # 麻痺判定 p2_bit[i] = 2 if p2_bit[i] == 3: # 寝言 p2_waza_data[i] = dept_61(p2_negoto) p2_61 = 1 # 寝言のフラグ p2_bit[i] = 1 p2_status_recalc = 1 if p2_bit[i] != 2: # 行動判定と命中判定 if p2_waza_data[i][5] == '4F' and ai != 0: # AI 身代わり処理 p2_waza_data[i] = ai_4f(p2_ai_base, p2_status_now, p1_status_now, p2_4f, p1_konran, p2_status_base, p2_div, p2_migawari) p2_status_recalc = 1 if p2_waza_data[i][5] == '61' and ai != 0 and p2_ailment[3] == 0: # AI 寝言処理 p2_waza_data[i] = ai_61(p2_ai_base, p2_status_base, p2_max, p1_status_base, p2_status_now, p1_status_now, p2_negoto) p2_status_recalc = 1 if p2_status_recalc == 1: # ステータスの更新 p1_rank_base, p1_rank_rate = rank_hosei(p1_rank_base, p2_rank_base, p1_rank_rate, p1_waza_data[i], p1_pokemon, p1_item, p1_27, p1_2f) p2_rank_base, p2_rank_rate = rank_hosei(p2_rank_base, p1_rank_base, p2_rank_rate, p2_waza_data[i], p2_pokemon, p2_item, p2_27, p2_2f) p2_damage_hosei = set_damage_hosei(p2_damage_hosei, p2_waza_data[i], p2_item, p2_rank_rate, p2_68, p2_status_base, p1_status_base, p2_75, p2_9c, p2_77, p1_9bb, p1_9ba, p1_10) p1_status_now, p2_status_now = calc_status_now(p1_status_now, p2_status_now) if p2_71 != 0: # 見破る判定 p2_damage_hosei, p2_rank_rate = calc_71(p2_waza_data[i], p1_status_base, p2_damage_hosei, p2_rank_base, p1_rank_base, p2_rank_rate, p1_item) if p2_waza_data[i][5] == '98': # 雷の命中変更 p2_waza_data[i] = calc_98(p2_waza_data[i]) if p1_6f > 0 and p1_waza_data[i][5] == '6F': # 守る p2_bit[i] = 0 if p1_9ba != 0 and p1_waza_data[i][5] == '9B-A' and not(p2_waza_data[i][5] in ('1C','92','95','98')): # 空を飛ぶ p2_bit[i] = 0 if p1_9bb != 0 and p1_waza_data[i][5] == '9B-B' and not((p2_waza_data[i][5] == '26' and p2_waza_data[i][0] == 4) or p2_waza_data[i][5] in ('7E','9B-B')): # 穴を掘る p2_bit[i] = 0 if p2_waza_data[i][1] > 0 and p2_damage_hosei[6] == 0: # 攻撃技の効果なし判定,変化技は別途 p2_bit[i] = 0 if calc_accuracy(p2_waza_data[i], p2_rank_rate, p1_item) != 1: # 命中判定 p2_bit[i] = 0 if p2_waza_data[i][1] > 1 and p2_bit[i] == 1: # 威力2以上で計算と保持 if p1_waza_data[i][5] == '68' and gamemode == 2 and p1_bit[i] == 1 and not(p2_waza_data[i][5] in ('29','57','58','68','75','78')): # トリプルキックの倍率バグ(PBS) p2_68 = p1_68 # your最終倍率をコピー p2_damage = calc_damage(p2_waza_data[i], p2_level, p2_status_now, p1_status_now, p2_damage_hosei) v2 = p2_waza_data[i][5] if p2_bit[i] == 1: # 命中のみ判定 if v2 in ('00-A','00-B','11-A','11-B','23','67','80','93','95'): # 処理 pass # はたく(00-A)・rank_hoseiで処理(00-B)・スピードスター(11-A)・当て身投げ(11-B) # 猫に小判(23)・電光石火(67)・追い打ち(80)・地震(93)・風起こし(95) elif v2 in ('07','1A','1B','1C','51','53','56','5A','5D','5E','64','79','7B','99','9A'): # 未実装 pass # 自爆(07)・我慢(1A)・暴れる(1B)・吹き飛ばし(1C) # いかり(51)・指を振る(53)・金縛り(56)・アンコール(5A)・テクスチャー2(5D)・心の眼(5E)・恨み(64) # 恩返し(79)・八つ当たり(7B)・テレポート(99)・袋叩き(9A) elif v2 == '01': # 歌う等 p1_ailment = dept_01(p1_4f, p1_7c, p1_ailment) elif v2 == '02': # 毒針等 p1_ailment = dept_02(p1_4f, p1_7c, p1_status_base, p1_ailment, p2_waza_data[i]) elif v2 == '03': # 吸い取る等 p2_damage, p2_bit[i], p2_status_base = dept_03(p1_4f, p2_damage, p2_status_base, p2_max, p2_bit[i]) elif v2 in ('04','6C','7D'): # 火傷など p1_ailment = dept_04(p1_4f, p1_7c, p1_status_base, p1_ailment, p2_waza_data[i]) elif v2 == '05': # 凍りなど p1_ailment = dept_05(p1_4f, p1_7c, p1_status_base, p1_ailment, p2_waza_data[i]) elif v2 in ('06','98'): # 麻痺など p1_ailment = dept_06(p1_4f, p1_7c, p1_ailment, p2_waza_data[i]) elif v2 == '08': # 夢喰い p2_damage, p2_bit[i], p2_status_base = dept_08(p1_4f, p1_ailment, p2_damage, p2_status_base, p2_max, p2_bit[i]) elif v2 == '12': # 鳴き声 p1_rank_base = dept_12(p1_rank_base, p1_4f, p1_2e) elif v2 == '13': # 尻尾を振るなど p1_rank_base = dept_13(p1_rank_base, p1_4f, p1_2e) elif v2 == '14': # 糸を吐く p1_rank_base = dept_14(p1_rank_base, p1_4f, p1_2e) elif v2 == '17': # 砂かけなど p1_rank_base = dept_17(p1_rank_base, p1_4f, p1_2e) elif v2 == '18': # 甘い香り p1_rank_base = dept_18(p1_rank_base, p1_4f, p1_2e) elif v2 == '1D': # 往復ビンタなど p2_damage = dept_1d(p2_rank_rate, p2_waza_data[i], p2_level, p2_status_now, p1_status_now, p2_damage_hosei, p2_damage) elif v2 == '1F': # 回し蹴りなど p1_hirumi = dept_1f(p2_waza_data[i]) elif v2 == '21': # 毒々 p1_ailment, p1_21 = dept_21(p1_4f, p1_7c, p1_status_base, p1_ailment, p2_waza_data[i], p1_21) elif v2 == '24': # トライアタック p1_ailment = dept_24(p1_4f, p1_7c, p1_ailment, p2_waza_data[i]) elif v2 == '28': # 怒りの前歯 p2_damage = dept_28(p1_status_base) elif v2 == '29': # ソニックブームなど p2_damage = dept_29(p2_waza_data[i]) elif v2 == '2A': # 締め付けるなど p1_2a = dept_2a() elif v2 == '2C': # 二度蹴りなど p2_damage = dept_2c(p2_damage_hosei, p2_rank_rate, p2_damage, p2_waza_data[i], p2_level, p2_status_now, p1_status_now) elif v2 == '30-A': # 突進など p2_status_base = dept_30a(p1_4f, p2_status_base, p2_damage) elif v2 == '30-B': # わるあがき p2_damage, p2_status_base = dept_30b(p1_4f, p1_status_base, p2_status_base, p2_item, p2_damage, p2_damage_hosei, p2_waza_data[i], p2_level, p2_status_now, p1_status_now) elif v2 == '31': # 超音波など p1_konran = dept_31(p1_4f, p1_7c, p1_konran) elif v2 == '3A': # 甘える p1_rank_base = dept_3a(p1_rank_base, p1_4f, p1_2e) elif v2 == '3B': # 嫌な音 p1_rank_base = dept_3a(p1_rank_base, p1_4f, p1_2e) elif v2 == '3C': # 綿胞子など p1_rank_base = dept_3a(p1_rank_base, p1_4f, p1_2e) elif v2 == '42': # 毒の粉など p1_ailment = dept_42(p1_4f, p1_7c, p1_status_base, p1_ailment) elif v2 == '43': # 痺れ粉 p1_ailment = dept_43(p1_4f, p1_7c, p2_damage_hosei, p1_ailment) elif v2 == '44': # オーロラビーム p1_rank_base = dept_44(p1_rank_base, p1_4f, p1_2e, p2_waza_data[i]) elif v2 == '45': # 溶解液など p1_rank_base = dept_45(p1_rank_base, p1_4f, p1_2e, p2_damage, p2_waza_data[i]) elif v2 == '46': # バブル光線など p1_rank_base = dept_46(p1_rank_base, p1_4f, p1_2e, p2_waza_data[i]) elif v2 == '48': # サイコキネシスなど p1_rank_base = dept_48(p1_rank_base, p1_4f, p1_2e, p2_waza_data[i]) elif v2 == '49': # 泥かけなど p1_rank_base = dept_49(p1_rank_base, p1_4f, p1_2e, p2_waza_data[i]) elif v2 == '4C': # サイケ光線など p1_konran = dept_4c(p1_4f, p1_7c, p1_konran, p2_waza_data[i]) elif v2 == '4D': # ダブルニードル p2_damage, p1_ailment = dept_4d(p2_damage_hosei, p2_rank_rate, p2_damage, p2_waza_data[i], p2_level, p2_status_now, p1_status_now, p1_4f, p1_7c, p1_status_base, p1_ailment) elif v2 == '54': # 宿り木の種 p1_54 = dept_54(p1_4f, p1_54, p1_status_base) elif v2 == '57': # 地球投げなど p2_damage = dept_57(p2_level) elif v2 == '58': # サイコウェーブ p2_damage = dept_58(p2_58) elif v2 == '5B': # 痛み分け p2_status_base, p1_status_base = dept_5b(p1_4f, p2_status_base, p1_status_base, p2_max, p1_max) elif v2 == '5C': # いびき p2_damage, p1_hirumi = dept_5c(p2_ailment, p2_waza_data[i], p1_hirumi, p2_damage) elif v2 == '63': # じたばたなど p2_damage = dept_63(p2_63, p2_status_base, p2_waza_data[i], p2_max, p2_damage_hosei, p2_damage, p2_level, p2_status_now, p1_status_now) elif v2 == '65': # みねうち p2_damage = dept_65(p1_4f, p1_status_base, p2_damage) elif v2 == '68': # トリプルキック p2_damage, p2_68 = dept_68(p2_68, p2_waza_data[i], p2_rank_rate, p1_item, p2_damage, p2_damage_hosei, p2_level, p2_status_now, p1_status_now) elif v2 == '69': # 泥棒 p2_item, p1_item = dept_69(p2_item, p1_item, p1_4f) elif v2 == '71': # 見破る p2_71 = dept_71() elif v2 == '76': # 威張る p1_rank_base, p1_konran = dept_76(p1_rank_base, p1_4f, p1_7c, p1_konran) elif v2 == '78': # メロメロ p1_78 = dept_78(p2_status_base, p1_status_base) elif v2 == '7E': # マグニチュード p2_damage = dept_7e(p2_waza_data[i], p2_level, p2_status_now, p1_status_now, p2_damage_hosei) elif v2 == '87': # 目覚めるパワー p2_damage = dept_87( p2_waza_data[i], p2_mezapa_type, p2_mezapa_iryoku, p2_item, p2_status_base, p1_status_base, p2_level, p2_status_now, p1_status_now, p2_damage_hosei ) elif v2 == '8A': # 鋼の翼 p2_rank_base[1] = dept_8a(p2_waza_data[i], p2_rank_base) elif v2 == '8B': # メタルクロー p2_rank_base[0] = dept_8b(p2_waza_data[i], p2_rank_base) elif v2 == '8C': # 原始の力 p2_rank_base[:5] = dept_8c(p2_waza_data[i], p2_rank_base) elif v2 == '92': # 竜巻 p1_hirumi = dept_92(p2_waza_data[i]) elif v2 == '96': # 踏みつけ p1_hirumi = dept_96(p2_waza_data[i]) elif v2 == '97': # ソーラービーム p2_97, p2_damage = dept_97(p2_97, p2_damage) if p2_bit[i] in (0,1): # 外れか命中 if v2 in ('09','52','55','5F','62','6A','6F','70','72','74','7F'): pass # オウム返し(09)・物真似(52)・はねる(55)・スケッチ(5F)・道連れ(62)・蜘蛛の巣(6A)・撒き菱(70)・滅びの歌(72) # バトンタッチ(7F) # 後手/守る(6F)・堪える(74) elif v2 == '0A': # ヨガのポーズなど p2_rank_base = dept_0a(p2_rank_base) elif v2 == '0B': # 固くなるなど p2_rank_base = dept_0b(p2_rank_base) elif v2 == '0D': # 成長 p2_rank_base = dept_0d(p2_rank_base) elif v2 == '10': # 影分身など p2_rank_base, p2_10 = dept_10(p2_waza_data[i], p2_rank_base, p2_10) elif v2 == '1E': # テクスチャー p2_status_base = dept_1e(p2_texture, p2_status_base) elif v2 == '19': # 黒い霧 p2_rank_base, p1_rank_base = dept_19(p2_rank_base, p1_rank_base) elif v2 == '20-A': # 自己再生など p2_status_base = dept_20a(p2_status_base, p2_div, p2_max) elif v2 == '20-B': # 眠る p2_status_base, p2_ailment = dept_20b(p2_status_base, p2_max, p2_ailment) elif v2 == '23': # 光の壁 p2_23 = dept_23(p2_23) elif v2 == '26': # ハサミギロチンなど p2_damage, p2_bit[i], p2_26 = dept_26(p2_level, p1_level, p2_damage_hosei, p2_waza_data[i], p2_rank_rate, p1_item, p1_4f, p1_6f, p2_damage, p2_bit[i], p2_26) elif v2 == '27': # かまいたち p2_27, p2_damage = dept_27(p2_27, p2_waza_data, i, p2_bit, p2_damage) elif v2 == '2D': # 飛び蹴りなど p2_status_base = dept_2d(p2_bit[i], p2_status_base, p2_waza_data[i], p2_level, p2_status_now, p1_status_now, p2_damage_hosei) elif v2 == '2E': # 白い霧 p2_2e = dept_2e() elif v2 == '2F': # 気合溜め p2_2f = dept_2f() elif v2 == '32': # 剣の舞 p2_rank_base = dept_32(p2_rank_base) elif v2 == '33': # バリアーなど p2_rank_base = dept_33(p2_rank_base) elif v2 == '34': # 高速移動 p2_rank_base = dept_34(p2_rank_base) elif v2 == '36': # 度忘れ p2_rank_base = dept_36(p2_rank_base) elif v2 == '39': # 変身 p2_status_base[1:10], p2_rank_base, p2_negoto, p2_texture, p2_migawari, p2_mezapa_type, p2_mezapa_iryoku, p2_pokemon = dept_39(p1_status_base[1:10], p1_rank_base, p1_negoto, p1_texture, p1_mezapa_type, p1_mezapa_iryoku, p2_pokemon, p1_pokemon) elif v2 == '41': # リフレクター p2_41 = dept_41(p2_41) elif v2 == '4B': # ゴッドバード p2_4b, p2_damage = dept_4b(p2_4b, p2_waza_data, i, p2_bit, p2_damage) elif v2 == '4F': # 身代わり p2_4f, p2_status_base = dept_4f(p2_4f, p2_div, p2_status_base) elif v2 == '50': # 破壊光線 p2_50 = dept_50() elif v2 == '59': # カウンター p2_damage = dept_59(p1_26, p1_damage, p2_4f, p1_61, p2_damage_hosei, p1_waza_data[i]) elif v2 == '66': # 癒しの鈴 p2_ailment, p2_konran, p2_21 = dept_66(p2_ailment, p2_konran, p2_21) elif v2 == '6B': # 悪夢 p1_6b = dept_6b(p1_ailment, p1_4f, p1_6b) elif v2 == '6D': # のろい p2_rank_base, p1_6d = dept_6d(p2_status_base, p2_rank_base, p1_4f, p2_div) elif v2 == '73': # 砂嵐 p_73, p_88, p_89 = dept_73() elif v2 == '75': # 転がる p2_75 = dept_75(p2_waza_data, i, p2_bit, p2_75) elif v2 == '77': # 連続斬り p2_77 = dept_77(p2_waza_data, i, p2_bit, p2_77) elif v2 == '7A': # プレゼント p1_status_base, p2_damage = dept_7a( p1_4f, p2_waza_data[i], p2_bit[i], p1_status_base, p1_div, p1_max, p2_damage, p2_status_base, p2_damage_hosei, p2_level, p2_status_now, p1_status_now, p2_ailment, p2_rank_rate, p1_rank_rate, p1_41 ) elif v2 == '7C': # 神秘の守り p2_7c = dept_7c(p2_7c) elif v2 == '81': # 高速スピン p2_2a, p2_54 = dept_81(p2_bit[i], p1_status_base, p2_2a, p2_54) elif v2 in ('84','85','86'): # 朝の陽射しなど p2_status_base = dept_84(p2_status_base, p2_div, p2_max) elif v2 == '88': # 雨乞い p_73, p_88, p_89 = dept_88() elif v2 == '89': # 日本晴れ p_73, p_88, p_89 = dept_89() elif v2 == '8E': # 腹太鼓 p2_rank_base, p2_status_base = dept_8e(p2_div, p2_status_base, p2_rank_base) elif v2 == '8F': # 自己暗示 p2_rank_base = dept_8f(p2_rank_base, p1_rank_base) elif v2 == '90': # ミラーコート p2_damage = dept_90(p1_damage, p2_4f, p1_61, p2_damage_hosei, p1_waza_data[i]) elif v2 == '91': # ロケット頭突き p2_91, p2_rank_base, p2_damage = dept_91(p2_91, p2_rank_base, p2_waza_data, i, p2_bit, p2_damage) elif v2 == '94': # 未来予知 p2_94, p2_damage = dept_94(p2_94, p2_waza_data[i], p2_rank_rate, p1_item, p2_damage_hosei, p2_damage, p2_level, p2_status_now, p1_status_now) elif v2 == '9B-A': # 空を飛ぶ p2_9ba, p2_damage = dept_9ba(p2_9ba, p2_waza_data, i, p2_bit, p2_damage) elif v2 == '9B-B': # 穴を掘る p2_9bb, p2_damage = dept_9bb(p2_9bb, p2_waza_data, i, p2_bit, p2_damage) elif v2 == '9C': # 丸くなる p2_rank_base, p2_9c = dept_9c(p2_rank_base) # ダメージ計算 if p2_bit[i] == 1 and p2_damage > 0: if p1_4f <= 0: # 本体にダメージ p1_status_base[0] -= p2_damage else: # 身代わりにダメージ p1_4f -= p2_damage if p1_4f <= 0: p1_4f = -1 # 身代わり破壊フラグ if p1_6f > 0 and p1_waza_data[i][5] == '74' and p1_status_base[0] <= 0: # 堪える p1_status_base[0] = 1 if p2_item == 600 and p2_waza_data[i][4] == 1 and randbit(8) + 1 <= 30: # 王者の抽選 p1_hirumi = 1 if p1_item == 601 and p1_status_base[0] <= 0 and randbit(8) + 1 <= 30: # 鉢巻の抽選 p1_status_base[0] = 1 if won_check(p1_status_base, p2_count, i): break # P2 WIN if won_check(p2_status_base, p1_count, i): break # P1 WIN if any(p1_ailment) or p1_konran != 0: # P1の状態異常の判定 p1_ailment, p1_konran, p1_6b, p1_item = calc_recovery(p1_ailment, p1_konran, p1_6b, p1_item) # 自分のターン終了時 p2_status_base, p1_status_base = my_turn_end(p2_ailment, p2_21, p2_54, p2_6b, p2_6d, p2_status_base, p1_status_base, p2_div, p1_max) if won_check(p1_status_base, p2_count, i): break # P2 WIN # 全体のターン終了時 # 未来予知 if p2_94 != 0: p1_status_base, p2_94 = turn_end_94(i, p2_94, p1_status_base) if won_check(p1_status_base, p2_count, i): break # P2 WIN if p1_94 != 0: p2_status_base, p1_94 = turn_end_94(i, p1_94, p2_status_base) if won_check(p2_status_base, p1_count, i): break # P1 WIN # 砂嵐 if p_73 != 0: p1_status_base = turn_end_73(p_73, p1_status_base, p1_div) if won_check(p1_status_base, p2_count, i): break # P2 WIN p2_status_base = turn_end_73(p_73, p2_status_base, p2_div) if won_check(p2_status_base, p1_count, i): break # P1 WIN # 締め付ける if p1_2a != 0: p1_2e, p1_status_base = turn_end_2a(p1_2a, p1_status_base, p1_div) if won_check(p1_status_base, p2_count, i): break # P2 WIN if p2_2a != 0: p2_2e, p2_status_base = turn_end_2a(p2_2a, p2_status_base, p2_div) if won_check(p2_status_base, p1_count, i): break # P1 WIN # 食べ残し if p1_item == 603: p1_status_base = turn_end_item603(p1_item, p1_status_base, p1_div, p1_max) if p2_item == 603: p2_status_base = turn_end_item603(p2_item, p2_status_base, p2_div, p2_max) # 凍り解除 if p1_ailment[0] != 0: p1_ailment = turn_end_ailment0(p1_ailment) if p2_ailment[0] != 0: p2_ailment = turn_end_ailment0(p2_ailment) # 眠り解除 if p1_ailment[3] != 0: p1_ailment, p1_6b, p1_konran, p1_item = turn_end_ailment3(p1_ailment, p1_6b, p1_konran, p1_item) if p2_ailment[3] != 0: p2_ailment, p2_6b, p2_konran, p2_item = turn_end_ailment3(p2_ailment, p2_6b, p2_konran, p2_item) # 木の実 if p1_item in (100, 200, 300): p1_item, p1_status_base, p1_div = turn_end_item100(p1_item, p1_status_base, p1_div, p1_max) if p2_item in (100, 200, 300): p2_item, p2_status_base, p2_div = turn_end_item100(p2_item, p2_status_base, p2_div, p2_max) # 残ターンカウント # 砂嵐はturn_end_73で処理 p1_hirumi, p2_hirumi = 0, 0 # ひるみ解除 p1_26, p2_26 = 0, 0 # ハサミギロチン p1_41 -= 1 if p1_41 > 0 else 0 # リフレクター p2_41 -= 1 if p2_41 > 0 else 0 p1_4f = 0 if p1_4f == -1 else p1_4f # 身代わり p2_4f = 0 if p2_4f == -1 else p2_4f p1_61, p2_61 = 0, 0 # ねごと p1_68, p2_68 = 1, 1 # トリプルキック p_73 -= 1 if p_73 > 0 else 0 # 砂嵐 p1_7c -= 1 if p1_7c > 0 else 0 # 神秘の守り p2_7c -= 1 if p2_7c > 0 else 0 p_88 -= 1 if p_88 > 0 else 0 # 雨 p_89 -= 1 if p_89 > 0 else 0 # 日本晴れ # 後半 else: # 先手P2 if p2_ailment[0] != 0: # 凍り判定 p2_bit[i] = 2 if p2_waza_data[i][5] in ('6C','7D'): # 火炎車・聖なる炎判定 p2_ailment[0], p2_bit[i] = 0, 1 elif p2_ailment[3] > 0: # 眠り判定 p2_ailment[3] -= 1 if p2_ailment[3] > 0: p2_bit[i] = 2 if p2_waza_data[i][5] == '61': # 寝言判定 p2_bit[i] = 3 elif p2_waza_data[i][5] == '5C': # いびき判定 p2_bit[i] = 1 else: p2_6b = 0 # 悪夢を解除 if p2_bit[i] != 2 and p2_50 != 0: # 反動判定 p2_50 = 0 p2_bit[i] = 2 if p2_bit[i] != 2 and p2_konran > 0: # 混乱判定 p2_konran -= 1 if p2_konran > 0 and randbit(1) == 0: # ステータスの再計算と混乱ダメージ p2_rank_base, p2_rank_rate = rank_hosei(p2_rank_base, p1_rank_base, p2_rank_rate, p2_waza_data[i], p2_pokemon, p2_item, p2_27, p2_2f) p2_status_now = calc_status_konran_now(p2_status_now, p2_status_base, p2_rank_rate, p2_pokemon, p2_item, p2_41, p2_ailment, p2_23) base = calc_konran_damage(p2_level, p2_status_now, p2_damage_hosei) p2_4f, p2_status_base = calc_konran_damage_4f(p2_4f, p2_status_base, base) # 身代わりか本体にダメージ if won_check(p2_status_base, p1_count, i): break # P1 WIN p2_bit[i] = 2 if p2_bit[i] != 2 and p2_78 != 0 and randbit(1) == 0: # メロメロ判定 p2_bit[i] = 2 if p2_bit[i] != 2 and p2_ailment[4] != 0 and randbit(2) == 0: # 麻痺判定 p2_bit[i] = 2 if p2_bit[i] == 3: # 寝言 p2_waza_data[i] = dept_61(p2_negoto) p2_61 = 1 # 寝言のフラグ p2_bit[i] = 1 p2_status_recalc = 1 if p2_bit[i] != 2: # 行動判定と命中判定 if p2_waza_data[i][5] == '4F' and ai != 0: # AI 身代わり処理 p2_waza_data[i] = ai_4f(p2_ai_base, p2_status_now, p1_status_now, p2_4f, p1_konran, p2_status_base, p2_div, p2_migawari) p2_status_recalc = 1 if p2_waza_data[i][5] == '61' and ai != 0 and p2_ailment[3] == 0: # AI 寝言処理 p2_waza_data[i] = ai_61(p2_ai_base, p2_status_base, p2_max, p1_status_base, p2_status_now, p1_status_now, p2_negoto) p2_status_recalc = 1 if p2_status_recalc == 1: # ステータスの更新 p1_rank_base, p1_rank_rate = rank_hosei(p1_rank_base, p2_rank_base, p1_rank_rate, p1_waza_data[i], p1_pokemon, p1_item, p1_27, p1_2f) p2_rank_base, p2_rank_rate = rank_hosei(p2_rank_base, p1_rank_base, p2_rank_rate, p2_waza_data[i], p2_pokemon, p2_item, p2_27, p2_2f) p2_damage_hosei = set_damage_hosei(p2_damage_hosei, p2_waza_data[i], p2_item, p2_rank_rate, p2_68, p2_status_base, p1_status_base, p2_75, p2_9c, p2_77, p1_9bb, p1_9ba, p1_10) p1_status_now, p2_status_now = calc_status_now(p1_status_now, p2_status_now) if p2_71 != 0: # 見破る判定 p2_damage_hosei, p2_rank_rate = calc_71(p2_waza_data[i], p1_status_base, p2_damage_hosei, p2_rank_base, p1_rank_base, p2_rank_rate, p1_item) if p2_waza_data[i][5] == '98': # 雷の命中変更 p2_waza_data[i] = calc_98(p2_waza_data[i]) if p1_9ba != 0 and p1_waza_data[i][5] == '9B-A' and not(p2_waza_data[i][5] in ('1C','92','95','98')): # 空を飛ぶ p2_bit[i] = 0 if p1_9bb != 0 and p1_waza_data[i][5] == '9B-B' and not((p2_waza_data[i][5] == '26' and p2_waza_data[i][0] == 4) or p2_waza_data[i][5] in ('7E','9B-B')): # 穴を掘る p2_bit[i] = 0 if p2_waza_data[i][1] > 0 and p2_damage_hosei[6] == 0: # 攻撃技の効果なし判定,変化技は別途 p2_bit[i] = 0 if calc_accuracy(p2_waza_data[i], p2_rank_rate, p1_item) != 1: # 命中判定 p2_bit[i] = 0 if p2_waza_data[i][1] > 1 and p2_bit[i] == 1: # 威力2以上で計算と保持 p2_damage = calc_damage(p2_waza_data[i], p2_level, p2_status_now, p1_status_now, p2_damage_hosei) v2 = p2_waza_data[i][5] if p2_bit[i] == 1: # 命中のみ判定 if v2 in ('00-A','00-B','11-A','11-B','23','67','80','93','95'): # 処理 pass # はたく(00-A)・rank_hoseiで処理(00-B)・スピードスター(11-A)・当て身投げ(11-B) # 猫に小判(23)・電光石火(67)・追い打ち(80)・地震(93)・風起こし(95) elif v2 in ('07','1A','1B','1C','51','53','56','5A','5D','5E','64','79','7B','99','9A'): # 未実装 pass # 自爆(07)・我慢(1A)・暴れる(1B)・吹き飛ばし(1C) # いかり(51)・指を振る(53)・金縛り(56)・アンコール(5A)・テクスチャー2(5D)・心の眼(5E)・恨み(64) # 恩返し(79)・八つ当たり(7B)・テレポート(99)・袋叩き(9A) elif v2 == '01': # 歌う等 p1_ailment = dept_01(p1_4f, p1_7c, p1_ailment) elif v2 == '02': # 毒針等 p1_ailment = dept_02(p1_4f, p1_7c, p1_status_base, p1_ailment, p2_waza_data[i]) elif v2 == '03': # 吸い取る等 p2_damage, p2_bit[i], p2_status_base = dept_03(p1_4f, p2_damage, p2_status_base, p2_max, p2_bit[i]) elif v2 in ('04','6C','7D'): # 火傷など p1_ailment = dept_04(p1_4f, p1_7c, p1_status_base, p1_ailment, p2_waza_data[i]) elif v2 == '05': # 凍りなど p1_ailment = dept_05(p1_4f, p1_7c, p1_status_base, p1_ailment, p2_waza_data[i]) elif v2 in ('06','98'): # 麻痺など p1_ailment = dept_06(p1_4f, p1_7c, p1_ailment, p2_waza_data[i]) elif v2 == '08': # 夢喰い p2_damage, p2_bit[i], p2_status_base = dept_08(p1_4f, p1_ailment, p2_damage, p2_status_base, p2_max, p2_bit[i]) elif v2 == '12': # 鳴き声 p1_rank_base = dept_12(p1_rank_base, p1_4f, p1_2e) elif v2 == '13': # 尻尾を振るなど p1_rank_base = dept_13(p1_rank_base, p1_4f, p1_2e) elif v2 == '14': # 糸を吐く p1_rank_base = dept_14(p1_rank_base, p1_4f, p1_2e) elif v2 == '17': # 砂かけなど p1_rank_base = dept_17(p1_rank_base, p1_4f, p1_2e) elif v2 == '18': # 甘い香り p1_rank_base = dept_18(p1_rank_base, p1_4f, p1_2e) elif v2 == '1D': # 往復ビンタなど p2_damage = dept_1d(p2_rank_rate, p2_waza_data[i], p2_level, p2_status_now, p1_status_now, p2_damage_hosei, p2_damage) elif v2 == '1F': # 回し蹴りなど p1_hirumi = dept_1f(p2_waza_data[i]) elif v2 == '21': # 毒々 p1_ailment, p1_21 = dept_21(p1_4f, p1_7c, p1_status_base, p1_ailment, p2_waza_data[i], p1_21) elif v2 == '24': # トライアタック p1_ailment = dept_24(p1_4f, p1_7c, p1_ailment, p2_waza_data[i]) elif v2 == '28': # 怒りの前歯 p2_damage = dept_28(p1_status_base) elif v2 == '29': # ソニックブームなど p2_damage = dept_29(p2_waza_data[i]) elif v2 == '2A': # 締め付けるなど p1_2a = dept_2a() elif v2 == '2C': # 二度蹴りなど p2_damage = dept_2c(p2_damage_hosei, p2_rank_rate, p2_damage, p2_waza_data[i], p2_level, p2_status_now, p1_status_now) elif v2 == '30-A': # 突進など p2_status_base = dept_30a(p1_4f, p2_status_base, p2_damage) elif v2 == '30-B': # わるあがき p2_damage, p2_status_base = dept_30b(p1_4f, p1_status_base, p2_status_base, p2_item, p2_damage, p2_damage_hosei, p2_waza_data[i], p2_level, p2_status_now, p1_status_now) elif v2 == '31': # 超音波など p1_konran = dept_31(p1_4f, p1_7c, p1_konran) elif v2 == '3A': # 甘える p1_rank_base = dept_3a(p1_rank_base, p1_4f, p1_2e) elif v2 == '3B': # 嫌な音 p1_rank_base = dept_3a(p1_rank_base, p1_4f, p1_2e) elif v2 == '3C': # 綿胞子など p1_rank_base = dept_3a(p1_rank_base, p1_4f, p1_2e) elif v2 == '42': # 毒の粉など p1_ailment = dept_42(p1_4f, p1_7c, p1_status_base, p1_ailment) elif v2 == '43': # 痺れ粉 p1_ailment = dept_43(p1_4f, p1_7c, p2_damage_hosei, p1_ailment) elif v2 == '44': # オーロラビーム p1_rank_base = dept_44(p1_rank_base, p1_4f, p1_2e, p2_waza_data[i]) elif v2 == '45': # 溶解液など p1_rank_base = dept_45(p1_rank_base, p1_4f, p1_2e, p2_damage, p2_waza_data[i]) elif v2 == '46': # バブル光線など p1_rank_base = dept_46(p1_rank_base, p1_4f, p1_2e, p2_waza_data[i]) elif v2 == '48': # サイコキネシスなど p1_rank_base = dept_48(p1_rank_base, p1_4f, p1_2e, p2_waza_data[i]) elif v2 == '49': # 泥かけなど p1_rank_base = dept_49(p1_rank_base, p1_4f, p1_2e, p2_waza_data[i]) elif v2 == '4C': # サイケ光線など p1_konran = dept_4c(p1_4f, p1_7c, p1_konran, p2_waza_data[i]) elif v2 == '4D': # ダブルニードル p2_damage, p1_ailment = dept_4d(p2_damage_hosei, p2_rank_rate, p2_damage, p2_waza_data[i], p2_level, p2_status_now, p1_status_now, p1_4f, p1_7c, p1_status_base, p1_ailment) elif v2 == '54': # 宿り木の種 p1_54 = dept_54(p1_4f, p1_54, p1_status_base) elif v2 == '57': # 地球投げなど p2_damage = dept_57(p2_level) elif v2 == '58': # サイコウェーブ p2_damage = dept_58(p2_58) elif v2 == '5B': # 痛み分け p2_status_base, p1_status_base = dept_5b(p1_4f, p2_status_base, p1_status_base, p2_max, p1_max) elif v2 == '5C': # いびき p2_damage, p1_hirumi = dept_5c(p2_ailment, p2_waza_data[i], p1_hirumi, p2_damage) elif v2 == '63': # じたばたなど p2_damage = dept_63(p2_63, p2_status_base, p2_waza_data[i], p2_max, p2_damage_hosei, p2_damage, p2_level, p2_status_now, p1_status_now) elif v2 == '65': # みねうち p2_damage = dept_65(p1_4f, p1_status_base, p2_damage) elif v2 == '68': # トリプルキック p2_damage, p2_68 = dept_68(p2_68, p2_waza_data[i], p2_rank_rate, p1_item, p2_damage, p2_damage_hosei, p2_level, p2_status_now, p1_status_now) elif v2 == '69': # 泥棒 p2_item, p1_item = dept_69(p2_item, p1_item, p1_4f) elif v2 == '71': # 見破る p2_71 = dept_71() elif v2 == '76': # 威張る p1_rank_base, p1_konran = dept_76(p1_rank_base, p1_4f, p1_7c, p1_konran) elif v2 == '78': # メロメロ p1_78 = dept_78(p2_status_base, p1_status_base) elif v2 == '7E': # マグニチュード p2_damage = dept_7e(p2_waza_data[i], p2_level, p2_status_now, p1_status_now, p2_damage_hosei) elif v2 == '87': # 目覚めるパワー p2_damage = dept_87( p2_waza_data[i], p2_mezapa_type, p2_mezapa_iryoku, p2_item, p2_status_base, p1_status_base, p2_level, p2_status_now, p1_status_now, p2_damage_hosei ) elif v2 == '8A': # 鋼の翼 p2_rank_base[1] = dept_8a(p2_waza_data[i], p2_rank_base) elif v2 == '8B': # メタルクロー p2_rank_base[0] = dept_8b(p2_waza_data[i], p2_rank_base) elif v2 == '8C': # 原始の力 p2_rank_base[:5] = dept_8c(p2_waza_data[i], p2_rank_base) elif v2 == '92': # 竜巻 p1_hirumi = dept_92(p2_waza_data[i]) elif v2 == '96': # 踏みつけ p1_hirumi = dept_96(p2_waza_data[i]) elif v2 == '97': # ソーラービーム p2_97, p2_damage = dept_97(p2_97, p2_damage) if p2_bit[i] in (0,1): # 外れか命中 if v2 in ('09','52','55','59','5F','62','6A','70','72','7F','90'): pass # オウム返し(09)・物真似(52)・はねる(55)・スケッチ(5F)・道連れ(62)・蜘蛛の巣(6A)・撒き菱(70)・滅びの歌(72) # バトンタッチ(7F) # 先手/カウンター(59)・ミラーコート(90) elif v2 == '0A': # ヨガのポーズなど p2_rank_base = dept_0a(p2_rank_base) elif v2 == '0B': # 固くなるなど p2_rank_base = dept_0b(p2_rank_base) elif v2 == '0D': # 成長 p2_rank_base = dept_0d(p2_rank_base) elif v2 == '10': # 影分身など p2_rank_base, p2_10 = dept_10(p2_waza_data[i], p2_rank_base, p2_10) elif v2 == '1E': # テクスチャー p2_status_base = dept_1e(p2_texture, p2_status_base) elif v2 == '19': # 黒い霧 p2_rank_base, p1_rank_base = dept_19(p2_rank_base, p1_rank_base) elif v2 == '20-A': # 自己再生など p2_status_base = dept_20a(p2_status_base, p2_div, p2_max) elif v2 == '20-B': # 眠る p2_status_base, p2_ailment = dept_20b(p2_status_base, p2_max, p2_ailment) elif v2 == '23': # 光の壁 p2_23 = dept_23(p2_23) elif v2 == '26': # ハサミギロチンなど p2_damage, p2_bit[i], p2_26 = dept_26(p2_level, p1_level, p2_damage_hosei, p2_waza_data[i], p2_rank_rate, p1_item, p1_4f, p1_6f, p2_damage, p2_bit[i], p2_26) elif v2 == '27': # かまいたち p2_27, p2_damage = dept_27(p2_27, p2_waza_data, i, p2_bit, p2_damage) elif v2 == '2D': # 飛び蹴りなど p2_status_base = dept_2d(p2_bit[i], p2_status_base, p2_waza_data[i], p2_level, p2_status_now, p1_status_now, p2_damage_hosei) elif v2 == '2E': # 白い霧 p2_2e = dept_2e() elif v2 == '2F': # 気合溜め p2_2f = dept_2f() elif v2 == '32': # 剣の舞 p2_rank_base = dept_32(p2_rank_base) elif v2 == '33': # バリアーなど p2_rank_base = dept_33(p2_rank_base) elif v2 == '34': # 高速移動 p2_rank_base = dept_34(p2_rank_base) elif v2 == '36': # 度忘れ p2_rank_base = dept_36(p2_rank_base) elif v2 == '39': # 変身 p2_status_base[1:10], p2_rank_base, p2_negoto, p2_texture, p2_migawari, p2_mezapa_type, p2_mezapa_iryoku, p2_pokemon = dept_39(p1_status_base[1:10], p1_rank_base, p1_negoto, p1_texture, p1_mezapa_type, p1_mezapa_iryoku, p2_pokemon, p1_pokemon) elif v2 == '41': # リフレクター p2_41 = dept_41(p2_41) elif v2 == '4B': # ゴッドバード p2_4b, p2_damage = dept_4b(p2_4b, p2_waza_data, i, p2_bit, p2_damage) elif v2 == '4F': # 身代わり p2_4f, p2_status_base = dept_4f(p2_4f, p2_div, p2_status_base) elif v2 == '50': # 破壊光線 p2_50 = dept_50() elif v2 == '66': # 癒しの鈴 p2_ailment, p2_konran, p2_21 = dept_66(p2_ailment, p2_konran, p2_21) elif v2 == '6B': # 悪夢 p1_6b = dept_6b(p1_ailment, p1_4f, p1_6b) elif v2 == '6D': # のろい p2_rank_base, p1_6d = dept_6d(p2_status_base, p2_rank_base, p1_4f, p2_div) elif v2 in ('6F','74'): # 守るなど・堪える p2_6f, p2_bit[i], p1_6f = dept_6f(p2_waza_data, i, p2_bit, p2_4f, p2_6f, p1_6f) elif v2 == '73': # 砂嵐 p_73, p_88, p_89 = dept_73() elif v2 == '75': # 転がる p2_75 = dept_75(p2_waza_data, i, p2_bit, p2_75) elif v2 == '77': # 連続斬り p2_77 = dept_77(p2_waza_data, i, p2_bit, p2_77) elif v2 == '7A': # プレゼント p1_status_base, p2_damage = dept_7a( p1_4f, p2_waza_data[i], p2_bit[i], p1_status_base, p1_div, p1_max, p2_damage, p2_status_base, p2_damage_hosei, p2_level, p2_status_now, p1_status_now, p2_ailment, p2_rank_rate, p1_rank_rate, p1_41 ) elif v2 == '7C': # 神秘の守り p2_7c = dept_7c(p2_7c) elif v2 == '81': # 高速スピン p2_2a, p2_54 = dept_81(p2_bit[i], p1_status_base, p2_2a, p2_54) elif v2 in ('84','85','86'): # 朝の陽射しなど p2_status_base = dept_84(p2_status_base, p2_div, p2_max) elif v2 == '88': # 雨乞い p_73, p_88, p_89 = dept_88() elif v2 == '89': # 日本晴れ p_73, p_88, p_89 = dept_89() elif v2 == '8E': # 腹太鼓 p2_rank_base, p2_status_base = dept_8e(p2_div, p2_status_base, p2_rank_base) elif v2 == '8F': # 自己暗示 p2_rank_base = dept_8f(p2_rank_base, p1_rank_base) elif v2 == '91': # ロケット頭突き p2_91, p2_rank_base, p2_damage = dept_91(p2_91, p2_rank_base, p2_waza_data, i, p2_bit, p2_damage) elif v2 == '94': # 未来予知 p2_94, p2_damage = dept_94(p2_94, p2_waza_data[i], p2_rank_rate, p1_item, p2_damage_hosei, p2_damage, p2_level, p2_status_now, p1_status_now) elif v2 == '9B-A': # 空を飛ぶ p2_9ba, p2_damage = dept_9ba(p2_9ba, p2_waza_data, i, p2_bit, p2_damage) elif v2 == '9B-B': # 穴を掘る p2_9bb, p2_damage = dept_9bb(p2_9bb, p2_waza_data, i, p2_bit, p2_damage) elif v2 == '9C': # 丸くなる p2_rank_base, p2_9c = dept_9c(p2_rank_base) # ダメージ計算 if p2_bit[i] == 1 and p2_damage > 0: if p1_4f <= 0: # 本体にダメージ p1_status_base[0] -= p2_damage else: # 身代わりにダメージ p1_4f -= p2_damage if p1_4f <= 0: p1_4f = -1 # 身代わり破壊フラグ if p2_item == 600 and p2_waza_data[i][4] == 1 and randbit(8) + 1 <= 30: # 王者の抽選 p1_hirumi = 1 if p1_item == 601 and p1_status_base[0] <= 0 and randbit(8) + 1 <= 30: # 鉢巻の抽選 p1_status_base[0] = 1 if won_check(p1_status_base, p2_count, i): break # p2 WIN if won_check(p2_status_base, p1_count, i): break # p1 WIN if any(p1_ailment) or p1_konran != 0: # P1の状態異常の判定 p1_ailment, p1_konran, p1_6b, p1_item = calc_recovery(p1_ailment, p1_konran, p1_6b, p1_item) # 自分のターン終了時 p2_status_base, p1_status_base = my_turn_end(p2_ailment, p2_21, p2_54, p2_6b, p2_6d, p2_status_base, p1_status_base, p2_div, p1_max) if won_check(p2_status_base, p1_count, i): break # p1 WIN # 後手P1 # ステータスの更新 p1_rank_base, p1_rank_rate = rank_hosei(p1_rank_base, p2_rank_base, p1_rank_rate, p1_waza_data[i], p1_pokemon, p1_item, p1_27, p1_2f) p2_rank_base, p2_rank_rate = rank_hosei(p2_rank_base, p1_rank_base, p2_rank_rate, p2_waza_data[i], p2_pokemon, p2_item, p2_27, p2_2f) p1_status_now, p2_status_now = calc_status_now(p1_status_now, p2_status_now) if gamemode == 2 and p1_hirumi != 0: # PBSの怯み p1_bit[i] = 2 if p1_bit[i] != 2 and p1_ailment[0] != 0: # 凍り判定 p1_bit[i] = 2 if p1_waza_data[i][5] in ('6C','7D'): # 火炎車・聖なる炎判定 p1_ailment[0], p1_bit[i] = 0, 1 elif p1_bit[i] != 2 and p1_ailment[3] > 0: # 眠り判定 p1_ailment[3] -= 1 if p1_ailment[3] > 0: p1_bit[i] = 2 if p1_waza_data[i][5] == '61': # 寝言判定 p1_bit[i] = 3 elif p1_waza_data[i][5] == '5C': # いびき判定 p1_bit[i] = 1 else: p1_6b = 0 # 悪夢を解除 if gamemode != 2 and p1_hirumi != 0: # 怯み判定 p1_bit[i] = 2 if p1_bit[i] != 2 and p1_50 != 0: # 反動判定 p1_50 = 0 p1_bit[i] = 2 if p1_bit[i] != 2 and p1_konran > 0: # 混乱判定 p1_konran -= 1 if p1_konran > 0 and randbit(1) == 0: # ステータスの再計算と混乱ダメージ p1_rank_base, p1_rank_rate = rank_hosei(p1_rank_base, p2_rank_base, p1_rank_rate, p1_waza_data[i], p1_pokemon, p1_item, p1_27, p1_2f) p1_status_now = calc_status_konran_now(p1_status_now, p1_status_base, p1_rank_rate, p1_pokemon, p1_item, p1_41, p1_ailment, p1_23) base = calc_konran_damage(p1_level, p1_status_now, p1_damage_hosei) p1_4f, p1_status_base = calc_konran_damage_4f(p1_4f, p1_status_base, base) # 身代わりか本体にダメージ if won_check(p1_status_base, p2_count, i): break # p2 WIN p1_bit[i] = 2 if p1_bit[i] != 2 and p1_78 != 0 and randbit(1) == 0: # メロメロ判定 p1_bit[i] = 2 if p1_bit[i] != 2 and p1_ailment[4] != 0 and randbit(2) == 0: # 麻痺判定 p1_bit[i] = 2 if p1_bit[i] == 3: # 寝言 p1_waza_data[i] = dept_61(p1_negoto) p1_61 = 1 # 寝言のフラグ p1_bit[i] = 1 p1_status_recalc = 1 if p1_bit[i] != 2: # 行動判定と命中判定 if p1_waza_data[i][5] == '4F' and ai != 0: # AI 身代わり処理 p1_waza_data[i] = ai_4f(p1_ai_base, p1_status_now, p2_status_now, p1_4f, p2_konran, p1_status_base, p1_div, p1_migawari) p1_status_recalc = 1 if p1_waza_data[i][5] == '61' and ai != 0 and p1_ailment[3] == 0: # AI 寝言処理 p1_waza_data[i] = ai_61(p1_ai_base, p1_status_base, p1_max, p2_status_base, p1_status_now, p2_status_now, p1_negoto) p1_status_recalc = 1 if p1_status_recalc == 1: # ステータスの更新 p1_rank_base, p1_rank_rate = rank_hosei(p1_rank_base, p2_rank_base, p1_rank_rate, p1_waza_data[i], p1_pokemon, p1_item, p1_27, p1_2f) p2_rank_base, p2_rank_rate = rank_hosei(p2_rank_base, p1_rank_base, p2_rank_rate, p2_waza_data[i], p2_pokemon, p2_item, p2_27, p2_2f) p1_damage_hosei = set_damage_hosei(p1_damage_hosei, p1_waza_data[i], p1_item, p1_rank_rate, p1_68, p1_status_base, p2_status_base, p1_75, p1_9c, p1_77, p2_9bb, p2_9ba, p2_10) p1_status_now, p2_status_now = calc_status_now(p1_status_now, p2_status_now) if p1_71 != 0: # 見破る判定 p1_damage_hosei, p1_rank_rate = calc_71(p1_waza_data[i], p2_status_base, p1_damage_hosei, p1_rank_base, p2_rank_base, p1_rank_rate, p2_item) if p1_waza_data[i][5] == '98': # 雷の命中変更 p1_waza_data[i] = calc_98(p1_waza_data[i]) if p2_6f > 0 and p2_waza_data[i][5] == '6F': # 守る p1_bit[i] = 0 if p2_9ba != 0 and p2_waza_data[i][5] == '9B-A' and not(p1_waza_data[i][5] in ('1C','92','95','98')): # 空を飛ぶ p1_bit[i] = 0 if p2_9bb != 0 and p2_waza_data[i][5] == '9B-B' and not((p1_waza_data[i][5] == '26' and p1_waza_data[i][0] == 4) or p1_waza_data[i][5] in ('7E','9B-B')): # 穴を掘る p1_bit[i] = 0 if p1_waza_data[i][1] > 0 and p1_damage_hosei[6] == 0: # 攻撃技の効果なし判定,変化技は別途 p1_bit[i] = 0 if calc_accuracy(p1_waza_data[i], p1_rank_rate, p2_item) != 1: # 命中判定 p1_bit[i] = 0 if p1_waza_data[i][1] > 1 and p1_bit[i] == 1: # 威力2以上で計算と保持 if p2_waza_data[i][5] == '68' and gamemode == 2 and p2_bit[i] == 1 and not(p1_waza_data[i][5] in ('29','57','58','68','75','78')): # トリプルキックの倍率バグ(PBS) p1_68 = p2_68 # your最終倍率をコピー p1_damage = calc_damage(p1_waza_data[i], p1_level, p1_status_now, p2_status_now, p1_damage_hosei) v1 = p1_waza_data[i][5] if p1_bit[i] == 1: # 命中のみ判定 if v1 in ('00-A','00-B','11-A','11-B','23','67','80','93','95'): # 処理 pass # はたく(00-A)・rank_hoseiで処理(00-B)・スピードスター(11-A)・当て身投げ(11-B) # 猫に小判(23)・電光石火(67)・追い打ち(80)・地震(93)・風起こし(95) elif v1 in ('07','1A','1B','1C','51','53','56','5A','5D','5E','64','79','7B','99','9A'): # 未実装 pass # 自爆(07)・我慢(1A)・暴れる(1B)・吹き飛ばし(1C) # いかり(51)・指を振る(53)・金縛り(56)・アンコール(5A)・テクスチャー2(5D)・心の眼(5E)・恨み(64) # 恩返し(79)・八つ当たり(7B)・テレポート(99)・袋叩き(9A) elif v1 == '01': # 歌う等 p2_ailment = dept_01(p2_4f, p2_7c, p2_ailment) elif v1 == '02': # 毒針等 p2_ailment = dept_02(p2_4f, p2_7c, p2_status_base, p2_ailment, p1_waza_data[i]) elif v1 == '03': # 吸い取る等 p1_damage, p1_bit[i], p1_status_base = dept_03(p2_4f, p1_damage, p1_status_base, p1_max, p1_bit[i]) elif v1 in ('04','6C','7D'): # 火傷など p2_ailment = dept_04(p2_4f, p2_7c, p2_status_base, p2_ailment, p1_waza_data[i]) elif v1 == '05': # 凍りなど p2_ailment = dept_05(p2_4f, p2_7c, p2_status_base, p2_ailment, p1_waza_data[i]) elif v1 in ('06','98'): # 麻痺など p2_ailment = dept_06(p2_4f, p2_7c, p2_ailment, p1_waza_data[i]) elif v1 == '08': # 夢喰い p1_damage, p1_bit[i], p1_status_base = dept_08(p2_4f, p2_ailment, p1_damage, p1_status_base, p1_max, p1_bit[i]) elif v1 == '12': # 鳴き声 p2_rank_base = dept_12(p2_rank_base, p2_4f, p2_2e) elif v1 == '13': # 尻尾を振るなど p2_rank_base = dept_13(p2_rank_base, p2_4f, p2_2e) elif v1 == '14': # 糸を吐く p2_rank_base = dept_14(p2_rank_base, p2_4f, p2_2e) elif v1 == '17': # 砂かけなど p2_rank_base = dept_17(p2_rank_base, p2_4f, p2_2e) elif v1 == '18': # 甘い香り p2_rank_base = dept_18(p2_rank_base, p2_4f, p2_2e) elif v1 == '1D': # 往復ビンタなど p1_damage = dept_1d(p1_rank_rate, p1_waza_data[i], p1_level, p1_status_now, p2_status_now, p1_damage_hosei, p1_damage) elif v1 == '1F': # 回し蹴りなど p2_hirumi = dept_1f(p1_waza_data[i]) elif v1 == '21': # 毒々 p2_ailment, p2_21 = dept_21(p2_4f, p2_7c, p2_status_base, p2_ailment, p1_waza_data[i], p2_21) elif v1 == '24': # トライアタック p2_ailment = dept_24(p2_4f, p2_7c, p2_ailment, p1_waza_data[i]) elif v1 == '28': # 怒りの前歯 p1_damage = dept_28(p2_status_base) elif v1 == '29': # ソニックブームなど p1_damage = dept_29(p1_waza_data[i]) elif v1 == '2A': # 締め付けるなど p2_2a = dept_2a() elif v1 == '2C': # 二度蹴りなど p1_damage = dept_2c(p1_damage_hosei, p1_rank_rate, p1_damage, p1_waza_data[i], p1_level, p1_status_now, p2_status_now) elif v1 == '30-A': # 突進など p1_status_base = dept_30a(p2_4f, p1_status_base, p1_damage) elif v1 == '30-B': # わるあがき p1_damage, p1_status_base = dept_30b(p2_4f, p2_status_base, p1_status_base, p1_item, p1_damage, p1_damage_hosei, p1_waza_data[i], p1_level, p1_status_now, p2_status_now) elif v1 == '31': # 超音波など p2_konran = dept_31(p2_4f, p2_7c, p2_konran) elif v1 == '3A': # 甘える p2_rank_base = dept_3a(p2_rank_base, p2_4f, p2_2e) elif v1 == '3B': # 嫌な音 p2_rank_base = dept_3a(p2_rank_base, p2_4f, p2_2e) elif v1 == '3C': # 綿胞子など p2_rank_base = dept_3a(p2_rank_base, p2_4f, p2_2e) elif v1 == '42': # 毒の粉など p2_ailment = dept_42(p2_4f, p2_7c, p2_status_base, p2_ailment) elif v1 == '43': # 痺れ粉 p2_ailment = dept_43(p2_4f, p2_7c, p1_damage_hosei, p2_ailment) elif v1 == '44': # オーロラビーム p2_rank_base = dept_44(p2_rank_base, p2_4f, p2_2e, p1_waza_data[i]) elif v1 == '45': # 溶解液など p2_rank_base = dept_45(p2_rank_base, p2_4f, p2_2e, p1_damage, p1_waza_data[i]) elif v1 == '46': # バブル光線など p2_rank_base = dept_46(p2_rank_base, p2_4f, p2_2e, p1_waza_data[i]) elif v1 == '48': # サイコキネシスなど p2_rank_base = dept_48(p2_rank_base, p2_4f, p2_2e, p1_waza_data[i]) elif v1 == '49': # 泥かけなど p2_rank_base = dept_49(p2_rank_base, p2_4f, p2_2e, p1_waza_data[i]) elif v1 == '4C': # サイケ光線など p2_konran = dept_4c(p2_4f, p2_7c, p2_konran, p1_waza_data[i]) elif v1 == '4D': # ダブルニードル p1_damage, p2_ailment = dept_4d(p1_damage_hosei, p1_rank_rate, p1_damage, p1_waza_data[i], p1_level, p1_status_now, p2_status_now, p2_4f, p2_7c, p2_status_base, p2_ailment) elif v1 == '54': # 宿り木の種 p2_54 = dept_54(p2_4f, p2_54, p2_status_base) elif v1 == '57': # 地球投げなど p1_damage = dept_57(p1_level) elif v1 == '58': # サイコウェーブ p1_damage = dept_58(p1_58) elif v1 == '5B': # 痛み分け p1_status_base, p2_status_base = dept_5b(p2_4f, p1_status_base, p2_status_base, p1_max, p2_max) elif v1 == '5C': # いびき p1_damage, p2_hirumi = dept_5c(p1_ailment, p1_waza_data[i], p2_hirumi, p1_damage) elif v1 == '63': # じたばたなど p1_damage = dept_63(p1_63, p1_status_base, p1_waza_data[i], p1_max, p1_damage_hosei, p1_damage, p1_level, p1_status_now, p2_status_now) elif v1 == '65': # みねうち p1_damage = dept_65(p2_4f, p2_status_base, p1_damage) elif v1 == '68': # トリプルキック p1_damage, p1_68 = dept_68(p1_68, p1_waza_data[i], p1_rank_rate, p2_item, p1_damage, p1_damage_hosei, p1_level, p1_status_now, p2_status_now) elif v1 == '69': # 泥棒 p1_item, p2_item = dept_69(p1_item, p2_item, p2_4f) elif v1 == '71': # 見破る p1_71 = dept_71() elif v1 == '76': # 威張る p2_rank_base, p2_konran = dept_76(p2_rank_base, p2_4f, p2_7c, p2_konran) elif v1 == '78': # メロメロ p2_78 = dept_78(p1_status_base, p2_status_base) elif v1 == '7E': # マグニチュード p1_damage = dept_7e(p1_waza_data[i], p1_level, p1_status_now, p2_status_now, p1_damage_hosei) elif v1 == '87': # 目覚めるパワー p1_damage = dept_87( p1_waza_data[i], p1_mezapa_type, p1_mezapa_iryoku, p1_item, p1_status_base, p2_status_base, p1_level, p1_status_now, p2_status_now, p1_damage_hosei ) elif v1 == '8A': # 鋼の翼 p1_rank_base[1] = dept_8a(p1_waza_data[i], p1_rank_base) elif v1 == '8B': # メタルクロー p1_rank_base[0] = dept_8b(p1_waza_data[i], p1_rank_base) elif v1 == '8C': # 原始の力 p1_rank_base[:5] = dept_8c(p1_waza_data[i], p1_rank_base) elif v1 == '92': # 竜巻 p2_hirumi = dept_92(p1_waza_data[i]) elif v1 == '96': # 踏みつけ p2_hirumi = dept_96(p1_waza_data[i]) elif v1 == '97': # ソーラービーム p1_97, p1_damage = dept_97(p1_97, p1_damage) if p1_bit[i] in (0,1): # 外れか命中 if v1 in ('09','52','55','5F','62','6A','6F','70','72','74','7F'): pass # オウム返し(09)・物真似(52)・はねる(55)・スケッチ(5F)・道連れ(62)・蜘蛛の巣(6A)・撒き菱(70)・滅びの歌(72) # バトンタッチ(7F) # 後手/守る(6F)・堪える(74) elif v1 == '0A': # ヨガのポーズなど p1_rank_base = dept_0a(p1_rank_base) elif v1 == '0B': # 固くなるなど p1_rank_base = dept_0b(p1_rank_base) elif v1 == '0D': # 成長 p1_rank_base = dept_0d(p1_rank_base) elif v1 == '10': # 影分身など p1_rank_base, p1_10 = dept_10(p1_waza_data[i], p1_rank_base, p1_10) elif v1 == '1E': # テクスチャー p1_status_base = dept_1e(p1_texture, p1_status_base) elif v1 == '19': # 黒い霧 p1_rank_base, p2_rank_base = dept_19(p1_rank_base, p2_rank_base) elif v1 == '20-A': # 自己再生など p1_status_base = dept_20a(p1_status_base, p1_div, p1_max) elif v1 == '20-B': # 眠る p1_status_base, p1_ailment = dept_20b(p1_status_base, p1_max, p1_ailment) elif v1 == '23': # 光の壁 p1_23 = dept_23(p1_23) elif v1 == '26': # ハサミギロチンなど p1_damage, p1_bit[i], p1_26 = dept_26(p1_level, p2_level, p1_damage_hosei, p1_waza_data[i], p1_rank_rate, p2_item, p2_4f, p2_6f, p1_damage, p1_bit[i], p1_26) elif v1 == '27': # かまいたち p1_27, p1_damage = dept_27(p1_27, p1_waza_data, i, p1_bit, p1_damage) elif v1 == '2D': # 飛び蹴りなど p1_status_base = dept_2d(p1_bit[i], p1_status_base, p1_waza_data[i], p1_level, p1_status_now, p2_status_now, p1_damage_hosei) elif v1 == '2E': # 白い霧 p1_2e = dept_2e() elif v1 == '2F': # 気合溜め p1_2f = dept_2f() elif v1 == '32': # 剣の舞 p1_rank_base = dept_32(p1_rank_base) elif v1 == '33': # バリアーなど p1_rank_base = dept_33(p1_rank_base) elif v1 == '34': # 高速移動 p1_rank_base = dept_34(p1_rank_base) elif v1 == '36': # 度忘れ p1_rank_base = dept_36(p1_rank_base) elif v1 == '39': # 変身 p1_status_base[1:10], p1_rank_base, p1_negoto, p1_texture, p1_migawari, p1_mezapa_type, p1_mezapa_iryoku, p1_pokemon = dept_39(p2_status_base[1:10], p2_rank_base, p2_negoto, p2_texture, p2_mezapa_type, p2_mezapa_iryoku, p1_pokemon, p2_pokemon) elif v1 == '41': # リフレクター p1_41 = dept_41(p1_41) elif v1 == '4B': # ゴッドバード p1_4b, p1_damage = dept_4b(p1_4b, p1_waza_data, i, p1_bit, p1_damage) elif v1 == '4F': # 身代わり p1_4f, p1_status_base = dept_4f(p1_4f, p1_div, p1_status_base) elif v1 == '50': # 破壊光線 p1_50 = dept_50() elif v1 == '59': # カウンター p1_damage = dept_59(p2_26, p2_damage, p1_4f, p2_61, p1_damage_hosei, p2_waza_data[i]) elif v1 == '66': # 癒しの鈴 p1_ailment, p1_konran, p1_21 = dept_66(p1_ailment, p1_konran, p1_21) elif v1 == '6B': # 悪夢 p2_6b = dept_6b(p2_ailment, p2_4f, p2_6b) elif v1 == '6D': # のろい p1_rank_base, p2_6d = dept_6d(p1_status_base, p1_rank_base, p2_4f, p1_div) elif v1 == '73': # 砂嵐 p_73, p_88, p_89 = dept_73() elif v1 == '75': # 転がる p1_75 = dept_75(p1_waza_data, i, p1_bit, p1_75) elif v1 == '77': # 連続斬り p1_77 = dept_77(p1_waza_data, i, p1_bit, p1_77) elif v1 == '7A': # プレゼント p2_status_base, p1_damage = dept_7a( p2_4f, p1_waza_data[i], p1_bit[i], p2_status_base, p2_div, p2_max, p1_damage, p1_status_base, p1_damage_hosei, p1_level, p1_status_now, p2_status_now, p1_ailment, p1_rank_rate, p2_rank_rate, p2_41 ) elif v1 == '7C': # 神秘の守り p1_7c = dept_7c(p1_7c) elif v1 == '81': # 高速スピン p1_2a, p1_54 = dept_81(p1_bit[i], p2_status_base, p1_2a, p1_54) elif v1 in ('84','85','86'): # 朝の陽射しなど p1_status_base = dept_84(p1_status_base, p1_div, p1_max) elif v1 == '88': # 雨乞い p_73, p_88, p_89 = dept_88() elif v1 == '89': # 日本晴れ p_73, p_88, p_89 = dept_89() elif v1 == '8E': # 腹太鼓 p1_rank_base, p1_status_base = dept_8e(p1_div, p1_status_base, p1_rank_base) elif v1 == '8F': # 自己暗示 p1_rank_base = dept_8f(p1_rank_base, p2_rank_base) elif v1 == '90': # ミラーコート p1_damage = dept_90(p2_damage, p1_4f, p2_61, p1_damage_hosei, p2_waza_data[i]) elif v1 == '91': # ロケット頭突き p1_91, p1_rank_base, p1_damage = dept_91(p1_91, p1_rank_base, p1_waza_data, i, p1_bit, p1_damage) elif v1 == '94': # 未来予知 p1_94, p1_damage = dept_94(p1_94, p1_waza_data[i], p1_rank_rate, p2_item, p1_damage_hosei, p1_damage, p1_level, p1_status_now, p2_status_now) elif v1 == '9B-A': # 空を飛ぶ p1_9ba, p1_damage = dept_9ba(p1_9ba, p1_waza_data, i, p1_bit, p1_damage) elif v1 == '9B-B': # 穴を掘る p1_9bb, p1_damage = dept_9bb(p1_9bb, p1_waza_data, i, p1_bit, p1_damage) elif v1 == '9C': # 丸くなる p1_rank_base, p1_9c = dept_9c(p1_rank_base) # ダメージ計算 if p1_bit[i] == 1 and p1_damage > 0: if p2_4f <= 0: # 本体にダメージ p2_status_base[0] -= p1_damage else: # 身代わりにダメージ p2_4f -= p1_damage if p2_4f <= 0: p2_4f = -1 # 身代わり破壊フラグ if p2_6f > 0 and p2_waza_data[i][5] == '74' and p2_status_base[0] <= 0: # 堪える p2_status_base[0] = 1 if p1_item == 600 and p1_waza_data[i][4] == 1 and randbit(8) + 1 <= 30: # 王者の抽選 p2_hirumi = 1 if p2_item == 601 and p2_status_base[0] <= 0 and randbit(8) + 1 <= 30: # 鉢巻の抽選 p2_status_base[0] = 1 if won_check(p2_status_base, p1_count, i): break # p1 WIN if won_check(p1_status_base, p2_count, i): break # p2 WIN if any(p2_ailment) or p2_konran != 0: # P2の状態異常の判定 p2_ailment, p2_konran, p2_6b, p2_item = calc_recovery(p2_ailment, p2_konran, p2_6b, p2_item) # 自分のターン終了時 p1_status_base, p2_status_base = my_turn_end(p1_ailment, p1_21, p1_54, p1_6b, p1_6d, p1_status_base, p2_status_base, p1_div, p2_max) if won_check(p2_status_base, p1_count, i): break # p1 WIN # 全体のターン終了時 # 未来予知 if p1_94 != 0: p2_status_base, p1_94 = turn_end_94(i, p1_94, p2_status_base) if won_check(p2_status_base, p1_count, i): break # p1 WIN if p2_94 != 0: p1_status_base, p2_94 = turn_end_94(i, p2_94, p1_status_base) if won_check(p1_status_base, p2_count, i): break # p2 WIN # 砂嵐 if p_73 != 0: p2_status_base = turn_end_73(p_73, p2_status_base, p2_div) if won_check(p2_status_base, p1_count, i): break # p1 WIN p1_status_base = turn_end_73(p_73, p1_status_base, p1_div) if won_check(p1_status_base, p2_count, i): break # p2 WIN # 締め付ける if p2_2a != 0: p2_2e, p2_status_base = turn_end_2a(p2_2a, p2_status_base, p2_div) if won_check(p2_status_base, p1_count, i): break # p1 WIN if p1_2a != 0: p1_2e, p1_status_base = turn_end_2a(p1_2a, p1_status_base, p1_div) if won_check(p1_status_base, p2_count, i): break # p2 WIN # 食べ残し if p2_item == 603: p2_status_base = turn_end_item603(p2_item, p2_status_base, p2_div, p2_max) if p1_item == 603: p1_status_base = turn_end_item603(p1_item, p1_status_base, p1_div, p1_max) # 凍り解除 if p2_ailment[0] != 0: p2_ailment = turn_end_ailment0(p2_ailment) if p2_ailment[0] != 0: p1_ailment = turn_end_ailment0(p1_ailment) # 眠り解除 if p2_ailment[3] != 0: p2_ailment, p2_6b, p2_konran, p2_item = turn_end_ailment3(p2_ailment, p2_6b, p2_konran, p2_item) if p1_ailment[3] != 0: p1_ailment, p1_6b, p1_konran, p1_item = turn_end_ailment3(p1_ailment, p1_6b, p1_konran, p1_item) # 木の実 if p2_item in (100, 200, 300): p2_item, p2_status_base, p2_div = turn_end_item100(p2_item, p2_status_base, p2_div, p2_max) if p1_item in (100, 200, 300): p1_item, p1_status_base, p1_div = turn_end_item100(p1_item, p1_status_base, p1_div, p1_max) # 残ターンカウント # 砂嵐はturn_end_73で処理 p2_hirumi, p1_hirumi = 0, 0 # ひるみ解除 p2_26, p1_26 = 0, 0 # ハサミギロチン p2_41 -= 1 if p2_41 > 0 else 0 # リフレクター p1_41 -= 1 if p1_41 > 0 else 0 p2_4f = 0 if p2_4f == -1 else p2_4f # 身代わり p1_4f = 0 if p1_4f == -1 else p1_4f p2_61, p1_61 = 0, 0 # ねごと p1_68, p2_68 = 1, 1 # トリプルキック p_73 -= 1 if p_73 > 0 else 0 # 砂嵐 p2_7c -= 1 if p2_7c > 0 else 0 # 神秘の守り p1_7c -= 1 if p1_7c > 0 else 0 p_88 -= 1 if p_88 > 0 else 0 # 雨 p_89 -= 1 if p_89 > 0 else 0 # 日本晴れ # 判定 p1_sum, p2_sum = sum(p1_count), sum(p2_count) draw = trial - p1_sum - p2_sum total = p1_sum + p2_sum or 1 # 0除算回避 print(trial) print(p1_count, p2_count) print(f"{p1_sum} - {p2_sum} - {draw}") for i in range(length): p1_cum = sum(p1_count[:i+1]) p2_cum = sum(p2_count[:i+1]) p_draw = (trial - p1_cum - p2_cum) / trial print(f"turn {i+1}: {p1_cum / trial:.2%} - {p2_cum / trial:.2%} - {p_draw:.2%}") print(f"{p1_sum / total:.2%} - {p2_sum / total:.2%}") print('-') print([p1_mezapa_type, p1_mezapa_iryoku]) print(p1_status_base) print(p1_rank_base) print(p1_rank_rate) print(p1_status_now) print(p1_waza_data) print(p1_bit) print(p1_ailment) print(p1_damage_hosei) print(p1_damage) print('-') print([p2_mezapa_type, p2_mezapa_iryoku]) print(p2_status_base) print(p2_rank_base) print(p2_rank_rate) print(p2_status_now) print(p2_waza_data) print(p2_bit) print(p2_ailment) print(p2_damage_hosei) print(p2_damage) main()