アットウィキロゴ

敵も多彩な攻撃で、もう何が何やら。

1対1の殴りあいより複雑になったことは、、、

  • 友好反応またはワイロで無力化した敵は無視する
  • 召還悪魔フレッドが味方になった場合、ダメージはフレッドが請け負ってくれる。
  • 召還悪魔フレッドが敵に加勢した場合、敵の最後の順番で攻撃させるようにする。
  • 敵数が少ない場合、いない敵の行動を調べるのはやめて敵25(敵の召還悪魔フレッド)にいきなり手番を渡す
  • 毒などの効果は敵の手番が終わったときに反映
  • 魔法の効果やステータス変化たくさんありすぎ
// 敵が行動可能か、どの行動をするかを決める 
combat.enemy_select = function (i){
    //add_msg("combat.enemy_select(" + i + ")に入った。");

    // ターン数の計算
    if (i === 0 && enemy_party.first_strike === true && enemy[i].wolf_double_speed !== 2){
        combat.turn_num++;
    }

    if (enemy[i].gelatin === true) {
        enemy[i].LIFE_POINT -= 10;
        add_msg("魔法のラッパのゼラチンが" + enemy[i].name + "の生命点を10点吸収した。");
        update_status();
    }

    if (enemy[i].max_LIFE_POINT <= 0 ) {
	//add_msg("敵" + i + "は初めからいない。");
        if (i === enemy.length - 1) {
            combat.enemy_do(i); // 敵フレッドはenemy25_doへ。
        } else {
            combat.enemy_select(enemy.length - 1); // 敵最後のフレッド(enemy25_select)まで順番をスキップ
        }
    } else if (enemy[i].Friendly_Reaction === true) {
        add_msg(enemy[i].name + "は友好的だ。");
        combat.enemy_do(i);
    } else if (enemy[i].Bribery === true) {
        add_msg(enemy[i].name + "はワイロで買収されている。");
        combat.enemy_do(i);
    } else if (enemy[i].LIFE_POINT <= 0 && enemy[i].max_LIFE_POINT > 0) {
        add_msg(enemy[i].name + "は死んでいる。");
        combat.enemy_do(i);
    } else if (enemy[i].LIFE_POINT <= 5 && enemy[i].max_LIFE_POINT > 5) {
        add_msg(enemy[i].name + "は気絶している。");
        combat.enemy_do(i);
    } else if (enemy[i].sleep_globe > 0) { //眠り玉で眠っている
        add_msg(enemy[i].name + "は残り" + (enemy[i].sleep_globe - 1) + "回分、眠り玉で眠っている。");
        combat.enemy_do(i);
    } else if (enemy[i].Eye_of_Horus > 0) { //太陽神の目で催眠状態。
        add_msg(enemy[i].name + "は残り" + (enemy[i].Eye_of_Horus - 1) + "回分、太陽神の目で催眠状態になっている。");
        combat.enemy_do(i);
    } else if (enemy[i].Laughing_Globe > 0) { //笑い玉で笑っている
        add_msg(enemy[i].name + "は残り" + (enemy[i].Laughing_Globe - 1) + "回分、笑い玉で笑っている。");
        combat.enemy_do(i);
    } else if (enemy[i].Psionic_Helm_Stop > 0) { //脳波で衰弱している
        add_msg(enemy[i].name + "は残り" + (enemy[i].Psionic_Helm_Stop - 1) + "回分、脳波で衰弱して動けない。");
        combat.enemy_do(i);
    } else if (enemy[i].attack_way === "ドラゴン・ファイア錠") { // 魔女スクロッグ
        add_msg(enemy[i].name + "は" + (enemy[i].attack_base + 1 ) + "つ目のドラゴン・ファイア錠を飲んだ。");
        combat.enemy_do(i);
    } else if (Section.num === "154" && combat.turn_num === 1) { // 警官、最初の攻撃の機会。
        add_msg(enemy[i].name + "は警笛を吹き鳴らして署から応援を呼んだ。サイコロを1個振れ。");
        dice.start(1, "Police_help");
    } else {
        if (Fred.sumon === true && Fred.LIFE_POINT >= 0){
            add_msg(enemy[i].name + "は" + enemy[i].attack_way + "でフレッドを攻撃。");
        } else {
            add_msg(enemy[i].name + "は" + enemy[i].attack_way + "でピップを攻撃。");
        }
        dice.start(2, "combat.enemy_do('" + i + "')");
    }
}
// 敵の行動
combat.enemy_do = function (i) {
    //add_msg("combat.enemy_do(" + i + ")に入った。");
    var attack_point = Math.max(dice.dice12pip - enemy[i].attack_base, 0) + enemy[i].extra_damage;
    var damage_point = attack_point - Pip.defence;
    var any_msg = false;

    if (enemy[i].max_LIFE_POINT <= 0 ) {
        //初めからいない
    } else if (enemy[i].Friendly_Reaction === true) {
        // 有効
    } else if (enemy[i].Bribery === true) {
        // ワイロ
    } else if (enemy[i].LIFE_POINT <= 0 && enemy[i].max_LIFE_POINT > 0) {
        //死んでいる
    } else if (enemy[i].LIFE_POINT <= 5 && enemy[i].max_LIFE_POINT > 5) {
        //気絶している
    } else if (enemy[i].sleep_globe > 0) {
        //眠り玉で眠っている
        enemy[i].sleep_globe--;
        if (enemy[i].sleep_globe === 0) {
            add_msg(enemy[i].name + "は目をさました。");
        }
    } else if (enemy[i].Eye_of_Horus > 0) {
        //太陽神の目で催眠状態
        enemy[i].Eye_of_Horus--;
        if (enemy[i].Eye_of_Horus === 0) {
            add_msg(enemy[i].name + "は催眠状態から戻った。");
        }
    } else if (enemy[i].Laughing_Globe > 0) {
        //笑い玉で笑っている
        enemy[i].Laughing_Globe--;
        if (enemy[i].Laughing_Globe === 0) {
            add_msg(enemy[i].name + "の笑いがおさまった。");
        }
    } else if (enemy[i].Psionic_Helm_Stop > 0) {
        //脳波で衰弱している
        enemy[i].Psionic_Helm_Stop--;
        if (enemy[i].Psionic_Helm_Stop === 0) {
            add_msg(enemy[i].name + "はようやく動けるようになった。");
        }
    } else if (Section.num === "154" && combat.turn_num === 1) {
        add_msg(dice.die1pip + "人の警官が駆けつけた。");
        var j;
        for (j = 1; j < dice.die1pip + 1; j++) {
            enemy[j].id_num = enemy_party.id_num;
            enemy[j].name = enemy_data[enemy_party.id_num].name + (j + 1);
            enemy[j].max_LIFE_POINT = enemy_data[enemy_party.id_num].max_LIFE_POINT;
            enemy[j].LIFE_POINT = enemy_data[enemy_party.id_num].LIFE_POINT;
            enemy[j].attack_base = enemy_data[enemy_party.id_num].attack_base;
            enemy[j].extra_damage = enemy_data[enemy_party.id_num].extra_damage;
            enemy[j].defence = enemy_data[enemy_party.id_num].defence;
            enemy[j].attack_way = enemy_data[enemy_party.id_num].attack_way;
            enemy[j].Bribery_amount = enemy_data[enemy_party.id_num].Bribery_amount;
        }
    } else {  //攻撃してくる

        if (Pip.bolt_charge === true && dice.dice12pip === 12 && (Fred.sumon === false || Fred.LIFE_POINT <= 0)) {
            enemy[i].LIFE_POINT = 0;
            add_msg("首に刺さったボルトに武器が当たって" + enemy[i].name + "は感電死した!");
            update_status();
        } else if (dice.dice12pip <= enemy[i].attack_base) {
            any_msg = true;
            add_msg("空振り!");
        } else if (damage_point <= 0) {
            any_msg = true;
            if (Fred.sumon === true && Fred.LIFE_POINT >= 0) {
                add_msg("ミス! フレッドは被害を受けない。");
            } else {
                add_msg("ミス! ピップは被害を受けない。");
            }
        } else { // 被害点が1以上

            if (enemy[i].attack_way === "魔法のラッパ") {
                if (Fred.sumon === true && Fred.LIFE_POINT >= 0) {
                    Fred.gelatin = true;
                    add_msg("フレッドは全身ゼリー状の粘液に包まれた。");
                } else {
                    Pip.gelatin = true;
                    add_msg("きみは全身ゼリー状の粘液に包まれた。");
                }
                enemy[i].attack_base = 6;
                enemy[i].extra_damage = 0;
                enemy[i].attack_way = "素手";

            } else {

                if (enemy[i].attack_way === "稲妻の矢") {
                    if (Fred.sumon === true && Fred.LIFE_POINT >= 0) {
                        damage_point = Math.floor(Fred.LIFE_POINT / 2);
                    } else {
                        damage_point = Math.floor(Pip.LIFE_POINT / 2);
                    }
                }

                if (enemy[i].attack_way === "ドラゴン・ファイア錠") {
                    damage_point = 25;
                }

                if (enemy[i].Psionic_Helm_Half === true) {
                    damage_point = Math.floor(damage_point / 2);
                    add_msg(enemy[i].name + "は脳波で衰弱しているので半分しか被害点を与えられない。");
                }

                if (Pip.impermeable_bubble > 0) {
                    damage_point = 0;
                    add_msg("泡渦巻きが被害点をはねとばした。");
                    Pip.impermeable_bubble--;
                    if (Pip.impermeable_bubble > 0) {
                        add_msg("泡渦巻きの効果はあと" + Pip.impermeable_bubble + "回。");
                    } else {
                        add_msg("泡渦巻きを使い切った。窒息死する前に脱出した。");
                        data_magic[Pip_magic[i].id_num].label = "使う";
                    }

                }

                if (Fred.sumon === true && Fred.LIFE_POINT >= 0) {
                    Fred.LIFE_POINT -= damage_point;
                    add_msg("フレッドは" + enemy[i].name + "から" + damage_point + "点の被害を受けた。");
                } else {
                    Pip.LIFE_POINT -= damage_point;
                    add_msg("ピップは" + enemy[i].name + "から" + damage_point + "点の被害を受けた。");
                }
                any_msg = true;

                if (Section.num === "105" && combat.turn_num === 1) {
                    if (Fred.sumon === true && Fred.LIFE_POINT >= 0) {
                        Fred.ghoul_poison = true;
                        add_msg("食屍鬼から毒を受けた! この戦いが終わるまで、1ラウンド毎にフレッドは生命点を3点ずつ失っていく。");
                    } else {
                        Pip.ghoul_poison = true;
                    add_msg("食屍鬼から毒を受けた! この戦いが終わるまで、1ラウンド毎にきみは生命点を3点ずつ失っていく。");
                    }
                }

                if (Section.num === "73") {
                    if (Fred.sumon === true && Fred.LIFE_POINT >= 0) {
                        Fred.scorpion_poison = true;
                        add_msg("フレッドの身体にサソリの毒がまわった。以後のセクションに入るたびに生命点を2点ずつ失っていく。");
                    } else {
                        Pip.scorpion_poison = true;
                        add_msg("きみの身体にサソリの毒がまわった。以後のセクションに入るたびに生命点を2点ずつ失っていく。");
                    }

                }

                if (enemy[i].attack_way === "稲妻の矢") {
                    add_msg("魔女ミニーは稲妻の矢が尽きた。");
                    enemy[i].attack_base = 6;
                    enemy[i].extra_damage = 0;
                    enemy[i].attack_way = "素手";
                }

                if (enemy[i].attack_way === "ドラゴン・ファイア錠") {
                    enemy[i].attack_base++;
                    if (enemy[i].attack_base === 6) {
                        add_msg("魔女スクロッグはドラゴン・ファイア錠が尽きた。");
                        enemy[i].attack_base = 6;
                        enemy[i].extra_damage = 0;
                        enemy[i].attack_way = "素手;"
                    }
                }

                if (Section.num === "131") {
                    combat.round++;
                    Pip.round_damage += damage_point;
                    add_msg("きみがこれまでアドルフから受けた被害点は" + Pip.round_damage + "点。");
                    add_msg("アドルフが一撃を与えてラウンド" + combat.round + "が終了した。");
                }
                if (Section.num === "146") {
                    combat.round++;
                    Pip.round_damage += damage_point;
                    add_msg("きみがこれまでマオから受けた被害点は" + Pip.round_damage + "点。");
                    add_msg("マオが一撃を与えてラウンド" + combat.round + "が終了した。");
                }
            }
        }
    }

    if (i === enemy.length - 1) {
        if (Pip.ghoul_poison === true) {
            Pip.LIFE_POINT -= 3;
            add_msg("食屍鬼の毒で生命点を3点失った。");
        }

        if (Fred.ghoul_poison === true) {
            Fred.LIFE_POINT -= 3;
            add_msg("食屍鬼の毒で生命点を3点失った。");
        }

        if (Pip.gelatin === true) {
            Pip.LIFE_POINT -= 10;
            add_msg("ゼリー状の粘液から生命点を10点吸い取られた。");
        }

        if (Fred.gelatin === true) {
            Fred.LIFE_POINT -= 10;
            add_msg("ゼリー状の粘液から生命点を10点吸い取られた。");
        }

    }

    if (any_msg === true) {
        any_msg = false;
    } else {
    }

    update_status();
    combat.enemy2Pip_turn(i);
}
// 戦闘を続行してピップにターンを渡すかどうか判断
combat.enemy2Pip_turn = function (i) {
    var j, k;
    var max_enemy_LIFE_POINT = 0;
    for (j = 0; j < enemy.length; j++) {
        if (enemy[j].Friendly_Reaction === true || enemy[j].Bribery === true) {
            // 友好的またはワイロで買収された敵はカウントしない
        } else {
            max_enemy_LIFE_POINT = Math.max(max_enemy_LIFE_POINT, enemy[j].LIFE_POINT);
        }
    }

    if (Pip.LIFE_POINT <= 0 && Pip.Resurrection_Wand === true) {
        add_msg("復活の杖で14行きを避けた! ピップの生命点が完全回復した!");
        Pip.Resurrection_Wand = false;
        Pip.LIFE_POINT = Pip.max_LIFE_POINT;
        data_magic[15].label = "使う";
    }

    if (Pip.LIFE_POINT <= 0) { //ピップが死んだ
        add_msg("ピップは生命点が0になった。14に行け。");
    } else if (max_enemy_LIFE_POINT <= 0) { //敵が死んだ
        add_msg("敵をやっつけた!");
        combat.result();    //戦後処理へ
    } else if (max_enemy_LIFE_POINT <= 5 && Section.num === "36" && Section.subnum === 0) { //三つ目獣を気絶
        add_msg("三つ目獣を気絶させた!");
        combat.result();    //戦後処理へ
    } else if (combat.round === 4 && Section.num === "131") { // 4ラウンド終了
        add_msg("4ラウンド終了。");
        combat.result();    //戦後処理へ
    } else if (combat.round === 4 && Section.num === "146") { // 4ラウンド終了
        add_msg("4ラウンド終了。");
        combat.result();    //戦後処理へ
    } else {
        if (enemy[i].wolf_double_speed === 1) {
            add_msg("狼は素早いのでもう一回攻撃できる。");
            enemy[i].wolf_double_speed = 2;
            combat.enemy_select(i);
        } else {
            if (enemy[i].wolf_double_speed === 2) {
                enemy[i].wolf_double_speed = 1;
            }

            if (i !== enemy.length - 1) {
                i++;
                combat.enemy_select(i);
            } else {
                combat.Pip_select();
            }
        }
    }
}

タグ:

+ タグ編集
  • タグ:
最終更新:2012年04月03日 20:00